diff --git a/docs/assets/CSS2DRenderer-3bb201fb.js b/docs/assets/CSS2DRenderer-3bb201fb.js new file mode 100644 index 0000000..a5473e1 --- /dev/null +++ b/docs/assets/CSS2DRenderer-3bb201fb.js @@ -0,0 +1 @@ +import{O as z,b as A,V as p,d as w}from"./mapSource-2c762b60.js";class q extends z{constructor(l=document.createElement("div")){super(),this.isCSS2DObject=!0,this.element=l,this.element.style.position="absolute",this.element.style.userSelect="none",this.element.setAttribute("draggable",!1),this.center=new A(.5,.5),this.addEventListener("removed",function(){this.traverse(function(s){s.element instanceof Element&&s.element.parentNode!==null&&s.element.parentNode.removeChild(s.element)})})}copy(l,s){return super.copy(l,s),this.element=l.element.cloneNode(!0),this.center=l.center,this}}const d=new p,S=new w,v=new w,O=new p,g=new p;class T{constructor(l={}){const s=this;let a,u,c,h;const f={objects:new WeakMap},o=l.element!==void 0?l.element:document.createElement("div");o.style.overflow="hidden",this.domElement=o,this.getSize=function(){return{width:a,height:u}},this.render=function(e,t){e.matrixWorldAutoUpdate===!0&&e.updateMatrixWorld(),t.parent===null&&t.matrixWorldAutoUpdate===!0&&t.updateMatrixWorld(),S.copy(t.matrixWorldInverse),v.multiplyMatrices(t.projectionMatrix,S),y(e,e,t),D(e)},this.setSize=function(e,t){a=e,u=t,c=a/2,h=u/2,o.style.width=e+"px",o.style.height=t+"px"};function x(e){e.isCSS2DObject&&(e.element.style.display="none");for(let t=0,r=e.children.length;t=-1&&d.z<=1&&e.layers.test(r.layers)===!0,i=e.element;i.style.display=n===!0?"":"none",n===!0&&(e.onBeforeRender(s,t,r),i.style.transform="translate("+-100*e.center.x+"%,"+-100*e.center.y+"%)translate("+(d.x*c+c)+"px,"+(-d.y*h+h)+"px)",i.parentNode!==o&&o.appendChild(i),e.onAfterRender(s,t,r));const m={distanceToCameraSquared:C(r,e)};f.objects.set(e,m)}for(let n=0,i=e.children.length;n=2.0 are supported."));return}const c=new Ht(r,{path:e||this.resourcePath||"",crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});c.fileLoader.setRequestHeader(this.requestHeader);for(let l=0;l=0&&a[u]===void 0&&console.warn('THREE.GLTFLoader: Unknown extension "'+u+'".')}}c.setExtensions(s),c.setPlugins(a),c.parse(i,n)}parseAsync(t,e){const i=this;return new Promise(function(n,r){i.parse(t,e,n,r)})}}function rt(){let f={};return{get:function(t){return f[t]},add:function(t,e){f[t]=e},remove:function(t){delete f[t]},removeAll:function(){f={}}}}const A={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_DISPERSION:"KHR_materials_dispersion",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 it{constructor(t){this.parser=t,this.name=A.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){const t=this.parser,e=this.parser.json.nodes||[];for(let i=0,n=e.length;i=0)throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");return null}return e.loadTextureImage(t,r.source,s)}}class Rt{constructor(t){this.parser=t,this.name=A.EXT_TEXTURE_WEBP,this.isSupported=null}loadTexture(t){const e=this.name,i=this.parser,n=i.json,r=n.textures[t];if(!r.extensions||!r.extensions[e])return null;const s=r.extensions[e],a=n.images[s.source];let o=i.textureLoader;if(a.uri){const c=i.options.manager.getHandler(a.uri);c!==null&&(o=c)}return this.detectSupport().then(function(c){if(c)return i.loadTextureImage(t,s.source,o);if(n.extensionsRequired&&n.extensionsRequired.indexOf(e)>=0)throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported.");return i.loadTexture(t)})}detectSupport(){return this.isSupported||(this.isSupported=new Promise(function(t){const e=new Image;e.src="data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA",e.onload=e.onerror=function(){t(e.height===1)}})),this.isSupported}}class xt{constructor(t){this.parser=t,this.name=A.EXT_TEXTURE_AVIF,this.isSupported=null}loadTexture(t){const e=this.name,i=this.parser,n=i.json,r=n.textures[t];if(!r.extensions||!r.extensions[e])return null;const s=r.extensions[e],a=n.images[s.source];let o=i.textureLoader;if(a.uri){const c=i.options.manager.getHandler(a.uri);c!==null&&(o=c)}return this.detectSupport().then(function(c){if(c)return i.loadTextureImage(t,s.source,o);if(n.extensionsRequired&&n.extensionsRequired.indexOf(e)>=0)throw new Error("THREE.GLTFLoader: AVIF required by asset but unsupported.");return i.loadTexture(t)})}detectSupport(){return this.isSupported||(this.isSupported=new Promise(function(t){const e=new Image;e.src="data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=",e.onload=e.onerror=function(){t(e.height===1)}})),this.isSupported}}class Et{constructor(t){this.name=A.EXT_MESHOPT_COMPRESSION,this.parser=t}loadBufferView(t){const e=this.parser.json,i=e.bufferViews[t];if(i.extensions&&i.extensions[this.name]){const n=i.extensions[this.name],r=this.parser.getDependency("buffer",n.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(a){const o=n.byteOffset||0,c=n.byteLength||0,l=n.count,u=n.byteStride,d=new Uint8Array(a,o,c);return s.decodeGltfBufferAsync?s.decodeGltfBufferAsync(l,u,d,n.mode,n.filter).then(function(h){return h.buffer}):s.ready.then(function(){const h=new ArrayBuffer(l*u);return s.decodeGltfBuffer(new Uint8Array(h),l,u,d,n.mode,n.filter),h})})}else return null}}class _t{constructor(t){this.name=A.EXT_MESH_GPU_INSTANCING,this.parser=t}createNodeMesh(t){const e=this.parser.json,i=e.nodes[t];if(!i.extensions||!i.extensions[this.name]||i.mesh===void 0)return null;const n=e.meshes[i.mesh];for(const c of n.primitives)if(c.mode!==_.TRIANGLES&&c.mode!==_.TRIANGLE_STRIP&&c.mode!==_.TRIANGLE_FAN&&c.mode!==void 0)return null;const s=i.extensions[this.name].attributes,a=[],o={};for(const c in s)a.push(this.parser.getDependency("accessor",s[c]).then(l=>(o[c]=l,o[c])));return a.length<1?null:(a.push(this.parser.createNodeMesh(t)),Promise.all(a).then(c=>{const l=c.pop(),u=l.isGroup?l.children:[l],d=c[0].count,h=[];for(const p of u){const T=new U,m=new F,g=new Ae,x=new F(1,1,1),E=new Se(p.geometry,p.material,d);for(let R=0;R0||f.search(/^data\:image\/jpeg/)===0?"image/jpeg":f.search(/\.webp($|\?)/i)>0||f.search(/^data\:image\/webp/)===0?"image/webp":"image/png"}const Pt=new U;class Ht{constructor(t={},e={}){this.json=t,this.extensions={},this.plugins={},this.options=e,this.cache=new rt,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 i=!1,n=!1,r=-1;typeof navigator<"u"&&(i=/^((?!chrome|android).)*safari/i.test(navigator.userAgent)===!0,n=navigator.userAgent.indexOf("Firefox")>-1,r=n?navigator.userAgent.match(/Firefox\/([0-9]+)\./)[1]:-1),typeof createImageBitmap>"u"||i||n&&r<98?this.textureLoader=new be(this.options.manager):this.textureLoader=new ye(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new ue(this.options.manager),this.fileLoader.setResponseType("arraybuffer"),this.options.crossOrigin==="use-credentials"&&this.fileLoader.setWithCredentials(!0)}setExtensions(t){this.extensions=t}setPlugins(t){this.plugins=t}parse(t,e){const i=this,n=this.json,r=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll(function(s){return s._markDefs&&s._markDefs()}),Promise.all(this._invokeAll(function(s){return s.beforeRoot&&s.beforeRoot()})).then(function(){return Promise.all([i.getDependencies("scene"),i.getDependencies("animation"),i.getDependencies("camera")])}).then(function(s){const a={scene:s[0][n.scene||0],scenes:s[0],animations:s[1],cameras:s[2],asset:n.asset,parser:i,userData:{}};return O(r,a,n),b(a,n),Promise.all(i._invokeAll(function(o){return o.afterRoot&&o.afterRoot(a)})).then(function(){for(const o of a.scenes)o.updateMatrixWorld();t(a)})}).catch(e)}_markDefs(){const t=this.json.nodes||[],e=this.json.skins||[],i=this.json.meshes||[];for(let n=0,r=e.length;n{const o=this.associations.get(s);o!=null&&this.associations.set(a,o);for(const[c,l]of s.children.entries())r(l,a.children[c])};return r(i,n),n.name+="_instance_"+t.uses[e]++,n}_invokeOne(t){const e=Object.values(this.plugins);e.push(this);for(let i=0;i=2&&m.setY(N,w[L*o+1]),o>=3&&m.setZ(N,w[L*o+2]),o>=4&&m.setW(N,w[L*o+3]),o>=5)throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}}return m})}loadTexture(t){const e=this.json,i=this.options,r=e.textures[t].source,s=e.images[r];let a=this.textureLoader;if(s.uri){const o=i.manager.getHandler(s.uri);o!==null&&(a=o)}return this.loadTextureImage(t,r,a)}loadTextureImage(t,e,i){const n=this,r=this.json,s=r.textures[t],a=r.images[e],o=(a.uri||a.bufferView)+":"+s.sampler;if(this.textureCache[o])return this.textureCache[o];const c=this.loadImageSource(e,i).then(function(l){l.flipY=!1,l.name=s.name||a.name||"",l.name===""&&typeof a.uri=="string"&&a.uri.startsWith("data:image/")===!1&&(l.name=a.uri);const d=(r.samplers||{})[s.sampler]||{};return l.magFilter=ie[d.magFilter]||de,l.minFilter=ie[d.minFilter]||he,l.wrapS=oe[d.wrapS]||Y,l.wrapT=oe[d.wrapT]||Y,n.associations.set(l,{textures:t}),l}).catch(function(){return null});return this.textureCache[o]=c,c}loadImageSource(t,e){const i=this,n=this.json,r=this.options;if(this.sourceCache[t]!==void 0)return this.sourceCache[t].then(u=>u.clone());const s=n.images[t],a=self.URL||self.webkitURL;let o=s.uri||"",c=!1;if(s.bufferView!==void 0)o=i.getDependency("bufferView",s.bufferView).then(function(u){c=!0;const d=new Blob([u],{type:s.mimeType});return o=a.createObjectURL(d),o});else if(s.uri===void 0)throw new Error("THREE.GLTFLoader: Image "+t+" is missing URI and bufferView");const l=Promise.resolve(o).then(function(u){return new Promise(function(d,h){let p=d;e.isImageBitmapLoader===!0&&(p=function(T){const m=new $(T);m.needsUpdate=!0,d(m)}),e.load(G.resolveURL(u,r.path),p,void 0,h)})}).then(function(u){return c===!0&&a.revokeObjectURL(o),b(u,s),u.userData.mimeType=s.mimeType||Dt(s.uri),u}).catch(function(u){throw console.error("THREE.GLTFLoader: Couldn't load texture",o),u});return this.sourceCache[t]=l,l}assignTexture(t,e,i,n){const r=this;return this.getDependency("texture",i.index).then(function(s){if(!s)return null;if(i.texCoord!==void 0&&i.texCoord>0&&(s=s.clone(),s.channel=i.texCoord),r.extensions[A.KHR_TEXTURE_TRANSFORM]){const a=i.extensions!==void 0?i.extensions[A.KHR_TEXTURE_TRANSFORM]:void 0;if(a){const o=r.associations.get(s);s=r.extensions[A.KHR_TEXTURE_TRANSFORM].extendTexture(s,a),r.associations.set(s,o)}}return n!==void 0&&(s.colorSpace=n),t[e]=s,s})}assignFinalMaterial(t){const e=t.geometry;let i=t.material;const n=e.attributes.tangent===void 0,r=e.attributes.color!==void 0,s=e.attributes.normal===void 0;if(t.isPoints){const a="PointsMaterial:"+i.uuid;let o=this.cache.get(a);o||(o=new Ne,K.prototype.copy.call(o,i),o.color.copy(i.color),o.map=i.map,o.sizeAttenuation=!1,this.cache.add(a,o)),i=o}else if(t.isLine){const a="LineBasicMaterial:"+i.uuid;let o=this.cache.get(a);o||(o=new Ie,K.prototype.copy.call(o,i),o.color.copy(i.color),o.map=i.map,this.cache.add(a,o)),i=o}if(n||r||s){let a="ClonedMaterial:"+i.uuid+":";n&&(a+="derivative-tangents:"),r&&(a+="vertex-colors:"),s&&(a+="flat-shading:");let o=this.cache.get(a);o||(o=i.clone(),r&&(o.vertexColors=!0),s&&(o.flatShading=!0),n&&(o.normalScale&&(o.normalScale.y*=-1),o.clearcoatNormalScale&&(o.clearcoatNormalScale.y*=-1)),this.cache.add(a,o),this.associations.set(o,this.associations.get(i))),i=o}t.material=i}getMaterialType(){return pe}loadMaterial(t){const e=this,i=this.json,n=this.extensions,r=i.materials[t];let s;const a={},o=r.extensions||{},c=[];if(o[A.KHR_MATERIALS_UNLIT]){const u=n[A.KHR_MATERIALS_UNLIT];s=u.getMaterialType(),c.push(u.extendParams(a,r,e))}else{const u=r.pbrMetallicRoughness||{};if(a.color=new C(1,1,1),a.opacity=1,Array.isArray(u.baseColorFactor)){const d=u.baseColorFactor;a.color.setRGB(d[0],d[1],d[2],y),a.opacity=d[3]}u.baseColorTexture!==void 0&&c.push(e.assignTexture(a,"map",u.baseColorTexture,B)),a.metalness=u.metallicFactor!==void 0?u.metallicFactor:1,a.roughness=u.roughnessFactor!==void 0?u.roughnessFactor:1,u.metallicRoughnessTexture!==void 0&&(c.push(e.assignTexture(a,"metalnessMap",u.metallicRoughnessTexture)),c.push(e.assignTexture(a,"roughnessMap",u.metallicRoughnessTexture))),s=this._invokeOne(function(d){return d.getMaterialType&&d.getMaterialType(t)}),c.push(Promise.all(this._invokeAll(function(d){return d.extendMaterialParams&&d.extendMaterialParams(t,a)})))}r.doubleSided===!0&&(a.side=Oe);const l=r.alphaMode||z.OPAQUE;if(l===z.BLEND?(a.transparent=!0,a.depthWrite=!1):(a.transparent=!1,l===z.MASK&&(a.alphaTest=r.alphaCutoff!==void 0?r.alphaCutoff:.5)),r.normalTexture!==void 0&&s!==k&&(c.push(e.assignTexture(a,"normalMap",r.normalTexture)),a.normalScale=new le(1,1),r.normalTexture.scale!==void 0)){const u=r.normalTexture.scale;a.normalScale.set(u,u)}if(r.occlusionTexture!==void 0&&s!==k&&(c.push(e.assignTexture(a,"aoMap",r.occlusionTexture)),r.occlusionTexture.strength!==void 0&&(a.aoMapIntensity=r.occlusionTexture.strength)),r.emissiveFactor!==void 0&&s!==k){const u=r.emissiveFactor;a.emissive=new C().setRGB(u[0],u[1],u[2],y)}return r.emissiveTexture!==void 0&&s!==k&&c.push(e.assignTexture(a,"emissiveMap",r.emissiveTexture,B)),Promise.all(c).then(function(){const u=new s(a);return r.name&&(u.name=r.name),b(u,r),e.associations.set(u,{materials:t}),r.extensions&&O(n,u,r),u})}createUniqueName(t){const e=Ce.sanitizeNodeName(t||"");return e in this.nodeNamesUsed?e+"_"+ ++this.nodeNamesUsed[e]:(this.nodeNamesUsed[e]=0,e)}loadGeometries(t){const e=this,i=this.extensions,n=this.primitiveCache;function r(a){return i[A.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(a,e).then(function(o){return ae(o,a,e)})}const s=[];for(let a=0,o=t.length;a0&&Ct(g,r),g.name=e.createUniqueName(r.name||"mesh_"+t),b(g,r),m.extensions&&O(n,g,m),e.assignFinalMaterial(g),u.push(g)}for(let h=0,p=u.length;h1?l=new V:c.length===1?l=c[0]:l=new fe,l!==c[0])for(let u=0,d=c.length;u{const u=new Map;for(const[d,h]of n.associations)(d instanceof K||d instanceof $)&&u.set(d,h);return l.traverse(d=>{const h=n.associations.get(d);h!=null&&u.set(d,h)}),u};return n.associations=c(r),r})}_createAnimationTracks(t,e,i,n,r){const s=[],a=t.name?t.name:t.uuid,o=[];I[r.path]===I.weights?t.traverse(function(d){d.morphTargetInfluences&&o.push(d.name?d.name:d.uuid)}):o.push(a);let c;switch(I[r.path]){case I.weights:c=te;break;case I.rotation:c=ne;break;case I.position:case I.scale:c=ee;break;default:switch(i.itemSize){case 1:c=te;break;case 2:case 3:default:c=ee;break}break}const l=n.interpolation!==void 0?Nt[n.interpolation]:me,u=this._getArrayFromAccessor(i);for(let d=0,h=o.length;dMath.PI&&(h-=d),f<-Math.PI?f+=d:f>Math.PI&&(f-=d),h<=f?s.theta=Math.max(h,Math.min(f,s.theta)):s.theta=s.theta>(h+f)/2?Math.max(h,s.theta):Math.min(f,s.theta)),s.phi=Math.max(e.minPolarAngle,Math.min(e.maxPolarAngle,s.phi)),s.makeSafe(),e.enableDamping===!0?e.target.addScaledVector(A,e.dampingFactor):e.target.add(A),e.target.sub(e.cursor),e.target.clampLength(e.minTargetRadius,e.maxTargetRadius),e.target.add(e.cursor);let _=!1;if(e.zoomToCursor&&K||e.object.isOrthographicCamera)s.radius=Q(s.radius);else{const b=s.radius;s.radius=Q(s.radius*P),_=b!=s.radius}if(t.setFromSpherical(s),t.applyQuaternion(n),Ee.copy(e.target).add(t),e.object.lookAt(e.target),e.enableDamping===!0?(p.theta*=1-e.dampingFactor,p.phi*=1-e.dampingFactor,A.multiplyScalar(1-e.dampingFactor)):(p.set(0,0,0),A.set(0,0,0)),e.zoomToCursor&&K){let b=null;if(e.object.isPerspectiveCamera){const H=t.length();b=Q(H*P);const X=H-b;e.object.position.addScaledVector(ee,X),e.object.updateMatrixWorld(),_=!!X}else if(e.object.isOrthographicCamera){const H=new u(g.x,g.y,0);H.unproject(e.object);const X=e.object.zoom;e.object.zoom=Math.max(e.minZoom,Math.min(e.maxZoom,e.object.zoom/P)),e.object.updateProjectionMatrix(),_=X!==e.object.zoom;const Te=new u(g.x,g.y,0);Te.unproject(e.object),e.object.position.sub(Te).add(H),e.object.updateMatrixWorld(),b=t.length()}else console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."),e.zoomToCursor=!1;b!==null&&(this.screenSpacePanning?e.target.set(0,0,-1).transformDirection(e.object.matrix).multiplyScalar(b).add(e.object.position):(F.origin.copy(e.object.position),F.direction.set(0,0,-1).transformDirection(e.object.matrix),Math.abs(e.object.up.dot(F.direction))W||8*(1-l.dot(e.object.quaternion))>W||E.distanceToSquared(e.target)>W?(e.dispatchEvent(we),i.copy(e.object.position),l.copy(e.object.quaternion),E.copy(e.target),!0):!1}}(),this.dispose=function(){e.domElement.removeEventListener("contextmenu",ye),e.domElement.removeEventListener("pointerdown",me),e.domElement.removeEventListener("pointercancel",z),e.domElement.removeEventListener("wheel",pe),e.domElement.removeEventListener("pointermove",v),e.domElement.removeEventListener("pointerup",z),e.domElement.getRootNode().removeEventListener("keydown",he,{capture:!0}),e._domElementKeyEvents!==null&&(e._domElementKeyEvents.removeEventListener("keydown",J),e._domElementKeyEvents=null)};const e=this,a={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6};let r=a.NONE;const W=1e-6,s=new Oe,p=new Oe;let P=1;const A=new u,O=new m,w=new m,D=new m,M=new m,j=new m,R=new m,x=new m,N=new m,L=new m,ee=new u,g=new m;let K=!1;const c=[],C={};let G=!1;function Ae(t){return t!==null?2*Math.PI/60*e.autoRotateSpeed*t:2*Math.PI/60/60*e.autoRotateSpeed}function U(t){const o=Math.abs(t*.01);return Math.pow(.95,e.zoomSpeed*o)}function Y(t){p.theta-=t}function Z(t){p.phi-=t}const te=function(){const t=new u;return function(n,i){t.setFromMatrixColumn(i,0),t.multiplyScalar(-n),A.add(t)}}(),oe=function(){const t=new u;return function(n,i){e.screenSpacePanning===!0?t.setFromMatrixColumn(i,1):(t.setFromMatrixColumn(i,0),t.crossVectors(e.object.up,t)),t.multiplyScalar(n),A.add(t)}}(),k=function(){const t=new u;return function(n,i){const l=e.domElement;if(e.object.isPerspectiveCamera){const E=e.object.position;t.copy(E).sub(e.target);let d=t.length();d*=Math.tan(e.object.fov/2*Math.PI/180),te(2*n*d/l.clientHeight,e.object.matrix),oe(2*i*d/l.clientHeight,e.object.matrix)}else e.object.isOrthographicCamera?(te(n*(e.object.right-e.object.left)/e.object.zoom/l.clientWidth,e.object.matrix),oe(i*(e.object.top-e.object.bottom)/e.object.zoom/l.clientHeight,e.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),e.enablePan=!1)}}();function B(t){e.object.isPerspectiveCamera||e.object.isOrthographicCamera?P/=t:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),e.enableZoom=!1)}function ne(t){e.object.isPerspectiveCamera||e.object.isOrthographicCamera?P*=t:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),e.enableZoom=!1)}function q(t,o){if(!e.zoomToCursor)return;K=!0;const n=e.domElement.getBoundingClientRect(),i=t-n.left,l=o-n.top,E=n.width,d=n.height;g.x=i/E*2-1,g.y=-(l/d)*2+1,ee.set(g.x,g.y,1).unproject(e.object).sub(e.object.position).normalize()}function Q(t){return Math.max(e.minDistance,Math.min(e.maxDistance,t))}function ae(t){O.set(t.clientX,t.clientY)}function De(t){q(t.clientX,t.clientX),x.set(t.clientX,t.clientY)}function ie(t){M.set(t.clientX,t.clientY)}function Re(t){w.set(t.clientX,t.clientY),D.subVectors(w,O).multiplyScalar(e.rotateSpeed);const o=e.domElement;Y(2*Math.PI*D.x/o.clientHeight),Z(2*Math.PI*D.y/o.clientHeight),O.copy(w),e.update()}function xe(t){N.set(t.clientX,t.clientY),L.subVectors(N,x),L.y>0?B(U(L.y)):L.y<0&&ne(U(L.y)),x.copy(N),e.update()}function Ne(t){j.set(t.clientX,t.clientY),R.subVectors(j,M).multiplyScalar(e.panSpeed),k(R.x,R.y),M.copy(j),e.update()}function ke(t){q(t.clientX,t.clientY),t.deltaY<0?ne(U(t.deltaY)):t.deltaY>0&&B(U(t.deltaY)),e.update()}function Se(t){let o=!1;switch(t.code){case e.keys.UP:t.ctrlKey||t.metaKey||t.shiftKey?Z(2*Math.PI*e.rotateSpeed/e.domElement.clientHeight):k(0,e.keyPanSpeed),o=!0;break;case e.keys.BOTTOM:t.ctrlKey||t.metaKey||t.shiftKey?Z(-2*Math.PI*e.rotateSpeed/e.domElement.clientHeight):k(0,-e.keyPanSpeed),o=!0;break;case e.keys.LEFT:t.ctrlKey||t.metaKey||t.shiftKey?Y(2*Math.PI*e.rotateSpeed/e.domElement.clientHeight):k(e.keyPanSpeed,0),o=!0;break;case e.keys.RIGHT:t.ctrlKey||t.metaKey||t.shiftKey?Y(-2*Math.PI*e.rotateSpeed/e.domElement.clientHeight):k(-e.keyPanSpeed,0),o=!0;break}o&&(t.preventDefault(),e.update())}function se(t){if(c.length===1)O.set(t.pageX,t.pageY);else{const o=S(t),n=.5*(t.pageX+o.x),i=.5*(t.pageY+o.y);O.set(n,i)}}function re(t){if(c.length===1)M.set(t.pageX,t.pageY);else{const o=S(t),n=.5*(t.pageX+o.x),i=.5*(t.pageY+o.y);M.set(n,i)}}function ce(t){const o=S(t),n=t.pageX-o.x,i=t.pageY-o.y,l=Math.sqrt(n*n+i*i);x.set(0,l)}function Ie(t){e.enableZoom&&ce(t),e.enablePan&&re(t)}function Ce(t){e.enableZoom&&ce(t),e.enableRotate&&se(t)}function le(t){if(c.length==1)w.set(t.pageX,t.pageY);else{const n=S(t),i=.5*(t.pageX+n.x),l=.5*(t.pageY+n.y);w.set(i,l)}D.subVectors(w,O).multiplyScalar(e.rotateSpeed);const o=e.domElement;Y(2*Math.PI*D.x/o.clientHeight),Z(2*Math.PI*D.y/o.clientHeight),O.copy(w)}function ue(t){if(c.length===1)j.set(t.pageX,t.pageY);else{const o=S(t),n=.5*(t.pageX+o.x),i=.5*(t.pageY+o.y);j.set(n,i)}R.subVectors(j,M).multiplyScalar(e.panSpeed),k(R.x,R.y),M.copy(j)}function de(t){const o=S(t),n=t.pageX-o.x,i=t.pageY-o.y,l=Math.sqrt(n*n+i*i);N.set(0,l),L.set(0,Math.pow(N.y/x.y,e.zoomSpeed)),B(L.y),x.copy(N);const E=(t.pageX+o.x)*.5,d=(t.pageY+o.y)*.5;q(E,d)}function Ye(t){e.enableZoom&&de(t),e.enablePan&&ue(t)}function ze(t){e.enableZoom&&de(t),e.enableRotate&&le(t)}function me(t){e.enabled!==!1&&(c.length===0&&(e.domElement.setPointerCapture(t.pointerId),e.domElement.addEventListener("pointermove",v),e.domElement.addEventListener("pointerup",z)),!Fe(t)&&(Ze(t),t.pointerType==="touch"?be(t):_e(t)))}function v(t){e.enabled!==!1&&(t.pointerType==="touch"?Ue(t):He(t))}function z(t){switch(Xe(t),c.length){case 0:e.domElement.releasePointerCapture(t.pointerId),e.domElement.removeEventListener("pointermove",v),e.domElement.removeEventListener("pointerup",z),e.dispatchEvent(Me),r=a.NONE;break;case 1:const o=c[0],n=C[o];be({pointerId:o,pageX:n.x,pageY:n.y});break}}function _e(t){let o;switch(t.button){case 0:o=e.mouseButtons.LEFT;break;case 1:o=e.mouseButtons.MIDDLE;break;case 2:o=e.mouseButtons.RIGHT;break;default:o=-1}switch(o){case y.DOLLY:if(e.enableZoom===!1)return;De(t),r=a.DOLLY;break;case y.ROTATE:if(t.ctrlKey||t.metaKey||t.shiftKey){if(e.enablePan===!1)return;ie(t),r=a.PAN}else{if(e.enableRotate===!1)return;ae(t),r=a.ROTATE}break;case y.PAN:if(t.ctrlKey||t.metaKey||t.shiftKey){if(e.enableRotate===!1)return;ae(t),r=a.ROTATE}else{if(e.enablePan===!1)return;ie(t),r=a.PAN}break;default:r=a.NONE}r!==a.NONE&&e.dispatchEvent($)}function He(t){switch(r){case a.ROTATE:if(e.enableRotate===!1)return;Re(t);break;case a.DOLLY:if(e.enableZoom===!1)return;xe(t);break;case a.PAN:if(e.enablePan===!1)return;Ne(t);break}}function pe(t){e.enabled===!1||e.enableZoom===!1||r!==a.NONE||(t.preventDefault(),e.dispatchEvent($),ke(Ke(t)),e.dispatchEvent(Me))}function Ke(t){const o=t.deltaMode,n={clientX:t.clientX,clientY:t.clientY,deltaY:t.deltaY};switch(o){case 1:n.deltaY*=16;break;case 2:n.deltaY*=100;break}return t.ctrlKey&&!G&&(n.deltaY*=10),n}function he(t){t.key==="Control"&&(G=!0,e.domElement.getRootNode().addEventListener("keyup",fe,{passive:!0,capture:!0}))}function fe(t){t.key==="Control"&&(G=!1,e.domElement.getRootNode().removeEventListener("keyup",fe,{passive:!0,capture:!0}))}function J(t){e.enabled===!1||e.enablePan===!1||Se(t)}function be(t){switch(ge(t),c.length){case 1:switch(e.touches.ONE){case T.ROTATE:if(e.enableRotate===!1)return;se(t),r=a.TOUCH_ROTATE;break;case T.PAN:if(e.enablePan===!1)return;re(t),r=a.TOUCH_PAN;break;default:r=a.NONE}break;case 2:switch(e.touches.TWO){case T.DOLLY_PAN:if(e.enableZoom===!1&&e.enablePan===!1)return;Ie(t),r=a.TOUCH_DOLLY_PAN;break;case T.DOLLY_ROTATE:if(e.enableZoom===!1&&e.enableRotate===!1)return;Ce(t),r=a.TOUCH_DOLLY_ROTATE;break;default:r=a.NONE}break;default:r=a.NONE}r!==a.NONE&&e.dispatchEvent($)}function Ue(t){switch(ge(t),r){case a.TOUCH_ROTATE:if(e.enableRotate===!1)return;le(t),e.update();break;case a.TOUCH_PAN:if(e.enablePan===!1)return;ue(t),e.update();break;case a.TOUCH_DOLLY_PAN:if(e.enableZoom===!1&&e.enablePan===!1)return;Ye(t),e.update();break;case a.TOUCH_DOLLY_ROTATE:if(e.enableZoom===!1&&e.enableRotate===!1)return;ze(t),e.update();break;default:r=a.NONE}}function ye(t){e.enabled!==!1&&t.preventDefault()}function Ze(t){c.push(t.pointerId)}function Xe(t){delete C[t.pointerId];for(let o=0;o degrees, and the cosine of that + const float sunAngularDiameterCos = 0.999956676946448443553574619906976478926848692873900859324; + + // 3.0 / ( 16.0 * pi ) + const float THREE_OVER_SIXTEENPI = 0.05968310365946075; + // 1.0 / ( 4.0 * pi ) + const float ONE_OVER_FOURPI = 0.07957747154594767; + + float rayleighPhase( float cosTheta ) { + return THREE_OVER_SIXTEENPI * ( 1.0 + pow( cosTheta, 2.0 ) ); + } + + float hgPhase( float cosTheta, float g ) { + float g2 = pow( g, 2.0 ); + float inverse = 1.0 / pow( 1.0 - 2.0 * g * cosTheta + g2, 1.5 ); + return ONE_OVER_FOURPI * ( ( 1.0 - g2 ) * inverse ); + } + + void main() { + + vec3 direction = normalize( vWorldPosition - cameraPosition ); + + // optical length + // cutoff angle at 90 to avoid singularity in next formula. + float zenithAngle = acos( max( 0.0, dot( up, direction ) ) ); + float inverse = 1.0 / ( cos( zenithAngle ) + 0.15 * pow( 93.885 - ( ( zenithAngle * 180.0 ) / pi ), -1.253 ) ); + float sR = rayleighZenithLength * inverse; + float sM = mieZenithLength * inverse; + + // combined extinction factor + vec3 Fex = exp( -( vBetaR * sR + vBetaM * sM ) ); + + // in scattering + float cosTheta = dot( direction, vSunDirection ); + + float rPhase = rayleighPhase( cosTheta * 0.5 + 0.5 ); + vec3 betaRTheta = vBetaR * rPhase; + + float mPhase = hgPhase( cosTheta, mieDirectionalG ); + vec3 betaMTheta = vBetaM * mPhase; + + vec3 Lin = pow( vSunE * ( ( betaRTheta + betaMTheta ) / ( vBetaR + vBetaM ) ) * ( 1.0 - Fex ), vec3( 1.5 ) ); + Lin *= mix( vec3( 1.0 ), pow( vSunE * ( ( betaRTheta + betaMTheta ) / ( vBetaR + vBetaM ) ) * Fex, vec3( 1.0 / 2.0 ) ), clamp( pow( 1.0 - dot( up, vSunDirection ), 5.0 ), 0.0, 1.0 ) ); + + // nightsky + float theta = acos( direction.y ); // elevation --> y-axis, [-pi/2, pi/2] + float phi = atan( direction.z, direction.x ); // azimuth --> x-axis [-pi/2, pi/2] + vec2 uv = vec2( phi, theta ) / vec2( 2.0 * pi, pi ) + vec2( 0.5, 0.0 ); + vec3 L0 = vec3( 0.1 ) * Fex; + + // composition + solar disc + float sundisk = smoothstep( sunAngularDiameterCos, sunAngularDiameterCos + 0.00002, cosTheta ); + L0 += ( vSunE * 19000.0 * Fex ) * sundisk; + + vec3 texColor = ( Lin + L0 ) * 0.04 + vec3( 0.0, 0.0003, 0.00075 ); + + vec3 retColor = pow( texColor, vec3( 1.0 / ( 1.2 + ( 1.2 * vSunfade ) ) ) ); + + gl_FragColor = vec4( retColor, 1.0 ); + + #include + #include + + }`};export{t as S}; diff --git a/docs/assets/TeapotGeometry-eb533028.js b/docs/assets/TeapotGeometry-eb533028.js new file mode 100644 index 0000000..b25d96d --- /dev/null +++ b/docs/assets/TeapotGeometry-eb533028.js @@ -0,0 +1 @@ +import{Z as p2,d as v,V,a6 as C,a0 as z}from"./mapSource-2c762b60.js";class d2 extends p2{constructor(s2=50,s=10,P=!0,B=!0,F=!0,c2=!0,E=!0){const a2=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,3,16,17,18,7,19,20,21,11,22,23,24,15,25,26,27,18,28,29,30,21,31,32,33,24,34,35,36,27,37,38,39,30,40,41,0,33,42,43,4,36,44,45,8,39,46,47,12,12,13,14,15,48,49,50,51,52,53,54,55,56,57,58,59,15,25,26,27,51,60,61,62,55,63,64,65,59,66,67,68,27,37,38,39,62,69,70,71,65,72,73,74,68,75,76,77,39,46,47,12,71,78,79,48,74,80,81,52,77,82,83,56,56,57,58,59,84,85,86,87,88,89,90,91,92,93,94,95,59,66,67,68,87,96,97,98,91,99,100,101,95,102,103,104,68,75,76,77,98,105,106,107,101,108,109,110,104,111,112,113,77,82,83,56,107,114,115,84,110,116,117,88,113,118,119,92,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,123,136,137,120,127,138,139,124,131,140,141,128,135,142,143,132,132,133,134,135,144,145,146,147,148,149,150,151,68,152,153,154,135,142,143,132,147,155,156,144,151,157,158,148,154,159,160,68,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,164,177,178,161,168,179,180,165,172,181,182,169,176,183,184,173,173,174,175,176,185,186,187,188,189,190,191,192,193,194,195,196,176,183,184,173,188,197,198,185,192,199,200,189,196,201,202,193,203,203,203,203,204,205,206,207,208,208,208,208,209,210,211,212,203,203,203,203,207,213,214,215,208,208,208,208,212,216,217,218,203,203,203,203,215,219,220,221,208,208,208,208,218,222,223,224,203,203,203,203,221,225,226,204,208,208,208,208,224,227,228,209,209,210,211,212,229,230,231,232,233,234,235,236,237,238,239,240,212,216,217,218,232,241,242,243,236,244,245,246,240,247,248,249,218,222,223,224,243,250,251,252,246,253,254,255,249,256,257,258,224,227,228,209,252,259,260,229,255,261,262,233,258,263,264,237,265,265,265,265,266,267,268,269,270,271,272,273,92,119,118,113,265,265,265,265,269,274,275,276,273,277,278,279,113,112,111,104,265,265,265,265,276,280,281,282,279,283,284,285,104,103,102,95,265,265,265,265,282,286,287,266,285,288,289,270,95,94,93,92],l2=[1.4,0,2.4,1.4,-.784,2.4,.784,-1.4,2.4,0,-1.4,2.4,1.3375,0,2.53125,1.3375,-.749,2.53125,.749,-1.3375,2.53125,0,-1.3375,2.53125,1.4375,0,2.53125,1.4375,-.805,2.53125,.805,-1.4375,2.53125,0,-1.4375,2.53125,1.5,0,2.4,1.5,-.84,2.4,.84,-1.5,2.4,0,-1.5,2.4,-.784,-1.4,2.4,-1.4,-.784,2.4,-1.4,0,2.4,-.749,-1.3375,2.53125,-1.3375,-.749,2.53125,-1.3375,0,2.53125,-.805,-1.4375,2.53125,-1.4375,-.805,2.53125,-1.4375,0,2.53125,-.84,-1.5,2.4,-1.5,-.84,2.4,-1.5,0,2.4,-1.4,.784,2.4,-.784,1.4,2.4,0,1.4,2.4,-1.3375,.749,2.53125,-.749,1.3375,2.53125,0,1.3375,2.53125,-1.4375,.805,2.53125,-.805,1.4375,2.53125,0,1.4375,2.53125,-1.5,.84,2.4,-.84,1.5,2.4,0,1.5,2.4,.784,1.4,2.4,1.4,.784,2.4,.749,1.3375,2.53125,1.3375,.749,2.53125,.805,1.4375,2.53125,1.4375,.805,2.53125,.84,1.5,2.4,1.5,.84,2.4,1.75,0,1.875,1.75,-.98,1.875,.98,-1.75,1.875,0,-1.75,1.875,2,0,1.35,2,-1.12,1.35,1.12,-2,1.35,0,-2,1.35,2,0,.9,2,-1.12,.9,1.12,-2,.9,0,-2,.9,-.98,-1.75,1.875,-1.75,-.98,1.875,-1.75,0,1.875,-1.12,-2,1.35,-2,-1.12,1.35,-2,0,1.35,-1.12,-2,.9,-2,-1.12,.9,-2,0,.9,-1.75,.98,1.875,-.98,1.75,1.875,0,1.75,1.875,-2,1.12,1.35,-1.12,2,1.35,0,2,1.35,-2,1.12,.9,-1.12,2,.9,0,2,.9,.98,1.75,1.875,1.75,.98,1.875,1.12,2,1.35,2,1.12,1.35,1.12,2,.9,2,1.12,.9,2,0,.45,2,-1.12,.45,1.12,-2,.45,0,-2,.45,1.5,0,.225,1.5,-.84,.225,.84,-1.5,.225,0,-1.5,.225,1.5,0,.15,1.5,-.84,.15,.84,-1.5,.15,0,-1.5,.15,-1.12,-2,.45,-2,-1.12,.45,-2,0,.45,-.84,-1.5,.225,-1.5,-.84,.225,-1.5,0,.225,-.84,-1.5,.15,-1.5,-.84,.15,-1.5,0,.15,-2,1.12,.45,-1.12,2,.45,0,2,.45,-1.5,.84,.225,-.84,1.5,.225,0,1.5,.225,-1.5,.84,.15,-.84,1.5,.15,0,1.5,.15,1.12,2,.45,2,1.12,.45,.84,1.5,.225,1.5,.84,.225,.84,1.5,.15,1.5,.84,.15,-1.6,0,2.025,-1.6,-.3,2.025,-1.5,-.3,2.25,-1.5,0,2.25,-2.3,0,2.025,-2.3,-.3,2.025,-2.5,-.3,2.25,-2.5,0,2.25,-2.7,0,2.025,-2.7,-.3,2.025,-3,-.3,2.25,-3,0,2.25,-2.7,0,1.8,-2.7,-.3,1.8,-3,-.3,1.8,-3,0,1.8,-1.5,.3,2.25,-1.6,.3,2.025,-2.5,.3,2.25,-2.3,.3,2.025,-3,.3,2.25,-2.7,.3,2.025,-3,.3,1.8,-2.7,.3,1.8,-2.7,0,1.575,-2.7,-.3,1.575,-3,-.3,1.35,-3,0,1.35,-2.5,0,1.125,-2.5,-.3,1.125,-2.65,-.3,.9375,-2.65,0,.9375,-2,-.3,.9,-1.9,-.3,.6,-1.9,0,.6,-3,.3,1.35,-2.7,.3,1.575,-2.65,.3,.9375,-2.5,.3,1.125,-1.9,.3,.6,-2,.3,.9,1.7,0,1.425,1.7,-.66,1.425,1.7,-.66,.6,1.7,0,.6,2.6,0,1.425,2.6,-.66,1.425,3.1,-.66,.825,3.1,0,.825,2.3,0,2.1,2.3,-.25,2.1,2.4,-.25,2.025,2.4,0,2.025,2.7,0,2.4,2.7,-.25,2.4,3.3,-.25,2.4,3.3,0,2.4,1.7,.66,.6,1.7,.66,1.425,3.1,.66,.825,2.6,.66,1.425,2.4,.25,2.025,2.3,.25,2.1,3.3,.25,2.4,2.7,.25,2.4,2.8,0,2.475,2.8,-.25,2.475,3.525,-.25,2.49375,3.525,0,2.49375,2.9,0,2.475,2.9,-.15,2.475,3.45,-.15,2.5125,3.45,0,2.5125,2.8,0,2.4,2.8,-.15,2.4,3.2,-.15,2.4,3.2,0,2.4,3.525,.25,2.49375,2.8,.25,2.475,3.45,.15,2.5125,2.9,.15,2.475,3.2,.15,2.4,2.8,.15,2.4,0,0,3.15,.8,0,3.15,.8,-.45,3.15,.45,-.8,3.15,0,-.8,3.15,0,0,2.85,.2,0,2.7,.2,-.112,2.7,.112,-.2,2.7,0,-.2,2.7,-.45,-.8,3.15,-.8,-.45,3.15,-.8,0,3.15,-.112,-.2,2.7,-.2,-.112,2.7,-.2,0,2.7,-.8,.45,3.15,-.45,.8,3.15,0,.8,3.15,-.2,.112,2.7,-.112,.2,2.7,0,.2,2.7,.45,.8,3.15,.8,.45,3.15,.112,.2,2.7,.2,.112,2.7,.4,0,2.55,.4,-.224,2.55,.224,-.4,2.55,0,-.4,2.55,1.3,0,2.55,1.3,-.728,2.55,.728,-1.3,2.55,0,-1.3,2.55,1.3,0,2.4,1.3,-.728,2.4,.728,-1.3,2.4,0,-1.3,2.4,-.224,-.4,2.55,-.4,-.224,2.55,-.4,0,2.55,-.728,-1.3,2.55,-1.3,-.728,2.55,-1.3,0,2.55,-.728,-1.3,2.4,-1.3,-.728,2.4,-1.3,0,2.4,-.4,.224,2.55,-.224,.4,2.55,0,.4,2.55,-1.3,.728,2.55,-.728,1.3,2.55,0,1.3,2.55,-1.3,.728,2.4,-.728,1.3,2.4,0,1.3,2.4,.224,.4,2.55,.4,.224,2.55,.728,1.3,2.55,1.3,.728,2.55,.728,1.3,2.4,1.3,.728,2.4,0,0,0,1.425,0,0,1.425,.798,0,.798,1.425,0,0,1.425,0,1.5,0,.075,1.5,.84,.075,.84,1.5,.075,0,1.5,.075,-.798,1.425,0,-1.425,.798,0,-1.425,0,0,-.84,1.5,.075,-1.5,.84,.075,-1.5,0,.075,-1.425,-.798,0,-.798,-1.425,0,0,-1.425,0,-1.5,-.84,.075,-.84,-1.5,.075,0,-1.5,.075,.798,-1.425,0,1.425,-.798,0,.84,-1.5,.075,1.5,-.84,.075];super(),s=Math.max(2,Math.floor(s));const J=1.3,H=3.15*(E?1:J)/2,S=s2/H;let T=P?(8*s-4)*s:0;T+=B?(16*s-4)*s:0,T+=F?40*s*s:0;const f=new Uint32Array(T*3);let w=P?4:0;w+=B?8:0,w+=F?20:0,w*=(s+1)*(s+1);const t=new Float32Array(w*3),M=new Float32Array(w*3),x=new Float32Array(w*2),G=new v;G.set(-1,3,-3,1,3,-6,3,0,-3,3,0,0,1,0,0,0);const e=[],K=[],L=[],D=[],I=[],d=[],p=[],N=[],Q=[],m=new V;let i,O,R,l,U=0,Z=0;const h=new V,W=new v,X=new v,b=new z,j=new z,Y=new z,_=new z,$=new V,g=new V,t2=G.clone();t2.transpose();const o2=(n,o,r)=>!(t[n*3]===t[o*3]&&t[n*3+1]===t[o*3+1]&&t[n*3+2]===t[o*3+2]||t[n*3]===t[r*3]&&t[n*3+1]===t[r*3+1]&&t[n*3+2]===t[r*3+2]||t[o*3]===t[r*3]&&t[o*3+1]===t[r*3+1]&&t[o*3+2]===t[r*3+2]);for(let n=0;n<3;n++)d[n]=new v;const i2=F?0:20,f2=P?32:28,A=s+1;let r2=0,k=0,q=0,e2=0,y=0;for(let n=i2;n=28){for(let o=0;o<3;o++){for(let r=0;r<4;r++)for(let c=0;c<4;c++)e[c*4+r]=l2[a2[n*16+r*4+c]*3+o],c2&&n>=20&&n<28&&o!==2&&(e[c*4+r]*=1.077),!E&&o===2&&(e[c*4+r]*=J);W.set(e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8],e[9],e[10],e[11],e[12],e[13],e[14],e[15]),X.multiplyMatrices(W,G),d[o].multiplyMatrices(t2,X)}for(let o=0;o<=s;o++){const r=o/s;for(let c=0;c<=s;c++){const u=c/s;for(l=4,O=R=1;l--;)K[l]=O,L[l]=R,O*=r,R*=u,l===3?(D[l]=I[l]=0,U=Z=1):(D[l]=U*(3-l),I[l]=Z*(3-l),U*=r,Z*=u);b.fromArray(K),j.fromArray(L),Y.fromArray(D),_.fromArray(I);for(let a=0;a<3;a++)i=b.clone(),i.applyMatrix4(d[a]),p[a]=i.dot(j),i=Y.clone(),i.applyMatrix4(d[a]),N[a]=i.dot(j),i=b.clone(),i.applyMatrix4(d[a]),Q[a]=i.dot(_);$.fromArray(N),g.fromArray(Q),m.crossVectors(g,$),m.normalize(),p[0]===0&&p[1]===0?h.set(0,p[2]>H?1:-1,0):h.set(m.x,m.z,-m.y),t[k++]=S*p[0],t[k++]=S*(p[2]-H),t[k++]=-S*p[1],M[q++]=h.x,M[q++]=h.y,M[q++]=h.z,x[e2++]=1-u,x[e2++]=1-r}}for(let o=0;o.circle{width:60%;height:60%;text-align:center;border-radius:50%;border:1px solid #fffc;background-color:#fff4}#compass>#compass-text{position:absolute;top:0;left:0;width:100%;height:100%;display:grid;align-items:center;justify-items:center;grid-template-columns:18% auto 18%;grid-template-rows:18% auto 18%;text-shadow:0px 0px 2px black}#compass>.circle>#compass-plane{height:90%;width:90%;fill:#fffc;filter:drop-shadow(5px 5px 5px black)} diff --git a/docs/assets/mapSource-2c762b60.js b/docs/assets/mapSource-2c762b60.js new file mode 100644 index 0000000..466f95b --- /dev/null +++ b/docs/assets/mapSource-2c762b60.js @@ -0,0 +1,3860 @@ +var KI=Object.defineProperty;var WI=(n,A,t)=>A in n?KI(n,A,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[A]=t;var Y=(n,A,t)=>(WI(n,typeof A!="symbol"?A+"":A,t),t);/** + * @license + * Copyright 2010-2024 Three.js Authors + * SPDX-License-Identifier: MIT + */const jo="165",he={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},xe={ROTATE:0,PAN:1,DOLLY_PAN:2,DOLLY_ROTATE:3},VI=0,Dg=1,zI=2,_a=1,XI=2,Be=3,de=0,Lt=1,ce=2,ve=0,Ni=1,mg=2,yg=3,wg=4,ZI=5,We=100,jI=101,$I=102,AE=103,tE=104,eE=200,iE=201,nE=202,sE=203,To=204,ko=205,oE=206,gE=207,rE=208,aE=209,IE=210,EE=211,CE=212,QE=213,BE=214,hE=0,cE=1,lE=2,as=3,dE=4,uE=5,fE=6,pE=7,ws=0,DE=1,mE=2,Ue=0,yE=1,wE=2,RE=3,SE=4,ME=5,NE=6,xE=7,Rg="attached",FE="detached",La=300,Li=301,vi=302,bo=303,Ho=304,Rs=306,Po=1e3,ze=1001,Oo=1002,Rt=1003,_E=1004,un=1005,Wt=1006,qs=1007,Xe=1008,Ge=1009,LE=1010,vE=1011,Is=1012,va=1013,Ui=1014,ee=1015,Ss=1016,Ua=1017,Ga=1018,Gi=1020,UE=35902,GE=1021,TE=1022,Xt=1023,kE=1024,bE=1025,xi=1026,Ti=1027,Ta=1028,ka=1029,HE=1030,ba=1031,Ha=1033,Ys=33776,Ks=33777,Ws=33778,Vs=33779,Sg=35840,Mg=35841,Ng=35842,xg=35843,Fg=36196,_g=37492,Lg=37496,vg=37808,Ug=37809,Gg=37810,Tg=37811,kg=37812,bg=37813,Hg=37814,Pg=37815,Og=37816,Jg=37817,qg=37818,Yg=37819,Kg=37820,Wg=37821,zs=36492,Vg=36494,zg=36495,PE=36283,Xg=36284,Zg=36285,jg=36286,OE=2200,JE=2201,qE=2202,Es=2300,Jo=2301,Xs=2302,yi=2400,wi=2401,Cs=2402,$o=2500,YE=2501,Xu=0,Zu=1,ju=2,KE=3200,WE=3201,Bn=0,VE=1,_e="",Pt="srgb",ke="srgb-linear",Ag="display-p3",Ms="display-p3-linear",Qs="linear",ot="srgb",Bs="rec709",hs="p3",ti=7680,$g=519,zE=512,XE=513,ZE=514,Pa=515,jE=516,$E=517,AC=518,tC=519,qo=35044,Ar="300 es",le=2e3,cs=2001;class ue{addEventListener(A,t){this._listeners===void 0&&(this._listeners={});const e=this._listeners;e[A]===void 0&&(e[A]=[]),e[A].indexOf(t)===-1&&e[A].push(t)}hasEventListener(A,t){if(this._listeners===void 0)return!1;const e=this._listeners;return e[A]!==void 0&&e[A].indexOf(t)!==-1}removeEventListener(A,t){if(this._listeners===void 0)return;const i=this._listeners[A];if(i!==void 0){const s=i.indexOf(t);s!==-1&&i.splice(s,1)}}dispatchEvent(A){if(this._listeners===void 0)return;const e=this._listeners[A.type];if(e!==void 0){A.target=this;const i=e.slice(0);for(let s=0,o=i.length;s>8&255]+yt[n>>16&255]+yt[n>>24&255]+"-"+yt[A&255]+yt[A>>8&255]+"-"+yt[A>>16&15|64]+yt[A>>24&255]+"-"+yt[t&63|128]+yt[t>>8&255]+"-"+yt[t>>16&255]+yt[t>>24&255]+yt[e&255]+yt[e>>8&255]+yt[e>>16&255]+yt[e>>24&255]).toLowerCase()}function lt(n,A,t){return Math.max(A,Math.min(t,n))}function tg(n,A){return(n%A+A)%A}function eC(n,A,t,e,i){return e+(n-A)*(i-e)/(t-A)}function iC(n,A,t){return n!==A?(t-n)/(A-n):0}function on(n,A,t){return(1-t)*n+t*A}function nC(n,A,t,e){return on(n,A,1-Math.exp(-t*e))}function sC(n,A=1){return A-Math.abs(tg(n,A*2)-A)}function oC(n,A,t){return n<=A?0:n>=t?1:(n=(n-A)/(t-A),n*n*(3-2*n))}function gC(n,A,t){return n<=A?0:n>=t?1:(n=(n-A)/(t-A),n*n*n*(n*(n*6-15)+10))}function rC(n,A){return n+Math.floor(Math.random()*(A-n+1))}function aC(n,A){return n+Math.random()*(A-n)}function IC(n){return n*(.5-Math.random())}function EC(n){n!==void 0&&(tr=n);let A=tr+=1831565813;return A=Math.imul(A^A>>>15,A|1),A^=A+Math.imul(A^A>>>7,A|61),((A^A>>>14)>>>0)/4294967296}function CC(n){return n*sn}function QC(n){return n*ki}function BC(n){return(n&n-1)===0&&n!==0}function hC(n){return Math.pow(2,Math.ceil(Math.log(n)/Math.LN2))}function cC(n){return Math.pow(2,Math.floor(Math.log(n)/Math.LN2))}function lC(n,A,t,e,i){const s=Math.cos,o=Math.sin,g=s(t/2),r=o(t/2),a=s((A+e)/2),I=o((A+e)/2),E=s((A-e)/2),C=o((A-e)/2),Q=s((e-A)/2),c=o((e-A)/2);switch(i){case"XYX":n.set(g*I,r*E,r*C,g*a);break;case"YZY":n.set(r*C,g*I,r*E,g*a);break;case"ZXZ":n.set(r*E,r*C,g*I,g*a);break;case"XZX":n.set(g*I,r*c,r*Q,g*a);break;case"YXY":n.set(r*Q,g*I,r*c,g*a);break;case"ZYZ":n.set(r*c,r*Q,g*I,g*a);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+i)}}function Vt(n,A){switch(A.constructor){case Float32Array:return n;case Uint32Array:return n/4294967295;case Uint16Array:return n/65535;case Uint8Array:return n/255;case Int32Array:return Math.max(n/2147483647,-1);case Int16Array:return Math.max(n/32767,-1);case Int8Array:return Math.max(n/127,-1);default:throw new Error("Invalid component type.")}}function jA(n,A){switch(A.constructor){case Float32Array:return n;case Uint32Array:return Math.round(n*4294967295);case Uint16Array:return Math.round(n*65535);case Uint8Array:return Math.round(n*255);case Int32Array:return Math.round(n*2147483647);case Int16Array:return Math.round(n*32767);case Int8Array:return Math.round(n*127);default:throw new Error("Invalid component type.")}}const Ri={DEG2RAD:sn,RAD2DEG:ki,generateUUID:Ot,clamp:lt,euclideanModulo:tg,mapLinear:eC,inverseLerp:iC,lerp:on,damp:nC,pingpong:sC,smoothstep:oC,smootherstep:gC,randInt:rC,randFloat:aC,randFloatSpread:IC,seededRandom:EC,degToRad:CC,radToDeg:QC,isPowerOfTwo:BC,ceilPowerOfTwo:hC,floorPowerOfTwo:cC,setQuaternionFromProperEuler:lC,normalize:jA,denormalize:Vt};class AA{constructor(A=0,t=0){AA.prototype.isVector2=!0,this.x=A,this.y=t}get width(){return this.x}set width(A){this.x=A}get height(){return this.y}set height(A){this.y=A}set(A,t){return this.x=A,this.y=t,this}setScalar(A){return this.x=A,this.y=A,this}setX(A){return this.x=A,this}setY(A){return this.y=A,this}setComponent(A,t){switch(A){case 0:this.x=t;break;case 1:this.y=t;break;default:throw new Error("index is out of range: "+A)}return this}getComponent(A){switch(A){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+A)}}clone(){return new this.constructor(this.x,this.y)}copy(A){return this.x=A.x,this.y=A.y,this}add(A){return this.x+=A.x,this.y+=A.y,this}addScalar(A){return this.x+=A,this.y+=A,this}addVectors(A,t){return this.x=A.x+t.x,this.y=A.y+t.y,this}addScaledVector(A,t){return this.x+=A.x*t,this.y+=A.y*t,this}sub(A){return this.x-=A.x,this.y-=A.y,this}subScalar(A){return this.x-=A,this.y-=A,this}subVectors(A,t){return this.x=A.x-t.x,this.y=A.y-t.y,this}multiply(A){return this.x*=A.x,this.y*=A.y,this}multiplyScalar(A){return this.x*=A,this.y*=A,this}divide(A){return this.x/=A.x,this.y/=A.y,this}divideScalar(A){return this.multiplyScalar(1/A)}applyMatrix3(A){const t=this.x,e=this.y,i=A.elements;return this.x=i[0]*t+i[3]*e+i[6],this.y=i[1]*t+i[4]*e+i[7],this}min(A){return this.x=Math.min(this.x,A.x),this.y=Math.min(this.y,A.y),this}max(A){return this.x=Math.max(this.x,A.x),this.y=Math.max(this.y,A.y),this}clamp(A,t){return this.x=Math.max(A.x,Math.min(t.x,this.x)),this.y=Math.max(A.y,Math.min(t.y,this.y)),this}clampScalar(A,t){return this.x=Math.max(A,Math.min(t,this.x)),this.y=Math.max(A,Math.min(t,this.y)),this}clampLength(A,t){const e=this.length();return this.divideScalar(e||1).multiplyScalar(Math.max(A,Math.min(t,e)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(A){return this.x*A.x+this.y*A.y}cross(A){return this.x*A.y-this.y*A.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(A){const t=Math.sqrt(this.lengthSq()*A.lengthSq());if(t===0)return Math.PI/2;const e=this.dot(A)/t;return Math.acos(lt(e,-1,1))}distanceTo(A){return Math.sqrt(this.distanceToSquared(A))}distanceToSquared(A){const t=this.x-A.x,e=this.y-A.y;return t*t+e*e}manhattanDistanceTo(A){return Math.abs(this.x-A.x)+Math.abs(this.y-A.y)}setLength(A){return this.normalize().multiplyScalar(A)}lerp(A,t){return this.x+=(A.x-this.x)*t,this.y+=(A.y-this.y)*t,this}lerpVectors(A,t,e){return this.x=A.x+(t.x-A.x)*e,this.y=A.y+(t.y-A.y)*e,this}equals(A){return A.x===this.x&&A.y===this.y}fromArray(A,t=0){return this.x=A[t],this.y=A[t+1],this}toArray(A=[],t=0){return A[t]=this.x,A[t+1]=this.y,A}fromBufferAttribute(A,t){return this.x=A.getX(t),this.y=A.getY(t),this}rotateAround(A,t){const e=Math.cos(t),i=Math.sin(t),s=this.x-A.x,o=this.y-A.y;return this.x=s*e-o*i+A.x,this.y=s*i+o*e+A.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}class YA{constructor(A,t,e,i,s,o,g,r,a){YA.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],A!==void 0&&this.set(A,t,e,i,s,o,g,r,a)}set(A,t,e,i,s,o,g,r,a){const I=this.elements;return I[0]=A,I[1]=i,I[2]=g,I[3]=t,I[4]=s,I[5]=r,I[6]=e,I[7]=o,I[8]=a,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(A){const t=this.elements,e=A.elements;return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],this}extractBasis(A,t,e){return A.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),e.setFromMatrix3Column(this,2),this}setFromMatrix4(A){const t=A.elements;return this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this}multiply(A){return this.multiplyMatrices(this,A)}premultiply(A){return this.multiplyMatrices(A,this)}multiplyMatrices(A,t){const e=A.elements,i=t.elements,s=this.elements,o=e[0],g=e[3],r=e[6],a=e[1],I=e[4],E=e[7],C=e[2],Q=e[5],c=e[8],l=i[0],h=i[3],B=i[6],p=i[1],d=i[4],f=i[7],_=i[2],w=i[5],R=i[8];return s[0]=o*l+g*p+r*_,s[3]=o*h+g*d+r*w,s[6]=o*B+g*f+r*R,s[1]=a*l+I*p+E*_,s[4]=a*h+I*d+E*w,s[7]=a*B+I*f+E*R,s[2]=C*l+Q*p+c*_,s[5]=C*h+Q*d+c*w,s[8]=C*B+Q*f+c*R,this}multiplyScalar(A){const t=this.elements;return t[0]*=A,t[3]*=A,t[6]*=A,t[1]*=A,t[4]*=A,t[7]*=A,t[2]*=A,t[5]*=A,t[8]*=A,this}determinant(){const A=this.elements,t=A[0],e=A[1],i=A[2],s=A[3],o=A[4],g=A[5],r=A[6],a=A[7],I=A[8];return t*o*I-t*g*a-e*s*I+e*g*r+i*s*a-i*o*r}invert(){const A=this.elements,t=A[0],e=A[1],i=A[2],s=A[3],o=A[4],g=A[5],r=A[6],a=A[7],I=A[8],E=I*o-g*a,C=g*r-I*s,Q=a*s-o*r,c=t*E+e*C+i*Q;if(c===0)return this.set(0,0,0,0,0,0,0,0,0);const l=1/c;return A[0]=E*l,A[1]=(i*a-I*e)*l,A[2]=(g*e-i*o)*l,A[3]=C*l,A[4]=(I*t-i*r)*l,A[5]=(i*s-g*t)*l,A[6]=Q*l,A[7]=(e*r-a*t)*l,A[8]=(o*t-e*s)*l,this}transpose(){let A;const t=this.elements;return A=t[1],t[1]=t[3],t[3]=A,A=t[2],t[2]=t[6],t[6]=A,A=t[5],t[5]=t[7],t[7]=A,this}getNormalMatrix(A){return this.setFromMatrix4(A).invert().transpose()}transposeIntoArray(A){const t=this.elements;return A[0]=t[0],A[1]=t[3],A[2]=t[6],A[3]=t[1],A[4]=t[4],A[5]=t[7],A[6]=t[2],A[7]=t[5],A[8]=t[8],this}setUvTransform(A,t,e,i,s,o,g){const r=Math.cos(s),a=Math.sin(s);return this.set(e*r,e*a,-e*(r*o+a*g)+o+A,-i*a,i*r,-i*(-a*o+r*g)+g+t,0,0,1),this}scale(A,t){return this.premultiply(Zs.makeScale(A,t)),this}rotate(A){return this.premultiply(Zs.makeRotation(-A)),this}translate(A,t){return this.premultiply(Zs.makeTranslation(A,t)),this}makeTranslation(A,t){return A.isVector2?this.set(1,0,A.x,0,1,A.y,0,0,1):this.set(1,0,A,0,1,t,0,0,1),this}makeRotation(A){const t=Math.cos(A),e=Math.sin(A);return this.set(t,-e,0,e,t,0,0,0,1),this}makeScale(A,t){return this.set(A,0,0,0,t,0,0,0,1),this}equals(A){const t=this.elements,e=A.elements;for(let i=0;i<9;i++)if(t[i]!==e[i])return!1;return!0}fromArray(A,t=0){for(let e=0;e<9;e++)this.elements[e]=A[e+t];return this}toArray(A=[],t=0){const e=this.elements;return A[t]=e[0],A[t+1]=e[1],A[t+2]=e[2],A[t+3]=e[3],A[t+4]=e[4],A[t+5]=e[5],A[t+6]=e[6],A[t+7]=e[7],A[t+8]=e[8],A}clone(){return new this.constructor().fromArray(this.elements)}}const Zs=new YA;function Oa(n){for(let A=n.length-1;A>=0;--A)if(n[A]>=65535)return!0;return!1}function an(n){return document.createElementNS("http://www.w3.org/1999/xhtml",n)}function dC(){const n=an("canvas");return n.style.display="block",n}const er={};function eg(n){n in er||(er[n]=!0,console.warn(n))}function uC(n,A,t){return new Promise(function(e,i){function s(){switch(n.clientWaitSync(A,n.SYNC_FLUSH_COMMANDS_BIT,0)){case n.WAIT_FAILED:i();break;case n.TIMEOUT_EXPIRED:setTimeout(s,t);break;default:e()}}setTimeout(s,t)})}const ir=new YA().set(.8224621,.177538,0,.0331941,.9668058,0,.0170827,.0723974,.9105199),nr=new YA().set(1.2249401,-.2249404,0,-.0420569,1.0420571,0,-.0196376,-.0786361,1.0982735),fn={[ke]:{transfer:Qs,primaries:Bs,toReference:n=>n,fromReference:n=>n},[Pt]:{transfer:ot,primaries:Bs,toReference:n=>n.convertSRGBToLinear(),fromReference:n=>n.convertLinearToSRGB()},[Ms]:{transfer:Qs,primaries:hs,toReference:n=>n.applyMatrix3(nr),fromReference:n=>n.applyMatrix3(ir)},[Ag]:{transfer:ot,primaries:hs,toReference:n=>n.convertSRGBToLinear().applyMatrix3(nr),fromReference:n=>n.applyMatrix3(ir).convertLinearToSRGB()}},fC=new Set([ke,Ms]),At={enabled:!0,_workingColorSpace:ke,get workingColorSpace(){return this._workingColorSpace},set workingColorSpace(n){if(!fC.has(n))throw new Error(`Unsupported working color space, "${n}".`);this._workingColorSpace=n},convert:function(n,A,t){if(this.enabled===!1||A===t||!A||!t)return n;const e=fn[A].toReference,i=fn[t].fromReference;return i(e(n))},fromWorkingColorSpace:function(n,A){return this.convert(n,this._workingColorSpace,A)},toWorkingColorSpace:function(n,A){return this.convert(n,A,this._workingColorSpace)},getPrimaries:function(n){return fn[n].primaries},getTransfer:function(n){return n===_e?Qs:fn[n].transfer}};function Fi(n){return n<.04045?n*.0773993808:Math.pow(n*.9478672986+.0521327014,2.4)}function js(n){return n<.0031308?n*12.92:1.055*Math.pow(n,.41666)-.055}let ei;class pC{static getDataURL(A){if(/^data:/i.test(A.src)||typeof HTMLCanvasElement>"u")return A.src;let t;if(A instanceof HTMLCanvasElement)t=A;else{ei===void 0&&(ei=an("canvas")),ei.width=A.width,ei.height=A.height;const e=ei.getContext("2d");A instanceof ImageData?e.putImageData(A,0,0):e.drawImage(A,0,0,A.width,A.height),t=ei}return t.width>2048||t.height>2048?(console.warn("THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons",A),t.toDataURL("image/jpeg",.6)):t.toDataURL("image/png")}static sRGBToLinear(A){if(typeof HTMLImageElement<"u"&&A instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&A instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&A instanceof ImageBitmap){const t=an("canvas");t.width=A.width,t.height=A.height;const e=t.getContext("2d");e.drawImage(A,0,0,A.width,A.height);const i=e.getImageData(0,0,A.width,A.height),s=i.data;for(let o=0;o0&&(e.userData=this.userData),t||(A.textures[this.uuid]=e),e}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(A){if(this.mapping!==La)return A;if(A.applyMatrix3(this.matrix),A.x<0||A.x>1)switch(this.wrapS){case Po:A.x=A.x-Math.floor(A.x);break;case ze:A.x=A.x<0?0:1;break;case Oo:Math.abs(Math.floor(A.x)%2)===1?A.x=Math.ceil(A.x)-A.x:A.x=A.x-Math.floor(A.x);break}if(A.y<0||A.y>1)switch(this.wrapT){case Po:A.y=A.y-Math.floor(A.y);break;case ze:A.y=A.y<0?0:1;break;case Oo:Math.abs(Math.floor(A.y)%2)===1?A.y=Math.ceil(A.y)-A.y:A.y=A.y-Math.floor(A.y);break}return this.flipY&&(A.y=1-A.y),A}set needsUpdate(A){A===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(A){A===!0&&this.pmremVersion++}}Bt.DEFAULT_IMAGE=null;Bt.DEFAULT_MAPPING=La;Bt.DEFAULT_ANISOTROPY=1;class nt{constructor(A=0,t=0,e=0,i=1){nt.prototype.isVector4=!0,this.x=A,this.y=t,this.z=e,this.w=i}get width(){return this.z}set width(A){this.z=A}get height(){return this.w}set height(A){this.w=A}set(A,t,e,i){return this.x=A,this.y=t,this.z=e,this.w=i,this}setScalar(A){return this.x=A,this.y=A,this.z=A,this.w=A,this}setX(A){return this.x=A,this}setY(A){return this.y=A,this}setZ(A){return this.z=A,this}setW(A){return this.w=A,this}setComponent(A,t){switch(A){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;case 3:this.w=t;break;default:throw new Error("index is out of range: "+A)}return this}getComponent(A){switch(A){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+A)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(A){return this.x=A.x,this.y=A.y,this.z=A.z,this.w=A.w!==void 0?A.w:1,this}add(A){return this.x+=A.x,this.y+=A.y,this.z+=A.z,this.w+=A.w,this}addScalar(A){return this.x+=A,this.y+=A,this.z+=A,this.w+=A,this}addVectors(A,t){return this.x=A.x+t.x,this.y=A.y+t.y,this.z=A.z+t.z,this.w=A.w+t.w,this}addScaledVector(A,t){return this.x+=A.x*t,this.y+=A.y*t,this.z+=A.z*t,this.w+=A.w*t,this}sub(A){return this.x-=A.x,this.y-=A.y,this.z-=A.z,this.w-=A.w,this}subScalar(A){return this.x-=A,this.y-=A,this.z-=A,this.w-=A,this}subVectors(A,t){return this.x=A.x-t.x,this.y=A.y-t.y,this.z=A.z-t.z,this.w=A.w-t.w,this}multiply(A){return this.x*=A.x,this.y*=A.y,this.z*=A.z,this.w*=A.w,this}multiplyScalar(A){return this.x*=A,this.y*=A,this.z*=A,this.w*=A,this}applyMatrix4(A){const t=this.x,e=this.y,i=this.z,s=this.w,o=A.elements;return this.x=o[0]*t+o[4]*e+o[8]*i+o[12]*s,this.y=o[1]*t+o[5]*e+o[9]*i+o[13]*s,this.z=o[2]*t+o[6]*e+o[10]*i+o[14]*s,this.w=o[3]*t+o[7]*e+o[11]*i+o[15]*s,this}divideScalar(A){return this.multiplyScalar(1/A)}setAxisAngleFromQuaternion(A){this.w=2*Math.acos(A.w);const t=Math.sqrt(1-A.w*A.w);return t<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=A.x/t,this.y=A.y/t,this.z=A.z/t),this}setAxisAngleFromRotationMatrix(A){let t,e,i,s;const r=A.elements,a=r[0],I=r[4],E=r[8],C=r[1],Q=r[5],c=r[9],l=r[2],h=r[6],B=r[10];if(Math.abs(I-C)<.01&&Math.abs(E-l)<.01&&Math.abs(c-h)<.01){if(Math.abs(I+C)<.1&&Math.abs(E+l)<.1&&Math.abs(c+h)<.1&&Math.abs(a+Q+B-3)<.1)return this.set(1,0,0,0),this;t=Math.PI;const d=(a+1)/2,f=(Q+1)/2,_=(B+1)/2,w=(I+C)/4,R=(E+l)/4,F=(c+h)/4;return d>f&&d>_?d<.01?(e=0,i=.707106781,s=.707106781):(e=Math.sqrt(d),i=w/e,s=R/e):f>_?f<.01?(e=.707106781,i=0,s=.707106781):(i=Math.sqrt(f),e=w/i,s=F/i):_<.01?(e=.707106781,i=.707106781,s=0):(s=Math.sqrt(_),e=R/s,i=F/s),this.set(e,i,s,t),this}let p=Math.sqrt((h-c)*(h-c)+(E-l)*(E-l)+(C-I)*(C-I));return Math.abs(p)<.001&&(p=1),this.x=(h-c)/p,this.y=(E-l)/p,this.z=(C-I)/p,this.w=Math.acos((a+Q+B-1)/2),this}min(A){return this.x=Math.min(this.x,A.x),this.y=Math.min(this.y,A.y),this.z=Math.min(this.z,A.z),this.w=Math.min(this.w,A.w),this}max(A){return this.x=Math.max(this.x,A.x),this.y=Math.max(this.y,A.y),this.z=Math.max(this.z,A.z),this.w=Math.max(this.w,A.w),this}clamp(A,t){return this.x=Math.max(A.x,Math.min(t.x,this.x)),this.y=Math.max(A.y,Math.min(t.y,this.y)),this.z=Math.max(A.z,Math.min(t.z,this.z)),this.w=Math.max(A.w,Math.min(t.w,this.w)),this}clampScalar(A,t){return this.x=Math.max(A,Math.min(t,this.x)),this.y=Math.max(A,Math.min(t,this.y)),this.z=Math.max(A,Math.min(t,this.z)),this.w=Math.max(A,Math.min(t,this.w)),this}clampLength(A,t){const e=this.length();return this.divideScalar(e||1).multiplyScalar(Math.max(A,Math.min(t,e)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(A){return this.x*A.x+this.y*A.y+this.z*A.z+this.w*A.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(A){return this.normalize().multiplyScalar(A)}lerp(A,t){return this.x+=(A.x-this.x)*t,this.y+=(A.y-this.y)*t,this.z+=(A.z-this.z)*t,this.w+=(A.w-this.w)*t,this}lerpVectors(A,t,e){return this.x=A.x+(t.x-A.x)*e,this.y=A.y+(t.y-A.y)*e,this.z=A.z+(t.z-A.z)*e,this.w=A.w+(t.w-A.w)*e,this}equals(A){return A.x===this.x&&A.y===this.y&&A.z===this.z&&A.w===this.w}fromArray(A,t=0){return this.x=A[t],this.y=A[t+1],this.z=A[t+2],this.w=A[t+3],this}toArray(A=[],t=0){return A[t]=this.x,A[t+1]=this.y,A[t+2]=this.z,A[t+3]=this.w,A}fromBufferAttribute(A,t){return this.x=A.getX(t),this.y=A.getY(t),this.z=A.getZ(t),this.w=A.getW(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}}class yC extends ue{constructor(A=1,t=1,e={}){super(),this.isRenderTarget=!0,this.width=A,this.height=t,this.depth=1,this.scissor=new nt(0,0,A,t),this.scissorTest=!1,this.viewport=new nt(0,0,A,t);const i={width:A,height:t,depth:1};e=Object.assign({generateMipmaps:!1,internalFormat:null,minFilter:Wt,depthBuffer:!0,stencilBuffer:!1,resolveDepthBuffer:!0,resolveStencilBuffer:!0,depthTexture:null,samples:0,count:1},e);const s=new Bt(i,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.format,e.type,e.anisotropy,e.colorSpace);s.flipY=!1,s.generateMipmaps=e.generateMipmaps,s.internalFormat=e.internalFormat,this.textures=[];const o=e.count;for(let g=0;g=0?1:-1,d=1-B*B;if(d>Number.EPSILON){const _=Math.sqrt(d),w=Math.atan2(_,B*p);h=Math.sin(h*w)/_,g=Math.sin(g*w)/_}const f=g*p;if(r=r*h+C*f,a=a*h+Q*f,I=I*h+c*f,E=E*h+l*f,h===1-g){const _=1/Math.sqrt(r*r+a*a+I*I+E*E);r*=_,a*=_,I*=_,E*=_}}A[t]=r,A[t+1]=a,A[t+2]=I,A[t+3]=E}static multiplyQuaternionsFlat(A,t,e,i,s,o){const g=e[i],r=e[i+1],a=e[i+2],I=e[i+3],E=s[o],C=s[o+1],Q=s[o+2],c=s[o+3];return A[t]=g*c+I*E+r*Q-a*C,A[t+1]=r*c+I*C+a*E-g*Q,A[t+2]=a*c+I*Q+g*C-r*E,A[t+3]=I*c-g*E-r*C-a*Q,A}get x(){return this._x}set x(A){this._x=A,this._onChangeCallback()}get y(){return this._y}set y(A){this._y=A,this._onChangeCallback()}get z(){return this._z}set z(A){this._z=A,this._onChangeCallback()}get w(){return this._w}set w(A){this._w=A,this._onChangeCallback()}set(A,t,e,i){return this._x=A,this._y=t,this._z=e,this._w=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(A){return this._x=A.x,this._y=A.y,this._z=A.z,this._w=A.w,this._onChangeCallback(),this}setFromEuler(A,t=!0){const e=A._x,i=A._y,s=A._z,o=A._order,g=Math.cos,r=Math.sin,a=g(e/2),I=g(i/2),E=g(s/2),C=r(e/2),Q=r(i/2),c=r(s/2);switch(o){case"XYZ":this._x=C*I*E+a*Q*c,this._y=a*Q*E-C*I*c,this._z=a*I*c+C*Q*E,this._w=a*I*E-C*Q*c;break;case"YXZ":this._x=C*I*E+a*Q*c,this._y=a*Q*E-C*I*c,this._z=a*I*c-C*Q*E,this._w=a*I*E+C*Q*c;break;case"ZXY":this._x=C*I*E-a*Q*c,this._y=a*Q*E+C*I*c,this._z=a*I*c+C*Q*E,this._w=a*I*E-C*Q*c;break;case"ZYX":this._x=C*I*E-a*Q*c,this._y=a*Q*E+C*I*c,this._z=a*I*c-C*Q*E,this._w=a*I*E+C*Q*c;break;case"YZX":this._x=C*I*E+a*Q*c,this._y=a*Q*E+C*I*c,this._z=a*I*c-C*Q*E,this._w=a*I*E-C*Q*c;break;case"XZY":this._x=C*I*E-a*Q*c,this._y=a*Q*E-C*I*c,this._z=a*I*c+C*Q*E,this._w=a*I*E+C*Q*c;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+o)}return t===!0&&this._onChangeCallback(),this}setFromAxisAngle(A,t){const e=t/2,i=Math.sin(e);return this._x=A.x*i,this._y=A.y*i,this._z=A.z*i,this._w=Math.cos(e),this._onChangeCallback(),this}setFromRotationMatrix(A){const t=A.elements,e=t[0],i=t[4],s=t[8],o=t[1],g=t[5],r=t[9],a=t[2],I=t[6],E=t[10],C=e+g+E;if(C>0){const Q=.5/Math.sqrt(C+1);this._w=.25/Q,this._x=(I-r)*Q,this._y=(s-a)*Q,this._z=(o-i)*Q}else if(e>g&&e>E){const Q=2*Math.sqrt(1+e-g-E);this._w=(I-r)/Q,this._x=.25*Q,this._y=(i+o)/Q,this._z=(s+a)/Q}else if(g>E){const Q=2*Math.sqrt(1+g-e-E);this._w=(s-a)/Q,this._x=(i+o)/Q,this._y=.25*Q,this._z=(r+I)/Q}else{const Q=2*Math.sqrt(1+E-e-g);this._w=(o-i)/Q,this._x=(s+a)/Q,this._y=(r+I)/Q,this._z=.25*Q}return this._onChangeCallback(),this}setFromUnitVectors(A,t){let e=A.dot(t)+1;return eMath.abs(A.z)?(this._x=-A.y,this._y=A.x,this._z=0,this._w=e):(this._x=0,this._y=-A.z,this._z=A.y,this._w=e)):(this._x=A.y*t.z-A.z*t.y,this._y=A.z*t.x-A.x*t.z,this._z=A.x*t.y-A.y*t.x,this._w=e),this.normalize()}angleTo(A){return 2*Math.acos(Math.abs(lt(this.dot(A),-1,1)))}rotateTowards(A,t){const e=this.angleTo(A);if(e===0)return this;const i=Math.min(1,t/e);return this.slerp(A,i),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(A){return this._x*A._x+this._y*A._y+this._z*A._z+this._w*A._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let A=this.length();return A===0?(this._x=0,this._y=0,this._z=0,this._w=1):(A=1/A,this._x=this._x*A,this._y=this._y*A,this._z=this._z*A,this._w=this._w*A),this._onChangeCallback(),this}multiply(A){return this.multiplyQuaternions(this,A)}premultiply(A){return this.multiplyQuaternions(A,this)}multiplyQuaternions(A,t){const e=A._x,i=A._y,s=A._z,o=A._w,g=t._x,r=t._y,a=t._z,I=t._w;return this._x=e*I+o*g+i*a-s*r,this._y=i*I+o*r+s*g-e*a,this._z=s*I+o*a+e*r-i*g,this._w=o*I-e*g-i*r-s*a,this._onChangeCallback(),this}slerp(A,t){if(t===0)return this;if(t===1)return this.copy(A);const e=this._x,i=this._y,s=this._z,o=this._w;let g=o*A._w+e*A._x+i*A._y+s*A._z;if(g<0?(this._w=-A._w,this._x=-A._x,this._y=-A._y,this._z=-A._z,g=-g):this.copy(A),g>=1)return this._w=o,this._x=e,this._y=i,this._z=s,this;const r=1-g*g;if(r<=Number.EPSILON){const Q=1-t;return this._w=Q*o+t*this._w,this._x=Q*e+t*this._x,this._y=Q*i+t*this._y,this._z=Q*s+t*this._z,this.normalize(),this}const a=Math.sqrt(r),I=Math.atan2(a,g),E=Math.sin((1-t)*I)/a,C=Math.sin(t*I)/a;return this._w=o*E+this._w*C,this._x=e*E+this._x*C,this._y=i*E+this._y*C,this._z=s*E+this._z*C,this._onChangeCallback(),this}slerpQuaternions(A,t,e){return this.copy(A).slerp(t,e)}random(){const A=2*Math.PI*Math.random(),t=2*Math.PI*Math.random(),e=Math.random(),i=Math.sqrt(1-e),s=Math.sqrt(e);return this.set(i*Math.sin(A),i*Math.cos(A),s*Math.sin(t),s*Math.cos(t))}equals(A){return A._x===this._x&&A._y===this._y&&A._z===this._z&&A._w===this._w}fromArray(A,t=0){return this._x=A[t],this._y=A[t+1],this._z=A[t+2],this._w=A[t+3],this._onChangeCallback(),this}toArray(A=[],t=0){return A[t]=this._x,A[t+1]=this._y,A[t+2]=this._z,A[t+3]=this._w,A}fromBufferAttribute(A,t){return this._x=A.getX(t),this._y=A.getY(t),this._z=A.getZ(t),this._w=A.getW(t),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(A){return this._onChangeCallback=A,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}class M{constructor(A=0,t=0,e=0){M.prototype.isVector3=!0,this.x=A,this.y=t,this.z=e}set(A,t,e){return e===void 0&&(e=this.z),this.x=A,this.y=t,this.z=e,this}setScalar(A){return this.x=A,this.y=A,this.z=A,this}setX(A){return this.x=A,this}setY(A){return this.y=A,this}setZ(A){return this.z=A,this}setComponent(A,t){switch(A){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw new Error("index is out of range: "+A)}return this}getComponent(A){switch(A){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+A)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(A){return this.x=A.x,this.y=A.y,this.z=A.z,this}add(A){return this.x+=A.x,this.y+=A.y,this.z+=A.z,this}addScalar(A){return this.x+=A,this.y+=A,this.z+=A,this}addVectors(A,t){return this.x=A.x+t.x,this.y=A.y+t.y,this.z=A.z+t.z,this}addScaledVector(A,t){return this.x+=A.x*t,this.y+=A.y*t,this.z+=A.z*t,this}sub(A){return this.x-=A.x,this.y-=A.y,this.z-=A.z,this}subScalar(A){return this.x-=A,this.y-=A,this.z-=A,this}subVectors(A,t){return this.x=A.x-t.x,this.y=A.y-t.y,this.z=A.z-t.z,this}multiply(A){return this.x*=A.x,this.y*=A.y,this.z*=A.z,this}multiplyScalar(A){return this.x*=A,this.y*=A,this.z*=A,this}multiplyVectors(A,t){return this.x=A.x*t.x,this.y=A.y*t.y,this.z=A.z*t.z,this}applyEuler(A){return this.applyQuaternion(sr.setFromEuler(A))}applyAxisAngle(A,t){return this.applyQuaternion(sr.setFromAxisAngle(A,t))}applyMatrix3(A){const t=this.x,e=this.y,i=this.z,s=A.elements;return this.x=s[0]*t+s[3]*e+s[6]*i,this.y=s[1]*t+s[4]*e+s[7]*i,this.z=s[2]*t+s[5]*e+s[8]*i,this}applyNormalMatrix(A){return this.applyMatrix3(A).normalize()}applyMatrix4(A){const t=this.x,e=this.y,i=this.z,s=A.elements,o=1/(s[3]*t+s[7]*e+s[11]*i+s[15]);return this.x=(s[0]*t+s[4]*e+s[8]*i+s[12])*o,this.y=(s[1]*t+s[5]*e+s[9]*i+s[13])*o,this.z=(s[2]*t+s[6]*e+s[10]*i+s[14])*o,this}applyQuaternion(A){const t=this.x,e=this.y,i=this.z,s=A.x,o=A.y,g=A.z,r=A.w,a=2*(o*i-g*e),I=2*(g*t-s*i),E=2*(s*e-o*t);return this.x=t+r*a+o*E-g*I,this.y=e+r*I+g*a-s*E,this.z=i+r*E+s*I-o*a,this}project(A){return this.applyMatrix4(A.matrixWorldInverse).applyMatrix4(A.projectionMatrix)}unproject(A){return this.applyMatrix4(A.projectionMatrixInverse).applyMatrix4(A.matrixWorld)}transformDirection(A){const t=this.x,e=this.y,i=this.z,s=A.elements;return this.x=s[0]*t+s[4]*e+s[8]*i,this.y=s[1]*t+s[5]*e+s[9]*i,this.z=s[2]*t+s[6]*e+s[10]*i,this.normalize()}divide(A){return this.x/=A.x,this.y/=A.y,this.z/=A.z,this}divideScalar(A){return this.multiplyScalar(1/A)}min(A){return this.x=Math.min(this.x,A.x),this.y=Math.min(this.y,A.y),this.z=Math.min(this.z,A.z),this}max(A){return this.x=Math.max(this.x,A.x),this.y=Math.max(this.y,A.y),this.z=Math.max(this.z,A.z),this}clamp(A,t){return this.x=Math.max(A.x,Math.min(t.x,this.x)),this.y=Math.max(A.y,Math.min(t.y,this.y)),this.z=Math.max(A.z,Math.min(t.z,this.z)),this}clampScalar(A,t){return this.x=Math.max(A,Math.min(t,this.x)),this.y=Math.max(A,Math.min(t,this.y)),this.z=Math.max(A,Math.min(t,this.z)),this}clampLength(A,t){const e=this.length();return this.divideScalar(e||1).multiplyScalar(Math.max(A,Math.min(t,e)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(A){return this.x*A.x+this.y*A.y+this.z*A.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(A){return this.normalize().multiplyScalar(A)}lerp(A,t){return this.x+=(A.x-this.x)*t,this.y+=(A.y-this.y)*t,this.z+=(A.z-this.z)*t,this}lerpVectors(A,t,e){return this.x=A.x+(t.x-A.x)*e,this.y=A.y+(t.y-A.y)*e,this.z=A.z+(t.z-A.z)*e,this}cross(A){return this.crossVectors(this,A)}crossVectors(A,t){const e=A.x,i=A.y,s=A.z,o=t.x,g=t.y,r=t.z;return this.x=i*r-s*g,this.y=s*o-e*r,this.z=e*g-i*o,this}projectOnVector(A){const t=A.lengthSq();if(t===0)return this.set(0,0,0);const e=A.dot(this)/t;return this.copy(A).multiplyScalar(e)}projectOnPlane(A){return Ao.copy(this).projectOnVector(A),this.sub(Ao)}reflect(A){return this.sub(Ao.copy(A).multiplyScalar(2*this.dot(A)))}angleTo(A){const t=Math.sqrt(this.lengthSq()*A.lengthSq());if(t===0)return Math.PI/2;const e=this.dot(A)/t;return Math.acos(lt(e,-1,1))}distanceTo(A){return Math.sqrt(this.distanceToSquared(A))}distanceToSquared(A){const t=this.x-A.x,e=this.y-A.y,i=this.z-A.z;return t*t+e*e+i*i}manhattanDistanceTo(A){return Math.abs(this.x-A.x)+Math.abs(this.y-A.y)+Math.abs(this.z-A.z)}setFromSpherical(A){return this.setFromSphericalCoords(A.radius,A.phi,A.theta)}setFromSphericalCoords(A,t,e){const i=Math.sin(t)*A;return this.x=i*Math.sin(e),this.y=Math.cos(t)*A,this.z=i*Math.cos(e),this}setFromCylindrical(A){return this.setFromCylindricalCoords(A.radius,A.theta,A.y)}setFromCylindricalCoords(A,t,e){return this.x=A*Math.sin(t),this.y=e,this.z=A*Math.cos(t),this}setFromMatrixPosition(A){const t=A.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(A){const t=this.setFromMatrixColumn(A,0).length(),e=this.setFromMatrixColumn(A,1).length(),i=this.setFromMatrixColumn(A,2).length();return this.x=t,this.y=e,this.z=i,this}setFromMatrixColumn(A,t){return this.fromArray(A.elements,t*4)}setFromMatrix3Column(A,t){return this.fromArray(A.elements,t*3)}setFromEuler(A){return this.x=A._x,this.y=A._y,this.z=A._z,this}setFromColor(A){return this.x=A.r,this.y=A.g,this.z=A.b,this}equals(A){return A.x===this.x&&A.y===this.y&&A.z===this.z}fromArray(A,t=0){return this.x=A[t],this.y=A[t+1],this.z=A[t+2],this}toArray(A=[],t=0){return A[t]=this.x,A[t+1]=this.y,A[t+2]=this.z,A}fromBufferAttribute(A,t){return this.x=A.getX(t),this.y=A.getY(t),this.z=A.getZ(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const A=Math.random()*Math.PI*2,t=Math.random()*2-1,e=Math.sqrt(1-t*t);return this.x=e*Math.cos(A),this.y=t,this.z=e*Math.sin(A),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}const Ao=new M,sr=new Zt;class jt{constructor(A=new M(1/0,1/0,1/0),t=new M(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=A,this.max=t}set(A,t){return this.min.copy(A),this.max.copy(t),this}setFromArray(A){this.makeEmpty();for(let t=0,e=A.length;tthis.max.x||A.ythis.max.y||A.zthis.max.z)}containsBox(A){return this.min.x<=A.min.x&&A.max.x<=this.max.x&&this.min.y<=A.min.y&&A.max.y<=this.max.y&&this.min.z<=A.min.z&&A.max.z<=this.max.z}getParameter(A,t){return t.set((A.x-this.min.x)/(this.max.x-this.min.x),(A.y-this.min.y)/(this.max.y-this.min.y),(A.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(A){return!(A.max.xthis.max.x||A.max.ythis.max.y||A.max.zthis.max.z)}intersectsSphere(A){return this.clampPoint(A.center,qt),qt.distanceToSquared(A.center)<=A.radius*A.radius}intersectsPlane(A){let t,e;return A.normal.x>0?(t=A.normal.x*this.min.x,e=A.normal.x*this.max.x):(t=A.normal.x*this.max.x,e=A.normal.x*this.min.x),A.normal.y>0?(t+=A.normal.y*this.min.y,e+=A.normal.y*this.max.y):(t+=A.normal.y*this.max.y,e+=A.normal.y*this.min.y),A.normal.z>0?(t+=A.normal.z*this.min.z,e+=A.normal.z*this.max.z):(t+=A.normal.z*this.max.z,e+=A.normal.z*this.min.z),t<=-A.constant&&e>=-A.constant}intersectsTriangle(A){if(this.isEmpty())return!1;this.getCenter(Yi),Dn.subVectors(this.max,Yi),ii.subVectors(A.a,Yi),ni.subVectors(A.b,Yi),si.subVectors(A.c,Yi),me.subVectors(ni,ii),ye.subVectors(si,ni),He.subVectors(ii,si);let t=[0,-me.z,me.y,0,-ye.z,ye.y,0,-He.z,He.y,me.z,0,-me.x,ye.z,0,-ye.x,He.z,0,-He.x,-me.y,me.x,0,-ye.y,ye.x,0,-He.y,He.x,0];return!to(t,ii,ni,si,Dn)||(t=[1,0,0,0,1,0,0,0,1],!to(t,ii,ni,si,Dn))?!1:(mn.crossVectors(me,ye),t=[mn.x,mn.y,mn.z],to(t,ii,ni,si,Dn))}clampPoint(A,t){return t.copy(A).clamp(this.min,this.max)}distanceToPoint(A){return this.clampPoint(A,qt).distanceTo(A)}getBoundingSphere(A){return this.isEmpty()?A.makeEmpty():(this.getCenter(A.center),A.radius=this.getSize(qt).length()*.5),A}intersect(A){return this.min.max(A.min),this.max.min(A.max),this.isEmpty()&&this.makeEmpty(),this}union(A){return this.min.min(A.min),this.max.max(A.max),this}applyMatrix4(A){return this.isEmpty()?this:(re[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(A),re[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(A),re[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(A),re[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(A),re[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(A),re[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(A),re[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(A),re[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(A),this.setFromPoints(re),this)}translate(A){return this.min.add(A),this.max.add(A),this}equals(A){return A.min.equals(this.min)&&A.max.equals(this.max)}}const re=[new M,new M,new M,new M,new M,new M,new M,new M],qt=new M,pn=new jt,ii=new M,ni=new M,si=new M,me=new M,ye=new M,He=new M,Yi=new M,Dn=new M,mn=new M,Pe=new M;function to(n,A,t,e,i){for(let s=0,o=n.length-3;s<=o;s+=3){Pe.fromArray(n,s);const g=i.x*Math.abs(Pe.x)+i.y*Math.abs(Pe.y)+i.z*Math.abs(Pe.z),r=A.dot(Pe),a=t.dot(Pe),I=e.dot(Pe);if(Math.max(-Math.max(r,a,I),Math.min(r,a,I))>g)return!1}return!0}const RC=new jt,Ki=new M,eo=new M;class fe{constructor(A=new M,t=-1){this.isSphere=!0,this.center=A,this.radius=t}set(A,t){return this.center.copy(A),this.radius=t,this}setFromPoints(A,t){const e=this.center;t!==void 0?e.copy(t):RC.setFromPoints(A).getCenter(e);let i=0;for(let s=0,o=A.length;sthis.radius*this.radius&&(t.sub(this.center).normalize(),t.multiplyScalar(this.radius).add(this.center)),t}getBoundingBox(A){return this.isEmpty()?(A.makeEmpty(),A):(A.set(this.center,this.center),A.expandByScalar(this.radius),A)}applyMatrix4(A){return this.center.applyMatrix4(A),this.radius=this.radius*A.getMaxScaleOnAxis(),this}translate(A){return this.center.add(A),this}expandByPoint(A){if(this.isEmpty())return this.center.copy(A),this.radius=0,this;Ki.subVectors(A,this.center);const t=Ki.lengthSq();if(t>this.radius*this.radius){const e=Math.sqrt(t),i=(e-this.radius)*.5;this.center.addScaledVector(Ki,i/e),this.radius+=i}return this}union(A){return A.isEmpty()?this:this.isEmpty()?(this.copy(A),this):(this.center.equals(A.center)===!0?this.radius=Math.max(this.radius,A.radius):(eo.subVectors(A.center,this.center).setLength(A.radius),this.expandByPoint(Ki.copy(A.center).add(eo)),this.expandByPoint(Ki.copy(A.center).sub(eo))),this)}equals(A){return A.center.equals(this.center)&&A.radius===this.radius}clone(){return new this.constructor().copy(this)}}const ae=new M,io=new M,yn=new M,we=new M,no=new M,wn=new M,so=new M;class Hi{constructor(A=new M,t=new M(0,0,-1)){this.origin=A,this.direction=t}set(A,t){return this.origin.copy(A),this.direction.copy(t),this}copy(A){return this.origin.copy(A.origin),this.direction.copy(A.direction),this}at(A,t){return t.copy(this.origin).addScaledVector(this.direction,A)}lookAt(A){return this.direction.copy(A).sub(this.origin).normalize(),this}recast(A){return this.origin.copy(this.at(A,ae)),this}closestPointToPoint(A,t){t.subVectors(A,this.origin);const e=t.dot(this.direction);return e<0?t.copy(this.origin):t.copy(this.origin).addScaledVector(this.direction,e)}distanceToPoint(A){return Math.sqrt(this.distanceSqToPoint(A))}distanceSqToPoint(A){const t=ae.subVectors(A,this.origin).dot(this.direction);return t<0?this.origin.distanceToSquared(A):(ae.copy(this.origin).addScaledVector(this.direction,t),ae.distanceToSquared(A))}distanceSqToSegment(A,t,e,i){io.copy(A).add(t).multiplyScalar(.5),yn.copy(t).sub(A).normalize(),we.copy(this.origin).sub(io);const s=A.distanceTo(t)*.5,o=-this.direction.dot(yn),g=we.dot(this.direction),r=-we.dot(yn),a=we.lengthSq(),I=Math.abs(1-o*o);let E,C,Q,c;if(I>0)if(E=o*r-g,C=o*g-r,c=s*I,E>=0)if(C>=-c)if(C<=c){const l=1/I;E*=l,C*=l,Q=E*(E+o*C+2*g)+C*(o*E+C+2*r)+a}else C=s,E=Math.max(0,-(o*C+g)),Q=-E*E+C*(C+2*r)+a;else C=-s,E=Math.max(0,-(o*C+g)),Q=-E*E+C*(C+2*r)+a;else C<=-c?(E=Math.max(0,-(-o*s+g)),C=E>0?-s:Math.min(Math.max(-s,-r),s),Q=-E*E+C*(C+2*r)+a):C<=c?(E=0,C=Math.min(Math.max(-s,-r),s),Q=C*(C+2*r)+a):(E=Math.max(0,-(o*s+g)),C=E>0?s:Math.min(Math.max(-s,-r),s),Q=-E*E+C*(C+2*r)+a);else C=o>0?-s:s,E=Math.max(0,-(o*C+g)),Q=-E*E+C*(C+2*r)+a;return e&&e.copy(this.origin).addScaledVector(this.direction,E),i&&i.copy(io).addScaledVector(yn,C),Q}intersectSphere(A,t){ae.subVectors(A.center,this.origin);const e=ae.dot(this.direction),i=ae.dot(ae)-e*e,s=A.radius*A.radius;if(i>s)return null;const o=Math.sqrt(s-i),g=e-o,r=e+o;return r<0?null:g<0?this.at(r,t):this.at(g,t)}intersectsSphere(A){return this.distanceSqToPoint(A.center)<=A.radius*A.radius}distanceToPlane(A){const t=A.normal.dot(this.direction);if(t===0)return A.distanceToPoint(this.origin)===0?0:null;const e=-(this.origin.dot(A.normal)+A.constant)/t;return e>=0?e:null}intersectPlane(A,t){const e=this.distanceToPlane(A);return e===null?null:this.at(e,t)}intersectsPlane(A){const t=A.distanceToPoint(this.origin);return t===0||A.normal.dot(this.direction)*t<0}intersectBox(A,t){let e,i,s,o,g,r;const a=1/this.direction.x,I=1/this.direction.y,E=1/this.direction.z,C=this.origin;return a>=0?(e=(A.min.x-C.x)*a,i=(A.max.x-C.x)*a):(e=(A.max.x-C.x)*a,i=(A.min.x-C.x)*a),I>=0?(s=(A.min.y-C.y)*I,o=(A.max.y-C.y)*I):(s=(A.max.y-C.y)*I,o=(A.min.y-C.y)*I),e>o||s>i||((s>e||isNaN(e))&&(e=s),(o=0?(g=(A.min.z-C.z)*E,r=(A.max.z-C.z)*E):(g=(A.max.z-C.z)*E,r=(A.min.z-C.z)*E),e>r||g>i)||((g>e||e!==e)&&(e=g),(r=0?e:i,t)}intersectsBox(A){return this.intersectBox(A,ae)!==null}intersectTriangle(A,t,e,i,s){no.subVectors(t,A),wn.subVectors(e,A),so.crossVectors(no,wn);let o=this.direction.dot(so),g;if(o>0){if(i)return null;g=1}else if(o<0)g=-1,o=-o;else return null;we.subVectors(this.origin,A);const r=g*this.direction.dot(wn.crossVectors(we,wn));if(r<0)return null;const a=g*this.direction.dot(no.cross(we));if(a<0||r+a>o)return null;const I=-g*we.dot(so);return I<0?null:this.at(I/o,s)}applyMatrix4(A){return this.origin.applyMatrix4(A),this.direction.transformDirection(A),this}equals(A){return A.origin.equals(this.origin)&&A.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}}class KA{constructor(A,t,e,i,s,o,g,r,a,I,E,C,Q,c,l,h){KA.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],A!==void 0&&this.set(A,t,e,i,s,o,g,r,a,I,E,C,Q,c,l,h)}set(A,t,e,i,s,o,g,r,a,I,E,C,Q,c,l,h){const B=this.elements;return B[0]=A,B[4]=t,B[8]=e,B[12]=i,B[1]=s,B[5]=o,B[9]=g,B[13]=r,B[2]=a,B[6]=I,B[10]=E,B[14]=C,B[3]=Q,B[7]=c,B[11]=l,B[15]=h,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new KA().fromArray(this.elements)}copy(A){const t=this.elements,e=A.elements;return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],this}copyPosition(A){const t=this.elements,e=A.elements;return t[12]=e[12],t[13]=e[13],t[14]=e[14],this}setFromMatrix3(A){const t=A.elements;return this.set(t[0],t[3],t[6],0,t[1],t[4],t[7],0,t[2],t[5],t[8],0,0,0,0,1),this}extractBasis(A,t,e){return A.setFromMatrixColumn(this,0),t.setFromMatrixColumn(this,1),e.setFromMatrixColumn(this,2),this}makeBasis(A,t,e){return this.set(A.x,t.x,e.x,0,A.y,t.y,e.y,0,A.z,t.z,e.z,0,0,0,0,1),this}extractRotation(A){const t=this.elements,e=A.elements,i=1/oi.setFromMatrixColumn(A,0).length(),s=1/oi.setFromMatrixColumn(A,1).length(),o=1/oi.setFromMatrixColumn(A,2).length();return t[0]=e[0]*i,t[1]=e[1]*i,t[2]=e[2]*i,t[3]=0,t[4]=e[4]*s,t[5]=e[5]*s,t[6]=e[6]*s,t[7]=0,t[8]=e[8]*o,t[9]=e[9]*o,t[10]=e[10]*o,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromEuler(A){const t=this.elements,e=A.x,i=A.y,s=A.z,o=Math.cos(e),g=Math.sin(e),r=Math.cos(i),a=Math.sin(i),I=Math.cos(s),E=Math.sin(s);if(A.order==="XYZ"){const C=o*I,Q=o*E,c=g*I,l=g*E;t[0]=r*I,t[4]=-r*E,t[8]=a,t[1]=Q+c*a,t[5]=C-l*a,t[9]=-g*r,t[2]=l-C*a,t[6]=c+Q*a,t[10]=o*r}else if(A.order==="YXZ"){const C=r*I,Q=r*E,c=a*I,l=a*E;t[0]=C+l*g,t[4]=c*g-Q,t[8]=o*a,t[1]=o*E,t[5]=o*I,t[9]=-g,t[2]=Q*g-c,t[6]=l+C*g,t[10]=o*r}else if(A.order==="ZXY"){const C=r*I,Q=r*E,c=a*I,l=a*E;t[0]=C-l*g,t[4]=-o*E,t[8]=c+Q*g,t[1]=Q+c*g,t[5]=o*I,t[9]=l-C*g,t[2]=-o*a,t[6]=g,t[10]=o*r}else if(A.order==="ZYX"){const C=o*I,Q=o*E,c=g*I,l=g*E;t[0]=r*I,t[4]=c*a-Q,t[8]=C*a+l,t[1]=r*E,t[5]=l*a+C,t[9]=Q*a-c,t[2]=-a,t[6]=g*r,t[10]=o*r}else if(A.order==="YZX"){const C=o*r,Q=o*a,c=g*r,l=g*a;t[0]=r*I,t[4]=l-C*E,t[8]=c*E+Q,t[1]=E,t[5]=o*I,t[9]=-g*I,t[2]=-a*I,t[6]=Q*E+c,t[10]=C-l*E}else if(A.order==="XZY"){const C=o*r,Q=o*a,c=g*r,l=g*a;t[0]=r*I,t[4]=-E,t[8]=a*I,t[1]=C*E+l,t[5]=o*I,t[9]=Q*E-c,t[2]=c*E-Q,t[6]=g*I,t[10]=l*E+C}return t[3]=0,t[7]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromQuaternion(A){return this.compose(SC,A,MC)}lookAt(A,t,e){const i=this.elements;return Tt.subVectors(A,t),Tt.lengthSq()===0&&(Tt.z=1),Tt.normalize(),Re.crossVectors(e,Tt),Re.lengthSq()===0&&(Math.abs(e.z)===1?Tt.x+=1e-4:Tt.z+=1e-4,Tt.normalize(),Re.crossVectors(e,Tt)),Re.normalize(),Rn.crossVectors(Tt,Re),i[0]=Re.x,i[4]=Rn.x,i[8]=Tt.x,i[1]=Re.y,i[5]=Rn.y,i[9]=Tt.y,i[2]=Re.z,i[6]=Rn.z,i[10]=Tt.z,this}multiply(A){return this.multiplyMatrices(this,A)}premultiply(A){return this.multiplyMatrices(A,this)}multiplyMatrices(A,t){const e=A.elements,i=t.elements,s=this.elements,o=e[0],g=e[4],r=e[8],a=e[12],I=e[1],E=e[5],C=e[9],Q=e[13],c=e[2],l=e[6],h=e[10],B=e[14],p=e[3],d=e[7],f=e[11],_=e[15],w=i[0],R=i[4],F=i[8],m=i[12],u=i[1],L=i[5],k=i[9],T=i[13],P=i[2],V=i[6],O=i[10],oA=i[14],z=i[3],BA=i[7],dA=i[11],uA=i[15];return s[0]=o*w+g*u+r*P+a*z,s[4]=o*R+g*L+r*V+a*BA,s[8]=o*F+g*k+r*O+a*dA,s[12]=o*m+g*T+r*oA+a*uA,s[1]=I*w+E*u+C*P+Q*z,s[5]=I*R+E*L+C*V+Q*BA,s[9]=I*F+E*k+C*O+Q*dA,s[13]=I*m+E*T+C*oA+Q*uA,s[2]=c*w+l*u+h*P+B*z,s[6]=c*R+l*L+h*V+B*BA,s[10]=c*F+l*k+h*O+B*dA,s[14]=c*m+l*T+h*oA+B*uA,s[3]=p*w+d*u+f*P+_*z,s[7]=p*R+d*L+f*V+_*BA,s[11]=p*F+d*k+f*O+_*dA,s[15]=p*m+d*T+f*oA+_*uA,this}multiplyScalar(A){const t=this.elements;return t[0]*=A,t[4]*=A,t[8]*=A,t[12]*=A,t[1]*=A,t[5]*=A,t[9]*=A,t[13]*=A,t[2]*=A,t[6]*=A,t[10]*=A,t[14]*=A,t[3]*=A,t[7]*=A,t[11]*=A,t[15]*=A,this}determinant(){const A=this.elements,t=A[0],e=A[4],i=A[8],s=A[12],o=A[1],g=A[5],r=A[9],a=A[13],I=A[2],E=A[6],C=A[10],Q=A[14],c=A[3],l=A[7],h=A[11],B=A[15];return c*(+s*r*E-i*a*E-s*g*C+e*a*C+i*g*Q-e*r*Q)+l*(+t*r*Q-t*a*C+s*o*C-i*o*Q+i*a*I-s*r*I)+h*(+t*a*E-t*g*Q-s*o*E+e*o*Q+s*g*I-e*a*I)+B*(-i*g*I-t*r*E+t*g*C+i*o*E-e*o*C+e*r*I)}transpose(){const A=this.elements;let t;return t=A[1],A[1]=A[4],A[4]=t,t=A[2],A[2]=A[8],A[8]=t,t=A[6],A[6]=A[9],A[9]=t,t=A[3],A[3]=A[12],A[12]=t,t=A[7],A[7]=A[13],A[13]=t,t=A[11],A[11]=A[14],A[14]=t,this}setPosition(A,t,e){const i=this.elements;return A.isVector3?(i[12]=A.x,i[13]=A.y,i[14]=A.z):(i[12]=A,i[13]=t,i[14]=e),this}invert(){const A=this.elements,t=A[0],e=A[1],i=A[2],s=A[3],o=A[4],g=A[5],r=A[6],a=A[7],I=A[8],E=A[9],C=A[10],Q=A[11],c=A[12],l=A[13],h=A[14],B=A[15],p=E*h*a-l*C*a+l*r*Q-g*h*Q-E*r*B+g*C*B,d=c*C*a-I*h*a-c*r*Q+o*h*Q+I*r*B-o*C*B,f=I*l*a-c*E*a+c*g*Q-o*l*Q-I*g*B+o*E*B,_=c*E*r-I*l*r-c*g*C+o*l*C+I*g*h-o*E*h,w=t*p+e*d+i*f+s*_;if(w===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const R=1/w;return A[0]=p*R,A[1]=(l*C*s-E*h*s-l*i*Q+e*h*Q+E*i*B-e*C*B)*R,A[2]=(g*h*s-l*r*s+l*i*a-e*h*a-g*i*B+e*r*B)*R,A[3]=(E*r*s-g*C*s-E*i*a+e*C*a+g*i*Q-e*r*Q)*R,A[4]=d*R,A[5]=(I*h*s-c*C*s+c*i*Q-t*h*Q-I*i*B+t*C*B)*R,A[6]=(c*r*s-o*h*s-c*i*a+t*h*a+o*i*B-t*r*B)*R,A[7]=(o*C*s-I*r*s+I*i*a-t*C*a-o*i*Q+t*r*Q)*R,A[8]=f*R,A[9]=(c*E*s-I*l*s-c*e*Q+t*l*Q+I*e*B-t*E*B)*R,A[10]=(o*l*s-c*g*s+c*e*a-t*l*a-o*e*B+t*g*B)*R,A[11]=(I*g*s-o*E*s-I*e*a+t*E*a+o*e*Q-t*g*Q)*R,A[12]=_*R,A[13]=(I*l*i-c*E*i+c*e*C-t*l*C-I*e*h+t*E*h)*R,A[14]=(c*g*i-o*l*i-c*e*r+t*l*r+o*e*h-t*g*h)*R,A[15]=(o*E*i-I*g*i+I*e*r-t*E*r-o*e*C+t*g*C)*R,this}scale(A){const t=this.elements,e=A.x,i=A.y,s=A.z;return t[0]*=e,t[4]*=i,t[8]*=s,t[1]*=e,t[5]*=i,t[9]*=s,t[2]*=e,t[6]*=i,t[10]*=s,t[3]*=e,t[7]*=i,t[11]*=s,this}getMaxScaleOnAxis(){const A=this.elements,t=A[0]*A[0]+A[1]*A[1]+A[2]*A[2],e=A[4]*A[4]+A[5]*A[5]+A[6]*A[6],i=A[8]*A[8]+A[9]*A[9]+A[10]*A[10];return Math.sqrt(Math.max(t,e,i))}makeTranslation(A,t,e){return A.isVector3?this.set(1,0,0,A.x,0,1,0,A.y,0,0,1,A.z,0,0,0,1):this.set(1,0,0,A,0,1,0,t,0,0,1,e,0,0,0,1),this}makeRotationX(A){const t=Math.cos(A),e=Math.sin(A);return this.set(1,0,0,0,0,t,-e,0,0,e,t,0,0,0,0,1),this}makeRotationY(A){const t=Math.cos(A),e=Math.sin(A);return this.set(t,0,e,0,0,1,0,0,-e,0,t,0,0,0,0,1),this}makeRotationZ(A){const t=Math.cos(A),e=Math.sin(A);return this.set(t,-e,0,0,e,t,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(A,t){const e=Math.cos(t),i=Math.sin(t),s=1-e,o=A.x,g=A.y,r=A.z,a=s*o,I=s*g;return this.set(a*o+e,a*g-i*r,a*r+i*g,0,a*g+i*r,I*g+e,I*r-i*o,0,a*r-i*g,I*r+i*o,s*r*r+e,0,0,0,0,1),this}makeScale(A,t,e){return this.set(A,0,0,0,0,t,0,0,0,0,e,0,0,0,0,1),this}makeShear(A,t,e,i,s,o){return this.set(1,e,s,0,A,1,o,0,t,i,1,0,0,0,0,1),this}compose(A,t,e){const i=this.elements,s=t._x,o=t._y,g=t._z,r=t._w,a=s+s,I=o+o,E=g+g,C=s*a,Q=s*I,c=s*E,l=o*I,h=o*E,B=g*E,p=r*a,d=r*I,f=r*E,_=e.x,w=e.y,R=e.z;return i[0]=(1-(l+B))*_,i[1]=(Q+f)*_,i[2]=(c-d)*_,i[3]=0,i[4]=(Q-f)*w,i[5]=(1-(C+B))*w,i[6]=(h+p)*w,i[7]=0,i[8]=(c+d)*R,i[9]=(h-p)*R,i[10]=(1-(C+l))*R,i[11]=0,i[12]=A.x,i[13]=A.y,i[14]=A.z,i[15]=1,this}decompose(A,t,e){const i=this.elements;let s=oi.set(i[0],i[1],i[2]).length();const o=oi.set(i[4],i[5],i[6]).length(),g=oi.set(i[8],i[9],i[10]).length();this.determinant()<0&&(s=-s),A.x=i[12],A.y=i[13],A.z=i[14],Yt.copy(this);const a=1/s,I=1/o,E=1/g;return Yt.elements[0]*=a,Yt.elements[1]*=a,Yt.elements[2]*=a,Yt.elements[4]*=I,Yt.elements[5]*=I,Yt.elements[6]*=I,Yt.elements[8]*=E,Yt.elements[9]*=E,Yt.elements[10]*=E,t.setFromRotationMatrix(Yt),e.x=s,e.y=o,e.z=g,this}makePerspective(A,t,e,i,s,o,g=le){const r=this.elements,a=2*s/(t-A),I=2*s/(e-i),E=(t+A)/(t-A),C=(e+i)/(e-i);let Q,c;if(g===le)Q=-(o+s)/(o-s),c=-2*o*s/(o-s);else if(g===cs)Q=-o/(o-s),c=-o*s/(o-s);else throw new Error("THREE.Matrix4.makePerspective(): Invalid coordinate system: "+g);return r[0]=a,r[4]=0,r[8]=E,r[12]=0,r[1]=0,r[5]=I,r[9]=C,r[13]=0,r[2]=0,r[6]=0,r[10]=Q,r[14]=c,r[3]=0,r[7]=0,r[11]=-1,r[15]=0,this}makeOrthographic(A,t,e,i,s,o,g=le){const r=this.elements,a=1/(t-A),I=1/(e-i),E=1/(o-s),C=(t+A)*a,Q=(e+i)*I;let c,l;if(g===le)c=(o+s)*E,l=-2*E;else if(g===cs)c=s*E,l=-1*E;else throw new Error("THREE.Matrix4.makeOrthographic(): Invalid coordinate system: "+g);return r[0]=2*a,r[4]=0,r[8]=0,r[12]=-C,r[1]=0,r[5]=2*I,r[9]=0,r[13]=-Q,r[2]=0,r[6]=0,r[10]=l,r[14]=-c,r[3]=0,r[7]=0,r[11]=0,r[15]=1,this}equals(A){const t=this.elements,e=A.elements;for(let i=0;i<16;i++)if(t[i]!==e[i])return!1;return!0}fromArray(A,t=0){for(let e=0;e<16;e++)this.elements[e]=A[e+t];return this}toArray(A=[],t=0){const e=this.elements;return A[t]=e[0],A[t+1]=e[1],A[t+2]=e[2],A[t+3]=e[3],A[t+4]=e[4],A[t+5]=e[5],A[t+6]=e[6],A[t+7]=e[7],A[t+8]=e[8],A[t+9]=e[9],A[t+10]=e[10],A[t+11]=e[11],A[t+12]=e[12],A[t+13]=e[13],A[t+14]=e[14],A[t+15]=e[15],A}}const oi=new M,Yt=new KA,SC=new M(0,0,0),MC=new M(1,1,1),Re=new M,Rn=new M,Tt=new M,or=new KA,gr=new Zt;class Jt{constructor(A=0,t=0,e=0,i=Jt.DEFAULT_ORDER){this.isEuler=!0,this._x=A,this._y=t,this._z=e,this._order=i}get x(){return this._x}set x(A){this._x=A,this._onChangeCallback()}get y(){return this._y}set y(A){this._y=A,this._onChangeCallback()}get z(){return this._z}set z(A){this._z=A,this._onChangeCallback()}get order(){return this._order}set order(A){this._order=A,this._onChangeCallback()}set(A,t,e,i=this._order){return this._x=A,this._y=t,this._z=e,this._order=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(A){return this._x=A._x,this._y=A._y,this._z=A._z,this._order=A._order,this._onChangeCallback(),this}setFromRotationMatrix(A,t=this._order,e=!0){const i=A.elements,s=i[0],o=i[4],g=i[8],r=i[1],a=i[5],I=i[9],E=i[2],C=i[6],Q=i[10];switch(t){case"XYZ":this._y=Math.asin(lt(g,-1,1)),Math.abs(g)<.9999999?(this._x=Math.atan2(-I,Q),this._z=Math.atan2(-o,s)):(this._x=Math.atan2(C,a),this._z=0);break;case"YXZ":this._x=Math.asin(-lt(I,-1,1)),Math.abs(I)<.9999999?(this._y=Math.atan2(g,Q),this._z=Math.atan2(r,a)):(this._y=Math.atan2(-E,s),this._z=0);break;case"ZXY":this._x=Math.asin(lt(C,-1,1)),Math.abs(C)<.9999999?(this._y=Math.atan2(-E,Q),this._z=Math.atan2(-o,a)):(this._y=0,this._z=Math.atan2(r,s));break;case"ZYX":this._y=Math.asin(-lt(E,-1,1)),Math.abs(E)<.9999999?(this._x=Math.atan2(C,Q),this._z=Math.atan2(r,s)):(this._x=0,this._z=Math.atan2(-o,a));break;case"YZX":this._z=Math.asin(lt(r,-1,1)),Math.abs(r)<.9999999?(this._x=Math.atan2(-I,a),this._y=Math.atan2(-E,s)):(this._x=0,this._y=Math.atan2(g,Q));break;case"XZY":this._z=Math.asin(-lt(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(C,a),this._y=Math.atan2(g,s)):(this._x=Math.atan2(-I,Q),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+t)}return this._order=t,e===!0&&this._onChangeCallback(),this}setFromQuaternion(A,t,e){return or.makeRotationFromQuaternion(A),this.setFromRotationMatrix(or,t,e)}setFromVector3(A,t=this._order){return this.set(A.x,A.y,A.z,t)}reorder(A){return gr.setFromEuler(this),this.setFromQuaternion(gr,A)}equals(A){return A._x===this._x&&A._y===this._y&&A._z===this._z&&A._order===this._order}fromArray(A){return this._x=A[0],this._y=A[1],this._z=A[2],A[3]!==void 0&&(this._order=A[3]),this._onChangeCallback(),this}toArray(A=[],t=0){return A[t]=this._x,A[t+1]=this._y,A[t+2]=this._z,A[t+3]=this._order,A}_onChange(A){return this._onChangeCallback=A,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}}Jt.DEFAULT_ORDER="XYZ";class ig{constructor(){this.mask=1}set(A){this.mask=(1<>>0}enable(A){this.mask|=1<1){for(let t=0;t1){for(let e=0;e0&&(i.userData=this.userData),i.layers=this.layers.mask,i.matrix=this.matrix.toArray(),i.up=this.up.toArray(),this.matrixAutoUpdate===!1&&(i.matrixAutoUpdate=!1),this.isInstancedMesh&&(i.type="InstancedMesh",i.count=this.count,i.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(i.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(i.type="BatchedMesh",i.perObjectFrustumCulled=this.perObjectFrustumCulled,i.sortObjects=this.sortObjects,i.drawRanges=this._drawRanges,i.reservedRanges=this._reservedRanges,i.visibility=this._visibility,i.active=this._active,i.bounds=this._bounds.map(g=>({boxInitialized:g.boxInitialized,boxMin:g.box.min.toArray(),boxMax:g.box.max.toArray(),sphereInitialized:g.sphereInitialized,sphereRadius:g.sphere.radius,sphereCenter:g.sphere.center.toArray()})),i.maxGeometryCount=this._maxGeometryCount,i.maxVertexCount=this._maxVertexCount,i.maxIndexCount=this._maxIndexCount,i.geometryInitialized=this._geometryInitialized,i.geometryCount=this._geometryCount,i.matricesTexture=this._matricesTexture.toJSON(A),this._colorsTexture!==null&&(i.colorsTexture=this._colorsTexture.toJSON(A)),this.boundingSphere!==null&&(i.boundingSphere={center:i.boundingSphere.center.toArray(),radius:i.boundingSphere.radius}),this.boundingBox!==null&&(i.boundingBox={min:i.boundingBox.min.toArray(),max:i.boundingBox.max.toArray()}));function s(g,r){return g[r.uuid]===void 0&&(g[r.uuid]=r.toJSON(A)),r.uuid}if(this.isScene)this.background&&(this.background.isColor?i.background=this.background.toJSON():this.background.isTexture&&(i.background=this.background.toJSON(A).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(i.environment=this.environment.toJSON(A).uuid);else if(this.isMesh||this.isLine||this.isPoints){i.geometry=s(A.geometries,this.geometry);const g=this.geometry.parameters;if(g!==void 0&&g.shapes!==void 0){const r=g.shapes;if(Array.isArray(r))for(let a=0,I=r.length;a0){i.children=[];for(let g=0;g0){i.animations=[];for(let g=0;g0&&(e.geometries=g),r.length>0&&(e.materials=r),a.length>0&&(e.textures=a),I.length>0&&(e.images=I),E.length>0&&(e.shapes=E),C.length>0&&(e.skeletons=C),Q.length>0&&(e.animations=Q),c.length>0&&(e.nodes=c)}return e.object=i,e;function o(g){const r=[];for(const a in g){const I=g[a];delete I.metadata,r.push(I)}return r}}clone(A){return new this.constructor().copy(this,A)}copy(A,t=!0){if(this.name=A.name,this.up.copy(A.up),this.position.copy(A.position),this.rotation.order=A.rotation.order,this.quaternion.copy(A.quaternion),this.scale.copy(A.scale),this.matrix.copy(A.matrix),this.matrixWorld.copy(A.matrixWorld),this.matrixAutoUpdate=A.matrixAutoUpdate,this.matrixWorldAutoUpdate=A.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=A.matrixWorldNeedsUpdate,this.layers.mask=A.layers.mask,this.visible=A.visible,this.castShadow=A.castShadow,this.receiveShadow=A.receiveShadow,this.frustumCulled=A.frustumCulled,this.renderOrder=A.renderOrder,this.animations=A.animations.slice(),this.userData=JSON.parse(JSON.stringify(A.userData)),t===!0)for(let e=0;e0?i.multiplyScalar(1/Math.sqrt(s)):i.set(0,0,0)}static getBarycoord(A,t,e,i,s){Kt.subVectors(i,t),Ee.subVectors(e,t),go.subVectors(A,t);const o=Kt.dot(Kt),g=Kt.dot(Ee),r=Kt.dot(go),a=Ee.dot(Ee),I=Ee.dot(go),E=o*a-g*g;if(E===0)return s.set(0,0,0),null;const C=1/E,Q=(a*r-g*I)*C,c=(o*I-g*r)*C;return s.set(1-Q-c,c,Q)}static containsPoint(A,t,e,i){return this.getBarycoord(A,t,e,i,Ce)===null?!1:Ce.x>=0&&Ce.y>=0&&Ce.x+Ce.y<=1}static getInterpolation(A,t,e,i,s,o,g,r){return this.getBarycoord(A,t,e,i,Ce)===null?(r.x=0,r.y=0,"z"in r&&(r.z=0),"w"in r&&(r.w=0),null):(r.setScalar(0),r.addScaledVector(s,Ce.x),r.addScaledVector(o,Ce.y),r.addScaledVector(g,Ce.z),r)}static isFrontFacing(A,t,e,i){return Kt.subVectors(e,t),Ee.subVectors(A,t),Kt.cross(Ee).dot(i)<0}set(A,t,e){return this.a.copy(A),this.b.copy(t),this.c.copy(e),this}setFromPointsAndIndices(A,t,e,i){return this.a.copy(A[t]),this.b.copy(A[e]),this.c.copy(A[i]),this}setFromAttributeAndIndices(A,t,e,i){return this.a.fromBufferAttribute(A,t),this.b.fromBufferAttribute(A,e),this.c.fromBufferAttribute(A,i),this}clone(){return new this.constructor().copy(this)}copy(A){return this.a.copy(A.a),this.b.copy(A.b),this.c.copy(A.c),this}getArea(){return Kt.subVectors(this.c,this.b),Ee.subVectors(this.a,this.b),Kt.cross(Ee).length()*.5}getMidpoint(A){return A.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(A){return zt.getNormal(this.a,this.b,this.c,A)}getPlane(A){return A.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(A,t){return zt.getBarycoord(A,this.a,this.b,this.c,t)}getInterpolation(A,t,e,i,s){return zt.getInterpolation(A,this.a,this.b,this.c,t,e,i,s)}containsPoint(A){return zt.containsPoint(A,this.a,this.b,this.c)}isFrontFacing(A){return zt.isFrontFacing(this.a,this.b,this.c,A)}intersectsBox(A){return A.intersectsTriangle(this)}closestPointToPoint(A,t){const e=this.a,i=this.b,s=this.c;let o,g;ai.subVectors(i,e),Ii.subVectors(s,e),ro.subVectors(A,e);const r=ai.dot(ro),a=Ii.dot(ro);if(r<=0&&a<=0)return t.copy(e);ao.subVectors(A,i);const I=ai.dot(ao),E=Ii.dot(ao);if(I>=0&&E<=I)return t.copy(i);const C=r*E-I*a;if(C<=0&&r>=0&&I<=0)return o=r/(r-I),t.copy(e).addScaledVector(ai,o);Io.subVectors(A,s);const Q=ai.dot(Io),c=Ii.dot(Io);if(c>=0&&Q<=c)return t.copy(s);const l=Q*a-r*c;if(l<=0&&a>=0&&c<=0)return g=a/(a-c),t.copy(e).addScaledVector(Ii,g);const h=I*c-Q*E;if(h<=0&&E-I>=0&&Q-c>=0)return Qr.subVectors(s,i),g=(E-I)/(E-I+(Q-c)),t.copy(i).addScaledVector(Qr,g);const B=1/(h+l+C);return o=l*B,g=C*B,t.copy(e).addScaledVector(ai,o).addScaledVector(Ii,g)}equals(A){return A.a.equals(this.a)&&A.b.equals(this.b)&&A.c.equals(this.c)}}const Ya={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},Se={h:0,s:0,l:0},Mn={h:0,s:0,l:0};function Eo(n,A,t){return t<0&&(t+=1),t>1&&(t-=1),t<1/6?n+(A-n)*6*t:t<1/2?A:t<2/3?n+(A-n)*6*(2/3-t):n}class FA{constructor(A,t,e){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(A,t,e)}set(A,t,e){if(t===void 0&&e===void 0){const i=A;i&&i.isColor?this.copy(i):typeof i=="number"?this.setHex(i):typeof i=="string"&&this.setStyle(i)}else this.setRGB(A,t,e);return this}setScalar(A){return this.r=A,this.g=A,this.b=A,this}setHex(A,t=Pt){return A=Math.floor(A),this.r=(A>>16&255)/255,this.g=(A>>8&255)/255,this.b=(A&255)/255,At.toWorkingColorSpace(this,t),this}setRGB(A,t,e,i=At.workingColorSpace){return this.r=A,this.g=t,this.b=e,At.toWorkingColorSpace(this,i),this}setHSL(A,t,e,i=At.workingColorSpace){if(A=tg(A,1),t=lt(t,0,1),e=lt(e,0,1),t===0)this.r=this.g=this.b=e;else{const s=e<=.5?e*(1+t):e+t-e*t,o=2*e-s;this.r=Eo(o,s,A+1/3),this.g=Eo(o,s,A),this.b=Eo(o,s,A-1/3)}return At.toWorkingColorSpace(this,i),this}setStyle(A,t=Pt){function e(s){s!==void 0&&parseFloat(s)<1&&console.warn("THREE.Color: Alpha component of "+A+" will be ignored.")}let i;if(i=/^(\w+)\(([^\)]*)\)/.exec(A)){let s;const o=i[1],g=i[2];switch(o){case"rgb":case"rgba":if(s=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(g))return e(s[4]),this.setRGB(Math.min(255,parseInt(s[1],10))/255,Math.min(255,parseInt(s[2],10))/255,Math.min(255,parseInt(s[3],10))/255,t);if(s=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(g))return e(s[4]),this.setRGB(Math.min(100,parseInt(s[1],10))/100,Math.min(100,parseInt(s[2],10))/100,Math.min(100,parseInt(s[3],10))/100,t);break;case"hsl":case"hsla":if(s=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(g))return e(s[4]),this.setHSL(parseFloat(s[1])/360,parseFloat(s[2])/100,parseFloat(s[3])/100,t);break;default:console.warn("THREE.Color: Unknown color model "+A)}}else if(i=/^\#([A-Fa-f\d]+)$/.exec(A)){const s=i[1],o=s.length;if(o===3)return this.setRGB(parseInt(s.charAt(0),16)/15,parseInt(s.charAt(1),16)/15,parseInt(s.charAt(2),16)/15,t);if(o===6)return this.setHex(parseInt(s,16),t);console.warn("THREE.Color: Invalid hex color "+A)}else if(A&&A.length>0)return this.setColorName(A,t);return this}setColorName(A,t=Pt){const e=Ya[A.toLowerCase()];return e!==void 0?this.setHex(e,t):console.warn("THREE.Color: Unknown color "+A),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(A){return this.r=A.r,this.g=A.g,this.b=A.b,this}copySRGBToLinear(A){return this.r=Fi(A.r),this.g=Fi(A.g),this.b=Fi(A.b),this}copyLinearToSRGB(A){return this.r=js(A.r),this.g=js(A.g),this.b=js(A.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(A=Pt){return At.fromWorkingColorSpace(wt.copy(this),A),Math.round(lt(wt.r*255,0,255))*65536+Math.round(lt(wt.g*255,0,255))*256+Math.round(lt(wt.b*255,0,255))}getHexString(A=Pt){return("000000"+this.getHex(A).toString(16)).slice(-6)}getHSL(A,t=At.workingColorSpace){At.fromWorkingColorSpace(wt.copy(this),t);const e=wt.r,i=wt.g,s=wt.b,o=Math.max(e,i,s),g=Math.min(e,i,s);let r,a;const I=(g+o)/2;if(g===o)r=0,a=0;else{const E=o-g;switch(a=I<=.5?E/(o+g):E/(2-o-g),o){case e:r=(i-s)/E+(i0!=A>0&&this.version++,this._alphaTest=A}onBuild(){}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(A){if(A!==void 0)for(const t in A){const e=A[t];if(e===void 0){console.warn(`THREE.Material: parameter '${t}' has value of undefined.`);continue}const i=this[t];if(i===void 0){console.warn(`THREE.Material: '${t}' is not a property of THREE.${this.type}.`);continue}i&&i.isColor?i.set(e):i&&i.isVector3&&e&&e.isVector3?i.copy(e):this[t]=e}}toJSON(A){const t=A===void 0||typeof A=="string";t&&(A={textures:{},images:{}});const e={metadata:{version:4.6,type:"Material",generator:"Material.toJSON"}};e.uuid=this.uuid,e.type=this.type,this.name!==""&&(e.name=this.name),this.color&&this.color.isColor&&(e.color=this.color.getHex()),this.roughness!==void 0&&(e.roughness=this.roughness),this.metalness!==void 0&&(e.metalness=this.metalness),this.sheen!==void 0&&(e.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(e.sheenColor=this.sheenColor.getHex()),this.sheenRoughness!==void 0&&(e.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(e.emissive=this.emissive.getHex()),this.emissiveIntensity!==void 0&&this.emissiveIntensity!==1&&(e.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(e.specular=this.specular.getHex()),this.specularIntensity!==void 0&&(e.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(e.specularColor=this.specularColor.getHex()),this.shininess!==void 0&&(e.shininess=this.shininess),this.clearcoat!==void 0&&(e.clearcoat=this.clearcoat),this.clearcoatRoughness!==void 0&&(e.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(e.clearcoatMap=this.clearcoatMap.toJSON(A).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(e.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(A).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(e.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(A).uuid,e.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.dispersion!==void 0&&(e.dispersion=this.dispersion),this.iridescence!==void 0&&(e.iridescence=this.iridescence),this.iridescenceIOR!==void 0&&(e.iridescenceIOR=this.iridescenceIOR),this.iridescenceThicknessRange!==void 0&&(e.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(e.iridescenceMap=this.iridescenceMap.toJSON(A).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(e.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(A).uuid),this.anisotropy!==void 0&&(e.anisotropy=this.anisotropy),this.anisotropyRotation!==void 0&&(e.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(e.anisotropyMap=this.anisotropyMap.toJSON(A).uuid),this.map&&this.map.isTexture&&(e.map=this.map.toJSON(A).uuid),this.matcap&&this.matcap.isTexture&&(e.matcap=this.matcap.toJSON(A).uuid),this.alphaMap&&this.alphaMap.isTexture&&(e.alphaMap=this.alphaMap.toJSON(A).uuid),this.lightMap&&this.lightMap.isTexture&&(e.lightMap=this.lightMap.toJSON(A).uuid,e.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(e.aoMap=this.aoMap.toJSON(A).uuid,e.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(e.bumpMap=this.bumpMap.toJSON(A).uuid,e.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(e.normalMap=this.normalMap.toJSON(A).uuid,e.normalMapType=this.normalMapType,e.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(e.displacementMap=this.displacementMap.toJSON(A).uuid,e.displacementScale=this.displacementScale,e.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(e.roughnessMap=this.roughnessMap.toJSON(A).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(e.metalnessMap=this.metalnessMap.toJSON(A).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(e.emissiveMap=this.emissiveMap.toJSON(A).uuid),this.specularMap&&this.specularMap.isTexture&&(e.specularMap=this.specularMap.toJSON(A).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(e.specularIntensityMap=this.specularIntensityMap.toJSON(A).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(e.specularColorMap=this.specularColorMap.toJSON(A).uuid),this.envMap&&this.envMap.isTexture&&(e.envMap=this.envMap.toJSON(A).uuid,this.combine!==void 0&&(e.combine=this.combine)),this.envMapRotation!==void 0&&(e.envMapRotation=this.envMapRotation.toArray()),this.envMapIntensity!==void 0&&(e.envMapIntensity=this.envMapIntensity),this.reflectivity!==void 0&&(e.reflectivity=this.reflectivity),this.refractionRatio!==void 0&&(e.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(e.gradientMap=this.gradientMap.toJSON(A).uuid),this.transmission!==void 0&&(e.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(e.transmissionMap=this.transmissionMap.toJSON(A).uuid),this.thickness!==void 0&&(e.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(e.thicknessMap=this.thicknessMap.toJSON(A).uuid),this.attenuationDistance!==void 0&&this.attenuationDistance!==1/0&&(e.attenuationDistance=this.attenuationDistance),this.attenuationColor!==void 0&&(e.attenuationColor=this.attenuationColor.getHex()),this.size!==void 0&&(e.size=this.size),this.shadowSide!==null&&(e.shadowSide=this.shadowSide),this.sizeAttenuation!==void 0&&(e.sizeAttenuation=this.sizeAttenuation),this.blending!==Ni&&(e.blending=this.blending),this.side!==de&&(e.side=this.side),this.vertexColors===!0&&(e.vertexColors=!0),this.opacity<1&&(e.opacity=this.opacity),this.transparent===!0&&(e.transparent=!0),this.blendSrc!==To&&(e.blendSrc=this.blendSrc),this.blendDst!==ko&&(e.blendDst=this.blendDst),this.blendEquation!==We&&(e.blendEquation=this.blendEquation),this.blendSrcAlpha!==null&&(e.blendSrcAlpha=this.blendSrcAlpha),this.blendDstAlpha!==null&&(e.blendDstAlpha=this.blendDstAlpha),this.blendEquationAlpha!==null&&(e.blendEquationAlpha=this.blendEquationAlpha),this.blendColor&&this.blendColor.isColor&&(e.blendColor=this.blendColor.getHex()),this.blendAlpha!==0&&(e.blendAlpha=this.blendAlpha),this.depthFunc!==as&&(e.depthFunc=this.depthFunc),this.depthTest===!1&&(e.depthTest=this.depthTest),this.depthWrite===!1&&(e.depthWrite=this.depthWrite),this.colorWrite===!1&&(e.colorWrite=this.colorWrite),this.stencilWriteMask!==255&&(e.stencilWriteMask=this.stencilWriteMask),this.stencilFunc!==$g&&(e.stencilFunc=this.stencilFunc),this.stencilRef!==0&&(e.stencilRef=this.stencilRef),this.stencilFuncMask!==255&&(e.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==ti&&(e.stencilFail=this.stencilFail),this.stencilZFail!==ti&&(e.stencilZFail=this.stencilZFail),this.stencilZPass!==ti&&(e.stencilZPass=this.stencilZPass),this.stencilWrite===!0&&(e.stencilWrite=this.stencilWrite),this.rotation!==void 0&&this.rotation!==0&&(e.rotation=this.rotation),this.polygonOffset===!0&&(e.polygonOffset=!0),this.polygonOffsetFactor!==0&&(e.polygonOffsetFactor=this.polygonOffsetFactor),this.polygonOffsetUnits!==0&&(e.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth!==void 0&&this.linewidth!==1&&(e.linewidth=this.linewidth),this.dashSize!==void 0&&(e.dashSize=this.dashSize),this.gapSize!==void 0&&(e.gapSize=this.gapSize),this.scale!==void 0&&(e.scale=this.scale),this.dithering===!0&&(e.dithering=!0),this.alphaTest>0&&(e.alphaTest=this.alphaTest),this.alphaHash===!0&&(e.alphaHash=!0),this.alphaToCoverage===!0&&(e.alphaToCoverage=!0),this.premultipliedAlpha===!0&&(e.premultipliedAlpha=!0),this.forceSinglePass===!0&&(e.forceSinglePass=!0),this.wireframe===!0&&(e.wireframe=!0),this.wireframeLinewidth>1&&(e.wireframeLinewidth=this.wireframeLinewidth),this.wireframeLinecap!=="round"&&(e.wireframeLinecap=this.wireframeLinecap),this.wireframeLinejoin!=="round"&&(e.wireframeLinejoin=this.wireframeLinejoin),this.flatShading===!0&&(e.flatShading=!0),this.visible===!1&&(e.visible=!1),this.toneMapped===!1&&(e.toneMapped=!1),this.fog===!1&&(e.fog=!1),Object.keys(this.userData).length>0&&(e.userData=this.userData);function i(s){const o=[];for(const g in s){const r=s[g];delete r.metadata,o.push(r)}return o}if(t){const s=i(A.textures),o=i(A.images);s.length>0&&(e.textures=s),o.length>0&&(e.images=o)}return e}clone(){return new this.constructor().copy(this)}copy(A){this.name=A.name,this.blending=A.blending,this.side=A.side,this.vertexColors=A.vertexColors,this.opacity=A.opacity,this.transparent=A.transparent,this.blendSrc=A.blendSrc,this.blendDst=A.blendDst,this.blendEquation=A.blendEquation,this.blendSrcAlpha=A.blendSrcAlpha,this.blendDstAlpha=A.blendDstAlpha,this.blendEquationAlpha=A.blendEquationAlpha,this.blendColor.copy(A.blendColor),this.blendAlpha=A.blendAlpha,this.depthFunc=A.depthFunc,this.depthTest=A.depthTest,this.depthWrite=A.depthWrite,this.stencilWriteMask=A.stencilWriteMask,this.stencilFunc=A.stencilFunc,this.stencilRef=A.stencilRef,this.stencilFuncMask=A.stencilFuncMask,this.stencilFail=A.stencilFail,this.stencilZFail=A.stencilZFail,this.stencilZPass=A.stencilZPass,this.stencilWrite=A.stencilWrite;const t=A.clippingPlanes;let e=null;if(t!==null){const i=t.length;e=new Array(i);for(let s=0;s!==i;++s)e[s]=t[s].clone()}return this.clippingPlanes=e,this.clipIntersection=A.clipIntersection,this.clipShadows=A.clipShadows,this.shadowSide=A.shadowSide,this.colorWrite=A.colorWrite,this.precision=A.precision,this.polygonOffset=A.polygonOffset,this.polygonOffsetFactor=A.polygonOffsetFactor,this.polygonOffsetUnits=A.polygonOffsetUnits,this.dithering=A.dithering,this.alphaTest=A.alphaTest,this.alphaHash=A.alphaHash,this.alphaToCoverage=A.alphaToCoverage,this.premultipliedAlpha=A.premultipliedAlpha,this.forceSinglePass=A.forceSinglePass,this.visible=A.visible,this.toneMapped=A.toneMapped,this.userData=JSON.parse(JSON.stringify(A.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(A){A===!0&&this.version++}}class Te extends $t{constructor(A){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new FA(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new Jt,this.combine=ws,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(A)}copy(A){return super.copy(A),this.color.copy(A.color),this.map=A.map,this.lightMap=A.lightMap,this.lightMapIntensity=A.lightMapIntensity,this.aoMap=A.aoMap,this.aoMapIntensity=A.aoMapIntensity,this.specularMap=A.specularMap,this.alphaMap=A.alphaMap,this.envMap=A.envMap,this.envMapRotation.copy(A.envMapRotation),this.combine=A.combine,this.reflectivity=A.reflectivity,this.refractionRatio=A.refractionRatio,this.wireframe=A.wireframe,this.wireframeLinewidth=A.wireframeLinewidth,this.wireframeLinecap=A.wireframeLinecap,this.wireframeLinejoin=A.wireframeLinejoin,this.fog=A.fog,this}}const ct=new M,Nn=new AA;class vt{constructor(A,t,e=!1){if(Array.isArray(A))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,this.name="",this.array=A,this.itemSize=t,this.count=A!==void 0?A.length/t:0,this.normalized=e,this.usage=qo,this._updateRange={offset:0,count:-1},this.updateRanges=[],this.gpuType=ee,this.version=0}onUploadCallback(){}set needsUpdate(A){A===!0&&this.version++}get updateRange(){return eg("THREE.BufferAttribute: updateRange() is deprecated and will be removed in r169. Use addUpdateRange() instead."),this._updateRange}setUsage(A){return this.usage=A,this}addUpdateRange(A,t){this.updateRanges.push({start:A,count:t})}clearUpdateRanges(){this.updateRanges.length=0}copy(A){return this.name=A.name,this.array=new A.array.constructor(A.array),this.itemSize=A.itemSize,this.count=A.count,this.normalized=A.normalized,this.usage=A.usage,this.gpuType=A.gpuType,this}copyAt(A,t,e){A*=this.itemSize,e*=t.itemSize;for(let i=0,s=this.itemSize;i0&&(A.userData=this.userData),this.parameters!==void 0){const r=this.parameters;for(const a in r)r[a]!==void 0&&(A[a]=r[a]);return A}A.data={attributes:{}};const t=this.index;t!==null&&(A.data.index={type:t.array.constructor.name,array:Array.prototype.slice.call(t.array)});const e=this.attributes;for(const r in e){const a=e[r];A.data.attributes[r]=a.toJSON(A.data)}const i={};let s=!1;for(const r in this.morphAttributes){const a=this.morphAttributes[r],I=[];for(let E=0,C=a.length;E0&&(i[r]=I,s=!0)}s&&(A.data.morphAttributes=i,A.data.morphTargetsRelative=this.morphTargetsRelative);const o=this.groups;o.length>0&&(A.data.groups=JSON.parse(JSON.stringify(o)));const g=this.boundingSphere;return g!==null&&(A.data.boundingSphere={center:g.center.toArray(),radius:g.radius}),A}clone(){return new this.constructor().copy(this)}copy(A){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const t={};this.name=A.name;const e=A.index;e!==null&&this.setIndex(e.clone(t));const i=A.attributes;for(const a in i){const I=i[a];this.setAttribute(a,I.clone(t))}const s=A.morphAttributes;for(const a in s){const I=[],E=s[a];for(let C=0,Q=E.length;C0){const i=t[e[0]];if(i!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let s=0,o=i.length;s(A.far-A.near)**2))&&(Br.copy(s).invert(),Oe.copy(A.ray).applyMatrix4(Br),!(e.boundingBox!==null&&Oe.intersectsBox(e.boundingBox)===!1)&&this._computeIntersections(A,t,Oe)))}_computeIntersections(A,t,e){let i;const s=this.geometry,o=this.material,g=s.index,r=s.attributes.position,a=s.attributes.uv,I=s.attributes.uv1,E=s.attributes.normal,C=s.groups,Q=s.drawRange;if(g!==null)if(Array.isArray(o))for(let c=0,l=C.length;ct.far?null:{distance:a,point:Gn.clone(),object:n}}function Tn(n,A,t,e,i,s,o,g,r,a){n.getVertexPosition(g,Ci),n.getVertexPosition(r,Qi),n.getVertexPosition(a,Bi);const I=UC(n,A,t,e,Ci,Qi,Bi,Un);if(I){i&&(_n.fromBufferAttribute(i,g),Ln.fromBufferAttribute(i,r),vn.fromBufferAttribute(i,a),I.uv=zt.getInterpolation(Un,Ci,Qi,Bi,_n,Ln,vn,new AA)),s&&(_n.fromBufferAttribute(s,g),Ln.fromBufferAttribute(s,r),vn.fromBufferAttribute(s,a),I.uv1=zt.getInterpolation(Un,Ci,Qi,Bi,_n,Ln,vn,new AA)),o&&(cr.fromBufferAttribute(o,g),lr.fromBufferAttribute(o,r),dr.fromBufferAttribute(o,a),I.normal=zt.getInterpolation(Un,Ci,Qi,Bi,cr,lr,dr,new M),I.normal.dot(e.direction)>0&&I.normal.multiplyScalar(-1));const E={a:g,b:r,c:a,normal:new M,materialIndex:0};zt.getNormal(Ci,Qi,Bi,E.normal),I.face=E}return I}class hn extends it{constructor(A=1,t=1,e=1,i=1,s=1,o=1){super(),this.type="BoxGeometry",this.parameters={width:A,height:t,depth:e,widthSegments:i,heightSegments:s,depthSegments:o};const g=this;i=Math.floor(i),s=Math.floor(s),o=Math.floor(o);const r=[],a=[],I=[],E=[];let C=0,Q=0;c("z","y","x",-1,-1,e,t,A,o,s,0),c("z","y","x",1,-1,e,t,-A,o,s,1),c("x","z","y",1,1,A,e,t,i,o,2),c("x","z","y",1,-1,A,e,-t,i,o,3),c("x","y","z",1,-1,A,t,e,i,s,4),c("x","y","z",-1,-1,A,t,-e,i,s,5),this.setIndex(r),this.setAttribute("position",new OA(a,3)),this.setAttribute("normal",new OA(I,3)),this.setAttribute("uv",new OA(E,2));function c(l,h,B,p,d,f,_,w,R,F,m){const u=f/R,L=_/F,k=f/2,T=_/2,P=w/2,V=R+1,O=F+1;let oA=0,z=0;const BA=new M;for(let dA=0;dA0?1:-1,I.push(BA.x,BA.y,BA.z),E.push(HA/R),E.push(1-dA/F),oA+=1}}for(let dA=0;dA0&&(t.defines=this.defines),t.vertexShader=this.vertexShader,t.fragmentShader=this.fragmentShader,t.lights=this.lights,t.clipping=this.clipping;const e={};for(const i in this.extensions)this.extensions[i]===!0&&(e[i]=!0);return Object.keys(e).length>0&&(t.extensions=e),t}}class ng extends st{constructor(){super(),this.isCamera=!0,this.type="Camera",this.matrixWorldInverse=new KA,this.projectionMatrix=new KA,this.projectionMatrixInverse=new KA,this.coordinateSystem=le}copy(A,t){return super.copy(A,t),this.matrixWorldInverse.copy(A.matrixWorldInverse),this.projectionMatrix.copy(A.projectionMatrix),this.projectionMatrixInverse.copy(A.projectionMatrixInverse),this.coordinateSystem=A.coordinateSystem,this}getWorldDirection(A){return super.getWorldDirection(A).negate()}updateMatrixWorld(A){super.updateMatrixWorld(A),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(A,t){super.updateWorldMatrix(A,t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return new this.constructor().copy(this)}}const Me=new M,ur=new AA,fr=new AA;class _t extends ng{constructor(A=50,t=1,e=.1,i=2e3){super(),this.isPerspectiveCamera=!0,this.type="PerspectiveCamera",this.fov=A,this.zoom=1,this.near=e,this.far=i,this.focus=10,this.aspect=t,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(A,t){return super.copy(A,t),this.fov=A.fov,this.zoom=A.zoom,this.near=A.near,this.far=A.far,this.focus=A.focus,this.aspect=A.aspect,this.view=A.view===null?null:Object.assign({},A.view),this.filmGauge=A.filmGauge,this.filmOffset=A.filmOffset,this}setFocalLength(A){const t=.5*this.getFilmHeight()/A;this.fov=ki*2*Math.atan(t),this.updateProjectionMatrix()}getFocalLength(){const A=Math.tan(sn*.5*this.fov);return .5*this.getFilmHeight()/A}getEffectiveFOV(){return ki*2*Math.atan(Math.tan(sn*.5*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}getViewBounds(A,t,e){Me.set(-1,-1,.5).applyMatrix4(this.projectionMatrixInverse),t.set(Me.x,Me.y).multiplyScalar(-A/Me.z),Me.set(1,1,.5).applyMatrix4(this.projectionMatrixInverse),e.set(Me.x,Me.y).multiplyScalar(-A/Me.z)}getViewSize(A,t){return this.getViewBounds(A,ur,fr),t.subVectors(fr,ur)}setViewOffset(A,t,e,i,s,o){this.aspect=A/t,this.view===null&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=A,this.view.fullHeight=t,this.view.offsetX=e,this.view.offsetY=i,this.view.width=s,this.view.height=o,this.updateProjectionMatrix()}clearViewOffset(){this.view!==null&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const A=this.near;let t=A*Math.tan(sn*.5*this.fov)/this.zoom,e=2*t,i=this.aspect*e,s=-.5*i;const o=this.view;if(this.view!==null&&this.view.enabled){const r=o.fullWidth,a=o.fullHeight;s+=o.offsetX*i/r,t-=o.offsetY*e/a,i*=o.width/r,e*=o.height/a}const g=this.filmOffset;g!==0&&(s+=A*g/this.getFilmWidth()),this.projectionMatrix.makePerspective(s,s+i,t,t-e,A,this.far,this.coordinateSystem),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(A){const t=super.toJSON(A);return t.object.fov=this.fov,t.object.zoom=this.zoom,t.object.near=this.near,t.object.far=this.far,t.object.focus=this.focus,t.object.aspect=this.aspect,this.view!==null&&(t.object.view=Object.assign({},this.view)),t.object.filmGauge=this.filmGauge,t.object.filmOffset=this.filmOffset,t}}const hi=-90,ci=1;class bC extends st{constructor(A,t,e){super(),this.type="CubeCamera",this.renderTarget=e,this.coordinateSystem=null,this.activeMipmapLevel=0;const i=new _t(hi,ci,A,t);i.layers=this.layers,this.add(i);const s=new _t(hi,ci,A,t);s.layers=this.layers,this.add(s);const o=new _t(hi,ci,A,t);o.layers=this.layers,this.add(o);const g=new _t(hi,ci,A,t);g.layers=this.layers,this.add(g);const r=new _t(hi,ci,A,t);r.layers=this.layers,this.add(r);const a=new _t(hi,ci,A,t);a.layers=this.layers,this.add(a)}updateCoordinateSystem(){const A=this.coordinateSystem,t=this.children.concat(),[e,i,s,o,g,r]=t;for(const a of t)this.remove(a);if(A===le)e.up.set(0,1,0),e.lookAt(1,0,0),i.up.set(0,1,0),i.lookAt(-1,0,0),s.up.set(0,0,-1),s.lookAt(0,1,0),o.up.set(0,0,1),o.lookAt(0,-1,0),g.up.set(0,1,0),g.lookAt(0,0,1),r.up.set(0,1,0),r.lookAt(0,0,-1);else if(A===cs)e.up.set(0,-1,0),e.lookAt(-1,0,0),i.up.set(0,-1,0),i.lookAt(1,0,0),s.up.set(0,0,1),s.lookAt(0,1,0),o.up.set(0,0,-1),o.lookAt(0,-1,0),g.up.set(0,-1,0),g.lookAt(0,0,1),r.up.set(0,-1,0),r.lookAt(0,0,-1);else throw new Error("THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: "+A);for(const a of t)this.add(a),a.updateMatrixWorld()}update(A,t){this.parent===null&&this.updateMatrixWorld();const{renderTarget:e,activeMipmapLevel:i}=this;this.coordinateSystem!==A.coordinateSystem&&(this.coordinateSystem=A.coordinateSystem,this.updateCoordinateSystem());const[s,o,g,r,a,I]=this.children,E=A.getRenderTarget(),C=A.getActiveCubeFace(),Q=A.getActiveMipmapLevel(),c=A.xr.enabled;A.xr.enabled=!1;const l=e.texture.generateMipmaps;e.texture.generateMipmaps=!1,A.setRenderTarget(e,0,i),A.render(t,s),A.setRenderTarget(e,1,i),A.render(t,o),A.setRenderTarget(e,2,i),A.render(t,g),A.setRenderTarget(e,3,i),A.render(t,r),A.setRenderTarget(e,4,i),A.render(t,a),e.texture.generateMipmaps=l,A.setRenderTarget(e,5,i),A.render(t,I),A.setRenderTarget(E,C,Q),A.xr.enabled=c,e.texture.needsPMREMUpdate=!0}}class sg extends Bt{constructor(A,t,e,i,s,o,g,r,a,I){A=A!==void 0?A:[],t=t!==void 0?t:Li,super(A,t,e,i,s,o,g,r,a,I),this.isCubeTexture=!0,this.flipY=!1}get images(){return this.image}set images(A){this.image=A}}class HC extends je{constructor(A=1,t={}){super(A,A,t),this.isWebGLCubeRenderTarget=!0;const e={width:A,height:A,depth:1},i=[e,e,e,e,e,e];this.texture=new sg(i,t.mapping,t.wrapS,t.wrapT,t.magFilter,t.minFilter,t.format,t.type,t.anisotropy,t.colorSpace),this.texture.isRenderTargetTexture=!0,this.texture.generateMipmaps=t.generateMipmaps!==void 0?t.generateMipmaps:!1,this.texture.minFilter=t.minFilter!==void 0?t.minFilter:Wt}fromEquirectangularTexture(A,t){this.texture.type=t.type,this.texture.colorSpace=t.colorSpace,this.texture.generateMipmaps=t.generateMipmaps,this.texture.minFilter=t.minFilter,this.texture.magFilter=t.magFilter;const e={uniforms:{tEquirect:{value:null}},vertexShader:` + + varying vec3 vWorldDirection; + + vec3 transformDirection( in vec3 dir, in mat4 matrix ) { + + return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz ); + + } + + void main() { + + vWorldDirection = transformDirection( position, modelMatrix ); + + #include + #include + + } + `,fragmentShader:` + + uniform sampler2D tEquirect; + + varying vec3 vWorldDirection; + + #include + + void main() { + + vec3 direction = normalize( vWorldDirection ); + + vec2 sampleUV = equirectUv( direction ); + + gl_FragColor = texture2D( tEquirect, sampleUV ); + + } + `},i=new hn(5,5,5),s=new ie({name:"CubemapFromEquirect",uniforms:bi(e.uniforms),vertexShader:e.vertexShader,fragmentShader:e.fragmentShader,side:Lt,blending:ve});s.uniforms.tEquirect.value=t;const o=new St(i,s),g=t.minFilter;return t.minFilter===Xe&&(t.minFilter=Wt),new bC(1,10,this).update(A,o),t.minFilter=g,o.geometry.dispose(),o.material.dispose(),this}clear(A,t,e,i){const s=A.getRenderTarget();for(let o=0;o<6;o++)A.setRenderTarget(this,o),A.clear(t,e,i);A.setRenderTarget(s)}}const Bo=new M,PC=new M,OC=new YA;class Fe{constructor(A=new M(1,0,0),t=0){this.isPlane=!0,this.normal=A,this.constant=t}set(A,t){return this.normal.copy(A),this.constant=t,this}setComponents(A,t,e,i){return this.normal.set(A,t,e),this.constant=i,this}setFromNormalAndCoplanarPoint(A,t){return this.normal.copy(A),this.constant=-t.dot(this.normal),this}setFromCoplanarPoints(A,t,e){const i=Bo.subVectors(e,t).cross(PC.subVectors(A,t)).normalize();return this.setFromNormalAndCoplanarPoint(i,A),this}copy(A){return this.normal.copy(A.normal),this.constant=A.constant,this}normalize(){const A=1/this.normal.length();return this.normal.multiplyScalar(A),this.constant*=A,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(A){return this.normal.dot(A)+this.constant}distanceToSphere(A){return this.distanceToPoint(A.center)-A.radius}projectPoint(A,t){return t.copy(A).addScaledVector(this.normal,-this.distanceToPoint(A))}intersectLine(A,t){const e=A.delta(Bo),i=this.normal.dot(e);if(i===0)return this.distanceToPoint(A.start)===0?t.copy(A.start):null;const s=-(A.start.dot(this.normal)+this.constant)/i;return s<0||s>1?null:t.copy(A.start).addScaledVector(e,s)}intersectsLine(A){const t=this.distanceToPoint(A.start),e=this.distanceToPoint(A.end);return t<0&&e>0||e<0&&t>0}intersectsBox(A){return A.intersectsPlane(this)}intersectsSphere(A){return A.intersectsPlane(this)}coplanarPoint(A){return A.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(A,t){const e=t||OC.getNormalMatrix(A),i=this.coplanarPoint(Bo).applyMatrix4(A),s=this.normal.applyMatrix3(e).normalize();return this.constant=-i.dot(s),this}translate(A){return this.constant-=A.dot(this.normal),this}equals(A){return A.normal.equals(this.normal)&&A.constant===this.constant}clone(){return new this.constructor().copy(this)}}const Je=new fe,kn=new M;class Ns{constructor(A=new Fe,t=new Fe,e=new Fe,i=new Fe,s=new Fe,o=new Fe){this.planes=[A,t,e,i,s,o]}set(A,t,e,i,s,o){const g=this.planes;return g[0].copy(A),g[1].copy(t),g[2].copy(e),g[3].copy(i),g[4].copy(s),g[5].copy(o),this}copy(A){const t=this.planes;for(let e=0;e<6;e++)t[e].copy(A.planes[e]);return this}setFromProjectionMatrix(A,t=le){const e=this.planes,i=A.elements,s=i[0],o=i[1],g=i[2],r=i[3],a=i[4],I=i[5],E=i[6],C=i[7],Q=i[8],c=i[9],l=i[10],h=i[11],B=i[12],p=i[13],d=i[14],f=i[15];if(e[0].setComponents(r-s,C-a,h-Q,f-B).normalize(),e[1].setComponents(r+s,C+a,h+Q,f+B).normalize(),e[2].setComponents(r+o,C+I,h+c,f+p).normalize(),e[3].setComponents(r-o,C-I,h-c,f-p).normalize(),e[4].setComponents(r-g,C-E,h-l,f-d).normalize(),t===le)e[5].setComponents(r+g,C+E,h+l,f+d).normalize();else if(t===cs)e[5].setComponents(g,E,l,d).normalize();else throw new Error("THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: "+t);return this}intersectsObject(A){if(A.boundingSphere!==void 0)A.boundingSphere===null&&A.computeBoundingSphere(),Je.copy(A.boundingSphere).applyMatrix4(A.matrixWorld);else{const t=A.geometry;t.boundingSphere===null&&t.computeBoundingSphere(),Je.copy(t.boundingSphere).applyMatrix4(A.matrixWorld)}return this.intersectsSphere(Je)}intersectsSprite(A){return Je.center.set(0,0,0),Je.radius=.7071067811865476,Je.applyMatrix4(A.matrixWorld),this.intersectsSphere(Je)}intersectsSphere(A){const t=this.planes,e=A.center,i=-A.radius;for(let s=0;s<6;s++)if(t[s].distanceToPoint(e)0?A.max.x:A.min.x,kn.y=i.normal.y>0?A.max.y:A.min.y,kn.z=i.normal.z>0?A.max.z:A.min.z,i.distanceToPoint(kn)<0)return!1}return!0}containsPoint(A){const t=this.planes;for(let e=0;e<6;e++)if(t[e].distanceToPoint(A)<0)return!1;return!0}clone(){return new this.constructor().copy(this)}}function Xa(){let n=null,A=!1,t=null,e=null;function i(s,o){t(s,o),e=n.requestAnimationFrame(i)}return{start:function(){A!==!0&&t!==null&&(e=n.requestAnimationFrame(i),A=!0)},stop:function(){n.cancelAnimationFrame(e),A=!1},setAnimationLoop:function(s){t=s},setContext:function(s){n=s}}}function JC(n){const A=new WeakMap;function t(g,r){const a=g.array,I=g.usage,E=a.byteLength,C=n.createBuffer();n.bindBuffer(r,C),n.bufferData(r,a,I),g.onUploadCallback();let Q;if(a instanceof Float32Array)Q=n.FLOAT;else if(a instanceof Uint16Array)g.isFloat16BufferAttribute?Q=n.HALF_FLOAT:Q=n.UNSIGNED_SHORT;else if(a instanceof Int16Array)Q=n.SHORT;else if(a instanceof Uint32Array)Q=n.UNSIGNED_INT;else if(a instanceof Int32Array)Q=n.INT;else if(a instanceof Int8Array)Q=n.BYTE;else if(a instanceof Uint8Array)Q=n.UNSIGNED_BYTE;else if(a instanceof Uint8ClampedArray)Q=n.UNSIGNED_BYTE;else throw new Error("THREE.WebGLAttributes: Unsupported buffer data format: "+a);return{buffer:C,type:Q,bytesPerElement:a.BYTES_PER_ELEMENT,version:g.version,size:E}}function e(g,r,a){const I=r.array,E=r._updateRange,C=r.updateRanges;if(n.bindBuffer(a,g),E.count===-1&&C.length===0&&n.bufferSubData(a,0,I),C.length!==0){for(let Q=0,c=C.length;Q 0 + vec4 plane; + #ifdef ALPHA_TO_COVERAGE + float distanceToPlane, distanceGradient; + float clipOpacity = 1.0; + #pragma unroll_loop_start + for ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) { + plane = clippingPlanes[ i ]; + distanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w; + distanceGradient = fwidth( distanceToPlane ) / 2.0; + clipOpacity *= smoothstep( - distanceGradient, distanceGradient, distanceToPlane ); + if ( clipOpacity == 0.0 ) discard; + } + #pragma unroll_loop_end + #if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES + float unionClipOpacity = 1.0; + #pragma unroll_loop_start + for ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) { + plane = clippingPlanes[ i ]; + distanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w; + distanceGradient = fwidth( distanceToPlane ) / 2.0; + unionClipOpacity *= 1.0 - smoothstep( - distanceGradient, distanceGradient, distanceToPlane ); + } + #pragma unroll_loop_end + clipOpacity *= 1.0 - unionClipOpacity; + #endif + diffuseColor.a *= clipOpacity; + if ( diffuseColor.a == 0.0 ) discard; + #else + #pragma unroll_loop_start + for ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) { + plane = clippingPlanes[ i ]; + if ( dot( vClipPosition, plane.xyz ) > plane.w ) discard; + } + #pragma unroll_loop_end + #if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES + bool clipped = true; + #pragma unroll_loop_start + for ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) { + plane = clippingPlanes[ i ]; + clipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped; + } + #pragma unroll_loop_end + if ( clipped ) discard; + #endif + #endif +#endif`,oQ=`#if NUM_CLIPPING_PLANES > 0 + varying vec3 vClipPosition; + uniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ]; +#endif`,gQ=`#if NUM_CLIPPING_PLANES > 0 + varying vec3 vClipPosition; +#endif`,rQ=`#if NUM_CLIPPING_PLANES > 0 + vClipPosition = - mvPosition.xyz; +#endif`,aQ=`#if defined( USE_COLOR_ALPHA ) + diffuseColor *= vColor; +#elif defined( USE_COLOR ) + diffuseColor.rgb *= vColor; +#endif`,IQ=`#if defined( USE_COLOR_ALPHA ) + varying vec4 vColor; +#elif defined( USE_COLOR ) + varying vec3 vColor; +#endif`,EQ=`#if defined( USE_COLOR_ALPHA ) + varying vec4 vColor; +#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR ) + varying vec3 vColor; +#endif`,CQ=`#if defined( USE_COLOR_ALPHA ) + vColor = vec4( 1.0 ); +#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR ) + vColor = vec3( 1.0 ); +#endif +#ifdef USE_COLOR + vColor *= color; +#endif +#ifdef USE_INSTANCING_COLOR + vColor.xyz *= instanceColor.xyz; +#endif +#ifdef USE_BATCHING_COLOR + vec3 batchingColor = getBatchingColor( batchId ); + vColor.xyz *= batchingColor.xyz; +#endif`,QQ=`#define PI 3.141592653589793 +#define PI2 6.283185307179586 +#define PI_HALF 1.5707963267948966 +#define RECIPROCAL_PI 0.3183098861837907 +#define RECIPROCAL_PI2 0.15915494309189535 +#define EPSILON 1e-6 +#ifndef saturate +#define saturate( a ) clamp( a, 0.0, 1.0 ) +#endif +#define whiteComplement( a ) ( 1.0 - saturate( a ) ) +float pow2( const in float x ) { return x*x; } +vec3 pow2( const in vec3 x ) { return x*x; } +float pow3( const in float x ) { return x*x*x; } +float pow4( const in float x ) { float x2 = x*x; return x2*x2; } +float max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); } +float average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); } +highp float rand( const in vec2 uv ) { + const highp float a = 12.9898, b = 78.233, c = 43758.5453; + highp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI ); + return fract( sin( sn ) * c ); +} +#ifdef HIGH_PRECISION + float precisionSafeLength( vec3 v ) { return length( v ); } +#else + float precisionSafeLength( vec3 v ) { + float maxComponent = max3( abs( v ) ); + return length( v / maxComponent ) * maxComponent; + } +#endif +struct IncidentLight { + vec3 color; + vec3 direction; + bool visible; +}; +struct ReflectedLight { + vec3 directDiffuse; + vec3 directSpecular; + vec3 indirectDiffuse; + vec3 indirectSpecular; +}; +#ifdef USE_ALPHAHASH + varying vec3 vPosition; +#endif +vec3 transformDirection( in vec3 dir, in mat4 matrix ) { + return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz ); +} +vec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) { + return normalize( ( vec4( dir, 0.0 ) * matrix ).xyz ); +} +mat3 transposeMat3( const in mat3 m ) { + mat3 tmp; + tmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x ); + tmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y ); + tmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z ); + return tmp; +} +float luminance( const in vec3 rgb ) { + const vec3 weights = vec3( 0.2126729, 0.7151522, 0.0721750 ); + return dot( weights, rgb ); +} +bool isPerspectiveMatrix( mat4 m ) { + return m[ 2 ][ 3 ] == - 1.0; +} +vec2 equirectUv( in vec3 dir ) { + float u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5; + float v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5; + return vec2( u, v ); +} +vec3 BRDF_Lambert( const in vec3 diffuseColor ) { + return RECIPROCAL_PI * diffuseColor; +} +vec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) { + float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH ); + return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel ); +} +float F_Schlick( const in float f0, const in float f90, const in float dotVH ) { + float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH ); + return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel ); +} // validated`,BQ=`#ifdef ENVMAP_TYPE_CUBE_UV + #define cubeUV_minMipLevel 4.0 + #define cubeUV_minTileSize 16.0 + float getFace( vec3 direction ) { + vec3 absDirection = abs( direction ); + float face = - 1.0; + if ( absDirection.x > absDirection.z ) { + if ( absDirection.x > absDirection.y ) + face = direction.x > 0.0 ? 0.0 : 3.0; + else + face = direction.y > 0.0 ? 1.0 : 4.0; + } else { + if ( absDirection.z > absDirection.y ) + face = direction.z > 0.0 ? 2.0 : 5.0; + else + face = direction.y > 0.0 ? 1.0 : 4.0; + } + return face; + } + vec2 getUV( vec3 direction, float face ) { + vec2 uv; + if ( face == 0.0 ) { + uv = vec2( direction.z, direction.y ) / abs( direction.x ); + } else if ( face == 1.0 ) { + uv = vec2( - direction.x, - direction.z ) / abs( direction.y ); + } else if ( face == 2.0 ) { + uv = vec2( - direction.x, direction.y ) / abs( direction.z ); + } else if ( face == 3.0 ) { + uv = vec2( - direction.z, direction.y ) / abs( direction.x ); + } else if ( face == 4.0 ) { + uv = vec2( - direction.x, direction.z ) / abs( direction.y ); + } else { + uv = vec2( direction.x, direction.y ) / abs( direction.z ); + } + return 0.5 * ( uv + 1.0 ); + } + vec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) { + float face = getFace( direction ); + float filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 ); + mipInt = max( mipInt, cubeUV_minMipLevel ); + float faceSize = exp2( mipInt ); + highp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0; + if ( face > 2.0 ) { + uv.y += faceSize; + face -= 3.0; + } + uv.x += face * faceSize; + uv.x += filterInt * 3.0 * cubeUV_minTileSize; + uv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize ); + uv.x *= CUBEUV_TEXEL_WIDTH; + uv.y *= CUBEUV_TEXEL_HEIGHT; + #ifdef texture2DGradEXT + return texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb; + #else + return texture2D( envMap, uv ).rgb; + #endif + } + #define cubeUV_r0 1.0 + #define cubeUV_m0 - 2.0 + #define cubeUV_r1 0.8 + #define cubeUV_m1 - 1.0 + #define cubeUV_r4 0.4 + #define cubeUV_m4 2.0 + #define cubeUV_r5 0.305 + #define cubeUV_m5 3.0 + #define cubeUV_r6 0.21 + #define cubeUV_m6 4.0 + float roughnessToMip( float roughness ) { + float mip = 0.0; + if ( roughness >= cubeUV_r1 ) { + mip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0; + } else if ( roughness >= cubeUV_r4 ) { + mip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1; + } else if ( roughness >= cubeUV_r5 ) { + mip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4; + } else if ( roughness >= cubeUV_r6 ) { + mip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5; + } else { + mip = - 2.0 * log2( 1.16 * roughness ); } + return mip; + } + vec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) { + float mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP ); + float mipF = fract( mip ); + float mipInt = floor( mip ); + vec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt ); + if ( mipF == 0.0 ) { + return vec4( color0, 1.0 ); + } else { + vec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 ); + return vec4( mix( color0, color1, mipF ), 1.0 ); + } + } +#endif`,hQ=`vec3 transformedNormal = objectNormal; +#ifdef USE_TANGENT + vec3 transformedTangent = objectTangent; +#endif +#ifdef USE_BATCHING + mat3 bm = mat3( batchingMatrix ); + transformedNormal /= vec3( dot( bm[ 0 ], bm[ 0 ] ), dot( bm[ 1 ], bm[ 1 ] ), dot( bm[ 2 ], bm[ 2 ] ) ); + transformedNormal = bm * transformedNormal; + #ifdef USE_TANGENT + transformedTangent = bm * transformedTangent; + #endif +#endif +#ifdef USE_INSTANCING + mat3 im = mat3( instanceMatrix ); + transformedNormal /= vec3( dot( im[ 0 ], im[ 0 ] ), dot( im[ 1 ], im[ 1 ] ), dot( im[ 2 ], im[ 2 ] ) ); + transformedNormal = im * transformedNormal; + #ifdef USE_TANGENT + transformedTangent = im * transformedTangent; + #endif +#endif +transformedNormal = normalMatrix * transformedNormal; +#ifdef FLIP_SIDED + transformedNormal = - transformedNormal; +#endif +#ifdef USE_TANGENT + transformedTangent = ( modelViewMatrix * vec4( transformedTangent, 0.0 ) ).xyz; + #ifdef FLIP_SIDED + transformedTangent = - transformedTangent; + #endif +#endif`,cQ=`#ifdef USE_DISPLACEMENTMAP + uniform sampler2D displacementMap; + uniform float displacementScale; + uniform float displacementBias; +#endif`,lQ=`#ifdef USE_DISPLACEMENTMAP + transformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias ); +#endif`,dQ=`#ifdef USE_EMISSIVEMAP + vec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv ); + totalEmissiveRadiance *= emissiveColor.rgb; +#endif`,uQ=`#ifdef USE_EMISSIVEMAP + uniform sampler2D emissiveMap; +#endif`,fQ="gl_FragColor = linearToOutputTexel( gl_FragColor );",pQ=` +const mat3 LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 = mat3( + vec3( 0.8224621, 0.177538, 0.0 ), + vec3( 0.0331941, 0.9668058, 0.0 ), + vec3( 0.0170827, 0.0723974, 0.9105199 ) +); +const mat3 LINEAR_DISPLAY_P3_TO_LINEAR_SRGB = mat3( + vec3( 1.2249401, - 0.2249404, 0.0 ), + vec3( - 0.0420569, 1.0420571, 0.0 ), + vec3( - 0.0196376, - 0.0786361, 1.0982735 ) +); +vec4 LinearSRGBToLinearDisplayP3( in vec4 value ) { + return vec4( value.rgb * LINEAR_SRGB_TO_LINEAR_DISPLAY_P3, value.a ); +} +vec4 LinearDisplayP3ToLinearSRGB( in vec4 value ) { + return vec4( value.rgb * LINEAR_DISPLAY_P3_TO_LINEAR_SRGB, value.a ); +} +vec4 LinearTransferOETF( in vec4 value ) { + return value; +} +vec4 sRGBTransferOETF( in vec4 value ) { + return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a ); +} +vec4 LinearToLinear( in vec4 value ) { + return value; +} +vec4 LinearTosRGB( in vec4 value ) { + return sRGBTransferOETF( value ); +}`,DQ=`#ifdef USE_ENVMAP + #ifdef ENV_WORLDPOS + vec3 cameraToFrag; + if ( isOrthographic ) { + cameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) ); + } else { + cameraToFrag = normalize( vWorldPosition - cameraPosition ); + } + vec3 worldNormal = inverseTransformDirection( normal, viewMatrix ); + #ifdef ENVMAP_MODE_REFLECTION + vec3 reflectVec = reflect( cameraToFrag, worldNormal ); + #else + vec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio ); + #endif + #else + vec3 reflectVec = vReflect; + #endif + #ifdef ENVMAP_TYPE_CUBE + vec4 envColor = textureCube( envMap, envMapRotation * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) ); + #else + vec4 envColor = vec4( 0.0 ); + #endif + #ifdef ENVMAP_BLENDING_MULTIPLY + outgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity ); + #elif defined( ENVMAP_BLENDING_MIX ) + outgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity ); + #elif defined( ENVMAP_BLENDING_ADD ) + outgoingLight += envColor.xyz * specularStrength * reflectivity; + #endif +#endif`,mQ=`#ifdef USE_ENVMAP + uniform float envMapIntensity; + uniform float flipEnvMap; + uniform mat3 envMapRotation; + #ifdef ENVMAP_TYPE_CUBE + uniform samplerCube envMap; + #else + uniform sampler2D envMap; + #endif + +#endif`,yQ=`#ifdef USE_ENVMAP + uniform float reflectivity; + #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT ) + #define ENV_WORLDPOS + #endif + #ifdef ENV_WORLDPOS + varying vec3 vWorldPosition; + uniform float refractionRatio; + #else + varying vec3 vReflect; + #endif +#endif`,wQ=`#ifdef USE_ENVMAP + #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT ) + #define ENV_WORLDPOS + #endif + #ifdef ENV_WORLDPOS + + varying vec3 vWorldPosition; + #else + varying vec3 vReflect; + uniform float refractionRatio; + #endif +#endif`,RQ=`#ifdef USE_ENVMAP + #ifdef ENV_WORLDPOS + vWorldPosition = worldPosition.xyz; + #else + vec3 cameraToVertex; + if ( isOrthographic ) { + cameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) ); + } else { + cameraToVertex = normalize( worldPosition.xyz - cameraPosition ); + } + vec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix ); + #ifdef ENVMAP_MODE_REFLECTION + vReflect = reflect( cameraToVertex, worldNormal ); + #else + vReflect = refract( cameraToVertex, worldNormal, refractionRatio ); + #endif + #endif +#endif`,SQ=`#ifdef USE_FOG + vFogDepth = - mvPosition.z; +#endif`,MQ=`#ifdef USE_FOG + varying float vFogDepth; +#endif`,NQ=`#ifdef USE_FOG + #ifdef FOG_EXP2 + float fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth ); + #else + float fogFactor = smoothstep( fogNear, fogFar, vFogDepth ); + #endif + gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor ); +#endif`,xQ=`#ifdef USE_FOG + uniform vec3 fogColor; + varying float vFogDepth; + #ifdef FOG_EXP2 + uniform float fogDensity; + #else + uniform float fogNear; + uniform float fogFar; + #endif +#endif`,FQ=`#ifdef USE_GRADIENTMAP + uniform sampler2D gradientMap; +#endif +vec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) { + float dotNL = dot( normal, lightDirection ); + vec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 ); + #ifdef USE_GRADIENTMAP + return vec3( texture2D( gradientMap, coord ).r ); + #else + vec2 fw = fwidth( coord ) * 0.5; + return mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) ); + #endif +}`,_Q=`#ifdef USE_LIGHTMAP + uniform sampler2D lightMap; + uniform float lightMapIntensity; +#endif`,LQ=`LambertMaterial material; +material.diffuseColor = diffuseColor.rgb; +material.specularStrength = specularStrength;`,vQ=`varying vec3 vViewPosition; +struct LambertMaterial { + vec3 diffuseColor; + float specularStrength; +}; +void RE_Direct_Lambert( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) { + float dotNL = saturate( dot( geometryNormal, directLight.direction ) ); + vec3 irradiance = dotNL * directLight.color; + reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); +} +void RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) { + reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); +} +#define RE_Direct RE_Direct_Lambert +#define RE_IndirectDiffuse RE_IndirectDiffuse_Lambert`,UQ=`uniform bool receiveShadow; +uniform vec3 ambientLightColor; +#if defined( USE_LIGHT_PROBES ) + uniform vec3 lightProbe[ 9 ]; +#endif +vec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) { + float x = normal.x, y = normal.y, z = normal.z; + vec3 result = shCoefficients[ 0 ] * 0.886227; + result += shCoefficients[ 1 ] * 2.0 * 0.511664 * y; + result += shCoefficients[ 2 ] * 2.0 * 0.511664 * z; + result += shCoefficients[ 3 ] * 2.0 * 0.511664 * x; + result += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y; + result += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z; + result += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 ); + result += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z; + result += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y ); + return result; +} +vec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) { + vec3 worldNormal = inverseTransformDirection( normal, viewMatrix ); + vec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe ); + return irradiance; +} +vec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) { + vec3 irradiance = ambientLightColor; + return irradiance; +} +float getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) { + float distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 ); + if ( cutoffDistance > 0.0 ) { + distanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) ); + } + return distanceFalloff; +} +float getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) { + return smoothstep( coneCosine, penumbraCosine, angleCosine ); +} +#if NUM_DIR_LIGHTS > 0 + struct DirectionalLight { + vec3 direction; + vec3 color; + }; + uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ]; + void getDirectionalLightInfo( const in DirectionalLight directionalLight, out IncidentLight light ) { + light.color = directionalLight.color; + light.direction = directionalLight.direction; + light.visible = true; + } +#endif +#if NUM_POINT_LIGHTS > 0 + struct PointLight { + vec3 position; + vec3 color; + float distance; + float decay; + }; + uniform PointLight pointLights[ NUM_POINT_LIGHTS ]; + void getPointLightInfo( const in PointLight pointLight, const in vec3 geometryPosition, out IncidentLight light ) { + vec3 lVector = pointLight.position - geometryPosition; + light.direction = normalize( lVector ); + float lightDistance = length( lVector ); + light.color = pointLight.color; + light.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay ); + light.visible = ( light.color != vec3( 0.0 ) ); + } +#endif +#if NUM_SPOT_LIGHTS > 0 + struct SpotLight { + vec3 position; + vec3 direction; + vec3 color; + float distance; + float decay; + float coneCos; + float penumbraCos; + }; + uniform SpotLight spotLights[ NUM_SPOT_LIGHTS ]; + void getSpotLightInfo( const in SpotLight spotLight, const in vec3 geometryPosition, out IncidentLight light ) { + vec3 lVector = spotLight.position - geometryPosition; + light.direction = normalize( lVector ); + float angleCos = dot( light.direction, spotLight.direction ); + float spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos ); + if ( spotAttenuation > 0.0 ) { + float lightDistance = length( lVector ); + light.color = spotLight.color * spotAttenuation; + light.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay ); + light.visible = ( light.color != vec3( 0.0 ) ); + } else { + light.color = vec3( 0.0 ); + light.visible = false; + } + } +#endif +#if NUM_RECT_AREA_LIGHTS > 0 + struct RectAreaLight { + vec3 color; + vec3 position; + vec3 halfWidth; + vec3 halfHeight; + }; + uniform sampler2D ltc_1; uniform sampler2D ltc_2; + uniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ]; +#endif +#if NUM_HEMI_LIGHTS > 0 + struct HemisphereLight { + vec3 direction; + vec3 skyColor; + vec3 groundColor; + }; + uniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ]; + vec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) { + float dotNL = dot( normal, hemiLight.direction ); + float hemiDiffuseWeight = 0.5 * dotNL + 0.5; + vec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight ); + return irradiance; + } +#endif`,GQ=`#ifdef USE_ENVMAP + vec3 getIBLIrradiance( const in vec3 normal ) { + #ifdef ENVMAP_TYPE_CUBE_UV + vec3 worldNormal = inverseTransformDirection( normal, viewMatrix ); + vec4 envMapColor = textureCubeUV( envMap, envMapRotation * worldNormal, 1.0 ); + return PI * envMapColor.rgb * envMapIntensity; + #else + return vec3( 0.0 ); + #endif + } + vec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) { + #ifdef ENVMAP_TYPE_CUBE_UV + vec3 reflectVec = reflect( - viewDir, normal ); + reflectVec = normalize( mix( reflectVec, normal, roughness * roughness) ); + reflectVec = inverseTransformDirection( reflectVec, viewMatrix ); + vec4 envMapColor = textureCubeUV( envMap, envMapRotation * reflectVec, roughness ); + return envMapColor.rgb * envMapIntensity; + #else + return vec3( 0.0 ); + #endif + } + #ifdef USE_ANISOTROPY + vec3 getIBLAnisotropyRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in vec3 bitangent, const in float anisotropy ) { + #ifdef ENVMAP_TYPE_CUBE_UV + vec3 bentNormal = cross( bitangent, viewDir ); + bentNormal = normalize( cross( bentNormal, bitangent ) ); + bentNormal = normalize( mix( bentNormal, normal, pow2( pow2( 1.0 - anisotropy * ( 1.0 - roughness ) ) ) ) ); + return getIBLRadiance( viewDir, bentNormal, roughness ); + #else + return vec3( 0.0 ); + #endif + } + #endif +#endif`,TQ=`ToonMaterial material; +material.diffuseColor = diffuseColor.rgb;`,kQ=`varying vec3 vViewPosition; +struct ToonMaterial { + vec3 diffuseColor; +}; +void RE_Direct_Toon( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) { + vec3 irradiance = getGradientIrradiance( geometryNormal, directLight.direction ) * directLight.color; + reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); +} +void RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) { + reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); +} +#define RE_Direct RE_Direct_Toon +#define RE_IndirectDiffuse RE_IndirectDiffuse_Toon`,bQ=`BlinnPhongMaterial material; +material.diffuseColor = diffuseColor.rgb; +material.specularColor = specular; +material.specularShininess = shininess; +material.specularStrength = specularStrength;`,HQ=`varying vec3 vViewPosition; +struct BlinnPhongMaterial { + vec3 diffuseColor; + vec3 specularColor; + float specularShininess; + float specularStrength; +}; +void RE_Direct_BlinnPhong( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) { + float dotNL = saturate( dot( geometryNormal, directLight.direction ) ); + vec3 irradiance = dotNL * directLight.color; + reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); + reflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometryViewDir, geometryNormal, material.specularColor, material.specularShininess ) * material.specularStrength; +} +void RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) { + reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); +} +#define RE_Direct RE_Direct_BlinnPhong +#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong`,PQ=`PhysicalMaterial material; +material.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor ); +vec3 dxy = max( abs( dFdx( nonPerturbedNormal ) ), abs( dFdy( nonPerturbedNormal ) ) ); +float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z ); +material.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness; +material.roughness = min( material.roughness, 1.0 ); +#ifdef IOR + material.ior = ior; + #ifdef USE_SPECULAR + float specularIntensityFactor = specularIntensity; + vec3 specularColorFactor = specularColor; + #ifdef USE_SPECULAR_COLORMAP + specularColorFactor *= texture2D( specularColorMap, vSpecularColorMapUv ).rgb; + #endif + #ifdef USE_SPECULAR_INTENSITYMAP + specularIntensityFactor *= texture2D( specularIntensityMap, vSpecularIntensityMapUv ).a; + #endif + material.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor ); + #else + float specularIntensityFactor = 1.0; + vec3 specularColorFactor = vec3( 1.0 ); + material.specularF90 = 1.0; + #endif + material.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor ); +#else + material.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor ); + material.specularF90 = 1.0; +#endif +#ifdef USE_CLEARCOAT + material.clearcoat = clearcoat; + material.clearcoatRoughness = clearcoatRoughness; + material.clearcoatF0 = vec3( 0.04 ); + material.clearcoatF90 = 1.0; + #ifdef USE_CLEARCOATMAP + material.clearcoat *= texture2D( clearcoatMap, vClearcoatMapUv ).x; + #endif + #ifdef USE_CLEARCOAT_ROUGHNESSMAP + material.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vClearcoatRoughnessMapUv ).y; + #endif + material.clearcoat = saturate( material.clearcoat ); material.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 ); + material.clearcoatRoughness += geometryRoughness; + material.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 ); +#endif +#ifdef USE_DISPERSION + material.dispersion = dispersion; +#endif +#ifdef USE_IRIDESCENCE + material.iridescence = iridescence; + material.iridescenceIOR = iridescenceIOR; + #ifdef USE_IRIDESCENCEMAP + material.iridescence *= texture2D( iridescenceMap, vIridescenceMapUv ).r; + #endif + #ifdef USE_IRIDESCENCE_THICKNESSMAP + material.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vIridescenceThicknessMapUv ).g + iridescenceThicknessMinimum; + #else + material.iridescenceThickness = iridescenceThicknessMaximum; + #endif +#endif +#ifdef USE_SHEEN + material.sheenColor = sheenColor; + #ifdef USE_SHEEN_COLORMAP + material.sheenColor *= texture2D( sheenColorMap, vSheenColorMapUv ).rgb; + #endif + material.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 ); + #ifdef USE_SHEEN_ROUGHNESSMAP + material.sheenRoughness *= texture2D( sheenRoughnessMap, vSheenRoughnessMapUv ).a; + #endif +#endif +#ifdef USE_ANISOTROPY + #ifdef USE_ANISOTROPYMAP + mat2 anisotropyMat = mat2( anisotropyVector.x, anisotropyVector.y, - anisotropyVector.y, anisotropyVector.x ); + vec3 anisotropyPolar = texture2D( anisotropyMap, vAnisotropyMapUv ).rgb; + vec2 anisotropyV = anisotropyMat * normalize( 2.0 * anisotropyPolar.rg - vec2( 1.0 ) ) * anisotropyPolar.b; + #else + vec2 anisotropyV = anisotropyVector; + #endif + material.anisotropy = length( anisotropyV ); + if( material.anisotropy == 0.0 ) { + anisotropyV = vec2( 1.0, 0.0 ); + } else { + anisotropyV /= material.anisotropy; + material.anisotropy = saturate( material.anisotropy ); + } + material.alphaT = mix( pow2( material.roughness ), 1.0, pow2( material.anisotropy ) ); + material.anisotropyT = tbn[ 0 ] * anisotropyV.x + tbn[ 1 ] * anisotropyV.y; + material.anisotropyB = tbn[ 1 ] * anisotropyV.x - tbn[ 0 ] * anisotropyV.y; +#endif`,OQ=`struct PhysicalMaterial { + vec3 diffuseColor; + float roughness; + vec3 specularColor; + float specularF90; + float dispersion; + #ifdef USE_CLEARCOAT + float clearcoat; + float clearcoatRoughness; + vec3 clearcoatF0; + float clearcoatF90; + #endif + #ifdef USE_IRIDESCENCE + float iridescence; + float iridescenceIOR; + float iridescenceThickness; + vec3 iridescenceFresnel; + vec3 iridescenceF0; + #endif + #ifdef USE_SHEEN + vec3 sheenColor; + float sheenRoughness; + #endif + #ifdef IOR + float ior; + #endif + #ifdef USE_TRANSMISSION + float transmission; + float transmissionAlpha; + float thickness; + float attenuationDistance; + vec3 attenuationColor; + #endif + #ifdef USE_ANISOTROPY + float anisotropy; + float alphaT; + vec3 anisotropyT; + vec3 anisotropyB; + #endif +}; +vec3 clearcoatSpecularDirect = vec3( 0.0 ); +vec3 clearcoatSpecularIndirect = vec3( 0.0 ); +vec3 sheenSpecularDirect = vec3( 0.0 ); +vec3 sheenSpecularIndirect = vec3(0.0 ); +vec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) { + float x = clamp( 1.0 - dotVH, 0.0, 1.0 ); + float x2 = x * x; + float x5 = clamp( x * x2 * x2, 0.0, 0.9999 ); + return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 ); +} +float V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) { + float a2 = pow2( alpha ); + float gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) ); + float gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) ); + return 0.5 / max( gv + gl, EPSILON ); +} +float D_GGX( const in float alpha, const in float dotNH ) { + float a2 = pow2( alpha ); + float denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0; + return RECIPROCAL_PI * a2 / pow2( denom ); +} +#ifdef USE_ANISOTROPY + float V_GGX_SmithCorrelated_Anisotropic( const in float alphaT, const in float alphaB, const in float dotTV, const in float dotBV, const in float dotTL, const in float dotBL, const in float dotNV, const in float dotNL ) { + float gv = dotNL * length( vec3( alphaT * dotTV, alphaB * dotBV, dotNV ) ); + float gl = dotNV * length( vec3( alphaT * dotTL, alphaB * dotBL, dotNL ) ); + float v = 0.5 / ( gv + gl ); + return saturate(v); + } + float D_GGX_Anisotropic( const in float alphaT, const in float alphaB, const in float dotNH, const in float dotTH, const in float dotBH ) { + float a2 = alphaT * alphaB; + highp vec3 v = vec3( alphaB * dotTH, alphaT * dotBH, a2 * dotNH ); + highp float v2 = dot( v, v ); + float w2 = a2 / v2; + return RECIPROCAL_PI * a2 * pow2 ( w2 ); + } +#endif +#ifdef USE_CLEARCOAT + vec3 BRDF_GGX_Clearcoat( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material) { + vec3 f0 = material.clearcoatF0; + float f90 = material.clearcoatF90; + float roughness = material.clearcoatRoughness; + float alpha = pow2( roughness ); + vec3 halfDir = normalize( lightDir + viewDir ); + float dotNL = saturate( dot( normal, lightDir ) ); + float dotNV = saturate( dot( normal, viewDir ) ); + float dotNH = saturate( dot( normal, halfDir ) ); + float dotVH = saturate( dot( viewDir, halfDir ) ); + vec3 F = F_Schlick( f0, f90, dotVH ); + float V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV ); + float D = D_GGX( alpha, dotNH ); + return F * ( V * D ); + } +#endif +vec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) { + vec3 f0 = material.specularColor; + float f90 = material.specularF90; + float roughness = material.roughness; + float alpha = pow2( roughness ); + vec3 halfDir = normalize( lightDir + viewDir ); + float dotNL = saturate( dot( normal, lightDir ) ); + float dotNV = saturate( dot( normal, viewDir ) ); + float dotNH = saturate( dot( normal, halfDir ) ); + float dotVH = saturate( dot( viewDir, halfDir ) ); + vec3 F = F_Schlick( f0, f90, dotVH ); + #ifdef USE_IRIDESCENCE + F = mix( F, material.iridescenceFresnel, material.iridescence ); + #endif + #ifdef USE_ANISOTROPY + float dotTL = dot( material.anisotropyT, lightDir ); + float dotTV = dot( material.anisotropyT, viewDir ); + float dotTH = dot( material.anisotropyT, halfDir ); + float dotBL = dot( material.anisotropyB, lightDir ); + float dotBV = dot( material.anisotropyB, viewDir ); + float dotBH = dot( material.anisotropyB, halfDir ); + float V = V_GGX_SmithCorrelated_Anisotropic( material.alphaT, alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL ); + float D = D_GGX_Anisotropic( material.alphaT, alpha, dotNH, dotTH, dotBH ); + #else + float V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV ); + float D = D_GGX( alpha, dotNH ); + #endif + return F * ( V * D ); +} +vec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) { + const float LUT_SIZE = 64.0; + const float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE; + const float LUT_BIAS = 0.5 / LUT_SIZE; + float dotNV = saturate( dot( N, V ) ); + vec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) ); + uv = uv * LUT_SCALE + LUT_BIAS; + return uv; +} +float LTC_ClippedSphereFormFactor( const in vec3 f ) { + float l = length( f ); + return max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 ); +} +vec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) { + float x = dot( v1, v2 ); + float y = abs( x ); + float a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y; + float b = 3.4175940 + ( 4.1616724 + y ) * y; + float v = a / b; + float theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v; + return cross( v1, v2 ) * theta_sintheta; +} +vec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) { + vec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ]; + vec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ]; + vec3 lightNormal = cross( v1, v2 ); + if( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 ); + vec3 T1, T2; + T1 = normalize( V - N * dot( V, N ) ); + T2 = - cross( N, T1 ); + mat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) ); + vec3 coords[ 4 ]; + coords[ 0 ] = mat * ( rectCoords[ 0 ] - P ); + coords[ 1 ] = mat * ( rectCoords[ 1 ] - P ); + coords[ 2 ] = mat * ( rectCoords[ 2 ] - P ); + coords[ 3 ] = mat * ( rectCoords[ 3 ] - P ); + coords[ 0 ] = normalize( coords[ 0 ] ); + coords[ 1 ] = normalize( coords[ 1 ] ); + coords[ 2 ] = normalize( coords[ 2 ] ); + coords[ 3 ] = normalize( coords[ 3 ] ); + vec3 vectorFormFactor = vec3( 0.0 ); + vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] ); + vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] ); + vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] ); + vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] ); + float result = LTC_ClippedSphereFormFactor( vectorFormFactor ); + return vec3( result ); +} +#if defined( USE_SHEEN ) +float D_Charlie( float roughness, float dotNH ) { + float alpha = pow2( roughness ); + float invAlpha = 1.0 / alpha; + float cos2h = dotNH * dotNH; + float sin2h = max( 1.0 - cos2h, 0.0078125 ); + return ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI ); +} +float V_Neubelt( float dotNV, float dotNL ) { + return saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) ); +} +vec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) { + vec3 halfDir = normalize( lightDir + viewDir ); + float dotNL = saturate( dot( normal, lightDir ) ); + float dotNV = saturate( dot( normal, viewDir ) ); + float dotNH = saturate( dot( normal, halfDir ) ); + float D = D_Charlie( sheenRoughness, dotNH ); + float V = V_Neubelt( dotNV, dotNL ); + return sheenColor * ( D * V ); +} +#endif +float IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) { + float dotNV = saturate( dot( normal, viewDir ) ); + float r2 = roughness * roughness; + float a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95; + float b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72; + float DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) ); + return saturate( DG * RECIPROCAL_PI ); +} +vec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) { + float dotNV = saturate( dot( normal, viewDir ) ); + const vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 ); + const vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 ); + vec4 r = roughness * c0 + c1; + float a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y; + vec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw; + return fab; +} +vec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) { + vec2 fab = DFGApprox( normal, viewDir, roughness ); + return specularColor * fab.x + specularF90 * fab.y; +} +#ifdef USE_IRIDESCENCE +void computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) { +#else +void computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) { +#endif + vec2 fab = DFGApprox( normal, viewDir, roughness ); + #ifdef USE_IRIDESCENCE + vec3 Fr = mix( specularColor, iridescenceF0, iridescence ); + #else + vec3 Fr = specularColor; + #endif + vec3 FssEss = Fr * fab.x + specularF90 * fab.y; + float Ess = fab.x + fab.y; + float Ems = 1.0 - Ess; + vec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619; vec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg ); + singleScatter += FssEss; + multiScatter += Fms * Ems; +} +#if NUM_RECT_AREA_LIGHTS > 0 + void RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) { + vec3 normal = geometryNormal; + vec3 viewDir = geometryViewDir; + vec3 position = geometryPosition; + vec3 lightPos = rectAreaLight.position; + vec3 halfWidth = rectAreaLight.halfWidth; + vec3 halfHeight = rectAreaLight.halfHeight; + vec3 lightColor = rectAreaLight.color; + float roughness = material.roughness; + vec3 rectCoords[ 4 ]; + rectCoords[ 0 ] = lightPos + halfWidth - halfHeight; rectCoords[ 1 ] = lightPos - halfWidth - halfHeight; + rectCoords[ 2 ] = lightPos - halfWidth + halfHeight; + rectCoords[ 3 ] = lightPos + halfWidth + halfHeight; + vec2 uv = LTC_Uv( normal, viewDir, roughness ); + vec4 t1 = texture2D( ltc_1, uv ); + vec4 t2 = texture2D( ltc_2, uv ); + mat3 mInv = mat3( + vec3( t1.x, 0, t1.y ), + vec3( 0, 1, 0 ), + vec3( t1.z, 0, t1.w ) + ); + vec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y ); + reflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords ); + reflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords ); + } +#endif +void RE_Direct_Physical( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) { + float dotNL = saturate( dot( geometryNormal, directLight.direction ) ); + vec3 irradiance = dotNL * directLight.color; + #ifdef USE_CLEARCOAT + float dotNLcc = saturate( dot( geometryClearcoatNormal, directLight.direction ) ); + vec3 ccIrradiance = dotNLcc * directLight.color; + clearcoatSpecularDirect += ccIrradiance * BRDF_GGX_Clearcoat( directLight.direction, geometryViewDir, geometryClearcoatNormal, material ); + #endif + #ifdef USE_SHEEN + sheenSpecularDirect += irradiance * BRDF_Sheen( directLight.direction, geometryViewDir, geometryNormal, material.sheenColor, material.sheenRoughness ); + #endif + reflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometryViewDir, geometryNormal, material ); + reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); +} +void RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) { + reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); +} +void RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) { + #ifdef USE_CLEARCOAT + clearcoatSpecularIndirect += clearcoatRadiance * EnvironmentBRDF( geometryClearcoatNormal, geometryViewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness ); + #endif + #ifdef USE_SHEEN + sheenSpecularIndirect += irradiance * material.sheenColor * IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness ); + #endif + vec3 singleScattering = vec3( 0.0 ); + vec3 multiScattering = vec3( 0.0 ); + vec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI; + #ifdef USE_IRIDESCENCE + computeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering ); + #else + computeMultiscattering( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering ); + #endif + vec3 totalScattering = singleScattering + multiScattering; + vec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) ); + reflectedLight.indirectSpecular += radiance * singleScattering; + reflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance; + reflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance; +} +#define RE_Direct RE_Direct_Physical +#define RE_Direct_RectArea RE_Direct_RectArea_Physical +#define RE_IndirectDiffuse RE_IndirectDiffuse_Physical +#define RE_IndirectSpecular RE_IndirectSpecular_Physical +float computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) { + return saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion ); +}`,JQ=` +vec3 geometryPosition = - vViewPosition; +vec3 geometryNormal = normal; +vec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition ); +vec3 geometryClearcoatNormal = vec3( 0.0 ); +#ifdef USE_CLEARCOAT + geometryClearcoatNormal = clearcoatNormal; +#endif +#ifdef USE_IRIDESCENCE + float dotNVi = saturate( dot( normal, geometryViewDir ) ); + if ( material.iridescenceThickness == 0.0 ) { + material.iridescence = 0.0; + } else { + material.iridescence = saturate( material.iridescence ); + } + if ( material.iridescence > 0.0 ) { + material.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor ); + material.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi ); + } +#endif +IncidentLight directLight; +#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct ) + PointLight pointLight; + #if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0 + PointLightShadow pointLightShadow; + #endif + #pragma unroll_loop_start + for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) { + pointLight = pointLights[ i ]; + getPointLightInfo( pointLight, geometryPosition, directLight ); + #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS ) + pointLightShadow = pointLightShadows[ i ]; + directLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0; + #endif + RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); + } + #pragma unroll_loop_end +#endif +#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct ) + SpotLight spotLight; + vec4 spotColor; + vec3 spotLightCoord; + bool inSpotLightMap; + #if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0 + SpotLightShadow spotLightShadow; + #endif + #pragma unroll_loop_start + for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) { + spotLight = spotLights[ i ]; + getSpotLightInfo( spotLight, geometryPosition, directLight ); + #if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS ) + #define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX + #elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS ) + #define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS + #else + #define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS ) + #endif + #if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS ) + spotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w; + inSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) ); + spotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy ); + directLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color; + #endif + #undef SPOT_LIGHT_MAP_INDEX + #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS ) + spotLightShadow = spotLightShadows[ i ]; + directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0; + #endif + RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); + } + #pragma unroll_loop_end +#endif +#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct ) + DirectionalLight directionalLight; + #if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0 + DirectionalLightShadow directionalLightShadow; + #endif + #pragma unroll_loop_start + for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) { + directionalLight = directionalLights[ i ]; + getDirectionalLightInfo( directionalLight, directLight ); + #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS ) + directionalLightShadow = directionalLightShadows[ i ]; + directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0; + #endif + RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); + } + #pragma unroll_loop_end +#endif +#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea ) + RectAreaLight rectAreaLight; + #pragma unroll_loop_start + for ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) { + rectAreaLight = rectAreaLights[ i ]; + RE_Direct_RectArea( rectAreaLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); + } + #pragma unroll_loop_end +#endif +#if defined( RE_IndirectDiffuse ) + vec3 iblIrradiance = vec3( 0.0 ); + vec3 irradiance = getAmbientLightIrradiance( ambientLightColor ); + #if defined( USE_LIGHT_PROBES ) + irradiance += getLightProbeIrradiance( lightProbe, geometryNormal ); + #endif + #if ( NUM_HEMI_LIGHTS > 0 ) + #pragma unroll_loop_start + for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) { + irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal ); + } + #pragma unroll_loop_end + #endif +#endif +#if defined( RE_IndirectSpecular ) + vec3 radiance = vec3( 0.0 ); + vec3 clearcoatRadiance = vec3( 0.0 ); +#endif`,qQ=`#if defined( RE_IndirectDiffuse ) + #ifdef USE_LIGHTMAP + vec4 lightMapTexel = texture2D( lightMap, vLightMapUv ); + vec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity; + irradiance += lightMapIrradiance; + #endif + #if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV ) + iblIrradiance += getIBLIrradiance( geometryNormal ); + #endif +#endif +#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular ) + #ifdef USE_ANISOTROPY + radiance += getIBLAnisotropyRadiance( geometryViewDir, geometryNormal, material.roughness, material.anisotropyB, material.anisotropy ); + #else + radiance += getIBLRadiance( geometryViewDir, geometryNormal, material.roughness ); + #endif + #ifdef USE_CLEARCOAT + clearcoatRadiance += getIBLRadiance( geometryViewDir, geometryClearcoatNormal, material.clearcoatRoughness ); + #endif +#endif`,YQ=`#if defined( RE_IndirectDiffuse ) + RE_IndirectDiffuse( irradiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); +#endif +#if defined( RE_IndirectSpecular ) + RE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); +#endif`,KQ=`#if defined( USE_LOGDEPTHBUF ) + gl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5; +#endif`,WQ=`#if defined( USE_LOGDEPTHBUF ) + uniform float logDepthBufFC; + varying float vFragDepth; + varying float vIsPerspective; +#endif`,VQ=`#ifdef USE_LOGDEPTHBUF + varying float vFragDepth; + varying float vIsPerspective; +#endif`,zQ=`#ifdef USE_LOGDEPTHBUF + vFragDepth = 1.0 + gl_Position.w; + vIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) ); +#endif`,XQ=`#ifdef USE_MAP + vec4 sampledDiffuseColor = texture2D( map, vMapUv ); + #ifdef DECODE_VIDEO_TEXTURE + sampledDiffuseColor = vec4( mix( pow( sampledDiffuseColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), sampledDiffuseColor.rgb * 0.0773993808, vec3( lessThanEqual( sampledDiffuseColor.rgb, vec3( 0.04045 ) ) ) ), sampledDiffuseColor.w ); + + #endif + diffuseColor *= sampledDiffuseColor; +#endif`,ZQ=`#ifdef USE_MAP + uniform sampler2D map; +#endif`,jQ=`#if defined( USE_MAP ) || defined( USE_ALPHAMAP ) + #if defined( USE_POINTS_UV ) + vec2 uv = vUv; + #else + vec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy; + #endif +#endif +#ifdef USE_MAP + diffuseColor *= texture2D( map, uv ); +#endif +#ifdef USE_ALPHAMAP + diffuseColor.a *= texture2D( alphaMap, uv ).g; +#endif`,$Q=`#if defined( USE_POINTS_UV ) + varying vec2 vUv; +#else + #if defined( USE_MAP ) || defined( USE_ALPHAMAP ) + uniform mat3 uvTransform; + #endif +#endif +#ifdef USE_MAP + uniform sampler2D map; +#endif +#ifdef USE_ALPHAMAP + uniform sampler2D alphaMap; +#endif`,AB=`float metalnessFactor = metalness; +#ifdef USE_METALNESSMAP + vec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv ); + metalnessFactor *= texelMetalness.b; +#endif`,tB=`#ifdef USE_METALNESSMAP + uniform sampler2D metalnessMap; +#endif`,eB=`#ifdef USE_INSTANCING_MORPH + float morphTargetInfluences[ MORPHTARGETS_COUNT ]; + float morphTargetBaseInfluence = texelFetch( morphTexture, ivec2( 0, gl_InstanceID ), 0 ).r; + for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { + morphTargetInfluences[i] = texelFetch( morphTexture, ivec2( i + 1, gl_InstanceID ), 0 ).r; + } +#endif`,iB=`#if defined( USE_MORPHCOLORS ) + vColor *= morphTargetBaseInfluence; + for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { + #if defined( USE_COLOR_ALPHA ) + if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ]; + #elif defined( USE_COLOR ) + if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ]; + #endif + } +#endif`,nB=`#ifdef USE_MORPHNORMALS + objectNormal *= morphTargetBaseInfluence; + for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { + if ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ]; + } +#endif`,sB=`#ifdef USE_MORPHTARGETS + #ifndef USE_INSTANCING_MORPH + uniform float morphTargetBaseInfluence; + uniform float morphTargetInfluences[ MORPHTARGETS_COUNT ]; + #endif + uniform sampler2DArray morphTargetsTexture; + uniform ivec2 morphTargetsTextureSize; + vec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) { + int texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset; + int y = texelIndex / morphTargetsTextureSize.x; + int x = texelIndex - y * morphTargetsTextureSize.x; + ivec3 morphUV = ivec3( x, y, morphTargetIndex ); + return texelFetch( morphTargetsTexture, morphUV, 0 ); + } +#endif`,oB=`#ifdef USE_MORPHTARGETS + transformed *= morphTargetBaseInfluence; + for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { + if ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ]; + } +#endif`,gB=`float faceDirection = gl_FrontFacing ? 1.0 : - 1.0; +#ifdef FLAT_SHADED + vec3 fdx = dFdx( vViewPosition ); + vec3 fdy = dFdy( vViewPosition ); + vec3 normal = normalize( cross( fdx, fdy ) ); +#else + vec3 normal = normalize( vNormal ); + #ifdef DOUBLE_SIDED + normal *= faceDirection; + #endif +#endif +#if defined( USE_NORMALMAP_TANGENTSPACE ) || defined( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY ) + #ifdef USE_TANGENT + mat3 tbn = mat3( normalize( vTangent ), normalize( vBitangent ), normal ); + #else + mat3 tbn = getTangentFrame( - vViewPosition, normal, + #if defined( USE_NORMALMAP ) + vNormalMapUv + #elif defined( USE_CLEARCOAT_NORMALMAP ) + vClearcoatNormalMapUv + #else + vUv + #endif + ); + #endif + #if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED ) + tbn[0] *= faceDirection; + tbn[1] *= faceDirection; + #endif +#endif +#ifdef USE_CLEARCOAT_NORMALMAP + #ifdef USE_TANGENT + mat3 tbn2 = mat3( normalize( vTangent ), normalize( vBitangent ), normal ); + #else + mat3 tbn2 = getTangentFrame( - vViewPosition, normal, vClearcoatNormalMapUv ); + #endif + #if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED ) + tbn2[0] *= faceDirection; + tbn2[1] *= faceDirection; + #endif +#endif +vec3 nonPerturbedNormal = normal;`,rB=`#ifdef USE_NORMALMAP_OBJECTSPACE + normal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0; + #ifdef FLIP_SIDED + normal = - normal; + #endif + #ifdef DOUBLE_SIDED + normal = normal * faceDirection; + #endif + normal = normalize( normalMatrix * normal ); +#elif defined( USE_NORMALMAP_TANGENTSPACE ) + vec3 mapN = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0; + mapN.xy *= normalScale; + normal = normalize( tbn * mapN ); +#elif defined( USE_BUMPMAP ) + normal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection ); +#endif`,aB=`#ifndef FLAT_SHADED + varying vec3 vNormal; + #ifdef USE_TANGENT + varying vec3 vTangent; + varying vec3 vBitangent; + #endif +#endif`,IB=`#ifndef FLAT_SHADED + varying vec3 vNormal; + #ifdef USE_TANGENT + varying vec3 vTangent; + varying vec3 vBitangent; + #endif +#endif`,EB=`#ifndef FLAT_SHADED + vNormal = normalize( transformedNormal ); + #ifdef USE_TANGENT + vTangent = normalize( transformedTangent ); + vBitangent = normalize( cross( vNormal, vTangent ) * tangent.w ); + #endif +#endif`,CB=`#ifdef USE_NORMALMAP + uniform sampler2D normalMap; + uniform vec2 normalScale; +#endif +#ifdef USE_NORMALMAP_OBJECTSPACE + uniform mat3 normalMatrix; +#endif +#if ! defined ( USE_TANGENT ) && ( defined ( USE_NORMALMAP_TANGENTSPACE ) || defined ( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY ) ) + mat3 getTangentFrame( vec3 eye_pos, vec3 surf_norm, vec2 uv ) { + vec3 q0 = dFdx( eye_pos.xyz ); + vec3 q1 = dFdy( eye_pos.xyz ); + vec2 st0 = dFdx( uv.st ); + vec2 st1 = dFdy( uv.st ); + vec3 N = surf_norm; + vec3 q1perp = cross( q1, N ); + vec3 q0perp = cross( N, q0 ); + vec3 T = q1perp * st0.x + q0perp * st1.x; + vec3 B = q1perp * st0.y + q0perp * st1.y; + float det = max( dot( T, T ), dot( B, B ) ); + float scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det ); + return mat3( T * scale, B * scale, N ); + } +#endif`,QB=`#ifdef USE_CLEARCOAT + vec3 clearcoatNormal = nonPerturbedNormal; +#endif`,BB=`#ifdef USE_CLEARCOAT_NORMALMAP + vec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0; + clearcoatMapN.xy *= clearcoatNormalScale; + clearcoatNormal = normalize( tbn2 * clearcoatMapN ); +#endif`,hB=`#ifdef USE_CLEARCOATMAP + uniform sampler2D clearcoatMap; +#endif +#ifdef USE_CLEARCOAT_NORMALMAP + uniform sampler2D clearcoatNormalMap; + uniform vec2 clearcoatNormalScale; +#endif +#ifdef USE_CLEARCOAT_ROUGHNESSMAP + uniform sampler2D clearcoatRoughnessMap; +#endif`,cB=`#ifdef USE_IRIDESCENCEMAP + uniform sampler2D iridescenceMap; +#endif +#ifdef USE_IRIDESCENCE_THICKNESSMAP + uniform sampler2D iridescenceThicknessMap; +#endif`,lB=`#ifdef OPAQUE +diffuseColor.a = 1.0; +#endif +#ifdef USE_TRANSMISSION +diffuseColor.a *= material.transmissionAlpha; +#endif +gl_FragColor = vec4( outgoingLight, diffuseColor.a );`,dB=`vec3 packNormalToRGB( const in vec3 normal ) { + return normalize( normal ) * 0.5 + 0.5; +} +vec3 unpackRGBToNormal( const in vec3 rgb ) { + return 2.0 * rgb.xyz - 1.0; +} +const float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.; +const vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. ); +const vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. ); +const float ShiftRight8 = 1. / 256.; +vec4 packDepthToRGBA( const in float v ) { + vec4 r = vec4( fract( v * PackFactors ), v ); + r.yzw -= r.xyz * ShiftRight8; return r * PackUpscale; +} +float unpackRGBAToDepth( const in vec4 v ) { + return dot( v, UnpackFactors ); +} +vec2 packDepthToRG( in highp float v ) { + return packDepthToRGBA( v ).yx; +} +float unpackRGToDepth( const in highp vec2 v ) { + return unpackRGBAToDepth( vec4( v.xy, 0.0, 0.0 ) ); +} +vec4 pack2HalfToRGBA( vec2 v ) { + vec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) ); + return vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w ); +} +vec2 unpackRGBATo2Half( vec4 v ) { + return vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) ); +} +float viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) { + return ( viewZ + near ) / ( near - far ); +} +float orthographicDepthToViewZ( const in float depth, const in float near, const in float far ) { + return depth * ( near - far ) - near; +} +float viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) { + return ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ ); +} +float perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) { + return ( near * far ) / ( ( far - near ) * depth - far ); +}`,uB=`#ifdef PREMULTIPLIED_ALPHA + gl_FragColor.rgb *= gl_FragColor.a; +#endif`,fB=`vec4 mvPosition = vec4( transformed, 1.0 ); +#ifdef USE_BATCHING + mvPosition = batchingMatrix * mvPosition; +#endif +#ifdef USE_INSTANCING + mvPosition = instanceMatrix * mvPosition; +#endif +mvPosition = modelViewMatrix * mvPosition; +gl_Position = projectionMatrix * mvPosition;`,pB=`#ifdef DITHERING + gl_FragColor.rgb = dithering( gl_FragColor.rgb ); +#endif`,DB=`#ifdef DITHERING + vec3 dithering( vec3 color ) { + float grid_position = rand( gl_FragCoord.xy ); + vec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 ); + dither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position ); + return color + dither_shift_RGB; + } +#endif`,mB=`float roughnessFactor = roughness; +#ifdef USE_ROUGHNESSMAP + vec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv ); + roughnessFactor *= texelRoughness.g; +#endif`,yB=`#ifdef USE_ROUGHNESSMAP + uniform sampler2D roughnessMap; +#endif`,wB=`#if NUM_SPOT_LIGHT_COORDS > 0 + varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ]; +#endif +#if NUM_SPOT_LIGHT_MAPS > 0 + uniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ]; +#endif +#ifdef USE_SHADOWMAP + #if NUM_DIR_LIGHT_SHADOWS > 0 + uniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ]; + varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ]; + struct DirectionalLightShadow { + float shadowBias; + float shadowNormalBias; + float shadowRadius; + vec2 shadowMapSize; + }; + uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ]; + #endif + #if NUM_SPOT_LIGHT_SHADOWS > 0 + uniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ]; + struct SpotLightShadow { + float shadowBias; + float shadowNormalBias; + float shadowRadius; + vec2 shadowMapSize; + }; + uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ]; + #endif + #if NUM_POINT_LIGHT_SHADOWS > 0 + uniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ]; + varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ]; + struct PointLightShadow { + float shadowBias; + float shadowNormalBias; + float shadowRadius; + vec2 shadowMapSize; + float shadowCameraNear; + float shadowCameraFar; + }; + uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ]; + #endif + float texture2DCompare( sampler2D depths, vec2 uv, float compare ) { + return step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) ); + } + vec2 texture2DDistribution( sampler2D shadow, vec2 uv ) { + return unpackRGBATo2Half( texture2D( shadow, uv ) ); + } + float VSMShadow (sampler2D shadow, vec2 uv, float compare ){ + float occlusion = 1.0; + vec2 distribution = texture2DDistribution( shadow, uv ); + float hard_shadow = step( compare , distribution.x ); + if (hard_shadow != 1.0 ) { + float distance = compare - distribution.x ; + float variance = max( 0.00000, distribution.y * distribution.y ); + float softness_probability = variance / (variance + distance * distance ); softness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 ); occlusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 ); + } + return occlusion; + } + float getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) { + float shadow = 1.0; + shadowCoord.xyz /= shadowCoord.w; + shadowCoord.z += shadowBias; + bool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0; + bool frustumTest = inFrustum && shadowCoord.z <= 1.0; + if ( frustumTest ) { + #if defined( SHADOWMAP_TYPE_PCF ) + vec2 texelSize = vec2( 1.0 ) / shadowMapSize; + float dx0 = - texelSize.x * shadowRadius; + float dy0 = - texelSize.y * shadowRadius; + float dx1 = + texelSize.x * shadowRadius; + float dy1 = + texelSize.y * shadowRadius; + float dx2 = dx0 / 2.0; + float dy2 = dy0 / 2.0; + float dx3 = dx1 / 2.0; + float dy3 = dy1 / 2.0; + shadow = ( + texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) + + texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) + + texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) + + texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) + + texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) + + texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) + + texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) + + texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) + + texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) + + texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) + + texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) + + texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) + + texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) + + texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) + + texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) + + texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) + + texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z ) + ) * ( 1.0 / 17.0 ); + #elif defined( SHADOWMAP_TYPE_PCF_SOFT ) + vec2 texelSize = vec2( 1.0 ) / shadowMapSize; + float dx = texelSize.x; + float dy = texelSize.y; + vec2 uv = shadowCoord.xy; + vec2 f = fract( uv * shadowMapSize + 0.5 ); + uv -= f * texelSize; + shadow = ( + texture2DCompare( shadowMap, uv, shadowCoord.z ) + + texture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) + + texture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) + + texture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) + + mix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), + texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ), + f.x ) + + mix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), + texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ), + f.x ) + + mix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), + texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ), + f.y ) + + mix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), + texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ), + f.y ) + + mix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), + texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ), + f.x ), + mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), + texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ), + f.x ), + f.y ) + ) * ( 1.0 / 9.0 ); + #elif defined( SHADOWMAP_TYPE_VSM ) + shadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z ); + #else + shadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ); + #endif + } + return shadow; + } + vec2 cubeToUV( vec3 v, float texelSizeY ) { + vec3 absV = abs( v ); + float scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) ); + absV *= scaleToCube; + v *= scaleToCube * ( 1.0 - 2.0 * texelSizeY ); + vec2 planar = v.xy; + float almostATexel = 1.5 * texelSizeY; + float almostOne = 1.0 - almostATexel; + if ( absV.z >= almostOne ) { + if ( v.z > 0.0 ) + planar.x = 4.0 - v.x; + } else if ( absV.x >= almostOne ) { + float signX = sign( v.x ); + planar.x = v.z * signX + 2.0 * signX; + } else if ( absV.y >= almostOne ) { + float signY = sign( v.y ); + planar.x = v.x + 2.0 * signY + 2.0; + planar.y = v.z * signY - 2.0; + } + return vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 ); + } + float getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) { + float shadow = 1.0; + vec3 lightToPosition = shadowCoord.xyz; + + float lightToPositionLength = length( lightToPosition ); + if ( lightToPositionLength - shadowCameraFar <= 0.0 && lightToPositionLength - shadowCameraNear >= 0.0 ) { + float dp = ( lightToPositionLength - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear ); dp += shadowBias; + vec3 bd3D = normalize( lightToPosition ); + vec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) ); + #if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM ) + vec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y; + shadow = ( + texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) + + texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) + + texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) + + texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) + + texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) + + texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) + + texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) + + texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) + + texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp ) + ) * ( 1.0 / 9.0 ); + #else + shadow = texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ); + #endif + } + return shadow; + } +#endif`,RB=`#if NUM_SPOT_LIGHT_COORDS > 0 + uniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ]; + varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ]; +#endif +#ifdef USE_SHADOWMAP + #if NUM_DIR_LIGHT_SHADOWS > 0 + uniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ]; + varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ]; + struct DirectionalLightShadow { + float shadowBias; + float shadowNormalBias; + float shadowRadius; + vec2 shadowMapSize; + }; + uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ]; + #endif + #if NUM_SPOT_LIGHT_SHADOWS > 0 + struct SpotLightShadow { + float shadowBias; + float shadowNormalBias; + float shadowRadius; + vec2 shadowMapSize; + }; + uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ]; + #endif + #if NUM_POINT_LIGHT_SHADOWS > 0 + uniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ]; + varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ]; + struct PointLightShadow { + float shadowBias; + float shadowNormalBias; + float shadowRadius; + vec2 shadowMapSize; + float shadowCameraNear; + float shadowCameraFar; + }; + uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ]; + #endif +#endif`,SB=`#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 ) + vec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix ); + vec4 shadowWorldPosition; +#endif +#if defined( USE_SHADOWMAP ) + #if NUM_DIR_LIGHT_SHADOWS > 0 + #pragma unroll_loop_start + for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) { + shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 ); + vDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition; + } + #pragma unroll_loop_end + #endif + #if NUM_POINT_LIGHT_SHADOWS > 0 + #pragma unroll_loop_start + for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) { + shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 ); + vPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition; + } + #pragma unroll_loop_end + #endif +#endif +#if NUM_SPOT_LIGHT_COORDS > 0 + #pragma unroll_loop_start + for ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) { + shadowWorldPosition = worldPosition; + #if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS ) + shadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias; + #endif + vSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition; + } + #pragma unroll_loop_end +#endif`,MB=`float getShadowMask() { + float shadow = 1.0; + #ifdef USE_SHADOWMAP + #if NUM_DIR_LIGHT_SHADOWS > 0 + DirectionalLightShadow directionalLight; + #pragma unroll_loop_start + for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) { + directionalLight = directionalLightShadows[ i ]; + shadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0; + } + #pragma unroll_loop_end + #endif + #if NUM_SPOT_LIGHT_SHADOWS > 0 + SpotLightShadow spotLight; + #pragma unroll_loop_start + for ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) { + spotLight = spotLightShadows[ i ]; + shadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0; + } + #pragma unroll_loop_end + #endif + #if NUM_POINT_LIGHT_SHADOWS > 0 + PointLightShadow pointLight; + #pragma unroll_loop_start + for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) { + pointLight = pointLightShadows[ i ]; + shadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0; + } + #pragma unroll_loop_end + #endif + #endif + return shadow; +}`,NB=`#ifdef USE_SKINNING + mat4 boneMatX = getBoneMatrix( skinIndex.x ); + mat4 boneMatY = getBoneMatrix( skinIndex.y ); + mat4 boneMatZ = getBoneMatrix( skinIndex.z ); + mat4 boneMatW = getBoneMatrix( skinIndex.w ); +#endif`,xB=`#ifdef USE_SKINNING + uniform mat4 bindMatrix; + uniform mat4 bindMatrixInverse; + uniform highp sampler2D boneTexture; + mat4 getBoneMatrix( const in float i ) { + int size = textureSize( boneTexture, 0 ).x; + int j = int( i ) * 4; + int x = j % size; + int y = j / size; + vec4 v1 = texelFetch( boneTexture, ivec2( x, y ), 0 ); + vec4 v2 = texelFetch( boneTexture, ivec2( x + 1, y ), 0 ); + vec4 v3 = texelFetch( boneTexture, ivec2( x + 2, y ), 0 ); + vec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 ); + return mat4( v1, v2, v3, v4 ); + } +#endif`,FB=`#ifdef USE_SKINNING + vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 ); + vec4 skinned = vec4( 0.0 ); + skinned += boneMatX * skinVertex * skinWeight.x; + skinned += boneMatY * skinVertex * skinWeight.y; + skinned += boneMatZ * skinVertex * skinWeight.z; + skinned += boneMatW * skinVertex * skinWeight.w; + transformed = ( bindMatrixInverse * skinned ).xyz; +#endif`,_B=`#ifdef USE_SKINNING + mat4 skinMatrix = mat4( 0.0 ); + skinMatrix += skinWeight.x * boneMatX; + skinMatrix += skinWeight.y * boneMatY; + skinMatrix += skinWeight.z * boneMatZ; + skinMatrix += skinWeight.w * boneMatW; + skinMatrix = bindMatrixInverse * skinMatrix * bindMatrix; + objectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz; + #ifdef USE_TANGENT + objectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz; + #endif +#endif`,LB=`float specularStrength; +#ifdef USE_SPECULARMAP + vec4 texelSpecular = texture2D( specularMap, vSpecularMapUv ); + specularStrength = texelSpecular.r; +#else + specularStrength = 1.0; +#endif`,vB=`#ifdef USE_SPECULARMAP + uniform sampler2D specularMap; +#endif`,UB=`#if defined( TONE_MAPPING ) + gl_FragColor.rgb = toneMapping( gl_FragColor.rgb ); +#endif`,GB=`#ifndef saturate +#define saturate( a ) clamp( a, 0.0, 1.0 ) +#endif +uniform float toneMappingExposure; +vec3 LinearToneMapping( vec3 color ) { + return saturate( toneMappingExposure * color ); +} +vec3 ReinhardToneMapping( vec3 color ) { + color *= toneMappingExposure; + return saturate( color / ( vec3( 1.0 ) + color ) ); +} +vec3 OptimizedCineonToneMapping( vec3 color ) { + color *= toneMappingExposure; + color = max( vec3( 0.0 ), color - 0.004 ); + return pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) ); +} +vec3 RRTAndODTFit( vec3 v ) { + vec3 a = v * ( v + 0.0245786 ) - 0.000090537; + vec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081; + return a / b; +} +vec3 ACESFilmicToneMapping( vec3 color ) { + const mat3 ACESInputMat = mat3( + vec3( 0.59719, 0.07600, 0.02840 ), vec3( 0.35458, 0.90834, 0.13383 ), + vec3( 0.04823, 0.01566, 0.83777 ) + ); + const mat3 ACESOutputMat = mat3( + vec3( 1.60475, -0.10208, -0.00327 ), vec3( -0.53108, 1.10813, -0.07276 ), + vec3( -0.07367, -0.00605, 1.07602 ) + ); + color *= toneMappingExposure / 0.6; + color = ACESInputMat * color; + color = RRTAndODTFit( color ); + color = ACESOutputMat * color; + return saturate( color ); +} +const mat3 LINEAR_REC2020_TO_LINEAR_SRGB = mat3( + vec3( 1.6605, - 0.1246, - 0.0182 ), + vec3( - 0.5876, 1.1329, - 0.1006 ), + vec3( - 0.0728, - 0.0083, 1.1187 ) +); +const mat3 LINEAR_SRGB_TO_LINEAR_REC2020 = mat3( + vec3( 0.6274, 0.0691, 0.0164 ), + vec3( 0.3293, 0.9195, 0.0880 ), + vec3( 0.0433, 0.0113, 0.8956 ) +); +vec3 agxDefaultContrastApprox( vec3 x ) { + vec3 x2 = x * x; + vec3 x4 = x2 * x2; + return + 15.5 * x4 * x2 + - 40.14 * x4 * x + + 31.96 * x4 + - 6.868 * x2 * x + + 0.4298 * x2 + + 0.1191 * x + - 0.00232; +} +vec3 AgXToneMapping( vec3 color ) { + const mat3 AgXInsetMatrix = mat3( + vec3( 0.856627153315983, 0.137318972929847, 0.11189821299995 ), + vec3( 0.0951212405381588, 0.761241990602591, 0.0767994186031903 ), + vec3( 0.0482516061458583, 0.101439036467562, 0.811302368396859 ) + ); + const mat3 AgXOutsetMatrix = mat3( + vec3( 1.1271005818144368, - 0.1413297634984383, - 0.14132976349843826 ), + vec3( - 0.11060664309660323, 1.157823702216272, - 0.11060664309660294 ), + vec3( - 0.016493938717834573, - 0.016493938717834257, 1.2519364065950405 ) + ); + const float AgxMinEv = - 12.47393; const float AgxMaxEv = 4.026069; + color *= toneMappingExposure; + color = LINEAR_SRGB_TO_LINEAR_REC2020 * color; + color = AgXInsetMatrix * color; + color = max( color, 1e-10 ); color = log2( color ); + color = ( color - AgxMinEv ) / ( AgxMaxEv - AgxMinEv ); + color = clamp( color, 0.0, 1.0 ); + color = agxDefaultContrastApprox( color ); + color = AgXOutsetMatrix * color; + color = pow( max( vec3( 0.0 ), color ), vec3( 2.2 ) ); + color = LINEAR_REC2020_TO_LINEAR_SRGB * color; + color = clamp( color, 0.0, 1.0 ); + return color; +} +vec3 NeutralToneMapping( vec3 color ) { + const float StartCompression = 0.8 - 0.04; + const float Desaturation = 0.15; + color *= toneMappingExposure; + float x = min( color.r, min( color.g, color.b ) ); + float offset = x < 0.08 ? x - 6.25 * x * x : 0.04; + color -= offset; + float peak = max( color.r, max( color.g, color.b ) ); + if ( peak < StartCompression ) return color; + float d = 1. - StartCompression; + float newPeak = 1. - d * d / ( peak + d - StartCompression ); + color *= newPeak / peak; + float g = 1. - 1. / ( Desaturation * ( peak - newPeak ) + 1. ); + return mix( color, vec3( newPeak ), g ); +} +vec3 CustomToneMapping( vec3 color ) { return color; }`,TB=`#ifdef USE_TRANSMISSION + material.transmission = transmission; + material.transmissionAlpha = 1.0; + material.thickness = thickness; + material.attenuationDistance = attenuationDistance; + material.attenuationColor = attenuationColor; + #ifdef USE_TRANSMISSIONMAP + material.transmission *= texture2D( transmissionMap, vTransmissionMapUv ).r; + #endif + #ifdef USE_THICKNESSMAP + material.thickness *= texture2D( thicknessMap, vThicknessMapUv ).g; + #endif + vec3 pos = vWorldPosition; + vec3 v = normalize( cameraPosition - pos ); + vec3 n = inverseTransformDirection( normal, viewMatrix ); + vec4 transmitted = getIBLVolumeRefraction( + n, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90, + pos, modelMatrix, viewMatrix, projectionMatrix, material.dispersion, material.ior, material.thickness, + material.attenuationColor, material.attenuationDistance ); + material.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission ); + totalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission ); +#endif`,kB=`#ifdef USE_TRANSMISSION + uniform float transmission; + uniform float thickness; + uniform float attenuationDistance; + uniform vec3 attenuationColor; + #ifdef USE_TRANSMISSIONMAP + uniform sampler2D transmissionMap; + #endif + #ifdef USE_THICKNESSMAP + uniform sampler2D thicknessMap; + #endif + uniform vec2 transmissionSamplerSize; + uniform sampler2D transmissionSamplerMap; + uniform mat4 modelMatrix; + uniform mat4 projectionMatrix; + varying vec3 vWorldPosition; + float w0( float a ) { + return ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 ); + } + float w1( float a ) { + return ( 1.0 / 6.0 ) * ( a * a * ( 3.0 * a - 6.0 ) + 4.0 ); + } + float w2( float a ){ + return ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 ); + } + float w3( float a ) { + return ( 1.0 / 6.0 ) * ( a * a * a ); + } + float g0( float a ) { + return w0( a ) + w1( a ); + } + float g1( float a ) { + return w2( a ) + w3( a ); + } + float h0( float a ) { + return - 1.0 + w1( a ) / ( w0( a ) + w1( a ) ); + } + float h1( float a ) { + return 1.0 + w3( a ) / ( w2( a ) + w3( a ) ); + } + vec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, float lod ) { + uv = uv * texelSize.zw + 0.5; + vec2 iuv = floor( uv ); + vec2 fuv = fract( uv ); + float g0x = g0( fuv.x ); + float g1x = g1( fuv.x ); + float h0x = h0( fuv.x ); + float h1x = h1( fuv.x ); + float h0y = h0( fuv.y ); + float h1y = h1( fuv.y ); + vec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy; + vec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy; + vec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy; + vec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy; + return g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) + + g1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) ); + } + vec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) { + vec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) ); + vec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) ); + vec2 fLodSizeInv = 1.0 / fLodSize; + vec2 cLodSizeInv = 1.0 / cLodSize; + vec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), floor( lod ) ); + vec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), ceil( lod ) ); + return mix( fSample, cSample, fract( lod ) ); + } + vec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) { + vec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior ); + vec3 modelScale; + modelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) ); + modelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) ); + modelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) ); + return normalize( refractionVector ) * thickness * modelScale; + } + float applyIorToRoughness( const in float roughness, const in float ior ) { + return roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 ); + } + vec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) { + float lod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior ); + return textureBicubic( transmissionSamplerMap, fragCoord.xy, lod ); + } + vec3 volumeAttenuation( const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) { + if ( isinf( attenuationDistance ) ) { + return vec3( 1.0 ); + } else { + vec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance; + vec3 transmittance = exp( - attenuationCoefficient * transmissionDistance ); return transmittance; + } + } + vec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor, + const in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix, + const in mat4 viewMatrix, const in mat4 projMatrix, const in float dispersion, const in float ior, const in float thickness, + const in vec3 attenuationColor, const in float attenuationDistance ) { + vec4 transmittedLight; + vec3 transmittance; + #ifdef USE_DISPERSION + float halfSpread = ( ior - 1.0 ) * 0.025 * dispersion; + vec3 iors = vec3( ior - halfSpread, ior, ior + halfSpread ); + for ( int i = 0; i < 3; i ++ ) { + vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, iors[ i ], modelMatrix ); + vec3 refractedRayExit = position + transmissionRay; + + vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 ); + vec2 refractionCoords = ndcPos.xy / ndcPos.w; + refractionCoords += 1.0; + refractionCoords /= 2.0; + + vec4 transmissionSample = getTransmissionSample( refractionCoords, roughness, iors[ i ] ); + transmittedLight[ i ] = transmissionSample[ i ]; + transmittedLight.a += transmissionSample.a; + transmittance[ i ] = diffuseColor[ i ] * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance )[ i ]; + } + transmittedLight.a /= 3.0; + + #else + + vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix ); + vec3 refractedRayExit = position + transmissionRay; + vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 ); + vec2 refractionCoords = ndcPos.xy / ndcPos.w; + refractionCoords += 1.0; + refractionCoords /= 2.0; + transmittedLight = getTransmissionSample( refractionCoords, roughness, ior ); + transmittance = diffuseColor * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance ); + + #endif + vec3 attenuatedColor = transmittance * transmittedLight.rgb; + vec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness ); + float transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0; + return vec4( ( 1.0 - F ) * attenuatedColor, 1.0 - ( 1.0 - transmittedLight.a ) * transmittanceFactor ); + } +#endif`,bB=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) + varying vec2 vUv; +#endif +#ifdef USE_MAP + varying vec2 vMapUv; +#endif +#ifdef USE_ALPHAMAP + varying vec2 vAlphaMapUv; +#endif +#ifdef USE_LIGHTMAP + varying vec2 vLightMapUv; +#endif +#ifdef USE_AOMAP + varying vec2 vAoMapUv; +#endif +#ifdef USE_BUMPMAP + varying vec2 vBumpMapUv; +#endif +#ifdef USE_NORMALMAP + varying vec2 vNormalMapUv; +#endif +#ifdef USE_EMISSIVEMAP + varying vec2 vEmissiveMapUv; +#endif +#ifdef USE_METALNESSMAP + varying vec2 vMetalnessMapUv; +#endif +#ifdef USE_ROUGHNESSMAP + varying vec2 vRoughnessMapUv; +#endif +#ifdef USE_ANISOTROPYMAP + varying vec2 vAnisotropyMapUv; +#endif +#ifdef USE_CLEARCOATMAP + varying vec2 vClearcoatMapUv; +#endif +#ifdef USE_CLEARCOAT_NORMALMAP + varying vec2 vClearcoatNormalMapUv; +#endif +#ifdef USE_CLEARCOAT_ROUGHNESSMAP + varying vec2 vClearcoatRoughnessMapUv; +#endif +#ifdef USE_IRIDESCENCEMAP + varying vec2 vIridescenceMapUv; +#endif +#ifdef USE_IRIDESCENCE_THICKNESSMAP + varying vec2 vIridescenceThicknessMapUv; +#endif +#ifdef USE_SHEEN_COLORMAP + varying vec2 vSheenColorMapUv; +#endif +#ifdef USE_SHEEN_ROUGHNESSMAP + varying vec2 vSheenRoughnessMapUv; +#endif +#ifdef USE_SPECULARMAP + varying vec2 vSpecularMapUv; +#endif +#ifdef USE_SPECULAR_COLORMAP + varying vec2 vSpecularColorMapUv; +#endif +#ifdef USE_SPECULAR_INTENSITYMAP + varying vec2 vSpecularIntensityMapUv; +#endif +#ifdef USE_TRANSMISSIONMAP + uniform mat3 transmissionMapTransform; + varying vec2 vTransmissionMapUv; +#endif +#ifdef USE_THICKNESSMAP + uniform mat3 thicknessMapTransform; + varying vec2 vThicknessMapUv; +#endif`,HB=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) + varying vec2 vUv; +#endif +#ifdef USE_MAP + uniform mat3 mapTransform; + varying vec2 vMapUv; +#endif +#ifdef USE_ALPHAMAP + uniform mat3 alphaMapTransform; + varying vec2 vAlphaMapUv; +#endif +#ifdef USE_LIGHTMAP + uniform mat3 lightMapTransform; + varying vec2 vLightMapUv; +#endif +#ifdef USE_AOMAP + uniform mat3 aoMapTransform; + varying vec2 vAoMapUv; +#endif +#ifdef USE_BUMPMAP + uniform mat3 bumpMapTransform; + varying vec2 vBumpMapUv; +#endif +#ifdef USE_NORMALMAP + uniform mat3 normalMapTransform; + varying vec2 vNormalMapUv; +#endif +#ifdef USE_DISPLACEMENTMAP + uniform mat3 displacementMapTransform; + varying vec2 vDisplacementMapUv; +#endif +#ifdef USE_EMISSIVEMAP + uniform mat3 emissiveMapTransform; + varying vec2 vEmissiveMapUv; +#endif +#ifdef USE_METALNESSMAP + uniform mat3 metalnessMapTransform; + varying vec2 vMetalnessMapUv; +#endif +#ifdef USE_ROUGHNESSMAP + uniform mat3 roughnessMapTransform; + varying vec2 vRoughnessMapUv; +#endif +#ifdef USE_ANISOTROPYMAP + uniform mat3 anisotropyMapTransform; + varying vec2 vAnisotropyMapUv; +#endif +#ifdef USE_CLEARCOATMAP + uniform mat3 clearcoatMapTransform; + varying vec2 vClearcoatMapUv; +#endif +#ifdef USE_CLEARCOAT_NORMALMAP + uniform mat3 clearcoatNormalMapTransform; + varying vec2 vClearcoatNormalMapUv; +#endif +#ifdef USE_CLEARCOAT_ROUGHNESSMAP + uniform mat3 clearcoatRoughnessMapTransform; + varying vec2 vClearcoatRoughnessMapUv; +#endif +#ifdef USE_SHEEN_COLORMAP + uniform mat3 sheenColorMapTransform; + varying vec2 vSheenColorMapUv; +#endif +#ifdef USE_SHEEN_ROUGHNESSMAP + uniform mat3 sheenRoughnessMapTransform; + varying vec2 vSheenRoughnessMapUv; +#endif +#ifdef USE_IRIDESCENCEMAP + uniform mat3 iridescenceMapTransform; + varying vec2 vIridescenceMapUv; +#endif +#ifdef USE_IRIDESCENCE_THICKNESSMAP + uniform mat3 iridescenceThicknessMapTransform; + varying vec2 vIridescenceThicknessMapUv; +#endif +#ifdef USE_SPECULARMAP + uniform mat3 specularMapTransform; + varying vec2 vSpecularMapUv; +#endif +#ifdef USE_SPECULAR_COLORMAP + uniform mat3 specularColorMapTransform; + varying vec2 vSpecularColorMapUv; +#endif +#ifdef USE_SPECULAR_INTENSITYMAP + uniform mat3 specularIntensityMapTransform; + varying vec2 vSpecularIntensityMapUv; +#endif +#ifdef USE_TRANSMISSIONMAP + uniform mat3 transmissionMapTransform; + varying vec2 vTransmissionMapUv; +#endif +#ifdef USE_THICKNESSMAP + uniform mat3 thicknessMapTransform; + varying vec2 vThicknessMapUv; +#endif`,PB=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) + vUv = vec3( uv, 1 ).xy; +#endif +#ifdef USE_MAP + vMapUv = ( mapTransform * vec3( MAP_UV, 1 ) ).xy; +#endif +#ifdef USE_ALPHAMAP + vAlphaMapUv = ( alphaMapTransform * vec3( ALPHAMAP_UV, 1 ) ).xy; +#endif +#ifdef USE_LIGHTMAP + vLightMapUv = ( lightMapTransform * vec3( LIGHTMAP_UV, 1 ) ).xy; +#endif +#ifdef USE_AOMAP + vAoMapUv = ( aoMapTransform * vec3( AOMAP_UV, 1 ) ).xy; +#endif +#ifdef USE_BUMPMAP + vBumpMapUv = ( bumpMapTransform * vec3( BUMPMAP_UV, 1 ) ).xy; +#endif +#ifdef USE_NORMALMAP + vNormalMapUv = ( normalMapTransform * vec3( NORMALMAP_UV, 1 ) ).xy; +#endif +#ifdef USE_DISPLACEMENTMAP + vDisplacementMapUv = ( displacementMapTransform * vec3( DISPLACEMENTMAP_UV, 1 ) ).xy; +#endif +#ifdef USE_EMISSIVEMAP + vEmissiveMapUv = ( emissiveMapTransform * vec3( EMISSIVEMAP_UV, 1 ) ).xy; +#endif +#ifdef USE_METALNESSMAP + vMetalnessMapUv = ( metalnessMapTransform * vec3( METALNESSMAP_UV, 1 ) ).xy; +#endif +#ifdef USE_ROUGHNESSMAP + vRoughnessMapUv = ( roughnessMapTransform * vec3( ROUGHNESSMAP_UV, 1 ) ).xy; +#endif +#ifdef USE_ANISOTROPYMAP + vAnisotropyMapUv = ( anisotropyMapTransform * vec3( ANISOTROPYMAP_UV, 1 ) ).xy; +#endif +#ifdef USE_CLEARCOATMAP + vClearcoatMapUv = ( clearcoatMapTransform * vec3( CLEARCOATMAP_UV, 1 ) ).xy; +#endif +#ifdef USE_CLEARCOAT_NORMALMAP + vClearcoatNormalMapUv = ( clearcoatNormalMapTransform * vec3( CLEARCOAT_NORMALMAP_UV, 1 ) ).xy; +#endif +#ifdef USE_CLEARCOAT_ROUGHNESSMAP + vClearcoatRoughnessMapUv = ( clearcoatRoughnessMapTransform * vec3( CLEARCOAT_ROUGHNESSMAP_UV, 1 ) ).xy; +#endif +#ifdef USE_IRIDESCENCEMAP + vIridescenceMapUv = ( iridescenceMapTransform * vec3( IRIDESCENCEMAP_UV, 1 ) ).xy; +#endif +#ifdef USE_IRIDESCENCE_THICKNESSMAP + vIridescenceThicknessMapUv = ( iridescenceThicknessMapTransform * vec3( IRIDESCENCE_THICKNESSMAP_UV, 1 ) ).xy; +#endif +#ifdef USE_SHEEN_COLORMAP + vSheenColorMapUv = ( sheenColorMapTransform * vec3( SHEEN_COLORMAP_UV, 1 ) ).xy; +#endif +#ifdef USE_SHEEN_ROUGHNESSMAP + vSheenRoughnessMapUv = ( sheenRoughnessMapTransform * vec3( SHEEN_ROUGHNESSMAP_UV, 1 ) ).xy; +#endif +#ifdef USE_SPECULARMAP + vSpecularMapUv = ( specularMapTransform * vec3( SPECULARMAP_UV, 1 ) ).xy; +#endif +#ifdef USE_SPECULAR_COLORMAP + vSpecularColorMapUv = ( specularColorMapTransform * vec3( SPECULAR_COLORMAP_UV, 1 ) ).xy; +#endif +#ifdef USE_SPECULAR_INTENSITYMAP + vSpecularIntensityMapUv = ( specularIntensityMapTransform * vec3( SPECULAR_INTENSITYMAP_UV, 1 ) ).xy; +#endif +#ifdef USE_TRANSMISSIONMAP + vTransmissionMapUv = ( transmissionMapTransform * vec3( TRANSMISSIONMAP_UV, 1 ) ).xy; +#endif +#ifdef USE_THICKNESSMAP + vThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy; +#endif`,OB=`#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0 + vec4 worldPosition = vec4( transformed, 1.0 ); + #ifdef USE_BATCHING + worldPosition = batchingMatrix * worldPosition; + #endif + #ifdef USE_INSTANCING + worldPosition = instanceMatrix * worldPosition; + #endif + worldPosition = modelMatrix * worldPosition; +#endif`;const JB=`varying vec2 vUv; +uniform mat3 uvTransform; +void main() { + vUv = ( uvTransform * vec3( uv, 1 ) ).xy; + gl_Position = vec4( position.xy, 1.0, 1.0 ); +}`,qB=`uniform sampler2D t2D; +uniform float backgroundIntensity; +varying vec2 vUv; +void main() { + vec4 texColor = texture2D( t2D, vUv ); + #ifdef DECODE_VIDEO_TEXTURE + texColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w ); + #endif + texColor.rgb *= backgroundIntensity; + gl_FragColor = texColor; + #include + #include +}`,YB=`varying vec3 vWorldDirection; +#include +void main() { + vWorldDirection = transformDirection( position, modelMatrix ); + #include + #include + gl_Position.z = gl_Position.w; +}`,KB=`#ifdef ENVMAP_TYPE_CUBE + uniform samplerCube envMap; +#elif defined( ENVMAP_TYPE_CUBE_UV ) + uniform sampler2D envMap; +#endif +uniform float flipEnvMap; +uniform float backgroundBlurriness; +uniform float backgroundIntensity; +uniform mat3 backgroundRotation; +varying vec3 vWorldDirection; +#include +void main() { + #ifdef ENVMAP_TYPE_CUBE + vec4 texColor = textureCube( envMap, backgroundRotation * vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) ); + #elif defined( ENVMAP_TYPE_CUBE_UV ) + vec4 texColor = textureCubeUV( envMap, backgroundRotation * vWorldDirection, backgroundBlurriness ); + #else + vec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 ); + #endif + texColor.rgb *= backgroundIntensity; + gl_FragColor = texColor; + #include + #include +}`,WB=`varying vec3 vWorldDirection; +#include +void main() { + vWorldDirection = transformDirection( position, modelMatrix ); + #include + #include + gl_Position.z = gl_Position.w; +}`,VB=`uniform samplerCube tCube; +uniform float tFlip; +uniform float opacity; +varying vec3 vWorldDirection; +void main() { + vec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) ); + gl_FragColor = texColor; + gl_FragColor.a *= opacity; + #include + #include +}`,zB=`#include +#include +#include +#include +#include +#include +#include +#include +varying vec2 vHighPrecisionZW; +void main() { + #include + #include + #include + #include + #ifdef USE_DISPLACEMENTMAP + #include + #include + #include + #endif + #include + #include + #include + #include + #include + #include + #include + vHighPrecisionZW = gl_Position.zw; +}`,XB=`#if DEPTH_PACKING == 3200 + uniform float opacity; +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include +varying vec2 vHighPrecisionZW; +void main() { + vec4 diffuseColor = vec4( 1.0 ); + #include + #if DEPTH_PACKING == 3200 + diffuseColor.a = opacity; + #endif + #include + #include + #include + #include + #include + float fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5; + #if DEPTH_PACKING == 3200 + gl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity ); + #elif DEPTH_PACKING == 3201 + gl_FragColor = packDepthToRGBA( fragCoordZ ); + #endif +}`,ZB=`#define DISTANCE +varying vec3 vWorldPosition; +#include +#include +#include +#include +#include +#include +#include +void main() { + #include + #include + #include + #include + #ifdef USE_DISPLACEMENTMAP + #include + #include + #include + #endif + #include + #include + #include + #include + #include + #include + #include + vWorldPosition = worldPosition.xyz; +}`,jB=`#define DISTANCE +uniform vec3 referencePosition; +uniform float nearDistance; +uniform float farDistance; +varying vec3 vWorldPosition; +#include +#include +#include +#include +#include +#include +#include +#include +void main () { + vec4 diffuseColor = vec4( 1.0 ); + #include + #include + #include + #include + #include + float dist = length( vWorldPosition - referencePosition ); + dist = ( dist - nearDistance ) / ( farDistance - nearDistance ); + dist = saturate( dist ); + gl_FragColor = packDepthToRGBA( dist ); +}`,$B=`varying vec3 vWorldDirection; +#include +void main() { + vWorldDirection = transformDirection( position, modelMatrix ); + #include + #include +}`,Ah=`uniform sampler2D tEquirect; +varying vec3 vWorldDirection; +#include +void main() { + vec3 direction = normalize( vWorldDirection ); + vec2 sampleUV = equirectUv( direction ); + gl_FragColor = texture2D( tEquirect, sampleUV ); + #include + #include +}`,th=`uniform float scale; +attribute float lineDistance; +varying float vLineDistance; +#include +#include +#include +#include +#include +#include +#include +void main() { + vLineDistance = scale * lineDistance; + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include +}`,eh=`uniform vec3 diffuse; +uniform float opacity; +uniform float dashSize; +uniform float totalSize; +varying float vLineDistance; +#include +#include +#include +#include +#include +#include +#include +void main() { + vec4 diffuseColor = vec4( diffuse, opacity ); + #include + if ( mod( vLineDistance, totalSize ) > dashSize ) { + discard; + } + vec3 outgoingLight = vec3( 0.0 ); + #include + #include + #include + outgoingLight = diffuseColor.rgb; + #include + #include + #include + #include + #include +}`,ih=`#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +void main() { + #include + #include + #include + #include + #include + #if defined ( USE_ENVMAP ) || defined ( USE_SKINNING ) + #include + #include + #include + #include + #include + #endif + #include + #include + #include + #include + #include + #include + #include + #include + #include +}`,nh=`uniform vec3 diffuse; +uniform float opacity; +#ifndef FLAT_SHADED + varying vec3 vNormal; +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +void main() { + vec4 diffuseColor = vec4( diffuse, opacity ); + #include + #include + #include + #include + #include + #include + #include + #include + ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); + #ifdef USE_LIGHTMAP + vec4 lightMapTexel = texture2D( lightMap, vLightMapUv ); + reflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI; + #else + reflectedLight.indirectDiffuse += vec3( 1.0 ); + #endif + #include + reflectedLight.indirectDiffuse *= diffuseColor.rgb; + vec3 outgoingLight = reflectedLight.indirectDiffuse; + #include + #include + #include + #include + #include + #include + #include +}`,sh=`#define LAMBERT +varying vec3 vViewPosition; +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +void main() { + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + vViewPosition = - mvPosition.xyz; + #include + #include + #include + #include +}`,oh=`#define LAMBERT +uniform vec3 diffuse; +uniform vec3 emissive; +uniform float opacity; +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +void main() { + vec4 diffuseColor = vec4( diffuse, opacity ); + #include + ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); + vec3 totalEmissiveRadiance = emissive; + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance; + #include + #include + #include + #include + #include + #include + #include +}`,gh=`#define MATCAP +varying vec3 vViewPosition; +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +void main() { + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + vViewPosition = - mvPosition.xyz; +}`,rh=`#define MATCAP +uniform vec3 diffuse; +uniform float opacity; +uniform sampler2D matcap; +varying vec3 vViewPosition; +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +void main() { + vec4 diffuseColor = vec4( diffuse, opacity ); + #include + #include + #include + #include + #include + #include + #include + #include + #include + vec3 viewDir = normalize( vViewPosition ); + vec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) ); + vec3 y = cross( viewDir, x ); + vec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5; + #ifdef USE_MATCAP + vec4 matcapColor = texture2D( matcap, uv ); + #else + vec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 ); + #endif + vec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb; + #include + #include + #include + #include + #include + #include +}`,ah=`#define NORMAL +#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE ) + varying vec3 vViewPosition; +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include +void main() { + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include +#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE ) + vViewPosition = - mvPosition.xyz; +#endif +}`,Ih=`#define NORMAL +uniform float opacity; +#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE ) + varying vec3 vViewPosition; +#endif +#include +#include +#include +#include +#include +#include +#include +void main() { + vec4 diffuseColor = vec4( 0.0, 0.0, 0.0, opacity ); + #include + #include + #include + #include + gl_FragColor = vec4( packNormalToRGB( normal ), diffuseColor.a ); + #ifdef OPAQUE + gl_FragColor.a = 1.0; + #endif +}`,Eh=`#define PHONG +varying vec3 vViewPosition; +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +void main() { + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + vViewPosition = - mvPosition.xyz; + #include + #include + #include + #include +}`,Ch=`#define PHONG +uniform vec3 diffuse; +uniform vec3 emissive; +uniform vec3 specular; +uniform float shininess; +uniform float opacity; +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +void main() { + vec4 diffuseColor = vec4( diffuse, opacity ); + #include + ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); + vec3 totalEmissiveRadiance = emissive; + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance; + #include + #include + #include + #include + #include + #include + #include +}`,Qh=`#define STANDARD +varying vec3 vViewPosition; +#ifdef USE_TRANSMISSION + varying vec3 vWorldPosition; +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +void main() { + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + vViewPosition = - mvPosition.xyz; + #include + #include + #include +#ifdef USE_TRANSMISSION + vWorldPosition = worldPosition.xyz; +#endif +}`,Bh=`#define STANDARD +#ifdef PHYSICAL + #define IOR + #define USE_SPECULAR +#endif +uniform vec3 diffuse; +uniform vec3 emissive; +uniform float roughness; +uniform float metalness; +uniform float opacity; +#ifdef IOR + uniform float ior; +#endif +#ifdef USE_SPECULAR + uniform float specularIntensity; + uniform vec3 specularColor; + #ifdef USE_SPECULAR_COLORMAP + uniform sampler2D specularColorMap; + #endif + #ifdef USE_SPECULAR_INTENSITYMAP + uniform sampler2D specularIntensityMap; + #endif +#endif +#ifdef USE_CLEARCOAT + uniform float clearcoat; + uniform float clearcoatRoughness; +#endif +#ifdef USE_DISPERSION + uniform float dispersion; +#endif +#ifdef USE_IRIDESCENCE + uniform float iridescence; + uniform float iridescenceIOR; + uniform float iridescenceThicknessMinimum; + uniform float iridescenceThicknessMaximum; +#endif +#ifdef USE_SHEEN + uniform vec3 sheenColor; + uniform float sheenRoughness; + #ifdef USE_SHEEN_COLORMAP + uniform sampler2D sheenColorMap; + #endif + #ifdef USE_SHEEN_ROUGHNESSMAP + uniform sampler2D sheenRoughnessMap; + #endif +#endif +#ifdef USE_ANISOTROPY + uniform vec2 anisotropyVector; + #ifdef USE_ANISOTROPYMAP + uniform sampler2D anisotropyMap; + #endif +#endif +varying vec3 vViewPosition; +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +void main() { + vec4 diffuseColor = vec4( diffuse, opacity ); + #include + ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); + vec3 totalEmissiveRadiance = emissive; + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + vec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse; + vec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular; + #include + vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance; + #ifdef USE_SHEEN + float sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor ); + outgoingLight = outgoingLight * sheenEnergyComp + sheenSpecularDirect + sheenSpecularIndirect; + #endif + #ifdef USE_CLEARCOAT + float dotNVcc = saturate( dot( geometryClearcoatNormal, geometryViewDir ) ); + vec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc ); + outgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + ( clearcoatSpecularDirect + clearcoatSpecularIndirect ) * material.clearcoat; + #endif + #include + #include + #include + #include + #include + #include +}`,hh=`#define TOON +varying vec3 vViewPosition; +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +void main() { + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + vViewPosition = - mvPosition.xyz; + #include + #include + #include +}`,ch=`#define TOON +uniform vec3 diffuse; +uniform vec3 emissive; +uniform float opacity; +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +void main() { + vec4 diffuseColor = vec4( diffuse, opacity ); + #include + ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); + vec3 totalEmissiveRadiance = emissive; + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance; + #include + #include + #include + #include + #include + #include +}`,lh=`uniform float size; +uniform float scale; +#include +#include +#include +#include +#include +#include +#ifdef USE_POINTS_UV + varying vec2 vUv; + uniform mat3 uvTransform; +#endif +void main() { + #ifdef USE_POINTS_UV + vUv = ( uvTransform * vec3( uv, 1 ) ).xy; + #endif + #include + #include + #include + #include + #include + #include + gl_PointSize = size; + #ifdef USE_SIZEATTENUATION + bool isPerspective = isPerspectiveMatrix( projectionMatrix ); + if ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z ); + #endif + #include + #include + #include + #include +}`,dh=`uniform vec3 diffuse; +uniform float opacity; +#include +#include +#include +#include +#include +#include +#include +#include +void main() { + vec4 diffuseColor = vec4( diffuse, opacity ); + #include + vec3 outgoingLight = vec3( 0.0 ); + #include + #include + #include + #include + #include + outgoingLight = diffuseColor.rgb; + #include + #include + #include + #include + #include +}`,uh=`#include +#include +#include +#include +#include +#include +#include +void main() { + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include +}`,fh=`uniform vec3 color; +uniform float opacity; +#include +#include +#include +#include +#include +#include +#include +#include +void main() { + #include + gl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) ); + #include + #include + #include +}`,ph=`uniform float rotation; +uniform vec2 center; +#include +#include +#include +#include +#include +void main() { + #include + vec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 ); + vec2 scale; + scale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) ); + scale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) ); + #ifndef USE_SIZEATTENUATION + bool isPerspective = isPerspectiveMatrix( projectionMatrix ); + if ( isPerspective ) scale *= - mvPosition.z; + #endif + vec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale; + vec2 rotatedPosition; + rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y; + rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y; + mvPosition.xy += rotatedPosition; + gl_Position = projectionMatrix * mvPosition; + #include + #include + #include +}`,Dh=`uniform vec3 diffuse; +uniform float opacity; +#include +#include +#include +#include +#include +#include +#include +#include +#include +void main() { + vec4 diffuseColor = vec4( diffuse, opacity ); + #include + vec3 outgoingLight = vec3( 0.0 ); + #include + #include + #include + #include + #include + outgoingLight = diffuseColor.rgb; + #include + #include + #include + #include +}`,qA={alphahash_fragment:qC,alphahash_pars_fragment:YC,alphamap_fragment:KC,alphamap_pars_fragment:WC,alphatest_fragment:VC,alphatest_pars_fragment:zC,aomap_fragment:XC,aomap_pars_fragment:ZC,batching_pars_vertex:jC,batching_vertex:$C,begin_vertex:AQ,beginnormal_vertex:tQ,bsdfs:eQ,iridescence_fragment:iQ,bumpmap_pars_fragment:nQ,clipping_planes_fragment:sQ,clipping_planes_pars_fragment:oQ,clipping_planes_pars_vertex:gQ,clipping_planes_vertex:rQ,color_fragment:aQ,color_pars_fragment:IQ,color_pars_vertex:EQ,color_vertex:CQ,common:QQ,cube_uv_reflection_fragment:BQ,defaultnormal_vertex:hQ,displacementmap_pars_vertex:cQ,displacementmap_vertex:lQ,emissivemap_fragment:dQ,emissivemap_pars_fragment:uQ,colorspace_fragment:fQ,colorspace_pars_fragment:pQ,envmap_fragment:DQ,envmap_common_pars_fragment:mQ,envmap_pars_fragment:yQ,envmap_pars_vertex:wQ,envmap_physical_pars_fragment:GQ,envmap_vertex:RQ,fog_vertex:SQ,fog_pars_vertex:MQ,fog_fragment:NQ,fog_pars_fragment:xQ,gradientmap_pars_fragment:FQ,lightmap_pars_fragment:_Q,lights_lambert_fragment:LQ,lights_lambert_pars_fragment:vQ,lights_pars_begin:UQ,lights_toon_fragment:TQ,lights_toon_pars_fragment:kQ,lights_phong_fragment:bQ,lights_phong_pars_fragment:HQ,lights_physical_fragment:PQ,lights_physical_pars_fragment:OQ,lights_fragment_begin:JQ,lights_fragment_maps:qQ,lights_fragment_end:YQ,logdepthbuf_fragment:KQ,logdepthbuf_pars_fragment:WQ,logdepthbuf_pars_vertex:VQ,logdepthbuf_vertex:zQ,map_fragment:XQ,map_pars_fragment:ZQ,map_particle_fragment:jQ,map_particle_pars_fragment:$Q,metalnessmap_fragment:AB,metalnessmap_pars_fragment:tB,morphinstance_vertex:eB,morphcolor_vertex:iB,morphnormal_vertex:nB,morphtarget_pars_vertex:sB,morphtarget_vertex:oB,normal_fragment_begin:gB,normal_fragment_maps:rB,normal_pars_fragment:aB,normal_pars_vertex:IB,normal_vertex:EB,normalmap_pars_fragment:CB,clearcoat_normal_fragment_begin:QB,clearcoat_normal_fragment_maps:BB,clearcoat_pars_fragment:hB,iridescence_pars_fragment:cB,opaque_fragment:lB,packing:dB,premultiplied_alpha_fragment:uB,project_vertex:fB,dithering_fragment:pB,dithering_pars_fragment:DB,roughnessmap_fragment:mB,roughnessmap_pars_fragment:yB,shadowmap_pars_fragment:wB,shadowmap_pars_vertex:RB,shadowmap_vertex:SB,shadowmask_pars_fragment:MB,skinbase_vertex:NB,skinning_pars_vertex:xB,skinning_vertex:FB,skinnormal_vertex:_B,specularmap_fragment:LB,specularmap_pars_fragment:vB,tonemapping_fragment:UB,tonemapping_pars_fragment:GB,transmission_fragment:TB,transmission_pars_fragment:kB,uv_pars_fragment:bB,uv_pars_vertex:HB,uv_vertex:PB,worldpos_vertex:OB,background_vert:JB,background_frag:qB,backgroundCube_vert:YB,backgroundCube_frag:KB,cube_vert:WB,cube_frag:VB,depth_vert:zB,depth_frag:XB,distanceRGBA_vert:ZB,distanceRGBA_frag:jB,equirect_vert:$B,equirect_frag:Ah,linedashed_vert:th,linedashed_frag:eh,meshbasic_vert:ih,meshbasic_frag:nh,meshlambert_vert:sh,meshlambert_frag:oh,meshmatcap_vert:gh,meshmatcap_frag:rh,meshnormal_vert:ah,meshnormal_frag:Ih,meshphong_vert:Eh,meshphong_frag:Ch,meshphysical_vert:Qh,meshphysical_frag:Bh,meshtoon_vert:hh,meshtoon_frag:ch,points_vert:lh,points_frag:dh,shadow_vert:uh,shadow_frag:fh,sprite_vert:ph,sprite_frag:Dh},lA={common:{diffuse:{value:new FA(16777215)},opacity:{value:1},map:{value:null},mapTransform:{value:new YA},alphaMap:{value:null},alphaMapTransform:{value:new YA},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransform:{value:new YA}},envmap:{envMap:{value:null},envMapRotation:{value:new YA},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1},aoMapTransform:{value:new YA}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1},lightMapTransform:{value:new YA}},bumpmap:{bumpMap:{value:null},bumpMapTransform:{value:new YA},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalMapTransform:{value:new YA},normalScale:{value:new AA(1,1)}},displacementmap:{displacementMap:{value:null},displacementMapTransform:{value:new YA},displacementScale:{value:1},displacementBias:{value:0}},emissivemap:{emissiveMap:{value:null},emissiveMapTransform:{value:new YA}},metalnessmap:{metalnessMap:{value:null},metalnessMapTransform:{value:new YA}},roughnessmap:{roughnessMap:{value:null},roughnessMapTransform:{value:new YA}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new FA(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotShadowMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new FA(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaMapTransform:{value:new YA},alphaTest:{value:0},uvTransform:{value:new YA}},sprite:{diffuse:{value:new FA(16777215)},opacity:{value:1},center:{value:new AA(.5,.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new YA},alphaMap:{value:null},alphaMapTransform:{value:new YA},alphaTest:{value:0}}},te={basic:{uniforms:Ft([lA.common,lA.specularmap,lA.envmap,lA.aomap,lA.lightmap,lA.fog]),vertexShader:qA.meshbasic_vert,fragmentShader:qA.meshbasic_frag},lambert:{uniforms:Ft([lA.common,lA.specularmap,lA.envmap,lA.aomap,lA.lightmap,lA.emissivemap,lA.bumpmap,lA.normalmap,lA.displacementmap,lA.fog,lA.lights,{emissive:{value:new FA(0)}}]),vertexShader:qA.meshlambert_vert,fragmentShader:qA.meshlambert_frag},phong:{uniforms:Ft([lA.common,lA.specularmap,lA.envmap,lA.aomap,lA.lightmap,lA.emissivemap,lA.bumpmap,lA.normalmap,lA.displacementmap,lA.fog,lA.lights,{emissive:{value:new FA(0)},specular:{value:new FA(1118481)},shininess:{value:30}}]),vertexShader:qA.meshphong_vert,fragmentShader:qA.meshphong_frag},standard:{uniforms:Ft([lA.common,lA.envmap,lA.aomap,lA.lightmap,lA.emissivemap,lA.bumpmap,lA.normalmap,lA.displacementmap,lA.roughnessmap,lA.metalnessmap,lA.fog,lA.lights,{emissive:{value:new FA(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:qA.meshphysical_vert,fragmentShader:qA.meshphysical_frag},toon:{uniforms:Ft([lA.common,lA.aomap,lA.lightmap,lA.emissivemap,lA.bumpmap,lA.normalmap,lA.displacementmap,lA.gradientmap,lA.fog,lA.lights,{emissive:{value:new FA(0)}}]),vertexShader:qA.meshtoon_vert,fragmentShader:qA.meshtoon_frag},matcap:{uniforms:Ft([lA.common,lA.bumpmap,lA.normalmap,lA.displacementmap,lA.fog,{matcap:{value:null}}]),vertexShader:qA.meshmatcap_vert,fragmentShader:qA.meshmatcap_frag},points:{uniforms:Ft([lA.points,lA.fog]),vertexShader:qA.points_vert,fragmentShader:qA.points_frag},dashed:{uniforms:Ft([lA.common,lA.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:qA.linedashed_vert,fragmentShader:qA.linedashed_frag},depth:{uniforms:Ft([lA.common,lA.displacementmap]),vertexShader:qA.depth_vert,fragmentShader:qA.depth_frag},normal:{uniforms:Ft([lA.common,lA.bumpmap,lA.normalmap,lA.displacementmap,{opacity:{value:1}}]),vertexShader:qA.meshnormal_vert,fragmentShader:qA.meshnormal_frag},sprite:{uniforms:Ft([lA.sprite,lA.fog]),vertexShader:qA.sprite_vert,fragmentShader:qA.sprite_frag},background:{uniforms:{uvTransform:{value:new YA},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:qA.background_vert,fragmentShader:qA.background_frag},backgroundCube:{uniforms:{envMap:{value:null},flipEnvMap:{value:-1},backgroundBlurriness:{value:0},backgroundIntensity:{value:1},backgroundRotation:{value:new YA}},vertexShader:qA.backgroundCube_vert,fragmentShader:qA.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:qA.cube_vert,fragmentShader:qA.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:qA.equirect_vert,fragmentShader:qA.equirect_frag},distanceRGBA:{uniforms:Ft([lA.common,lA.displacementmap,{referencePosition:{value:new M},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:qA.distanceRGBA_vert,fragmentShader:qA.distanceRGBA_frag},shadow:{uniforms:Ft([lA.lights,lA.fog,{color:{value:new FA(0)},opacity:{value:1}}]),vertexShader:qA.shadow_vert,fragmentShader:qA.shadow_frag}};te.physical={uniforms:Ft([te.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new YA},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new YA},clearcoatNormalScale:{value:new AA(1,1)},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatRoughnessMapTransform:{value:new YA},dispersion:{value:0},iridescence:{value:0},iridescenceMap:{value:null},iridescenceMapTransform:{value:new YA},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},iridescenceThicknessMapTransform:{value:new YA},sheen:{value:0},sheenColor:{value:new FA(0)},sheenColorMap:{value:null},sheenColorMapTransform:{value:new YA},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},sheenRoughnessMapTransform:{value:new YA},transmission:{value:0},transmissionMap:{value:null},transmissionMapTransform:{value:new YA},transmissionSamplerSize:{value:new AA},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new YA},attenuationDistance:{value:0},attenuationColor:{value:new FA(0)},specularColor:{value:new FA(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new YA},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new YA},anisotropyVector:{value:new AA},anisotropyMap:{value:null},anisotropyMapTransform:{value:new YA}}]),vertexShader:qA.meshphysical_vert,fragmentShader:qA.meshphysical_frag};const bn={r:0,b:0,g:0},qe=new Jt,mh=new KA;function yh(n,A,t,e,i,s,o){const g=new FA(0);let r=s===!0?0:1,a,I,E=null,C=0,Q=null;function c(p){let d=p.isScene===!0?p.background:null;return d&&d.isTexture&&(d=(p.backgroundBlurriness>0?t:A).get(d)),d}function l(p){let d=!1;const f=c(p);f===null?B(g,r):f&&f.isColor&&(B(f,1),d=!0);const _=n.xr.getEnvironmentBlendMode();_==="additive"?e.buffers.color.setClear(0,0,0,1,o):_==="alpha-blend"&&e.buffers.color.setClear(0,0,0,0,o),(n.autoClear||d)&&(e.buffers.depth.setTest(!0),e.buffers.depth.setMask(!0),e.buffers.color.setMask(!0),n.clear(n.autoClearColor,n.autoClearDepth,n.autoClearStencil))}function h(p,d){const f=c(d);f&&(f.isCubeTexture||f.mapping===Rs)?(I===void 0&&(I=new St(new hn(1,1,1),new ie({name:"BackgroundCubeMaterial",uniforms:bi(te.backgroundCube.uniforms),vertexShader:te.backgroundCube.vertexShader,fragmentShader:te.backgroundCube.fragmentShader,side:Lt,depthTest:!1,depthWrite:!1,fog:!1})),I.geometry.deleteAttribute("normal"),I.geometry.deleteAttribute("uv"),I.onBeforeRender=function(_,w,R){this.matrixWorld.copyPosition(R.matrixWorld)},Object.defineProperty(I.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),i.update(I)),qe.copy(d.backgroundRotation),qe.x*=-1,qe.y*=-1,qe.z*=-1,f.isCubeTexture&&f.isRenderTargetTexture===!1&&(qe.y*=-1,qe.z*=-1),I.material.uniforms.envMap.value=f,I.material.uniforms.flipEnvMap.value=f.isCubeTexture&&f.isRenderTargetTexture===!1?-1:1,I.material.uniforms.backgroundBlurriness.value=d.backgroundBlurriness,I.material.uniforms.backgroundIntensity.value=d.backgroundIntensity,I.material.uniforms.backgroundRotation.value.setFromMatrix4(mh.makeRotationFromEuler(qe)),I.material.toneMapped=At.getTransfer(f.colorSpace)!==ot,(E!==f||C!==f.version||Q!==n.toneMapping)&&(I.material.needsUpdate=!0,E=f,C=f.version,Q=n.toneMapping),I.layers.enableAll(),p.unshift(I,I.geometry,I.material,0,0,null)):f&&f.isTexture&&(a===void 0&&(a=new St(new ne(2,2),new ie({name:"BackgroundMaterial",uniforms:bi(te.background.uniforms),vertexShader:te.background.vertexShader,fragmentShader:te.background.fragmentShader,side:de,depthTest:!1,depthWrite:!1,fog:!1})),a.geometry.deleteAttribute("normal"),Object.defineProperty(a.material,"map",{get:function(){return this.uniforms.t2D.value}}),i.update(a)),a.material.uniforms.t2D.value=f,a.material.uniforms.backgroundIntensity.value=d.backgroundIntensity,a.material.toneMapped=At.getTransfer(f.colorSpace)!==ot,f.matrixAutoUpdate===!0&&f.updateMatrix(),a.material.uniforms.uvTransform.value.copy(f.matrix),(E!==f||C!==f.version||Q!==n.toneMapping)&&(a.material.needsUpdate=!0,E=f,C=f.version,Q=n.toneMapping),a.layers.enableAll(),p.unshift(a,a.geometry,a.material,0,0,null))}function B(p,d){p.getRGB(bn,Va(n)),e.buffers.color.setClear(bn.r,bn.g,bn.b,d,o)}return{getClearColor:function(){return g},setClearColor:function(p,d=1){g.set(p),r=d,B(g,r)},getClearAlpha:function(){return r},setClearAlpha:function(p){r=p,B(g,r)},render:l,addToRenderList:h}}function wh(n,A){const t=n.getParameter(n.MAX_VERTEX_ATTRIBS),e={},i=C(null);let s=i,o=!1;function g(u,L,k,T,P){let V=!1;const O=E(T,k,L);s!==O&&(s=O,a(s.object)),V=Q(u,T,k,P),V&&c(u,T,k,P),P!==null&&A.update(P,n.ELEMENT_ARRAY_BUFFER),(V||o)&&(o=!1,f(u,L,k,T),P!==null&&n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,A.get(P).buffer))}function r(){return n.createVertexArray()}function a(u){return n.bindVertexArray(u)}function I(u){return n.deleteVertexArray(u)}function E(u,L,k){const T=k.wireframe===!0;let P=e[u.id];P===void 0&&(P={},e[u.id]=P);let V=P[L.id];V===void 0&&(V={},P[L.id]=V);let O=V[T];return O===void 0&&(O=C(r()),V[T]=O),O}function C(u){const L=[],k=[],T=[];for(let P=0;P=0){const dA=P[z];let uA=V[z];if(uA===void 0&&(z==="instanceMatrix"&&u.instanceMatrix&&(uA=u.instanceMatrix),z==="instanceColor"&&u.instanceColor&&(uA=u.instanceColor)),dA===void 0||dA.attribute!==uA||uA&&dA.data!==uA.data)return!0;O++}return s.attributesNum!==O||s.index!==T}function c(u,L,k,T){const P={},V=L.attributes;let O=0;const oA=k.getAttributes();for(const z in oA)if(oA[z].location>=0){let dA=V[z];dA===void 0&&(z==="instanceMatrix"&&u.instanceMatrix&&(dA=u.instanceMatrix),z==="instanceColor"&&u.instanceColor&&(dA=u.instanceColor));const uA={};uA.attribute=dA,dA&&dA.data&&(uA.data=dA.data),P[z]=uA,O++}s.attributes=P,s.attributesNum=O,s.index=T}function l(){const u=s.newAttributes;for(let L=0,k=u.length;L=0){let BA=P[oA];if(BA===void 0&&(oA==="instanceMatrix"&&u.instanceMatrix&&(BA=u.instanceMatrix),oA==="instanceColor"&&u.instanceColor&&(BA=u.instanceColor)),BA!==void 0){const dA=BA.normalized,uA=BA.itemSize,HA=A.get(BA);if(HA===void 0)continue;const WA=HA.buffer,Z=HA.type,nA=HA.bytesPerElement,mA=Z===n.INT||Z===n.UNSIGNED_INT||BA.gpuType===va;if(BA.isInterleavedBufferAttribute){const CA=BA.data,_A=CA.stride,GA=BA.offset;if(CA.isInstancedInterleavedBuffer){for(let UA=0;UA0&&n.getShaderPrecisionFormat(n.FRAGMENT_SHADER,n.HIGH_FLOAT).precision>0)return"highp";w="mediump"}return w==="mediump"&&n.getShaderPrecisionFormat(n.VERTEX_SHADER,n.MEDIUM_FLOAT).precision>0&&n.getShaderPrecisionFormat(n.FRAGMENT_SHADER,n.MEDIUM_FLOAT).precision>0?"mediump":"lowp"}let a=t.precision!==void 0?t.precision:"highp";const I=r(a);I!==a&&(console.warn("THREE.WebGLRenderer:",a,"not supported, using",I,"instead."),a=I);const E=t.logarithmicDepthBuffer===!0,C=n.getParameter(n.MAX_TEXTURE_IMAGE_UNITS),Q=n.getParameter(n.MAX_VERTEX_TEXTURE_IMAGE_UNITS),c=n.getParameter(n.MAX_TEXTURE_SIZE),l=n.getParameter(n.MAX_CUBE_MAP_TEXTURE_SIZE),h=n.getParameter(n.MAX_VERTEX_ATTRIBS),B=n.getParameter(n.MAX_VERTEX_UNIFORM_VECTORS),p=n.getParameter(n.MAX_VARYING_VECTORS),d=n.getParameter(n.MAX_FRAGMENT_UNIFORM_VECTORS),f=Q>0,_=n.getParameter(n.MAX_SAMPLES);return{isWebGL2:!0,getMaxAnisotropy:s,getMaxPrecision:r,textureFormatReadable:o,textureTypeReadable:g,precision:a,logarithmicDepthBuffer:E,maxTextures:C,maxVertexTextures:Q,maxTextureSize:c,maxCubemapSize:l,maxAttributes:h,maxVertexUniforms:B,maxVaryings:p,maxFragmentUniforms:d,vertexTextures:f,maxSamples:_}}function Mh(n){const A=this;let t=null,e=0,i=!1,s=!1;const o=new Fe,g=new YA,r={value:null,needsUpdate:!1};this.uniform=r,this.numPlanes=0,this.numIntersection=0,this.init=function(E,C){const Q=E.length!==0||C||e!==0||i;return i=C,e=E.length,Q},this.beginShadows=function(){s=!0,I(null)},this.endShadows=function(){s=!1},this.setGlobalState=function(E,C){t=I(E,C,0)},this.setState=function(E,C,Q){const c=E.clippingPlanes,l=E.clipIntersection,h=E.clipShadows,B=n.get(E);if(!i||c===null||c.length===0||s&&!h)s?I(null):a();else{const p=s?0:e,d=p*4;let f=B.clippingState||null;r.value=f,f=I(c,C,d,Q);for(let _=0;_!==d;++_)f[_]=t[_];B.clippingState=f,this.numIntersection=l?this.numPlanes:0,this.numPlanes+=p}};function a(){r.value!==t&&(r.value=t,r.needsUpdate=e>0),A.numPlanes=e,A.numIntersection=0}function I(E,C,Q,c){const l=E!==null?E.length:0;let h=null;if(l!==0){if(h=r.value,c!==!0||h===null){const B=Q+l*4,p=C.matrixWorldInverse;g.getNormalMatrix(p),(h===null||h.length0){const a=new HC(r.height);return a.fromEquirectangularTexture(n,o),A.set(o,a),o.addEventListener("dispose",i),t(a.texture,o.mapping)}else return null}}return o}function i(o){const g=o.target;g.removeEventListener("dispose",i);const r=A.get(g);r!==void 0&&(A.delete(g),r.dispose())}function s(){A=new WeakMap}return{get:e,dispose:s}}class Za extends ng{constructor(A=-1,t=1,e=1,i=-1,s=.1,o=2e3){super(),this.isOrthographicCamera=!0,this.type="OrthographicCamera",this.zoom=1,this.view=null,this.left=A,this.right=t,this.top=e,this.bottom=i,this.near=s,this.far=o,this.updateProjectionMatrix()}copy(A,t){return super.copy(A,t),this.left=A.left,this.right=A.right,this.top=A.top,this.bottom=A.bottom,this.near=A.near,this.far=A.far,this.zoom=A.zoom,this.view=A.view===null?null:Object.assign({},A.view),this}setViewOffset(A,t,e,i,s,o){this.view===null&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=A,this.view.fullHeight=t,this.view.offsetX=e,this.view.offsetY=i,this.view.width=s,this.view.height=o,this.updateProjectionMatrix()}clearViewOffset(){this.view!==null&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const A=(this.right-this.left)/(2*this.zoom),t=(this.top-this.bottom)/(2*this.zoom),e=(this.right+this.left)/2,i=(this.top+this.bottom)/2;let s=e-A,o=e+A,g=i+t,r=i-t;if(this.view!==null&&this.view.enabled){const a=(this.right-this.left)/this.view.fullWidth/this.zoom,I=(this.top-this.bottom)/this.view.fullHeight/this.zoom;s+=a*this.view.offsetX,o=s+a*this.view.width,g-=I*this.view.offsetY,r=g-I*this.view.height}this.projectionMatrix.makeOrthographic(s,o,g,r,this.near,this.far,this.coordinateSystem),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(A){const t=super.toJSON(A);return t.object.zoom=this.zoom,t.object.left=this.left,t.object.right=this.right,t.object.top=this.top,t.object.bottom=this.bottom,t.object.near=this.near,t.object.far=this.far,this.view!==null&&(t.object.view=Object.assign({},this.view)),t}}const Si=4,pr=[.125,.215,.35,.446,.526,.582],Ve=20,ho=new Za,Dr=new FA;let co=null,lo=0,uo=0,fo=!1;const Ke=(1+Math.sqrt(5))/2,li=1/Ke,mr=[new M(-Ke,li,0),new M(Ke,li,0),new M(-li,0,Ke),new M(li,0,Ke),new M(0,Ke,-li),new M(0,Ke,li),new M(-1,1,-1),new M(1,1,-1),new M(-1,1,1),new M(1,1,1)];class yr{constructor(A){this._renderer=A,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._lodPlanes=[],this._sizeLods=[],this._sigmas=[],this._blurMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._compileMaterial(this._blurMaterial)}fromScene(A,t=0,e=.1,i=100){co=this._renderer.getRenderTarget(),lo=this._renderer.getActiveCubeFace(),uo=this._renderer.getActiveMipmapLevel(),fo=this._renderer.xr.enabled,this._renderer.xr.enabled=!1,this._setSize(256);const s=this._allocateTargets();return s.depthBuffer=!0,this._sceneToCubeUV(A,e,i,s),t>0&&this._blur(s,0,0,t),this._applyPMREM(s),this._cleanup(s),s}fromEquirectangular(A,t=null){return this._fromTexture(A,t)}fromCubemap(A,t=null){return this._fromTexture(A,t)}compileCubemapShader(){this._cubemapMaterial===null&&(this._cubemapMaterial=Sr(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){this._equirectMaterial===null&&(this._equirectMaterial=Rr(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),this._cubemapMaterial!==null&&this._cubemapMaterial.dispose(),this._equirectMaterial!==null&&this._equirectMaterial.dispose()}_setSize(A){this._lodMax=Math.floor(Math.log2(A)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){this._blurMaterial!==null&&this._blurMaterial.dispose(),this._pingPongRenderTarget!==null&&this._pingPongRenderTarget.dispose();for(let A=0;A2?d:0,d,d),I.setRenderTarget(i),l&&I.render(c,g),I.render(A,g)}c.geometry.dispose(),c.material.dispose(),I.toneMapping=C,I.autoClear=E,A.background=h}_textureToCubeUV(A,t){const e=this._renderer,i=A.mapping===Li||A.mapping===vi;i?(this._cubemapMaterial===null&&(this._cubemapMaterial=Sr()),this._cubemapMaterial.uniforms.flipEnvMap.value=A.isRenderTargetTexture===!1?-1:1):this._equirectMaterial===null&&(this._equirectMaterial=Rr());const s=i?this._cubemapMaterial:this._equirectMaterial,o=new St(this._lodPlanes[0],s),g=s.uniforms;g.envMap.value=A;const r=this._cubeSize;Hn(t,0,0,3*r,2*r),e.setRenderTarget(t),e.render(o,ho)}_applyPMREM(A){const t=this._renderer,e=t.autoClear;t.autoClear=!1;const i=this._lodPlanes.length;for(let s=1;sVe&&console.warn(`sigmaRadians, ${s}, is too large and will clip, as it requested ${h} samples when the maximum is set to ${Ve}`);const B=[];let p=0;for(let R=0;Rd-Si?i-d+Si:0),w=4*(this._cubeSize-f);Hn(t,_,w,3*f,2*f),r.setRenderTarget(t),r.render(E,ho)}}function xh(n){const A=[],t=[],e=[];let i=n;const s=n-Si+1+pr.length;for(let o=0;on-Si?r=pr[o-n+Si-1]:o===0&&(r=0),e.push(r);const a=1/(g-2),I=-a,E=1+a,C=[I,I,E,I,E,E,I,I,E,E,I,E],Q=6,c=6,l=3,h=2,B=1,p=new Float32Array(l*c*Q),d=new Float32Array(h*c*Q),f=new Float32Array(B*c*Q);for(let w=0;w2?0:-1,m=[R,F,0,R+2/3,F,0,R+2/3,F+1,0,R,F,0,R+2/3,F+1,0,R,F+1,0];p.set(m,l*c*w),d.set(C,h*c*w);const u=[w,w,w,w,w,w];f.set(u,B*c*w)}const _=new it;_.setAttribute("position",new vt(p,l)),_.setAttribute("uv",new vt(d,h)),_.setAttribute("faceIndex",new vt(f,B)),A.push(_),i>Si&&i--}return{lodPlanes:A,sizeLods:t,sigmas:e}}function wr(n,A,t){const e=new je(n,A,t);return e.texture.mapping=Rs,e.texture.name="PMREM.cubeUv",e.scissorTest=!0,e}function Hn(n,A,t,e,i){n.viewport.set(A,t,e,i),n.scissor.set(A,t,e,i)}function Fh(n,A,t){const e=new Float32Array(Ve),i=new M(0,1,0);return new ie({name:"SphericalGaussianBlur",defines:{n:Ve,CUBEUV_TEXEL_WIDTH:1/A,CUBEUV_TEXEL_HEIGHT:1/t,CUBEUV_MAX_MIP:`${n}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:e},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:i}},vertexShader:og(),fragmentShader:` + + precision mediump float; + precision mediump int; + + varying vec3 vOutputDirection; + + uniform sampler2D envMap; + uniform int samples; + uniform float weights[ n ]; + uniform bool latitudinal; + uniform float dTheta; + uniform float mipInt; + uniform vec3 poleAxis; + + #define ENVMAP_TYPE_CUBE_UV + #include + + vec3 getSample( float theta, vec3 axis ) { + + float cosTheta = cos( theta ); + // Rodrigues' axis-angle rotation + vec3 sampleDirection = vOutputDirection * cosTheta + + cross( axis, vOutputDirection ) * sin( theta ) + + axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta ); + + return bilinearCubeUV( envMap, sampleDirection, mipInt ); + + } + + void main() { + + vec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection ); + + if ( all( equal( axis, vec3( 0.0 ) ) ) ) { + + axis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x ); + + } + + axis = normalize( axis ); + + gl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 ); + gl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis ); + + for ( int i = 1; i < n; i++ ) { + + if ( i >= samples ) { + + break; + + } + + float theta = dTheta * float( i ); + gl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis ); + gl_FragColor.rgb += weights[ i ] * getSample( theta, axis ); + + } + + } + `,blending:ve,depthTest:!1,depthWrite:!1})}function Rr(){return new ie({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null}},vertexShader:og(),fragmentShader:` + + precision mediump float; + precision mediump int; + + varying vec3 vOutputDirection; + + uniform sampler2D envMap; + + #include + + void main() { + + vec3 outputDirection = normalize( vOutputDirection ); + vec2 uv = equirectUv( outputDirection ); + + gl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 ); + + } + `,blending:ve,depthTest:!1,depthWrite:!1})}function Sr(){return new ie({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:og(),fragmentShader:` + + precision mediump float; + precision mediump int; + + uniform float flipEnvMap; + + varying vec3 vOutputDirection; + + uniform samplerCube envMap; + + void main() { + + gl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) ); + + } + `,blending:ve,depthTest:!1,depthWrite:!1})}function og(){return` + + precision mediump float; + precision mediump int; + + attribute float faceIndex; + + varying vec3 vOutputDirection; + + // RH coordinate system; PMREM face-indexing convention + vec3 getDirection( vec2 uv, float face ) { + + uv = 2.0 * uv - 1.0; + + vec3 direction = vec3( uv, 1.0 ); + + if ( face == 0.0 ) { + + direction = direction.zyx; // ( 1, v, u ) pos x + + } else if ( face == 1.0 ) { + + direction = direction.xzy; + direction.xz *= -1.0; // ( -u, 1, -v ) pos y + + } else if ( face == 2.0 ) { + + direction.x *= -1.0; // ( -u, v, 1 ) pos z + + } else if ( face == 3.0 ) { + + direction = direction.zyx; + direction.xz *= -1.0; // ( -1, v, -u ) neg x + + } else if ( face == 4.0 ) { + + direction = direction.xzy; + direction.xy *= -1.0; // ( -u, -1, v ) neg y + + } else if ( face == 5.0 ) { + + direction.z *= -1.0; // ( u, v, -1 ) neg z + + } + + return direction; + + } + + void main() { + + vOutputDirection = getDirection( uv, faceIndex ); + gl_Position = vec4( position, 1.0 ); + + } + `}function _h(n){let A=new WeakMap,t=null;function e(g){if(g&&g.isTexture){const r=g.mapping,a=r===bo||r===Ho,I=r===Li||r===vi;if(a||I){let E=A.get(g);const C=E!==void 0?E.texture.pmremVersion:0;if(g.isRenderTargetTexture&&g.pmremVersion!==C)return t===null&&(t=new yr(n)),E=a?t.fromEquirectangular(g,E):t.fromCubemap(g,E),E.texture.pmremVersion=g.pmremVersion,A.set(g,E),E.texture;if(E!==void 0)return E.texture;{const Q=g.image;return a&&Q&&Q.height>0||I&&Q&&i(Q)?(t===null&&(t=new yr(n)),E=a?t.fromEquirectangular(g):t.fromCubemap(g),E.texture.pmremVersion=g.pmremVersion,A.set(g,E),g.addEventListener("dispose",s),E.texture):null}}}return g}function i(g){let r=0;const a=6;for(let I=0;IA.maxTextureSize&&(_=Math.ceil(f/A.maxTextureSize),f=A.maxTextureSize);const w=new Float32Array(f*_*4*E),R=new qa(w,f,_,E);R.type=ee,R.needsUpdate=!0;const F=d*4;for(let u=0;u0)return n;const i=A*t;let s=Mr[i];if(s===void 0&&(s=new Float32Array(i),Mr[i]=s),A!==0){e.toArray(s,0);for(let o=1,g=0;o!==A;++o)g+=t,n[o].toArray(s,g)}return s}function dt(n,A){if(n.length!==A.length)return!1;for(let t=0,e=n.length;t":" "} ${g}: ${t[o]}`)}return e.join(` +`)}function _c(n){const A=At.getPrimaries(At.workingColorSpace),t=At.getPrimaries(n);let e;switch(A===t?e="":A===hs&&t===Bs?e="LinearDisplayP3ToLinearSRGB":A===Bs&&t===hs&&(e="LinearSRGBToLinearDisplayP3"),n){case ke:case Ms:return[e,"LinearTransferOETF"];case Pt:case Ag:return[e,"sRGBTransferOETF"];default:return console.warn("THREE.WebGLProgram: Unsupported color space:",n),[e,"LinearTransferOETF"]}}function Ur(n,A,t){const e=n.getShaderParameter(A,n.COMPILE_STATUS),i=n.getShaderInfoLog(A).trim();if(e&&i==="")return"";const s=/ERROR: 0:(\d+)/.exec(i);if(s){const o=parseInt(s[1]);return t.toUpperCase()+` + +`+i+` + +`+Fc(n.getShaderSource(A),o)}else return i}function Lc(n,A){const t=_c(A);return`vec4 ${n}( vec4 value ) { return ${t[0]}( ${t[1]}( value ) ); }`}function vc(n,A){let t;switch(A){case yE:t="Linear";break;case wE:t="Reinhard";break;case RE:t="OptimizedCineon";break;case SE:t="ACESFilmic";break;case NE:t="AgX";break;case xE:t="Neutral";break;case ME:t="Custom";break;default:console.warn("THREE.WebGLProgram: Unsupported toneMapping:",A),t="Linear"}return"vec3 "+n+"( vec3 color ) { return "+t+"ToneMapping( color ); }"}function Uc(n){return[n.extensionClipCullDistance?"#extension GL_ANGLE_clip_cull_distance : require":"",n.extensionMultiDraw?"#extension GL_ANGLE_multi_draw : require":""].filter(nn).join(` +`)}function Gc(n){const A=[];for(const t in n){const e=n[t];e!==!1&&A.push("#define "+t+" "+e)}return A.join(` +`)}function Tc(n,A){const t={},e=n.getProgramParameter(A,n.ACTIVE_ATTRIBUTES);for(let i=0;i/gm;function Yo(n){return n.replace(kc,Hc)}const bc=new Map;function Hc(n,A){let t=qA[A];if(t===void 0){const e=bc.get(A);if(e!==void 0)t=qA[e],console.warn('THREE.WebGLRenderer: Shader chunk "%s" has been deprecated. Use "%s" instead.',A,e);else throw new Error("Can not resolve #include <"+A+">")}return Yo(t)}const Pc=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function kr(n){return n.replace(Pc,Oc)}function Oc(n,A,t,e){let i="";for(let s=parseInt(A);s0&&(h+=` +`),B=["#define SHADER_TYPE "+t.shaderType,"#define SHADER_NAME "+t.shaderName,c].filter(nn).join(` +`),B.length>0&&(B+=` +`)):(h=[br(t),"#define SHADER_TYPE "+t.shaderType,"#define SHADER_NAME "+t.shaderName,c,t.extensionClipCullDistance?"#define USE_CLIP_DISTANCE":"",t.batching?"#define USE_BATCHING":"",t.batchingColor?"#define USE_BATCHING_COLOR":"",t.instancing?"#define USE_INSTANCING":"",t.instancingColor?"#define USE_INSTANCING_COLOR":"",t.instancingMorph?"#define USE_INSTANCING_MORPH":"",t.useFog&&t.fog?"#define USE_FOG":"",t.useFog&&t.fogExp2?"#define FOG_EXP2":"",t.map?"#define USE_MAP":"",t.envMap?"#define USE_ENVMAP":"",t.envMap?"#define "+I:"",t.lightMap?"#define USE_LIGHTMAP":"",t.aoMap?"#define USE_AOMAP":"",t.bumpMap?"#define USE_BUMPMAP":"",t.normalMap?"#define USE_NORMALMAP":"",t.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",t.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",t.displacementMap?"#define USE_DISPLACEMENTMAP":"",t.emissiveMap?"#define USE_EMISSIVEMAP":"",t.anisotropy?"#define USE_ANISOTROPY":"",t.anisotropyMap?"#define USE_ANISOTROPYMAP":"",t.clearcoatMap?"#define USE_CLEARCOATMAP":"",t.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",t.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",t.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",t.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",t.specularMap?"#define USE_SPECULARMAP":"",t.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",t.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",t.roughnessMap?"#define USE_ROUGHNESSMAP":"",t.metalnessMap?"#define USE_METALNESSMAP":"",t.alphaMap?"#define USE_ALPHAMAP":"",t.alphaHash?"#define USE_ALPHAHASH":"",t.transmission?"#define USE_TRANSMISSION":"",t.transmissionMap?"#define USE_TRANSMISSIONMAP":"",t.thicknessMap?"#define USE_THICKNESSMAP":"",t.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",t.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",t.mapUv?"#define MAP_UV "+t.mapUv:"",t.alphaMapUv?"#define ALPHAMAP_UV "+t.alphaMapUv:"",t.lightMapUv?"#define LIGHTMAP_UV "+t.lightMapUv:"",t.aoMapUv?"#define AOMAP_UV "+t.aoMapUv:"",t.emissiveMapUv?"#define EMISSIVEMAP_UV "+t.emissiveMapUv:"",t.bumpMapUv?"#define BUMPMAP_UV "+t.bumpMapUv:"",t.normalMapUv?"#define NORMALMAP_UV "+t.normalMapUv:"",t.displacementMapUv?"#define DISPLACEMENTMAP_UV "+t.displacementMapUv:"",t.metalnessMapUv?"#define METALNESSMAP_UV "+t.metalnessMapUv:"",t.roughnessMapUv?"#define ROUGHNESSMAP_UV "+t.roughnessMapUv:"",t.anisotropyMapUv?"#define ANISOTROPYMAP_UV "+t.anisotropyMapUv:"",t.clearcoatMapUv?"#define CLEARCOATMAP_UV "+t.clearcoatMapUv:"",t.clearcoatNormalMapUv?"#define CLEARCOAT_NORMALMAP_UV "+t.clearcoatNormalMapUv:"",t.clearcoatRoughnessMapUv?"#define CLEARCOAT_ROUGHNESSMAP_UV "+t.clearcoatRoughnessMapUv:"",t.iridescenceMapUv?"#define IRIDESCENCEMAP_UV "+t.iridescenceMapUv:"",t.iridescenceThicknessMapUv?"#define IRIDESCENCE_THICKNESSMAP_UV "+t.iridescenceThicknessMapUv:"",t.sheenColorMapUv?"#define SHEEN_COLORMAP_UV "+t.sheenColorMapUv:"",t.sheenRoughnessMapUv?"#define SHEEN_ROUGHNESSMAP_UV "+t.sheenRoughnessMapUv:"",t.specularMapUv?"#define SPECULARMAP_UV "+t.specularMapUv:"",t.specularColorMapUv?"#define SPECULAR_COLORMAP_UV "+t.specularColorMapUv:"",t.specularIntensityMapUv?"#define SPECULAR_INTENSITYMAP_UV "+t.specularIntensityMapUv:"",t.transmissionMapUv?"#define TRANSMISSIONMAP_UV "+t.transmissionMapUv:"",t.thicknessMapUv?"#define THICKNESSMAP_UV "+t.thicknessMapUv:"",t.vertexTangents&&t.flatShading===!1?"#define USE_TANGENT":"",t.vertexColors?"#define USE_COLOR":"",t.vertexAlphas?"#define USE_COLOR_ALPHA":"",t.vertexUv1s?"#define USE_UV1":"",t.vertexUv2s?"#define USE_UV2":"",t.vertexUv3s?"#define USE_UV3":"",t.pointsUvs?"#define USE_POINTS_UV":"",t.flatShading?"#define FLAT_SHADED":"",t.skinning?"#define USE_SKINNING":"",t.morphTargets?"#define USE_MORPHTARGETS":"",t.morphNormals&&t.flatShading===!1?"#define USE_MORPHNORMALS":"",t.morphColors?"#define USE_MORPHCOLORS":"",t.morphTargetsCount>0?"#define MORPHTARGETS_TEXTURE_STRIDE "+t.morphTextureStride:"",t.morphTargetsCount>0?"#define MORPHTARGETS_COUNT "+t.morphTargetsCount:"",t.doubleSided?"#define DOUBLE_SIDED":"",t.flipSided?"#define FLIP_SIDED":"",t.shadowMapEnabled?"#define USE_SHADOWMAP":"",t.shadowMapEnabled?"#define "+r:"",t.sizeAttenuation?"#define USE_SIZEATTENUATION":"",t.numLightProbes>0?"#define USE_LIGHT_PROBES":"",t.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING"," attribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR"," attribute vec3 instanceColor;","#endif","#ifdef USE_INSTANCING_MORPH"," uniform sampler2D morphTexture;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_UV1"," attribute vec2 uv1;","#endif","#ifdef USE_UV2"," attribute vec2 uv2;","#endif","#ifdef USE_UV3"," attribute vec2 uv3;","#endif","#ifdef USE_TANGENT"," attribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )"," attribute vec4 color;","#elif defined( USE_COLOR )"," attribute vec3 color;","#endif","#ifdef USE_SKINNING"," attribute vec4 skinIndex;"," attribute vec4 skinWeight;","#endif",` +`].filter(nn).join(` +`),B=[br(t),"#define SHADER_TYPE "+t.shaderType,"#define SHADER_NAME "+t.shaderName,c,t.useFog&&t.fog?"#define USE_FOG":"",t.useFog&&t.fogExp2?"#define FOG_EXP2":"",t.alphaToCoverage?"#define ALPHA_TO_COVERAGE":"",t.map?"#define USE_MAP":"",t.matcap?"#define USE_MATCAP":"",t.envMap?"#define USE_ENVMAP":"",t.envMap?"#define "+a:"",t.envMap?"#define "+I:"",t.envMap?"#define "+E:"",C?"#define CUBEUV_TEXEL_WIDTH "+C.texelWidth:"",C?"#define CUBEUV_TEXEL_HEIGHT "+C.texelHeight:"",C?"#define CUBEUV_MAX_MIP "+C.maxMip+".0":"",t.lightMap?"#define USE_LIGHTMAP":"",t.aoMap?"#define USE_AOMAP":"",t.bumpMap?"#define USE_BUMPMAP":"",t.normalMap?"#define USE_NORMALMAP":"",t.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",t.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",t.emissiveMap?"#define USE_EMISSIVEMAP":"",t.anisotropy?"#define USE_ANISOTROPY":"",t.anisotropyMap?"#define USE_ANISOTROPYMAP":"",t.clearcoat?"#define USE_CLEARCOAT":"",t.clearcoatMap?"#define USE_CLEARCOATMAP":"",t.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",t.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",t.dispersion?"#define USE_DISPERSION":"",t.iridescence?"#define USE_IRIDESCENCE":"",t.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",t.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",t.specularMap?"#define USE_SPECULARMAP":"",t.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",t.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",t.roughnessMap?"#define USE_ROUGHNESSMAP":"",t.metalnessMap?"#define USE_METALNESSMAP":"",t.alphaMap?"#define USE_ALPHAMAP":"",t.alphaTest?"#define USE_ALPHATEST":"",t.alphaHash?"#define USE_ALPHAHASH":"",t.sheen?"#define USE_SHEEN":"",t.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",t.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",t.transmission?"#define USE_TRANSMISSION":"",t.transmissionMap?"#define USE_TRANSMISSIONMAP":"",t.thicknessMap?"#define USE_THICKNESSMAP":"",t.vertexTangents&&t.flatShading===!1?"#define USE_TANGENT":"",t.vertexColors||t.instancingColor||t.batchingColor?"#define USE_COLOR":"",t.vertexAlphas?"#define USE_COLOR_ALPHA":"",t.vertexUv1s?"#define USE_UV1":"",t.vertexUv2s?"#define USE_UV2":"",t.vertexUv3s?"#define USE_UV3":"",t.pointsUvs?"#define USE_POINTS_UV":"",t.gradientMap?"#define USE_GRADIENTMAP":"",t.flatShading?"#define FLAT_SHADED":"",t.doubleSided?"#define DOUBLE_SIDED":"",t.flipSided?"#define FLIP_SIDED":"",t.shadowMapEnabled?"#define USE_SHADOWMAP":"",t.shadowMapEnabled?"#define "+r:"",t.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",t.numLightProbes>0?"#define USE_LIGHT_PROBES":"",t.decodeVideoTexture?"#define DECODE_VIDEO_TEXTURE":"",t.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",t.toneMapping!==Ue?"#define TONE_MAPPING":"",t.toneMapping!==Ue?qA.tonemapping_pars_fragment:"",t.toneMapping!==Ue?vc("toneMapping",t.toneMapping):"",t.dithering?"#define DITHERING":"",t.opaque?"#define OPAQUE":"",qA.colorspace_pars_fragment,Lc("linearToOutputTexel",t.outputColorSpace),t.useDepthPacking?"#define DEPTH_PACKING "+t.depthPacking:"",` +`].filter(nn).join(` +`)),o=Yo(o),o=Gr(o,t),o=Tr(o,t),g=Yo(g),g=Gr(g,t),g=Tr(g,t),o=kr(o),g=kr(g),t.isRawShaderMaterial!==!0&&(p=`#version 300 es +`,h=[Q,"#define attribute in","#define varying out","#define texture2D texture"].join(` +`)+` +`+h,B=["#define varying in",t.glslVersion===Ar?"":"layout(location = 0) out highp vec4 pc_fragColor;",t.glslVersion===Ar?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join(` +`)+` +`+B);const d=p+h+o,f=p+B+g,_=vr(i,i.VERTEX_SHADER,d),w=vr(i,i.FRAGMENT_SHADER,f);i.attachShader(l,_),i.attachShader(l,w),t.index0AttributeName!==void 0?i.bindAttribLocation(l,0,t.index0AttributeName):t.morphTargets===!0&&i.bindAttribLocation(l,0,"position"),i.linkProgram(l);function R(L){if(n.debug.checkShaderErrors){const k=i.getProgramInfoLog(l).trim(),T=i.getShaderInfoLog(_).trim(),P=i.getShaderInfoLog(w).trim();let V=!0,O=!0;if(i.getProgramParameter(l,i.LINK_STATUS)===!1)if(V=!1,typeof n.debug.onShaderError=="function")n.debug.onShaderError(i,l,_,w);else{const oA=Ur(i,_,"vertex"),z=Ur(i,w,"fragment");console.error("THREE.WebGLProgram: Shader Error "+i.getError()+" - VALIDATE_STATUS "+i.getProgramParameter(l,i.VALIDATE_STATUS)+` + +Material Name: `+L.name+` +Material Type: `+L.type+` + +Program Info Log: `+k+` +`+oA+` +`+z)}else k!==""?console.warn("THREE.WebGLProgram: Program Info Log:",k):(T===""||P==="")&&(O=!1);O&&(L.diagnostics={runnable:V,programLog:k,vertexShader:{log:T,prefix:h},fragmentShader:{log:P,prefix:B}})}i.deleteShader(_),i.deleteShader(w),F=new gs(i,l),m=Tc(i,l)}let F;this.getUniforms=function(){return F===void 0&&R(this),F};let m;this.getAttributes=function(){return m===void 0&&R(this),m};let u=t.rendererExtensionParallelShaderCompile===!1;return this.isReady=function(){return u===!1&&(u=i.getProgramParameter(l,Nc)),u},this.destroy=function(){e.releaseStatesOfProgram(this),i.deleteProgram(l),this.program=void 0},this.type=t.shaderType,this.name=t.shaderName,this.id=xc++,this.cacheKey=A,this.usedTimes=1,this.program=l,this.vertexShader=_,this.fragmentShader=w,this}let zc=0;class Xc{constructor(){this.shaderCache=new Map,this.materialCache=new Map}update(A){const t=A.vertexShader,e=A.fragmentShader,i=this._getShaderStage(t),s=this._getShaderStage(e),o=this._getShaderCacheForMaterial(A);return o.has(i)===!1&&(o.add(i),i.usedTimes++),o.has(s)===!1&&(o.add(s),s.usedTimes++),this}remove(A){const t=this.materialCache.get(A);for(const e of t)e.usedTimes--,e.usedTimes===0&&this.shaderCache.delete(e.code);return this.materialCache.delete(A),this}getVertexShaderID(A){return this._getShaderStage(A.vertexShader).id}getFragmentShaderID(A){return this._getShaderStage(A.fragmentShader).id}dispose(){this.shaderCache.clear(),this.materialCache.clear()}_getShaderCacheForMaterial(A){const t=this.materialCache;let e=t.get(A);return e===void 0&&(e=new Set,t.set(A,e)),e}_getShaderStage(A){const t=this.shaderCache;let e=t.get(A);return e===void 0&&(e=new Zc(A),t.set(A,e)),e}}class Zc{constructor(A){this.id=zc++,this.code=A,this.usedTimes=0}}function jc(n,A,t,e,i,s,o){const g=new ig,r=new Xc,a=new Set,I=[],E=i.logarithmicDepthBuffer,C=i.vertexTextures;let Q=i.precision;const c={MeshDepthMaterial:"depth",MeshDistanceMaterial:"distanceRGBA",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",MeshToonMaterial:"toon",MeshStandardMaterial:"physical",MeshPhysicalMaterial:"physical",MeshMatcapMaterial:"matcap",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointsMaterial:"points",ShadowMaterial:"shadow",SpriteMaterial:"sprite"};function l(m){return a.add(m),m===0?"uv":`uv${m}`}function h(m,u,L,k,T){const P=k.fog,V=T.geometry,O=m.isMeshStandardMaterial?k.environment:null,oA=(m.isMeshStandardMaterial?t:A).get(m.envMap||O),z=oA&&oA.mapping===Rs?oA.image.height:null,BA=c[m.type];m.precision!==null&&(Q=i.getMaxPrecision(m.precision),Q!==m.precision&&console.warn("THREE.WebGLProgram.getParameters:",m.precision,"not supported, using",Q,"instead."));const dA=V.morphAttributes.position||V.morphAttributes.normal||V.morphAttributes.color,uA=dA!==void 0?dA.length:0;let HA=0;V.morphAttributes.position!==void 0&&(HA=1),V.morphAttributes.normal!==void 0&&(HA=2),V.morphAttributes.color!==void 0&&(HA=3);let WA,Z,nA,mA;if(BA){const VA=te[BA];WA=VA.vertexShader,Z=VA.fragmentShader}else WA=m.vertexShader,Z=m.fragmentShader,r.update(m),nA=r.getVertexShaderID(m),mA=r.getFragmentShaderID(m);const CA=n.getRenderTarget(),_A=T.isInstancedMesh===!0,GA=T.isBatchedMesh===!0,UA=!!m.map,v=!!m.matcap,j=!!oA,iA=!!m.aoMap,IA=!!m.lightMap,rA=!!m.bumpMap,aA=!!m.normalMap,fA=!!m.displacementMap,pA=!!m.emissiveMap,TA=!!m.metalnessMap,N=!!m.roughnessMap,D=m.anisotropy>0,q=m.clearcoat>0,eA=m.dispersion>0,tA=m.iridescence>0,gA=m.sheen>0,MA=m.transmission>0,hA=D&&!!m.anisotropyMap,cA=q&&!!m.clearcoatMap,kA=q&&!!m.clearcoatNormalMap,EA=q&&!!m.clearcoatRoughnessMap,wA=tA&&!!m.iridescenceMap,JA=tA&&!!m.iridescenceThicknessMap,LA=gA&&!!m.sheenColorMap,U=gA&&!!m.sheenRoughnessMap,W=!!m.specularMap,DA=!!m.specularColorMap,x=!!m.specularIntensityMap,S=MA&&!!m.transmissionMap,$=MA&&!!m.thicknessMap,b=!!m.gradientMap,X=!!m.alphaMap,sA=m.alphaTest>0,SA=!!m.alphaHash,zA=!!m.extensions;let gt=Ue;m.toneMapped&&(CA===null||CA.isXRRenderTarget===!0)&&(gt=n.toneMapping);const tt={shaderID:BA,shaderType:m.type,shaderName:m.name,vertexShader:WA,fragmentShader:Z,defines:m.defines,customVertexShaderID:nA,customFragmentShaderID:mA,isRawShaderMaterial:m.isRawShaderMaterial===!0,glslVersion:m.glslVersion,precision:Q,batching:GA,batchingColor:GA&&T._colorsTexture!==null,instancing:_A,instancingColor:_A&&T.instanceColor!==null,instancingMorph:_A&&T.morphTexture!==null,supportsVertexTextures:C,outputColorSpace:CA===null?n.outputColorSpace:CA.isXRRenderTarget===!0?CA.texture.colorSpace:ke,alphaToCoverage:!!m.alphaToCoverage,map:UA,matcap:v,envMap:j,envMapMode:j&&oA.mapping,envMapCubeUVHeight:z,aoMap:iA,lightMap:IA,bumpMap:rA,normalMap:aA,displacementMap:C&&fA,emissiveMap:pA,normalMapObjectSpace:aA&&m.normalMapType===VE,normalMapTangentSpace:aA&&m.normalMapType===Bn,metalnessMap:TA,roughnessMap:N,anisotropy:D,anisotropyMap:hA,clearcoat:q,clearcoatMap:cA,clearcoatNormalMap:kA,clearcoatRoughnessMap:EA,dispersion:eA,iridescence:tA,iridescenceMap:wA,iridescenceThicknessMap:JA,sheen:gA,sheenColorMap:LA,sheenRoughnessMap:U,specularMap:W,specularColorMap:DA,specularIntensityMap:x,transmission:MA,transmissionMap:S,thicknessMap:$,gradientMap:b,opaque:m.transparent===!1&&m.blending===Ni&&m.alphaToCoverage===!1,alphaMap:X,alphaTest:sA,alphaHash:SA,combine:m.combine,mapUv:UA&&l(m.map.channel),aoMapUv:iA&&l(m.aoMap.channel),lightMapUv:IA&&l(m.lightMap.channel),bumpMapUv:rA&&l(m.bumpMap.channel),normalMapUv:aA&&l(m.normalMap.channel),displacementMapUv:fA&&l(m.displacementMap.channel),emissiveMapUv:pA&&l(m.emissiveMap.channel),metalnessMapUv:TA&&l(m.metalnessMap.channel),roughnessMapUv:N&&l(m.roughnessMap.channel),anisotropyMapUv:hA&&l(m.anisotropyMap.channel),clearcoatMapUv:cA&&l(m.clearcoatMap.channel),clearcoatNormalMapUv:kA&&l(m.clearcoatNormalMap.channel),clearcoatRoughnessMapUv:EA&&l(m.clearcoatRoughnessMap.channel),iridescenceMapUv:wA&&l(m.iridescenceMap.channel),iridescenceThicknessMapUv:JA&&l(m.iridescenceThicknessMap.channel),sheenColorMapUv:LA&&l(m.sheenColorMap.channel),sheenRoughnessMapUv:U&&l(m.sheenRoughnessMap.channel),specularMapUv:W&&l(m.specularMap.channel),specularColorMapUv:DA&&l(m.specularColorMap.channel),specularIntensityMapUv:x&&l(m.specularIntensityMap.channel),transmissionMapUv:S&&l(m.transmissionMap.channel),thicknessMapUv:$&&l(m.thicknessMap.channel),alphaMapUv:X&&l(m.alphaMap.channel),vertexTangents:!!V.attributes.tangent&&(aA||D),vertexColors:m.vertexColors,vertexAlphas:m.vertexColors===!0&&!!V.attributes.color&&V.attributes.color.itemSize===4,pointsUvs:T.isPoints===!0&&!!V.attributes.uv&&(UA||X),fog:!!P,useFog:m.fog===!0,fogExp2:!!P&&P.isFogExp2,flatShading:m.flatShading===!0,sizeAttenuation:m.sizeAttenuation===!0,logarithmicDepthBuffer:E,skinning:T.isSkinnedMesh===!0,morphTargets:V.morphAttributes.position!==void 0,morphNormals:V.morphAttributes.normal!==void 0,morphColors:V.morphAttributes.color!==void 0,morphTargetsCount:uA,morphTextureStride:HA,numDirLights:u.directional.length,numPointLights:u.point.length,numSpotLights:u.spot.length,numSpotLightMaps:u.spotLightMap.length,numRectAreaLights:u.rectArea.length,numHemiLights:u.hemi.length,numDirLightShadows:u.directionalShadowMap.length,numPointLightShadows:u.pointShadowMap.length,numSpotLightShadows:u.spotShadowMap.length,numSpotLightShadowsWithMaps:u.numSpotLightShadowsWithMaps,numLightProbes:u.numLightProbes,numClippingPlanes:o.numPlanes,numClipIntersection:o.numIntersection,dithering:m.dithering,shadowMapEnabled:n.shadowMap.enabled&&L.length>0,shadowMapType:n.shadowMap.type,toneMapping:gt,decodeVideoTexture:UA&&m.map.isVideoTexture===!0&&At.getTransfer(m.map.colorSpace)===ot,premultipliedAlpha:m.premultipliedAlpha,doubleSided:m.side===ce,flipSided:m.side===Lt,useDepthPacking:m.depthPacking>=0,depthPacking:m.depthPacking||0,index0AttributeName:m.index0AttributeName,extensionClipCullDistance:zA&&m.extensions.clipCullDistance===!0&&e.has("WEBGL_clip_cull_distance"),extensionMultiDraw:zA&&m.extensions.multiDraw===!0&&e.has("WEBGL_multi_draw"),rendererExtensionParallelShaderCompile:e.has("KHR_parallel_shader_compile"),customProgramCacheKey:m.customProgramCacheKey()};return tt.vertexUv1s=a.has(1),tt.vertexUv2s=a.has(2),tt.vertexUv3s=a.has(3),a.clear(),tt}function B(m){const u=[];if(m.shaderID?u.push(m.shaderID):(u.push(m.customVertexShaderID),u.push(m.customFragmentShaderID)),m.defines!==void 0)for(const L in m.defines)u.push(L),u.push(m.defines[L]);return m.isRawShaderMaterial===!1&&(p(u,m),d(u,m),u.push(n.outputColorSpace)),u.push(m.customProgramCacheKey),u.join()}function p(m,u){m.push(u.precision),m.push(u.outputColorSpace),m.push(u.envMapMode),m.push(u.envMapCubeUVHeight),m.push(u.mapUv),m.push(u.alphaMapUv),m.push(u.lightMapUv),m.push(u.aoMapUv),m.push(u.bumpMapUv),m.push(u.normalMapUv),m.push(u.displacementMapUv),m.push(u.emissiveMapUv),m.push(u.metalnessMapUv),m.push(u.roughnessMapUv),m.push(u.anisotropyMapUv),m.push(u.clearcoatMapUv),m.push(u.clearcoatNormalMapUv),m.push(u.clearcoatRoughnessMapUv),m.push(u.iridescenceMapUv),m.push(u.iridescenceThicknessMapUv),m.push(u.sheenColorMapUv),m.push(u.sheenRoughnessMapUv),m.push(u.specularMapUv),m.push(u.specularColorMapUv),m.push(u.specularIntensityMapUv),m.push(u.transmissionMapUv),m.push(u.thicknessMapUv),m.push(u.combine),m.push(u.fogExp2),m.push(u.sizeAttenuation),m.push(u.morphTargetsCount),m.push(u.morphAttributeCount),m.push(u.numDirLights),m.push(u.numPointLights),m.push(u.numSpotLights),m.push(u.numSpotLightMaps),m.push(u.numHemiLights),m.push(u.numRectAreaLights),m.push(u.numDirLightShadows),m.push(u.numPointLightShadows),m.push(u.numSpotLightShadows),m.push(u.numSpotLightShadowsWithMaps),m.push(u.numLightProbes),m.push(u.shadowMapType),m.push(u.toneMapping),m.push(u.numClippingPlanes),m.push(u.numClipIntersection),m.push(u.depthPacking)}function d(m,u){g.disableAll(),u.supportsVertexTextures&&g.enable(0),u.instancing&&g.enable(1),u.instancingColor&&g.enable(2),u.instancingMorph&&g.enable(3),u.matcap&&g.enable(4),u.envMap&&g.enable(5),u.normalMapObjectSpace&&g.enable(6),u.normalMapTangentSpace&&g.enable(7),u.clearcoat&&g.enable(8),u.iridescence&&g.enable(9),u.alphaTest&&g.enable(10),u.vertexColors&&g.enable(11),u.vertexAlphas&&g.enable(12),u.vertexUv1s&&g.enable(13),u.vertexUv2s&&g.enable(14),u.vertexUv3s&&g.enable(15),u.vertexTangents&&g.enable(16),u.anisotropy&&g.enable(17),u.alphaHash&&g.enable(18),u.batching&&g.enable(19),u.dispersion&&g.enable(20),u.batchingColor&&g.enable(21),m.push(g.mask),g.disableAll(),u.fog&&g.enable(0),u.useFog&&g.enable(1),u.flatShading&&g.enable(2),u.logarithmicDepthBuffer&&g.enable(3),u.skinning&&g.enable(4),u.morphTargets&&g.enable(5),u.morphNormals&&g.enable(6),u.morphColors&&g.enable(7),u.premultipliedAlpha&&g.enable(8),u.shadowMapEnabled&&g.enable(9),u.doubleSided&&g.enable(10),u.flipSided&&g.enable(11),u.useDepthPacking&&g.enable(12),u.dithering&&g.enable(13),u.transmission&&g.enable(14),u.sheen&&g.enable(15),u.opaque&&g.enable(16),u.pointsUvs&&g.enable(17),u.decodeVideoTexture&&g.enable(18),u.alphaToCoverage&&g.enable(19),m.push(g.mask)}function f(m){const u=c[m.type];let L;if(u){const k=te[u];L=za.clone(k.uniforms)}else L=m.uniforms;return L}function _(m,u){let L;for(let k=0,T=I.length;k0?e.push(B):Q.transparent===!0?i.push(B):t.push(B)}function r(E,C,Q,c,l,h){const B=o(E,C,Q,c,l,h);Q.transmission>0?e.unshift(B):Q.transparent===!0?i.unshift(B):t.unshift(B)}function a(E,C){t.length>1&&t.sort(E||Al),e.length>1&&e.sort(C||Hr),i.length>1&&i.sort(C||Hr)}function I(){for(let E=A,C=n.length;E=s.length?(o=new Pr,s.push(o)):o=s[i],o}function t(){n=new WeakMap}return{get:A,dispose:t}}function el(){const n={};return{get:function(A){if(n[A.id]!==void 0)return n[A.id];let t;switch(A.type){case"DirectionalLight":t={direction:new M,color:new FA};break;case"SpotLight":t={position:new M,direction:new M,color:new FA,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":t={position:new M,color:new FA,distance:0,decay:0};break;case"HemisphereLight":t={direction:new M,skyColor:new FA,groundColor:new FA};break;case"RectAreaLight":t={color:new FA,position:new M,halfWidth:new M,halfHeight:new M};break}return n[A.id]=t,t}}}function il(){const n={};return{get:function(A){if(n[A.id]!==void 0)return n[A.id];let t;switch(A.type){case"DirectionalLight":t={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new AA};break;case"SpotLight":t={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new AA};break;case"PointLight":t={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new AA,shadowCameraNear:1,shadowCameraFar:1e3};break}return n[A.id]=t,t}}}let nl=0;function sl(n,A){return(A.castShadow?2:0)-(n.castShadow?2:0)+(A.map?1:0)-(n.map?1:0)}function ol(n){const A=new el,t=il(),e={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1,numLightProbes:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotLightMap:[],spotShadow:[],spotShadowMap:[],spotLightMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],numSpotLightShadowsWithMaps:0,numLightProbes:0};for(let a=0;a<9;a++)e.probe.push(new M);const i=new M,s=new KA,o=new KA;function g(a){let I=0,E=0,C=0;for(let m=0;m<9;m++)e.probe[m].set(0,0,0);let Q=0,c=0,l=0,h=0,B=0,p=0,d=0,f=0,_=0,w=0,R=0;a.sort(sl);for(let m=0,u=a.length;m0&&(n.has("OES_texture_float_linear")===!0?(e.rectAreaLTC1=lA.LTC_FLOAT_1,e.rectAreaLTC2=lA.LTC_FLOAT_2):(e.rectAreaLTC1=lA.LTC_HALF_1,e.rectAreaLTC2=lA.LTC_HALF_2)),e.ambient[0]=I,e.ambient[1]=E,e.ambient[2]=C;const F=e.hash;(F.directionalLength!==Q||F.pointLength!==c||F.spotLength!==l||F.rectAreaLength!==h||F.hemiLength!==B||F.numDirectionalShadows!==p||F.numPointShadows!==d||F.numSpotShadows!==f||F.numSpotMaps!==_||F.numLightProbes!==R)&&(e.directional.length=Q,e.spot.length=l,e.rectArea.length=h,e.point.length=c,e.hemi.length=B,e.directionalShadow.length=p,e.directionalShadowMap.length=p,e.pointShadow.length=d,e.pointShadowMap.length=d,e.spotShadow.length=f,e.spotShadowMap.length=f,e.directionalShadowMatrix.length=p,e.pointShadowMatrix.length=d,e.spotLightMatrix.length=f+_-w,e.spotLightMap.length=_,e.numSpotLightShadowsWithMaps=w,e.numLightProbes=R,F.directionalLength=Q,F.pointLength=c,F.spotLength=l,F.rectAreaLength=h,F.hemiLength=B,F.numDirectionalShadows=p,F.numPointShadows=d,F.numSpotShadows=f,F.numSpotMaps=_,F.numLightProbes=R,e.version=nl++)}function r(a,I){let E=0,C=0,Q=0,c=0,l=0;const h=I.matrixWorldInverse;for(let B=0,p=a.length;B=o.length?(g=new Or(n),o.push(g)):g=o[s],g}function e(){A=new WeakMap}return{get:t,dispose:e}}class rl extends $t{constructor(A){super(),this.isMeshDepthMaterial=!0,this.type="MeshDepthMaterial",this.depthPacking=KE,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(A)}copy(A){return super.copy(A),this.depthPacking=A.depthPacking,this.map=A.map,this.alphaMap=A.alphaMap,this.displacementMap=A.displacementMap,this.displacementScale=A.displacementScale,this.displacementBias=A.displacementBias,this.wireframe=A.wireframe,this.wireframeLinewidth=A.wireframeLinewidth,this}}class al extends $t{constructor(A){super(),this.isMeshDistanceMaterial=!0,this.type="MeshDistanceMaterial",this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(A)}copy(A){return super.copy(A),this.map=A.map,this.alphaMap=A.alphaMap,this.displacementMap=A.displacementMap,this.displacementScale=A.displacementScale,this.displacementBias=A.displacementBias,this}}const Il=`void main() { + gl_Position = vec4( position, 1.0 ); +}`,El=`uniform sampler2D shadow_pass; +uniform vec2 resolution; +uniform float radius; +#include +void main() { + const float samples = float( VSM_SAMPLES ); + float mean = 0.0; + float squared_mean = 0.0; + float uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 ); + float uvStart = samples <= 1.0 ? 0.0 : - 1.0; + for ( float i = 0.0; i < samples; i ++ ) { + float uvOffset = uvStart + i * uvStride; + #ifdef HORIZONTAL_PASS + vec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) ); + mean += distribution.x; + squared_mean += distribution.y * distribution.y + distribution.x * distribution.x; + #else + float depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) ); + mean += depth; + squared_mean += depth * depth; + #endif + } + mean = mean / samples; + squared_mean = squared_mean / samples; + float std_dev = sqrt( squared_mean - mean * mean ); + gl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) ); +}`;function Cl(n,A,t){let e=new Ns;const i=new AA,s=new AA,o=new nt,g=new rl({depthPacking:WE}),r=new al,a={},I=t.maxTextureSize,E={[de]:Lt,[Lt]:de,[ce]:ce},C=new ie({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new AA},radius:{value:4}},vertexShader:Il,fragmentShader:El}),Q=C.clone();Q.defines.HORIZONTAL_PASS=1;const c=new it;c.setAttribute("position",new vt(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const l=new St(c,C),h=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=_a;let B=this.type;this.render=function(w,R,F){if(h.enabled===!1||h.autoUpdate===!1&&h.needsUpdate===!1||w.length===0)return;const m=n.getRenderTarget(),u=n.getActiveCubeFace(),L=n.getActiveMipmapLevel(),k=n.state;k.setBlending(ve),k.buffers.color.setClear(1,1,1,1),k.buffers.depth.setTest(!0),k.setScissorTest(!1);const T=B!==Be&&this.type===Be,P=B===Be&&this.type!==Be;for(let V=0,O=w.length;VI||i.y>I)&&(i.x>I&&(s.x=Math.floor(I/BA.x),i.x=s.x*BA.x,z.mapSize.x=s.x),i.y>I&&(s.y=Math.floor(I/BA.y),i.y=s.y*BA.y,z.mapSize.y=s.y)),z.map===null||T===!0||P===!0){const uA=this.type!==Be?{minFilter:Rt,magFilter:Rt}:{};z.map!==null&&z.map.dispose(),z.map=new je(i.x,i.y,uA),z.map.texture.name=oA.name+".shadowMap",z.camera.updateProjectionMatrix()}n.setRenderTarget(z.map),n.clear();const dA=z.getViewportCount();for(let uA=0;uA0||R.map&&R.alphaTest>0){const k=u.uuid,T=R.uuid;let P=a[k];P===void 0&&(P={},a[k]=P);let V=P[T];V===void 0&&(V=u.clone(),P[T]=V,R.addEventListener("dispose",_)),u=V}if(u.visible=R.visible,u.wireframe=R.wireframe,m===Be?u.side=R.shadowSide!==null?R.shadowSide:R.side:u.side=R.shadowSide!==null?R.shadowSide:E[R.side],u.alphaMap=R.alphaMap,u.alphaTest=R.alphaTest,u.map=R.map,u.clipShadows=R.clipShadows,u.clippingPlanes=R.clippingPlanes,u.clipIntersection=R.clipIntersection,u.displacementMap=R.displacementMap,u.displacementScale=R.displacementScale,u.displacementBias=R.displacementBias,u.wireframeLinewidth=R.wireframeLinewidth,u.linewidth=R.linewidth,F.isPointLight===!0&&u.isMeshDistanceMaterial===!0){const k=n.properties.get(u);k.light=F}return u}function f(w,R,F,m,u){if(w.visible===!1)return;if(w.layers.test(R.layers)&&(w.isMesh||w.isLine||w.isPoints)&&(w.castShadow||w.receiveShadow&&u===Be)&&(!w.frustumCulled||e.intersectsObject(w))){w.modelViewMatrix.multiplyMatrices(F.matrixWorldInverse,w.matrixWorld);const T=A.update(w),P=w.material;if(Array.isArray(P)){const V=T.groups;for(let O=0,oA=V.length;O=1):oA.indexOf("OpenGL ES")!==-1&&(O=parseFloat(/^OpenGL ES (\d)/.exec(oA)[1]),V=O>=2);let z=null,BA={};const dA=n.getParameter(n.SCISSOR_BOX),uA=n.getParameter(n.VIEWPORT),HA=new nt().fromArray(dA),WA=new nt().fromArray(uA);function Z(S,$,b,X){const sA=new Uint8Array(4),SA=n.createTexture();n.bindTexture(S,SA),n.texParameteri(S,n.TEXTURE_MIN_FILTER,n.NEAREST),n.texParameteri(S,n.TEXTURE_MAG_FILTER,n.NEAREST);for(let zA=0;zA"u"?!1:/OculusBrowser/g.test(navigator.userAgent),a=new AA,I=new WeakMap;let E;const C=new WeakMap;let Q=!1;try{Q=typeof OffscreenCanvas<"u"&&new OffscreenCanvas(1,1).getContext("2d")!==null}catch{}function c(N,D){return Q?new OffscreenCanvas(N,D):an("canvas")}function l(N,D,q){let eA=1;const tA=TA(N);if((tA.width>q||tA.height>q)&&(eA=q/Math.max(tA.width,tA.height)),eA<1)if(typeof HTMLImageElement<"u"&&N instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&N instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&N instanceof ImageBitmap||typeof VideoFrame<"u"&&N instanceof VideoFrame){const gA=Math.floor(eA*tA.width),MA=Math.floor(eA*tA.height);E===void 0&&(E=c(gA,MA));const hA=D?c(gA,MA):E;return hA.width=gA,hA.height=MA,hA.getContext("2d").drawImage(N,0,0,gA,MA),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+tA.width+"x"+tA.height+") to ("+gA+"x"+MA+")."),hA}else return"data"in N&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+tA.width+"x"+tA.height+")."),N;return N}function h(N){return N.generateMipmaps&&N.minFilter!==Rt&&N.minFilter!==Wt}function B(N){n.generateMipmap(N)}function p(N,D,q,eA,tA=!1){if(N!==null){if(n[N]!==void 0)return n[N];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+N+"'")}let gA=D;if(D===n.RED&&(q===n.FLOAT&&(gA=n.R32F),q===n.HALF_FLOAT&&(gA=n.R16F),q===n.UNSIGNED_BYTE&&(gA=n.R8)),D===n.RED_INTEGER&&(q===n.UNSIGNED_BYTE&&(gA=n.R8UI),q===n.UNSIGNED_SHORT&&(gA=n.R16UI),q===n.UNSIGNED_INT&&(gA=n.R32UI),q===n.BYTE&&(gA=n.R8I),q===n.SHORT&&(gA=n.R16I),q===n.INT&&(gA=n.R32I)),D===n.RG&&(q===n.FLOAT&&(gA=n.RG32F),q===n.HALF_FLOAT&&(gA=n.RG16F),q===n.UNSIGNED_BYTE&&(gA=n.RG8)),D===n.RG_INTEGER&&(q===n.UNSIGNED_BYTE&&(gA=n.RG8UI),q===n.UNSIGNED_SHORT&&(gA=n.RG16UI),q===n.UNSIGNED_INT&&(gA=n.RG32UI),q===n.BYTE&&(gA=n.RG8I),q===n.SHORT&&(gA=n.RG16I),q===n.INT&&(gA=n.RG32I)),D===n.RGB&&q===n.UNSIGNED_INT_5_9_9_9_REV&&(gA=n.RGB9_E5),D===n.RGBA){const MA=tA?Qs:At.getTransfer(eA);q===n.FLOAT&&(gA=n.RGBA32F),q===n.HALF_FLOAT&&(gA=n.RGBA16F),q===n.UNSIGNED_BYTE&&(gA=MA===ot?n.SRGB8_ALPHA8:n.RGBA8),q===n.UNSIGNED_SHORT_4_4_4_4&&(gA=n.RGBA4),q===n.UNSIGNED_SHORT_5_5_5_1&&(gA=n.RGB5_A1)}return(gA===n.R16F||gA===n.R32F||gA===n.RG16F||gA===n.RG32F||gA===n.RGBA16F||gA===n.RGBA32F)&&A.get("EXT_color_buffer_float"),gA}function d(N,D){let q;return N?D===null||D===Ui||D===Gi?q=n.DEPTH24_STENCIL8:D===ee?q=n.DEPTH32F_STENCIL8:D===Is&&(q=n.DEPTH24_STENCIL8,console.warn("DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.")):D===null||D===Ui||D===Gi?q=n.DEPTH_COMPONENT24:D===ee?q=n.DEPTH_COMPONENT32F:D===Is&&(q=n.DEPTH_COMPONENT16),q}function f(N,D){return h(N)===!0||N.isFramebufferTexture&&N.minFilter!==Rt&&N.minFilter!==Wt?Math.log2(Math.max(D.width,D.height))+1:N.mipmaps!==void 0&&N.mipmaps.length>0?N.mipmaps.length:N.isCompressedTexture&&Array.isArray(N.image)?D.mipmaps.length:1}function _(N){const D=N.target;D.removeEventListener("dispose",_),R(D),D.isVideoTexture&&I.delete(D)}function w(N){const D=N.target;D.removeEventListener("dispose",w),m(D)}function R(N){const D=e.get(N);if(D.__webglInit===void 0)return;const q=N.source,eA=C.get(q);if(eA){const tA=eA[D.__cacheKey];tA.usedTimes--,tA.usedTimes===0&&F(N),Object.keys(eA).length===0&&C.delete(q)}e.remove(N)}function F(N){const D=e.get(N);n.deleteTexture(D.__webglTexture);const q=N.source,eA=C.get(q);delete eA[D.__cacheKey],o.memory.textures--}function m(N){const D=e.get(N);if(N.depthTexture&&N.depthTexture.dispose(),N.isWebGLCubeRenderTarget)for(let eA=0;eA<6;eA++){if(Array.isArray(D.__webglFramebuffer[eA]))for(let tA=0;tA=i.maxTextures&&console.warn("THREE.WebGLTextures: Trying to use "+N+" texture units while this GPU supports only "+i.maxTextures),u+=1,N}function T(N){const D=[];return D.push(N.wrapS),D.push(N.wrapT),D.push(N.wrapR||0),D.push(N.magFilter),D.push(N.minFilter),D.push(N.anisotropy),D.push(N.internalFormat),D.push(N.format),D.push(N.type),D.push(N.generateMipmaps),D.push(N.premultiplyAlpha),D.push(N.flipY),D.push(N.unpackAlignment),D.push(N.colorSpace),D.join()}function P(N,D){const q=e.get(N);if(N.isVideoTexture&&fA(N),N.isRenderTargetTexture===!1&&N.version>0&&q.__version!==N.version){const eA=N.image;if(eA===null)console.warn("THREE.WebGLRenderer: Texture marked for update but no image data found.");else if(eA.complete===!1)console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete");else{WA(q,N,D);return}}t.bindTexture(n.TEXTURE_2D,q.__webglTexture,n.TEXTURE0+D)}function V(N,D){const q=e.get(N);if(N.version>0&&q.__version!==N.version){WA(q,N,D);return}t.bindTexture(n.TEXTURE_2D_ARRAY,q.__webglTexture,n.TEXTURE0+D)}function O(N,D){const q=e.get(N);if(N.version>0&&q.__version!==N.version){WA(q,N,D);return}t.bindTexture(n.TEXTURE_3D,q.__webglTexture,n.TEXTURE0+D)}function oA(N,D){const q=e.get(N);if(N.version>0&&q.__version!==N.version){Z(q,N,D);return}t.bindTexture(n.TEXTURE_CUBE_MAP,q.__webglTexture,n.TEXTURE0+D)}const z={[Po]:n.REPEAT,[ze]:n.CLAMP_TO_EDGE,[Oo]:n.MIRRORED_REPEAT},BA={[Rt]:n.NEAREST,[_E]:n.NEAREST_MIPMAP_NEAREST,[un]:n.NEAREST_MIPMAP_LINEAR,[Wt]:n.LINEAR,[qs]:n.LINEAR_MIPMAP_NEAREST,[Xe]:n.LINEAR_MIPMAP_LINEAR},dA={[zE]:n.NEVER,[tC]:n.ALWAYS,[XE]:n.LESS,[Pa]:n.LEQUAL,[ZE]:n.EQUAL,[AC]:n.GEQUAL,[jE]:n.GREATER,[$E]:n.NOTEQUAL};function uA(N,D){if(D.type===ee&&A.has("OES_texture_float_linear")===!1&&(D.magFilter===Wt||D.magFilter===qs||D.magFilter===un||D.magFilter===Xe||D.minFilter===Wt||D.minFilter===qs||D.minFilter===un||D.minFilter===Xe)&&console.warn("THREE.WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device."),n.texParameteri(N,n.TEXTURE_WRAP_S,z[D.wrapS]),n.texParameteri(N,n.TEXTURE_WRAP_T,z[D.wrapT]),(N===n.TEXTURE_3D||N===n.TEXTURE_2D_ARRAY)&&n.texParameteri(N,n.TEXTURE_WRAP_R,z[D.wrapR]),n.texParameteri(N,n.TEXTURE_MAG_FILTER,BA[D.magFilter]),n.texParameteri(N,n.TEXTURE_MIN_FILTER,BA[D.minFilter]),D.compareFunction&&(n.texParameteri(N,n.TEXTURE_COMPARE_MODE,n.COMPARE_REF_TO_TEXTURE),n.texParameteri(N,n.TEXTURE_COMPARE_FUNC,dA[D.compareFunction])),A.has("EXT_texture_filter_anisotropic")===!0){if(D.magFilter===Rt||D.minFilter!==un&&D.minFilter!==Xe||D.type===ee&&A.has("OES_texture_float_linear")===!1)return;if(D.anisotropy>1||e.get(D).__currentAnisotropy){const q=A.get("EXT_texture_filter_anisotropic");n.texParameterf(N,q.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(D.anisotropy,i.getMaxAnisotropy())),e.get(D).__currentAnisotropy=D.anisotropy}}}function HA(N,D){let q=!1;N.__webglInit===void 0&&(N.__webglInit=!0,D.addEventListener("dispose",_));const eA=D.source;let tA=C.get(eA);tA===void 0&&(tA={},C.set(eA,tA));const gA=T(D);if(gA!==N.__cacheKey){tA[gA]===void 0&&(tA[gA]={texture:n.createTexture(),usedTimes:0},o.memory.textures++,q=!0),tA[gA].usedTimes++;const MA=tA[N.__cacheKey];MA!==void 0&&(tA[N.__cacheKey].usedTimes--,MA.usedTimes===0&&F(D)),N.__cacheKey=gA,N.__webglTexture=tA[gA].texture}return q}function WA(N,D,q){let eA=n.TEXTURE_2D;(D.isDataArrayTexture||D.isCompressedArrayTexture)&&(eA=n.TEXTURE_2D_ARRAY),D.isData3DTexture&&(eA=n.TEXTURE_3D);const tA=HA(N,D),gA=D.source;t.bindTexture(eA,N.__webglTexture,n.TEXTURE0+q);const MA=e.get(gA);if(gA.version!==MA.__version||tA===!0){t.activeTexture(n.TEXTURE0+q);const hA=At.getPrimaries(At.workingColorSpace),cA=D.colorSpace===_e?null:At.getPrimaries(D.colorSpace),kA=D.colorSpace===_e||hA===cA?n.NONE:n.BROWSER_DEFAULT_WEBGL;n.pixelStorei(n.UNPACK_FLIP_Y_WEBGL,D.flipY),n.pixelStorei(n.UNPACK_PREMULTIPLY_ALPHA_WEBGL,D.premultiplyAlpha),n.pixelStorei(n.UNPACK_ALIGNMENT,D.unpackAlignment),n.pixelStorei(n.UNPACK_COLORSPACE_CONVERSION_WEBGL,kA);let EA=l(D.image,!1,i.maxTextureSize);EA=pA(D,EA);const wA=s.convert(D.format,D.colorSpace),JA=s.convert(D.type);let LA=p(D.internalFormat,wA,JA,D.colorSpace,D.isVideoTexture);uA(eA,D);let U;const W=D.mipmaps,DA=D.isVideoTexture!==!0,x=MA.__version===void 0||tA===!0,S=gA.dataReady,$=f(D,EA);if(D.isDepthTexture)LA=d(D.format===Ti,D.type),x&&(DA?t.texStorage2D(n.TEXTURE_2D,1,LA,EA.width,EA.height):t.texImage2D(n.TEXTURE_2D,0,LA,EA.width,EA.height,0,wA,JA,null));else if(D.isDataTexture)if(W.length>0){DA&&x&&t.texStorage2D(n.TEXTURE_2D,$,LA,W[0].width,W[0].height);for(let b=0,X=W.length;b0){for(const sA of D.layerUpdates){const SA=U.width*U.height;t.compressedTexSubImage3D(n.TEXTURE_2D_ARRAY,b,0,0,sA,U.width,U.height,1,wA,U.data.slice(SA*sA,SA*(sA+1)),0,0)}D.clearLayerUpdates()}else t.compressedTexSubImage3D(n.TEXTURE_2D_ARRAY,b,0,0,0,U.width,U.height,EA.depth,wA,U.data,0,0)}else t.compressedTexImage3D(n.TEXTURE_2D_ARRAY,b,LA,U.width,U.height,EA.depth,0,U.data,0,0);else console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()");else DA?S&&t.texSubImage3D(n.TEXTURE_2D_ARRAY,b,0,0,0,U.width,U.height,EA.depth,wA,JA,U.data):t.texImage3D(n.TEXTURE_2D_ARRAY,b,LA,U.width,U.height,EA.depth,0,wA,JA,U.data)}else{DA&&x&&t.texStorage2D(n.TEXTURE_2D,$,LA,W[0].width,W[0].height);for(let b=0,X=W.length;b0){let b;switch(JA){case n.UNSIGNED_BYTE:switch(wA){case n.ALPHA:b=1;break;case n.LUMINANCE:b=1;break;case n.LUMINANCE_ALPHA:b=2;break;case n.RGB:b=3;break;case n.RGBA:b=4;break;default:throw new Error(`Unknown texel size for format ${wA}.`)}break;case n.UNSIGNED_SHORT_4_4_4_4:case n.UNSIGNED_SHORT_5_5_5_1:case n.UNSIGNED_SHORT_5_6_5:b=1;break;default:throw new Error(`Unknown texel size for type ${JA}.`)}const X=EA.width*EA.height*b;for(const sA of D.layerUpdates)t.texSubImage3D(n.TEXTURE_2D_ARRAY,0,0,0,sA,EA.width,EA.height,1,wA,JA,EA.data.slice(X*sA,X*(sA+1)));D.clearLayerUpdates()}else t.texSubImage3D(n.TEXTURE_2D_ARRAY,0,0,0,0,EA.width,EA.height,EA.depth,wA,JA,EA.data)}else t.texImage3D(n.TEXTURE_2D_ARRAY,0,LA,EA.width,EA.height,EA.depth,0,wA,JA,EA.data);else if(D.isData3DTexture)DA?(x&&t.texStorage3D(n.TEXTURE_3D,$,LA,EA.width,EA.height,EA.depth),S&&t.texSubImage3D(n.TEXTURE_3D,0,0,0,0,EA.width,EA.height,EA.depth,wA,JA,EA.data)):t.texImage3D(n.TEXTURE_3D,0,LA,EA.width,EA.height,EA.depth,0,wA,JA,EA.data);else if(D.isFramebufferTexture){if(x)if(DA)t.texStorage2D(n.TEXTURE_2D,$,LA,EA.width,EA.height);else{let b=EA.width,X=EA.height;for(let sA=0;sA<$;sA++)t.texImage2D(n.TEXTURE_2D,sA,LA,b,X,0,wA,JA,null),b>>=1,X>>=1}}else if(W.length>0){if(DA&&x){const b=TA(W[0]);t.texStorage2D(n.TEXTURE_2D,$,LA,b.width,b.height)}for(let b=0,X=W.length;b0&&$++;const X=TA(wA[0]);t.texStorage2D(n.TEXTURE_CUBE_MAP,$,W,X.width,X.height)}for(let X=0;X<6;X++)if(EA){DA?S&&t.texSubImage2D(n.TEXTURE_CUBE_MAP_POSITIVE_X+X,0,0,0,wA[X].width,wA[X].height,LA,U,wA[X].data):t.texImage2D(n.TEXTURE_CUBE_MAP_POSITIVE_X+X,0,W,wA[X].width,wA[X].height,0,LA,U,wA[X].data);for(let sA=0;sA>gA),wA=Math.max(1,D.height>>gA);tA===n.TEXTURE_3D||tA===n.TEXTURE_2D_ARRAY?t.texImage3D(tA,gA,cA,EA,wA,D.depth,0,MA,hA,null):t.texImage2D(tA,gA,cA,EA,wA,0,MA,hA,null)}t.bindFramebuffer(n.FRAMEBUFFER,N),aA(D)?g.framebufferTexture2DMultisampleEXT(n.FRAMEBUFFER,eA,tA,e.get(q).__webglTexture,0,rA(D)):(tA===n.TEXTURE_2D||tA>=n.TEXTURE_CUBE_MAP_POSITIVE_X&&tA<=n.TEXTURE_CUBE_MAP_NEGATIVE_Z)&&n.framebufferTexture2D(n.FRAMEBUFFER,eA,tA,e.get(q).__webglTexture,gA),t.bindFramebuffer(n.FRAMEBUFFER,null)}function mA(N,D,q){if(n.bindRenderbuffer(n.RENDERBUFFER,N),D.depthBuffer){const eA=D.depthTexture,tA=eA&&eA.isDepthTexture?eA.type:null,gA=d(D.stencilBuffer,tA),MA=D.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,hA=rA(D);aA(D)?g.renderbufferStorageMultisampleEXT(n.RENDERBUFFER,hA,gA,D.width,D.height):q?n.renderbufferStorageMultisample(n.RENDERBUFFER,hA,gA,D.width,D.height):n.renderbufferStorage(n.RENDERBUFFER,gA,D.width,D.height),n.framebufferRenderbuffer(n.FRAMEBUFFER,MA,n.RENDERBUFFER,N)}else{const eA=D.textures;for(let tA=0;tA1;if(MA||(eA.__webglTexture===void 0&&(eA.__webglTexture=n.createTexture()),eA.__version=D.version,o.memory.textures++),gA){q.__webglFramebuffer=[];for(let hA=0;hA<6;hA++)if(D.mipmaps&&D.mipmaps.length>0){q.__webglFramebuffer[hA]=[];for(let cA=0;cA0){q.__webglFramebuffer=[];for(let hA=0;hA0&&aA(N)===!1){q.__webglMultisampledFramebuffer=n.createFramebuffer(),q.__webglColorRenderbuffer=[],t.bindFramebuffer(n.FRAMEBUFFER,q.__webglMultisampledFramebuffer);for(let hA=0;hA0)for(let cA=0;cA0)for(let cA=0;cA0){if(aA(N)===!1){const D=N.textures,q=N.width,eA=N.height;let tA=n.COLOR_BUFFER_BIT;const gA=N.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,MA=e.get(N),hA=D.length>1;if(hA)for(let cA=0;cA0&&A.has("WEBGL_multisampled_render_to_texture")===!0&&D.__useRenderToTexture!==!1}function fA(N){const D=o.render.frame;I.get(N)!==D&&(I.set(N,D),N.update())}function pA(N,D){const q=N.colorSpace,eA=N.format,tA=N.type;return N.isCompressedTexture===!0||N.isVideoTexture===!0||q!==ke&&q!==_e&&(At.getTransfer(q)===ot?(eA!==Xt||tA!==Ge)&&console.warn("THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."):console.error("THREE.WebGLTextures: Unsupported texture color space:",q)),D}function TA(N){return typeof HTMLImageElement<"u"&&N instanceof HTMLImageElement?(a.width=N.naturalWidth||N.width,a.height=N.naturalHeight||N.height):typeof VideoFrame<"u"&&N instanceof VideoFrame?(a.width=N.displayWidth,a.height=N.displayHeight):(a.width=N.width,a.height=N.height),a}this.allocateTextureUnit=k,this.resetTextureUnits=L,this.setTexture2D=P,this.setTexture2DArray=V,this.setTexture3D=O,this.setTextureCube=oA,this.rebindTextures=GA,this.setupRenderTarget=UA,this.updateRenderTargetMipmap=v,this.updateMultisampleRenderTarget=IA,this.setupDepthRenderbuffer=_A,this.setupFrameBufferTexture=nA,this.useMultisampledRTT=aA}function hl(n,A){function t(e,i=_e){let s;const o=At.getTransfer(i);if(e===Ge)return n.UNSIGNED_BYTE;if(e===Ua)return n.UNSIGNED_SHORT_4_4_4_4;if(e===Ga)return n.UNSIGNED_SHORT_5_5_5_1;if(e===UE)return n.UNSIGNED_INT_5_9_9_9_REV;if(e===LE)return n.BYTE;if(e===vE)return n.SHORT;if(e===Is)return n.UNSIGNED_SHORT;if(e===va)return n.INT;if(e===Ui)return n.UNSIGNED_INT;if(e===ee)return n.FLOAT;if(e===Ss)return n.HALF_FLOAT;if(e===GE)return n.ALPHA;if(e===TE)return n.RGB;if(e===Xt)return n.RGBA;if(e===kE)return n.LUMINANCE;if(e===bE)return n.LUMINANCE_ALPHA;if(e===xi)return n.DEPTH_COMPONENT;if(e===Ti)return n.DEPTH_STENCIL;if(e===Ta)return n.RED;if(e===ka)return n.RED_INTEGER;if(e===HE)return n.RG;if(e===ba)return n.RG_INTEGER;if(e===Ha)return n.RGBA_INTEGER;if(e===Ys||e===Ks||e===Ws||e===Vs)if(o===ot)if(s=A.get("WEBGL_compressed_texture_s3tc_srgb"),s!==null){if(e===Ys)return s.COMPRESSED_SRGB_S3TC_DXT1_EXT;if(e===Ks)return s.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;if(e===Ws)return s.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;if(e===Vs)return s.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}else return null;else if(s=A.get("WEBGL_compressed_texture_s3tc"),s!==null){if(e===Ys)return s.COMPRESSED_RGB_S3TC_DXT1_EXT;if(e===Ks)return s.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(e===Ws)return s.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(e===Vs)return s.COMPRESSED_RGBA_S3TC_DXT5_EXT}else return null;if(e===Sg||e===Mg||e===Ng||e===xg)if(s=A.get("WEBGL_compressed_texture_pvrtc"),s!==null){if(e===Sg)return s.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(e===Mg)return s.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(e===Ng)return s.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(e===xg)return s.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(e===Fg||e===_g||e===Lg)if(s=A.get("WEBGL_compressed_texture_etc"),s!==null){if(e===Fg||e===_g)return o===ot?s.COMPRESSED_SRGB8_ETC2:s.COMPRESSED_RGB8_ETC2;if(e===Lg)return o===ot?s.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:s.COMPRESSED_RGBA8_ETC2_EAC}else return null;if(e===vg||e===Ug||e===Gg||e===Tg||e===kg||e===bg||e===Hg||e===Pg||e===Og||e===Jg||e===qg||e===Yg||e===Kg||e===Wg)if(s=A.get("WEBGL_compressed_texture_astc"),s!==null){if(e===vg)return o===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:s.COMPRESSED_RGBA_ASTC_4x4_KHR;if(e===Ug)return o===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:s.COMPRESSED_RGBA_ASTC_5x4_KHR;if(e===Gg)return o===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:s.COMPRESSED_RGBA_ASTC_5x5_KHR;if(e===Tg)return o===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:s.COMPRESSED_RGBA_ASTC_6x5_KHR;if(e===kg)return o===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:s.COMPRESSED_RGBA_ASTC_6x6_KHR;if(e===bg)return o===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:s.COMPRESSED_RGBA_ASTC_8x5_KHR;if(e===Hg)return o===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:s.COMPRESSED_RGBA_ASTC_8x6_KHR;if(e===Pg)return o===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:s.COMPRESSED_RGBA_ASTC_8x8_KHR;if(e===Og)return o===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:s.COMPRESSED_RGBA_ASTC_10x5_KHR;if(e===Jg)return o===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:s.COMPRESSED_RGBA_ASTC_10x6_KHR;if(e===qg)return o===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:s.COMPRESSED_RGBA_ASTC_10x8_KHR;if(e===Yg)return o===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:s.COMPRESSED_RGBA_ASTC_10x10_KHR;if(e===Kg)return o===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:s.COMPRESSED_RGBA_ASTC_12x10_KHR;if(e===Wg)return o===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:s.COMPRESSED_RGBA_ASTC_12x12_KHR}else return null;if(e===zs||e===Vg||e===zg)if(s=A.get("EXT_texture_compression_bptc"),s!==null){if(e===zs)return o===ot?s.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:s.COMPRESSED_RGBA_BPTC_UNORM_EXT;if(e===Vg)return s.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;if(e===zg)return s.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT}else return null;if(e===PE||e===Xg||e===Zg||e===jg)if(s=A.get("EXT_texture_compression_rgtc"),s!==null){if(e===zs)return s.COMPRESSED_RED_RGTC1_EXT;if(e===Xg)return s.COMPRESSED_SIGNED_RED_RGTC1_EXT;if(e===Zg)return s.COMPRESSED_RED_GREEN_RGTC2_EXT;if(e===jg)return s.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT}else return null;return e===Gi?n.UNSIGNED_INT_24_8:n[e]!==void 0?n[e]:null}return{convert:t}}class cl extends _t{constructor(A=[]){super(),this.isArrayCamera=!0,this.cameras=A}}class Pn extends st{constructor(){super(),this.isGroup=!0,this.type="Group"}}const ll={type:"move"};class Do{constructor(){this._targetRay=null,this._grip=null,this._hand=null}getHandSpace(){return this._hand===null&&(this._hand=new Pn,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand}getTargetRaySpace(){return this._targetRay===null&&(this._targetRay=new Pn,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new M,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new M),this._targetRay}getGripSpace(){return this._grip===null&&(this._grip=new Pn,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new M,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new M),this._grip}dispatchEvent(A){return this._targetRay!==null&&this._targetRay.dispatchEvent(A),this._grip!==null&&this._grip.dispatchEvent(A),this._hand!==null&&this._hand.dispatchEvent(A),this}connect(A){if(A&&A.hand){const t=this._hand;if(t)for(const e of A.hand.values())this._getHandJoint(t,e)}return this.dispatchEvent({type:"connected",data:A}),this}disconnect(A){return this.dispatchEvent({type:"disconnected",data:A}),this._targetRay!==null&&(this._targetRay.visible=!1),this._grip!==null&&(this._grip.visible=!1),this._hand!==null&&(this._hand.visible=!1),this}update(A,t,e){let i=null,s=null,o=null;const g=this._targetRay,r=this._grip,a=this._hand;if(A&&t.session.visibilityState!=="visible-blurred"){if(a&&A.hand){o=!0;for(const l of A.hand.values()){const h=t.getJointPose(l,e),B=this._getHandJoint(a,l);h!==null&&(B.matrix.fromArray(h.transform.matrix),B.matrix.decompose(B.position,B.rotation,B.scale),B.matrixWorldNeedsUpdate=!0,B.jointRadius=h.radius),B.visible=h!==null}const I=a.joints["index-finger-tip"],E=a.joints["thumb-tip"],C=I.position.distanceTo(E.position),Q=.02,c=.005;a.inputState.pinching&&C>Q+c?(a.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:A.handedness,target:this})):!a.inputState.pinching&&C<=Q-c&&(a.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:A.handedness,target:this}))}else r!==null&&A.gripSpace&&(s=t.getPose(A.gripSpace,e),s!==null&&(r.matrix.fromArray(s.transform.matrix),r.matrix.decompose(r.position,r.rotation,r.scale),r.matrixWorldNeedsUpdate=!0,s.linearVelocity?(r.hasLinearVelocity=!0,r.linearVelocity.copy(s.linearVelocity)):r.hasLinearVelocity=!1,s.angularVelocity?(r.hasAngularVelocity=!0,r.angularVelocity.copy(s.angularVelocity)):r.hasAngularVelocity=!1));g!==null&&(i=t.getPose(A.targetRaySpace,e),i===null&&s!==null&&(i=s),i!==null&&(g.matrix.fromArray(i.transform.matrix),g.matrix.decompose(g.position,g.rotation,g.scale),g.matrixWorldNeedsUpdate=!0,i.linearVelocity?(g.hasLinearVelocity=!0,g.linearVelocity.copy(i.linearVelocity)):g.hasLinearVelocity=!1,i.angularVelocity?(g.hasAngularVelocity=!0,g.angularVelocity.copy(i.angularVelocity)):g.hasAngularVelocity=!1,this.dispatchEvent(ll)))}return g!==null&&(g.visible=i!==null),r!==null&&(r.visible=s!==null),a!==null&&(a.visible=o!==null),this}_getHandJoint(A,t){if(A.joints[t.jointName]===void 0){const e=new Pn;e.matrixAutoUpdate=!1,e.visible=!1,A.joints[t.jointName]=e,A.add(e)}return A.joints[t.jointName]}}const dl=` +void main() { + + gl_Position = vec4( position, 1.0 ); + +}`,ul=` +uniform sampler2DArray depthColor; +uniform float depthWidth; +uniform float depthHeight; + +void main() { + + vec2 coord = vec2( gl_FragCoord.x / depthWidth, gl_FragCoord.y / depthHeight ); + + if ( coord.x >= 1.0 ) { + + gl_FragDepth = texture( depthColor, vec3( coord.x - 1.0, coord.y, 1 ) ).r; + + } else { + + gl_FragDepth = texture( depthColor, vec3( coord.x, coord.y, 0 ) ).r; + + } + +}`;class fl{constructor(){this.texture=null,this.mesh=null,this.depthNear=0,this.depthFar=0}init(A,t,e){if(this.texture===null){const i=new Bt,s=A.properties.get(i);s.__webglTexture=t.texture,(t.depthNear!=e.depthNear||t.depthFar!=e.depthFar)&&(this.depthNear=t.depthNear,this.depthFar=t.depthFar),this.texture=i}}getMesh(A){if(this.texture!==null&&this.mesh===null){const t=A.cameras[0].viewport,e=new ie({vertexShader:dl,fragmentShader:ul,uniforms:{depthColor:{value:this.texture},depthWidth:{value:t.z},depthHeight:{value:t.w}}});this.mesh=new St(new ne(20,20),e)}return this.mesh}reset(){this.texture=null,this.mesh=null}}class pl extends ue{constructor(A,t){super();const e=this;let i=null,s=1,o=null,g="local-floor",r=1,a=null,I=null,E=null,C=null,Q=null,c=null;const l=new fl,h=t.getContextAttributes();let B=null,p=null;const d=[],f=[],_=new AA;let w=null;const R=new _t;R.layers.enable(1),R.viewport=new nt;const F=new _t;F.layers.enable(2),F.viewport=new nt;const m=[R,F],u=new cl;u.layers.enable(1),u.layers.enable(2);let L=null,k=null;this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(Z){let nA=d[Z];return nA===void 0&&(nA=new Do,d[Z]=nA),nA.getTargetRaySpace()},this.getControllerGrip=function(Z){let nA=d[Z];return nA===void 0&&(nA=new Do,d[Z]=nA),nA.getGripSpace()},this.getHand=function(Z){let nA=d[Z];return nA===void 0&&(nA=new Do,d[Z]=nA),nA.getHandSpace()};function T(Z){const nA=f.indexOf(Z.inputSource);if(nA===-1)return;const mA=d[nA];mA!==void 0&&(mA.update(Z.inputSource,Z.frame,a||o),mA.dispatchEvent({type:Z.type,data:Z.inputSource}))}function P(){i.removeEventListener("select",T),i.removeEventListener("selectstart",T),i.removeEventListener("selectend",T),i.removeEventListener("squeeze",T),i.removeEventListener("squeezestart",T),i.removeEventListener("squeezeend",T),i.removeEventListener("end",P),i.removeEventListener("inputsourceschange",V);for(let Z=0;Z=0&&(f[CA]=null,d[CA].disconnect(mA))}for(let nA=0;nA=f.length){f.push(mA),CA=GA;break}else if(f[GA]===null){f[GA]=mA,CA=GA;break}if(CA===-1)break}const _A=d[CA];_A&&_A.connect(mA)}}const O=new M,oA=new M;function z(Z,nA,mA){O.setFromMatrixPosition(nA.matrixWorld),oA.setFromMatrixPosition(mA.matrixWorld);const CA=O.distanceTo(oA),_A=nA.projectionMatrix.elements,GA=mA.projectionMatrix.elements,UA=_A[14]/(_A[10]-1),v=_A[14]/(_A[10]+1),j=(_A[9]+1)/_A[5],iA=(_A[9]-1)/_A[5],IA=(_A[8]-1)/_A[0],rA=(GA[8]+1)/GA[0],aA=UA*IA,fA=UA*rA,pA=CA/(-IA+rA),TA=pA*-IA;nA.matrixWorld.decompose(Z.position,Z.quaternion,Z.scale),Z.translateX(TA),Z.translateZ(pA),Z.matrixWorld.compose(Z.position,Z.quaternion,Z.scale),Z.matrixWorldInverse.copy(Z.matrixWorld).invert();const N=UA+pA,D=v+pA,q=aA-TA,eA=fA+(CA-TA),tA=j*v/D*N,gA=iA*v/D*N;Z.projectionMatrix.makePerspective(q,eA,tA,gA,N,D),Z.projectionMatrixInverse.copy(Z.projectionMatrix).invert()}function BA(Z,nA){nA===null?Z.matrixWorld.copy(Z.matrix):Z.matrixWorld.multiplyMatrices(nA.matrixWorld,Z.matrix),Z.matrixWorldInverse.copy(Z.matrixWorld).invert()}this.updateCamera=function(Z){if(i===null)return;l.texture!==null&&(Z.near=l.depthNear,Z.far=l.depthFar),u.near=F.near=R.near=Z.near,u.far=F.far=R.far=Z.far,(L!==u.near||k!==u.far)&&(i.updateRenderState({depthNear:u.near,depthFar:u.far}),L=u.near,k=u.far,R.near=L,R.far=k,F.near=L,F.far=k,R.updateProjectionMatrix(),F.updateProjectionMatrix(),Z.updateProjectionMatrix());const nA=Z.parent,mA=u.cameras;BA(u,nA);for(let CA=0;CA0&&(h.alphaTest.value=B.alphaTest);const p=A.get(B),d=p.envMap,f=p.envMapRotation;d&&(h.envMap.value=d,Ye.copy(f),Ye.x*=-1,Ye.y*=-1,Ye.z*=-1,d.isCubeTexture&&d.isRenderTargetTexture===!1&&(Ye.y*=-1,Ye.z*=-1),h.envMapRotation.value.setFromMatrix4(Dl.makeRotationFromEuler(Ye)),h.flipEnvMap.value=d.isCubeTexture&&d.isRenderTargetTexture===!1?-1:1,h.reflectivity.value=B.reflectivity,h.ior.value=B.ior,h.refractionRatio.value=B.refractionRatio),B.lightMap&&(h.lightMap.value=B.lightMap,h.lightMapIntensity.value=B.lightMapIntensity,t(B.lightMap,h.lightMapTransform)),B.aoMap&&(h.aoMap.value=B.aoMap,h.aoMapIntensity.value=B.aoMapIntensity,t(B.aoMap,h.aoMapTransform))}function o(h,B){h.diffuse.value.copy(B.color),h.opacity.value=B.opacity,B.map&&(h.map.value=B.map,t(B.map,h.mapTransform))}function g(h,B){h.dashSize.value=B.dashSize,h.totalSize.value=B.dashSize+B.gapSize,h.scale.value=B.scale}function r(h,B,p,d){h.diffuse.value.copy(B.color),h.opacity.value=B.opacity,h.size.value=B.size*p,h.scale.value=d*.5,B.map&&(h.map.value=B.map,t(B.map,h.uvTransform)),B.alphaMap&&(h.alphaMap.value=B.alphaMap,t(B.alphaMap,h.alphaMapTransform)),B.alphaTest>0&&(h.alphaTest.value=B.alphaTest)}function a(h,B){h.diffuse.value.copy(B.color),h.opacity.value=B.opacity,h.rotation.value=B.rotation,B.map&&(h.map.value=B.map,t(B.map,h.mapTransform)),B.alphaMap&&(h.alphaMap.value=B.alphaMap,t(B.alphaMap,h.alphaMapTransform)),B.alphaTest>0&&(h.alphaTest.value=B.alphaTest)}function I(h,B){h.specular.value.copy(B.specular),h.shininess.value=Math.max(B.shininess,1e-4)}function E(h,B){B.gradientMap&&(h.gradientMap.value=B.gradientMap)}function C(h,B){h.metalness.value=B.metalness,B.metalnessMap&&(h.metalnessMap.value=B.metalnessMap,t(B.metalnessMap,h.metalnessMapTransform)),h.roughness.value=B.roughness,B.roughnessMap&&(h.roughnessMap.value=B.roughnessMap,t(B.roughnessMap,h.roughnessMapTransform)),B.envMap&&(h.envMapIntensity.value=B.envMapIntensity)}function Q(h,B,p){h.ior.value=B.ior,B.sheen>0&&(h.sheenColor.value.copy(B.sheenColor).multiplyScalar(B.sheen),h.sheenRoughness.value=B.sheenRoughness,B.sheenColorMap&&(h.sheenColorMap.value=B.sheenColorMap,t(B.sheenColorMap,h.sheenColorMapTransform)),B.sheenRoughnessMap&&(h.sheenRoughnessMap.value=B.sheenRoughnessMap,t(B.sheenRoughnessMap,h.sheenRoughnessMapTransform))),B.clearcoat>0&&(h.clearcoat.value=B.clearcoat,h.clearcoatRoughness.value=B.clearcoatRoughness,B.clearcoatMap&&(h.clearcoatMap.value=B.clearcoatMap,t(B.clearcoatMap,h.clearcoatMapTransform)),B.clearcoatRoughnessMap&&(h.clearcoatRoughnessMap.value=B.clearcoatRoughnessMap,t(B.clearcoatRoughnessMap,h.clearcoatRoughnessMapTransform)),B.clearcoatNormalMap&&(h.clearcoatNormalMap.value=B.clearcoatNormalMap,t(B.clearcoatNormalMap,h.clearcoatNormalMapTransform),h.clearcoatNormalScale.value.copy(B.clearcoatNormalScale),B.side===Lt&&h.clearcoatNormalScale.value.negate())),B.dispersion>0&&(h.dispersion.value=B.dispersion),B.iridescence>0&&(h.iridescence.value=B.iridescence,h.iridescenceIOR.value=B.iridescenceIOR,h.iridescenceThicknessMinimum.value=B.iridescenceThicknessRange[0],h.iridescenceThicknessMaximum.value=B.iridescenceThicknessRange[1],B.iridescenceMap&&(h.iridescenceMap.value=B.iridescenceMap,t(B.iridescenceMap,h.iridescenceMapTransform)),B.iridescenceThicknessMap&&(h.iridescenceThicknessMap.value=B.iridescenceThicknessMap,t(B.iridescenceThicknessMap,h.iridescenceThicknessMapTransform))),B.transmission>0&&(h.transmission.value=B.transmission,h.transmissionSamplerMap.value=p.texture,h.transmissionSamplerSize.value.set(p.width,p.height),B.transmissionMap&&(h.transmissionMap.value=B.transmissionMap,t(B.transmissionMap,h.transmissionMapTransform)),h.thickness.value=B.thickness,B.thicknessMap&&(h.thicknessMap.value=B.thicknessMap,t(B.thicknessMap,h.thicknessMapTransform)),h.attenuationDistance.value=B.attenuationDistance,h.attenuationColor.value.copy(B.attenuationColor)),B.anisotropy>0&&(h.anisotropyVector.value.set(B.anisotropy*Math.cos(B.anisotropyRotation),B.anisotropy*Math.sin(B.anisotropyRotation)),B.anisotropyMap&&(h.anisotropyMap.value=B.anisotropyMap,t(B.anisotropyMap,h.anisotropyMapTransform))),h.specularIntensity.value=B.specularIntensity,h.specularColor.value.copy(B.specularColor),B.specularColorMap&&(h.specularColorMap.value=B.specularColorMap,t(B.specularColorMap,h.specularColorMapTransform)),B.specularIntensityMap&&(h.specularIntensityMap.value=B.specularIntensityMap,t(B.specularIntensityMap,h.specularIntensityMapTransform))}function c(h,B){B.matcap&&(h.matcap.value=B.matcap)}function l(h,B){const p=A.get(B).light;h.referencePosition.value.setFromMatrixPosition(p.matrixWorld),h.nearDistance.value=p.shadow.camera.near,h.farDistance.value=p.shadow.camera.far}return{refreshFogUniforms:e,refreshMaterialUniforms:i}}function yl(n,A,t,e){let i={},s={},o=[];const g=n.getParameter(n.MAX_UNIFORM_BUFFER_BINDINGS);function r(p,d){const f=d.program;e.uniformBlockBinding(p,f)}function a(p,d){let f=i[p.id];f===void 0&&(c(p),f=I(p),i[p.id]=f,p.addEventListener("dispose",h));const _=d.program;e.updateUBOMapping(p,_);const w=A.render.frame;s[p.id]!==w&&(C(p),s[p.id]=w)}function I(p){const d=E();p.__bindingPointIndex=d;const f=n.createBuffer(),_=p.__size,w=p.usage;return n.bindBuffer(n.UNIFORM_BUFFER,f),n.bufferData(n.UNIFORM_BUFFER,_,w),n.bindBuffer(n.UNIFORM_BUFFER,null),n.bindBufferBase(n.UNIFORM_BUFFER,d,f),f}function E(){for(let p=0;p0&&(f+=_-w),p.__size=f,p.__cache={},this}function l(p){const d={boundary:0,storage:0};return typeof p=="number"||typeof p=="boolean"?(d.boundary=4,d.storage=4):p.isVector2?(d.boundary=8,d.storage=8):p.isVector3||p.isColor?(d.boundary=16,d.storage=12):p.isVector4?(d.boundary=16,d.storage=16):p.isMatrix3?(d.boundary=48,d.storage=48):p.isMatrix4?(d.boundary=64,d.storage=64):p.isTexture?console.warn("THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group."):console.warn("THREE.WebGLRenderer: Unsupported uniform value type.",p),d}function h(p){const d=p.target;d.removeEventListener("dispose",h);const f=o.indexOf(d.__bindingPointIndex);o.splice(f,1),n.deleteBuffer(i[d.id]),delete i[d.id],delete s[d.id]}function B(){for(const p in i)n.deleteBuffer(i[p]);o=[],i={},s={}}return{bind:r,update:a,dispose:B}}class wl{constructor(A={}){const{canvas:t=dC(),context:e=null,depth:i=!0,stencil:s=!1,alpha:o=!1,antialias:g=!1,premultipliedAlpha:r=!0,preserveDrawingBuffer:a=!1,powerPreference:I="default",failIfMajorPerformanceCaveat:E=!1}=A;this.isWebGLRenderer=!0;let C;if(e!==null){if(typeof WebGLRenderingContext<"u"&&e instanceof WebGLRenderingContext)throw new Error("THREE.WebGLRenderer: WebGL 1 is not supported since r163.");C=e.getContextAttributes().alpha}else C=o;const Q=new Uint32Array(4),c=new Int32Array(4);let l=null,h=null;const B=[],p=[];this.domElement=t,this.debug={checkShaderErrors:!0,onShaderError:null},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this._outputColorSpace=Pt,this.toneMapping=Ue,this.toneMappingExposure=1;const d=this;let f=!1,_=0,w=0,R=null,F=-1,m=null;const u=new nt,L=new nt;let k=null;const T=new FA(0);let P=0,V=t.width,O=t.height,oA=1,z=null,BA=null;const dA=new nt(0,0,V,O),uA=new nt(0,0,V,O);let HA=!1;const WA=new Ns;let Z=!1,nA=!1;const mA=new KA,CA=new M,_A={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};let GA=!1;function UA(){return R===null?oA:1}let v=e;function j(y,G){return t.getContext(y,G)}try{const y={alpha:!0,depth:i,stencil:s,antialias:g,premultipliedAlpha:r,preserveDrawingBuffer:a,powerPreference:I,failIfMajorPerformanceCaveat:E};if("setAttribute"in t&&t.setAttribute("data-engine",`three.js r${jo}`),t.addEventListener("webglcontextlost",$,!1),t.addEventListener("webglcontextrestored",b,!1),t.addEventListener("webglcontextcreationerror",X,!1),v===null){const G="webgl2";if(v=j(G,y),v===null)throw j(G)?new Error("Error creating WebGL context with your selected attributes."):new Error("Error creating WebGL context.")}}catch(y){throw console.error("THREE.WebGLRenderer: "+y.message),y}let iA,IA,rA,aA,fA,pA,TA,N,D,q,eA,tA,gA,MA,hA,cA,kA,EA,wA,JA,LA,U,W,DA;function x(){iA=new Lh(v),iA.init(),U=new hl(v,iA),IA=new Sh(v,iA,A,U),rA=new Ql(v),aA=new Gh(v),fA=new $c,pA=new Bl(v,iA,rA,fA,IA,U,aA),TA=new Nh(d),N=new _h(d),D=new JC(v),W=new wh(v,D),q=new vh(v,D,aA,W),eA=new kh(v,q,D,aA),wA=new Th(v,IA,pA),cA=new Mh(fA),tA=new jc(d,TA,N,iA,IA,W,cA),gA=new ml(d,fA),MA=new tl,hA=new gl(iA),EA=new yh(d,TA,N,rA,eA,C,r),kA=new Cl(d,eA,IA),DA=new yl(v,aA,IA,rA),JA=new Rh(v,iA,aA),LA=new Uh(v,iA,aA),aA.programs=tA.programs,d.capabilities=IA,d.extensions=iA,d.properties=fA,d.renderLists=MA,d.shadowMap=kA,d.state=rA,d.info=aA}x();const S=new pl(d,v);this.xr=S,this.getContext=function(){return v},this.getContextAttributes=function(){return v.getContextAttributes()},this.forceContextLoss=function(){const y=iA.get("WEBGL_lose_context");y&&y.loseContext()},this.forceContextRestore=function(){const y=iA.get("WEBGL_lose_context");y&&y.restoreContext()},this.getPixelRatio=function(){return oA},this.setPixelRatio=function(y){y!==void 0&&(oA=y,this.setSize(V,O,!1))},this.getSize=function(y){return y.set(V,O)},this.setSize=function(y,G,J=!0){if(S.isPresenting){console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting.");return}V=y,O=G,t.width=Math.floor(y*oA),t.height=Math.floor(G*oA),J===!0&&(t.style.width=y+"px",t.style.height=G+"px"),this.setViewport(0,0,y,G)},this.getDrawingBufferSize=function(y){return y.set(V*oA,O*oA).floor()},this.setDrawingBufferSize=function(y,G,J){V=y,O=G,oA=J,t.width=Math.floor(y*J),t.height=Math.floor(G*J),this.setViewport(0,0,y,G)},this.getCurrentViewport=function(y){return y.copy(u)},this.getViewport=function(y){return y.copy(dA)},this.setViewport=function(y,G,J,K){y.isVector4?dA.set(y.x,y.y,y.z,y.w):dA.set(y,G,J,K),rA.viewport(u.copy(dA).multiplyScalar(oA).round())},this.getScissor=function(y){return y.copy(uA)},this.setScissor=function(y,G,J,K){y.isVector4?uA.set(y.x,y.y,y.z,y.w):uA.set(y,G,J,K),rA.scissor(L.copy(uA).multiplyScalar(oA).round())},this.getScissorTest=function(){return HA},this.setScissorTest=function(y){rA.setScissorTest(HA=y)},this.setOpaqueSort=function(y){z=y},this.setTransparentSort=function(y){BA=y},this.getClearColor=function(y){return y.copy(EA.getClearColor())},this.setClearColor=function(){EA.setClearColor.apply(EA,arguments)},this.getClearAlpha=function(){return EA.getClearAlpha()},this.setClearAlpha=function(){EA.setClearAlpha.apply(EA,arguments)},this.clear=function(y=!0,G=!0,J=!0){let K=0;if(y){let H=!1;if(R!==null){const QA=R.texture.format;H=QA===Ha||QA===ba||QA===ka}if(H){const QA=R.texture.type,yA=QA===Ge||QA===Ui||QA===Is||QA===Gi||QA===Ua||QA===Ga,RA=EA.getClearColor(),NA=EA.getClearAlpha(),bA=RA.r,PA=RA.g,vA=RA.b;yA?(Q[0]=bA,Q[1]=PA,Q[2]=vA,Q[3]=NA,v.clearBufferuiv(v.COLOR,0,Q)):(c[0]=bA,c[1]=PA,c[2]=vA,c[3]=NA,v.clearBufferiv(v.COLOR,0,c))}else K|=v.COLOR_BUFFER_BIT}G&&(K|=v.DEPTH_BUFFER_BIT),J&&(K|=v.STENCIL_BUFFER_BIT,this.state.buffers.stencil.setMask(4294967295)),v.clear(K)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){t.removeEventListener("webglcontextlost",$,!1),t.removeEventListener("webglcontextrestored",b,!1),t.removeEventListener("webglcontextcreationerror",X,!1),MA.dispose(),hA.dispose(),fA.dispose(),TA.dispose(),N.dispose(),eA.dispose(),W.dispose(),DA.dispose(),tA.dispose(),S.dispose(),S.removeEventListener("sessionstart",mt),S.removeEventListener("sessionend",ht),Ut.stop()};function $(y){y.preventDefault(),console.log("THREE.WebGLRenderer: Context Lost."),f=!0}function b(){console.log("THREE.WebGLRenderer: Context Restored."),f=!1;const y=aA.autoReset,G=kA.enabled,J=kA.autoUpdate,K=kA.needsUpdate,H=kA.type;x(),aA.autoReset=y,kA.enabled=G,kA.autoUpdate=J,kA.needsUpdate=K,kA.type=H}function X(y){console.error("THREE.WebGLRenderer: A WebGL context could not be created. Reason: ",y.statusMessage)}function sA(y){const G=y.target;G.removeEventListener("dispose",sA),SA(G)}function SA(y){zA(y),fA.remove(y)}function zA(y){const G=fA.get(y).programs;G!==void 0&&(G.forEach(function(J){tA.releaseProgram(J)}),y.isShaderMaterial&&tA.releaseShaderCache(y))}this.renderBufferDirect=function(y,G,J,K,H,QA){G===null&&(G=_A);const yA=H.isMesh&&H.matrixWorld.determinant()<0,RA=OI(y,G,J,K,H);rA.setMaterial(K,yA);let NA=J.index,bA=1;if(K.wireframe===!0){if(NA=q.getWireframeAttribute(J),NA===void 0)return;bA=2}const PA=J.drawRange,vA=J.attributes.position;let XA=PA.start*bA,at=(PA.start+PA.count)*bA;QA!==null&&(XA=Math.max(XA,QA.start*bA),at=Math.min(at,(QA.start+QA.count)*bA)),NA!==null?(XA=Math.max(XA,0),at=Math.min(at,NA.count)):vA!=null&&(XA=Math.max(XA,0),at=Math.min(at,vA.count));const It=at-XA;if(It<0||It===1/0)return;W.setup(H,K,RA,J,NA);let Gt,ZA=JA;if(NA!==null&&(Gt=D.get(NA),ZA=LA,ZA.setIndex(Gt)),H.isMesh)K.wireframe===!0?(rA.setLineWidth(K.wireframeLinewidth*UA()),ZA.setMode(v.LINES)):ZA.setMode(v.TRIANGLES);else if(H.isLine){let xA=K.linewidth;xA===void 0&&(xA=1),rA.setLineWidth(xA*UA()),H.isLineSegments?ZA.setMode(v.LINES):H.isLineLoop?ZA.setMode(v.LINE_LOOP):ZA.setMode(v.LINE_STRIP)}else H.isPoints?ZA.setMode(v.POINTS):H.isSprite&&ZA.setMode(v.TRIANGLES);if(H.isBatchedMesh)H._multiDrawInstances!==null?ZA.renderMultiDrawInstances(H._multiDrawStarts,H._multiDrawCounts,H._multiDrawCount,H._multiDrawInstances):ZA.renderMultiDraw(H._multiDrawStarts,H._multiDrawCounts,H._multiDrawCount);else if(H.isInstancedMesh)ZA.renderInstances(XA,It,H.count);else if(J.isInstancedBufferGeometry){const xA=J._maxInstanceCount!==void 0?J._maxInstanceCount:1/0,Nt=Math.min(J.instanceCount,xA);ZA.renderInstances(XA,It,Nt)}else ZA.render(XA,It)};function gt(y,G,J){y.transparent===!0&&y.side===ce&&y.forceSinglePass===!1?(y.side=Lt,y.needsUpdate=!0,ln(y,G,J),y.side=de,y.needsUpdate=!0,ln(y,G,J),y.side=ce):ln(y,G,J)}this.compile=function(y,G,J=null){J===null&&(J=y),h=hA.get(J),h.init(G),p.push(h),J.traverseVisible(function(H){H.isLight&&H.layers.test(G.layers)&&(h.pushLight(H),H.castShadow&&h.pushShadow(H))}),y!==J&&y.traverseVisible(function(H){H.isLight&&H.layers.test(G.layers)&&(h.pushLight(H),H.castShadow&&h.pushShadow(H))}),h.setupLights();const K=new Set;return y.traverse(function(H){const QA=H.material;if(QA)if(Array.isArray(QA))for(let yA=0;yA{function QA(){if(K.forEach(function(yA){fA.get(yA).currentProgram.isReady()&&K.delete(yA)}),K.size===0){H(y);return}setTimeout(QA,10)}iA.get("KHR_parallel_shader_compile")!==null?QA():setTimeout(QA,10)})};let tt=null;function VA(y){tt&&tt(y)}function mt(){Ut.stop()}function ht(){Ut.start()}const Ut=new Xa;Ut.setAnimationLoop(VA),typeof self<"u"&&Ut.setContext(self),this.setAnimationLoop=function(y){tt=y,S.setAnimationLoop(y),y===null?Ut.stop():Ut.start()},S.addEventListener("sessionstart",mt),S.addEventListener("sessionend",ht),this.render=function(y,G){if(G!==void 0&&G.isCamera!==!0){console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");return}if(f===!0)return;if(y.matrixWorldAutoUpdate===!0&&y.updateMatrixWorld(),G.parent===null&&G.matrixWorldAutoUpdate===!0&&G.updateMatrixWorld(),S.enabled===!0&&S.isPresenting===!0&&(S.cameraAutoUpdate===!0&&S.updateCamera(G),G=S.getCamera()),y.isScene===!0&&y.onBeforeRender(d,y,G,R),h=hA.get(y,p.length),h.init(G),p.push(h),mA.multiplyMatrices(G.projectionMatrix,G.matrixWorldInverse),WA.setFromProjectionMatrix(mA),nA=this.localClippingEnabled,Z=cA.init(this.clippingPlanes,nA),l=MA.get(y,B.length),l.init(),B.push(l),S.enabled===!0&&S.isPresenting===!0){const QA=d.xr.getDepthSensingMesh();QA!==null&&pe(QA,G,-1/0,d.sortObjects)}pe(y,G,0,d.sortObjects),l.finish(),d.sortObjects===!0&&l.sort(z,BA),GA=S.enabled===!1||S.isPresenting===!1||S.hasDepthSensing()===!1,GA&&EA.addToRenderList(l,y),this.info.render.frame++,Z===!0&&cA.beginShadows();const J=h.state.shadowsArray;kA.render(J,y,G),Z===!0&&cA.endShadows(),this.info.autoReset===!0&&this.info.reset();const K=l.opaque,H=l.transmissive;if(h.setupLights(),G.isArrayCamera){const QA=G.cameras;if(H.length>0)for(let yA=0,RA=QA.length;yA0&&lg(K,H,y,G),GA&&EA.render(y),qi(l,y,G);R!==null&&(pA.updateMultisampleRenderTarget(R),pA.updateRenderTargetMipmap(R)),y.isScene===!0&&y.onAfterRender(d,y,G),W.resetDefaultState(),F=-1,m=null,p.pop(),p.length>0?(h=p[p.length-1],Z===!0&&cA.setGlobalState(d.clippingPlanes,h.state.camera)):h=null,B.pop(),B.length>0?l=B[B.length-1]:l=null};function pe(y,G,J,K){if(y.visible===!1)return;if(y.layers.test(G.layers)){if(y.isGroup)J=y.renderOrder;else if(y.isLOD)y.autoUpdate===!0&&y.update(G);else if(y.isLight)h.pushLight(y),y.castShadow&&h.pushShadow(y);else if(y.isSprite){if(!y.frustumCulled||WA.intersectsSprite(y)){K&&CA.setFromMatrixPosition(y.matrixWorld).applyMatrix4(mA);const yA=eA.update(y),RA=y.material;RA.visible&&l.push(y,yA,RA,J,CA.z,null)}}else if((y.isMesh||y.isLine||y.isPoints)&&(!y.frustumCulled||WA.intersectsObject(y))){const yA=eA.update(y),RA=y.material;if(K&&(y.boundingSphere!==void 0?(y.boundingSphere===null&&y.computeBoundingSphere(),CA.copy(y.boundingSphere.center)):(yA.boundingSphere===null&&yA.computeBoundingSphere(),CA.copy(yA.boundingSphere.center)),CA.applyMatrix4(y.matrixWorld).applyMatrix4(mA)),Array.isArray(RA)){const NA=yA.groups;for(let bA=0,PA=NA.length;bA0&&cn(H,G,J),QA.length>0&&cn(QA,G,J),yA.length>0&&cn(yA,G,J),rA.buffers.depth.setTest(!0),rA.buffers.depth.setMask(!0),rA.buffers.color.setMask(!0),rA.setPolygonOffset(!1)}function lg(y,G,J,K){if((J.isScene===!0?J.overrideMaterial:null)!==null)return;h.state.transmissionRenderTarget[K.id]===void 0&&(h.state.transmissionRenderTarget[K.id]=new je(1,1,{generateMipmaps:!0,type:iA.has("EXT_color_buffer_half_float")||iA.has("EXT_color_buffer_float")?Ss:Ge,minFilter:Xe,samples:4,stencilBuffer:s,resolveDepthBuffer:!1,resolveStencilBuffer:!1,colorSpace:At.workingColorSpace}));const QA=h.state.transmissionRenderTarget[K.id],yA=K.viewport||u;QA.setSize(yA.z,yA.w);const RA=d.getRenderTarget();d.setRenderTarget(QA),d.getClearColor(T),P=d.getClearAlpha(),P<1&&d.setClearColor(16777215,.5),GA?EA.render(J):d.clear();const NA=d.toneMapping;d.toneMapping=Ue;const bA=K.viewport;if(K.viewport!==void 0&&(K.viewport=void 0),h.setupLightsView(K),Z===!0&&cA.setGlobalState(d.clippingPlanes,K),cn(y,J,K),pA.updateMultisampleRenderTarget(QA),pA.updateRenderTargetMipmap(QA),iA.has("WEBGL_multisampled_render_to_texture")===!1){let PA=!1;for(let vA=0,XA=G.length;vA0),vA=!!J.morphAttributes.position,XA=!!J.morphAttributes.normal,at=!!J.morphAttributes.color;let It=Ue;K.toneMapped&&(R===null||R.isXRRenderTarget===!0)&&(It=d.toneMapping);const Gt=J.morphAttributes.position||J.morphAttributes.normal||J.morphAttributes.color,ZA=Gt!==void 0?Gt.length:0,xA=fA.get(K),Nt=h.state.lights;if(Z===!0&&(nA===!0||y!==m)){const bt=y===m&&K.id===F;cA.setState(K,y,bt)}let et=!1;K.version===xA.__version?(xA.needsLights&&xA.lightsStateVersion!==Nt.state.version||xA.outputColorSpace!==RA||H.isBatchedMesh&&xA.batching===!1||!H.isBatchedMesh&&xA.batching===!0||H.isBatchedMesh&&xA.batchingColor===!0&&H.colorTexture===null||H.isBatchedMesh&&xA.batchingColor===!1&&H.colorTexture!==null||H.isInstancedMesh&&xA.instancing===!1||!H.isInstancedMesh&&xA.instancing===!0||H.isSkinnedMesh&&xA.skinning===!1||!H.isSkinnedMesh&&xA.skinning===!0||H.isInstancedMesh&&xA.instancingColor===!0&&H.instanceColor===null||H.isInstancedMesh&&xA.instancingColor===!1&&H.instanceColor!==null||H.isInstancedMesh&&xA.instancingMorph===!0&&H.morphTexture===null||H.isInstancedMesh&&xA.instancingMorph===!1&&H.morphTexture!==null||xA.envMap!==NA||K.fog===!0&&xA.fog!==QA||xA.numClippingPlanes!==void 0&&(xA.numClippingPlanes!==cA.numPlanes||xA.numIntersection!==cA.numIntersection)||xA.vertexAlphas!==bA||xA.vertexTangents!==PA||xA.morphTargets!==vA||xA.morphNormals!==XA||xA.morphColors!==at||xA.toneMapping!==It||xA.morphTargetsCount!==ZA)&&(et=!0):(et=!0,xA.__version=K.version);let ge=xA.currentProgram;et===!0&&(ge=ln(K,G,H));let dn=!1,be=!1,Ps=!1;const ft=ge.getUniforms(),De=xA.uniforms;if(rA.useProgram(ge.program)&&(dn=!0,be=!0,Ps=!0),K.id!==F&&(F=K.id,be=!0),dn||m!==y){ft.setValue(v,"projectionMatrix",y.projectionMatrix),ft.setValue(v,"viewMatrix",y.matrixWorldInverse);const bt=ft.map.cameraPosition;bt!==void 0&&bt.setValue(v,CA.setFromMatrixPosition(y.matrixWorld)),IA.logarithmicDepthBuffer&&ft.setValue(v,"logDepthBufFC",2/(Math.log(y.far+1)/Math.LN2)),(K.isMeshPhongMaterial||K.isMeshToonMaterial||K.isMeshLambertMaterial||K.isMeshBasicMaterial||K.isMeshStandardMaterial||K.isShaderMaterial)&&ft.setValue(v,"isOrthographic",y.isOrthographicCamera===!0),m!==y&&(m=y,be=!0,Ps=!0)}if(H.isSkinnedMesh){ft.setOptional(v,H,"bindMatrix"),ft.setOptional(v,H,"bindMatrixInverse");const bt=H.skeleton;bt&&(bt.boneTexture===null&&bt.computeBoneTexture(),ft.setValue(v,"boneTexture",bt.boneTexture,pA))}H.isBatchedMesh&&(ft.setOptional(v,H,"batchingTexture"),ft.setValue(v,"batchingTexture",H._matricesTexture,pA),ft.setOptional(v,H,"batchingColorTexture"),H._colorsTexture!==null&&ft.setValue(v,"batchingColorTexture",H._colorsTexture,pA));const Os=J.morphAttributes;if((Os.position!==void 0||Os.normal!==void 0||Os.color!==void 0)&&wA.update(H,J,ge),(be||xA.receiveShadow!==H.receiveShadow)&&(xA.receiveShadow=H.receiveShadow,ft.setValue(v,"receiveShadow",H.receiveShadow)),K.isMeshGouraudMaterial&&K.envMap!==null&&(De.envMap.value=NA,De.flipEnvMap.value=NA.isCubeTexture&&NA.isRenderTargetTexture===!1?-1:1),K.isMeshStandardMaterial&&K.envMap===null&&G.environment!==null&&(De.envMapIntensity.value=G.environmentIntensity),be&&(ft.setValue(v,"toneMappingExposure",d.toneMappingExposure),xA.needsLights&&JI(De,Ps),QA&&K.fog===!0&&gA.refreshFogUniforms(De,QA),gA.refreshMaterialUniforms(De,K,oA,O,h.state.transmissionRenderTarget[y.id]),gs.upload(v,ug(xA),De,pA)),K.isShaderMaterial&&K.uniformsNeedUpdate===!0&&(gs.upload(v,ug(xA),De,pA),K.uniformsNeedUpdate=!1),K.isSpriteMaterial&&ft.setValue(v,"center",H.center),ft.setValue(v,"modelViewMatrix",H.modelViewMatrix),ft.setValue(v,"normalMatrix",H.normalMatrix),ft.setValue(v,"modelMatrix",H.matrixWorld),K.isShaderMaterial||K.isRawShaderMaterial){const bt=K.uniformsGroups;for(let Js=0,YI=bt.length;Js0&&pA.useMultisampledRTT(y)===!1?H=fA.get(y).__webglMultisampledFramebuffer:Array.isArray(PA)?H=PA[J]:H=PA,u.copy(y.viewport),L.copy(y.scissor),k=y.scissorTest}else u.copy(dA).multiplyScalar(oA).floor(),L.copy(uA).multiplyScalar(oA).floor(),k=HA;if(rA.bindFramebuffer(v.FRAMEBUFFER,H)&&K&&rA.drawBuffers(y,H),rA.viewport(u),rA.scissor(L),rA.setScissorTest(k),QA){const NA=fA.get(y.texture);v.framebufferTexture2D(v.FRAMEBUFFER,v.COLOR_ATTACHMENT0,v.TEXTURE_CUBE_MAP_POSITIVE_X+G,NA.__webglTexture,J)}else if(yA){const NA=fA.get(y.texture),bA=G||0;v.framebufferTextureLayer(v.FRAMEBUFFER,v.COLOR_ATTACHMENT0,NA.__webglTexture,J||0,bA)}F=-1},this.readRenderTargetPixels=function(y,G,J,K,H,QA,yA){if(!(y&&y.isWebGLRenderTarget)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");return}let RA=fA.get(y).__webglFramebuffer;if(y.isWebGLCubeRenderTarget&&yA!==void 0&&(RA=RA[yA]),RA){rA.bindFramebuffer(v.FRAMEBUFFER,RA);try{const NA=y.texture,bA=NA.format,PA=NA.type;if(!IA.textureFormatReadable(bA)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");return}if(!IA.textureTypeReadable(PA)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");return}G>=0&&G<=y.width-K&&J>=0&&J<=y.height-H&&v.readPixels(G,J,K,H,U.convert(bA),U.convert(PA),QA)}finally{const NA=R!==null?fA.get(R).__webglFramebuffer:null;rA.bindFramebuffer(v.FRAMEBUFFER,NA)}}},this.readRenderTargetPixelsAsync=async function(y,G,J,K,H,QA,yA){if(!(y&&y.isWebGLRenderTarget))throw new Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let RA=fA.get(y).__webglFramebuffer;if(y.isWebGLCubeRenderTarget&&yA!==void 0&&(RA=RA[yA]),RA){rA.bindFramebuffer(v.FRAMEBUFFER,RA);try{const NA=y.texture,bA=NA.format,PA=NA.type;if(!IA.textureFormatReadable(bA))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.");if(!IA.textureTypeReadable(PA))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.");if(G>=0&&G<=y.width-K&&J>=0&&J<=y.height-H){const vA=v.createBuffer();v.bindBuffer(v.PIXEL_PACK_BUFFER,vA),v.bufferData(v.PIXEL_PACK_BUFFER,QA.byteLength,v.STREAM_READ),v.readPixels(G,J,K,H,U.convert(bA),U.convert(PA),0),v.flush();const XA=v.fenceSync(v.SYNC_GPU_COMMANDS_COMPLETE,0);await uC(v,XA,4);try{v.bindBuffer(v.PIXEL_PACK_BUFFER,vA),v.getBufferSubData(v.PIXEL_PACK_BUFFER,0,QA)}finally{v.deleteBuffer(vA),v.deleteSync(XA)}return QA}}finally{const NA=R!==null?fA.get(R).__webglFramebuffer:null;rA.bindFramebuffer(v.FRAMEBUFFER,NA)}}},this.copyFramebufferToTexture=function(y,G=null,J=0){y.isTexture!==!0&&(console.warn("WebGLRenderer: copyFramebufferToTexture function signature has changed."),G=arguments[0]||null,y=arguments[1]);const K=Math.pow(2,-J),H=Math.floor(y.image.width*K),QA=Math.floor(y.image.height*K),yA=G!==null?G.x:0,RA=G!==null?G.y:0;pA.setTexture2D(y,0),v.copyTexSubImage2D(v.TEXTURE_2D,J,0,0,yA,RA,H,QA),rA.unbindTexture()},this.copyTextureToTexture=function(y,G,J=null,K=null,H=0){y.isTexture!==!0&&(console.warn("WebGLRenderer: copyTextureToTexture function signature has changed."),K=arguments[0]||null,y=arguments[1],G=arguments[2],H=arguments[3]||0,J=null);let QA,yA,RA,NA,bA,PA;J!==null?(QA=J.max.x-J.min.x,yA=J.max.y-J.min.y,RA=J.min.x,NA=J.min.y):(QA=y.image.width,yA=y.image.height,RA=0,NA=0),K!==null?(bA=K.x,PA=K.y):(bA=0,PA=0);const vA=U.convert(G.format),XA=U.convert(G.type);pA.setTexture2D(G,0),v.pixelStorei(v.UNPACK_FLIP_Y_WEBGL,G.flipY),v.pixelStorei(v.UNPACK_PREMULTIPLY_ALPHA_WEBGL,G.premultiplyAlpha),v.pixelStorei(v.UNPACK_ALIGNMENT,G.unpackAlignment);const at=v.getParameter(v.UNPACK_ROW_LENGTH),It=v.getParameter(v.UNPACK_IMAGE_HEIGHT),Gt=v.getParameter(v.UNPACK_SKIP_PIXELS),ZA=v.getParameter(v.UNPACK_SKIP_ROWS),xA=v.getParameter(v.UNPACK_SKIP_IMAGES),Nt=y.isCompressedTexture?y.mipmaps[H]:y.image;v.pixelStorei(v.UNPACK_ROW_LENGTH,Nt.width),v.pixelStorei(v.UNPACK_IMAGE_HEIGHT,Nt.height),v.pixelStorei(v.UNPACK_SKIP_PIXELS,RA),v.pixelStorei(v.UNPACK_SKIP_ROWS,NA),y.isDataTexture?v.texSubImage2D(v.TEXTURE_2D,H,bA,PA,QA,yA,vA,XA,Nt.data):y.isCompressedTexture?v.compressedTexSubImage2D(v.TEXTURE_2D,H,bA,PA,Nt.width,Nt.height,vA,Nt.data):v.texSubImage2D(v.TEXTURE_2D,H,bA,PA,vA,XA,Nt),v.pixelStorei(v.UNPACK_ROW_LENGTH,at),v.pixelStorei(v.UNPACK_IMAGE_HEIGHT,It),v.pixelStorei(v.UNPACK_SKIP_PIXELS,Gt),v.pixelStorei(v.UNPACK_SKIP_ROWS,ZA),v.pixelStorei(v.UNPACK_SKIP_IMAGES,xA),H===0&&G.generateMipmaps&&v.generateMipmap(v.TEXTURE_2D),rA.unbindTexture()},this.copyTextureToTexture3D=function(y,G,J=null,K=null,H=0){y.isTexture!==!0&&(console.warn("WebGLRenderer: copyTextureToTexture3D function signature has changed."),J=arguments[0]||null,K=arguments[1]||null,y=arguments[2],G=arguments[3],H=arguments[4]||0);let QA,yA,RA,NA,bA,PA,vA,XA,at;const It=y.isCompressedTexture?y.mipmaps[H]:y.image;J!==null?(QA=J.max.x-J.min.x,yA=J.max.y-J.min.y,RA=J.max.z-J.min.z,NA=J.min.x,bA=J.min.y,PA=J.min.z):(QA=It.width,yA=It.height,RA=It.depth,NA=0,bA=0,PA=0),K!==null?(vA=K.x,XA=K.y,at=K.z):(vA=0,XA=0,at=0);const Gt=U.convert(G.format),ZA=U.convert(G.type);let xA;if(G.isData3DTexture)pA.setTexture3D(G,0),xA=v.TEXTURE_3D;else if(G.isDataArrayTexture||G.isCompressedArrayTexture)pA.setTexture2DArray(G,0),xA=v.TEXTURE_2D_ARRAY;else{console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.");return}v.pixelStorei(v.UNPACK_FLIP_Y_WEBGL,G.flipY),v.pixelStorei(v.UNPACK_PREMULTIPLY_ALPHA_WEBGL,G.premultiplyAlpha),v.pixelStorei(v.UNPACK_ALIGNMENT,G.unpackAlignment);const Nt=v.getParameter(v.UNPACK_ROW_LENGTH),et=v.getParameter(v.UNPACK_IMAGE_HEIGHT),ge=v.getParameter(v.UNPACK_SKIP_PIXELS),dn=v.getParameter(v.UNPACK_SKIP_ROWS),be=v.getParameter(v.UNPACK_SKIP_IMAGES);v.pixelStorei(v.UNPACK_ROW_LENGTH,It.width),v.pixelStorei(v.UNPACK_IMAGE_HEIGHT,It.height),v.pixelStorei(v.UNPACK_SKIP_PIXELS,NA),v.pixelStorei(v.UNPACK_SKIP_ROWS,bA),v.pixelStorei(v.UNPACK_SKIP_IMAGES,PA),y.isDataTexture||y.isData3DTexture?v.texSubImage3D(xA,H,vA,XA,at,QA,yA,RA,Gt,ZA,It.data):G.isCompressedArrayTexture?v.compressedTexSubImage3D(xA,H,vA,XA,at,QA,yA,RA,Gt,It.data):v.texSubImage3D(xA,H,vA,XA,at,QA,yA,RA,Gt,ZA,It),v.pixelStorei(v.UNPACK_ROW_LENGTH,Nt),v.pixelStorei(v.UNPACK_IMAGE_HEIGHT,et),v.pixelStorei(v.UNPACK_SKIP_PIXELS,ge),v.pixelStorei(v.UNPACK_SKIP_ROWS,dn),v.pixelStorei(v.UNPACK_SKIP_IMAGES,be),H===0&&G.generateMipmaps&&v.generateMipmap(xA),rA.unbindTexture()},this.initRenderTarget=function(y){fA.get(y).__webglFramebuffer===void 0&&pA.setupRenderTarget(y)},this.initTexture=function(y){y.isCubeTexture?pA.setTextureCube(y,0):y.isData3DTexture?pA.setTexture3D(y,0):y.isDataArrayTexture||y.isCompressedArrayTexture?pA.setTexture2DArray(y,0):pA.setTexture2D(y,0),rA.unbindTexture()},this.resetState=function(){_=0,w=0,R=null,rA.reset(),W.reset()},typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}get coordinateSystem(){return le}get outputColorSpace(){return this._outputColorSpace}set outputColorSpace(A){this._outputColorSpace=A;const t=this.getContext();t.drawingBufferColorSpace=A===Ag?"display-p3":"srgb",t.unpackColorSpace=At.workingColorSpace===Ms?"display-p3":"srgb"}}class ls{constructor(A,t=25e-5){this.isFogExp2=!0,this.name="",this.color=new FA(A),this.density=t}clone(){return new ls(this.color,this.density)}toJSON(){return{type:"FogExp2",name:this.name,color:this.color.getHex(),density:this.density}}}class Rl extends st{constructor(){super(),this.isScene=!0,this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.backgroundBlurriness=0,this.backgroundIntensity=1,this.backgroundRotation=new Jt,this.environmentIntensity=1,this.environmentRotation=new Jt,this.overrideMaterial=null,typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(A,t){return super.copy(A,t),A.background!==null&&(this.background=A.background.clone()),A.environment!==null&&(this.environment=A.environment.clone()),A.fog!==null&&(this.fog=A.fog.clone()),this.backgroundBlurriness=A.backgroundBlurriness,this.backgroundIntensity=A.backgroundIntensity,this.backgroundRotation.copy(A.backgroundRotation),this.environmentIntensity=A.environmentIntensity,this.environmentRotation.copy(A.environmentRotation),A.overrideMaterial!==null&&(this.overrideMaterial=A.overrideMaterial.clone()),this.matrixAutoUpdate=A.matrixAutoUpdate,this}toJSON(A){const t=super.toJSON(A);return this.fog!==null&&(t.object.fog=this.fog.toJSON()),this.backgroundBlurriness>0&&(t.object.backgroundBlurriness=this.backgroundBlurriness),this.backgroundIntensity!==1&&(t.object.backgroundIntensity=this.backgroundIntensity),t.object.backgroundRotation=this.backgroundRotation.toArray(),this.environmentIntensity!==1&&(t.object.environmentIntensity=this.environmentIntensity),t.object.environmentRotation=this.environmentRotation.toArray(),t}}class Sl{constructor(A,t){this.isInterleavedBuffer=!0,this.array=A,this.stride=t,this.count=A!==void 0?A.length/t:0,this.usage=qo,this._updateRange={offset:0,count:-1},this.updateRanges=[],this.version=0,this.uuid=Ot()}onUploadCallback(){}set needsUpdate(A){A===!0&&this.version++}get updateRange(){return eg("THREE.InterleavedBuffer: updateRange() is deprecated and will be removed in r169. Use addUpdateRange() instead."),this._updateRange}setUsage(A){return this.usage=A,this}addUpdateRange(A,t){this.updateRanges.push({start:A,count:t})}clearUpdateRanges(){this.updateRanges.length=0}copy(A){return this.array=new A.array.constructor(A.array),this.count=A.count,this.stride=A.stride,this.usage=A.usage,this}copyAt(A,t,e){A*=this.stride,e*=t.stride;for(let i=0,s=this.stride;iA.far||t.push({distance:r,point:zi.clone(),uv:zt.getInterpolation(zi,On,Zi,Jn,Jr,mo,qr,new AA),face:null,object:this})}copy(A,t){return super.copy(A,t),A.center!==void 0&&this.center.copy(A.center),this.material=A.material,this}}function qn(n,A,t,e,i,s){pi.subVectors(n,t).addScalar(.5).multiply(e),i!==void 0?(Xi.x=s*pi.x-i*pi.y,Xi.y=i*pi.x+s*pi.y):Xi.copy(pi),n.copy(A),n.x+=Xi.x,n.y+=Xi.y,n.applyMatrix4(nI)}const Yr=new M,Kr=new nt,Wr=new nt,Nl=new M,Vr=new KA,Yn=new M,yo=new fe,zr=new KA,wo=new Hi;class Af extends St{constructor(A,t){super(A,t),this.isSkinnedMesh=!0,this.type="SkinnedMesh",this.bindMode=Rg,this.bindMatrix=new KA,this.bindMatrixInverse=new KA,this.boundingBox=null,this.boundingSphere=null}computeBoundingBox(){const A=this.geometry;this.boundingBox===null&&(this.boundingBox=new jt),this.boundingBox.makeEmpty();const t=A.getAttribute("position");for(let e=0;e0){const i=t[e[0]];if(i!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let s=0,o=i.length;se)return;Ro.applyMatrix4(n.matrixWorld);const r=A.ray.origin.distanceTo(Ro);if(!(rA.far))return{distance:r,point:ta.clone().applyMatrix4(n.matrixWorld),index:i,face:null,faceIndex:null,object:n}}const ea=new M,ia=new M;class Fs extends In{constructor(A,t){super(A,t),this.isLineSegments=!0,this.type="LineSegments"}computeLineDistances(){const A=this.geometry;if(A.index===null){const t=A.attributes.position,e=[];for(let i=0,s=t.count;i0){const i=t[e[0]];if(i!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let s=0,o=i.length;si.far)return;s.push({distance:a,distanceToRay:Math.sqrt(g),point:r,index:A,face:null,object:o})}}class sf extends Bt{constructor(A,t){super({width:A,height:t}),this.isFramebufferTexture=!0,this.magFilter=Rt,this.minFilter=Rt,this.generateMipmaps=!1,this.needsUpdate=!0}}class vl extends Bt{constructor(A,t,e,i,s,o,g,r,a){super(A,t,e,i,s,o,g,r,a),this.isCanvasTexture=!0,this.needsUpdate=!0}}class se{constructor(){this.type="Curve",this.arcLengthDivisions=200}getPoint(){return console.warn("THREE.Curve: .getPoint() not implemented."),null}getPointAt(A,t){const e=this.getUtoTmapping(A);return this.getPoint(e,t)}getPoints(A=5){const t=[];for(let e=0;e<=A;e++)t.push(this.getPoint(e/A));return t}getSpacedPoints(A=5){const t=[];for(let e=0;e<=A;e++)t.push(this.getPointAt(e/A));return t}getLength(){const A=this.getLengths();return A[A.length-1]}getLengths(A=this.arcLengthDivisions){if(this.cacheArcLengths&&this.cacheArcLengths.length===A+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;const t=[];let e,i=this.getPoint(0),s=0;t.push(0);for(let o=1;o<=A;o++)e=this.getPoint(o/A),s+=e.distanceTo(i),t.push(s),i=e;return this.cacheArcLengths=t,t}updateArcLengths(){this.needsUpdate=!0,this.getLengths()}getUtoTmapping(A,t){const e=this.getLengths();let i=0;const s=e.length;let o;t?o=t:o=A*e[s-1];let g=0,r=s-1,a;for(;g<=r;)if(i=Math.floor(g+(r-g)/2),a=e[i]-o,a<0)g=i+1;else if(a>0)r=i-1;else{r=i;break}if(i=r,e[i]===o)return i/(s-1);const I=e[i],C=e[i+1]-I,Q=(o-I)/C;return(i+Q)/(s-1)}getTangent(A,t){let i=A-1e-4,s=A+1e-4;i<0&&(i=0),s>1&&(s=1);const o=this.getPoint(i),g=this.getPoint(s),r=t||(o.isVector2?new AA:new M);return r.copy(g).sub(o).normalize(),r}getTangentAt(A,t){const e=this.getUtoTmapping(A);return this.getTangent(e,t)}computeFrenetFrames(A,t){const e=new M,i=[],s=[],o=[],g=new M,r=new KA;for(let Q=0;Q<=A;Q++){const c=Q/A;i[Q]=this.getTangentAt(c,new M)}s[0]=new M,o[0]=new M;let a=Number.MAX_VALUE;const I=Math.abs(i[0].x),E=Math.abs(i[0].y),C=Math.abs(i[0].z);I<=a&&(a=I,e.set(1,0,0)),E<=a&&(a=E,e.set(0,1,0)),C<=a&&e.set(0,0,1),g.crossVectors(i[0],e).normalize(),s[0].crossVectors(i[0],g),o[0].crossVectors(i[0],s[0]);for(let Q=1;Q<=A;Q++){if(s[Q]=s[Q-1].clone(),o[Q]=o[Q-1].clone(),g.crossVectors(i[Q-1],i[Q]),g.length()>Number.EPSILON){g.normalize();const c=Math.acos(lt(i[Q-1].dot(i[Q]),-1,1));s[Q].applyMatrix4(r.makeRotationAxis(g,c))}o[Q].crossVectors(i[Q],s[Q])}if(t===!0){let Q=Math.acos(lt(s[0].dot(s[A]),-1,1));Q/=A,i[0].dot(g.crossVectors(s[0],s[A]))>0&&(Q=-Q);for(let c=1;c<=A;c++)s[c].applyMatrix4(r.makeRotationAxis(i[c],Q*c)),o[c].crossVectors(i[c],s[c])}return{tangents:i,normals:s,binormals:o}}clone(){return new this.constructor().copy(this)}copy(A){return this.arcLengthDivisions=A.arcLengthDivisions,this}toJSON(){const A={metadata:{version:4.6,type:"Curve",generator:"Curve.toJSON"}};return A.arcLengthDivisions=this.arcLengthDivisions,A.type=this.type,A}fromJSON(A){return this.arcLengthDivisions=A.arcLengthDivisions,this}}class gg extends se{constructor(A=0,t=0,e=1,i=1,s=0,o=Math.PI*2,g=!1,r=0){super(),this.isEllipseCurve=!0,this.type="EllipseCurve",this.aX=A,this.aY=t,this.xRadius=e,this.yRadius=i,this.aStartAngle=s,this.aEndAngle=o,this.aClockwise=g,this.aRotation=r}getPoint(A,t=new AA){const e=t,i=Math.PI*2;let s=this.aEndAngle-this.aStartAngle;const o=Math.abs(s)i;)s-=i;s0?0:(Math.floor(Math.abs(g)/s)+1)*s:r===0&&g===s-1&&(g=s-2,r=1);let a,I;this.closed||g>0?a=i[(g-1)%s]:(Zn.subVectors(i[0],i[1]).add(i[0]),a=Zn);const E=i[g%s],C=i[(g+1)%s];if(this.closed||g+2i.length-2?i.length-1:o+1],E=i[o>i.length-3?i.length-1:o+2];return e.set(oa(g,r.x,a.x,I.x,E.x),oa(g,r.y,a.y,I.y,E.y)),e}copy(A){super.copy(A),this.points=[];for(let t=0,e=A.points.length;t=e){const o=i[s]-e,g=this.curves[s],r=g.getLength(),a=r===0?0:1-o/r;return g.getPointAt(a,t)}s++}return null}getLength(){const A=this.getCurveLengths();return A[A.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;const A=[];let t=0;for(let e=0,i=this.curves.length;e1&&!t[t.length-1].equals(t[0])&&t.push(t[0]),t}copy(A){super.copy(A),this.curves=[];for(let t=0,e=A.curves.length;t0){const E=a.getPoint(0);E.equals(this.currentPoint)||this.lineTo(E.x,E.y)}this.curves.push(a);const I=a.getPoint(1);return this.currentPoint.copy(I),this}copy(A){return super.copy(A),this.currentPoint.copy(A.currentPoint),this}toJSON(){const A=super.toJSON();return A.currentPoint=this.currentPoint.toArray(),A}fromJSON(A){return super.fromJSON(A),this.currentPoint.fromArray(A.currentPoint),this}}class ag extends it{constructor(A=[new AA(0,-.5),new AA(.5,0),new AA(0,.5)],t=12,e=0,i=Math.PI*2){super(),this.type="LatheGeometry",this.parameters={points:A,segments:t,phiStart:e,phiLength:i},t=Math.floor(t),i=lt(i,0,Math.PI*2);const s=[],o=[],g=[],r=[],a=[],I=1/t,E=new M,C=new AA,Q=new M,c=new M,l=new M;let h=0,B=0;for(let p=0;p<=A.length-1;p++)switch(p){case 0:h=A[p+1].x-A[p].x,B=A[p+1].y-A[p].y,Q.x=B*1,Q.y=-h,Q.z=B*0,l.copy(Q),Q.normalize(),r.push(Q.x,Q.y,Q.z);break;case A.length-1:r.push(l.x,l.y,l.z);break;default:h=A[p+1].x-A[p].x,B=A[p+1].y-A[p].y,Q.x=B*1,Q.y=-h,Q.z=B*0,c.copy(Q),Q.x+=l.x,Q.y+=l.y,Q.z+=l.z,Q.normalize(),r.push(Q.x,Q.y,Q.z),l.copy(c)}for(let p=0;p<=t;p++){const d=e+p*I*i,f=Math.sin(d),_=Math.cos(d);for(let w=0;w<=A.length-1;w++){E.x=A[w].x*f,E.y=A[w].y,E.z=A[w].x*_,o.push(E.x,E.y,E.z),C.x=p/t,C.y=w/(A.length-1),g.push(C.x,C.y);const R=r[3*w+0]*f,F=r[3*w+1],m=r[3*w+0]*_;a.push(R,F,m)}}for(let p=0;p0&&d(!0),t>0&&d(!1)),this.setIndex(I),this.setAttribute("position",new OA(E,3)),this.setAttribute("normal",new OA(C,3)),this.setAttribute("uv",new OA(Q,2));function p(){const f=new M,_=new M;let w=0;const R=(t-A)/e;for(let F=0;F<=s;F++){const m=[],u=F/s,L=u*(t-A)+A;for(let k=0;k<=i;k++){const T=k/i,P=T*r+g,V=Math.sin(P),O=Math.cos(P);_.x=L*V,_.y=-u*e+h,_.z=L*O,E.push(_.x,_.y,_.z),f.set(V,R,O).normalize(),C.push(f.x,f.y,f.z),Q.push(T,1-u),m.push(c++)}l.push(m)}for(let F=0;F.9&&R<.1&&(d<.2&&(o[p+0]+=1),f<.2&&(o[p+2]+=1),_<.2&&(o[p+4]+=1))}}function C(p){s.push(p.x,p.y,p.z)}function Q(p,d){const f=p*3;d.x=A[f+0],d.y=A[f+1],d.z=A[f+2]}function c(){const p=new M,d=new M,f=new M,_=new M,w=new AA,R=new AA,F=new AA;for(let m=0,u=0;m80*t){g=a=n[0],r=I=n[1];for(let c=t;ca&&(a=E),C>I&&(I=C);Q=Math.max(a-g,I-r),Q=Q!==0?32767/Q:0}return En(s,o,t,g,r,Q,0),o}};function hI(n,A,t,e,i){let s,o;if(i===Id(n,A,t,e)>0)for(s=A;s=A;s-=e)o=ga(s,n[s],n[s+1],o);return o&&vs(o,o.next)&&(Qn(o),o=o.next),o}function $e(n,A){if(!n)return n;A||(A=n);let t=n,e;do if(e=!1,!t.steiner&&(vs(t,t.next)||rt(t.prev,t,t.next)===0)){if(Qn(t),t=A=t.prev,t===t.next)break;e=!0}else t=t.next;while(e||t!==A);return A}function En(n,A,t,e,i,s,o){if(!n)return;!o&&s&&nd(n,e,i,s);let g=n,r,a;for(;n.prev!==n.next;){if(r=n.prev,a=n.next,s?Xl(n,e,i,s):zl(n)){A.push(r.i/t|0),A.push(n.i/t|0),A.push(a.i/t|0),Qn(n),n=a.next,g=a.next;continue}if(n=a,n===g){o?o===1?(n=Zl($e(n),A,t),En(n,A,t,e,i,s,2)):o===2&&jl(n,A,t,e,i,s):En($e(n),A,t,e,i,s,1);break}}}function zl(n){const A=n.prev,t=n,e=n.next;if(rt(A,t,e)>=0)return!1;const i=A.x,s=t.x,o=e.x,g=A.y,r=t.y,a=e.y,I=is?i>o?i:o:s>o?s:o,Q=g>r?g>a?g:a:r>a?r:a;let c=e.next;for(;c!==A;){if(c.x>=I&&c.x<=C&&c.y>=E&&c.y<=Q&&Mi(i,g,s,r,o,a,c.x,c.y)&&rt(c.prev,c,c.next)>=0)return!1;c=c.next}return!0}function Xl(n,A,t,e){const i=n.prev,s=n,o=n.next;if(rt(i,s,o)>=0)return!1;const g=i.x,r=s.x,a=o.x,I=i.y,E=s.y,C=o.y,Q=gr?g>a?g:a:r>a?r:a,h=I>E?I>C?I:C:E>C?E:C,B=Vo(Q,c,A,t,e),p=Vo(l,h,A,t,e);let d=n.prevZ,f=n.nextZ;for(;d&&d.z>=B&&f&&f.z<=p;){if(d.x>=Q&&d.x<=l&&d.y>=c&&d.y<=h&&d!==i&&d!==o&&Mi(g,I,r,E,a,C,d.x,d.y)&&rt(d.prev,d,d.next)>=0||(d=d.prevZ,f.x>=Q&&f.x<=l&&f.y>=c&&f.y<=h&&f!==i&&f!==o&&Mi(g,I,r,E,a,C,f.x,f.y)&&rt(f.prev,f,f.next)>=0))return!1;f=f.nextZ}for(;d&&d.z>=B;){if(d.x>=Q&&d.x<=l&&d.y>=c&&d.y<=h&&d!==i&&d!==o&&Mi(g,I,r,E,a,C,d.x,d.y)&&rt(d.prev,d,d.next)>=0)return!1;d=d.prevZ}for(;f&&f.z<=p;){if(f.x>=Q&&f.x<=l&&f.y>=c&&f.y<=h&&f!==i&&f!==o&&Mi(g,I,r,E,a,C,f.x,f.y)&&rt(f.prev,f,f.next)>=0)return!1;f=f.nextZ}return!0}function Zl(n,A,t){let e=n;do{const i=e.prev,s=e.next.next;!vs(i,s)&&cI(i,e,e.next,s)&&Cn(i,s)&&Cn(s,i)&&(A.push(i.i/t|0),A.push(e.i/t|0),A.push(s.i/t|0),Qn(e),Qn(e.next),e=n=s),e=e.next}while(e!==n);return $e(e)}function jl(n,A,t,e,i,s){let o=n;do{let g=o.next.next;for(;g!==o.prev;){if(o.i!==g.i&&gd(o,g)){let r=lI(o,g);o=$e(o,o.next),r=$e(r,r.next),En(o,A,t,e,i,s,0),En(r,A,t,e,i,s,0);return}g=g.next}o=o.next}while(o!==n)}function $l(n,A,t,e){const i=[];let s,o,g,r,a;for(s=0,o=A.length;s=t.next.y&&t.next.y!==t.y){const C=t.x+(o-t.y)*(t.next.x-t.x)/(t.next.y-t.y);if(C<=s&&C>e&&(e=C,i=t.x=t.x&&t.x>=r&&s!==t.x&&Mi(oi.x||t.x===i.x&&id(i,t)))&&(i=t,I=E)),t=t.next;while(t!==g);return i}function id(n,A){return rt(n.prev,n,A.prev)<0&&rt(A.next,n,n.next)<0}function nd(n,A,t,e){let i=n;do i.z===0&&(i.z=Vo(i.x,i.y,A,t,e)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next;while(i!==n);i.prevZ.nextZ=null,i.prevZ=null,sd(i)}function sd(n){let A,t,e,i,s,o,g,r,a=1;do{for(t=n,n=null,s=null,o=0;t;){for(o++,e=t,g=0,A=0;A0||r>0&&e;)g!==0&&(r===0||!e||t.z<=e.z)?(i=t,t=t.nextZ,g--):(i=e,e=e.nextZ,r--),s?s.nextZ=i:n=i,i.prevZ=s,s=i;t=e}s.nextZ=null,a*=2}while(o>1);return n}function Vo(n,A,t,e,i){return n=(n-t)*i|0,A=(A-e)*i|0,n=(n|n<<8)&16711935,n=(n|n<<4)&252645135,n=(n|n<<2)&858993459,n=(n|n<<1)&1431655765,A=(A|A<<8)&16711935,A=(A|A<<4)&252645135,A=(A|A<<2)&858993459,A=(A|A<<1)&1431655765,n|A<<1}function od(n){let A=n,t=n;do(A.x=(n-o)*(s-g)&&(n-o)*(e-g)>=(t-o)*(A-g)&&(t-o)*(s-g)>=(i-o)*(e-g)}function gd(n,A){return n.next.i!==A.i&&n.prev.i!==A.i&&!rd(n,A)&&(Cn(n,A)&&Cn(A,n)&&ad(n,A)&&(rt(n.prev,n,A.prev)||rt(n,A.prev,A))||vs(n,A)&&rt(n.prev,n,n.next)>0&&rt(A.prev,A,A.next)>0)}function rt(n,A,t){return(A.y-n.y)*(t.x-A.x)-(A.x-n.x)*(t.y-A.y)}function vs(n,A){return n.x===A.x&&n.y===A.y}function cI(n,A,t,e){const i=$n(rt(n,A,t)),s=$n(rt(n,A,e)),o=$n(rt(t,e,n)),g=$n(rt(t,e,A));return!!(i!==s&&o!==g||i===0&&jn(n,t,A)||s===0&&jn(n,e,A)||o===0&&jn(t,n,e)||g===0&&jn(t,A,e))}function jn(n,A,t){return A.x<=Math.max(n.x,t.x)&&A.x>=Math.min(n.x,t.x)&&A.y<=Math.max(n.y,t.y)&&A.y>=Math.min(n.y,t.y)}function $n(n){return n>0?1:n<0?-1:0}function rd(n,A){let t=n;do{if(t.i!==n.i&&t.next.i!==n.i&&t.i!==A.i&&t.next.i!==A.i&&cI(t,t.next,n,A))return!0;t=t.next}while(t!==n);return!1}function Cn(n,A){return rt(n.prev,n,n.next)<0?rt(n,A,n.next)>=0&&rt(n,n.prev,A)>=0:rt(n,A,n.prev)<0||rt(n,n.next,A)<0}function ad(n,A){let t=n,e=!1;const i=(n.x+A.x)/2,s=(n.y+A.y)/2;do t.y>s!=t.next.y>s&&t.next.y!==t.y&&i<(t.next.x-t.x)*(s-t.y)/(t.next.y-t.y)+t.x&&(e=!e),t=t.next;while(t!==n);return e}function lI(n,A){const t=new zo(n.i,n.x,n.y),e=new zo(A.i,A.x,A.y),i=n.next,s=A.prev;return n.next=A,A.prev=n,t.next=i,i.prev=t,e.next=t,t.prev=e,s.next=e,e.prev=s,e}function ga(n,A,t,e){const i=new zo(n,A,t);return e?(i.next=e.next,i.prev=e,e.next.prev=i,e.next=i):(i.prev=i,i.next=i),i}function Qn(n){n.next.prev=n.prev,n.prev.next=n.next,n.prevZ&&(n.prevZ.nextZ=n.nextZ),n.nextZ&&(n.nextZ.prevZ=n.prevZ)}function zo(n,A,t){this.i=n,this.x=A,this.y=t,this.prev=null,this.next=null,this.z=0,this.prevZ=null,this.nextZ=null,this.steiner=!1}function Id(n,A,t,e){let i=0;for(let s=A,o=t-e;s2&&n[A-1].equals(n[0])&&n.pop()}function aa(n,A){for(let t=0;tNumber.EPSILON){const tA=Math.sqrt(q),gA=Math.sqrt(N*N+D*D),MA=iA.x-TA/tA,hA=iA.y+pA/tA,cA=IA.x-D/gA,kA=IA.y+N/gA,EA=((cA-MA)*D-(kA-hA)*N)/(pA*D-TA*N);rA=MA+pA*EA-j.x,aA=hA+TA*EA-j.y;const wA=rA*rA+aA*aA;if(wA<=2)return new AA(rA,aA);fA=Math.sqrt(wA/2)}else{let tA=!1;pA>Number.EPSILON?N>Number.EPSILON&&(tA=!0):pA<-Number.EPSILON?N<-Number.EPSILON&&(tA=!0):Math.sign(TA)===Math.sign(D)&&(tA=!0),tA?(rA=-TA,aA=pA,fA=Math.sqrt(q)):(rA=pA,aA=TA,fA=Math.sqrt(q/2))}return new AA(rA/fA,aA/fA)}const BA=[];for(let j=0,iA=P.length,IA=iA-1,rA=j+1;j=0;j--){const iA=j/h,IA=Q*Math.cos(iA*Math.PI/2),rA=c*Math.sin(iA*Math.PI/2)+l;for(let aA=0,fA=P.length;aA=0;){const rA=IA;let aA=IA-1;aA<0&&(aA=j.length-1);for(let fA=0,pA=I+h*2;fA0)&&Q.push(d,f,w),(B!==e-1||r0!=A>0&&this.version++,this._anisotropy=A}get clearcoat(){return this._clearcoat}set clearcoat(A){this._clearcoat>0!=A>0&&this.version++,this._clearcoat=A}get iridescence(){return this._iridescence}set iridescence(A){this._iridescence>0!=A>0&&this.version++,this._iridescence=A}get dispersion(){return this._dispersion}set dispersion(A){this._dispersion>0!=A>0&&this.version++,this._dispersion=A}get sheen(){return this._sheen}set sheen(A){this._sheen>0!=A>0&&this.version++,this._sheen=A}get transmission(){return this._transmission}set transmission(A){this._transmission>0!=A>0&&this.version++,this._transmission=A}copy(A){return super.copy(A),this.defines={STANDARD:"",PHYSICAL:""},this.anisotropy=A.anisotropy,this.anisotropyRotation=A.anisotropyRotation,this.anisotropyMap=A.anisotropyMap,this.clearcoat=A.clearcoat,this.clearcoatMap=A.clearcoatMap,this.clearcoatRoughness=A.clearcoatRoughness,this.clearcoatRoughnessMap=A.clearcoatRoughnessMap,this.clearcoatNormalMap=A.clearcoatNormalMap,this.clearcoatNormalScale.copy(A.clearcoatNormalScale),this.dispersion=A.dispersion,this.ior=A.ior,this.iridescence=A.iridescence,this.iridescenceMap=A.iridescenceMap,this.iridescenceIOR=A.iridescenceIOR,this.iridescenceThicknessRange=[...A.iridescenceThicknessRange],this.iridescenceThicknessMap=A.iridescenceThicknessMap,this.sheen=A.sheen,this.sheenColor.copy(A.sheenColor),this.sheenColorMap=A.sheenColorMap,this.sheenRoughness=A.sheenRoughness,this.sheenRoughnessMap=A.sheenRoughnessMap,this.transmission=A.transmission,this.transmissionMap=A.transmissionMap,this.thickness=A.thickness,this.thicknessMap=A.thicknessMap,this.attenuationDistance=A.attenuationDistance,this.attenuationColor.copy(A.attenuationColor),this.specularIntensity=A.specularIntensity,this.specularIntensityMap=A.specularIntensityMap,this.specularColor.copy(A.specularColor),this.specularColorMap=A.specularColorMap,this}}class rf extends $t{constructor(A){super(),this.isMeshPhongMaterial=!0,this.type="MeshPhongMaterial",this.color=new FA(16777215),this.specular=new FA(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new FA(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=Bn,this.normalScale=new AA(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new Jt,this.combine=ws,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(A)}copy(A){return super.copy(A),this.color.copy(A.color),this.specular.copy(A.specular),this.shininess=A.shininess,this.map=A.map,this.lightMap=A.lightMap,this.lightMapIntensity=A.lightMapIntensity,this.aoMap=A.aoMap,this.aoMapIntensity=A.aoMapIntensity,this.emissive.copy(A.emissive),this.emissiveMap=A.emissiveMap,this.emissiveIntensity=A.emissiveIntensity,this.bumpMap=A.bumpMap,this.bumpScale=A.bumpScale,this.normalMap=A.normalMap,this.normalMapType=A.normalMapType,this.normalScale.copy(A.normalScale),this.displacementMap=A.displacementMap,this.displacementScale=A.displacementScale,this.displacementBias=A.displacementBias,this.specularMap=A.specularMap,this.alphaMap=A.alphaMap,this.envMap=A.envMap,this.envMapRotation.copy(A.envMapRotation),this.combine=A.combine,this.reflectivity=A.reflectivity,this.refractionRatio=A.refractionRatio,this.wireframe=A.wireframe,this.wireframeLinewidth=A.wireframeLinewidth,this.wireframeLinecap=A.wireframeLinecap,this.wireframeLinejoin=A.wireframeLinejoin,this.flatShading=A.flatShading,this.fog=A.fog,this}}class Bd extends $t{constructor(A){super(),this.isMeshNormalMaterial=!0,this.type="MeshNormalMaterial",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=Bn,this.normalScale=new AA(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.flatShading=!1,this.setValues(A)}copy(A){return super.copy(A),this.bumpMap=A.bumpMap,this.bumpScale=A.bumpScale,this.normalMap=A.normalMap,this.normalMapType=A.normalMapType,this.normalScale.copy(A.normalScale),this.displacementMap=A.displacementMap,this.displacementScale=A.displacementScale,this.displacementBias=A.displacementBias,this.wireframe=A.wireframe,this.wireframeLinewidth=A.wireframeLinewidth,this.flatShading=A.flatShading,this}}class hd extends $t{constructor(A){super(),this.isMeshLambertMaterial=!0,this.type="MeshLambertMaterial",this.color=new FA(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new FA(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=Bn,this.normalScale=new AA(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new Jt,this.combine=ws,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(A)}copy(A){return super.copy(A),this.color.copy(A.color),this.map=A.map,this.lightMap=A.lightMap,this.lightMapIntensity=A.lightMapIntensity,this.aoMap=A.aoMap,this.aoMapIntensity=A.aoMapIntensity,this.emissive.copy(A.emissive),this.emissiveMap=A.emissiveMap,this.emissiveIntensity=A.emissiveIntensity,this.bumpMap=A.bumpMap,this.bumpScale=A.bumpScale,this.normalMap=A.normalMap,this.normalMapType=A.normalMapType,this.normalScale.copy(A.normalScale),this.displacementMap=A.displacementMap,this.displacementScale=A.displacementScale,this.displacementBias=A.displacementBias,this.specularMap=A.specularMap,this.alphaMap=A.alphaMap,this.envMap=A.envMap,this.envMapRotation.copy(A.envMapRotation),this.combine=A.combine,this.reflectivity=A.reflectivity,this.refractionRatio=A.refractionRatio,this.wireframe=A.wireframe,this.wireframeLinewidth=A.wireframeLinewidth,this.wireframeLinecap=A.wireframeLinecap,this.wireframeLinejoin=A.wireframeLinejoin,this.flatShading=A.flatShading,this.fog=A.fog,this}}function As(n,A,t){return!n||!t&&n.constructor===A?n:typeof A.BYTES_PER_ELEMENT=="number"?new A(n):Array.prototype.slice.call(n)}function cd(n){return ArrayBuffer.isView(n)&&!(n instanceof DataView)}function ld(n){function A(i,s){return n[i]-n[s]}const t=n.length,e=new Array(t);for(let i=0;i!==t;++i)e[i]=i;return e.sort(A),e}function Ia(n,A,t){const e=n.length,i=new n.constructor(e);for(let s=0,o=0;o!==e;++s){const g=t[s]*A;for(let r=0;r!==A;++r)i[o++]=n[g+r]}return i}function yI(n,A,t,e){let i=1,s=n[0];for(;s!==void 0&&s[e]===void 0;)s=n[i++];if(s===void 0)return;let o=s[e];if(o!==void 0)if(Array.isArray(o))do o=s[e],o!==void 0&&(A.push(s.time),t.push.apply(t,o)),s=n[i++];while(s!==void 0);else if(o.toArray!==void 0)do o=s[e],o!==void 0&&(A.push(s.time),o.toArray(t,t.length)),s=n[i++];while(s!==void 0);else do o=s[e],o!==void 0&&(A.push(s.time),t.push(o)),s=n[i++];while(s!==void 0)}class Us{constructor(A,t,e,i){this.parameterPositions=A,this._cachedIndex=0,this.resultBuffer=i!==void 0?i:new t.constructor(e),this.sampleValues=t,this.valueSize=e,this.settings=null,this.DefaultSettings_={}}evaluate(A){const t=this.parameterPositions;let e=this._cachedIndex,i=t[e],s=t[e-1];A:{t:{let o;e:{i:if(!(A=s)){const g=t[1];A=s)break t}o=e,e=0;break e}break A}for(;e>>1;At;)--o;if(++o,s!==0||o!==i){s>=o&&(o=Math.max(o,1),s=o-1);const g=this.getValueSize();this.times=e.slice(s,o),this.values=this.values.slice(s*g,o*g)}return this}validate(){let A=!0;const t=this.getValueSize();t-Math.floor(t)!==0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),A=!1);const e=this.times,i=this.values,s=e.length;s===0&&(console.error("THREE.KeyframeTrack: Track is empty.",this),A=!1);let o=null;for(let g=0;g!==s;g++){const r=e[g];if(typeof r=="number"&&isNaN(r)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,g,r),A=!1;break}if(o!==null&&o>r){console.error("THREE.KeyframeTrack: Out of order keys.",this,g,r,o),A=!1;break}o=r}if(i!==void 0&&cd(i))for(let g=0,r=i.length;g!==r;++g){const a=i[g];if(isNaN(a)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,g,a),A=!1;break}}return A}optimize(){const A=this.times.slice(),t=this.values.slice(),e=this.getValueSize(),i=this.getInterpolation()===Xs,s=A.length-1;let o=1;for(let g=1;g0){A[o]=A[s];for(let g=s*e,r=o*e,a=0;a!==e;++a)t[r+a]=t[g+a];++o}return o!==A.length?(this.times=A.slice(0,o),this.values=t.slice(0,o*e)):(this.times=A,this.values=t),this}clone(){const A=this.times.slice(),t=this.values.slice(),e=this.constructor,i=new e(this.name,A,t);return i.createInterpolant=this.createInterpolant,i}}oe.prototype.TimeBufferType=Float32Array;oe.prototype.ValueBufferType=Float32Array;oe.prototype.DefaultInterpolation=Jo;class Oi extends oe{constructor(A,t,e){super(A,t,e)}}Oi.prototype.ValueTypeName="bool";Oi.prototype.ValueBufferType=Array;Oi.prototype.DefaultInterpolation=Es;Oi.prototype.InterpolantFactoryMethodLinear=void 0;Oi.prototype.InterpolantFactoryMethodSmooth=void 0;class RI extends oe{}RI.prototype.ValueTypeName="color";class Ds extends oe{}Ds.prototype.ValueTypeName="number";class fd extends Us{constructor(A,t,e,i){super(A,t,e,i)}interpolate_(A,t,e,i){const s=this.resultBuffer,o=this.sampleValues,g=this.valueSize,r=(e-t)/(i-t);let a=A*g;for(let I=a+g;a!==I;a+=4)Zt.slerpFlat(s,0,o,a-g,o,a,r);return s}}class Gs extends oe{InterpolantFactoryMethodLinear(A){return new fd(this.times,this.values,this.getValueSize(),A)}}Gs.prototype.ValueTypeName="quaternion";Gs.prototype.InterpolantFactoryMethodSmooth=void 0;class Ji extends oe{constructor(A,t,e){super(A,t,e)}}Ji.prototype.ValueTypeName="string";Ji.prototype.ValueBufferType=Array;Ji.prototype.DefaultInterpolation=Es;Ji.prototype.InterpolantFactoryMethodLinear=void 0;Ji.prototype.InterpolantFactoryMethodSmooth=void 0;class ms extends oe{}ms.prototype.ValueTypeName="vector";class Ea{constructor(A="",t=-1,e=[],i=$o){this.name=A,this.tracks=e,this.duration=t,this.blendMode=i,this.uuid=Ot(),this.duration<0&&this.resetDuration()}static parse(A){const t=[],e=A.tracks,i=1/(A.fps||1);for(let o=0,g=e.length;o!==g;++o)t.push(Dd(e[o]).scale(i));const s=new this(A.name,A.duration,t,A.blendMode);return s.uuid=A.uuid,s}static toJSON(A){const t=[],e=A.tracks,i={name:A.name,duration:A.duration,tracks:t,uuid:A.uuid,blendMode:A.blendMode};for(let s=0,o=e.length;s!==o;++s)t.push(oe.toJSON(e[s]));return i}static CreateFromMorphTargetSequence(A,t,e,i){const s=t.length,o=[];for(let g=0;g1){const E=I[1];let C=i[E];C||(i[E]=C=[]),C.push(a)}}const o=[];for(const g in i)o.push(this.CreateFromMorphTargetSequence(g,i[g],t,e));return o}static parseAnimation(A,t){if(!A)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;const e=function(E,C,Q,c,l){if(Q.length!==0){const h=[],B=[];yI(Q,h,B,c),h.length!==0&&l.push(new E(C,h,B))}},i=[],s=A.name||"default",o=A.fps||30,g=A.blendMode;let r=A.length||-1;const a=A.hierarchy||[];for(let E=0;E{t&&t(s),this.manager.itemEnd(A)},0),s;if(Qe[A]!==void 0){Qe[A].push({onLoad:t,onProgress:e,onError:i});return}Qe[A]=[],Qe[A].push({onLoad:t,onProgress:e,onError:i});const o=new Request(A,{headers:new Headers(this.requestHeader),credentials:this.withCredentials?"include":"same-origin"}),g=this.mimeType,r=this.responseType;fetch(o).then(a=>{if(a.status===200||a.status===0){if(a.status===0&&console.warn("THREE.FileLoader: HTTP Status 0 received."),typeof ReadableStream>"u"||a.body===void 0||a.body.getReader===void 0)return a;const I=Qe[A],E=a.body.getReader(),C=a.headers.get("X-File-Size")||a.headers.get("Content-Length"),Q=C?parseInt(C):0,c=Q!==0;let l=0;const h=new ReadableStream({start(B){p();function p(){E.read().then(({done:d,value:f})=>{if(d)B.close();else{l+=f.byteLength;const _=new ProgressEvent("progress",{lengthComputable:c,loaded:l,total:Q});for(let w=0,R=I.length;w{B.error(d)})}}});return new Response(h)}else throw new yd(`fetch for "${a.url}" responded with ${a.status}: ${a.statusText}`,a)}).then(a=>{switch(r){case"arraybuffer":return a.arrayBuffer();case"blob":return a.blob();case"document":return a.text().then(I=>new DOMParser().parseFromString(I,g));case"json":return a.json();default:if(g===void 0)return a.text();{const E=/charset="?([^;"\s]*)"?/i.exec(g),C=E&&E[1]?E[1].toLowerCase():void 0,Q=new TextDecoder(C);return a.arrayBuffer().then(c=>Q.decode(c))}}}).then(a=>{Le.add(A,a);const I=Qe[A];delete Qe[A];for(let E=0,C=I.length;E{const I=Qe[A];if(I===void 0)throw this.manager.itemError(A),a;delete Qe[A];for(let E=0,C=I.length;E{this.manager.itemEnd(A)}),this.manager.itemStart(A)}setResponseType(A){return this.responseType=A,this}setMimeType(A){return this.mimeType=A,this}}class MI extends Ae{constructor(A){super(A)}load(A,t,e,i){this.path!==void 0&&(A=this.path+A),A=this.manager.resolveURL(A);const s=this,o=Le.get(A);if(o!==void 0)return s.manager.itemStart(A),setTimeout(function(){t&&t(o),s.manager.itemEnd(A)},0),o;const g=an("img");function r(){I(),Le.add(A,this),t&&t(this),s.manager.itemEnd(A)}function a(E){I(),i&&i(E),s.manager.itemError(A),s.manager.itemEnd(A)}function I(){g.removeEventListener("load",r,!1),g.removeEventListener("error",a,!1)}return g.addEventListener("load",r,!1),g.addEventListener("error",a,!1),A.slice(0,5)!=="data:"&&this.crossOrigin!==void 0&&(g.crossOrigin=this.crossOrigin),s.manager.itemStart(A),g.src=A,g}}class If extends Ae{constructor(A){super(A)}load(A,t,e,i){const s=new sg;s.colorSpace=Pt;const o=new MI(this.manager);o.setCrossOrigin(this.crossOrigin),o.setPath(this.path);let g=0;function r(a){o.load(A[a],function(I){s.images[a]=I,g++,g===6&&(s.needsUpdate=!0,t&&t(s))},void 0,i)}for(let a=0;a"u"&&console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported."),typeof fetch>"u"&&console.warn("THREE.ImageBitmapLoader: fetch() not supported."),this.options={premultiplyAlpha:"none"}}setOptions(A){return this.options=A,this}load(A,t,e,i){A===void 0&&(A=""),this.path!==void 0&&(A=this.path+A),A=this.manager.resolveURL(A);const s=this,o=Le.get(A);if(o!==void 0){if(s.manager.itemStart(A),o.then){o.then(a=>{t&&t(a),s.manager.itemEnd(A)}).catch(a=>{i&&i(a)});return}return setTimeout(function(){t&&t(o),s.manager.itemEnd(A)},0),o}const g={};g.credentials=this.crossOrigin==="anonymous"?"same-origin":"include",g.headers=this.requestHeader;const r=fetch(A,g).then(function(a){return a.blob()}).then(function(a){return createImageBitmap(a,Object.assign(s.options,{colorSpaceConversion:"none"}))}).then(function(a){return Le.add(A,a),t&&t(a),s.manager.itemEnd(A),a}).catch(function(a){i&&i(a),Le.remove(A),s.manager.itemError(A),s.manager.itemEnd(A)});Le.add(A,r),s.manager.itemStart(A)}}class NI{constructor(A=!0){this.autoStart=A,this.startTime=0,this.oldTime=0,this.elapsedTime=0,this.running=!1}start(){this.startTime=ha(),this.oldTime=this.startTime,this.elapsedTime=0,this.running=!0}stop(){this.getElapsedTime(),this.running=!1,this.autoStart=!1}getElapsedTime(){return this.getDelta(),this.elapsedTime}getDelta(){let A=0;if(this.autoStart&&!this.running)return this.start(),0;if(this.running){const t=ha();A=(t-this.oldTime)/1e3,this.oldTime=t,this.elapsedTime+=A}return A}}function ha(){return(typeof performance>"u"?Date:performance).now()}class xd{constructor(A,t,e){this.binding=A,this.valueSize=e;let i,s,o;switch(t){case"quaternion":i=this._slerp,s=this._slerpAdditive,o=this._setAdditiveIdentityQuaternion,this.buffer=new Float64Array(e*6),this._workIndex=5;break;case"string":case"bool":i=this._select,s=this._select,o=this._setAdditiveIdentityOther,this.buffer=new Array(e*5);break;default:i=this._lerp,s=this._lerpAdditive,o=this._setAdditiveIdentityNumeric,this.buffer=new Float64Array(e*5)}this._mixBufferRegion=i,this._mixBufferRegionAdditive=s,this._setIdentity=o,this._origIndex=3,this._addIndex=4,this.cumulativeWeight=0,this.cumulativeWeightAdditive=0,this.useCount=0,this.referenceCount=0}accumulate(A,t){const e=this.buffer,i=this.valueSize,s=A*i+i;let o=this.cumulativeWeight;if(o===0){for(let g=0;g!==i;++g)e[s+g]=e[g];o=t}else{o+=t;const g=t/o;this._mixBufferRegion(e,s,0,g,i)}this.cumulativeWeight=o}accumulateAdditive(A){const t=this.buffer,e=this.valueSize,i=e*this._addIndex;this.cumulativeWeightAdditive===0&&this._setIdentity(),this._mixBufferRegionAdditive(t,i,0,A,e),this.cumulativeWeightAdditive+=A}apply(A){const t=this.valueSize,e=this.buffer,i=A*t+t,s=this.cumulativeWeight,o=this.cumulativeWeightAdditive,g=this.binding;if(this.cumulativeWeight=0,this.cumulativeWeightAdditive=0,s<1){const r=t*this._origIndex;this._mixBufferRegion(e,i,r,1-s,t)}o>0&&this._mixBufferRegionAdditive(e,i,this._addIndex*t,1,t);for(let r=t,a=t+t;r!==a;++r)if(e[r]!==e[r+t]){g.setValue(e,i);break}}saveOriginalState(){const A=this.binding,t=this.buffer,e=this.valueSize,i=e*this._origIndex;A.getValue(t,i);for(let s=e,o=i;s!==o;++s)t[s]=t[i+s%e];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){const A=this.valueSize*3;this.binding.setValue(this.buffer,A)}_setAdditiveIdentityNumeric(){const A=this._addIndex*this.valueSize,t=A+this.valueSize;for(let e=A;e=.5)for(let o=0;o!==s;++o)A[t+o]=A[e+o]}_slerp(A,t,e,i){Zt.slerpFlat(A,t,A,t,A,e,i)}_slerpAdditive(A,t,e,i,s){const o=this._workIndex*s;Zt.multiplyQuaternionsFlat(A,o,A,t,A,e),Zt.slerpFlat(A,t,A,t,A,o,i)}_lerp(A,t,e,i,s){const o=1-i;for(let g=0;g!==s;++g){const r=t+g;A[r]=A[r]*o+A[e+g]*i}}_lerpAdditive(A,t,e,i,s){for(let o=0;o!==s;++o){const g=t+o;A[g]=A[g]+A[e+o]*i}}}const Eg="\\[\\]\\.:\\/",Fd=new RegExp("["+Eg+"]","g"),Cg="[^"+Eg+"]",_d="[^"+Eg.replace("\\.","")+"]",Ld=/((?:WC+[\/:])*)/.source.replace("WC",Cg),vd=/(WCOD+)?/.source.replace("WCOD",_d),Ud=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",Cg),Gd=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",Cg),Td=new RegExp("^"+Ld+vd+Ud+Gd+"$"),kd=["material","materials","bones","map"];class bd{constructor(A,t,e){const i=e||$A.parseTrackName(t);this._targetGroup=A,this._bindings=A.subscribe_(t,i)}getValue(A,t){this.bind();const e=this._targetGroup.nCachedObjects_,i=this._bindings[e];i!==void 0&&i.getValue(A,t)}setValue(A,t){const e=this._bindings;for(let i=this._targetGroup.nCachedObjects_,s=e.length;i!==s;++i)e[i].setValue(A,t)}bind(){const A=this._bindings;for(let t=this._targetGroup.nCachedObjects_,e=A.length;t!==e;++t)A[t].bind()}unbind(){const A=this._bindings;for(let t=this._targetGroup.nCachedObjects_,e=A.length;t!==e;++t)A[t].unbind()}}class $A{constructor(A,t,e){this.path=t,this.parsedPath=e||$A.parseTrackName(t),this.node=$A.findNode(A,this.parsedPath.nodeName),this.rootNode=A,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(A,t,e){return A&&A.isAnimationObjectGroup?new $A.Composite(A,t,e):new $A(A,t,e)}static sanitizeNodeName(A){return A.replace(/\s/g,"_").replace(Fd,"")}static parseTrackName(A){const t=Td.exec(A);if(t===null)throw new Error("PropertyBinding: Cannot parse trackName: "+A);const e={nodeName:t[2],objectName:t[3],objectIndex:t[4],propertyName:t[5],propertyIndex:t[6]},i=e.nodeName&&e.nodeName.lastIndexOf(".");if(i!==void 0&&i!==-1){const s=e.nodeName.substring(i+1);kd.indexOf(s)!==-1&&(e.nodeName=e.nodeName.substring(0,i),e.objectName=s)}if(e.propertyName===null||e.propertyName.length===0)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+A);return e}static findNode(A,t){if(t===void 0||t===""||t==="."||t===-1||t===A.name||t===A.uuid)return A;if(A.skeleton){const e=A.skeleton.getBoneByName(t);if(e!==void 0)return e}if(A.children){const e=function(s){for(let o=0;o0){const r=this._interpolants,a=this._propertyBindings;switch(this.blendMode){case YE:for(let I=0,E=r.length;I!==E;++I)r[I].evaluate(o),a[I].accumulateAdditive(g);break;case $o:default:for(let I=0,E=r.length;I!==E;++I)r[I].evaluate(o),a[I].accumulate(i,g)}}}_updateWeight(A){let t=0;if(this.enabled){t=this.weight;const e=this._weightInterpolant;if(e!==null){const i=e.evaluate(A)[0];t*=i,A>e.parameterPositions[1]&&(this.stopFading(),i===0&&(this.enabled=!1))}}return this._effectiveWeight=t,t}_updateTimeScale(A){let t=0;if(!this.paused){t=this.timeScale;const e=this._timeScaleInterpolant;if(e!==null){const i=e.evaluate(A)[0];t*=i,A>e.parameterPositions[1]&&(this.stopWarping(),t===0?this.paused=!0:this.timeScale=t)}}return this._effectiveTimeScale=t,t}_updateTime(A){const t=this._clip.duration,e=this.loop;let i=this.time+A,s=this._loopCount;const o=e===qE;if(A===0)return s===-1?i:o&&(s&1)===1?t-i:i;if(e===OE){s===-1&&(this._loopCount=0,this._setEndings(!0,!0,!1));A:{if(i>=t)i=t;else if(i<0)i=0;else{this.time=i;break A}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=i,this._mixer.dispatchEvent({type:"finished",action:this,direction:A<0?-1:1})}}else{if(s===-1&&(A>=0?(s=0,this._setEndings(!0,this.repetitions===0,o)):this._setEndings(this.repetitions===0,!0,o)),i>=t||i<0){const g=Math.floor(i/t);i-=t*g,s+=Math.abs(g);const r=this.repetitions-s;if(r<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,i=A>0?t:0,this.time=i,this._mixer.dispatchEvent({type:"finished",action:this,direction:A>0?1:-1});else{if(r===1){const a=A<0;this._setEndings(a,!a,o)}else this._setEndings(!1,!1,o);this._loopCount=s,this.time=i,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:g})}}else this.time=i;if(o&&(s&1)===1)return t-i}return i}_setEndings(A,t,e){const i=this._interpolantSettings;e?(i.endingStart=wi,i.endingEnd=wi):(A?i.endingStart=this.zeroSlopeAtStart?wi:yi:i.endingStart=Cs,t?i.endingEnd=this.zeroSlopeAtEnd?wi:yi:i.endingEnd=Cs)}_scheduleFading(A,t,e){const i=this._mixer,s=i.time;let o=this._weightInterpolant;o===null&&(o=i._lendControlInterpolant(),this._weightInterpolant=o);const g=o.parameterPositions,r=o.sampleValues;return g[0]=s,r[0]=t,g[1]=s+A,r[1]=e,this}}const Pd=new Float32Array(1);class cf extends ue{constructor(A){super(),this._root=A,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}_bindAction(A,t){const e=A._localRoot||this._root,i=A._clip.tracks,s=i.length,o=A._propertyBindings,g=A._interpolants,r=e.uuid,a=this._bindingsByRootAndName;let I=a[r];I===void 0&&(I={},a[r]=I);for(let E=0;E!==s;++E){const C=i[E],Q=C.name;let c=I[Q];if(c!==void 0)++c.referenceCount,o[E]=c;else{if(c=o[E],c!==void 0){c._cacheIndex===null&&(++c.referenceCount,this._addInactiveBinding(c,r,Q));continue}const l=t&&t._propertyBindings[E].binding.parsedPath;c=new xd($A.create(e,Q,l),C.ValueTypeName,C.getValueSize()),++c.referenceCount,this._addInactiveBinding(c,r,Q),o[E]=c}g[E].resultBuffer=c.buffer}}_activateAction(A){if(!this._isActiveAction(A)){if(A._cacheIndex===null){const e=(A._localRoot||this._root).uuid,i=A._clip.uuid,s=this._actionsByClip[i];this._bindAction(A,s&&s.knownActions[0]),this._addInactiveAction(A,i,e)}const t=A._propertyBindings;for(let e=0,i=t.length;e!==i;++e){const s=t[e];s.useCount++===0&&(this._lendBinding(s),s.saveOriginalState())}this._lendAction(A)}}_deactivateAction(A){if(this._isActiveAction(A)){const t=A._propertyBindings;for(let e=0,i=t.length;e!==i;++e){const s=t[e];--s.useCount===0&&(s.restoreOriginalState(),this._takeBackBinding(s))}this._takeBackAction(A)}}_initMemoryManager(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;const A=this;this.stats={actions:{get total(){return A._actions.length},get inUse(){return A._nActiveActions}},bindings:{get total(){return A._bindings.length},get inUse(){return A._nActiveBindings}},controlInterpolants:{get total(){return A._controlInterpolants.length},get inUse(){return A._nActiveControlInterpolants}}}}_isActiveAction(A){const t=A._cacheIndex;return t!==null&&t=0;--e)A[e].stop();return this}update(A){A*=this.timeScale;const t=this._actions,e=this._nActiveActions,i=this.time+=A,s=Math.sign(A),o=this._accuIndex^=1;for(let a=0;a!==e;++a)t[a]._update(i,A,s,o);const g=this._bindings,r=this._nActiveBindings;for(let a=0;a!==r;++a)g[a].apply(o);return this}setTime(A){this.time=0;for(let t=0;tthis.max.x||A.ythis.max.y)}containsBox(A){return this.min.x<=A.min.x&&A.max.x<=this.max.x&&this.min.y<=A.min.y&&A.max.y<=this.max.y}getParameter(A,t){return t.set((A.x-this.min.x)/(this.max.x-this.min.x),(A.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(A){return!(A.max.xthis.max.x||A.max.ythis.max.y)}clampPoint(A,t){return t.copy(A).clamp(this.min,this.max)}distanceToPoint(A){return this.clampPoint(A,ua).distanceTo(A)}intersect(A){return this.min.max(A.min),this.max.min(A.max),this.isEmpty()&&this.makeEmpty(),this}union(A){return this.min.min(A.min),this.max.max(A.max),this}translate(A){return this.min.add(A),this.max.add(A),this}equals(A){return A.min.equals(this.min)&&A.max.equals(this.max)}}const pa=new M;class lf extends st{constructor(A,t){super(),this.light=A,this.matrixAutoUpdate=!1,this.color=t,this.type="SpotLightHelper";const e=new it,i=[0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,-1,0,1,0,0,0,0,1,1,0,0,0,0,-1,1];for(let o=0,g=1,r=32;o.99999)this.quaternion.set(0,0,0,1);else if(A.y<-.99999)this.quaternion.set(1,0,0,0);else{ya.set(A.z,0,-A.x).normalize();const t=Math.acos(A.y);this.quaternion.setFromAxisAngle(ya,t)}}setLength(A,t=A*.2,e=t*.2){this.line.scale.set(1,Math.max(1e-4,A-t),1),this.line.updateMatrix(),this.cone.scale.set(e,t,e),this.cone.position.y=A,this.cone.updateMatrix()}setColor(A){this.line.material.color.set(A),this.cone.material.color.set(A)}copy(A){return super.copy(A,!1),this.line.copy(A.line),this.cone.copy(A.cone),this}dispose(){this.line.geometry.dispose(),this.line.material.dispose(),this.cone.geometry.dispose(),this.cone.material.dispose()}}class Df extends Fs{constructor(A=1){const t=[0,0,0,A,0,0,0,0,0,0,A,0,0,0,0,0,0,A],e=[1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1],i=new it;i.setAttribute("position",new OA(t,3)),i.setAttribute("color",new OA(e,3));const s=new Ai({vertexColors:!0,toneMapped:!1});super(i,s),this.type="AxesHelper"}setColors(A,t,e){const i=new FA,s=this.geometry.attributes.color.array;return i.set(A),i.toArray(s,0),i.toArray(s,3),i.set(t),i.toArray(s,6),i.toArray(s,9),i.set(e),i.toArray(s,12),i.toArray(s,15),this.geometry.attributes.color.needsUpdate=!0,this}dispose(){this.geometry.dispose(),this.material.dispose()}}class mf{constructor(){this.type="ShapePath",this.color=new FA,this.subPaths=[],this.currentPath=null}moveTo(A,t){return this.currentPath=new ps,this.subPaths.push(this.currentPath),this.currentPath.moveTo(A,t),this}lineTo(A,t){return this.currentPath.lineTo(A,t),this}quadraticCurveTo(A,t,e,i){return this.currentPath.quadraticCurveTo(A,t,e,i),this}bezierCurveTo(A,t,e,i,s,o){return this.currentPath.bezierCurveTo(A,t,e,i,s,o),this}splineThru(A){return this.currentPath.splineThru(A),this}toShapes(A){function t(B){const p=[];for(let d=0,f=B.length;dNumber.EPSILON){if(u<0&&(R=p[w],m=-m,F=p[_],u=-u),B.yF.y)continue;if(B.y===R.y){if(B.x===R.x)return!0}else{const L=u*(B.x-R.x)-m*(B.y-R.y);if(L===0)return!0;if(L<0)continue;f=!f}}else{if(B.y!==R.y)continue;if(F.x<=B.x&&B.x<=R.x||R.x<=B.x&&B.x<=F.x)return!0}}return f}const i=_i.isClockWise,s=this.subPaths;if(s.length===0)return[];let o,g,r;const a=[];if(s.length===1)return g=s[0],r=new rs,r.curves=g.curves,a.push(r),a;let I=!i(s[0].getPoints());I=A?!I:I;const E=[],C=[];let Q=[],c=0,l;C[c]=void 0,Q[c]=[];for(let B=0,p=s.length;B1){let B=!1,p=0;for(let d=0,f=C.length;d0&&B===!1&&(Q=E)}let h;for(let B=0,p=C.length;B{o.updateMatrix(),o.updateMatrixWorld(),o.receiveShadow=n.receiveShadow,o.castShadow=n.castShadow})}return n.children}const Jd=new M;function qd(n,A,t){const e=n.position.clone().setZ(t).applyMatrix4(n.matrixWorld);return A.distanceTo(e)}function Yd(n){const A=new M(-.5,-.5,0).applyMatrix4(n.matrixWorld),t=new M(.5,.5,0).applyMatrix4(n.matrixWorld);return A.sub(t).length()}function wa(n,A){const t=A.getWorldPosition(Jd),e=qd(n,t,n.avgZ),i=Yd(n),s=e/i;return Math.log10(s)*5+.5}var Zo=(n=>(n[n.none=0]="none",n[n.create=1]="create",n[n.remove=2]="remove",n))(Zo||{});function Kd(n,A,t,e,i){var s;if(n.coord.z>t&&n.index===0&&((s=n.parent)!=null&&s.isTile)){const o=wa(n.parent,A);if(n.coord.z>e||o>i*1.02)return 2}if(n.coord.z{"wireframe"in e&&(e.wireframe=t||e.userData.wireframe)}),!t){const e=this._getLoadedParent();e&&e.loadState}}get isLeaf(){return this.children.length===0}traverse(t){t(this),this.children.forEach(e=>{e.traverse(t)})}raycast(t,e){this.loadState==="loaded"&&super.raycast(t,e)}_lod(t,e,i,s,o){let g=[];const r=Kd(this,t,e,i,s);if(r===Zo.create)g=Od(this,o),this._toLoad=!1;else if(r===Zo.remove){const a=this.parent;a!=null&&a.isTile&&(a._toLoad=!0)}return g}_load(t){return this._needsLoad?(this._abortController=new AbortController,this._loadState="loading",new Promise((e,i)=>{t.load(this,()=>e(this._onLoad()),s=>e(this._onError(s)))})):Promise.resolve()}_onError(t){this._toLoad=!1,t.name==="AbortError"?console.assert(this._loadState==="empty"):(this._loadState="loaded",console.error(t.message||t.type||t))}_getLoadedParent(){const t=this.parent;return!t||!t.isTile?null:t.loadState==="loaded"&&!t._isTemp?t:t._getLoadedParent()}_checkVisible(){const t=[];this.traverse(i=>t.push(i));const e=!t.filter(i=>i.isLeafInFrustum).some(i=>i.loadState!="loaded");return e&&t.forEach(i=>{i.isLeaf?i.isTemp=!1:i.dispose(!1)}),e}_onLoad(){var t;this._loadState="loaded",this.material.forEach(e=>{"wireframe"in e&&(e.userData.wireframe=e.wireframe)}),this._updateHeight(),!this.isLeaf&&this._toLoad&&(this.children.forEach(e=>e.dispose(!0)),this.clear()),this.isTemp=this._getLoadedParent()!=null,this._toLoad=!1,(t=this._getLoadedParent())==null||t._checkVisible()}_updateHeight(){var t,e;this.geometry.computeBoundingBox(),this.maxZ=((t=this.geometry.boundingBox)==null?void 0:t.max.z)||0,this.minZ=((e=this.geometry.boundingBox)==null?void 0:e.min.z)||0,this.avgZ=(this.maxZ+this.minZ)/2}abortLoad(){this._abortController.abort()}dispose(t){return this.loadState!="empty"&&this._dispose(),t&&(this.children.forEach(e=>{e.dispose(t),e.clear()}),this.clear()),this}_dispose(){this.abortLoad(),this._loadState="empty",this.isTemp=!0,this._toLoad=!1,this.material[0]!=vo&&(this.material.forEach(t=>t.dispose()),this.material=[vo]),this.geometry!=Lo&&(this.geometry.dispose(),this.geometry.groups=[],this.geometry=Lo),this.dispatchEvent({type:"dispose"})}}const Wd=new KA,Ra=new Ns;class Vd extends ks{constructor(t,e=0,i=0,s=0){super(e,i,s);Y(this,"_treeReadyCount",0);Y(this,"_autoLoad",!0);Y(this,"_loader");Y(this,"_minLevel",0);Y(this,"_maxLevel",19);Y(this,"_LODThreshold",1);Y(this,"isWGS",!1);Y(this,"_vierwerBufferSize",.6);Y(this,"_tileBox",new jt(new M(-this.viewerbufferSize,-this.viewerbufferSize,0),new M(this.viewerbufferSize,this.viewerbufferSize,10)));this._loader=t,this.matrixAutoUpdate=!0,this.matrixWorldAutoUpdate=!0}get minLevel(){return this._minLevel}set minLevel(t){this._minLevel=t}get maxLevel(){return this._maxLevel}set maxLevel(t){this._maxLevel=t}get LODThreshold(){return this._LODThreshold}set LODThreshold(t){this._LODThreshold=t}get loader(){return this._loader}set loader(t){this._loader=t}get autoLoad(){return this._autoLoad}set autoLoad(t){this._autoLoad=t}get viewerbufferSize(){return this._vierwerBufferSize}set viewerbufferSize(t){this._vierwerBufferSize=Math.min(Math.max(t,.5),2.5),this._tileBox=new jt(new M(-this.viewerbufferSize,-this.viewerbufferSize,0),new M(this.viewerbufferSize,this.viewerbufferSize,9))}update(t){return this._updateTileTree(t)?this._treeReadyCount=0:this._treeReadyCount=Math.min(this._treeReadyCount+1,100),this.autoLoad&&this._treeReadyCount>10&&this._updateTileData(),this}reload(){return this.dispose(!0),this}_updateTileTree(t){let e=!1;return Ra.setFromProjectionMatrix(Wd.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse)),this.traverse(i=>{if(i.isTile){i.geometry.computeBoundingBox(),i.geometry.computeBoundingSphere(),i.inFrustum=Ra.intersectsBox(this._tileBox.clone().applyMatrix4(i.matrixWorld));const s=i._lod(t,this.minLevel,this.maxLevel,this.LODThreshold,this.isWGS);s.forEach(o=>{this.dispatchEvent({type:"tile-created",tile:o})}),s.length>0&&(e=!0)}}),e}_updateTileData(){return this.traverse(t=>{t.isTile&&t._load(this.loader).then(()=>{t.loadState==="loaded"&&(this._updateVisibleHight(),this.dispatchEvent({type:"tile-loaded",tile:t}))})}),this}_updateVisibleHight(){let t=0,e=0;this.maxZ=0,this.minZ=9e3,this.traverse(i=>{i.isTile&&i.isLeafInFrustum&&i.loadState==="loaded"&&(this.maxZ=Math.max(this.maxZ,i.maxZ),this.minZ=Math.min(this.minZ,i.minZ),t+=i.avgZ,e++)}),e>0&&(this.avgZ=t/e)}}class zd extends hd{constructor(A={transparent:!0,side:de}){super(A)}}class FI extends ne{constructor(){super(...arguments);Y(this,"_min",1/0)}build(t,e){this.dispose();const i=1,s=1,o=e-1,g=e-1,r=i/2,a=s/2;let I=Math.floor(o),E=Math.floor(g);const C=i/I,Q=s/E;I+=2,E+=2;const c=I+1,l=E+1,h=[],B=[],p=[],d=[];let f=0;this._min=Math.min(...Array.from(t));for(let _=0;_{e&&e(g),this.manager.itemEnd(t)}),g;if(o!=null&&o.aborted){console.log("aborted befor load");return}const r=new Request(t,{headers:new Headers(this.requestHeader),credentials:this.withCredentials?"include":"same-origin",signal:o}),a=this.mimeType,I=this.responseType;fetch(r).then(E=>{if(E.status===200||E.status===0)return E.status===0&&console.warn("THREE.FileLoader: HTTP Status 0 received."),E;throw new Xd(`fetch for "${E.url}" responded with ${E.status}: ${E.statusText}`,E)}).then(E=>{switch(I){case"arraybuffer":return E.arrayBuffer();case"blob":return E.blob();case"document":return E.text().then(C=>new DOMParser().parseFromString(C,a));case"json":return E.json();default:if(a===void 0)return E.text();{const C=/charset="?([^;"\s]*)"?/i.exec(a),Q=C&&C[1]?C[1].toLowerCase():void 0,c=new TextDecoder(Q);return E.arrayBuffer().then(l=>c.decode(l))}}}).then(E=>{Ze.add(t,E),e&&e(E)}).catch(E=>{s&&s(E),E.name!="AbortError"&&this.manager.itemError(t)}).finally(()=>{this.manager.itemEnd(t)}),this.manager.itemStart(t)}setResponseType(t){return this.responseType=t,this}setMimeType(t){return this.mimeType=t,this}}const Dt={manager:new SI,demLoaderMap:new Map,imgLoaderMap:new Map,registerMaterialLoader(n){Dt.imgLoaderMap.set(n.dataType,n),console.log(`* Register imageLoader: ${n.dataType}`)},registerGeometryLoader(n){Dt.demLoaderMap.set(n.dataType,n),console.log(`* Register terrainLoader: ${n.dataType}`)},getMaterialLoader(n){const A=Dt.imgLoaderMap.get(n.dataType);if(A)return A;throw`Source dataType "${n.dataType}" is not support!`},getGeometryLoader(n){const A=Dt.demLoaderMap.get(n.dataType);if(A)return A;throw`Source dataType "${n.dataType}" is not support!`}},Zd="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7";class LI extends Ae{constructor(t){super(t);Y(this,"loader",new _I(Dt.manager));this.loader.setResponseType("blob")}load(t,e,i,s,o){const g=new Image,r=E=>{I(),e&&e(g)},a=E=>{I(),s&&s(E),g.src=Zd},I=()=>{g.removeEventListener("load",r,!1),g.removeEventListener("error",a,!1)};return g.addEventListener("load",r,!1),g.addEventListener("error",a,!1),this.crossOrigin,this.requestHeader,this.loader.load(t,E=>{e&&(g.src=URL.createObjectURL(E))},i,s,o),g}}function Qg(n,A){n.translate(new AA(.5,.5));const t=Math.floor(n.min.x*A),e=Math.floor(n.min.y*A),i=Math.floor((n.max.x-n.min.x)*A),s=Math.floor((n.max.y-n.min.y)*A);return{sx:t,sy:e,sw:i,sh:s}}function Bg(n,A){if(A.coord.z<=n.maxLevel)return{url:n.getTileUrl(A.coord.x,A.coord.y,A.coord.z),rect:new fa(new AA(-.5,-.5),new AA(.5,.5))};function t(i,s){const o=new M,g=new AA(1,1);for(;i.coord.z>s&&(o.applyMatrix4(i.matrix),g.multiplyScalar(.5),i.parent instanceof ks);)i=i.parent;o.setY(-o.y);const r=new fa().setFromCenterAndSize(new AA(o.x,o.y),g);return{tile:i,rect:r}}const e=t(A,n.maxLevel);return{url:n.getTileUrl(e.tile.coord.x,e.tile.coord.y,e.tile.coord.z),rect:e.rect}}class jd extends Ae{constructor(){super(Dt.manager);Y(this,"_imgSource",[]);Y(this,"_demSource")}get cacheSize(){return Ze.size}set cacheSize(t){Ze.size=t}get imgSource(){return this._imgSource}set imgSource(t){this._imgSource=t}get demSource(){return this._demSource}set demSource(t){this._demSource=t}load(t,e,i){if(this.imgSource.length===0)throw new Error("imgSource can not be empty");const s=()=>{if(o&&g){for(let I=0;I{o=!0,s()},i),a=this.loadMaterial(t,()=>{g=!0,s()},i);return t.geometry=r,t.material=a,{geometry:r,material:a}}loadGeometry(t,e,i){let s;return this.demSource?s=Dt.getGeometryLoader(this.demSource).load(this.demSource,t,e,i):(s=new ne,setTimeout(e)),s}loadMaterial(t,e,i){const s=this.imgSource.map(o=>{const g=Dt.getMaterialLoader(o).load(o,t,()=>{g.userData.loaded=!0,s.every(r=>r.userData.loaded)&&e()},i);return g});return s}}const $d=new Bt(new Image(1,1));class Au{constructor(){Y(this,"loader",new LI(Dt.manager))}load(A,t,e,i){const{url:s,rect:o}=Bg(A,t);if(!s)return setTimeout(e),$d;const g=new Bt(new Image);return g.colorSpace=Pt,this.loader.load(s,r=>{t.coord.z>A.maxLevel?g.image=tu(r,o):g.image=r,g.needsUpdate=!0,e()},void 0,i,t.abortSignal),g}}function tu(n,A){const t=n.width,e=new OffscreenCanvas(t,t),i=e.getContext("2d"),{sx:s,sy:o,sw:g,sh:r}=Qg(A,n.width);return i.drawImage(n,s,o,g,r,0,0,t,t),e}class eu{constructor(){Y(this,"dataType","image")}load(A,t,e,i){const s=r=>{var I,E;const a=r.target;((I=a.map)==null?void 0:I.image)instanceof ImageBitmap&&a.map.image.close(),(E=a.map)==null||E.dispose(),a.removeEventListener("dispose",s)},o=this.createMaterial();o.opacity=A.opacity,o.addEventListener("dispose",s);const g=new Au().load(A,t,()=>{o.map=g,g.needsUpdate=!0,e()},r=>{i(r)});return o}createMaterial(){return new zd}}Dt.registerMaterialLoader(new eu);const iu=new it;class nu extends Ae{constructor(){super(...arguments);Y(this,"dataType","terrain-rgb");Y(this,"imageLoader",new LI(Dt.manager))}load(t,e,i,s){if(e.coord.z<8)return setTimeout(i),new ne;const{url:o,rect:g}=Bg(t,e);return o?this._load(e,o,g,i,s):(setTimeout(i),iu)}_load(t,e,i,s,o){let g=t.coord.z*3;g=Math.min(Math.max(g,2),48);const r=new FI;return this.imageLoader.load(e,a=>{const{data:I,size:E}=gu(a,g,i);r.setData(ou(I),E),s()},void 0,o,t.abortSignal),r}}function su(n,A){const t=n[A*4],e=n[A*4+1],i=n[A*4+2];return(((t<<16)+(e<<8)+i)*.1-1e4)/1e3}function ou(n){const A=Math.floor(n.length/4),t=new Float32Array(A);for(let e=0;ei.sw&&(A=i.sw),e.drawImage(n,i.sx,i.sy,i.sw,i.sh,0,0,A,A),{data:e.getImageData(0,0,A,A).data,size:A}}Dt.registerGeometryLoader(new nu);class Mt{constructor(A){Y(this,"dataType","image");Y(this,"attribution","ThreeTile");Y(this,"minLevel",0);Y(this,"maxLevel",19);Y(this,"projectionID","3857");Y(this,"url","");Y(this,"subdomains",[]);Y(this,"s","");Y(this,"opacity",1);Y(this,"bounds",[-180,-85.05112877980659,180,85.05112877980659]);Object.assign(this,A)}getTileUrl(A,t,e){const i=this.subdomains.length;if(i>0){const s=Math.floor(Math.random()*i);this.s=this.subdomains[s]}return this.getUrl(A,t,e)}getUrl(A,t,e){const i=Object.assign({},this,{x:A,y:t,z:e});return ru(this.url,i)}static create(A){return new Mt(A)}}function ru(n,A){const t=/\{ *([\w_ -]+) *\}/g;return n.replace(t,(e,i)=>{let s=A[i];if(s===void 0)throw new Error(`source url template error, No value provided for variable: ${e}`);return typeof s=="function"&&(s=s(A)),s})}class Uo extends Mt{constructor(t,e){super();Y(this,"_source");Y(this,"_projection");Y(this,"_bounds");Object.assign(this,t),this._source=t,this.projection=e}get projection(){return this._projection}set projection(t){this._projection=t,this._bounds=this.projection.getPorjBounds(this._source.bounds)}_getTileBounds(t,e,i,s=1){const o=this.projection.getTileXYZproj(t,e,i),g=this.projection.getTileXYZproj(t+s,e+s,i);return{minX:Math.min(o.x,g.x),minY:Math.min(o.y,g.y),maxX:Math.max(o.x,g.x),maxY:Math.max(o.y,g.y)}}getUrl(t,e,i){const s=Math.pow(2,i);let o=t+Math.round(s/360*this.projection.lon0);o>=s?o-=s:o<0&&(o+=s);const g=.9,r=this._bounds,a=this._getTileBounds(o,e,i,g);if(!(a.maxXr.maxX||a.maxYr.maxY))return this._source.getTileUrl(o,e,i)}}class vI{constructor(A=0){Y(this,"_lon0",0);this._lon0=A}get lon0(){return this._lon0}getTileXWithCenterLon(A,t){const e=Math.pow(2,t);let i=A+Math.round(e/360*this._lon0);return i>=e?i-=e:i<0&&(i+=e),i}getTileXYZproj(A,t,e){const i=this.mapWidth,s=this.mapHeight/2,o=A/Math.pow(2,e)*i-i/2,g=s-t/Math.pow(2,e)*s*2;return{x:o,y:g}}getPorjBounds(A){const t=this.project(A[0]+this.lon0,A[1]),e=this.project(A[2]+this.lon0,A[3]);return{minX:Math.min(t.x,e.x),minY:Math.min(t.y,e.y),maxX:Math.max(t.x,e.x),maxY:Math.max(t.y,e.y)}}}const en=6378;class UI extends vI{constructor(){super(...arguments);Y(this,"ID","3857");Y(this,"isWGS",!1);Y(this,"mapWidth",2*Math.PI*en);Y(this,"mapHeight",this.mapWidth);Y(this,"mapDepth",1)}project(t,e){const i=(t-this.lon0)*(Math.PI/180),s=e*(Math.PI/180),o=en*i,g=en*Math.log(Math.tan(Math.PI/4+s/2));return{x:o,y:g}}unProject(t,e){const i=t/en*(180/Math.PI)+this.lon0;return{lat:(2*Math.atan(Math.exp(e/en))-Math.PI/2)*(180/Math.PI),lon:i}}}class au extends vI{constructor(){super(...arguments);Y(this,"ID","4326");Y(this,"isWGS",!0);Y(this,"mapWidth",36e3);Y(this,"mapHeight",18e3);Y(this,"mapDepth",1)}project(t,e){return{x:(t-this.lon0)*100,y:e*100}}unProject(t,e){return{lon:t/100+this.lon0,lat:e/100}}}const Sa={createFromID:(n="3857",A)=>{let t;switch(n){case"3857":t=new UI(A);break;case"4326":t=new au(A);break;default:throw new Error(`Projection ID: ${n} is not supported.`)}return t}},Iu=new M(0,0,-1);function GI(n,A){const t=A.intersectObjects([n.rootTile]);for(const e of t)if(e.object instanceof ks){const i=n.worldToLocal(e.point),s=n.pos2geo(i);return Object.assign(e,{location:s})}}function Ma(n,A){const t=new M(A.x,A.y,10),e=new xI(t,Iu);return GI(n,e)}function Eu(n,A,t){const e=new xI;return e.setFromCamera(t,n),GI(A,e)}function Cu(n){const A=n.loader.manager;return A.onStart=(t,e,i)=>{n.dispatchEvent({type:"loading-start",itemsLoaded:e,itemsTotal:i})},A.onError=t=>{n.dispatchEvent({type:"loading-error",url:t})},A.onLoad=()=>{n.dispatchEvent({type:"loading-complete"})},A.onProgress=(t,e,i)=>{n.dispatchEvent({type:"loading-progress",url:t,itemsLoaded:e,itemsTotal:i})},n.rootTile.addEventListener("tile-created",t=>{n.dispatchEvent({type:"tile-created",tile:t.tile})}),n.rootTile.addEventListener("tile-loaded",t=>{n.dispatchEvent({type:"tile-loaded",tile:t.tile})}),n.rootTile.addEventListener("loaded",()=>{n.dispatchEvent({type:"loaded"})}),n}function Qu(n){let A=0,t=0,e=0,i=0;return n.rootTile.traverse(s=>{s.isTile&&(A++,s.isLeafInFrustum&&t++,s.isLeaf&&i++,e=Math.max(e,s.coord.z))}),{total:A,visible:t,leaf:i,maxLevle:e}}function Bu(n){const A=[];let t=n.imgSource;if(Array.isArray(t)||(t=[t]),t.forEach(e=>{const i=e.attribution;i&&A.push(i)}),n.demSource){const e=n.demSource.attribution;e&&A.push(e)}return Array.from(new Set(A))}class TI extends St{constructor(t){super();Y(this,"_clock",new NI);Y(this,"isLOD",!0);Y(this,"autoUpdate",!0);Y(this,"rootTile");Y(this,"loader");Y(this,"_autoAdjustMapZ",!1);Y(this,"_projection",new UI(0));Y(this,"_imgSource",[]);Y(this,"_demSource");this.loader=t.loader??new jd,this.rootTile=t.rootTile??new Vd(this.loader),this.minLevel=t.minLevel??0,this.maxLevel=t.maxLevel??19,this.imgSource=t.imgSource,this.demSource=t.demSource,this.lon0=t.lon0??0,Cu(this),this.add(this.rootTile),this.rootTile.updateMatrix(),this.rootTile.updateMatrixWorld()}get minLevel(){return this.rootTile.minLevel}set minLevel(t){this.rootTile.minLevel=t}get maxLevel(){return this.rootTile.maxLevel}set maxLevel(t){this.rootTile.maxLevel=t}get autoLoad(){return this.rootTile.autoLoad}set autoLoad(t){this.rootTile.autoLoad=t}get autoAdjustMapZ(){return this._autoAdjustMapZ}set autoAdjustMapZ(t){this._autoAdjustMapZ=t}get loadCacheSize(){return this.loader.cacheSize}set loadCacheSize(t){this.loader.cacheSize=t}get viewerBufferSize(){return this.rootTile.viewerbufferSize*2}set viewerBufferSize(t){this.rootTile.viewerbufferSize=t/2}get maxZInView(){return this.rootTile.maxZ}get minZInView(){return this.rootTile.minZ}get avgZInView(){return this.rootTile.avgZ}get lon0(){return this.projection.lon0}set lon0(t){this.projection.lon0!==t&&(t!=0&&this.rootTile.minLevel<1&&console.warn(`Map centralMeridian is ${this.lon0}, minLevel must > 0`),this.projection=Sa.createFromID(this.projection.ID,t),this.reload())}get projection(){return this._projection}set projection(t){this._projection=t,this.rootTile.scale.set(t.mapWidth,t.mapHeight,t.mapDepth),this.rootTile.isWGS=t.isWGS,this.imgSource.forEach(e=>e.projection=this.projection),this.demSource&&(this.demSource.projection=this.projection),t.ID!=this.projection.ID&&t.lon0!=this.lon0&&(this.reload(),console.log("Map Projection Changed:",t.ID),this.dispatchEvent({type:"projection-changed",projection:t}))}get imgSource(){return this._imgSource}set imgSource(t){const e=Array.isArray(t)?t:[t];if(e.length===0)throw new Error("imgSource can not be empty");this.projection=Sa.createFromID(e[0].projectionID,this.projection.lon0);const i=e.map(s=>s instanceof Uo?s:new Uo(s,this.projection));this._imgSource=i,this.loader.imgSource=i,this.dispatchEvent({type:"source-changed",source:t})}get demSource(){return this._demSource}set demSource(t){t&&(this._demSource=new Uo(t,this.projection),this.loader.demSource=this._demSource),this.dispatchEvent({type:"source-changed",source:t})}get LODThreshold(){return this.rootTile.LODThreshold}set LODThreshold(t){this.rootTile.LODThreshold=t}static create(t){return new TI(t)}update(t){this.rootTile.receiveShadow=this.receiveShadow,this.rootTile.castShadow=this.castShadow,this.autoAdjustMapZ&&this.position.setZ((this.position.z-this.avgZInView/100)/1.03),this.rootTile.update(t),this.dispatchEvent({type:"update",delta:this._clock.getDelta()})}reload(){this.rootTile.dispose(!0),this.position.setZ(0)}dispose(){this.removeFromParent(),this.reload()}geo2pos(t){const e=this.projection.project(t.x,t.y);return new M(e.x,e.y,t.z)}pos2geo(t){const e=this.projection.unProject(t.x,t.y);return new M(e.lon,e.lat,t.z)}getLocalInfoFromGeo(t){const e=this.geo2pos(t);return Ma(this,e)}getLocalInfoFromWorld(t){return Ma(this,t)}getLocalInfoFromScreen(t,e){return Eu(t,this,e)}get attributions(){return Bu(this)}get tileCount(){return Qu(this)}}class hu{constructor(){Y(this,"dataType","debug")}load(A,t,e,i){const s=r=>{var I,E;const a=r.target;((I=a.map)==null?void 0:I.image)instanceof ImageBitmap&&a.map.image.close(),(E=a.map)==null||E.dispose(),a.removeEventListener("dispose",s)},o=new vl(this.drawTile(t));o.needsUpdate=!0;const g=new Te({transparent:!0,map:o,opacity:A.opacity});return g.addEventListener("dispose",s),setTimeout(e),g}drawTile(A){const t=new OffscreenCanvas(256,256),e=t.getContext("2d");return e.scale(1,-1),e.translate(0,-256),e&&(e.strokeStyle="#ccc",e.lineWidth=4,e.strokeRect(5,5,246,246),e.fillStyle="white",e.shadowColor="black",e.shadowBlur=5,e.shadowOffsetX=1,e.shadowOffsetY=1,e.font="bold 20px arial",e.textAlign="center",e.fillText(`Tile Test - level: ${A.coord.z}`,256/2,50),e.fillText(`[${A.coord.x}, ${A.coord.y}]`,256/2,80)),t.transferToImageBitmap()}}Dt.registerMaterialLoader(new hu);class cu{constructor(){Y(this,"dataType","logo")}load(A,t,e,i){if(t.coord.z<4)return setTimeout(e),new Te;const s=new Bt(this.drawLogo(A.attribution));s.needsUpdate=!0;const o=new Te({transparent:!0,map:s,opacity:A.opacity}),g=r=>{var I,E;const a=r.target;((I=a.map)==null?void 0:I.image)instanceof ImageBitmap&&a.map.image.close(),(E=a.map)==null||E.dispose(),a.removeEventListener("dispose",g)};return o.addEventListener("dispose",g),setTimeout(e),o}drawLogo(A){const t=new OffscreenCanvas(256,256),e=t.getContext("2d");return e.scale(1,-1),e.translate(0,-256),e&&(e.fillStyle="white",e.shadowColor="black",e.shadowBlur=5,e.shadowOffsetX=1,e.shadowOffsetY=1,e.font="bold 14px arial",e.textAlign="center",e.translate(256/2,256/2),e.rotate(30*Math.PI/180),e.fillText(`${A}`,0,0)),t.transferToImageBitmap()}}Dt.registerMaterialLoader(new cu);class lu{constructor(){Y(this,"dataType","normal")}load(A,t,e,i){const s=new Bd({transparent:!0,opacity:A.opacity,flatShading:!0});return setTimeout(e),s}}Dt.registerMaterialLoader(new lu);class du{constructor(){Y(this,"dataType","wireframe")}load(A,t,e,i){const s=new FA(`hsl(${t.coord.z*14}, 100%, 50%)`),o=new Te({transparent:!0,wireframe:!0,color:s,opacity:A.opacity});return setTimeout(e),o}}Dt.registerMaterialLoader(new du);/*! Lerc 4.0 +Copyright 2015 - 2023 Esri +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at +http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +A local copy of the license and additional notices are located with the +source distribution at: +http://github.com/Esri/lerc/ +Contributors: Thomas Maurer, Wenxue Ju +*/var uu=(()=>{var n=import.meta.url;return function(t){t=t||{};var t=typeof t<"u"?t:{},e,i;t.ready=new Promise(function(U,W){e=U,i=W});var s=Object.assign({},t),o=typeof window=="object",g=typeof importScripts=="function",r=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",a="";function I(U){return t.locateFile?t.locateFile(U,a):a+U}var E,C,Q,c,l,h;r?(g?a=require("path").dirname(a)+"/":a=__dirname+"/",h=()=>{l||(c=require("fs"),l=require("path"))},E=function(U,W){return h(),U=l.normalize(U),c.readFileSync(U,W?void 0:"utf8")},Q=U=>{var W=E(U,!0);return W.buffer||(W=new Uint8Array(W)),W},C=(U,W,DA)=>{h(),U=l.normalize(U),c.readFile(U,function(x,S){x?DA(x):W(S.buffer)})},process.argv.length>1&&process.argv[1].replace(/\\/g,"/"),process.argv.slice(2),process.on("uncaughtException",function(U){if(!(U instanceof JA))throw U}),process.on("unhandledRejection",function(U){throw U}),t.inspect=function(){return"[Emscripten Module object]"}):(o||g)&&(g?a=self.location.href:typeof document<"u"&&document.currentScript&&(a=document.currentScript.src),n&&(a=n),a.indexOf("blob:")!==0?a=a.substr(0,a.replace(/[?#].*/,"").lastIndexOf("/")+1):a="",E=U=>{var W=new XMLHttpRequest;return W.open("GET",U,!1),W.send(null),W.responseText},g&&(Q=U=>{var W=new XMLHttpRequest;return W.open("GET",U,!1),W.responseType="arraybuffer",W.send(null),new Uint8Array(W.response)}),C=(U,W,DA)=>{var x=new XMLHttpRequest;x.open("GET",U,!0),x.responseType="arraybuffer",x.onload=()=>{if(x.status==200||x.status==0&&x.response){W(x.response);return}DA()},x.onerror=DA,x.send(null)}),t.print||console.log.bind(console);var B=t.printErr||console.warn.bind(console);Object.assign(t,s),s=null,t.arguments,t.thisProgram,t.quit;var p;t.wasmBinary&&(p=t.wasmBinary),t.noExitRuntime,typeof WebAssembly!="object"&&_A("no native wasm support detected");var d,f=!1,_=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function w(U,W,DA){for(var x=W+DA,S=W;U[S]&&!(S>=x);)++S;if(S-W>16&&U.buffer&&_)return _.decode(U.subarray(W,S));for(var $="";W>10,56320|SA&1023)}}return $}function R(U,W){return U?w(u,U,W):""}var F,m,u,L,k;function T(U){F=U,t.HEAP8=m=new Int8Array(U),t.HEAP16=new Int16Array(U),t.HEAP32=L=new Int32Array(U),t.HEAPU8=u=new Uint8Array(U),t.HEAPU16=new Uint16Array(U),t.HEAPU32=k=new Uint32Array(U),t.HEAPF32=new Float32Array(U),t.HEAPF64=new Float64Array(U)}t.INITIAL_MEMORY;var P,V=[],O=[],oA=[];function z(){if(t.preRun)for(typeof t.preRun=="function"&&(t.preRun=[t.preRun]);t.preRun.length;)uA(t.preRun.shift());aA(V)}function BA(){aA(O)}function dA(){if(t.postRun)for(typeof t.postRun=="function"&&(t.postRun=[t.postRun]);t.postRun.length;)WA(t.postRun.shift());aA(oA)}function uA(U){V.unshift(U)}function HA(U){O.unshift(U)}function WA(U){oA.unshift(U)}var Z=0,nA=null;function mA(U){Z++,t.monitorRunDependencies&&t.monitorRunDependencies(Z)}function CA(U){if(Z--,t.monitorRunDependencies&&t.monitorRunDependencies(Z),Z==0&&nA){var W=nA;nA=null,W()}}function _A(U){t.onAbort&&t.onAbort(U),U="Aborted("+U+")",B(U),f=!0,U+=". Build with -sASSERTIONS for more info.";var W=new WebAssembly.RuntimeError(U);throw i(W),W}var GA="data:application/octet-stream;base64,";function UA(U){return U.startsWith(GA)}function v(U){return U.startsWith("file://")}var j;t.locateFile?(j="lerc-wasm.wasm",UA(j)||(j=I(j))):j=new URL("data:application/wasm;base64,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Tg0AA0AgCiACQQN0ai8BAEUNASACQQFqIgIgA0cNAAsgAyECDAELIAIhBSACIANODQEDQCAKIAVBA3RqLwEADQIgBUEBaiIFIANHDQALCyADIAJrIgUgCSAFIAlKIgUbIQkgAiAIIAUbIQgMAgsgBSACayILIAkgCSALSCILGyEJIAIgCCALGyEIIAMgBSICSg0ACwsgAyAJayAAIARrSARAIAYgCCAJajYCFCAGIAMgCGoiADYCECAGKAIUIQQLQQAhAiAAIARMDQAgACAEayIFQQFxIQkCQCAEQQFqIABGBEBBACEADAELIAVBfnEhBUEAIQADQCAAIAogBEEAIAMgAyAEShtrQQN0ai8BACIIIAAgCEobIgAgCiAEQQFqIghBACADIAMgCEoba0EDdGovAQAiCCAAIAhKGyEAIARBAmohBCACQQJqIgIgBUcNAAsLIAkEQCAAIAogBEEAIAMgAyAEShtrQQN0ai8BACICIAAgAkobIQALIABBIWsiAkFgTwRAIAYgADYCDAsgAkFfSyECCwJAIAIiCkUNACAHKAIIIQwgBygCBCENIAEgBigCDCILIAcoAhwiDiALIA5IGyIANgIAIAcgBygCEDYCFCAGQX82AhhBACEFQQAhCAJAQQEgAHQiAyAHKAIYIgAgBygCECICa0ECdU0EQAJAIAcoAhQiBSACa0ECdSIJIAMgAyAJSxsiBEUNACAEQQFrIQ8CQCAEQQNxIhBFBEAgAiEADAELIAIhAANAIAAgBi8BGDsBACAAIAYvARo7AQIgBEEBayEEIABBBGohACAIQQFqIgggEEcNAAsLIA9BA0kNAANAIAAgBi8BGDsBACAAIAYvARo7AQIgACAGLwEYOwEEIAAgBi8BGjsBBiAAIAYvARg7AQggACAGLwEaOwEKIAAgBi8BGDsBDCAAIAYvARo7AQ4gAEEQaiEAIARBBGsiBA0ACwsgAyAJSwRAIAUgAyAJa0ECdGohAANAIAUgBigBGDYBACAFQQRqIgUgAEcNAAsgByAANgIUDAILIAcgAiADQQJ0ajYCFAwBCyACBEAgByACNgIUIAIQBiAHQQA2AhggB0IANwIQQQAhAAsCQCADQYCAgIAETw0AIABBAXUiAiADIAIgA0sbQf////8DIABB/P///wdJGyIAQYCAgIAETw0AIAcgAEECdCIAEAkiAjYCECAHIAI2AhQgByAAIAJqNgIYIAYoARghBCACIQAgA0EHcSIJBEADQCAAIAQ2AQAgAEEEaiEAIAVBAWoiBSAJRw0ACwsgA0ECdCACaiECIANBAWtB/////wNxQQdPBEADQCAAIAQ2ARwgACAENgEYIAAgBDYBFCAAIAQ2ARAgACAENgEMIAAgBDYBCCAAIAQ2AQQgACAENgEAIABBIGoiACACRw0ACwsgByACNgIUDAELEAoACyAMIA1rQQN1IQlBICEEIAYoAhQiAiAGKAIQIgxOIg9FBEAgBygCECEQIAEoAgAhDSAHKAIEIRIgAiEDA0ACQCASIANBACAJIAMgCUgbayIFQQN0aiIALwEAIghFDQAgACgCBCEAIAggDUoEQEEBIQUgAEECTwRAA0AgBUEBaiEFIABBA0shESAAQQF2IQAgEQ0ACwsgCCAFayIAIAQgACAESBshBAwBCyAAIA0gCGsiEXQhE0EAIQADQCAQIAAgE3JBAnRqIhQgBTsBAiAUIAg7AQAgAEEBaiIAIBF2RQ0ACwsgA0EBaiIDIAxHDQALCyAHIARBACALIA5KIgAbNgIgIABFDQAgBygCJCIABEAgBkEANgIYIAAgBkEYahAnIAcoAiQiAARAIAAQBgsgB0EANgIkC0EQEAkiBEIANwMIIARB//8DOwEEIARBADYCACAHIAQ2AiQgDw0AIAcoAiAhCCAHKAIEIQcDQAJAIAcgAkEAIAkgAiAJSBtrIgtBA3RqIgMvAQAiAEUNACABKAIAIABODQAgACAIayIFQQBMDQAgAygCBCEOIAQhAANAIAAhAwJAIA4gBUEBayIFdkEBcQRAIAMoAgwiAA0BQRAQCSIAQgA3AwggAEH//wM7AQQgAEEANgIAIAMgADYCDAwBCyADKAIIIgANAEEQEAkiAEIANwMIIABB//8DOwEEIABBADYCACADIAA2AggLIAUNAAsgACALOwEECyACQQFqIgIgDEcNAAsLIAZBIGokACAKC+AMARF/IwBBQGoiBSQAAkAgAUUNACABKAIAIgdFDQAgBSAHNgI8IAUgAigCACIGNgI4QRAQCSINQgA3AgAgDUIANwIIAkAgBkEQSQ0AIA0gBykAADcAACANIAcpAAg3AAggBSAGQRBrNgI4IAUgB0EQajYCPCANKAIAQQJIDQAgDSgCCCIHQQBIDQAgDSgCDCIKIAdMDQAgDSgCBCIGQQBIDQAgBiAAKAIASg0AIAdBACAGIAYgB0sbayAGTg0AIAZBf3NBfyAGIApIGyAKaiAGTg0AIAVBADYCACAFQShqIAogB2siESAFEFMhDiAFQgA3AgwgBUIANwIUIAVCADcCHCAFQQA2AiQgBUIANwIEIAVBwA42AgACQCAFIAVBPGogBUE4aiAOIA4oAgQgDigCAGtBAnUgAxAZRQ0AIA4oAgQgDigCAGtBAnUgEUcNAAJAIAYgAEEEaiIJKAIEIAkoAgAiBGtBA3UiA0sEQCAGIANrIgggCSgCCCIMIAkoAgQiBGtBA3VNBEACQCAIRQ0AIAQhAyAIQQdxIgsEQANAIANBADYCBCADQQA7AQAgA0EIaiEDIA9BAWoiDyALRw0ACwsgCEEDdCAEaiEEIAhBAWtB/////wFxQQdJDQADQCADQQA7ATggA0EAOwEwIANBADsBKCADQQA7ASAgA0EAOwEYIANBADsBECADQQA7AQggA0EANgIEIANBADsBACADQQA2AjwgA0EANgI0IANBADYCLCADQQA2AiQgA0EANgIcIANBADYCFCADQQA2AgwgA0FAayIDIARHDQALCyAJIAQ2AgQMAgsCQCAEIAkoAgAiEGsiE0EDdSIEIAhqIgNBgICAgAJJBEAgDCAQayIMQQJ1IhIgAyADIBJJG0H/////ASAMQfj///8HSRsiDARAIAxBgICAgAJPDQIgDEEDdBAJIQsLIAsgBEEDdGoiBCEDIAhBB3EiEgRAIAQhAwNAIANBADYCBCADQQA7AQAgA0EIaiEDIA9BAWoiDyASRw0ACwsgBCAIQQN0aiEEIAhBAWtB/////wFxQQdPBEADQCADQQA7ATggA0EAOwEwIANBADsBKCADQQA7ASAgA0EAOwEYIANBADsBECADQQA7AQggA0EANgIEIANBADsBACADQQA2AjwgA0EANgI0IANBADYCLCADQQA2AiQgA0EANgIcIANBADYCFCADQQA2AgwgA0FAayIDIARHDQALCyATQQBKBEAgCyAQIBMQCBoLIAkgCyAMQQN0ajYCCCAJIAQ2AgQgCSALNgIAIBAEQCAQEAYLDAMLEAoACxAhAAsgAyAGSwRAIAkgBCAGQQN0ajYCBAsLIAAoAgggACgCBCIJayIDQQBKBEAgA0EDdiEEIAkhAwNAIANBADYCBCADQQA7AQAgA0EIaiEDIARBAUshCCAEQQFrIQQgCA0ACwsgDigCACEEIAchAyARQQFxBEAgCSAHQQAgBiAGIAdKG2tBA3RqIAQoAgA7AQAgB0EBaiEDCyAHQQFqIApHBEADQCAJIANBACAGIAMgBkgba0EDdGogBCADIAdrQQJ0aigCADsBACAJIANBAWoiCEEAIAYgBiAIShtrQQN0aiAEIAggB2tBAnRqKAIAOwEAIANBAmoiAyAKRw0ACwsgACEDIAohCUEAIQRBACELAkAgBUFERg0AIAUoAjwiBkUNACAFKAI4IgohACAHIAlIBEAgAygCCCADKAIEIgxrQQN1IQ8gCiEAIAYhAwNAAkAgDCAHQQAgDyAHIA9IG2tBA3RqIhAvAQAiCEUNACAAQQRJDQMgCEEgSw0DIBAgAygCACAEdEEgIAhrdiIRNgIEIAhBICAEa0wEQCAEIAhqIgRBIEcNASAAQQRrIQAgA0EEaiEDQQAhBAwBCyAAQQRrIgBBBEkNAyAQIAMoAgRBwAAgBCAIaiIEa3YgEXI2AgQgA0EEaiEDIARBIGshBAsgB0EBaiIHIAlHDQALIAMgBmsgBEEASkECdGpBfHEhBAsgBCAKSw0AIAUgBCAGajYCPCAFIAogBGsiAzYCOCAAIANGIAAgA0EEakZyIQsLIAtFDQAgASAFKAI8NgIAIAIgBSgCODYCAEEBIRQLIAUQNBogDigCACIARQ0AIA4gADYCBCAAEAYLIA0QBgsgBUFAayQAIBQL8gEBB38gASAAKAIIIgUgACgCBCICa0ECdU0EQCAAIAEEfyACQQAgAUECdCIAEAcgAGoFIAILNgIEDwsCQCACIAAoAgAiBGsiBkECdSIHIAFqIgNBgICAgARJBEBBACECIAUgBGsiBUEBdSIIIAMgAyAISRtB/////wMgBUH8////B0kbIgMEQCADQYCAgIAETw0CIANBAnQQCSECCyAHQQJ0IAJqQQAgAUECdCIBEAcgAWohASAGQQBKBEAgAiAEIAYQCBoLIAAgAiADQQJ0ajYCCCAAIAE2AgQgACACNgIAIAQEQCAEEAYLDwsQCgALECEAC9sCAQh/IAAoAgQhBAJAIAAoAgwgACgCCGwiAEEHaiIDQQhJDQACQCADQQN1IgFBAUYEQCAEIQEMAQsgAUF+cSEGIAQhAQNAIAEtAAEiB0EPcUGACGotAAAgAiABLQAAIghBD3FBgAhqLQAAaiAIQQR2QYAIai0AAGpqIAdBBHZBgAhqLQAAaiECIAFBAmohASAFQQJqIgUgBkcNAAsLIANBCHFFDQAgAiABLQAAIgFBD3FBgAhqLQAAaiABQQR2QYAIai0AAGohAgsCQCADQXhxIgMgAEwNACAAQQFqIQEgAEEBcQRAIAIgBCAAQQN1ai0AACAAQQdxdEGAAXFBB3ZrIQIgASEACyABIANGDQADQCACIAQgAEEDdWotAAAgAEEHcXRBgAFxQQd2ayAEIABBAWoiAUEDdWotAAAgAUEHcXRBgAFxQQd2ayECIABBAmoiACADRw0ACwsgAgtoAQF/IAAoAggiAgRAIAIgARAnIAAoAggiAgRAIAIQBgsgAEEANgIIIAEgASgCAEEBazYCAAsgACgCDCICBEAgAiABECcgACgCDCICBEAgAhAGCyAAQQA2AgwgASABKAIAQQFrNgIACwuBAQECfwJAAkAgAkEETwRAIAAgAXJBA3ENAQNAIAAoAgAgASgCAEcNAiABQQRqIQEgAEEEaiEAIAJBBGsiAkEDSw0ACwsgAkUNAQsDQCAALQAAIgMgAS0AACIERgRAIAFBAWohASAAQQFqIQAgAkEBayICDQEMAgsLIAMgBGsPC0EAC8QEAgl/An4jAEEQayILJAACQCAERQ0AIAVBH0oNACAFrCAErX5CH3xCBYgiEEIChiIPQvz///8PgyAPUg0AIA+nQQQgBCAFbCIMQR9xIg1BB2pBA3ZrIgdBACANGyIOIAIoAgBqSw0AIBCnIQYgC0EANgIMAkAgBCADKAIEIAMoAgAiCWtBAnUiCEsEQCADIAQgCGsgC0EMahAwDAELIAQgCE8NACADIAkgBEECdGo2AgQLIABBHGohCQJAIAYgACgCICAAKAIcIghrQQJ1IgpLBEAgCSAGIAprECUgCSgCACEIDAELIAYgCk8NACAAIAggBkECdGo2AiALIAggBkECdEEEayIAakEANgIAIAggASgCACAMQQdqQQN2IgoQCBogCSgCACEGIA4EQCAAIAZqIQkgB0EHcSIMBEAgCSgCACEAQQAhCANAIAdBAWshByAAQQh0IQAgCEEBaiIIIAxHDQALCyAJIA1BGEsEfwNAIAdBCGsiBw0AC0EABSAACzYCAAtBICAFayEJIAMoAgAhAEEAIQhBACEHA0AgBigCACEDAn8gBUEgIAdrTARAIAAgAyAHdCAJdjYCAEEAIAUgB2oiAyADQSBGIgMbIQcgBiADQQJ0agwBCyAAIAMgB3QgCXYiAzYCACAAIAYoAgRBICAHIAlrIgdrdiADcjYCACAGQQRqCyEGIABBBGohACAIQQFqIgggBEcNAAsgASABKAIAIApqNgIAIAIgAigCACAKazYCAEEBIQYLIAtBEGokACAGC8sDAgZ/An4CQCAERQ0AIAVBH0oNACAFrCAErX5CH3xCBYgiDUIChiIMQvz///8PgyAMUg0AIAIoAgAiCyAMpyAEIAVsQR9xIgZBB2pBA3ZBBGtBACAGG2oiCk8EQCANpyEGAkAgBCADKAIEIAMoAgAiCGtBAnUiB0sEQCADIAQgB2sQJQwBCyAEIAdPDQAgAyAIIARBAnRqNgIECyAAQRxqIQgCQCAGIAAoAiAgACgCHCIHa0ECdSIJSwRAIAggBiAJaxAlIAgoAgAhBwwBCyAGIAlPDQAgACAHIAZBAnRqNgIgCyAGQQJ0IAdqQQRrQQA2AgAgByABKAIAIAoQCBpBICAFayEHIAgoAgAhACADKAIAIQNBACEIQQAhBgNAAn8gByAGayIJQQBOBEAgAyAAKAIAIAl0IAd2NgIAQQAgBSAGaiIGIAZBIEYiCRshBiAAIAlBAnRqDAELIAMgACgCACAGdiIJNgIAIAMgACgCBEHAACAFIAZqa3QgB3YgCXI2AgAgBiAHayEGIABBBGoLIQAgA0EEaiEDIAhBAWoiCCAERw0ACyABIAEoAgAgCmo2AgAgAiACKAIAIAprNgIACyAKIAtNIQYLIAYL9QEBC38CQCABRQ0AIANFDQAgASgCACIFRQ0AIAAoAjAhCCAAQQxqECYhBCACKAIAIgkgBCAIQQJ0IgpsIgtPBEAgACgCKCIMQQBMBH8gCQUgACgCLCEGQQAhBANAQQAhDiAGQQBKBEADQCAAKAIQIARBA3VqLQAAIARBB3F0QYABcQRAIAMgB0ECdGogBSAKEAgaIAUgCmohBSAAKAIsIQYLIAcgCGohByAEQQFqIQQgDkEBaiIOIAZIDQALIAAoAighDAsgDUEBaiINIAxIDQALIAIoAgALIQQgASAFNgIAIAIgBCALazYCAAsgCSALTyEECyAECzABAX9BBCEBAkACQAJAIABBBWsOAgIBAAtBkwxB/whBsQFBpgsQAAALQQghAQsgAQsDAAELXQEBfyAAKAIQIgNFBEAgAEEBNgIkIAAgAjYCGCAAIAE2AhAPCwJAIAEgA0YEQCAAKAIYQQJHDQEgACACNgIYDwsgAEEBOgA2IABBAjYCGCAAIAAoAiRBAWo2AiQLCwMAAQulBAEIfyABIAAoAggiBSAAKAIEIgRrQQJ1TQRAAkAgAUUNACAEIQMgAUEHcSIGBEADQCADIAIoAgA2AgAgA0EEaiEDIAhBAWoiCCAGRw0ACwsgAUECdCAEaiEEIAFBAWtB/////wNxQQdJDQADQCADIAIoAgA2AgAgAyACKAIANgIEIAMgAigCADYCCCADIAIoAgA2AgwgAyACKAIANgIQIAMgAigCADYCFCADIAIoAgA2AhggAyACKAIANgIcIANBIGoiAyAERw0ACwsgACAENgIEDwsCQCAEIAAoAgAiBmsiCkECdSIEIAFqIgNBgICAgARJBEAgBSAGayIFQQF1IgkgAyADIAlJG0H/////AyAFQfz///8HSRsiBQRAIAVBgICAgARPDQIgBUECdBAJIQcLIAcgBEECdGoiBCEDIAFBB3EiCQRAIAQhAwNAIAMgAigCADYCACADQQRqIQMgCEEBaiIIIAlHDQALCyAEIAFBAnRqIQQgAUEBa0H/////A3FBB08EQANAIAMgAigCADYCACADIAIoAgA2AgQgAyACKAIANgIIIAMgAigCADYCDCADIAIoAgA2AhAgAyACKAIANgIUIAMgAigCADYCGCADIAIoAgA2AhwgA0EgaiIDIARHDQALCyAKQQBKBEAgByAGIAoQCBoLIAAgByAFQQJ0ajYCCCAAIAQ2AgQgACAHNgIAIAYEQCAGEAYLDwsQCgALECEACwQAIAAL1QIBAn8CQCAAIAFGDQAgASAAIAJqIgRrQQAgAkEBdGtNBEAgACABIAIQCBoPCyAAIAFzQQNxIQMCQAJAIAAgAUkEQCADDQIgAEEDcUUNAQNAIAJFDQQgACABLQAAOgAAIAFBAWohASACQQFrIQIgAEEBaiIAQQNxDQALDAELAkAgAw0AIARBA3EEQANAIAJFDQUgACACQQFrIgJqIgMgASACai0AADoAACADQQNxDQALCyACQQNNDQADQCAAIAJBBGsiAmogASACaigCADYCACACQQNLDQALCyACRQ0CA0AgACACQQFrIgJqIAEgAmotAAA6AAAgAg0ACwwCCyACQQNNDQADQCAAIAEoAgA2AgAgAUEEaiEBIABBBGohACACQQRrIgJBA0sNAAsLIAJFDQADQCAAIAEtAAA6AAAgAEEBaiEAIAFBAWohASACQQFrIgINAAsLC+QHAQt/IwBBIGsiBCQAAkACQAJAIAAoAgQiBSAAKAIIIgdJBEAgASAFRgRAIAEgAigCADYCACAAIAFBBGo2AgQMAgsgBSIDQQRrIgcgA0kEQANAIAMgBygCADYCACADQQRqIQMgB0EEaiIHIAVJDQALCyAAIAM2AgQgAUEEaiIAIAVHBEAgBSAFIABrIgBBAnVBAnRrIAEgABAyCyABIAIoAgA2AgAMAQsgBSAAKAIAIgVrQQJ1QQFqIgNBgICAgARPDQEgBCAAQQhqNgIYIAQgByAFayIHQQF1IgYgAyADIAZJG0H/////AyAHQfz///8HSRsiAwR/IANBgICAgARPDQMgA0ECdBAJBUEACyIHNgIIIAQgByABIAVrQQJ1QQJ0aiIFNgIQIAQgByADQQJ0ajYCFCAEIAU2AgwgAiEHAkACQAJAIAQoAhAiAiAEKAIURwRAIAIhAwwBCyAEKAIMIgYgBCgCCCIISwRAIAIgBmshAyAGIAYgCGtBAnVBAWpBfm1BAnQiCGohBSAEIAIgBkcEfyAFIAYgAxAyIAQoAgwFIAILIAhqNgIMIAMgBWohAwwBC0EBIAIgCGtBAXUgAiAIRhsiA0GAgICABE8NASADQQJ0IgUQCSIJIAVqIQogCSADQXxxaiIFIQMCQCACIAZGDQAgAiAGayICQXxxIQsCQCACQQRrIgxBAnZBAWpBB3EiDUUEQCAFIQIMAQtBACEDIAUhAgNAIAIgBigCADYCACAGQQRqIQYgAkEEaiECIANBAWoiAyANRw0ACwsgBSALaiEDIAxBHEkNAANAIAIgBigCADYCACACIAYoAgQ2AgQgAiAGKAIINgIIIAIgBigCDDYCDCACIAYoAhA2AhAgAiAGKAIUNgIUIAIgBigCGDYCGCACIAYoAhw2AhwgBkEgaiEGIAJBIGoiAiADRw0ACwsgBCAKNgIUIAQgAzYCECAEIAU2AgwgBCAJNgIIIAhFDQAgCBAGIAQoAhAhAwsgAyAHKAIANgIAIAQgA0EEajYCEAwBCxAhAAsgBCAEKAIMIAEgACgCACIDayICayIFNgIMIAJBAEoEQCAFIAMgAhAIGgsgBCgCECEDIAEgACgCBCICRwRAA0AgAyABKAIANgIAIANBBGohAyABQQRqIgEgAkcNAAsLIAAoAgAhASAAIAQoAgw2AgAgBCABNgIMIAAgAzYCBCAEIAI2AhAgACgCCCEDIAAgBCgCFDYCCCAEIAE2AgggBCADNgIUIAEgAkcEQCAEIAIgASACa0EDakF8cWo2AhALIAEEQCABEAYLCyAEQSBqJAAPCxAKAAsQIQALTQEBfyAAQcAONgIAIAAoAhwiAQRAIAAgATYCICABEAYLIAAoAhAiAQRAIAAgATYCFCABEAYLIAAoAgQiAQRAIAAgATYCCCABEAYLIAALvgEBBH9BCBACIgJB/BQ2AgAgAkHsFTYCAAJAIAAiA0EDcQRAA0AgAC0AAEUNAiAAQQFqIgBBA3ENAAsLA0AgACIBQQRqIQAgASgCACIEQX9zIARBgYKECGtxQYCBgoR4cUUNAAsDQCABIgBBAWohASAALQAADQALCyAAIANrIgBBDWoQCSIBQQA2AgggASAANgIEIAEgADYCACACIAFBDGogAyAAQQFqEAg2AgQgAkGcFjYCACACQbwWQQMQAQALh5EDAy5/BHwCfUECISQCQAJAAkACQAJAAkACQAJAAkACQCAIDggAAQIDBAUGBwgLIwBBkANrIggkAAJAIAFFDQAgAEUNACAJRQ0AIARBAEwNACAFQQBMDQAgBkEATA0AIAdBAEwNACACIAdHIAJBAk9xDQBBACACQQBKIAMbDQAgCCAANgKMAyAIQQA6AK8CAkACQCAAIAEgCEGwAmogCEGvAmoQDUUNACAIKAKwAkEATA0AIAAgASAIQegBakEAQQBBABAUIiQNAkECISQgCCgChAIgAkoNAiAIKAL8ASAHSA0CAkAgBEECSA0AIAgoAogCRQ0AQQUhJCAKRQ0DIAtFDQMgCkEAIAcQBxogC0EAIAdBA3QQBxoLIAggATYC5AEgCEEQahAYIQ8gCEEANgIMIAhCADcCBCAIQfAONgIAQQEhJAJAIAdBAEwNACAFIAZsISVBASEuIARBAkghGQNAAkAgCCgCjAMiDSAAayABTw0AIA0gCCgC5AEgCEGwAmogCEGvAmoQDUUNACAIKALAAiAERw0CIAgoArwCIAVHDQIgCCgCuAIgBkcNAiABIAgoAswCIAgoAowDIABrakkEQEEDISQMAwtBACENIAIgMEwiIEUEQCAIIAUgBhATRQ0DIAgoAgQhDQsgCEHkAWohISAJICUgMGwiKiAEbGohFkEAITZBACE0QQAhKCMAQRBrIikkAAJAIAhBjANqIhpFDQAgFkUNACAhKAIAIQ4gGigCACEMIBogISAPQSBqEBdFDQAgDiAPKAI8IhVJDQAgDygCIEEDTgRAIBVBDkgNASAMQQ5qIBVBDmsQHCAPKAIkRw0BCyAPIBogIRAaRQ0AIA0EQCANIA8oAhAgDygCGCAPKAIUbEEHakEDdRAIGgsgFkEAIA8oAjAgDygCKCAPKAIsbGwQByESAkAgDygCNEUNACAPKwNYIA8rA2BhBEAgDyASEEUhNgwCCwJAIA8oAiBBBEgNACAPIBogIRBGRQ0CIClBADoADyAPIClBD2oQHUUNAiApLQAPRQ0AIA8gEhBFITYMAgsgISgCACIVRQ0BIBooAgAiEC0AACENIBogEEEBajYCACAhIBVBAWsiDDYCACANRQRAIA8rA1AhOiAPKAJIIQ4CQAJAAkAgDygCICINQQJIDQAgDkEBSw0AIDpEAAAAAAAA4D9hDQELIA1BBkgNASAOQX5xQQZHDQEgOkQAAAAAAAAAAGINAQsgDEUNAyAQLQABIQ4gGiAQQQJqNgIAICEgFUECazYCACAOQQNLDQMgDkEDRiAPKAIgIgxBBkhxDQMgDEEESCAOQQJPcQ0DIA8gDjYCpAEgDkUNACAPKwNQITogDygCSCENAkAgDEECSA0AIA1BAUsNACA6RAAAAAAAAOA/Yg0AIA5BAUcEQCAMQQRJDQUgDkECRw0FCyAPIBogISASEEQhNgwECyAMQQZIDQMgDUF+cUEGRw0DIDpEAAAAAAAAAABiDQMgDkEDRw0DIBogISASIA1BB0YgDygCLCAPKAIoIA8oAjAQHiE2DAMLQQAhDCMAQRBrIiskAAJAIBpFDQAgEkUNACAaKAIARQ0AICtBADYCCCArQgA3AwAgDygCOCIxQSBKDQAgMUEBayINIA8oAixqIDFtITICQCANIA8oAihqIDFtIjhBAEwNACAPKAIwITkgMkEBayEsIDhBAWshLUEBISgDQCAyQQBKBEAgDygCKCAxIDRsIhVrIDEgLSA0RhsgFWohH0EAISIDQCA5QQBKBEAgDygCLCAiIDFsIg1rIDEgIiAsRhsgDWohGEEAIQwDQCAVIR4gDCEdQQAhEUQAAAAAAAAAACE8IwBBEGsiEyQAAkAgISgCACIMRQ0AIA8oAjAhFyAPKAIsIS8gEyAaKAIAIhxBAWoiEDYCDCAcLQAAIRQgEyAMQQFrIiM2AgggFEECdiANQQN2c0EOQQ8gDygCICIzQQRKIgwbcQ0AIAwgFEEEcUECdnEiNSAdRXENAAJAAkACQCAUQQNxIiZBA0YNAAJAAkAgJkEBaw4CAgABCyAeIB9IBEADQCANIBhIBEAgHiAvbCANaiIRIBdsIB1qIRQgDSEMA0AgDygCECARQQN1ai0AACARQQdxdEGAAXEEQCASIBRqIDUEfyASIBRqQQFrLQAABUEACzoAAAsgFCAXaiEUIBFBAWohESAMQQFqIgwgGEcNAAsLIB5BAWoiHiAfRw0ACwsgGiAQNgIADAMLIDUNA0EAISYgHiAfSARAIBAhDgNAIA0gGEgEQCAeIC9sIA1qIhEgF2wgHWohFCANIQwDQCAPKAIQIBFBA3VqLQAAIBFBB3F0QYABcQRAICNFBEBBACERDAkLIBIgFGogDi0AADoAACATICNBAWsiIzYCCCAmQQFqISYgDkEBaiEOCyAUIBdqIRQgEUEBaiERIAxBAWoiDCAYRw0ACwsgHkEBaiIeIB9HDQALCyATIBAgJmo2AgwMAQsgFEEGdiEOAkACQAJAAkACQAJAAkACQAJAAkBBBCAPKAJIIhAgEEEGSBsgECA1GyIMQQJrDgYDAAMAAQIECyAMIA5BAXRrIgxBCCAMQQhJGyEQDAMLQQYhECAUQcAASQ0EQQJBASAOQQFGGyEQDAMLIBRBwABJDQRBCCAOQQF0ayEQDAILIAwgDmsiDEEIIAxBCEkbIRALIBBBCEYNBwtBASEUQQAhDAJAIBAOCAMDAAABAQECBAtBAiEUDAILQQQhFAwBC0EIIRRBByEQCyAjIBQiDEkNAwsCQAJAAkACQAJAAkACQAJAAkAgEA4IAAECAwQFBgcICyAcLAABIQ4gEyAcQQJqNgIMIA63ITwMBwsgHC0AASEOIBMgHEECajYCDCAOuCE8DAYLIBwuAAEhDiATIBxBA2o2AgwgDrchPAwFCyAcLwABIQ4gEyAcQQNqNgIMIA64ITwMBAsgHCgAASEOIBMgHEEFajYCDCAOtyE8DAMLIBwoAAEhDiATIBxBBWo2AgwgDrghPAwCCyAcKgABIT4gEyAcQQVqNgIMID67ITwMAQsgHCsAASE8IBMgHEEJajYCDAsgEyAjIAxrNgIIIA8oArQBIB1BA3RqIA9B4ABqIgwgF0EBShsgDCAzQQNKGysDACE7ICZBA0YEQCAeIB9ODQECfyA8mUQAAAAAAADgQWMEQCA8qgwBC0GAgICAeAshJgNAIB4gL2wgDWoiESAXbCAdaiEUAkAgNQRAIA0hDCANIBhODQEDQCAPKAIQIBFBA3VqLQAAIBFBB3F0QYABcQRAAn8gOyA8IBIgFGoiEEEBaywAALegIjogOiA7ZBsiOplEAAAAAAAA4EFjBEAgOqoMAQtBgICAgHgLIQ4gECAOOgAACyAUIBdqIRQgEUEBaiERIAxBAWoiDCAYRw0ACwwBCyANIQwgDSAYTg0AA0AgDygCECARQQN1ai0AACARQQdxdEGAAXEEQCASIBRqICY6AAALIBQgF2ohFCARQQFqIREgDEEBaiIMIBhHDQALCyAeQQFqIh4gH0cNAAsMAQsgD0H4AGogE0EMaiATQQhqICsgGCANayIOIB8gHmtsIgwgMxAZRQ0CIA8rA1AiOiA6oCE9IAwgKygCBCArKAIAIhFrQQJ1RgRAIB4gH04NASANIB1qIB4gL2xqQQFrISYgDUEBaiE3IA5BAXEhHCANQX9zIBhqITNBACEjA0AgHiAvbCANaiAXbCAdaiEUAkAgNUUEQCANIBhODQEgHAR/IBIgFGoCfyA7IBEoAgC4ID2iIDygIjogOiA7ZBsiOplEAAAAAAAA4EFjBEAgOqoMAQtBgICAgHgLOgAAIBQgF2ohFCARQQRqIREgNwUgDQshDCAzRQ0BA0AgEiAUagJ/IDsgESgCALggPaIgPKAiOiA6IDtkGyI6mUQAAAAAAADgQWMEQCA6qgwBC0GAgICAeAs6AAAgEiAUIBdqIg5qAn8gOyARKAIEuCA9oiA8oCI6IDogO2QbIjqZRAAAAAAAAOBBYwRAIDqqDAELQYCAgIB4CzoAACARQQhqIREgDiAXaiEUIAxBAmoiDCAYRw0ACwwBCyANIBhODQAgF0EBRwRAIA0hDANAAn8gOyARKAIAuCA9oiA8oCASIBRqIhBBAWssAAC3oCI6IDogO2QbIjqZRAAAAAAAAOBBYwRAIDqqDAELQYCAgIB4CyEOIBAgDjoAACAUIBdqIRQgEUEEaiERIAxBAWoiDCAYRw0ACwwBCyASICYgIyAvbGpqLQAAIQwgHAR/IBIgFGoCfyA7IBEoAgC4ID2iIDygIAxBGHRBGHW3oCI6IDogO2QbIjqZRAAAAAAAAOBBYwRAIDqqDAELQYCAgIB4CyIMOgAAIBQgF2ohFCARQQRqIREgNwUgDQshDiAzRQ0AA0AgEiAUagJ/IDsgESgCALggPaIgPKAgDEEYdEEYdbegIjogOiA7ZBsiOplEAAAAAAAA4EFjBEAgOqoMAQtBgICAgHgLIgw6AAAgEiAUIBdqIhBqAn8gOyARKAIEuCA9oiA8oCAMt6AiOiA6IDtkGyI6mUQAAAAAAADgQWMEQCA6qgwBC0GAgICAeAsiDDoAACARQQhqIREgECAXaiEUIA5BAmoiDiAYRw0ACwsgI0EBaiEjIB5BAWoiHiAfRw0ACwwBCyAPKAIgQQJMBEAgHiAfTg0BQQAhDANAIA0gGEgEQCAeIC9sIA1qIhEgF2wgHWohFCANIQ4DQCAPKAIQIBFBA3VqLQAAIBFBB3F0QYABcQRAICsoAgQgKygCACIQa0ECdSAMRgRAQQAhEQwICyASIBRqAn8gOyAQIAxBAnRqKAIAuCA9oiA8oCI6IDogO2QbIjqZRAAAAAAAAOBBYwRAIDqqDAELQYCAgIB4CzoAACAMQQFqIQwLIBQgF2ohFCARQQFqIREgDkEBaiIOIBhHDQALCyAeQQFqIh4gH0cNAAsMAQsgHiAfTg0AA0AgHiAvbCANaiIUIBdsIB1qIQwCQCA1RQRAIA0hDiANIBhODQEDQCAPKAIQIBRBA3VqLQAAIBRBB3F0QYABcQRAIAwgEmoCfyA7IBEoAgC4ID2iIDygIjogOiA7ZBsiOplEAAAAAAAA4EFjBEAgOqoMAQtBgICAgHgLOgAAIBFBBGohEQsgDCAXaiEMIBRBAWohFCAOQQFqIg4gGEcNAAsMAQsgDSEOIA0gGE4NAANAIA8oAhAgFEEDdWotAAAgFEEHcXRBgAFxBEACfyA7IBEoAgC4ID2iIDygIAwgEmoiJkEBaywAALegIjogOiA7ZBsiOplEAAAAAAAA4EFjBEAgOqoMAQtBgICAgHgLIRAgJiAQOgAAIBFBBGohEQsgDCAXaiEMIBRBAWohFCAOQQFqIg4gGEcNAAsLIB5BAWoiHiAfRw0ACwsgGiATKAIMNgIAIBMoAgghIwsgISAjNgIAQQEhEQsgE0EQaiQAIBFFDQUgHUEBaiIMIDlHDQALCyAiQQFqIiIgMkcNAAsLIDRBAWoiNCA4SCEoIDQgOEcNAAsLIChFIQwgKygCACINRQ0AICsgDTYCBCANEAYLICtBEGokACAMQQFxDQEMAgsgDyAaICEgEhBDRQ0BC0EBITYLIClBEGokACA2RQ0CAkAgGQ0AIAgoAogCRQ0AIAogMGogCC0A1AIiDUEARzoAACALIDBBA3RqIAgrA4ADOQMAIA1FDQBBACEoQQAhDQJAIBYiDkUgCCgCvAIiHEEATHIgCCgCuAIiJkEATHIgCCgCwAIiN0EATHIiFA0AAn8gCCsD+AIiOplEAAAAAAAA4EFjBEAgOqoMAQtBgICAgHgLIgwCfyAIKwOAAyI6mUQAAAAAAADgQWMEQCA6qgwBC0GAgICAeAsiM0YNACAIKAIIIBxGIAgoAgwgJkZxIR4gN0F+cSEdIDdBAXEhECAcIDdsIRUgDEH/AXEhLANAIA4gFSAobGohLUEAITJBACEpIA0hDANAAkAgHgRAIAgoAgQgDEEDdWotAAAgDEEHcXRBgAFxRQ0BC0EAISJBACE4IDdBAUcEQANAICwgLSAiIClqaiIWLQAARgRAIBYgMzoAAAsgLCAtICJBAXIgKWpqIhYtAABGBEAgFiAzOgAACyAiQQJqISIgOEECaiI4IB1HDQALCyAQRQ0AIC0gIiApamoiFi0AACAsRw0AIBYgMzoAAAsgKSA3aiEpIAxBAWohDCAyQQFqIjIgHEcNAAsgDSAcaiENIChBAWoiKCAmRw0ACwsgFA0DCyAgDQAgCCADICpqEBtFDQILIDBBAWoiMCAHSCEuIAcgMEcNAAsLIAhB8A42AgAgCBAQIA8QERogLkUNAQwCC0EAEAwhJEEBEAwhBCAIIAA2AugBIAhBEGoQFiEQAkAgB0EATA0AIAEgJEkEQEEBITBBAyEkDAELIAUgBmwhDiABIARJIQ1BASEEQQAhAUEBITADQCAQIAhB6AFqQQAgAUEARxAVRQRAQQEhJAwCCyAFIBAoAghHBEBBASEkDAILIAYgECgCDEcEQEEBISQMAgtBASEkAn8gCSABIA5sIgBqIQogACADakEAIAEgAkgbIRVBACEdQQAhDAJAIApFDQAgECgCDCAQKAIIbCIPRQ0AQeASKAIAIgBBqBMoAgBGBH9BAQUgAEGcEygCAEYLIRYgECgCECELAkAgFUUEQCAPQQBKDQFBAQwDCyAVQQAgDxAHIQBBASEdIA9BAEwNAQNAIAsqAgBDAAAAAF4EQCALKgIEIT4gCgJ/AkAgFgRAID6LQwAAAE9dRQ0BID6oDAILID67RAAAAAAAAOA/oJwiOplEAAAAAAAA4EFjRQ0AIDqqDAELQYCAgIB4CzoAACAAIAxqQQE6AAALIApBAWohCiALQQhqIQsgDEEBaiIMIA9HDQALDAELA0ACQAJAIAsqAgBDAAAAAF4EQCALKgIEIT4gFgRAID6LQwAAAE9dRQ0CIAogPqg6AAAMAwsgPrtEAAAAAAAA4D+gnCI6mUQAAAAAAADgQWMEQCAKIDqqOgAADAMLIApBADoAAAwCCyAERQ0BQQAMBAsgCkEAOgAAC0EBIR0gCkEBaiEKIAtBCGohCyAMQQFqIgwgD0cNAAsLIB0LRQ0BIAFBAWoiASAHSCEwIAEgB0YEQEEDISQMAgtBACEEIA1FDQALQQMhJAsgEEGADTYCACAQKAJIIgAEQCAQIAA2AkwgABAGCyAQQfwNNgIAIBAoAhAQBiAwQQFxDQELQQAhJAsMCAsjAEGQA2siCCQAAkAgAUUNACAARQ0AIAlFDQAgBEEATA0AIAVBAEwNACAGQQBMDQAgB0EATA0AIAIgB0cgAkECT3ENAEEAIAJBAEogAxsNACAIIAA2AowDIAhBADoArwICQAJAIAAgASAIQbACaiAIQa8CahANRQ0AIAgoArACQQBMDQAgACABIAhB6AFqQQBBAEEAEBQiJA0CQQIhJCAIKAKEAiACSg0CIAgoAvwBIAdIDQICQCAEQQJIDQAgCCgCiAJFDQBBBSEkIApFDQMgC0UNAyAKQQAgBxAHGiALQQAgB0EDdBAHGgsgCCABNgLkASAIQRBqEBghDyAIQQA2AgwgCEIANwIEIAhB8A42AgBBASEkAkAgB0EATA0AIAUgBmwhJUEBIS4gBEECSCEZA0ACQCAIKAKMAyINIABrIAFPDQAgDSAIKALkASAIQbACaiAIQa8CahANRQ0AIAgoAsACIARHDQIgCCgCvAIgBUcNAiAIKAK4AiAGRw0CIAEgCCgCzAIgCCgCjAMgAGtqSQRAQQMhJAwDC0EAIQ0gAiAwTCIgRQRAIAggBSAGEBNFDQMgCCgCBCENCyAIQeQBaiEhIAkgJSAwbCIqIARsaiEWQQAhNkEAITRBACEoIwBBEGsiKSQAAkAgCEGMA2oiGkUNACAWRQ0AICEoAgAhDiAaKAIAIQwgGiAhIA9BIGoQF0UNACAOIA8oAjwiFUkNACAPKAIgQQNOBEAgFUEOSA0BIAxBDmogFUEOaxAcIA8oAiRHDQELIA8gGiAhEBpFDQAgDQRAIA0gDygCECAPKAIYIA8oAhRsQQdqQQN1EAgaCyAWQQAgDygCMCAPKAIoIA8oAixsbBAHIRICQCAPKAI0RQ0AIA8rA1ggDysDYGEEQCAPIBIQQiE2DAILAkAgDygCIEEESA0AIA8gGiAhEE1FDQIgKUEAOgAPIA8gKUEPahAdRQ0CICktAA9FDQAgDyASEEIhNgwCCyAhKAIAIhVFDQEgGigCACIQLQAAIQ0gGiAQQQFqNgIAICEgFUEBayIMNgIAIA1FBEAgDysDUCE6IA8oAkghDgJAAkACQCAPKAIgIg1BAkgNACAOQQFLDQAgOkQAAAAAAADgP2ENAQsgDUEGSA0BIA5BfnFBBkcNASA6RAAAAAAAAAAAYg0BCyAMRQ0DIBAtAAEhDiAaIBBBAmo2AgAgISAVQQJrNgIAIA5BA0sNAyAOQQNGIA8oAiAiDEEGSHENAyAMQQRIIA5BAk9xDQMgDyAONgKkASAORQ0AIA8rA1AhOiAPKAJIIQ0CQCAMQQJIDQAgDUEBSw0AIDpEAAAAAAAA4D9iDQAgDkEBRwRAIAxBBEkNBSAOQQJHDQULIA8gGiAhIBIQRCE2DAQLIAxBBkgNAyANQX5xQQZHDQMgOkQAAAAAAAAAAGINAyAOQQNHDQMgGiAhIBIgDUEHRiAPKAIsIA8oAiggDygCMBAeITYMAwtBACEMIwBBEGsiKyQAAkAgGkUNACASRQ0AIBooAgBFDQAgK0EANgIIICtCADcDACAPKAI4IjFBIEoNACAxQQFrIg0gDygCLGogMW0hMgJAIA0gDygCKGogMW0iOEEATA0AIA8oAjAhOSAyQQFrISwgOEEBayEtQQEhKANAIDJBAEoEQCAPKAIoIDEgNGwiFWsgMSAtIDRGGyAVaiEfQQAhIgNAIDlBAEoEQCAPKAIsICIgMWwiDWsgMSAiICxGGyANaiEYQQAhDANAIBUhHiAMIR1BACERRAAAAAAAAAAAITsjAEEQayITJAACQCAhKAIAIgxFDQAgDygCMCEXIA8oAiwhLyATIBooAgAiHEEBaiIQNgIMIBwtAAAhFCATIAxBAWsiIzYCCCAUQQJ2IA1BA3ZzQQ5BDyAPKAIgIjNBBEoiDBtxDQAgDCAUQQRxQQJ2cSI1IB1FcQ0AAkACQAJAIBRBA3EiJkEDRg0AAkACQCAmQQFrDgICAAELIB4gH0gEQANAIA0gGEgEQCAeIC9sIA1qIhEgF2wgHWohFCANIQwDQCAPKAIQIBFBA3VqLQAAIBFBB3F0QYABcQRAIBIgFGogNQR/IBIgFGpBAWstAAAFQQALOgAACyAUIBdqIRQgEUEBaiERIAxBAWoiDCAYRw0ACwsgHkEBaiIeIB9HDQALCyAaIBA2AgAMAwsgNQ0DQQAhJiAeIB9IBEAgECEOA0AgDSAYSARAIB4gL2wgDWoiESAXbCAdaiEUIA0hDANAIA8oAhAgEUEDdWotAAAgEUEHcXRBgAFxBEAgI0UEQEEAIREMCQsgEiAUaiAOLQAAOgAAIBMgI0EBayIjNgIIICZBAWohJiAOQQFqIQ4LIBQgF2ohFCARQQFqIREgDEEBaiIMIBhHDQALCyAeQQFqIh4gH0cNAAsLIBMgECAmajYCDAwBCyAUQQZ2IQ4CQAJAAkACQAJAAkACQAJAAkACQEEEIA8oAkgiECAQQQZIGyAQIDUbIgxBAmsOBgMAAwABAgQLIAwgDkEBdGsiDEEIIAxBCEkbIRAMAwtBBiEQIBRBwABJDQRBAkEBIA5BAUYbIRAMAwsgFEHAAEkNBEEIIA5BAXRrIRAMAgsgDCAOayIMQQggDEEISRshEAsgEEEIRg0HC0EBIRRBACEMAkAgEA4IAwMAAAEBAQIEC0ECIRQMAgtBBCEUDAELQQghFEEHIRALICMgFCIMSQ0DCwJAAkACQAJAAkACQAJAAkACQCAQDggAAQIDBAUGBwgLIBwsAAEhDiATIBxBAmo2AgwgDrchOwwHCyAcLQABIQ4gEyAcQQJqNgIMIA64ITsMBgsgHC4AASEOIBMgHEEDajYCDCAOtyE7DAULIBwvAAEhDiATIBxBA2o2AgwgDrghOwwECyAcKAABIQ4gEyAcQQVqNgIMIA63ITsMAwsgHCgAASEOIBMgHEEFajYCDCAOuCE7DAILIBwqAAEhPiATIBxBBWo2AgwgPrshOwwBCyAcKwABITsgEyAcQQlqNgIMCyATICMgDGs2AgggDygCtAEgHUEDdGogD0HgAGoiDCAXQQFKGyAMIDNBA0obKwMAITwgJkEDRgRAIB4gH04NAQJ/IDtEAAAAAAAA8EFjIDtEAAAAAAAAAABmcQRAIDurDAELQQALISYDQCAeIC9sIA1qIhEgF2wgHWohFAJAIDUEQCANIQwgDSAYTg0BA0AgDygCECARQQN1ai0AACARQQdxdEGAAXEEQAJ/IDwgOyASIBRqIhBBAWstAAC4oCI6IDogPGQbIjpEAAAAAAAA8EFjIDpEAAAAAAAAAABmcQRAIDqrDAELQQALIQ4gECAOOgAACyAUIBdqIRQgEUEBaiERIAxBAWoiDCAYRw0ACwwBCyANIQwgDSAYTg0AA0AgDygCECARQQN1ai0AACARQQdxdEGAAXEEQCASIBRqICY6AAALIBQgF2ohFCARQQFqIREgDEEBaiIMIBhHDQALCyAeQQFqIh4gH0cNAAsMAQsgD0H4AGogE0EMaiATQQhqICsgGCANayIOIB8gHmtsIgwgMxAZRQ0CIA8rA1AiOiA6oCE9IAwgKygCBCArKAIAIhFrQQJ1RgRAIB4gH04NASANIB1qIB4gL2xqQQFrISYgDUEBaiE3IA5BAXEhHCANQX9zIBhqITNBACEjA0AgHiAvbCANaiAXbCAdaiEUAkAgNUUEQCANIBhODQEgHAR/IBIgFGoCfyA8IBEoAgC4ID2iIDugIjogOiA8ZBsiOkQAAAAAAADwQWMgOkQAAAAAAAAAAGZxBEAgOqsMAQtBAAs6AAAgFCAXaiEUIBFBBGohESA3BSANCyEMIDNFDQEDQCASIBRqAn8gPCARKAIAuCA9oiA7oCI6IDogPGQbIjpEAAAAAAAA8EFjIDpEAAAAAAAAAABmcQRAIDqrDAELQQALOgAAIBIgFCAXaiIOagJ/IDwgESgCBLggPaIgO6AiOiA6IDxkGyI6RAAAAAAAAPBBYyA6RAAAAAAAAAAAZnEEQCA6qwwBC0EACzoAACARQQhqIREgDiAXaiEUIAxBAmoiDCAYRw0ACwwBCyANIBhODQAgF0EBRwRAIA0hDANAAn8gPCARKAIAuCA9oiA7oCASIBRqIhBBAWstAAC4oCI6IDogPGQbIjpEAAAAAAAA8EFjIDpEAAAAAAAAAABmcQRAIDqrDAELQQALIQ4gECAOOgAAIBQgF2ohFCARQQRqIREgDEEBaiIMIBhHDQALDAELIBIgJiAjIC9samotAAAhDCAcBH8gEiAUagJ/IDwgESgCALggPaIgO6AgDEH/AXG4oCI6IDogPGQbIjpEAAAAAAAA8EFjIDpEAAAAAAAAAABmcQRAIDqrDAELQQALIgw6AAAgFCAXaiEUIBFBBGohESA3BSANCyEOIDNFDQADQCASIBRqAn8gPCARKAIAuCA9oiA7oCAMQf8BcbigIjogOiA8ZBsiOkQAAAAAAADwQWMgOkQAAAAAAAAAAGZxBEAgOqsMAQtBAAsiDDoAACASIBQgF2oiEGoCfyA8IBEoAgS4ID2iIDugIAy4oCI6IDogPGQbIjpEAAAAAAAA8EFjIDpEAAAAAAAAAABmcQRAIDqrDAELQQALIgw6AAAgEUEIaiERIBAgF2ohFCAOQQJqIg4gGEcNAAsLICNBAWohIyAeQQFqIh4gH0cNAAsMAQsgDygCIEECTARAIB4gH04NAUEAIQwDQCANIBhIBEAgHiAvbCANaiIRIBdsIB1qIRQgDSEOA0AgDygCECARQQN1ai0AACARQQdxdEGAAXEEQCArKAIEICsoAgAiEGtBAnUgDEYEQEEAIREMCAsgEiAUagJ/IDwgECAMQQJ0aigCALggPaIgO6AiOiA6IDxkGyI6RAAAAAAAAPBBYyA6RAAAAAAAAAAAZnEEQCA6qwwBC0EACzoAACAMQQFqIQwLIBQgF2ohFCARQQFqIREgDkEBaiIOIBhHDQALCyAeQQFqIh4gH0cNAAsMAQsgHiAfTg0AA0AgHiAvbCANaiIUIBdsIB1qIQwCQCA1RQRAIA0hDiANIBhODQEDQCAPKAIQIBRBA3VqLQAAIBRBB3F0QYABcQRAIAwgEmoCfyA8IBEoAgC4ID2iIDugIjogOiA8ZBsiOkQAAAAAAADwQWMgOkQAAAAAAAAAAGZxBEAgOqsMAQtBAAs6AAAgEUEEaiERCyAMIBdqIQwgFEEBaiEUIA5BAWoiDiAYRw0ACwwBCyANIQ4gDSAYTg0AA0AgDygCECAUQQN1ai0AACAUQQdxdEGAAXEEQAJ/IDwgESgCALggPaIgO6AgDCASaiImQQFrLQAAuKAiOiA6IDxkGyI6RAAAAAAAAPBBYyA6RAAAAAAAAAAAZnEEQCA6qwwBC0EACyEQICYgEDoAACARQQRqIRELIAwgF2ohDCAUQQFqIRQgDkEBaiIOIBhHDQALCyAeQQFqIh4gH0cNAAsLIBogEygCDDYCACATKAIIISMLICEgIzYCAEEBIRELIBNBEGokACARRQ0FIB1BAWoiDCA5Rw0ACwsgIkEBaiIiIDJHDQALCyA0QQFqIjQgOEghKCA0IDhHDQALCyAoRSEMICsoAgAiDUUNACArIA02AgQgDRAGCyArQRBqJAAgDEEBcQ0BDAILIA8gGiAhIBIQQ0UNAQtBASE2CyApQRBqJAAgNkUNAgJAIBkNACAIKAKIAkUNACAKIDBqIAgtANQCIg1BAEc6AAAgCyAwQQN0aiAIKwOAAzkDACANRQ0AQQAhKEEAIQ0CQCAWIg5FIAgoArwCIhxBAExyIAgoArgCIiZBAExyIAgoAsACIjdBAExyIhQNAAJ/IAgrA/gCIjpEAAAAAAAA8EFjIDpEAAAAAAAAAABmcQRAIDqrDAELQQALIjMCfyAIKwOAAyI6RAAAAAAAAPBBYyA6RAAAAAAAAAAAZnEEQCA6qwwBC0EACyIsRg0AIAgoAgggHEYgCCgCDCAmRnEhHiA3QX5xIR0gN0EBcSEQIBwgN2whFQNAIA4gFSAobGohLUEAITJBACEpIA0hDANAAkAgHgRAIAgoAgQgDEEDdWotAAAgDEEHcXRBgAFxRQ0BC0EAISJBACE4IDdBAUcEQANAIDMgLSAiIClqaiIWLQAARgRAIBYgLDoAAAsgMyAtICJBAXIgKWpqIhYtAABGBEAgFiAsOgAACyAiQQJqISIgOEECaiI4IB1HDQALCyAQRQ0AIC0gIiApamoiFi0AACAzRw0AIBYgLDoAAAsgKSA3aiEpIAxBAWohDCAyQQFqIjIgHEcNAAsgDSAcaiENIChBAWoiKCAmRw0ACwsgFA0DCyAgDQAgCCADICpqEBtFDQILIDBBAWoiMCAHSCEuIAcgMEcNAAsLIAhB8A42AgAgCBAQIA8QERogLkUNAQwCC0EAEAwhJEEBEAwhBCAIIAA2AugBIAhBEGoQFiEQAkAgB0EATA0AIAEgJEkEQEEBITBBAyEkDAELIAUgBmwhDiABIARJIQ1BASEEQQAhAUEBITADQCAQIAhB6AFqQQAgAUEARxAVRQRAQQEhJAwCCyAFIBAoAghHBEBBASEkDAILIAYgECgCDEcEQEEBISQMAgtBASEkAn8gCSABIA5sIgBqIQogACADakEAIAEgAkgbIRVBACEdQQAhDAJAIApFDQAgECgCDCAQKAIIbCIPRQ0AQdQSKAIAIgBBqBMoAgBGBH9BAQUgAEGcEygCAEYLIRYgECgCECELAkAgFUUEQCAPQQBKDQFBAQwDCyAVQQAgDxAHIQBBASEdIA9BAEwNAQNAIAsqAgBDAAAAAF4EQCALKgIEIT4gCgJ/AkAgFgRAID5DAACAT10gPkMAAAAAYHFFDQEgPqkMAgsgPrtEAAAAAAAA4D+gnCI6RAAAAAAAAPBBYyA6RAAAAAAAAAAAZnFFDQAgOqsMAQtBAAs6AAAgACAMakEBOgAACyAKQQFqIQogC0EIaiELIAxBAWoiDCAPRw0ACwwBCwNAAkACQCALKgIAQwAAAABeBEAgCyoCBCE+IBYEQCA+QwAAgE9dID5DAAAAAGBxRQ0CIAogPqk6AAAMAwsgPrtEAAAAAAAA4D+gnCI6RAAAAAAAAPBBYyA6RAAAAAAAAAAAZnEEQCAKIDqrOgAADAMLIApBADoAAAwCCyAERQ0BQQAMBAsgCkEAOgAAC0EBIR0gCkEBaiEKIAtBCGohCyAMQQFqIgwgD0cNAAsLIB0LRQ0BIAFBAWoiASAHSCEwIAEgB0YEQEEDISQMAgtBACEEIA1FDQALQQMhJAsgEEGADTYCACAQKAJIIgAEQCAQIAA2AkwgABAGCyAQQfwNNgIAIBAoAhAQBiAwQQFxDQELQQAhJAsMBwsjAEGQA2siCCQAAkAgAUUNACAARQ0AIAlFDQAgBEEATA0AIAVBAEwNACAGQQBMDQAgB0EATA0AIAIgB0cgAkECT3ENAEEAIAJBAEogAxsNACAIIAA2AowDIAhBADoArwICQAJAIAAgASAIQbACaiAIQa8CahANRQ0AIAgoArACQQBMDQAgACABIAhB6AFqQQBBAEEAEBQiJA0CQQIhJCAIKAKEAiACSg0CIAgoAvwBIAdIDQICQCAEQQJIDQAgCCgCiAJFDQBBBSEkIApFDQMgC0UNAyAKQQAgBxAHGiALQQAgB0EDdBAHGgsgCCABNgLkASAIQRBqEBghDyAIQQA2AgwgCEIANwIEIAhB8A42AgBBASEkAkAgB0EATA0AIAUgBmwhMyAEQQJIISVBASEuA0ACQCAIKAKMAyINIABrIAFPDQAgDSAIKALkASAIQbACaiAIQa8CahANRQ0AIAgoAsACIARHDQIgCCgCvAIgBUcNAiAIKAK4AiAGRw0CIAEgCCgCzAIgCCgCjAMgAGtqSQRAQQMhJAwDC0EAIQ0gAiAwTCIZRQRAIAggBSAGEBNFDQMgCCgCBCENCyAIQeQBaiEhIAkgMCAzbCIgIARsQQF0aiEWQQAhK0EAITRBACEoIwBBEGsiKSQAAkAgCEGMA2oiGkUNACAWRQ0AICEoAgAhDiAaKAIAIQwgGiAhIA9BIGoQF0UNACAOIA8oAjwiFUkNACAPKAIgQQNOBEAgFUEOSA0BIAxBDmogFUEOaxAcIA8oAiRHDQELIA8gGiAhEBpFDQAgDQRAIA0gDygCECAPKAIYIA8oAhRsQQdqQQN1EAgaC0EBISsgFkEAIA8oAjAgDygCLCAPKAIobGxBAXQQByESIA8oAjRFDQAgDysDWCAPKwNgYQRAIA8gEhBBISsMAQsCQCAPKAIgQQRIDQBBACErIA8gGiAhEExFDQEgKUEAOgAPIA8gKUEPahAdRQ0BICktAA9FDQAgDyASEEEhKwwBC0EAISsgISgCACIVRQ0AIBooAgAiEC0AACENIBogEEEBajYCACAhIBVBAWsiDDYCAAJAIA1FBEAgDysDUCE6IA8oAkghDgJAAkACQCAPKAIgIg1BAkgNACAOQQFLDQAgOkQAAAAAAADgP2ENAQsgDUEGSA0BIA5BfnFBBkcNASA6RAAAAAAAAAAAYg0BCyAMRQ0DIBAtAAEhDiAaIBBBAmo2AgAgISAVQQJrNgIAIA5BA0sNAyAOQQNGIA8oAiAiDEEGSHENAyAMQQRIIA5BAk9xDQMgDyAONgKkASAORQ0AIA8rA1AhOiAPKAJIIQ0CQCAMQQJIDQAgDUEBSw0AIDpEAAAAAAAA4D9iDQAgDkEBRwRAIAxBBEkNBSAOQQJHDQULIA8gGiAhIBIQPyErDAQLIAxBBkgNAyANQX5xQQZHDQMgOkQAAAAAAAAAAGINAyAOQQNHDQMgGiAhIBIgDUEHRiAPKAIsIA8oAiggDygCMBAeISsMAwtBACEMIwBBEGsiLyQAAkAgGkUNACASRQ0AIBooAgBFDQAgL0EANgIIIC9CADcDACAPKAI4IjZBIEoNACA2QQFrIg0gDygCLGogNm0hMgJAIA0gDygCKGogNm0iOEEATA0AIA8oAjAhOSAyQQFrISogOEEBayEsQQEhKANAIDJBAEoEQCAPKAIoIDQgNmwiFWsgNiAsIDRGGyAVaiEfQQAhIgNAIDlBAEoEQCAPKAIsICIgNmwiDWsgNiAiICpGGyANaiEYQQAhDANAIBUhFCAMIR5BACEbRAAAAAAAAAAAITwjAEEQayITJAACQCAhKAIAIgxFDQAgDygCMCEXIA8oAiwhMSATIBooAgAiHEEBaiIQNgIMIBwtAAAhLSATIAxBAWsiIzYCCCAtQQJ2IA1BA3ZzQQ5BDyAPKAIgIiZBBEoiDBtxDQAgDCAtQQRxQQJ2cSI1IB5FcQ0AAkACQAJAIC1BA3EiHUEDRg0AAkACQCAdQQFrDgICAAELIBQgH0gEQCAPKAIQIQ4DQCANIBhIBEAgFCAxbCANaiIbIBdsIB5qIREgDSEMA0AgDiAbQQN1ai0AACAbQQdxdEGAAXEEQCASIBFBAXRqIDUEfyARQQF0IBJqQQJrLwEABUEACzsBAAsgESAXaiERIBtBAWohGyAMQQFqIgwgGEcNAAsLIBRBAWoiFCAfRw0ACwsgGiAQNgIADAMLIDUNA0EAIR0gFCAfSARAIA8oAhAhJiAQIQ4DQCANIBhIBEAgFCAxbCANaiIbIBdsIB5qIREgDSEMA0AgJiAbQQN1ai0AACAbQQdxdEGAAXEEQCAjQQJJBEBBACEbDAkLIBIgEUEBdGogDi8BADsBACATICNBAmsiIzYCCCAdQQFqIR0gDkECaiEOCyARIBdqIREgG0EBaiEbIAxBAWoiDCAYRw0ACwsgFEEBaiIUIB9HDQALCyATIBAgHUEBdGo2AgwMAQsgLUEGdiEOAkACQAJAAkACQAJAAkACQAJAAkBBBCAPKAJIIhAgEEEGSBsgECA1GyIMQQJrDgYDAAMAAQIECyAMIA5BAXRrIgxBCCAMQQhJGyEQDAMLQQYhECAtQcAASQ0EQQJBASAOQQFGGyEQDAMLIC1BwABJDQRBCCAOQQF0ayEQDAILIAwgDmsiDEEIIAxBCEkbIRALIBBBCEYNBwtBASEMQQAhDgJAIBAOCAMDAAABAQECBAtBAiEMDAILQQQhDAwBC0EIIQxBByEQCyAjIAwiDkkNAwsCQAJAAkACQAJAAkACQAJAAkAgEA4IAAECAwQFBgcICyAcLAABIQwgEyAcQQJqNgIMIAy3ITwMBwsgHC0AASEMIBMgHEECajYCDCAMuCE8DAYLIBwuAAEhDCATIBxBA2o2AgwgDLchPAwFCyAcLwABIQwgEyAcQQNqNgIMIAy4ITwMBAsgHCgAASEMIBMgHEEFajYCDCAMtyE8DAMLIBwoAAEhDCATIBxBBWo2AgwgDLghPAwCCyAcKgABIT4gEyAcQQVqNgIMID67ITwMAQsgHCsAASE8IBMgHEEJajYCDAsgEyAjIA5rNgIIIA8oArQBIB5BA3RqIA9B4ABqIgwgF0EBShsgDCAmQQNKGysDACE7IB1BA0YEQCAUIB9ODQFBACAYayEQIA1Bf3MhDiAYIA1rIQwgDygCECE3An8gPJlEAAAAAAAA4EFjBEAgPKoMAQtBgICAgHgLIRwgDUEBaiEtIAxBAXEhJiAOIBBGIR0DQCAUIDFsIA1qIhsgF2wgHmohEQJAIDUEQCANIQwgDSAYTg0BA0AgNyAbQQN1ai0AACAbQQdxdEGAAXEEQAJ/IDsgPCASIBFBAXRqIhBBAmsuAQC3oCI6IDogO2QbIjqZRAAAAAAAAOBBYwRAIDqqDAELQYCAgIB4CyEOIBAgDjsBAAsgESAXaiERIBtBAWohGyAMQQFqIgwgGEcNAAsMAQsgDSAYTg0AICYEfyA3IBtBA3VqLQAAIBtBB3F0QYABcQRAIBIgEUEBdGogHDsBAAsgESAXaiERIBtBAWohGyAtBSANCyEMIB0NAANAIDcgG0EDdWotAAAgG0EHcXRBgAFxBEAgEiARQQF0aiAcOwEACyARIBdqIRAgNyAbQQFqIg5BA3VqLQAAIA5BB3F0QYABcQRAIBIgEEEBdGogHDsBAAsgECAXaiERIBtBAmohGyAMQQJqIgwgGEcNAAsLIBRBAWoiFCAfRw0ACwwBCyAPQfgAaiATQQxqIBNBCGogLyAYIA1rIg4gHyAUa2wiDCAmEBlFDQIgDysDUCI6IDqgIT0gDCAvKAIEIC8oAgAiG2tBAnUiJkYEQCAUIB9ODQEgDSAeaiAUIDFsakEBdEECayEmIA1BAWohNyAOQQFxIRwgMUEBdCEdIA1Bf3MgGGohLUEAISMDQCAUIDFsIA1qIBdsIB5qIRECQCA1RQRAIA0gGE4NASAcBH8gEiARQQF0agJ/IDsgGygCALggPaIgPKAiOiA6IDtkGyI6mUQAAAAAAADgQWMEQCA6qgwBC0GAgICAeAs7AQAgESAXaiERIBtBBGohGyA3BSANCyEMIC1FDQEDQCASIBFBAXRqAn8gOyAbKAIAuCA9oiA8oCI6IDogO2QbIjqZRAAAAAAAAOBBYwRAIDqqDAELQYCAgIB4CzsBACASIBEgF2oiDkEBdGoCfyA7IBsoAgS4ID2iIDygIjogOiA7ZBsiOplEAAAAAAAA4EFjBEAgOqoMAQtBgICAgHgLOwEAIBtBCGohGyAOIBdqIREgDEECaiIMIBhHDQALDAELIA0gGE4NACAXQQFHBEAgDSEMA0ACfyA7IBsoAgC4ID2iIDygIBIgEUEBdGoiEEECay4BALegIjogOiA7ZBsiOplEAAAAAAAA4EFjBEAgOqoMAQtBgICAgHgLIQ4gECAOOwEAIBEgF2ohESAbQQRqIRsgDEEBaiIMIBhHDQALDAELIBIgJiAdICNsamovAQAhDCAcBH8gEiARQQF0agJ/IDsgGygCALggPaIgPKAgDEEQdEEQdbegIjogOiA7ZBsiOplEAAAAAAAA4EFjBEAgOqoMAQtBgICAgHgLIgw7AQAgESAXaiERIBtBBGohGyA3BSANCyEOIC1FDQADQCASIBFBAXRqAn8gOyAbKAIAuCA9oiA8oCAMQRB0QRB1t6AiOiA6IDtkGyI6mUQAAAAAAADgQWMEQCA6qgwBC0GAgICAeAsiDDsBACASIBEgF2oiEEEBdGoCfyA7IBsoAgS4ID2iIDygIAy3oCI6IDogO2QbIjqZRAAAAAAAAOBBYwRAIDqqDAELQYCAgIB4CyIMOwEAIBtBCGohGyAQIBdqIREgDkECaiIOIBhHDQALCyAjQQFqISMgFEEBaiIUIB9HDQALDAELIA8oAiBBAkwEQCAUIB9ODQEgDygCECEQQQAhDgNAIA0gGEgEQCAUIDFsIA1qIhEgF2wgHmohDCANIR0DQCAQIBFBA3VqLQAAIBFBB3F0QYABcQRAIA4gJkYEQEEAIRsMCAsgEiAMQQF0agJ/IDsgGyAOQQJ0aigCALggPaIgPKAiOiA6IDtkGyI6mUQAAAAAAADgQWMEQCA6qgwBC0GAgICAeAs7AQAgDkEBaiEOCyAMIBdqIQwgEUEBaiERIB1BAWoiHSAYRw0ACwsgFEEBaiIUIB9HDQALDAELIBQgH04NACAPKAIQISYDQCAUIDFsIA1qIhEgF2wgHmohDAJAIDVFBEAgDSEOIA0gGE4NAQNAICYgEUEDdWotAAAgEUEHcXRBgAFxBEAgEiAMQQF0agJ/IDsgGygCALggPaIgPKAiOiA6IDtkGyI6mUQAAAAAAADgQWMEQCA6qgwBC0GAgICAeAs7AQAgG0EEaiEbCyAMIBdqIQwgEUEBaiERIA5BAWoiDiAYRw0ACwwBCyANIQ4gDSAYTg0AA0AgJiARQQN1ai0AACARQQdxdEGAAXEEQAJ/IDsgGygCALggPaIgPKAgEiAMQQF0aiIdQQJrLgEAt6AiOiA6IDtkGyI6mUQAAAAAAADgQWMEQCA6qgwBC0GAgICAeAshECAdIBA7AQAgG0EEaiEbCyAMIBdqIQwgEUEBaiERIA5BAWoiDiAYRw0ACwsgFEEBaiIUIB9HDQALCyAaIBMoAgw2AgAgEygCCCEjCyAhICM2AgBBASEbCyATQRBqJAAgG0UNBSAeQQFqIgwgOUcNAAsLICJBAWoiIiAyRw0ACwsgNEEBaiI0IDhIISggNCA4Rw0ACwsgKEUhDCAvKAIAIg1FDQAgLyANNgIEIA0QBgsgL0EQaiQAIAxBAXENAQwCCyAPIBogISASED5FDQELQQEhKwsgKUEQaiQAICtFDQICQCAlDQAgCCgCiAJFDQAgCiAwaiAILQDUAiINQQBHOgAAIAsgMEEDdGogCCsDgAM5AwAgDUUNAEEAIShBACENAkAgFiIORSAIKAK8AiI3QQBMciAIKAK4AiItQQBMciAIKALAAiI5QQBMciImDQACfyAIKwP4AiI6mUQAAAAAAADgQWMEQCA6qgwBC0GAgICAeAsiDAJ/IAgrA4ADIjqZRAAAAAAAAOBBYwRAIDqqDAELQYCAgIB4CyIcRg0AIAgoAgggN0YgCCgCDCAtRnEhFCA5QX5xIR4gOUEBcSEdIDcgOWwhECAMQf//A3EhKgNAIA4gECAobEEBdGohLCAIKAIEIRVBACEyQQAhKSANIQwDQAJAIBQEQCAVIAxBA3VqLQAAIAxBB3F0QYABcUUNAQtBACEiQQAhOCA5QQFHBEADQCAqICwgIiApakEBdGoiFi8BAEYEQCAWIBw7AQALICogLCAiQQFyIClqQQF0aiIWLwEARgRAIBYgHDsBAAsgIkECaiEiIDhBAmoiOCAeRw0ACwsgHUUNACAsICIgKWpBAXRqIhYvAQAgKkcNACAWIBw7AQALICkgOWohKSAMQQFqIQwgMkEBaiIyIDdHDQALIA0gN2ohDSAoQQFqIiggLUcNAAsLICYNAwsgGQ0AIAggAyAgahAbRQ0CCyAwQQFqIjAgB0ghLiAHIDBHDQALCyAIQfAONgIAIAgQECAPEBEaIC5FDQEMAgtBABAMISRBARAMIQQgCCAANgLoASAIQRBqEBYhEAJAIAdBAEwNACABICRJBEBBASEwQQMhJAwBCyAFIAZsIQ4gASAESSENQQEhBEEAIQFBASEwA0AgECAIQegBakEAIAFBAEcQFUUEQEEBISQMAgsgBSAQKAIIRwRAQQEhJAwCCyAGIBAoAgxHBEBBASEkDAILQQEhJAJ/IAkgASAObCIAQQF0aiEKIAAgA2pBACABIAJIGyEVQQAhHUEAIQwCQCAKRQ0AIBAoAgwgECgCCGwiD0UNAEHsEigCACIAQagTKAIARgR/QQEFIABBnBMoAgBGCyEWIBAoAhAhCwJAIBVFBEAgD0EASg0BQQEMAwsgFUEAIA8QByEAQQEhHSAPQQBMDQEDQCALKgIAQwAAAABeBEAgCyoCBCE+IAoCfwJAIBYEQCA+i0MAAABPXUUNASA+qAwCCyA+u0QAAAAAAADgP6CcIjqZRAAAAAAAAOBBY0UNACA6qgwBC0GAgICAeAs7AQAgACAMakEBOgAACyAKQQJqIQogC0EIaiELIAxBAWoiDCAPRw0ACwwBCwNAAkACQCALKgIAQwAAAABeBEAgCyoCBCE+IBYEQCA+i0MAAABPXUUNAiAKID6oOwEADAMLID67RAAAAAAAAOA/oJwiOplEAAAAAAAA4EFjBEAgCiA6qjsBAAwDCyAKQQA7AQAMAgsgBEUNAUEADAQLIApBADsBAAsgCkECaiEKIAtBCGohC0EBIR0gDEEBaiIMIA9HDQALCyAdC0UNASABQQFqIgEgB0ghMCABIAdGBEBBAyEkDAILQQAhBCANRQ0AC0EDISQLIBBBgA02AgAgECgCSCIABEAgECAANgJMIAAQBgsgEEH8DTYCACAQKAIQEAYgMEEBcQ0BC0EAISQLDAYLIwBBkANrIggkAAJAIAFFDQAgAEUNACAJRQ0AIARBAEwNACAFQQBMDQAgBkEATA0AIAdBAEwNACACIAdHIAJBAk9xDQBBACACQQBKIAMbDQAgCCAANgKMAyAIQQA6AK8CAkACQCAAIAEgCEGwAmogCEGvAmoQDUUNACAIKAKwAkEATA0AIAAgASAIQegBakEAQQBBABAUIiQNAkECISQgCCgChAIgAkoNAiAIKAL8ASAHSA0CAkAgBEECSA0AIAgoAogCRQ0AQQUhJCAKRQ0DIAtFDQMgCkEAIAcQBxogC0EAIAdBA3QQBxoLIAggATYC5AEgCEEQahAYIQ8gCEEANgIMIAhCADcCBCAIQfAONgIAQQEhJAJAIAdBAEwNACAFIAZsITMgBEECSCElQQEhLgNAAkAgCCgCjAMiDSAAayABTw0AIA0gCCgC5AEgCEGwAmogCEGvAmoQDUUNACAIKALAAiAERw0CIAgoArwCIAVHDQIgCCgCuAIgBkcNAiABIAgoAswCIAgoAowDIABrakkEQEEDISQMAwtBACENIAIgMEwiGUUEQCAIIAUgBhATRQ0DIAgoAgQhDQsgCEHkAWohISAJIDAgM2wiICAEbEEBdGohFkEAIStBACE0QQAhKCMAQRBrIikkAAJAIAhBjANqIhpFDQAgFkUNACAhKAIAIQ4gGigCACEMIBogISAPQSBqEBdFDQAgDiAPKAI8IhVJDQAgDygCIEEDTgRAIBVBDkgNASAMQQ5qIBVBDmsQHCAPKAIkRw0BCyAPIBogIRAaRQ0AIA0EQCANIA8oAhAgDygCGCAPKAIUbEEHakEDdRAIGgtBASErIBZBACAPKAIwIA8oAiwgDygCKGxsQQF0EAchEiAPKAI0RQ0AIA8rA1ggDysDYGEEQCAPIBIQPSErDAELAkAgDygCIEEESA0AQQAhKyAPIBogIRBLRQ0BIClBADoADyAPIClBD2oQHUUNASApLQAPRQ0AIA8gEhA9ISsMAQtBACErICEoAgAiFUUNACAaKAIAIhAtAAAhDSAaIBBBAWo2AgAgISAVQQFrIgw2AgACQCANRQRAIA8rA1AhOiAPKAJIIQ4CQAJAAkAgDygCICINQQJIDQAgDkEBSw0AIDpEAAAAAAAA4D9hDQELIA1BBkgNASAOQX5xQQZHDQEgOkQAAAAAAAAAAGINAQsgDEUNAyAQLQABIQ4gGiAQQQJqNgIAICEgFUECazYCACAOQQNLDQMgDkEDRiAPKAIgIgxBBkhxDQMgDEEESCAOQQJPcQ0DIA8gDjYCpAEgDkUNACAPKwNQITogDygCSCENAkAgDEECSA0AIA1BAUsNACA6RAAAAAAAAOA/Yg0AIA5BAUcEQCAMQQRJDQUgDkECRw0FCyAPIBogISASED8hKwwECyAMQQZIDQMgDUF+cUEGRw0DIDpEAAAAAAAAAABiDQMgDkEDRw0DIBogISASIA1BB0YgDygCLCAPKAIoIA8oAjAQHiErDAMLQQAhDCMAQRBrIi8kAAJAIBpFDQAgEkUNACAaKAIARQ0AIC9BADYCCCAvQgA3AwAgDygCOCI2QSBKDQAgNkEBayINIA8oAixqIDZtITICQCANIA8oAihqIDZtIjhBAEwNACAPKAIwITkgMkEBayEqIDhBAWshLEEBISgDQCAyQQBKBEAgDygCKCA0IDZsIhVrIDYgLCA0RhsgFWohH0EAISIDQCA5QQBKBEAgDygCLCAiIDZsIg1rIDYgIiAqRhsgDWohGEEAIQwDQCAVIRQgDCEeQQAhG0QAAAAAAAAAACE7IwBBEGsiEyQAAkAgISgCACIMRQ0AIA8oAjAhFyAPKAIsITEgEyAaKAIAIhxBAWoiEDYCDCAcLQAAIS0gEyAMQQFrIiM2AgggLUECdiANQQN2c0EOQQ8gDygCICImQQRKIgwbcQ0AIAwgLUEEcUECdnEiNSAeRXENAAJAAkACQCAtQQNxIh1BA0YNAAJAAkAgHUEBaw4CAgABCyAUIB9IBEAgDygCECEOA0AgDSAYSARAIBQgMWwgDWoiGyAXbCAeaiERIA0hDANAIA4gG0EDdWotAAAgG0EHcXRBgAFxBEAgEiARQQF0aiA1BH8gEUEBdCASakECay8BAAVBAAs7AQALIBEgF2ohESAbQQFqIRsgDEEBaiIMIBhHDQALCyAUQQFqIhQgH0cNAAsLIBogEDYCAAwDCyA1DQNBACEdIBQgH0gEQCAPKAIQISYgECEOA0AgDSAYSARAIBQgMWwgDWoiGyAXbCAeaiERIA0hDANAICYgG0EDdWotAAAgG0EHcXRBgAFxBEAgI0ECSQRAQQAhGwwJCyASIBFBAXRqIA4vAQA7AQAgEyAjQQJrIiM2AgggHUEBaiEdIA5BAmohDgsgESAXaiERIBtBAWohGyAMQQFqIgwgGEcNAAsLIBRBAWoiFCAfRw0ACwsgEyAQIB1BAXRqNgIMDAELIC1BBnYhDgJAAkACQAJAAkACQAJAAkACQAJAQQQgDygCSCIQIBBBBkgbIBAgNRsiDEECaw4GAwADAAECBAsgDCAOQQF0ayIMQQggDEEISRshEAwDC0EGIRAgLUHAAEkNBEECQQEgDkEBRhshEAwDCyAtQcAASQ0EQQggDkEBdGshEAwCCyAMIA5rIgxBCCAMQQhJGyEQCyAQQQhGDQcLQQEhDEEAIQ4CQCAQDggDAwAAAQEBAgQLQQIhDAwCC0EEIQwMAQtBCCEMQQchEAsgIyAMIg5JDQMLAkACQAJAAkACQAJAAkACQAJAIBAOCAABAgMEBQYHCAsgHCwAASEMIBMgHEECajYCDCAMtyE7DAcLIBwtAAEhDCATIBxBAmo2AgwgDLghOwwGCyAcLgABIQwgEyAcQQNqNgIMIAy3ITsMBQsgHC8AASEMIBMgHEEDajYCDCAMuCE7DAQLIBwoAAEhDCATIBxBBWo2AgwgDLchOwwDCyAcKAABIQwgEyAcQQVqNgIMIAy4ITsMAgsgHCoAASE+IBMgHEEFajYCDCA+uyE7DAELIBwrAAEhOyATIBxBCWo2AgwLIBMgIyAOazYCCCAPKAK0ASAeQQN0aiAPQeAAaiIMIBdBAUobIAwgJkEDShsrAwAhPCAdQQNGBEAgFCAfTg0BQQAgGGshECANQX9zIQ4gGCANayEMIA8oAhAhNwJ/IDtEAAAAAAAA8EFjIDtEAAAAAAAAAABmcQRAIDurDAELQQALIRwgDUEBaiEtIAxBAXEhJiAOIBBGIR0DQCAUIDFsIA1qIhsgF2wgHmohEQJAIDUEQCANIQwgDSAYTg0BA0AgNyAbQQN1ai0AACAbQQdxdEGAAXEEQAJ/IDwgOyASIBFBAXRqIhBBAmsvAQC4oCI6IDogPGQbIjpEAAAAAAAA8EFjIDpEAAAAAAAAAABmcQRAIDqrDAELQQALIQ4gECAOOwEACyARIBdqIREgG0EBaiEbIAxBAWoiDCAYRw0ACwwBCyANIBhODQAgJgR/IDcgG0EDdWotAAAgG0EHcXRBgAFxBEAgEiARQQF0aiAcOwEACyARIBdqIREgG0EBaiEbIC0FIA0LIQwgHQ0AA0AgNyAbQQN1ai0AACAbQQdxdEGAAXEEQCASIBFBAXRqIBw7AQALIBEgF2ohECA3IBtBAWoiDkEDdWotAAAgDkEHcXRBgAFxBEAgEiAQQQF0aiAcOwEACyAQIBdqIREgG0ECaiEbIAxBAmoiDCAYRw0ACwsgFEEBaiIUIB9HDQALDAELIA9B+ABqIBNBDGogE0EIaiAvIBggDWsiDiAfIBRrbCIMICYQGUUNAiAPKwNQIjogOqAhPSAMIC8oAgQgLygCACIba0ECdSImRgRAIBQgH04NASANIB5qIBQgMWxqQQF0QQJrISYgDUEBaiE3IA5BAXEhHCAxQQF0IR0gDUF/cyAYaiEtQQAhIwNAIBQgMWwgDWogF2wgHmohEQJAIDVFBEAgDSAYTg0BIBwEfyASIBFBAXRqAn8gPCAbKAIAuCA9oiA7oCI6IDogPGQbIjpEAAAAAAAA8EFjIDpEAAAAAAAAAABmcQRAIDqrDAELQQALOwEAIBEgF2ohESAbQQRqIRsgNwUgDQshDCAtRQ0BA0AgEiARQQF0agJ/IDwgGygCALggPaIgO6AiOiA6IDxkGyI6RAAAAAAAAPBBYyA6RAAAAAAAAAAAZnEEQCA6qwwBC0EACzsBACASIBEgF2oiDkEBdGoCfyA8IBsoAgS4ID2iIDugIjogOiA8ZBsiOkQAAAAAAADwQWMgOkQAAAAAAAAAAGZxBEAgOqsMAQtBAAs7AQAgG0EIaiEbIA4gF2ohESAMQQJqIgwgGEcNAAsMAQsgDSAYTg0AIBdBAUcEQCANIQwDQAJ/IDwgGygCALggPaIgO6AgEiARQQF0aiIQQQJrLwEAuKAiOiA6IDxkGyI6RAAAAAAAAPBBYyA6RAAAAAAAAAAAZnEEQCA6qwwBC0EACyEOIBAgDjsBACARIBdqIREgG0EEaiEbIAxBAWoiDCAYRw0ACwwBCyASICYgHSAjbGpqLwEAIQwgHAR/IBIgEUEBdGoCfyA8IBsoAgC4ID2iIDugIAxB//8DcbigIjogOiA8ZBsiOkQAAAAAAADwQWMgOkQAAAAAAAAAAGZxBEAgOqsMAQtBAAsiDDsBACARIBdqIREgG0EEaiEbIDcFIA0LIQ4gLUUNAANAIBIgEUEBdGoCfyA8IBsoAgC4ID2iIDugIAxB//8DcbigIjogOiA8ZBsiOkQAAAAAAADwQWMgOkQAAAAAAAAAAGZxBEAgOqsMAQtBAAsiDDsBACASIBEgF2oiEEEBdGoCfyA8IBsoAgS4ID2iIDugIAy4oCI6IDogPGQbIjpEAAAAAAAA8EFjIDpEAAAAAAAAAABmcQRAIDqrDAELQQALIgw7AQAgG0EIaiEbIBAgF2ohESAOQQJqIg4gGEcNAAsLICNBAWohIyAUQQFqIhQgH0cNAAsMAQsgDygCIEECTARAIBQgH04NASAPKAIQIRBBACEOA0AgDSAYSARAIBQgMWwgDWoiESAXbCAeaiEMIA0hHQNAIBAgEUEDdWotAAAgEUEHcXRBgAFxBEAgDiAmRgRAQQAhGwwICyASIAxBAXRqAn8gPCAbIA5BAnRqKAIAuCA9oiA7oCI6IDogPGQbIjpEAAAAAAAA8EFjIDpEAAAAAAAAAABmcQRAIDqrDAELQQALOwEAIA5BAWohDgsgDCAXaiEMIBFBAWohESAdQQFqIh0gGEcNAAsLIBRBAWoiFCAfRw0ACwwBCyAUIB9ODQAgDygCECEmA0AgFCAxbCANaiIRIBdsIB5qIQwCQCA1RQRAIA0hDiANIBhODQEDQCAmIBFBA3VqLQAAIBFBB3F0QYABcQRAIBIgDEEBdGoCfyA8IBsoAgC4ID2iIDugIjogOiA8ZBsiOkQAAAAAAADwQWMgOkQAAAAAAAAAAGZxBEAgOqsMAQtBAAs7AQAgG0EEaiEbCyAMIBdqIQwgEUEBaiERIA5BAWoiDiAYRw0ACwwBCyANIQ4gDSAYTg0AA0AgJiARQQN1ai0AACARQQdxdEGAAXEEQAJ/IDwgGygCALggPaIgO6AgEiAMQQF0aiIdQQJrLwEAuKAiOiA6IDxkGyI6RAAAAAAAAPBBYyA6RAAAAAAAAAAAZnEEQCA6qwwBC0EACyEQIB0gEDsBACAbQQRqIRsLIAwgF2ohDCARQQFqIREgDkEBaiIOIBhHDQALCyAUQQFqIhQgH0cNAAsLIBogEygCDDYCACATKAIIISMLICEgIzYCAEEBIRsLIBNBEGokACAbRQ0FIB5BAWoiDCA5Rw0ACwsgIkEBaiIiIDJHDQALCyA0QQFqIjQgOEghKCA0IDhHDQALCyAoRSEMIC8oAgAiDUUNACAvIA02AgQgDRAGCyAvQRBqJAAgDEEBcQ0BDAILIA8gGiAhIBIQPkUNAQtBASErCyApQRBqJAAgK0UNAgJAICUNACAIKAKIAkUNACAKIDBqIAgtANQCIg1BAEc6AAAgCyAwQQN0aiAIKwOAAzkDACANRQ0AQQAhKEEAIQ0CQCAWIg5FIAgoArwCIjdBAExyIAgoArgCIi1BAExyIAgoAsACIjlBAExyIiYNAAJ/IAgrA/gCIjpEAAAAAAAA8EFjIDpEAAAAAAAAAABmcQRAIDqrDAELQQALIhwCfyAIKwOAAyI6RAAAAAAAAPBBYyA6RAAAAAAAAAAAZnEEQCA6qwwBC0EACyIqRg0AIAgoAgggN0YgCCgCDCAtRnEhFCA5QX5xIR4gOUEBcSEdIDcgOWwhEANAIA4gECAobEEBdGohLCAIKAIEIRVBACEyQQAhKSANIQwDQAJAIBQEQCAVIAxBA3VqLQAAIAxBB3F0QYABcUUNAQtBACEiQQAhOCA5QQFHBEADQCAcICwgIiApakEBdGoiFi8BAEYEQCAWICo7AQALIBwgLCAiQQFyIClqQQF0aiIWLwEARgRAIBYgKjsBAAsgIkECaiEiIDhBAmoiOCAeRw0ACwsgHUUNACAsICIgKWpBAXRqIhYvAQAgHEcNACAWICo7AQALICkgOWohKSAMQQFqIQwgMkEBaiIyIDdHDQALIA0gN2ohDSAoQQFqIiggLUcNAAsLICYNAwsgGQ0AIAggAyAgahAbRQ0CCyAwQQFqIjAgB0ghLiAHIDBHDQALCyAIQfAONgIAIAgQECAPEBEaIC5FDQEMAgtBABAMISRBARAMIQQgCCAANgLoASAIQRBqEBYhEAJAIAdBAEwNACABICRJBEBBASEwQQMhJAwBCyAFIAZsIQ4gASAESSENQQEhBEEAIQFBASEwA0AgECAIQegBakEAIAFBAEcQFUUEQEEBISQMAgsgBSAQKAIIRwRAQQEhJAwCCyAGIBAoAgxHBEBBASEkDAILQQEhJAJ/IAkgASAObCIAQQF0aiEKIAAgA2pBACABIAJIGyEVQQAhHUEAIQwCQCAKRQ0AIBAoAgwgECgCCGwiD0UNAEH4EigCACIAQagTKAIARgR/QQEFIABBnBMoAgBGCyEWIBAoAhAhCwJAIBVFBEAgD0EASg0BQQEMAwsgFUEAIA8QByEAQQEhHSAPQQBMDQEDQCALKgIAQwAAAABeBEAgCyoCBCE+IAoCfwJAIBYEQCA+QwAAgE9dID5DAAAAAGBxRQ0BID6pDAILID67RAAAAAAAAOA/oJwiOkQAAAAAAADwQWMgOkQAAAAAAAAAAGZxRQ0AIDqrDAELQQALOwEAIAAgDGpBAToAAAsgCkECaiEKIAtBCGohCyAMQQFqIgwgD0cNAAsMAQsDQAJAAkAgCyoCAEMAAAAAXgRAIAsqAgQhPiAWBEAgPkMAAIBPXSA+QwAAAABgcUUNAiAKID6pOwEADAMLID67RAAAAAAAAOA/oJwiOkQAAAAAAADwQWMgOkQAAAAAAAAAAGZxBEAgCiA6qzsBAAwDCyAKQQA7AQAMAgsgBEUNAUEADAQLIApBADsBAAsgCkECaiEKIAtBCGohC0EBIR0gDEEBaiIMIA9HDQALCyAdC0UNASABQQFqIgEgB0ghMCABIAdGBEBBAyEkDAILQQAhBCANRQ0AC0EDISQLIBBBgA02AgAgECgCSCIABEAgECAANgJMIAAQBgsgEEH8DTYCACAQKAIQEAYgMEEBcQ0BC0EAISQLDAULIwBBkANrIggkAAJAIAFFDQAgAEUNACAJRQ0AIARBAEwNACAFQQBMDQAgBkEATA0AIAdBAEwNACACIAdHIAJBAk9xDQBBACACQQBKIAMbDQAgCCAANgKMAyAIQQA6AK8CAkACQCAAIAEgCEGwAmogCEGvAmoQDUUNACAIKAKwAkEATA0AIAAgASAIQegBakEAQQBBABAUIiQNAkECISQgCCgChAIgAkoNAiAIKAL8ASAHSA0CAkAgBEECSA0AIAgoAogCRQ0AQQUhJCAKRQ0DIAtFDQMgCkEAIAcQBxogC0EAIAdBA3QQBxoLIAggATYC5AEgCEEQahAYIQ8gCEEANgIMIAhCADcCBCAIQfAONgIAQQEhJAJAIAdBAEwNACAFIAZsIRlBASEwA0ACQCAIKAKMAyINIABrIAFPDQAgDSAIKALkASAIQbACaiAIQa8CahANRQ0AIAgoAsACIARHDQIgCCgCvAIgBUcNAiAIKAK4AiAGRw0CIAEgCCgCzAIgCCgCjAMgAGtqSQRAQQMhJAwDC0EAIS4gAiAXTCIgRQRAIAggBSAGEBNFDQMgCCgCBCEuCyAIQeQBaiErIAkgFyAZbCIqIARsQQJ0aiEWQQAhNEEAISJBACE4IwBBEGsiKCQAAkAgCEGMA2oiIUUNACAWRQ0AICsoAgAhDCAhKAIAIQ0gISArIA9BIGoQF0UNACAMIA8oAjwiDkkNACAPKAIgQQNOBEAgDkEOSA0BIA1BDmogDkEOaxAcIA8oAiRHDQELIA8gISArEBpFDQAgLgRAIC4gDygCECAPKAIYIA8oAhRsQQdqQQN1EAgaCyAWQQAgDygCMCAPKAIsIA8oAihsbEECdBAHIRgCQCAPKAI0RQ0AIA8rA1ggDysDYGEEQCAPIBgQPCE0DAILAkAgDygCIEEESA0AIA8gISArEEpFDQIgKEEAOgAPIA8gKEEPahAdRQ0CICgtAA9FDQAgDyAYEDwhNAwCCyArKAIAIhVFDQEgISgCACIQLQAAIQ0gISAQQQFqNgIAICsgFUEBayIMNgIAIA1FBEAgDysDUCE6IA8oAkghDgJAAkACQCAPKAIgIg1BAkgNACAOQQFLDQAgOkQAAAAAAADgP2ENAQsgDUEGSA0BIA5BfnFBBkcNASA6RAAAAAAAAAAAYg0BCyAMRQ0DIBAtAAEhDiAhIBBBAmo2AgAgKyAVQQJrNgIAIA5BA0sNAyAOQQNGIA8oAiAiDEEGSHENAyAMQQRIIA5BAk9xDQMgDyAONgKkASAORQ0AIA8rA1AhOiAPKAJIIQ0CQCAMQQJIDQAgDUEBSw0AIDpEAAAAAAAA4D9iDQAgDkEBRwRAIAxBBEkNBSAOQQJHDQULIA8gISArIBgQOyE0DAQLIAxBBkgNAyANQX5xQQZHDQMgOkQAAAAAAAAAAGINAyAOQQNHDQMgISArIBggDUEHRiAPKAIsIA8oAiggDygCMBAeITQMAwtBACEMIwBBEGsiMSQAAkAgIUUNACAYRQ0AICEoAgBFDQAgMUEANgIIIDFCADcDACAPKAI4IjVBIEoNACA1QQFrIg0gDygCLGogNW0hOQJAIA0gDygCKGogNW0iN0EATA0AIA8oAjAhHCA5QQFrISwgN0EBayEtQQEhOANAIDlBAEoEQCAPKAIoICIgNWwiFWsgNSAiIC1GGyAVaiEjQQAhMgNAIBxBAEoEQCAPKAIsIDIgNWwiDWsgNSAsIDJGGyANaiEaQQAhDANAIBUhFCAMIR5BACERRAAAAAAAAAAAITwjAEEQayIfJAACQCArKAIAIgxFDQAgDygCMCETIA8oAiwhNiAfICEoAgAiJUEBaiIQNgIMICUtAAAhJiAfIAxBAWsiLzYCCCAmQQJ2IA1BA3ZzQQ5BDyAPKAIgIi5BBEoiDBtxDQAgDCAmQQRxQQJ2cSIpIB5FcQ0AAkACQAJAICZBA3EiHUEDRg0AAkACQCAdQQFrDgICAAELIBQgI0gEQCAPKAIQIQ4DQCANIBpIBEAgFCA2bCANaiIRIBNsIB5qIRIgDSEMA0AgDiARQQN1ai0AACARQQdxdEGAAXEEQCAYIBJBAnRqICkEfyASQQJ0IBhqQQRrKAIABUEACzYCAAsgEiATaiESIBFBAWohESAMQQFqIgwgGkcNAAsLIBRBAWoiFCAjRw0ACwsgISAQNgIADAMLICkNA0EAIR0gFCAjSARAIA8oAhAhLiAQIQ4DQCANIBpIBEAgFCA2bCANaiIRIBNsIB5qIRIgDSEMA0AgLiARQQN1ai0AACARQQdxdEGAAXEEQCAvQQRJBEBBACERDAkLIBggEkECdGogDigCADYCACAfIC9BBGsiLzYCCCAdQQFqIR0gDkEEaiEOCyASIBNqIRIgEUEBaiERIAxBAWoiDCAaRw0ACwsgFEEBaiIUICNHDQALCyAfIBAgHUECdGo2AgwMAQsgJkEGdiEOAkACQAJAAkACQAJAAkACQAJAAkBBBCAPKAJIIhAgEEEGSBsgECApGyIMQQJrDgYDAAMAAQIECyAMIA5BAXRrIgxBCCAMQQhJGyEQDAMLQQYhECAmQcAASQ0EQQJBASAOQQFGGyEQDAMLICZBwABJDQRBCCAOQQF0ayEQDAILIAwgDmsiDEEIIAxBCEkbIRALIBBBCEYNBwtBASEMQQAhDgJAIBAOCAMDAAABAQECBAtBAiEMDAILQQQhDAwBC0EIIQxBByEQCyAvIAwiDkkNAwsCQAJAAkACQAJAAkACQAJAAkAgEA4IAAECAwQFBgcICyAlLAABIQwgHyAlQQJqNgIMIAy3ITwMBwsgJS0AASEMIB8gJUECajYCDCAMuCE8DAYLICUuAAEhDCAfICVBA2o2AgwgDLchPAwFCyAlLwABIQwgHyAlQQNqNgIMIAy4ITwMBAsgJSgAASEMIB8gJUEFajYCDCAMtyE8DAMLICUoAAEhDCAfICVBBWo2AgwgDLghPAwCCyAlKgABIT4gHyAlQQVqNgIMID67ITwMAQsgJSsAASE8IB8gJUEJajYCDAsgHyAvIA5rNgIIIA8oArQBIB5BA3RqIA9B4ABqIgwgE0EBShsgDCAuQQNKGysDACE7IB1BA0YEQCAUICNODQFBACAaayEQIA1Bf3MhDiAaIA1rIQwgDygCECEzAn8gPJlEAAAAAAAA4EFjBEAgPKoMAQtBgICAgHgLISUgDUEBaiEmIAxBAXEhLiAOIBBGIR0DQCAUIDZsIA1qIhEgE2wgHmohEgJAICkEQCANIQwgDSAaTg0BA0AgMyARQQN1ai0AACARQQdxdEGAAXEEQAJ/IDsgPCAYIBJBAnRqIhBBBGsoAgC3oCI6IDogO2QbIjqZRAAAAAAAAOBBYwRAIDqqDAELQYCAgIB4CyEOIBAgDjYCAAsgEiATaiESIBFBAWohESAMQQFqIgwgGkcNAAsMAQsgDSAaTg0AIC4EfyAzIBFBA3VqLQAAIBFBB3F0QYABcQRAIBggEkECdGogJTYCAAsgEiATaiESIBFBAWohESAmBSANCyEMIB0NAANAIDMgEUEDdWotAAAgEUEHcXRBgAFxBEAgGCASQQJ0aiAlNgIACyASIBNqIRAgMyARQQFqIg5BA3VqLQAAIA5BB3F0QYABcQRAIBggEEECdGogJTYCAAsgECATaiESIBFBAmohESAMQQJqIgwgGkcNAAsLIBRBAWoiFCAjRw0ACwwBCyAPQfgAaiAfQQxqIB9BCGogMSAaIA1rIg4gIyAUa2wiDCAuEBlFDQIgDysDUCI6IDqgIT0gDCAxKAIEIDEoAgAiEWtBAnUiLkYEQCAUICNODQEgDSAeaiAUIDZsakECdEEEayEuIA1BAWohMyAOQQFxISUgNkECdCEdIA1Bf3MgGmohJkEAIS8DQCAUIDZsIA1qIBNsIB5qIRICQCApRQRAIA0gGk4NASAlBH8gGCASQQJ0agJ/IDsgESgCALggPaIgPKAiOiA6IDtkGyI6mUQAAAAAAADgQWMEQCA6qgwBC0GAgICAeAs2AgAgEiATaiESIBFBBGohESAzBSANCyEMICZFDQEDQCAYIBJBAnRqAn8gOyARKAIAuCA9oiA8oCI6IDogO2QbIjqZRAAAAAAAAOBBYwRAIDqqDAELQYCAgIB4CzYCACAYIBIgE2oiDkECdGoCfyA7IBEoAgS4ID2iIDygIjogOiA7ZBsiOplEAAAAAAAA4EFjBEAgOqoMAQtBgICAgHgLNgIAIBFBCGohESAOIBNqIRIgDEECaiIMIBpHDQALDAELIA0gGk4NACATQQFHBEAgDSEMA0ACfyA7IBEoAgC4ID2iIDygIBggEkECdGoiEEEEaygCALegIjogOiA7ZBsiOplEAAAAAAAA4EFjBEAgOqoMAQtBgICAgHgLIQ4gECAONgIAIBIgE2ohEiARQQRqIREgDEEBaiIMIBpHDQALDAELIBggLiAdIC9samooAgAhDCAlBH8gGCASQQJ0agJ/IDsgESgCALggPaIgPKAgDLegIjogOiA7ZBsiOplEAAAAAAAA4EFjBEAgOqoMAQtBgICAgHgLIgw2AgAgEiATaiESIBFBBGohESAzBSANCyEOICZFDQADQCAYIBJBAnRqAn8gOyARKAIAuCA9oiA8oCAMt6AiOiA6IDtkGyI6mUQAAAAAAADgQWMEQCA6qgwBC0GAgICAeAsiDDYCACAYIBIgE2oiEEECdGoCfyA7IBEoAgS4ID2iIDygIAy3oCI6IDogO2QbIjqZRAAAAAAAAOBBYwRAIDqqDAELQYCAgIB4CyIMNgIAIBFBCGohESAQIBNqIRIgDkECaiIOIBpHDQALCyAvQQFqIS8gFEEBaiIUICNHDQALDAELIA8oAiBBAkwEQCAUICNODQEgDygCECEQQQAhDgNAIA0gGkgEQCAUIDZsIA1qIhIgE2wgHmohDCANIR0DQCAQIBJBA3VqLQAAIBJBB3F0QYABcQRAIA4gLkYEQEEAIREMCAsgGCAMQQJ0agJ/IDsgESAOQQJ0aigCALggPaIgPKAiOiA6IDtkGyI6mUQAAAAAAADgQWMEQCA6qgwBC0GAgICAeAs2AgAgDkEBaiEOCyAMIBNqIQwgEkEBaiESIB1BAWoiHSAaRw0ACwsgFEEBaiIUICNHDQALDAELIBQgI04NACAPKAIQIS4DQCAUIDZsIA1qIhIgE2wgHmohDAJAIClFBEAgDSEOIA0gGk4NAQNAIC4gEkEDdWotAAAgEkEHcXRBgAFxBEAgGCAMQQJ0agJ/IDsgESgCALggPaIgPKAiOiA6IDtkGyI6mUQAAAAAAADgQWMEQCA6qgwBC0GAgICAeAs2AgAgEUEEaiERCyAMIBNqIQwgEkEBaiESIA5BAWoiDiAaRw0ACwwBCyANIQ4gDSAaTg0AA0AgLiASQQN1ai0AACASQQdxdEGAAXEEQAJ/IDsgESgCALggPaIgPKAgGCAMQQJ0aiIdQQRrKAIAt6AiOiA6IDtkGyI6mUQAAAAAAADgQWMEQCA6qgwBC0GAgICAeAshECAdIBA2AgAgEUEEaiERCyAMIBNqIQwgEkEBaiESIA5BAWoiDiAaRw0ACwsgFEEBaiIUICNHDQALCyAhIB8oAgw2AgAgHygCCCEvCyArIC82AgBBASERCyAfQRBqJAAgEUUNBSAeQQFqIgwgHEcNAAsLIDJBAWoiMiA5Rw0ACwsgIkEBaiIiIDdIITggIiA3Rw0ACwsgOEUhDCAxKAIAIg1FDQAgMSANNgIEIA0QBgsgMUEQaiQAIAxBAXENAQwCCyAPICEgKyAYECtFDQELQQEhNAsgKEEQaiQAIDRFDQICQCAEQQJIDQAgCCgCiAJFDQAgCiAXaiAILQDUAiINQQBHOgAAIAsgF0EDdGogCCsDgAM5AwAgDUUNAEEAIShBACENAkAgFiIORSAIKAK8AiIzQQBMciAIKAK4AiImQQBMciAIKALAAiIcQQBMciIuDQACfyAIKwP4AiI6mUQAAAAAAADgQWMEQCA6qgwBC0GAgICAeAsiJQJ/IAgrA4ADIjqZRAAAAAAAAOBBYwRAIDqqDAELQYCAgIB4CyIsRg0AIAgoAgggM0YgCCgCDCAmRnEhFCAcQX5xIR4gHEEBcSEdIBwgM2whEANAIA4gECAobEECdGohLSAIKAIEIRVBACEyQQAhKSANIQwDQAJAIBQEQCAVIAxBA3VqLQAAIAxBB3F0QYABcUUNAQtBACEiQQAhOCAcQQFHBEADQCAlIC0gIiApakECdGoiFigCAEYEQCAWICw2AgALICUgLSAiQQFyIClqQQJ0aiIWKAIARgRAIBYgLDYCAAsgIkECaiEiIDhBAmoiOCAeRw0ACwsgHUUNACAtICIgKWpBAnRqIhYoAgAgJUcNACAWICw2AgALIBwgKWohKSAMQQFqIQwgMkEBaiIyIDNHDQALIA0gM2ohDSAoQQFqIiggJkcNAAsLIC4NAwsgIA0AIAggAyAqahAbRQ0CCyAXQQFqIhcgB0ghMCAHIBdHDQALCyAIQfAONgIAIAgQECAPEBEaIDBBAXFFDQEMAgtBABAMIQ5BARAMIQwgCCAANgLoASAIQRBqEBYhEAJAIAdBAEwNACAJRSINIAUgBmwiD0VyIQpBASEuA0AgASAMIA4gMBtJBEBBAyEkDAILQQEhJCAQIAhB6AFqQQAgMEEARxAVRQ0BIBAoAgggBUcNASAQKAIMIAZHDQECQAJAIApFBEAgAyAPIDBsIgBqQQAgAiAwShshFSAAQQJ0IQRBhBMoAgAiAEGoEygCAEYEf0EBBSAAQZwTKAIARgshFiAEIAlqIQQgECgCECEkIBUNAUEAIQsgD0EATA0CA0ACQAJAICQqAgBDAAAAAF4EQCAkKgIEIT4gFgRAID6LQwAAAE9dRQ0CIAQgPqg2AgAMAwsgPrtEAAAAAAAA4D+gnCI6mUQAAAAAAADgQWMEQCAEIDqqNgIADAMLIARBgICAgHg2AgAMAgsgMA0BQQEhJAwHCyAEQYCAgIB4NgIACyAEQQRqIQQgJEEIaiEkIAtBAWoiCyAPRw0ACwwCCyANIC5yIS4MAwtBACELIBVBACAPEAchACAPQQBMDQADQCAkKgIAQwAAAABeBEAgJCoCBCE+IAQCfwJAIBYEQCA+i0MAAABPXUUNASA+qAwCCyA+u0QAAAAAAADgP6CcIjqZRAAAAAAAAOBBY0UNACA6qgwBC0GAgICAeAs2AgAgACALakEBOgAACyAEQQRqIQQgJEEIaiEkIAtBAWoiCyAPRw0ACwsgMEEBaiIwIAdIIS4gByAwRw0ACwsgEEGADTYCACAQKAJIIgAEQCAQIAA2AkwgABAGCyAQQfwNNgIAIBAoAhAQBiAuQQFxDQELQQAhJAsMBAsjAEGQA2siCCQAAkAgAUUNACAARQ0AIAlFDQAgBEEATA0AIAVBAEwNACAGQQBMDQAgB0EATA0AIAIgB0cgAkECT3ENAEEAIAJBAEogAxsNACAIIAA2AowDIAhBADoArwICQAJAIAAgASAIQbACaiAIQa8CahANRQ0AIAgoArACQQBMDQAgACABIAhB6AFqQQBBAEEAEBQiJA0CQQIhJCAIKAKEAiACSg0CIAgoAvwBIAdIDQICQCAEQQJIDQAgCCgCiAJFDQBBBSEkIApFDQMgC0UNAyAKQQAgBxAHGiALQQAgB0EDdBAHGgsgCCABNgLkASAIQRBqEBghDyAIQQA2AgwgCEIANwIEIAhB8A42AgBBASEkAkAgB0EATA0AIAUgBmwhGUEBITADQAJAIAgoAowDIg0gAGsgAU8NACANIAgoAuQBIAhBsAJqIAhBrwJqEA1FDQAgCCgCwAIgBEcNAiAIKAK8AiAFRw0CIAgoArgCIAZHDQIgASAIKALMAiAIKAKMAyAAa2pJBEBBAyEkDAMLQQAhLiACIBdMIiBFBEAgCCAFIAYQE0UNAyAIKAIEIS4LIAhB5AFqISsgCSAXIBlsIiogBGxBAnRqIRZBACE0QQAhIkEAITgjAEEQayIoJAACQCAIQYwDaiIhRQ0AIBZFDQAgKygCACEMICEoAgAhDSAhICsgD0EgahAXRQ0AIAwgDygCPCIOSQ0AIA8oAiBBA04EQCAOQQ5IDQEgDUEOaiAOQQ5rEBwgDygCJEcNAQsgDyAhICsQGkUNACAuBEAgLiAPKAIQIA8oAhggDygCFGxBB2pBA3UQCBoLIBZBACAPKAIwIA8oAiwgDygCKGxsQQJ0EAchGAJAIA8oAjRFDQAgDysDWCAPKwNgYQRAIA8gGBA6ITQMAgsCQCAPKAIgQQRIDQAgDyAhICsQSUUNAiAoQQA6AA8gDyAoQQ9qEB1FDQIgKC0AD0UNACAPIBgQOiE0DAILICsoAgAiFUUNASAhKAIAIhAtAAAhDSAhIBBBAWo2AgAgKyAVQQFrIgw2AgAgDUUEQCAPKwNQITogDygCSCEOAkACQAJAIA8oAiAiDUECSA0AIA5BAUsNACA6RAAAAAAAAOA/YQ0BCyANQQZIDQEgDkF+cUEGRw0BIDpEAAAAAAAAAABiDQELIAxFDQMgEC0AASEOICEgEEECajYCACArIBVBAms2AgAgDkEDSw0DIA5BA0YgDygCICIMQQZIcQ0DIAxBBEggDkECT3ENAyAPIA42AqQBIA5FDQAgDysDUCE6IA8oAkghDQJAIAxBAkgNACANQQFLDQAgOkQAAAAAAADgP2INACAOQQFHBEAgDEEESQ0FIA5BAkcNBQsgDyAhICsgGBA7ITQMBAsgDEEGSA0DIA1BfnFBBkcNAyA6RAAAAAAAAAAAYg0DIA5BA0cNAyAhICsgGCANQQdGIA8oAiwgDygCKCAPKAIwEB4hNAwDC0EAIQwjAEEQayIxJAACQCAhRQ0AIBhFDQAgISgCAEUNACAxQQA2AgggMUIANwMAIA8oAjgiNUEgSg0AIDVBAWsiDSAPKAIsaiA1bSE5AkAgDSAPKAIoaiA1bSI3QQBMDQAgDygCMCEcIDlBAWshLCA3QQFrIS1BASE4A0AgOUEASgRAIA8oAiggIiA1bCIVayA1ICIgLUYbIBVqISNBACEyA0AgHEEASgRAIA8oAiwgMiA1bCINayA1ICwgMkYbIA1qIRpBACEMA0AgFSEUIAwhHkEAIRFEAAAAAAAAAAAhOyMAQRBrIh8kAAJAICsoAgAiDEUNACAPKAIwIRMgDygCLCE2IB8gISgCACIlQQFqIhA2AgwgJS0AACEmIB8gDEEBayIvNgIIICZBAnYgDUEDdnNBDkEPIA8oAiAiLkEESiIMG3ENACAMICZBBHFBAnZxIikgHkVxDQACQAJAAkAgJkEDcSIdQQNGDQACQAJAIB1BAWsOAgIAAQsgFCAjSARAIA8oAhAhDgNAIA0gGkgEQCAUIDZsIA1qIhEgE2wgHmohEiANIQwDQCAOIBFBA3VqLQAAIBFBB3F0QYABcQRAIBggEkECdGogKQR/IBJBAnQgGGpBBGsoAgAFQQALNgIACyASIBNqIRIgEUEBaiERIAxBAWoiDCAaRw0ACwsgFEEBaiIUICNHDQALCyAhIBA2AgAMAwsgKQ0DQQAhHSAUICNIBEAgDygCECEuIBAhDgNAIA0gGkgEQCAUIDZsIA1qIhEgE2wgHmohEiANIQwDQCAuIBFBA3VqLQAAIBFBB3F0QYABcQRAIC9BBEkEQEEAIREMCQsgGCASQQJ0aiAOKAIANgIAIB8gL0EEayIvNgIIIB1BAWohHSAOQQRqIQ4LIBIgE2ohEiARQQFqIREgDEEBaiIMIBpHDQALCyAUQQFqIhQgI0cNAAsLIB8gECAdQQJ0ajYCDAwBCyAmQQZ2IQ4CQAJAAkACQAJAAkACQAJAAkACQEEEIA8oAkgiECAQQQZIGyAQICkbIgxBAmsOBgMAAwABAgQLIAwgDkEBdGsiDEEIIAxBCEkbIRAMAwtBBiEQICZBwABJDQRBAkEBIA5BAUYbIRAMAwsgJkHAAEkNBEEIIA5BAXRrIRAMAgsgDCAOayIMQQggDEEISRshEAsgEEEIRg0HC0EBIQxBACEOAkAgEA4IAwMAAAEBAQIEC0ECIQwMAgtBBCEMDAELQQghDEEHIRALIC8gDCIOSQ0DCwJAAkACQAJAAkACQAJAAkACQCAQDggAAQIDBAUGBwgLICUsAAEhDCAfICVBAmo2AgwgDLchOwwHCyAlLQABIQwgHyAlQQJqNgIMIAy4ITsMBgsgJS4AASEMIB8gJUEDajYCDCAMtyE7DAULICUvAAEhDCAfICVBA2o2AgwgDLghOwwECyAlKAABIQwgHyAlQQVqNgIMIAy3ITsMAwsgJSgAASEMIB8gJUEFajYCDCAMuCE7DAILICUqAAEhPiAfICVBBWo2AgwgPrshOwwBCyAlKwABITsgHyAlQQlqNgIMCyAfIC8gDms2AgggDygCtAEgHkEDdGogD0HgAGoiDCATQQFKGyAMIC5BA0obKwMAITwgHUEDRgRAIBQgI04NAUEAIBprIRAgDUF/cyEOIBogDWshDCAPKAIQITMCfyA7RAAAAAAAAPBBYyA7RAAAAAAAAAAAZnEEQCA7qwwBC0EACyElIA1BAWohJiAMQQFxIS4gDiAQRiEdA0AgFCA2bCANaiIRIBNsIB5qIRICQCApBEAgDSEMIA0gGk4NAQNAIDMgEUEDdWotAAAgEUEHcXRBgAFxBEACfyA8IDsgGCASQQJ0aiIQQQRrKAIAuKAiOiA6IDxkGyI6RAAAAAAAAPBBYyA6RAAAAAAAAAAAZnEEQCA6qwwBC0EACyEOIBAgDjYCAAsgEiATaiESIBFBAWohESAMQQFqIgwgGkcNAAsMAQsgDSAaTg0AIC4EfyAzIBFBA3VqLQAAIBFBB3F0QYABcQRAIBggEkECdGogJTYCAAsgEiATaiESIBFBAWohESAmBSANCyEMIB0NAANAIDMgEUEDdWotAAAgEUEHcXRBgAFxBEAgGCASQQJ0aiAlNgIACyASIBNqIRAgMyARQQFqIg5BA3VqLQAAIA5BB3F0QYABcQRAIBggEEECdGogJTYCAAsgECATaiESIBFBAmohESAMQQJqIgwgGkcNAAsLIBRBAWoiFCAjRw0ACwwBCyAPQfgAaiAfQQxqIB9BCGogMSAaIA1rIg4gIyAUa2wiDCAuEBlFDQIgDysDUCI6IDqgIT0gDCAxKAIEIDEoAgAiEWtBAnUiLkYEQCAUICNODQEgDSAeaiAUIDZsakECdEEEayEuIA1BAWohMyAOQQFxISUgNkECdCEdIA1Bf3MgGmohJkEAIS8DQCAUIDZsIA1qIBNsIB5qIRICQCApRQRAIA0gGk4NASAlBH8gGCASQQJ0agJ/IDwgESgCALggPaIgO6AiOiA6IDxkGyI6RAAAAAAAAPBBYyA6RAAAAAAAAAAAZnEEQCA6qwwBC0EACzYCACASIBNqIRIgEUEEaiERIDMFIA0LIQwgJkUNAQNAIBggEkECdGoCfyA8IBEoAgC4ID2iIDugIjogOiA8ZBsiOkQAAAAAAADwQWMgOkQAAAAAAAAAAGZxBEAgOqsMAQtBAAs2AgAgGCASIBNqIg5BAnRqAn8gPCARKAIEuCA9oiA7oCI6IDogPGQbIjpEAAAAAAAA8EFjIDpEAAAAAAAAAABmcQRAIDqrDAELQQALNgIAIBFBCGohESAOIBNqIRIgDEECaiIMIBpHDQALDAELIA0gGk4NACATQQFHBEAgDSEMA0ACfyA8IBEoAgC4ID2iIDugIBggEkECdGoiEEEEaygCALigIjogOiA8ZBsiOkQAAAAAAADwQWMgOkQAAAAAAAAAAGZxBEAgOqsMAQtBAAshDiAQIA42AgAgEiATaiESIBFBBGohESAMQQFqIgwgGkcNAAsMAQsgGCAuIB0gL2xqaigCACEMICUEfyAYIBJBAnRqAn8gPCARKAIAuCA9oiA7oCAMuKAiOiA6IDxkGyI6RAAAAAAAAPBBYyA6RAAAAAAAAAAAZnEEQCA6qwwBC0EACyIMNgIAIBIgE2ohEiARQQRqIREgMwUgDQshDiAmRQ0AA0AgGCASQQJ0agJ/IDwgESgCALggPaIgO6AgDLigIjogOiA8ZBsiOkQAAAAAAADwQWMgOkQAAAAAAAAAAGZxBEAgOqsMAQtBAAsiDDYCACAYIBIgE2oiEEECdGoCfyA8IBEoAgS4ID2iIDugIAy4oCI6IDogPGQbIjpEAAAAAAAA8EFjIDpEAAAAAAAAAABmcQRAIDqrDAELQQALIgw2AgAgEUEIaiERIBAgE2ohEiAOQQJqIg4gGkcNAAsLIC9BAWohLyAUQQFqIhQgI0cNAAsMAQsgDygCIEECTARAIBQgI04NASAPKAIQIRBBACEOA0AgDSAaSARAIBQgNmwgDWoiEiATbCAeaiEMIA0hHQNAIBAgEkEDdWotAAAgEkEHcXRBgAFxBEAgDiAuRgRAQQAhEQwICyAYIAxBAnRqAn8gPCARIA5BAnRqKAIAuCA9oiA7oCI6IDogPGQbIjpEAAAAAAAA8EFjIDpEAAAAAAAAAABmcQRAIDqrDAELQQALNgIAIA5BAWohDgsgDCATaiEMIBJBAWohEiAdQQFqIh0gGkcNAAsLIBRBAWoiFCAjRw0ACwwBCyAUICNODQAgDygCECEuA0AgFCA2bCANaiISIBNsIB5qIQwCQCApRQRAIA0hDiANIBpODQEDQCAuIBJBA3VqLQAAIBJBB3F0QYABcQRAIBggDEECdGoCfyA8IBEoAgC4ID2iIDugIjogOiA8ZBsiOkQAAAAAAADwQWMgOkQAAAAAAAAAAGZxBEAgOqsMAQtBAAs2AgAgEUEEaiERCyAMIBNqIQwgEkEBaiESIA5BAWoiDiAaRw0ACwwBCyANIQ4gDSAaTg0AA0AgLiASQQN1ai0AACASQQdxdEGAAXEEQAJ/IDwgESgCALggPaIgO6AgGCAMQQJ0aiIdQQRrKAIAuKAiOiA6IDxkGyI6RAAAAAAAAPBBYyA6RAAAAAAAAAAAZnEEQCA6qwwBC0EACyEQIB0gEDYCACARQQRqIRELIAwgE2ohDCASQQFqIRIgDkEBaiIOIBpHDQALCyAUQQFqIhQgI0cNAAsLICEgHygCDDYCACAfKAIIIS8LICsgLzYCAEEBIRELIB9BEGokACARRQ0FIB5BAWoiDCAcRw0ACwsgMkEBaiIyIDlHDQALCyAiQQFqIiIgN0ghOCAiIDdHDQALCyA4RSEMIDEoAgAiDUUNACAxIA02AgQgDRAGCyAxQRBqJAAgDEEBcQ0BDAILIA8gISArIBgQK0UNAQtBASE0CyAoQRBqJAAgNEUNAgJAIARBAkgNACAIKAKIAkUNACAKIBdqIAgtANQCIg1BAEc6AAAgCyAXQQN0aiAIKwOAAzkDACANRQ0AQQAhKEEAIQ0CQCAWIg5FIAgoArwCIjNBAExyIAgoArgCIiZBAExyIAgoAsACIhxBAExyIi4NAAJ/IAgrA/gCIjpEAAAAAAAA8EFjIDpEAAAAAAAAAABmcQRAIDqrDAELQQALIiUCfyAIKwOAAyI6RAAAAAAAAPBBYyA6RAAAAAAAAAAAZnEEQCA6qwwBC0EACyIsRg0AIAgoAgggM0YgCCgCDCAmRnEhFCAcQX5xIR4gHEEBcSEdIBwgM2whEANAIA4gECAobEECdGohLSAIKAIEIRVBACEyQQAhKSANIQwDQAJAIBQEQCAVIAxBA3VqLQAAIAxBB3F0QYABcUUNAQtBACEiQQAhOCAcQQFHBEADQCAlIC0gIiApakECdGoiFigCAEYEQCAWICw2AgALICUgLSAiQQFyIClqQQJ0aiIWKAIARgRAIBYgLDYCAAsgIkECaiEiIDhBAmoiOCAeRw0ACwsgHUUNACAtICIgKWpBAnRqIhYoAgAgJUcNACAWICw2AgALIBwgKWohKSAMQQFqIQwgMkEBaiIyIDNHDQALIA0gM2ohDSAoQQFqIiggJkcNAAsLIC4NAwsgIA0AIAggAyAqahAbRQ0CCyAXQQFqIhcgB0ghMCAHIBdHDQALCyAIQfAONgIAIAgQECAPEBEaIDBBAXFFDQEMAgtBABAMIQ5BARAMIQwgCCAANgLoASAIQRBqEBYhEAJAIAdBAEwNACAJRSINIAUgBmwiD0VyIQpBASEuA0AgASAMIA4gMBtJBEBBAyEkDAILQQEhJCAQIAhB6AFqQQAgMEEARxAVRQ0BIBAoAgggBUcNASAQKAIMIAZHDQECQAJAIApFBEAgAyAPIDBsIgBqQQAgAiAwShshFSAAQQJ0IQRBkBMoAgAiAEGoEygCAEYEf0EBBSAAQZwTKAIARgshFiAEIAlqIQQgECgCECEkIBUNAUEAIQsgD0EATA0CA0ACQAJAICQqAgBDAAAAAF4EQCAkKgIEIT4gFgRAID5DAACAT10gPkMAAAAAYHFFDQIgBCA+qTYCAAwDCyA+u0QAAAAAAADgP6CcIjpEAAAAAAAA8EFjIDpEAAAAAAAAAABmcQRAIAQgOqs2AgAMAwsgBEEANgIADAILIDANAUEBISQMBwsgBEEANgIACyAEQQRqIQQgJEEIaiEkIAtBAWoiCyAPRw0ACwwCCyANIC5yIS4MAwtBACELIBVBACAPEAchACAPQQBMDQADQCAkKgIAQwAAAABeBEAgJCoCBCE+IAQCfwJAIBYEQCA+QwAAgE9dID5DAAAAAGBxRQ0BID6pDAILID67RAAAAAAAAOA/oJwiOkQAAAAAAADwQWMgOkQAAAAAAAAAAGZxRQ0AIDqrDAELQQALNgIAIAAgC2pBAToAAAsgBEEEaiEEICRBCGohJCALQQFqIgsgD0cNAAsLIDBBAWoiMCAHSCEuIAcgMEcNAAsLIBBBgA02AgAgECgCSCIABEAgECAANgJMIAAQBgsgEEH8DTYCACAQKAIQEAYgLkEBcQ0BC0EAISQLDAMLIwBBkANrIggkAAJAIAFFDQAgAEUNACAJRQ0AIARBAEwNACAFQQBMDQAgBkEATA0AIAdBAEwNACACIAdHIAJBAk9xDQBBACACQQBKIAMbDQAgCCAANgKMAyAIQQA6AK8CAkACQCAAIAEgCEGwAmogCEGvAmoQDUUNACAIKAKwAkEATA0AIAAgASAIQegBakEAQQBBABAUIiQNAkECISQgCCgChAIgAkoNAiAIKAL8ASAHSA0CAkAgBEECSA0AIAgoAogCRQ0AQQUhJCAKRQ0DIAtFDQMgCkEAIAcQBxogC0EAIAdBA3QQBxoLIAggATYC5AEgCEEQahAYIRAgCEEANgIMIAhCADcCBCAIQfAONgIAQQEhJAJAIAdBAEwNACAFIAZsIThBASEwA0ACQCAIKAKMAyINIABrIAFPDQAgDSAIKALkASAIQbACaiAIQa8CahANRQ0AIAgoAsACIARHDQIgCCgCvAIgBUcNAiAIKAK4AiAGRw0CIAEgCCgCzAIgCCgCjAMgAGtqSQRAQQMhJAwDC0EAIQ0gAiAuTCI5RQRAIAggBSAGEBNFDQMgCCgCBCENCyAIQeQBaiEtIAkgLiA4bCI3IARsQQJ0aiImIRVBACETQQAhFEEAISBBACEfQQAhHkEAISsjAEEQayI2JAACQCAIQYwDaiIsRQ0AIBVFDQAgLSgCACEOICwoAgAhDCAsIC0gEEEgahAXRQ0AIA4gECgCPCIWSQ0AIBAoAiBBA04EQCAWQQ5IDQEgDEEOaiAWQQ5rEBwgECgCJEcNAQsgECAsIC0QGkUNACANBEAgDSAQKAIQIBAoAhggECgCFGxBB2pBA3UQCBoLIBVBACAQKAIwIBAoAiwgECgCKGxsQQJ0EAchKgJAIBAoAjRFDQAgECsDWCAQKwNgYQRAIBAgKhA5IRQMAgsCQCAQKAIgQQRIDQAgECAsIC0QSEUNAiA2QQA6AA8gECA2QQ9qEB1FDQIgNi0AD0UNACAQICoQOSEUDAILIC0oAgAiFkUNASAsKAIAIhUtAAAhDSAsIBVBAWo2AgAgLSAWQQFrIgw2AgAgDUUEQCAQKwNQITogECgCSCEOAkACQAJAIBAoAiAiDUECSA0AIA5BAUsNACA6RAAAAAAAAOA/YQ0BCyANQQZIDQEgDkF+cUEGRw0BIDpEAAAAAAAAAABiDQELIAxFDQMgFS0AASEOICwgFUECajYCACAtIBZBAms2AgAgDkEDSw0DIA5BA0YgECgCICIMQQZIcQ0DIAxBBEggDkECT3ENAyAQIA42AqQBIA5FDQAgECsDUCE6IBAoAkghDQJAIAxBAkgNACANQQFLDQAgOkQAAAAAAADgP2INACAOQQFHBEAgDEEESQ0FIA5BAkcNBQtBACEMQQAhDiMAQTBrIhokAAJAICxFDQAgKkUNACAsKAIARQ0AIBpCADcCFCAaQgA3AhwgGkIANwIMIBpBgIACNgIIIBpBADYCLCAaQgw3AiQCQCAaQQhqICwgLSAQKAIgECRFDQAgGkEANgIEIBpBCGogGkEEahAjRQ0AIBAoAkhFQQd0ITUgECgCMCEhIBAoAqQBIQ0gLCgCACEWIC0oAgAiDwJ/AkACQAJAIBAoAjQgECgCLCIjIBAoAigiL2xGBEACQAJAIA1BAWsOAgEABwsgL0EASg0CDAQLICFBAEwNAyAhICNsIRxBICAaKAIEIilrISIgGigCKCEoIBooAiwhHSAaKAIYITIgL0EATCEzIA8hDSAWIRUDQEMAAAAAIT9BACEgIB4hDiAzRQRAA0ACQCAjQQBMDQBBACEUQQEhNANAIBVFIBNBH0tyIRkCQAJAAkACQCANQRBPBEBBACEMIBkNDyAVKAIAIBN0ICJ2IRkgMiApQSAgE2tKBH8gFSgCBEHAACATIClqa3YgGXIFIBkLQQJ0aiIlLgEAIhlBAE4EQCAlLgECIQwgEyAZQf//A3FqIhNBIEkNBQwECyAdRQ0PIBMgKGoiDEEgayAMIAxBH0oiDBshEyANQQRrIA0gDBshDSAVIAxBAnRqIRUgHSEMA0AgFSgCACATdCEZIBNBAWoiE0EgRgRAQQAhEyAVQQRqIRUgDUEEayENCyAMQQxBCCAZQQBIG2ooAgAiDEUNAiAMLgEEIhlBAEgNAAsgGUH//wNxIQwMBAtBACEMIBkgDUEESXINDiAVKAIAIBN0ICJ2IRkgMiApQSAgE2tKBH8gDUEISQ0PIBUoAgRBwAAgEyApamt2IBlyBSAZC0ECdGoiJS4BACIZQQBOBEAgJS4BAiEMIBMgGUH//wNxaiITQSBPDQMMBAsgHUUNDiANQQRrIA0gEyAoaiIlQR9KIhkbIg1BBEkNDiAlQSBrICUgGRshEyAVIBlBAnRqIRUgHSEMA0AgFSgCACATdCEZIBNBAWoiE0EgRgRAQQAhEyAVQQRqIRUgDUEEayENCyAMQQxBCCAZQQBIG2ooAgAiDEUNASAMLgEEIhlBAE4NAiANQQNLDQALCyA0RQ0EQQAhDAwNCyAZQf//A3EhDAwBCyANQQRrIQ0gFUEEaiEVIBNBIGshEwsgDCA1a7IhPgJAIBQNACAgRQ0AICogDiAca0ECdGoqAgAhPwsgKiAOQQJ0aiA/ID6SIj84AgAgDiAhaiEOIBRBAWoiFCAjSCE0IBQgI0cNAAsLICBBAWoiICAvRw0ACwsgHkEBaiIeICFHDQALDAILAkACQCANQQFrDgIBAAYLIC9BAEwNA0EgIBooAgQiImshKCAQKAIQITMgGigCKCEyIBooAiwhHSAaKAIYIRwgI0EATCElIA8hDSAWIRUDQCAlRQRAIA4gI2ohHkEAITEDQAJAIDMgDkEDdWotAAAgDkEHcXRBgAFxRQ0AQQEhNEEAIRQgIUEATA0AA0AgFUUgE0EfS3IhIAJAAkACQAJAIA1BEE8EQEEAIQwgIA0PIBUoAgAgE3QgKHYhICAcICJBICATa0oEfyAVKAIEQcAAIBMgImprdiAgcgUgIAtBAnRqIhkuAQAiIEEATgRAIBkuAQIhDCATICBB//8DcWoiE0EgSQ0FDAQLIB1FDQ8gEyAyaiIMQSBrIAwgDEEfSiIMGyETIA1BBGsgDSAMGyENIBUgDEECdGohFSAdIQwDQCAVKAIAIBN0ISAgE0EBaiITQSBGBEBBACETIBVBBGohFSANQQRrIQ0LIAxBDEEIICBBAEgbaigCACIMRQ0CIAwuAQQiIEEASA0ACyAgQf//A3EhDAwEC0EAIQwgICANQQRJcg0OIBUoAgAgE3QgKHYhICAcICJBICATa0oEfyANQQhJDQ8gFSgCBEHAACATICJqa3YgIHIFICALQQJ0aiIZLgEAIiBBAE4EQCAZLgECIQwgEyAgQf//A3FqIhNBIE8NAwwECyAdRQ0OIA1BBGsgDSATIDJqIhlBH0oiIBsiDUEESQ0OIBlBIGsgGSAgGyETIBUgIEECdGohFSAdIQwDQCAVKAIAIBN0ISAgE0EBaiITQSBGBEBBACETIBVBBGohFSANQQRrIQ0LIAxBDEEIICBBAEgbaigCACIMRQ0BIAwuAQQiIEEATg0CIA1BA0sNAAsLIDRFDQRBACEMDA0LICBB//8DcSEMDAELIA1BBGshDSAVQQRqIRUgE0EgayETCyAqIBQgK2pBAnRqIAwgNWuyOAIAIBRBAWoiFCAhSCE0IBQgIUcNAAsLICEgK2ohKyAOQQFqIQ4gMUEBaiIxICNHDQALIB4hDgsgH0EBaiIfIC9HDQALDAILICFBAEwNAiAhICNsIRxBICAaKAIEIjRrISIgGigCKCEoIBooAiwhDSAaKAIYITIgL0EATCEzIA8hDiAWIRUDQCAzRQRAIBAoAhAhKUMAAAAAIT9BACEfIB4hIEEAIRQDQAJAICNBAEwNACAUICNqIR1BACErQQEhMQNAICkgFEEDdWotAAAgFEEHcXRBgAFxBEAgFUUgE0EfS3IhGQJAAkACQAJAIA5BEE8EQEEAIQwgGQ0PIBUoAgAgE3QgInYhGSAyIDRBICATa0oEfyAVKAIEQcAAIBMgNGprdiAZcgUgGQtBAnRqIiUuAQAiGUEATgRAICUuAQIhDCATIBlB//8DcWoiE0EgSQ0FDAQLIA1FDQ8gEyAoaiIMQSBrIAwgDEEfSiIMGyETIA5BBGsgDiAMGyEOIBUgDEECdGohFSANIQwDQCAVKAIAIBN0IRkgE0EBaiITQSBGBEBBACETIBVBBGohFSAOQQRrIQ4LIAxBDEEIIBlBAEgbaigCACIMRQ0CIAwuAQQiGUEASA0ACyAZQf//A3EhDAwEC0EAIQwgGSAOQQRJcg0OIBUoAgAgE3QgInYhGSAyIDRBICATa0oEfyAOQQhJDQ8gFSgCBEHAACATIDRqa3YgGXIFIBkLQQJ0aiIlLgEAIhlBAE4EQCAlLgECIQwgEyAZQf//A3FqIhNBIE8NAwwECyANRQ0OIA5BBGsgDiATIChqIiVBH0oiGRsiDkEESQ0OICVBIGsgJSAZGyETIBUgGUECdGohFSANIQwDQCAVKAIAIBN0IRkgE0EBaiITQSBGBEBBACETIBVBBGohFSAOQQRrIQ4LIAxBDEEIIBlBAEgbaigCACIMRQ0BIAwuAQQiGUEATg0CIA5BA0sNAAsLIDFBAXFFDQVBACEMDA0LIBlB//8DcSEMDAELIA5BBGshDiAVQQRqIRUgE0EgayETCyAMIDVrsiE+AkAgKwRAICkgFEEBayIMQQN1ai0AACAMQQdxdEGAAXENAQsgH0UNACApIBQgI2siDEEDdWotAAAgDEEHcXRBgAFxRQ0AICogICAca0ECdGoqAgAhPwsgKiAgQQJ0aiA/ID6SIj84AgALICAgIWohICAUQQFqIRQgK0EBaiIrICNIITEgIyArRw0ACyAdIRQLIB9BAWoiHyAvRw0ACwsgHkEBaiIeICFHDQALDAELQSAgGigCBCIiayEoIBooAighMiAaKAIsIR0gGigCGCEcICNBAEwhMyAPIQ0gFiEVA0BBACEfIDNFBEADQEEBISBBACEUAkAgIUEATA0AA0AgFUUgE0EfS3IhGQJAAkACQAJAIA1BEE8EQEEAIQwgGQ0NIBUoAgAgE3QgKHYhGSAcICJBICATa0oEfyAVKAIEQcAAIBMgImprdiAZcgUgGQtBAnRqIiUuAQAiGUEATgRAICUuAQIhDCATIBlB//8DcWoiE0EgSQ0FDAQLIB1FDQ0gEyAyaiIMQSBrIAwgDEEfSiIMGyETIA1BBGsgDSAMGyENIBUgDEECdGohFSAdIQwDQCAVKAIAIBN0IRkgE0EBaiITQSBGBEBBACETIBVBBGohFSANQQRrIQ0LIAxBDEEIIBlBAEgbaigCACIMRQ0CIAwuAQQiGUEASA0ACyAZQf//A3EhDAwEC0EAIQwgGSANQQRJcg0MIBUoAgAgE3QgKHYhGSAcICJBICATa0oEfyANQQhJDQ0gFSgCBEHAACATICJqa3YgGXIFIBkLQQJ0aiIlLgEAIhlBAE4EQCAlLgECIQwgEyAZQf//A3FqIhNBIE8NAwwECyAdRQ0MIA1BBGsgDSATIDJqIiVBH0oiGRsiDUEESQ0MICVBIGsgJSAZGyETIBUgGUECdGohFSAdIQwDQCAVKAIAIBN0IRkgE0EBaiITQSBGBEBBACETIBVBBGohFSANQQRrIQ0LIAxBDEEIIBlBAEgbaigCACIMRQ0BIAwuAQQiGUEATg0CIA1BA0sNAAsLICBBAXFFDQRBACEMDAsLIBlB//8DcSEMDAELIA1BBGshDSAVQQRqIRUgE0EgayETCyAqIA4gFGpBAnRqIAwgNWuyOAIAIBRBAWoiFCAhSCEgIBQgIUcNAAsLIA4gIWohDiAfQQFqIh8gI0cNAAsLIB5BAWoiHiAvRw0ACwsgE0EASkECdAwBCyAWIRVBAAsgFSAWa2pBBGpBfHEiDU8EQCAsIA0gFmo2AgAgLSAPIA1rNgIACyANIA9NIQwLIBpBCGoQIiAaKAIYIg0EQCAaIA02AhwgDRAGCyAaKAIMIg1FDQAgGiANNgIQIA0QBgsgGkEwaiQAIAwhFAwECyAMQQZIDQMgDUF+cUEGRw0DIDpEAAAAAAAAAABiDQMgDkEDRw0DICwgLSAqIA1BB0YgECgCLCAQKAIoIBAoAjAQHiEUDAMLQQAhDiMAQRBrIiskAAJAICxFDQAgKkUNACAsKAIARQ0AICtBADYCCCArQgA3AwAgECgCOCIxQSBKDQAgMUEBayINIBAoAixqIDFtITQCQCANIBAoAihqIDFtIilBAEwNACAQKAIwISIgNEEBayEcIClBAWshM0EBIR4DQCA0QQBKBEAgECgCKCAgIDFsIhZrIDEgICAzRhsgFmohIUEAIR8DQCAiQQBKBEAgECgCLCAfIDFsIgxrIDEgHCAfRhsgDGohE0EAIQ4DQCAWIRkgDiEdQQAhEkQAAAAAAAAAACE8IwBBEGsiGiQAAkAgLSgCACINRQ0AIBAoAjAhGCAQKAIsIS8gGiAsKAIAIihBAWoiFTYCDCAoLQAAITIgGiANQQFrIiM2AgggMkECdiAMQQN2c0EOQQ8gECgCICIlQQRKIg0bcQ0AIA0gMkEEcUECdnEiNSAdRXENAAJAAkACQCAyQQNxIg9BA0YNAAJAAkAgD0EBaw4CAgABCyAZICFIBEAgECgCECEOA0AgDCATSARAIBkgL2wgDGoiEiAYbCAdaiEXIAwhDQNAIA4gEkEDdWotAAAgEkEHcXRBgAFxBEAgKiAXQQJ0aiA1BH0gF0ECdCAqakEEayoCAAVDAAAAAAs4AgALIBcgGGohFyASQQFqIRIgDUEBaiINIBNHDQALCyAZQQFqIhkgIUcNAAsLICwgFTYCAAwDCyA1DQNBACEPIBkgIUgEQCAQKAIQISUgFSEOA0AgDCATSARAIBkgL2wgDGoiEiAYbCAdaiEXIAwhDQNAICUgEkEDdWotAAAgEkEHcXRBgAFxBEAgI0EESQRAQQAhEgwJCyAqIBdBAnRqIA4qAgA4AgAgGiAjQQRrIiM2AgggD0EBaiEPIA5BBGohDgsgFyAYaiEXIBJBAWohEiANQQFqIg0gE0cNAAsLIBlBAWoiGSAhRw0ACwsgGiAVIA9BAnRqNgIMDAELIDJBBnYhDgJAAkACQAJAAkACQAJAAkACQAJAQQQgECgCSCIVIBVBBkgbIBUgNRsiDUECaw4GAwADAAECBAsgDSAOQQF0ayINQQggDUEISRshFQwDC0EGIRUgMkHAAEkNBEECQQEgDkEBRhshFQwDCyAyQcAASQ0EQQggDkEBdGshFQwCCyANIA5rIg1BCCANQQhJGyEVCyAVQQhGDQcLQQEhDUEAIQ4CQCAVDggDAwAAAQEBAgQLQQIhDQwCC0EEIQ0MAQtBCCENQQchFQsgIyANIg5JDQMLAkACQAJAAkACQAJAAkACQAJAIBUOCAABAgMEBQYHCAsgKCwAASENIBogKEECajYCDCANtyE8DAcLICgtAAEhDSAaIChBAmo2AgwgDbghPAwGCyAoLgABIQ0gGiAoQQNqNgIMIA23ITwMBQsgKC8AASENIBogKEEDajYCDCANuCE8DAQLICgoAAEhDSAaIChBBWo2AgwgDbchPAwDCyAoKAABIQ0gGiAoQQVqNgIMIA24ITwMAgsgKCoAASE+IBogKEEFajYCDCA+uyE8DAELICgrAAEhPCAaIChBCWo2AgwLIBogIyAOazYCCCAQKAK0ASAdQQN0aiAQQeAAaiINIBhBAUobIA0gJUEDShsrAwAhOyAPQQNGBEAgGSAhTg0BIAxBAWohJSATIAxrQQFxIQ8gECgCECEoIDy2IT5BACATayAMQX9zRiEVA0AgGSAvbCAMaiISIBhsIB1qIRcCQCA1BEAgEyAMIg1MDQEDQCAoIBJBA3VqLQAAIBJBB3F0QYABcQRAICogF0ECdGoiDiA7IDwgDkEEayoCALugIjogOiA7ZBu2OAIACyAXIBhqIRcgEkEBaiESIA1BAWoiDSATRw0ACwwBCyAMIBNODQAgDwR/ICggEkEDdWotAAAgEkEHcXRBgAFxBEAgKiAXQQJ0aiA+OAIACyAXIBhqIRcgEkEBaiESICUFIAwLIQ0gFQ0AA0AgKCASQQN1ai0AACASQQdxdEGAAXEEQCAqIBdBAnRqID44AgALIBcgGGohMiAoIBJBAWoiDkEDdWotAAAgDkEHcXRBgAFxBEAgKiAyQQJ0aiA+OAIACyAYIDJqIRcgEkECaiESIA1BAmoiDSATRw0ACwsgGUEBaiIZICFHDQALDAELIBBB+ABqIBpBDGogGkEIaiArIBMgDGsiDiAhIBlrbCINICUQGUUNAiAQKwNQIjogOqAhPSANICsoAgQgKygCACISa0ECdSIlRgRAIBkgIU4NASAMIB1qIBkgL2xqQQJ0QQRrIQ8gDEEBaiEoIA5BAXEhMiAvQQJ0IRUgDEF/cyATaiElQQAhIwNAIBkgL2wgDGogGGwgHWohFwJAIDVFBEAgDCATTg0BIDIEfyAqIBdBAnRqIDsgEigCALggPaIgPKAiOiA6IDtkG7Y4AgAgFyAYaiEXIBJBBGohEiAoBSAMCyENICVFDQEDQCAqIBdBAnRqIDsgEigCALggPaIgPKAiOiA6IDtkG7Y4AgAgKiAXIBhqIg5BAnRqIDsgEigCBLggPaIgPKAiOiA6IDtkG7Y4AgAgEkEIaiESIA4gGGohFyANQQJqIg0gE0cNAAsMAQsgDCATTg0AIBhBAUcEQCAMIQ0DQCAqIBdBAnRqIg4gOyASKAIAuCA9oiA8oCAOQQRrKgIAu6AiOiA6IDtkG7Y4AgAgFyAYaiEXIBJBBGohEiANQQFqIg0gE0cNAAsMAQsgKiAPIBUgI2xqaioCACE+IDIEfyAqIBdBAnRqIDsgEigCALggPaIgPKAgPrugIjogOiA7ZBu2Ij44AgAgFyAYaiEXIBJBBGohEiAoBSAMCyENICVFDQADQCAqIBdBAnRqIDsgEigCALggPaIgPKAgPrugIjogOiA7ZBu2Ij44AgAgKiAXIBhqIg5BAnRqIDsgEigCBLggPaIgPKAgPrugIjogOiA7ZBu2Ij44AgAgEkEIaiESIA4gGGohFyANQQJqIg0gE0cNAAsLICNBAWohIyAZQQFqIhkgIUcNAAsMAQsgECgCIEECTARAIBkgIU4NASAQKAIQIRVBACEOA0AgDCATSARAIBkgL2wgDGoiFyAYbCAdaiENIAwhDwNAIBUgF0EDdWotAAAgF0EHcXRBgAFxBEAgDiAlRgRAQQAhEgwICyAqIA1BAnRqIDsgEiAOQQJ0aigCALggPaIgPKAiOiA6IDtkG7Y4AgAgDkEBaiEOCyANIBhqIQ0gF0EBaiEXIA9BAWoiDyATRw0ACwsgGUEBaiIZICFHDQALDAELIBkgIU4NACAQKAIQIQ8DQCAZIC9sIAxqIhcgGGwgHWohDQJAIDVFBEAgEyAMIg5MDQEDQCAPIBdBA3VqLQAAIBdBB3F0QYABcQRAICogDUECdGogOyASKAIAuCA9oiA8oCI6IDogO2QbtjgCACASQQRqIRILIA0gGGohDSAXQQFqIRcgDkEBaiIOIBNHDQALDAELIBMgDCIOTA0AA0AgDyAXQQN1ai0AACAXQQdxdEGAAXEEQCAqIA1BAnRqIhUgOyASKAIAuCA9oiA8oCAVQQRrKgIAu6AiOiA6IDtkG7Y4AgAgEkEEaiESCyANIBhqIQ0gF0EBaiEXIA5BAWoiDiATRw0ACwsgGUEBaiIZICFHDQALCyAsIBooAgw2AgAgGigCCCEjCyAtICM2AgBBASESCyAaQRBqJAAgEkUNBSAdQQFqIg4gIkcNAAsLIB9BAWoiHyA0Rw0ACwsgIEEBaiIgIClIIR4gICApRw0ACwsgHkUhDiArKAIAIg1FDQAgKyANNgIEIA0QBgsgK0EQaiQAIA5BAXENAQwCCyAQICwgLSAqECtFDQELQQEhFAsgNkEQaiQAIBRFDQICQCAEQQJIDQAgCCgCiAJFDQAgCiAuaiAILQDUAiINQQBHOgAAIAsgLkEDdGogCCsDgAM5AwAgDUUNAEEAIShBACENAkAgJiIORSAIKAK8AiIqQQBMciAIKAK4AiItQQBMciAIKALAAiIlQQBMciImDQAgCCsDgAO2Ij8gCCsD+AK2Ij5bDQAgCCgCCCAqRiAIKAIMIC1GcSEUICVBfnEhHiAlQQFxIR0gJSAqbCEPA0AgDiAPIChsQQJ0aiEsIAgoAgQhFUEAIRlBACEpIA0hDANAAkAgFARAIBUgDEEDdWotAAAgDEEHcXRBgAFxRQ0BC0EAISJBACEgICVBAUcEQANAID4gLCAiIClqQQJ0aiIWKgIAWwRAIBYgPzgCAAsgPiAsICJBAXIgKWpBAnRqIhYqAgBbBEAgFiA/OAIACyAiQQJqISIgIEECaiIgIB5HDQALCyAdRQ0AICwgIiApakECdGoiFioCACA+XA0AIBYgPzgCAAsgJSApaiEpIAxBAWohDCAZQQFqIhkgKkcNAAsgDSAqaiENIChBAWoiKCAtRw0ACwsgJg0DCyA5DQAgCCADIDdqEBtFDQILIC5BAWoiLiAHSCEwIAcgLkcNAAsLIAhB8A42AgAgCBAQIBAQERogMEEBcUUNAQwCC0EAEAwhFUEBEAwhFiAIIAA2AugBIAhBEGoQFiEQAkAgB0EATA0AIAUgBmwiD0F+cSEOIA9BAXEhDCAJRSINIA9FciEKQQEhMEEAIQsDQCABIBYgFSALG0kEQEEDISQMAgtBASEkIBAgCEHoAWpBACALQQBHEBVFDQEgECgCCCAFRw0BIBAoAgwgBkcNAQJAAkAgCkUEQCAJIAsgD2wiBEECdGohLiAQKAIQIQAgAyAEakEAIAIgC0obIgQNAUEAIRcgD0EATA0CA0ACQCAAKgIAQwAAAABeBEAgLiAAKgIEOAIADAELIAtFDQYLIC5BBGohLiAAQQhqIQAgF0EBaiIXIA9HDQALDAILIA0gMHIhMAwDCyAEQQAgDxAHIQQgD0EATA0AQQAhJEEAIRcgD0EBRwRAA0AgACoCAEMAAAAAXgRAIC4gACoCBDgCACAEICRqQQE6AAALIAAqAghDAAAAAF4EQCAuIAAqAgw4AgQgBCAkQQFyakEBOgAACyAkQQJqISQgLkEIaiEuIABBEGohACAXQQJqIhcgDkcNAAsLIAxFDQAgACoCAEMAAAAAXkUNACAuIAAqAgQ4AgAgBCAkakEBOgAACyALQQFqIgsgB0ghMCAHIAtHDQALCyAQQYANNgIAIBAoAkgiAARAIBAgADYCTCAAEAYLIBBB/A02AgAgECgCEBAGIDBBAXENAQtBACEkCwwCCyMAQZADayISJAACQCABRQ0AIABFDQAgCUUNACAEQQBMDQAgBUEATA0AIAZBAEwNACAHQQBMDQAgAiAHRyACQQJPcQ0AQQAgAkEASiADGw0AIBIgADYCjAMgEkEAOgCvAgJAAkAgACABIBJBsAJqIBJBrwJqEA1FDQAgEigCsAJBAEwNACAAIAEgEkHoAWpBAEEAQQAQFCIkDQJBAiEkIBIoAoQCIAJKDQIgEigC/AEgB0gNAgJAIARBAkgNACASKAKIAkUNAEEFISQgCkUNAyALRQ0DIApBACAHEAcaIAtBACAHQQN0EAcaCyASIAE2AuQBIBJBEGoQGCEPIBJBADYCDCASQgA3AgQgEkHwDjYCAEEBISQCQCAHQQBMDQAgBSAGbCEyQQEhMCAEQQJIITgDQAJAIBIoAowDIgggAGsgAU8NACAIIBIoAuQBIBJBsAJqIBJBrwJqEA1FDQAgEigCwAIgBEcNAiASKAK8AiAFRw0CIBIoArgCIAZHDQIgASASKALMAiASKAKMAyAAa2pJBEBBAyEkDAMLQQAhDSACIC5MIjlFBEAgEiAFIAYQE0UNAyASKAIEIQ0LIBJB5AFqISYgCSAuIDJsIjcgBGxBA3RqIhQhFkEAISdBACEbQQAhK0EAIR5BACEqQQAhHSMAQRBrIjYkAAJAIBJBjANqIi1FDQAgFkUNACAmKAIAIQwgLSgCACEIIC0gJiAPQSBqEBdFDQAgDCAPKAI8Ig5JDQAgDygCIEEDTgRAIA5BDkgNASAIQQ5qIA5BDmsQHCAPKAIkRw0BCyAPIC0gJhAaRQ0AIA0EQCANIA8oAhAgDygCGCAPKAIUbEEHakEDdRAIGgsgFkEAIA8oAjAgDygCLCAPKAIobGxBA3QQByEsAkAgDygCNEUNACAPKwNYIA8rA2BhBEAgDyAsEDghHgwCCwJAIA8oAiBBBEgNACAPIC0gJhBHRQ0CIDZBADoADyAPIDZBD2oQHUUNAiA2LQAPRQ0AIA8gLBA4IR4MAgsgJigCACIORQ0BIC0oAgAiFi0AACEIIC0gFkEBajYCACAmIA5BAWsiDTYCACAIRQRAIA8rA1AhOiAPKAJIIQwCQAJAAkAgDygCICIIQQJIDQAgDEEBSw0AIDpEAAAAAAAA4D9hDQELIAhBBkgNASAMQX5xQQZHDQEgOkQAAAAAAAAAAGINAQsgDUUNAyAWLQABIQwgLSAWQQJqNgIAICYgDkECazYCACAMQQNLDQMgDEEDRiAPKAIgIg1BBkhxDQMgDUEESCAMQQJPcQ0DIA8gDDYCpAEgDEUNACAPKwNQITogDygCSCEIAkAgDUECSA0AIAhBAUsNACA6RAAAAAAAAOA/Yg0AIAxBAUcEQCANQQRJDQUgDEECRw0FC0EAIQ1BACEMIwBBMGsiHyQAAkAgLUUNACAsRQ0AIC0oAgBFDQAgH0IANwIUIB9CADcCHCAfQgA3AgwgH0GAgAI2AgggH0EANgIsIB9CDDcCJAJAIB9BCGogLSAmIA8oAiAQJEUNACAfQQA2AgQgH0EIaiAfQQRqECNFDQAgDygCSEVBB3QhNSAPKAIwISEgDygCpAEhCCAtKAIAIQ4gJigCACIVAn8CQAJAAkAgDygCNCAPKAIsIiMgDygCKCIvbEYEQAJAAkAgCEEBaw4CAQAHCyAvQQBKDQIMBAsgIUEATA0DICEgI2whHEEgIB8oAgQiNGshKSAfKAIoISIgHygCLCEQIB8oAhghKCAvQQBMITMgFSEIIA4hFgNARAAAAAAAAAAAIT1BACEqIB0hDCAzRQRAA0ACQCAjQQBMDQBBACEeQQEhIANAIBZFICdBH0tyIRkCQAJAAkACQCAIQRBPBEBBACENIBkNDyAWKAIAICd0ICl2IRkgKCA0QSAgJ2tKBH8gFigCBEHAACAnIDRqa3YgGXIFIBkLQQJ0aiIlLgEAIhlBAE4EQCAlLgECIQ0gJyAZQf//A3FqIidBIEkNBQwECyAQRQ0PICIgJ2oiDUEgayANIA1BH0oiDRshJyAIQQRrIAggDRshCCAWIA1BAnRqIRYgECENA0AgFigCACAndCEZICdBAWoiJ0EgRgRAQQAhJyAWQQRqIRYgCEEEayEICyANQQxBCCAZQQBIG2ooAgAiDUUNAiANLgEEIhlBAEgNAAsgGUH//wNxIQ0MBAtBACENIBkgCEEESXINDiAWKAIAICd0ICl2IRkgKCA0QSAgJ2tKBH8gCEEISQ0PIBYoAgRBwAAgJyA0amt2IBlyBSAZC0ECdGoiJS4BACIZQQBOBEAgJS4BAiENICcgGUH//wNxaiInQSBPDQMMBAsgEEUNDiAIQQRrIAggIiAnaiIlQR9KIhkbIghBBEkNDiAlQSBrICUgGRshJyAWIBlBAnRqIRYgECENA0AgFigCACAndCEZICdBAWoiJ0EgRgRAQQAhJyAWQQRqIRYgCEEEayEICyANQQxBCCAZQQBIG2ooAgAiDUUNASANLgEEIhlBAE4NAiAIQQNLDQALCyAgRQ0EQQAhDQwNCyAZQf//A3EhDQwBCyAIQQRrIQggFkEEaiEWICdBIGshJwsgDSA1a7chOgJAIB4NACAqRQ0AICwgDCAca0EDdGorAwAhPQsgLCAMQQN0aiA9IDqgIj05AwAgDCAhaiEMIB5BAWoiHiAjSCEgIB4gI0cNAAsLICpBAWoiKiAvRw0ACwsgHUEBaiIdICFHDQALDAILAkACQCAIQQFrDgIBAAYLIC9BAEwNA0EgIB8oAgQiKWshIiAPKAIQITMgHygCKCEoIB8oAiwhECAfKAIYIRwgI0EATCElIBUhCCAOIRYDQCAlRQRAIAwgI2ohHUEAITEDQAJAIDMgDEEDdWotAAAgDEEHcXRBgAFxRQ0AQQEhIEEAIR4gIUEATA0AA0AgFkUgJ0EfS3IhKgJAAkACQAJAIAhBEE8EQEEAIQ0gKg0PIBYoAgAgJ3QgInYhKiAcIClBICAna0oEfyAWKAIEQcAAICcgKWprdiAqcgUgKgtBAnRqIhkuAQAiKkEATgRAIBkuAQIhDSAnICpB//8DcWoiJ0EgSQ0FDAQLIBBFDQ8gJyAoaiINQSBrIA0gDUEfSiINGyEnIAhBBGsgCCANGyEIIBYgDUECdGohFiAQIQ0DQCAWKAIAICd0ISogJ0EBaiInQSBGBEBBACEnIBZBBGohFiAIQQRrIQgLIA1BDEEIICpBAEgbaigCACINRQ0CIA0uAQQiKkEASA0ACyAqQf//A3EhDQwEC0EAIQ0gKiAIQQRJcg0OIBYoAgAgJ3QgInYhKiAcIClBICAna0oEfyAIQQhJDQ8gFigCBEHAACAnIClqa3YgKnIFICoLQQJ0aiIZLgEAIipBAE4EQCAZLgECIQ0gJyAqQf//A3FqIidBIE8NAwwECyAQRQ0OIAhBBGsgCCAnIChqIhlBH0oiKhsiCEEESQ0OIBlBIGsgGSAqGyEnIBYgKkECdGohFiAQIQ0DQCAWKAIAICd0ISogJ0EBaiInQSBGBEBBACEnIBZBBGohFiAIQQRrIQgLIA1BDEEIICpBAEgbaigCACINRQ0BIA0uAQQiKkEATg0CIAhBA0sNAAsLICBFDQRBACENDA0LICpB//8DcSENDAELIAhBBGshCCAWQQRqIRYgJ0EgayEnCyAsIB4gK2pBA3RqIA0gNWu3OQMAIB5BAWoiHiAhSCEgIB4gIUcNAAsLICEgK2ohKyAMQQFqIQwgMUEBaiIxICNHDQALIB0hDAsgG0EBaiIbIC9HDQALDAILICFBAEwNAiAhICNsITNBICAfKAIEIjRrISIgHygCKCEoIB8oAiwhCCAfKAIYIRwgL0EATCElIBUhDCAOIRYDQCAlRQRAIA8oAhAhKUQAAAAAAAAAACE9QQAhGyAdISpBACEeA0ACQCAjQQBMDQAgHiAjaiEQQQAhK0EBITEDQCApIB5BA3VqLQAAIB5BB3F0QYABcQRAIBZFICdBH0tyISACQAJAAkACQCAMQRBPBEBBACENICANDyAWKAIAICd0ICJ2ISAgHCA0QSAgJ2tKBH8gFigCBEHAACAnIDRqa3YgIHIFICALQQJ0aiIZLgEAIiBBAE4EQCAZLgECIQ0gJyAgQf//A3FqIidBIEkNBQwECyAIRQ0PICcgKGoiDUEgayANIA1BH0oiDRshJyAMQQRrIAwgDRshDCAWIA1BAnRqIRYgCCENA0AgFigCACAndCEgICdBAWoiJ0EgRgRAQQAhJyAWQQRqIRYgDEEEayEMCyANQQxBCCAgQQBIG2ooAgAiDUUNAiANLgEEIiBBAEgNAAsgIEH//wNxIQ0MBAtBACENICAgDEEESXINDiAWKAIAICd0ICJ2ISAgHCA0QSAgJ2tKBH8gDEEISQ0PIBYoAgRBwAAgJyA0amt2ICByBSAgC0ECdGoiGS4BACIgQQBOBEAgGS4BAiENICcgIEH//wNxaiInQSBPDQMMBAsgCEUNDiAMQQRrIAwgJyAoaiIZQR9KIiAbIgxBBEkNDiAZQSBrIBkgIBshJyAWICBBAnRqIRYgCCENA0AgFigCACAndCEgICdBAWoiJ0EgRgRAQQAhJyAWQQRqIRYgDEEEayEMCyANQQxBCCAgQQBIG2ooAgAiDUUNASANLgEEIiBBAE4NAiAMQQNLDQALCyAxQQFxRQ0FQQAhDQwNCyAgQf//A3EhDQwBCyAMQQRrIQwgFkEEaiEWICdBIGshJwsgDSA1a7chOgJAICsEQCApIB5BAWsiDUEDdWotAAAgDUEHcXRBgAFxDQELIBtFDQAgKSAeICNrIg1BA3VqLQAAIA1BB3F0QYABcUUNACAsICogM2tBA3RqKwMAIT0LICwgKkEDdGogPSA6oCI9OQMACyAhICpqISogHkEBaiEeICtBAWoiKyAjSCExICMgK0cNAAsgECEeCyAbQQFqIhsgL0cNAAsLIB1BAWoiHSAhRw0ACwwBC0EgIB8oAgQiImshKCAfKAIoIRwgHygCLCEQIB8oAhghMyAjQQBMISUgFSEIIA4hFgNAQQAhGyAlRQRAA0BBASEqQQAhHgJAICFBAEwNAANAIBZFICdBH0tyISACQAJAAkACQCAIQRBPBEBBACENICANDSAWKAIAICd0ICh2ISAgMyAiQSAgJ2tKBH8gFigCBEHAACAiICdqa3YgIHIFICALQQJ0aiIZLgEAIiBBAE4EQCAZLgECIQ0gJyAgQf//A3FqIidBIEkNBQwECyAQRQ0NIBwgJ2oiDUEgayANIA1BH0oiDRshJyAIQQRrIAggDRshCCAWIA1BAnRqIRYgECENA0AgFigCACAndCEgICdBAWoiJ0EgRgRAQQAhJyAWQQRqIRYgCEEEayEICyANQQxBCCAgQQBIG2ooAgAiDUUNAiANLgEEIiBBAEgNAAsgIEH//wNxIQ0MBAtBACENICAgCEEESXINDCAWKAIAICd0ICh2ISAgMyAiQSAgJ2tKBH8gCEEISQ0NIBYoAgRBwAAgIiAnamt2ICByBSAgC0ECdGoiGS4BACIgQQBOBEAgGS4BAiENICcgIEH//wNxaiInQSBPDQMMBAsgEEUNDCAIQQRrIAggHCAnaiIZQR9KIiAbIghBBEkNDCAZQSBrIBkgIBshJyAWICBBAnRqIRYgECENA0AgFigCACAndCEgICdBAWoiJ0EgRgRAQQAhJyAWQQRqIRYgCEEEayEICyANQQxBCCAgQQBIG2ooAgAiDUUNASANLgEEIiBBAE4NAiAIQQNLDQALCyAqQQFxRQ0EQQAhDQwLCyAgQf//A3EhDQwBCyAIQQRrIQggFkEEaiEWICdBIGshJwsgLCAMIB5qQQN0aiANIDVrtzkDACAeQQFqIh4gIUghKiAeICFHDQALCyAMICFqIQwgG0EBaiIbICNHDQALCyAdQQFqIh0gL0cNAAsLICdBAEpBAnQMAQsgDiEWQQALIBYgDmtqQQRqQXxxIghPBEAgLSAIIA5qNgIAICYgFSAIazYCAAsgCCAVTSENCyAfQQhqECIgHygCGCIIBEAgHyAINgIcIAgQBgsgHygCDCIIRQ0AIB8gCDYCECAIEAYLIB9BMGokACANIR4MBAsgDUEGSA0DIAhBfnFBBkcNAyA6RAAAAAAAAAAAYg0DIAxBA0cNAyAtICYgLCAIQQdGIA8oAiwgDygCKCAPKAIwEB4hHgwDC0EAIQwjAEEQayIhJAACQCAtRQ0AICxFDQAgLSgCAEUNACAhQQA2AgggIUIANwMAIA8oAjgiL0EgSg0AIC9BAWsiCCAPKAIsaiAvbSE1AkAgCCAPKAIoaiAvbSI0QQBMDQAgDygCMCEoIDVBAWshMyA0QQFrISVBASEdA0AgNUEASgRAIA8oAiggKiAvbCIOayAvICUgKkYbIA5qIRpBACEjA0AgKEEASgRAIA8oAiwgIyAvbCINayAvICMgM0YbIA1qIRhBACEMA0AgDiEgIAwhEEEAIRFEAAAAAAAAAAAhPCMAQRBrIhMkAAJAICYoAgAiCEUNACAPKAIwIRcgDygCLCErIBMgLSgCACIiQQFqIhY2AgwgIi0AACEcIBMgCEEBayIfNgIIIBxBAnYgDUEDdnNBDkEPIA8oAiAiGUEESiIIG3ENACAIIBxBBHFBAnZxIjEgEEVxDQACQAJAAkAgHEEDcSIVQQNGDQACQAJAIBVBAWsOAgIAAQsgGiAgSgRAIA8oAhAhDANAIA0gGEgEQCAgICtsIA1qIhEgF2wgEGohGyANIQgDQCAMIBFBA3VqLQAAIBFBB3F0QYABcQRAICwgG0EDdGogMQR8IBtBA3QgLGpBCGsrAwAFRAAAAAAAAAAACzkDAAsgFyAbaiEbIBFBAWohESAIQQFqIgggGEcNAAsLICBBAWoiICAaRw0ACwsgLSAWNgIADAMLIDENA0EAIRUgGiAgSgRAIA8oAhAhGSAWIQwDQCANIBhIBEAgICArbCANaiIRIBdsIBBqIRsgDSEIA0AgGSARQQN1ai0AACARQQdxdEGAAXEEQCAfQQhJBEBBACERDAkLICwgG0EDdGogDCsDADkDACATIB9BCGsiHzYCCCAVQQFqIRUgDEEIaiEMCyAXIBtqIRsgEUEBaiERIAhBAWoiCCAYRw0ACwsgIEEBaiIgIBpHDQALCyATIBYgFUEDdGo2AgwMAQsgHEEGdiEMAkACQAJAAkACQAJAAkACQAJAAkBBBCAPKAJIIicgJ0EGSBsgJyAxGyIIQQJrDgYDAAMAAQIECyAIIAxBAXRrIghBCCAIQQhJGyEnDAMLQQYhJyAcQcAASQ0EQQJBASAMQQFGGyEnDAMLIBxBwABJDQRBCCAMQQF0ayEnDAILIAggDGsiCEEIIAhBCEkbIScLICdBCEYNBwtBASEIQQAhDAJAICcOCAMDAAABAQECBAtBAiEIDAILQQQhCAwBC0EIIQhBByEnCyAfIAgiDEkNAwsCQAJAAkACQAJAAkACQAJAAkAgJw4IAAECAwQFBgcICyAiLAABIQggEyAiQQJqNgIMIAi3ITwMBwsgIi0AASEIIBMgIkECajYCDCAIuCE8DAYLICIuAAEhCCATICJBA2o2AgwgCLchPAwFCyAiLwABIQggEyAiQQNqNgIMIAi4ITwMBAsgIigAASEIIBMgIkEFajYCDCAItyE8DAMLICIoAAEhCCATICJBBWo2AgwgCLghPAwCCyAiKgABIT4gEyAiQQVqNgIMID67ITwMAQsgIisAASE8IBMgIkEJajYCDAsgEyAfIAxrNgIIIA8oArQBIBBBA3RqIA9B4ABqIgggF0EBShsgCCAZQQNKGysDACE7IBVBA0YEQCAaICBMDQEgDUEBaiEZIBggDWtBAXEhFSAPKAIQISJBACAYayANQX9zRiEWA0AgICArbCANaiIRIBdsIBBqIRsCQCAxRQRAIA0gGE4NASAVBH8gIiARQQN1ai0AACARQQdxdEGAAXEEQCAsIBtBA3RqIDw5AwALIBcgG2ohGyARQQFqIREgGQUgDQshCCAWDQEDQCAiIBFBA3VqLQAAIBFBB3F0QYABcQRAICwgG0EDdGogPDkDAAsgFyAbaiEcICIgEUEBaiIMQQN1ai0AACAMQQdxdEGAAXEEQCAsIBxBA3RqIDw5AwALIBcgHGohGyARQQJqIREgCEECaiIIIBhHDQALDAELIBggDSIITA0AA0AgIiARQQN1ai0AACARQQdxdEGAAXEEQCAsIBtBA3RqIgwgOyA8IAxBCGsrAwCgIjogOiA7ZBs5AwALIBcgG2ohGyARQQFqIREgCEEBaiIIIBhHDQALCyAgQQFqIiAgGkcNAAsMAQsgD0H4AGogE0EMaiATQQhqICEgGCANayIMIBogIGtsIgggGRAZRQ0CIA8rA1AiOiA6oCE9IAggISgCBCAhKAIAIhFrQQJ1IhlGBEAgGiAgTA0BIA0gEGogICArbGpBA3RBCGshGSANQQFqISkgDEEBcSEiICtBA3QhFSANQX9zIBhqIRxBACEfA0AgICArbCANaiAXbCAQaiEbAkAgMUUEQCANIBhODQEgIgR/ICwgG0EDdGogOyARKAIAuCA9oiA8oCI6IDogO2QbOQMAIBcgG2ohGyARQQRqIREgKQUgDQshCCAcRQ0BA0AgLCAbQQN0aiA7IBEoAgC4ID2iIDygIjogOiA7ZBs5AwAgLCAXIBtqIgxBA3RqIDsgESgCBLggPaIgPKAiOiA6IDtkGzkDACARQQhqIREgDCAXaiEbIAhBAmoiCCAYRw0ACwwBCyANIBhODQAgF0EBRwRAICIEfyAsIBtBA3RqIgggOyAIQQhrKwMAIBEoAgC4ID2iIDygoCI6IDogO2QbOQMAIBcgG2ohGyARQQRqIREgKQUgDQshCCAcRQ0BA0AgLCAbQQN0aiIMIDsgDEEIaysDACARKAIAuCA9oiA8oKAiOiA6IDtkGzkDACAsIBcgG2oiFkEDdGoiDCA7IAxBCGsrAwAgESgCBLggPaIgPKCgIjogOiA7ZBs5AwAgEUEIaiERIBYgF2ohGyAIQQJqIgggGEcNAAsMAQsgLCAZIBUgH2xqaisDACE6ICIEfyAsIBtBA3RqIDsgOiARKAIAuCA9oiA8oKAiOiA6IDtkGyI6OQMAIBcgG2ohGyARQQRqIREgKQUgDQshCCAcRQ0AA0AgLCAbQQN0aiA7IDogESgCALggPaIgPKCgIjogOiA7ZBsiOjkDACAsIBcgG2oiDEEDdGogOyA6IBEoAgS4ID2iIDygoCI6IDogO2QbIjo5AwAgEUEIaiERIAwgF2ohGyAIQQJqIgggGEcNAAsLIB9BAWohHyAgQQFqIiAgGkcNAAsMAQsgDygCIEECTARAIBogIEwNASAPKAIQIRZBACEMA0AgDSAYSARAICAgK2wgDWoiGyAXbCAQaiEIIA0hFQNAIBYgG0EDdWotAAAgG0EHcXRBgAFxBEAgDCAZRgRAQQAhEQwICyAsIAhBA3RqIDsgESAMQQJ0aigCALggPaIgPKAiOiA6IDtkGzkDACAMQQFqIQwLIAggF2ohCCAbQQFqIRsgFUEBaiIVIBhHDQALCyAgQQFqIiAgGkcNAAsMAQsgGiAgTA0AIA8oAhAhFQNAICAgK2wgDWoiGyAXbCAQaiEIAkAgMUUEQCAYIA0iDEwNAQNAIBUgG0EDdWotAAAgG0EHcXRBgAFxBEAgLCAIQQN0aiA7IBEoAgC4ID2iIDygIjogOiA7ZBs5AwAgEUEEaiERCyAIIBdqIQggG0EBaiEbIAxBAWoiDCAYRw0ACwwBCyAYIA0iDEwNAANAIBUgG0EDdWotAAAgG0EHcXRBgAFxBEAgLCAIQQN0aiIWIDsgFkEIaysDACARKAIAuCA9oiA8oKAiOiA6IDtkGzkDACARQQRqIRELIAggF2ohCCAbQQFqIRsgDEEBaiIMIBhHDQALCyAgQQFqIiAgGkcNAAsLIC0gEygCDDYCACATKAIIIR8LICYgHzYCAEEBIRELIBNBEGokACARRQ0FIBBBAWoiDCAoRw0ACwsgI0EBaiIjIDVHDQALCyAqQQFqIiogNEghHSAqIDRHDQALCyAdRSEMICEoAgAiCEUNACAhIAg2AgQgCBAGCyAhQRBqJAAgDEEBcQ0BDAILQQAhDAJAIC1FDQAgLEUNACAtKAIAIghFDQAgDygCMCEgIA9BDGoQJiENICYoAgAiDiANICBBA3QiEGwiFk8EQCAPKAIoIidBAEwEfyAOBSAPKAIsISMDQEEAIRUgI0EASgRAA0AgDygCECAMQQN1ai0AACAMQQdxdEGAAXEEQCAsICpBA3RqIAggEBAIGiAPKAIsISMgCCAQaiEICyAgICpqISogDEEBaiEMIBVBAWoiFSAjSA0ACyAPKAIoIScLIB1BAWoiHSAnSA0ACyAmKAIACyENIC0gCDYCACAmIA0gFms2AgALIA4gFk8hDAsgDEUNAQtBASEeCyA2QRBqJAAgHkUNAgJAIDgNACASKAKIAkUNACAKIC5qIBItANQCIghBAEc6AAAgCyAuQQN0aiASKwOAAzkDACAIRQ0AQQAhKEEAIQ0CQCAUIghFIBIoArwCIixBAExyIBIoArgCIiZBAExyIBIoAsACIipBAExyIhQNACASKwOAAyI9IBIrA/gCIjphDQAgEigCCCAsRiASKAIMICZGcSEeICpBfnEhHSAqQQFxIRAgKiAsbCEVA0AgCCAVIChsQQN0aiEtIBIoAgQhFkEAIRlBACEpIA0hDANAAkAgHgRAIBYgDEEDdWotAAAgDEEHcXRBgAFxRQ0BC0EAISJBACEgICpBAUcEQANAIDogLSAiIClqQQN0aiIOKwMAYQRAIA4gPTkDAAsgOiAtICJBAXIgKWpBA3RqIg4rAwBhBEAgDiA9OQMACyAiQQJqISIgIEECaiIgIB1HDQALCyAQRQ0AIC0gIiApakEDdGoiDisDACA6Yg0AIA4gPTkDAAsgKSAqaiEpIAxBAWohDCAZQQFqIhkgLEcNAAsgDSAsaiENIChBAWoiKCAmRw0ACwsgFA0DCyA5DQAgEiADIDdqEBtFDQILIC5BAWoiLiAHSCEwIAcgLkcNAAsLIBJB8A42AgAgEhAQIA8QERogMEEBcUUNAQwCC0EAEAwhFkEBEAwhDiASIAA2AugBIBJBEGoQFiEPAkAgB0EATA0AIAUgBmwiFUF+cSEMIBVBAXEhDSAJRSIKIBVFciEIQQEhMEEAIQsDQCABIA4gFiALG0kEQEEDISQMAgtBASEkIA8gEkHoAWpBACALQQBHEBVFDQEgDygCCCAFRw0BIA8oAgwgBkcNAQJAAkAgCEUEQCAJIAsgFWwiBEEDdGohLiAPKAIQIQAgAyAEakEAIAIgC0obIgQNAUEAIRcgFUEATA0CA0ACQCAAKgIAQwAAAABeBEAgLiAAKgIEuzkDAAwBCyALRQ0GCyAuQQhqIS4gAEEIaiEAIBdBAWoiFyAVRw0ACwwCCyAKIDByITAMAwsgBEEAIBUQByEEIBVBAEwNAEEAISRBACEXIBVBAUcEQANAIAAqAgBDAAAAAF4EQCAuIAAqAgS7OQMAIAQgJGpBAToAAAsgACoCCEMAAAAAXgRAIC4gACoCDLs5AwggBCAkQQFyakEBOgAACyAkQQJqISQgLkEQaiEuIABBEGohACAXQQJqIhcgDEcNAAsLIA1FDQAgACoCAEMAAAAAXkUNACAuIAAqAgS7OQMAIAQgJGpBAToAAAsgC0EBaiILIAdIITAgByALRw0ACwsgD0GADTYCACAPKAJIIgAEQCAPIAA2AkwgABAGCyAPQfwNNgIAIA8oAhAQBiAwQQFxDQELQQAhJAsgEkGQA2okAAsgJA8LIAhBkANqJAAgJAuIBQELfyMAQRBrIgokAAJAIAFFDQAgASgCACIDLQAAIQQgASADQQFqIgM2AgACfwJAAkACQEEEIARBf3NBwAFxQQZ2IARBwABJGyIFQQFrDgQAAQQCBAsgAy0AAAwCCyADLwAADAELIAMoAAALIQcgASADIAVqNgIAIARBP3EiCUEfSw0AIApBADYCDCAHIAlsIgZBH2ohAwJAIAIoAgQgAigCACIFa0ECdSIEIAdJBEAgAiAHIARrIApBDGoQMAwBCyAEIAdNDQAgAiAFIAdBAnRqNgIEC0EBIQsgA0EgSQ0AIABBBGohBQJAIANBBXYiBCAAKAIIIAAoAgQiA2tBAnUiCEsEQCAFIAQgCGsQJSAFKAIAIQMMAQsgBCAITw0AIAAgAyAEQQJ0ajYCCAsgAyAEQQJ0QQRrIgBqQQA2AgAgAyABKAIAIAZBB2pBA3YiDBAIGiAFKAIAIQQCQCAGQR9xIgZFDQAgBkEHakEDdiIDQQRGDQAgACAEaiEIQQQgA2siA0EHcSINBEAgCCgCACEAQQAhBQNAIABBCHQhACADQQFrIQMgBUEBaiIFIA1HDQALCyAIIAZBGU8EfwNAIANBCGsiAw0AC0EABSAACzYCAAsgBwRAQSAgCWshBiACKAIAIQBBACEFQQAhAwNAIAQoAgAhAgJ/IAlBICADa0wEQCAAIAIgA3QgBnY2AgBBACADIAlqIgIgAkEgRiICGyEDIAQgAkECdGoMAQsgACACIAN0IAZ2IgI2AgAgACAEKAIEQSAgAyAGayIDa3YgAnI2AgAgBEEEagshBCAAQQRqIQAgBUEBaiIFIAdHDQALCyABIAEoAgAgDGo2AgALIApBEGokACALC+wGAgx/AXwjAEEQayILJAACQAJAAkAgAUUNAEEBIQIgACsDWCEOIAAoAighCSAAKAIsIQggACgCMCIGQQFGBEAgCUEATA0CIAhBAXEhAyAAKAIQIQRBACEAA0ACQCAIQQBMDQAgACECIAMEQCAEIABBA3VqLQAAIABBB3F0QYABcQRAIAEgAEEDdGogDjkDAAsgAEEBaiECCyAAIAhqIQAgCEEBRg0AA0AgBCACQQN1ai0AACACQQdxdEGAAXEEQCABIAJBA3RqIA45AwALIAQgAkEBaiIGQQN1ai0AACAGQQdxdEGAAXEEQCABIAZBA3RqIA45AwALIAJBAmoiAiAARw0ACwtBASECIAVBAWoiBSAJRw0ACwwCCyALQQA2AgggC0IANwMAAkAgBkUNACAGQYCAgIACTw0DIAZBA3QiBRAJIgQhAiAGQQdxIgcEQCAEIQIDQCACIA45AwAgAkEIaiECIANBAWoiAyAHRw0ACwsgBkEBa0H/////AXFBB0kNACAEIAVqIQUDQCACIA45AzggAiAOOQMwIAIgDjkDKCACIA45AyAgAiAOOQMYIAIgDjkDECACIA45AwggAiAOOQMAIAJBQGsiAiAFRw0ACwsCQAJAIA4gACsDYGENACAAKAKsASAAKAKoASIFa0EDdSAGRw0BIAZBAEwNAEEAIQIgBkEBa0EDTwRAIAZBfHEhDEEAIQcDQCAEIAJBA3QiA2ogAyAFaisDADkDACAEIANBCHIiDWogBSANaisDADkDACAEIANBEHIiDWogBSANaisDADkDACAEIANBGHIiA2ogAyAFaisDADkDACACQQRqIQIgB0EEaiIHIAxHDQALCyAGQQNxIgNFDQADQCAEIAJBA3QiB2ogBSAHaisDADkDACACQQFqIQIgCkEBaiIKIANHDQALCyAJQQBKBEAgBkEDdCEMQQAhB0EAIQNBACEFA0AgCEEASgRAQQAhCiAFIQIDQCAAKAIQIAJBA3VqLQAAIAJBB3F0QYABcQRAIAEgA0EDdGogBCAMEAgaCyADIAZqIQMgAkEBaiECIApBAWoiCiAIRw0ACyAFIAhqIQULIAdBAWoiByAJRw0ACwsgBARAIAQQBgtBASECDAILIARFDQAgBBAGC0EAIQILIAtBEGokACACDwsQCgALjgcDC38BfQF8IwBBEGsiDCQAAkACQAJAIAFFDQBBASECIAAoAighCiAAKAIsIQcgACsDWCIOtiENIAAoAjAiBUEBRgRAIApBAEwNAiAHQQFxIQYgACgCECEDQQAhAANAAkAgB0EATA0AIAAhAiAGBEAgAyAAQQN1ai0AACAAQQdxdEGAAXEEQCABIABBAnRqIA04AgALIABBAWohAgsgACAHaiEAIAdBAUYNAANAIAMgAkEDdWotAAAgAkEHcXRBgAFxBEAgASACQQJ0aiANOAIACyADIAJBAWoiBUEDdWotAAAgBUEHcXRBgAFxBEAgASAFQQJ0aiANOAIACyACQQJqIgIgAEcNAAsLQQEhAiAEQQFqIgQgCkcNAAsMAgsgDEEANgIIIAxCADcDAAJAIAVFDQAgBUGAgICABE8NAyAFQQJ0IgQQCSIDIQIgBUEHcSIIBEAgAyECA0AgAiANOAIAIAJBBGohAiAGQQFqIgYgCEcNAAsLIAVBAWtB/////wNxQQdJDQAgAyAEaiEEA0AgAiANOAIcIAIgDTgCGCACIA04AhQgAiANOAIQIAIgDTgCDCACIA04AgggAiANOAIEIAIgDTgCACACQSBqIgIgBEcNAAsLAkACQCAOIAArA2BhDQAgACgCrAEgACgCqAEiBGtBA3UgBUcNASAFQQBMDQBBACEIQQAhAiAFQQFrQQNPBEAgBUF8cSELQQAhBgNAIAMgAkECdGogBCACQQN0aisDALY4AgAgAyACQQFyIglBAnRqIAQgCUEDdGorAwC2OAIAIAMgAkECciIJQQJ0aiAEIAlBA3RqKwMAtjgCACADIAJBA3IiCUECdGogBCAJQQN0aisDALY4AgAgAkEEaiECIAZBBGoiBiALRw0ACwsgBUEDcSIGRQ0AA0AgAyACQQJ0aiAEIAJBA3RqKwMAtjgCACACQQFqIQIgCEEBaiIIIAZHDQALCyAKQQBKBEAgBUECdCEJQQAhC0EAIQZBACEEA0AgB0EASgRAQQAhCCAEIQIDQCAAKAIQIAJBA3VqLQAAIAJBB3F0QYABcQRAIAEgBkECdGogAyAJEAgaCyAFIAZqIQYgAkEBaiECIAhBAWoiCCAHRw0ACyAEIAdqIQQLIAtBAWoiCyAKRw0ACwsgAwRAIAMQBgtBASECDAILIANFDQAgAxAGC0EAIQILIAxBEGokACACDwsQCgAL6QgCC38BfCMAQRBrIgwkAAJAAkACQCABRQ0AIAAoAjAiBkEBRyECIAAoAighCiAAKAIsIQkCfyAAKwNYIg1EAAAAAAAA8EFjIA1EAAAAAAAAAABmcQRAIA2rDAELQQALIQMgAkUEQEEBIQIgCkEATA0CIAlBAXEhByAAKAIQIQRBACEAA0ACQCAJQQBMDQAgACECIAcEQCAEIABBA3VqLQAAIABBB3F0QYABcQRAIAEgAEECdGogAzYCAAsgAEEBaiECCyAAIAlqIQAgCUEBRg0AA0AgBCACQQN1ai0AACACQQdxdEGAAXEEQCABIAJBAnRqIAM2AgALIAQgAkEBaiIGQQN1ai0AACAGQQdxdEGAAXEEQCABIAZBAnRqIAM2AgALIAJBAmoiAiAARw0ACwtBASECIAVBAWoiBSAKRw0ACwwCCyAMQQA2AgggDEIANwMAAkAgBkUNACAGQYCAgIAETw0DIAZBAnQiBRAJIgQhAiAGQQdxIggEQCAEIQIDQCACIAM2AgAgAkEEaiECIAdBAWoiByAIRw0ACwsgBkEBa0H/////A3FBB0kNACAEIAVqIQUDQCACIAM2AhwgAiADNgIYIAIgAzYCFCACIAM2AhAgAiADNgIMIAIgAzYCCCACIAM2AgQgAiADNgIAIAJBIGoiAiAFRw0ACwsCQAJAIA0gACsDYGENACAAKAKsASAAKAKoASIFa0EDdSAGRw0BIAZBAEwNAEEAIQIgBkEBa0EDTwRAIAZBfHEhB0EAIQMDQCAEIAJBAnRqAn8gBSACQQN0aisDACINRAAAAAAAAPBBYyANRAAAAAAAAAAAZnEEQCANqwwBC0EACzYCACAEIAJBAXIiCEECdGoCfyAFIAhBA3RqKwMAIg1EAAAAAAAA8EFjIA1EAAAAAAAAAABmcQRAIA2rDAELQQALNgIAIAQgAkECciIIQQJ0agJ/IAUgCEEDdGorAwAiDUQAAAAAAADwQWMgDUQAAAAAAAAAAGZxBEAgDasMAQtBAAs2AgAgBCACQQNyIghBAnRqAn8gBSAIQQN0aisDACINRAAAAAAAAPBBYyANRAAAAAAAAAAAZnEEQCANqwwBC0EACzYCACACQQRqIQIgA0EEaiIDIAdHDQALCyAGQQNxIgNFDQADQCAEIAJBAnRqAn8gBSACQQN0aisDACINRAAAAAAAAPBBYyANRAAAAAAAAAAAZnEEQCANqwwBC0EACzYCACACQQFqIQIgC0EBaiILIANHDQALCyAKQQBKBEAgBkECdCEIQQAhA0EAIQdBACEFA0AgCUEASgRAQQAhCyAFIQIDQCAAKAIQIAJBA3VqLQAAIAJBB3F0QYABcQRAIAEgB0ECdGogBCAIEAgaCyAGIAdqIQcgAkEBaiECIAtBAWoiCyAJRw0ACyAFIAlqIQULIANBAWoiAyAKRw0ACwsgBARAIAQQBgtBASECDAILIARFDQAgBBAGC0EAIQILIAxBEGokACACDwsQCgALzxsBHX8jAEEwayIKJAACQCABRQ0AIANFDQAgASgCAEUNACAKQgA3AhQgCkIANwIcIApCADcCDCAKQYCAAjYCCCAKQQA2AiwgCkIMNwIkAkAgCkEIaiABIAIgACgCIBAkRQ0AIApBADYCBCAKQQhqIApBBGoQI0UNACAAKAJIRUEHdCEeIAAoAjAhDSAAKAKkASEGIAEoAgAhGiACKAIAIhwCfwJAAkACQCAAKAI0IAAoAiwiDyAAKAIoIhhsRgRAAkACQCAGQQFrDgIBAAcLIBhBAEoNAgwECyANQQBMDQMgDSAPbCERQSAgCigCBCIQayESIAooAighFCAKKAIsIQwgCigCGCEWIBhBAEwhCCAcIQAgGiEGA0BBACEVIBchDkEAIRMgCEUEQANAAkAgD0EATA0AQQAhC0EBIRkDQCAGRSAEQR9LciEJAkACQAJAAkAgAEEQTwRAQQAhBSAJDQ8gBigCACAEdCASdiEJIBYgEEEgIARrSgR/IAYoAgRBwAAgBCAQamt2IAlyBSAJC0ECdGoiBy4BACIJQQBOBEAgBy4BAiEFIAQgCUH//wNxaiIEQSBJDQUMBAsgDEUNDyAEIBRqIgVBIGsgBSAFQR9KIgUbIQQgAEEEayAAIAUbIQAgBiAFQQJ0aiEGIAwhBQNAIAYoAgAgBHQhCSAEQQFqIgRBIEYEQCAGQQRqIQZBACEEIABBBGshAAsgBUEMQQggCUEASBtqKAIAIgVFDQIgBS4BBCIJQQBIDQALIAlB//8DcSEFDAQLQQAhBSAJIABBBElyDQ4gBigCACAEdCASdiEJIBYgEEEgIARrSgR/IABBCEkNDyAGKAIEQcAAIAQgEGprdiAJcgUgCQtBAnRqIgcuAQAiCUEATgRAIAcuAQIhBSAEIAlB//8DcWoiBEEgTw0DDAQLIAxFDQ4gAEEEayAAIAQgFGoiB0EfSiIJGyIAQQRJDQ4gB0EgayAHIAkbIQQgBiAJQQJ0aiEGIAwhBQNAIAYoAgAgBHQhCSAEQQFqIgRBIEYEQCAGQQRqIQZBACEEIABBBGshAAsgBUEMQQggCUEASBtqKAIAIgVFDQEgBS4BBCIJQQBODQIgAEEDSw0ACwsgGUEBcUUNBEEAIQUMDQsgCUH//wNxIQUMAQsgAEEEayEAIAZBBGohBiAEQSBrIQQLIAUgHmshBQJAIAsNACAVRQ0AIAMgDiARa0ECdGooAgAhEwsgAyAOQQJ0aiAFIBNqIhM2AgAgDSAOaiEOIAtBAWoiCyAPSCEZIAsgD0cNAAsLIBVBAWoiFSAYRw0ACwsgF0EBaiIXIA1HDQALDAILAkACQCAGQQFrDgIBAAYLIBhBAEwNA0EgIAooAgQiG2shECAAKAIQIRYgCigCKCESIAooAiwhDCAKKAIYIRQgD0EATCERIBwhACAaIQYDQCARRQRAIA4gD2ohF0EAIRkDQAJAIBYgDkEDdWotAAAgDkEHcXRBgAFxRQ0AQQEhFUEAIQsgDUEATA0AA0AgBkUgBEEfS3IhBwJAAkACQAJAIABBEE8EQEEAIQUgBw0PIAYoAgAgBHQgEHYhByAUIBtBICAEa0oEfyAGKAIEQcAAIAQgG2prdiAHcgUgBwtBAnRqIgguAQAiB0EATgRAIAguAQIhBSAEIAdB//8DcWoiBEEgSQ0FDAQLIAxFDQ8gBCASaiIFQSBrIAUgBUEfSiIFGyEEIABBBGsgACAFGyEAIAYgBUECdGohBiAMIQUDQCAGKAIAIAR0IQcgBEEBaiIEQSBGBEAgBkEEaiEGQQAhBCAAQQRrIQALIAVBDEEIIAdBAEgbaigCACIFRQ0CIAUuAQQiB0EASA0ACyAHQf//A3EhBQwEC0EAIQUgByAAQQRJcg0OIAYoAgAgBHQgEHYhByAUIBtBICAEa0oEfyAAQQhJDQ8gBigCBEHAACAEIBtqa3YgB3IFIAcLQQJ0aiIILgEAIgdBAE4EQCAILgECIQUgBCAHQf//A3FqIgRBIE8NAwwECyAMRQ0OIABBBGsgACAEIBJqIghBH0oiBxsiAEEESQ0OIAhBIGsgCCAHGyEEIAYgB0ECdGohBiAMIQUDQCAGKAIAIAR0IQcgBEEBaiIEQSBGBEAgBkEEaiEGQQAhBCAAQQRrIQALIAVBDEEIIAdBAEgbaigCACIFRQ0BIAUuAQQiB0EATg0CIABBA0sNAAsLIBVBAXFFDQRBACEFDA0LIAdB//8DcSEFDAELIABBBGshACAGQQRqIQYgBEEgayEECyADIAsgE2pBAnRqIAUgHms2AgAgC0EBaiILIA1IIRUgCyANRw0ACwsgDSATaiETIA5BAWohDiAZQQFqIhkgD0cNAAsgFyEOCyAJQQFqIgkgGEcNAAsMAgsgDUEATA0CIA0gD2whFEEgIAooAgQiH2shGyAKKAIoIRAgCigCLCEMIAooAhghEiAYQQBMIRYgHCEHIBohBgNAIBZFBEAgACgCECEgQQAhFSAXIQlBACELQQAhHQNAAkAgD0EATA0AIAsgD2ohDkEAIRNBASEZA0AgICALQQN1ai0AACALQQdxdEGAAXEEQCAGRSAEQR9LciEIAkACQAJAAkAgB0EQTwRAQQAhBSAIDQ8gBigCACAEdCAbdiEIIBIgH0EgIARrSgR/IAYoAgRBwAAgBCAfamt2IAhyBSAIC0ECdGoiES4BACIIQQBOBEAgES4BAiEFIAQgCEH//wNxaiIEQSBJDQUMBAsgDEUNDyAEIBBqIgVBIGsgBSAFQR9KIgUbIQQgB0EEayAHIAUbIQcgBiAFQQJ0aiEGIAwhBQNAIAYoAgAgBHQhCCAEQQFqIgRBIEYEQCAHQQRrIQdBACEEIAZBBGohBgsgBUEMQQggCEEASBtqKAIAIgVFDQIgBS4BBCIIQQBIDQALIAhB//8DcSEFDAQLQQAhBSAIIAdBBElyDQ4gBigCACAEdCAbdiEIIBIgH0EgIARrSgR/IAdBCEkNDyAGKAIEQcAAIAQgH2prdiAIcgUgCAtBAnRqIhEuAQAiCEEATgRAIBEuAQIhBSAEIAhB//8DcWoiBEEgTw0DDAQLIAxFDQ4gB0EEayAHIAQgEGoiEUEfSiIIGyIHQQRJDQ4gEUEgayARIAgbIQQgBiAIQQJ0aiEGIAwhBQNAIAYoAgAgBHQhCCAEQQFqIgRBIEYEQCAHQQRrIQdBACEEIAZBBGohBgsgBUEMQQggCEEASBtqKAIAIgVFDQEgBS4BBCIIQQBODQIgB0EDSw0ACwsgGUEBcUUNBUEAIQUMDQsgCEH//wNxIQUMAQsgB0EEayEHIAZBBGohBiAEQSBrIQQLIAUgHmshCAJAIBMEQCAgIAtBAWsiBUEDdWotAAAgBUEHcXRBgAFxDQELIBVFDQAgICALIA9rIgVBA3VqLQAAIAVBB3F0QYABcUUNACADIAkgFGtBAnRqKAIAIR0LIAMgCUECdGogCCAdaiIdNgIACyAJIA1qIQkgC0EBaiELIBNBAWoiEyAPSCEZIA8gE0cNAAsgDiELCyAVQQFqIhUgGEcNAAsLIBdBAWoiFyANRw0ACwwBC0EgIAooAgQiEGshEiAKKAIoIRQgCigCLCEMIAooAhghFiAPQQBMIREgHCEAIBohBgNAQQAhHSARRQRAA0BBASEJQQAhCwJAIA1BAEwNAANAIAZFIARBH0tyIQcCQAJAAkACQCAAQRBPBEBBACEFIAcNDSAGKAIAIAR0IBJ2IQcgFiAQQSAgBGtKBH8gBigCBEHAACAEIBBqa3YgB3IFIAcLQQJ0aiIILgEAIgdBAE4EQCAILgECIQUgBCAHQf//A3FqIgRBIEkNBQwECyAMRQ0NIAQgFGoiBUEgayAFIAVBH0oiBRshBCAAQQRrIAAgBRshACAGIAVBAnRqIQYgDCEFA0AgBigCACAEdCEHIARBAWoiBEEgRgRAIAZBBGohBkEAIQQgAEEEayEACyAFQQxBCCAHQQBIG2ooAgAiBUUNAiAFLgEEIgdBAEgNAAsgB0H//wNxIQUMBAtBACEFIAcgAEEESXINDCAGKAIAIAR0IBJ2IQcgFiAQQSAgBGtKBH8gAEEISQ0NIAYoAgRBwAAgBCAQamt2IAdyBSAHC0ECdGoiCC4BACIHQQBOBEAgCC4BAiEFIAQgB0H//wNxaiIEQSBPDQMMBAsgDEUNDCAAQQRrIAAgBCAUaiIIQR9KIgcbIgBBBEkNDCAIQSBrIAggBxshBCAGIAdBAnRqIQYgDCEFA0AgBigCACAEdCEHIARBAWoiBEEgRgRAIAZBBGohBkEAIQQgAEEEayEACyAFQQxBCCAHQQBIG2ooAgAiBUUNASAFLgEEIgdBAE4NAiAAQQNLDQALCyAJQQFxRQ0EQQAhBQwLCyAHQf//A3EhBQwBCyAAQQRrIQAgBkEEaiEGIARBIGshBAsgAyALIA5qQQJ0aiAFIB5rNgIAIAtBAWoiCyANSCEJIAsgDUcNAAsLIA0gDmohDiAdQQFqIh0gD0cNAAsLIBdBAWoiFyAYRw0ACwsgBEEASkECdAwBCyAaIQZBAAsgBiAaa2pBBGpBfHEiAE8EQCABIAAgGmo2AgAgAiAcIABrNgIACyAAIBxNIQULIApBCGoQIiAKKAIYIgAEQCAKIAA2AhwgABAGCyAKKAIMIgBFDQAgCiAANgIQIAAQBgsgCkEwaiQAIAULuQgCC38BfCMAQRBrIgwkAAJAAkACQCABRQ0AIAAoAjAiBkEBRyECIAAoAighCiAAKAIsIQkCfyAAKwNYIg2ZRAAAAAAAAOBBYwRAIA2qDAELQYCAgIB4CyEDIAJFBEBBASECIApBAEwNAiAJQQFxIQcgACgCECEEQQAhAANAAkAgCUEATA0AIAAhAiAHBEAgBCAAQQN1ai0AACAAQQdxdEGAAXEEQCABIABBAnRqIAM2AgALIABBAWohAgsgACAJaiEAIAlBAUYNAANAIAQgAkEDdWotAAAgAkEHcXRBgAFxBEAgASACQQJ0aiADNgIACyAEIAJBAWoiBkEDdWotAAAgBkEHcXRBgAFxBEAgASAGQQJ0aiADNgIACyACQQJqIgIgAEcNAAsLQQEhAiAFQQFqIgUgCkcNAAsMAgsgDEEANgIIIAxCADcDAAJAIAZFDQAgBkGAgICABE8NAyAGQQJ0IgUQCSIEIQIgBkEHcSIIBEAgBCECA0AgAiADNgIAIAJBBGohAiAHQQFqIgcgCEcNAAsLIAZBAWtB/////wNxQQdJDQAgBCAFaiEFA0AgAiADNgIcIAIgAzYCGCACIAM2AhQgAiADNgIQIAIgAzYCDCACIAM2AgggAiADNgIEIAIgAzYCACACQSBqIgIgBUcNAAsLAkACQCANIAArA2BhDQAgACgCrAEgACgCqAEiBWtBA3UgBkcNASAGQQBMDQBBACECIAZBAWtBA08EQCAGQXxxIQdBACEDA0AgBCACQQJ0agJ/IAUgAkEDdGorAwAiDZlEAAAAAAAA4EFjBEAgDaoMAQtBgICAgHgLNgIAIAQgAkEBciIIQQJ0agJ/IAUgCEEDdGorAwAiDZlEAAAAAAAA4EFjBEAgDaoMAQtBgICAgHgLNgIAIAQgAkECciIIQQJ0agJ/IAUgCEEDdGorAwAiDZlEAAAAAAAA4EFjBEAgDaoMAQtBgICAgHgLNgIAIAQgAkEDciIIQQJ0agJ/IAUgCEEDdGorAwAiDZlEAAAAAAAA4EFjBEAgDaoMAQtBgICAgHgLNgIAIAJBBGohAiADQQRqIgMgB0cNAAsLIAZBA3EiA0UNAANAIAQgAkECdGoCfyAFIAJBA3RqKwMAIg2ZRAAAAAAAAOBBYwRAIA2qDAELQYCAgIB4CzYCACACQQFqIQIgC0EBaiILIANHDQALCyAKQQBKBEAgBkECdCEIQQAhA0EAIQdBACEFA0AgCUEASgRAQQAhCyAFIQIDQCAAKAIQIAJBA3VqLQAAIAJBB3F0QYABcQRAIAEgB0ECdGogBCAIEAgaCyAGIAdqIQcgAkEBaiECIAtBAWoiCyAJRw0ACyAFIAlqIQULIANBAWoiAyAKRw0ACwsgBARAIAQQBgtBASECDAILIARFDQAgBBAGC0EAIQILIAxBEGokACACDwsQCgAL5QgCC38BfCMAQRBrIgwkAAJAAkACQCABRQ0AIAAoAjAiBkEBRyECIAAoAighCiAAKAIsIQkCfyAAKwNYIg1EAAAAAAAA8EFjIA1EAAAAAAAAAABmcQRAIA2rDAELQQALIQMgAkUEQEEBIQIgCkEATA0CIAlBAXEhByAAKAIQIQRBACEAA0ACQCAJQQBMDQAgACECIAcEQCAEIABBA3VqLQAAIABBB3F0QYABcQRAIAEgAEEBdGogAzsBAAsgAEEBaiECCyAAIAlqIQAgCUEBRg0AA0AgBCACQQN1ai0AACACQQdxdEGAAXEEQCABIAJBAXRqIAM7AQALIAQgAkEBaiIGQQN1ai0AACAGQQdxdEGAAXEEQCABIAZBAXRqIAM7AQALIAJBAmoiAiAARw0ACwtBASECIAVBAWoiBSAKRw0ACwwCCyAMQQA2AgggDEIANwMAAkAgBkUNACAGQQBIDQMgBkEBdCIFEAkiBCECIAZBB3EiCARAIAQhAgNAIAIgAzsBACACQQJqIQIgB0EBaiIHIAhHDQALCyAGQQFrQf////8HcUEHSQ0AIAQgBWohBQNAIAIgAzsBDiACIAM7AQwgAiADOwEKIAIgAzsBCCACIAM7AQYgAiADOwEEIAIgAzsBAiACIAM7AQAgAkEQaiICIAVHDQALCwJAAkAgDSAAKwNgYQ0AIAAoAqwBIAAoAqgBIgVrQQN1IAZHDQEgBkEATA0AQQAhAiAGQQFrQQNPBEAgBkF8cSEHQQAhAwNAIAQgAkEBdGoCfyAFIAJBA3RqKwMAIg1EAAAAAAAA8EFjIA1EAAAAAAAAAABmcQRAIA2rDAELQQALOwEAIAQgAkEBciIIQQF0agJ/IAUgCEEDdGorAwAiDUQAAAAAAADwQWMgDUQAAAAAAAAAAGZxBEAgDasMAQtBAAs7AQAgBCACQQJyIghBAXRqAn8gBSAIQQN0aisDACINRAAAAAAAAPBBYyANRAAAAAAAAAAAZnEEQCANqwwBC0EACzsBACAEIAJBA3IiCEEBdGoCfyAFIAhBA3RqKwMAIg1EAAAAAAAA8EFjIA1EAAAAAAAAAABmcQRAIA2rDAELQQALOwEAIAJBBGohAiADQQRqIgMgB0cNAAsLIAZBA3EiA0UNAANAIAQgAkEBdGoCfyAFIAJBA3RqKwMAIg1EAAAAAAAA8EFjIA1EAAAAAAAAAABmcQRAIA2rDAELQQALOwEAIAJBAWohAiALQQFqIgsgA0cNAAsLIApBAEoEQCAGQQF0IQhBACEDQQAhB0EAIQUDQCAJQQBKBEBBACELIAUhAgNAIAAoAhAgAkEDdWotAAAgAkEHcXRBgAFxBEAgASAHQQF0aiAEIAgQCBoLIAYgB2ohByACQQFqIQIgC0EBaiILIAlHDQALIAUgCWohBQsgA0EBaiIDIApHDQALCyAEBEAgBBAGC0EBIQIMAgsgBEUNACAEEAYLQQAhAgsgDEEQaiQAIAIPCxAKAAv1AQELfwJAIAFFDQAgA0UNACABKAIAIgVFDQAgACgCMCEIIABBDGoQJiEEIAIoAgAiCSAEIAhBAXQiCmwiC08EQCAAKAIoIgxBAEwEfyAJBSAAKAIsIQZBACEEA0BBACEOIAZBAEoEQANAIAAoAhAgBEEDdWotAAAgBEEHcXRBgAFxBEAgAyAHQQF0aiAFIAoQCBogBSAKaiEFIAAoAiwhBgsgByAIaiEHIARBAWohBCAOQQFqIg4gBkgNAAsgACgCKCEMCyANQQFqIg0gDEgNAAsgAigCAAshBCABIAU2AgAgAiAEIAtrNgIACyAJIAtPIQQLIAQL4xoBHX8jAEEwayILJAACQCABRQ0AIANFDQAgASgCAEUNACALQgA3AhQgC0IANwIcIAtCADcCDCALQYCAAjYCCCALQQA2AiwgC0IMNwIkAkAgC0EIaiABIAIgACgCIBAkRQ0AIAtBADYCBCALQQhqIAtBBGoQI0UNACAAKAJIRUEHdCEeIAAoAjAhDiAAKAKkASEFIAEoAgAhGyACKAIAIhwCfwJAAkACQAJAIAAoAjQgACgCLCIPIAAoAigiGGxGBEACQAJAIAVBAWsOAgEACAsgGEEASg0CDAULIA5BAEwNBCAOIA9sIRlBICALKAIEIhFrIRAgCygCKCETIAsoAiwhDSALKAIYIRUgGEEATCESIBwhACAbIQUDQEEAIRYgFyEJQQAhFCASRQRAA0ACQCAPQQBMDQBBACEMQQEhGgNAIAVFIARBH0tyIQgCQAJAAkAgAEEQTwRAQQAhBiAIDQ8gBSgCACAEdCAQdiEIIBUgEUEgIARrSgR/IAUoAgRBwAAgBCARamt2IAhyBSAIC0ECdGoiCi4BACIIQQBOBEAgCi8BAiEHIAQgCEH//wNxaiIEQSBJDQQMAwsgDUUNDyAEIBNqIgZBIGsgBiAGQR9KIgYbIQQgAEEEayAAIAYbIQAgBSAGQQJ0aiEFIA0hBgNAIAUoAgAgBHQhCCAEQQFqIgRBIEYEQCAFQQRqIQVBACEEIABBBGshAAsgBkEMQQggCEEASBtqKAIAIgZFDQIgBi4BBCIHQQBIDQALDAMLQQAhBiAIIABBBElyDQ4gBSgCACAEdCAQdiEIIBUgEUEgIARrSgR/IABBCEkNDyAFKAIEQcAAIAQgEWprdiAIcgUgCAtBAnRqIgouAQAiCEEATgRAIAovAQIhByAEIAhB//8DcWoiBEEgTw0CDAMLIA1FDQ4gAEEEayAAIAQgE2oiCkEfSiIIGyIAQQRJDQ4gCkEgayAKIAgbIQQgBSAIQQJ0aiEFIA0hBgNAIAUoAgAgBHQhCCAEQQFqIgRBIEYEQCAFQQRqIQVBACEEIABBBGshAAsgBkEMQQggCEEASBtqKAIAIgZFDQEgBi4BBCIHQQBODQMgAEEDSw0ACwsgGkEBcUUNAwwKCyAAQQRrIQAgBUEEaiEFIARBIGshBAsCQCAMDQAgFkUNACADIAkgGWtBAXRqLwEAIRQLIAMgCUEBdGogFCAHIB5raiIUOwEAIAkgDmohCSAMQQFqIgwgD0ghGiAMIA9HDQALCyAWQQFqIhYgGEcNAAsLIBdBAWoiFyAORw0ACwwCCwJAAkAgBUEBaw4CAQAHCyAYQQBMDQRBICALKAIEIhFrIRAgACgCECEZIAsoAighEyALKAIsIQ0gCygCGCEVIA9BAEwhEiAcIQAgGyEFA0AgEkUEQCAJIA9qIQhBACEaA0ACQCAZIAlBA3VqLQAAIAlBB3F0QYABcUUNAEEBIRZBACEMIA5BAEwNAANAIAVFIARBH0tyIQoCQAJAAkAgAEEQTwRAQQAhBiAKDQ8gBSgCACAEdCAQdiEKIBUgEUEgIARrSgR/IAUoAgRBwAAgBCARamt2IApyBSAKC0ECdGoiBy4BACIKQQBOBEAgBy8BAiEHIAQgCkH//wNxaiIEQSBJDQQMAwsgDUUNDyAEIBNqIgZBIGsgBiAGQR9KIgYbIQQgAEEEayAAIAYbIQAgBSAGQQJ0aiEFIA0hBgNAIAUoAgAgBHQhCiAEQQFqIgRBIEYEQCAFQQRqIQVBACEEIABBBGshAAsgBkEMQQggCkEASBtqKAIAIgZFDQIgBi4BBCIHQQBIDQALDAMLQQAhBiAKIABBBElyDQ4gBSgCACAEdCAQdiEKIBUgEUEgIARrSgR/IABBCEkNDyAFKAIEQcAAIAQgEWprdiAKcgUgCgtBAnRqIgcuAQAiCkEATgRAIAcvAQIhByAEIApB//8DcWoiBEEgTw0CDAMLIA1FDQ4gAEEEayAAIAQgE2oiB0EfSiIKGyIAQQRJDQ4gB0EgayAHIAobIQQgBSAKQQJ0aiEFIA0hBgNAIAUoAgAgBHQhCiAEQQFqIgRBIEYEQCAFQQRqIQVBACEEIABBBGshAAsgBkEMQQggCkEASBtqKAIAIgZFDQEgBi4BBCIHQQBODQMgAEEDSw0ACwsgFkEBcUUNAwwKCyAAQQRrIQAgBUEEaiEFIARBIGshBAsgAyAMIBRqQQF0aiAHIB5rOwEAIAxBAWoiDCAOSCEWIAwgDkcNAAsLIA4gFGohFCAJQQFqIQkgGkEBaiIaIA9HDQALIAghCQsgF0EBaiIXIBhHDQALDAILIA5BAEwNAyAOIA9sIRVBICALKAIEIh9rIREgCygCKCEQIAsoAiwhDSALKAIYIRMgGEEATCEZIBwhByAbIQUDQCAZRQRAIAAoAhAhIEEAIRYgFyEKQQAhDEEAIR0DQAJAIA9BAEwNACAMIA9qIQhBACEUQQEhGgNAICAgDEEDdWotAAAgDEEHcXRBgAFxBEAgBUUgBEEfS3IhCQJAAkACQCAHQRBPBEBBACEGIAkNDyAFKAIAIAR0IBF2IQkgEyAfQSAgBGtKBH8gBSgCBEHAACAEIB9qa3YgCXIFIAkLQQJ0aiIJLgEAIhJBAE4EQCAJLwECIQkgBCASQf//A3FqIgRBIEkNBAwDCyANRQ0PIAQgEGoiBkEgayAGIAZBH0oiBhshBCAHQQRrIAcgBhshByAFIAZBAnRqIQUgDSEGA0AgBSgCACAEdCEJIARBAWoiBEEgRgRAIAdBBGshB0EAIQQgBUEEaiEFCyAGQQxBCCAJQQBIG2ooAgAiBkUNAiAGLgEEIglBAEgNAAsMAwtBACEGIAkgB0EESXINDiAFKAIAIAR0IBF2IQkgEyAfQSAgBGtKBH8gB0EISQ0PIAUoAgRBwAAgBCAfamt2IAlyBSAJC0ECdGoiCS4BACISQQBOBEAgCS8BAiEJIAQgEkH//wNxaiIEQSBPDQIMAwsgDUUNDiAHQQRrIAcgBCAQaiISQR9KIgkbIgdBBEkNDiASQSBrIBIgCRshBCAFIAlBAnRqIQUgDSEGA0AgBSgCACAEdCEJIARBAWoiBEEgRgRAIAdBBGshB0EAIQQgBUEEaiEFCyAGQQxBCCAJQQBIG2ooAgAiBkUNASAGLgEEIglBAE4NAyAHQQNLDQALCyAaQQFxDQoMBAsgB0EEayEHIAVBBGohBSAEQSBrIQQLAkAgFARAICAgDEEBayIGQQN1ai0AACAGQQdxdEGAAXENAQsgFkUNACAgIAwgD2siBkEDdWotAAAgBkEHcXRBgAFxRQ0AIAMgCiAVa0EBdGovAQAhHQsgAyAKQQF0aiAdIAkgHmtqIh07AQALIAogDmohCiAMQQFqIQwgFEEBaiIUIA9IIRogDyAURw0ACyAIIQwLIBZBAWoiFiAYRw0ACwsgDiAXQQFqIhdHDQALDAELQSAgCygCBCIQayETIAsoAighFSALKAIsIQ0gCygCGCEZIA9BAEwhEiAcIQAgGyEFA0BBACEdIBJFBEADQEEBIQpBACEMAkAgDkEATA0AA0AgBUUgBEEfS3IhCAJAAkACQCAAQRBPBEBBACEGIAgNDSAFKAIAIAR0IBN2IQggGSAQQSAgBGtKBH8gBSgCBEHAACAEIBBqa3YgCHIFIAgLQQJ0aiIHLgEAIghBAE4EQCAHLwECIQcgBCAIQf//A3FqIgRBIEkNBAwDCyANRQ0NIAQgFWoiBkEgayAGIAZBH0oiBhshBCAAQQRrIAAgBhshACAFIAZBAnRqIQUgDSEGA0AgBSgCACAEdCEIIARBAWoiBEEgRgRAIAVBBGohBUEAIQQgAEEEayEACyAGQQxBCCAIQQBIG2ooAgAiBkUNAiAGLgEEIgdBAEgNAAsMAwtBACEGIAggAEEESXINDCAFKAIAIAR0IBN2IQggGSAQQSAgBGtKBH8gAEEISQ0NIAUoAgRBwAAgBCAQamt2IAhyBSAIC0ECdGoiBy4BACIIQQBOBEAgBy8BAiEHIAQgCEH//wNxaiIEQSBPDQIMAwsgDUUNDCAAQQRrIAAgBCAVaiIHQR9KIggbIgBBBEkNDCAHQSBrIAcgCBshBCAFIAhBAnRqIQUgDSEGA0AgBSgCACAEdCEIIARBAWoiBEEgRgRAIAVBBGohBUEAIQQgAEEEayEACyAGQQxBCCAIQQBIG2ooAgAiBkUNASAGLgEEIgdBAE4NAyAAQQNLDQALCyAKQQFxRQ0DDAgLIABBBGshACAFQQRqIQUgBEEgayEECyADIAkgDGpBAXRqIAcgHms7AQAgDEEBaiIMIA5IIQogDCAORw0ACwsgCSAOaiEJIB1BAWoiHSAPRw0ACwsgF0EBaiIXIBhHDQALCyAEQQBKQQJ0DAILQQAhBgwCCyAbIQVBAAsgBSAba2pBBGpBfHEiAE8EQCABIAAgG2o2AgAgAiAcIABrNgIACyAAIBxNIQYLIAtBCGoQIiALKAIYIgAEQCALIAA2AhwgABAGCyALKAIMIgBFDQAgCyAANgIQIAAQBgsgC0EwaiQAIAYL4QIBCH8CQCABQQJJDQAgAEUNACACRQ0AQQEhBCAALwAAIgZBgIACRg0AIAFBAmshB0EAIQQDQCAHQQMgBiAGQRB0IgVBH3UiAXMgAWtB//8DcSIBQQJqIAVBEHVBAEwiCBsiCkkgASAEaiIFIANLciILRQRAIABBAmohCQJAIAhFBEAgAUEBayEIQQAhBiAJIQAgAUEDcSIFBEADQCACIARqIAAtAAA6AAAgBEEBaiEEIABBAWohACABQQFrIQEgBkEBaiIGIAVHDQALCyAIQQNJDQEDQCACIARqIgUgAC0AADoAACAFIAAtAAE6AAEgBSAALQACOgACIAUgAC0AAzoAAyAEQQRqIQQgAEEEaiEAIAFBBGsiAQ0ACwwBCyAAQQNqIQAgBkH//wNxRQ0AIAIgBGogCS0AACABEAcaIAUhBAsgByAKayEHIAAvAAAiBkGAgAJHDQELCyALRSEECyAEC7UIAgt/AXwjAEEQayIMJAACQAJAAkAgAUUNACAAKAIwIgZBAUchAiAAKAIoIQogACgCLCEJAn8gACsDWCINmUQAAAAAAADgQWMEQCANqgwBC0GAgICAeAshAyACRQRAQQEhAiAKQQBMDQIgCUEBcSEHIAAoAhAhBEEAIQADQAJAIAlBAEwNACAAIQIgBwRAIAQgAEEDdWotAAAgAEEHcXRBgAFxBEAgASAAQQF0aiADOwEACyAAQQFqIQILIAAgCWohACAJQQFGDQADQCAEIAJBA3VqLQAAIAJBB3F0QYABcQRAIAEgAkEBdGogAzsBAAsgBCACQQFqIgZBA3VqLQAAIAZBB3F0QYABcQRAIAEgBkEBdGogAzsBAAsgAkECaiICIABHDQALC0EBIQIgBUEBaiIFIApHDQALDAILIAxBADYCCCAMQgA3AwACQCAGRQ0AIAZBAEgNAyAGQQF0IgUQCSIEIQIgBkEHcSIIBEAgBCECA0AgAiADOwEAIAJBAmohAiAHQQFqIgcgCEcNAAsLIAZBAWtB/////wdxQQdJDQAgBCAFaiEFA0AgAiADOwEOIAIgAzsBDCACIAM7AQogAiADOwEIIAIgAzsBBiACIAM7AQQgAiADOwECIAIgAzsBACACQRBqIgIgBUcNAAsLAkACQCANIAArA2BhDQAgACgCrAEgACgCqAEiBWtBA3UgBkcNASAGQQBMDQBBACECIAZBAWtBA08EQCAGQXxxIQdBACEDA0AgBCACQQF0agJ/IAUgAkEDdGorAwAiDZlEAAAAAAAA4EFjBEAgDaoMAQtBgICAgHgLOwEAIAQgAkEBciIIQQF0agJ/IAUgCEEDdGorAwAiDZlEAAAAAAAA4EFjBEAgDaoMAQtBgICAgHgLOwEAIAQgAkECciIIQQF0agJ/IAUgCEEDdGorAwAiDZlEAAAAAAAA4EFjBEAgDaoMAQtBgICAgHgLOwEAIAQgAkEDciIIQQF0agJ/IAUgCEEDdGorAwAiDZlEAAAAAAAA4EFjBEAgDaoMAQtBgICAgHgLOwEAIAJBBGohAiADQQRqIgMgB0cNAAsLIAZBA3EiA0UNAANAIAQgAkEBdGoCfyAFIAJBA3RqKwMAIg2ZRAAAAAAAAOBBYwRAIA2qDAELQYCAgIB4CzsBACACQQFqIQIgC0EBaiILIANHDQALCyAKQQBKBEAgBkEBdCEIQQAhA0EAIQdBACEFA0AgCUEASgRAQQAhCyAFIQIDQCAAKAIQIAJBA3VqLQAAIAJBB3F0QYABcQRAIAEgB0EBdGogBCAIEAgaCyAGIAdqIQcgAkEBaiECIAtBAWoiCyAJRw0ACyAFIAlqIQULIANBAWoiAyAKRw0ACwsgBARAIAQQBgtBASECDAILIARFDQAgBBAGC0EAIQILIAxBEGokACACDwsQCgALywYCCn8BfCMAQRBrIgUkAAJAAkACQCABRQ0AIAAoAjAiA0EBRyECIAAoAighCiAAKAIsIQgCfyAAKwNYIgxEAAAAAAAA8EFjIAxEAAAAAAAAAABmcQRAIAyrDAELQQALIQYgAkUEQEEBIQIgCkEATA0CIAhBAXEhCQNAAkAgCEEATA0AIAQhAiAJBEAgACgCECAEQQN1ai0AACAEQQdxdEGAAXEEQCABIARqIAY6AAALIARBAWohAgsgBCAIaiEEIAhBAUYNAANAIAAoAhAgAkEDdWotAAAgAkEHcXRBgAFxBEAgASACaiAGOgAACyAAKAIQIAJBAWoiA0EDdWotAAAgA0EHcXRBgAFxBEAgASADaiAGOgAACyACQQJqIgIgBEcNAAsLQQEhAiAHQQFqIgcgCkcNAAsMAgtBACECIAVBADYCCCAFQgA3AwAgAwRAIANBAEgNAyAFIAMQCSICNgIAIAUgAjYCBCACIAYgAxAHGgsCQAJAIAwgACsDYGENACAAKAKsASAAKAKoAWtBA3UgA0cNASADRQ0AQQAhAiADQQFHBEAgA0F+cSEEA0AgBSgCACACagJ/IAAoAqgBIAJBA3RqKwMAIgxEAAAAAAAA8EFjIAxEAAAAAAAAAABmcQRAIAyrDAELQQALOgAAIAJBAXIiByAFKAIAagJ/IAAoAqgBIAdBA3RqKwMAIgxEAAAAAAAA8EFjIAxEAAAAAAAAAABmcQRAIAyrDAELQQALOgAAIAJBAmohAiAJQQJqIgkgBEcNAAsLIANBAXFFDQAgBSgCACACagJ/IAAoAqgBIAJBA3RqKwMAIgxEAAAAAAAA8EFjIAxEAAAAAAAAAABmcQRAIAyrDAELQQALOgAACwJAIApBAEwEQCAFKAIAIQYMAQsgBSgCACEGQQAhCUEAIQcDQEEAIQQgCEEASgRAIAchAgNAIAAoAhAgAkEDdWotAAAgAkEHcXRBgAFxBEAgASAJaiAGIAMQCBoLIAMgCWohCSACQQFqIQIgBEEBaiIEIAhHDQALIAcgCGohBwsgC0EBaiILIApHDQALCyAGBEAgBhAGC0EBIQIMAgsgAkUNACACEAYLQQAhAgsgBUEQaiQAIAIPCxAKAAvtAQEKfwJAIAFFDQAgA0UNACABKAIAIgVFDQAgACgCMCEGIABBDGoQJiEEIAIoAgAiCSAEIAZsIgpPBEAgACgCKCILQQBMBH8gCQUgACgCLCEHQQAhBANAQQAhDSAHQQBKBEADQCAAKAIQIARBA3VqLQAAIARBB3F0QYABcQRAIAMgCGogBSAGEAgaIAUgBmohBSAAKAIsIQcLIAYgCGohCCAEQQFqIQQgDUEBaiINIAdIDQALIAAoAighCwsgDEEBaiIMIAtIDQALIAIoAgALIQQgASAFNgIAIAIgBCAKazYCAAsgCSAKTyEECyAEC9saARx/IwBBMGsiCiQAAkAgAUUNACADRQ0AIAEoAgBFDQAgCkIANwIUIApCADcCHCAKQgA3AgwgCkGAgAI2AgggCkEANgIsIApCDDcCJAJAIApBCGogASACIAAoAiAQJEUNACAKQQA2AgQgCkEIaiAKQQRqECNFDQAgACgCSEVBB3QhHCAAKAIwIQ4gACgCpAEhBSACKAIAIQYgASgCACEbAn8CQAJAAkACQCAAKAI0IAAoAiwiDyAAKAIoIhlsRgRAAkACQCAFQQFrDgIBAAgLIBlBAEoNAgwFCyAOQQBMDQQgDiAPbCEMQSAgCigCBCISayERIAooAighFSAKKAIsIQsgCigCGCEWIBlBAEwhEyAbIQUDQEEAIRcgECEJQQAhDSATRQRAA0ACQCAPQQBMDQBBACEIQQEhGANAIAVFIARBH0tyIQACQAJAAkAgBkEQTwRAQQAhByAADQ8gBSgCACAEdCARdiEAIBYgEkEgIARrSgR/IAUoAgRBwAAgBCASamt2IAByBSAAC0ECdGoiAC4BACIUQQBOBEAgAC8BAiEAIAQgFEH//wNxaiIEQSBJDQQMAwsgC0UNDyAEIBVqIgBBIGsgACAAQR9KIgAbIQQgBkEEayAGIAAbIQYgBSAAQQJ0aiEFIAshBwNAIAUoAgAgBHQhACAEQQFqIgRBIEYEQCAGQQRrIQZBACEEIAVBBGohBQsgB0EMQQggAEEASBtqKAIAIgdFDQIgBy4BBCIAQQBIDQALDAMLQQAhByAAIAZBBElyDQ4gBSgCACAEdCARdiEAIBYgEkEgIARrSgR/IAZBCEkNDyAFKAIEQcAAIAQgEmprdiAAcgUgAAtBAnRqIgAuAQAiFEEATgRAIAAvAQIhACAEIBRB//8DcWoiBEEgTw0CDAMLIAtFDQ4gBkEEayAGIAQgFWoiFEEfSiIAGyIGQQRJDQ4gFEEgayAUIAAbIQQgBSAAQQJ0aiEFIAshBwNAIAUoAgAgBHQhACAEQQFqIgRBIEYEQCAGQQRrIQZBACEEIAVBBGohBQsgB0EMQQggAEEASBtqKAIAIgdFDQEgBy4BBCIAQQBODQMgBkEDSw0ACwsgGEEBcUUNAwwKCyAGQQRrIQYgBUEEaiEFIARBIGshBAsgAEH//wNxIBxrIQACQCAIDQAgF0UNACADIAkgDGtqLQAAIQ0LIAMgCWogACANaiINOgAAIAkgDmohCSAIQQFqIgggD0ghGCAIIA9HDQALCyAXQQFqIhcgGUcNAAsLIBBBAWoiECAORw0ACwwCCwJAAkAgBUEBaw4CAQAHCyAZQQBMDQRBICAKKAIEIhJrIRcgCigCKCERIAooAiwhCyAKKAIYIRUgD0EATCEWIBshBQNAIBZFBEAgDSAPaiEUQQAhGgNAAkAgACgCECANQQN1ai0AACANQQdxdEGAAXFFDQBBASEYQQAhCSAOQQBMDQADQCAFRSAEQR9LciEIAkACQAJAIAZBEE8EQEEAIQcgCA0PIAUoAgAgBHQgF3YhCCAVIBJBICAEa0oEfyAFKAIEQcAAIAQgEmprdiAIcgUgCAtBAnRqIgguAQAiDEEATgRAIAgvAQIhCCAEIAxB//8DcWoiBEEgSQ0EDAMLIAtFDQ8gBCARaiIHQSBrIAcgB0EfSiIHGyEEIAZBBGsgBiAHGyEGIAUgB0ECdGohBSALIQcDQCAFKAIAIAR0IQggBEEBaiIEQSBGBEAgBkEEayEGQQAhBCAFQQRqIQULIAdBDEEIIAhBAEgbaigCACIHRQ0CIAcuAQQiCEEASA0ACwwDC0EAIQcgCCAGQQRJcg0OIAUoAgAgBHQgF3YhCCAVIBJBICAEa0oEfyAGQQhJDQ8gBSgCBEHAACAEIBJqa3YgCHIFIAgLQQJ0aiIILgEAIgxBAE4EQCAILwECIQggBCAMQf//A3FqIgRBIE8NAgwDCyALRQ0OIAZBBGsgBiAEIBFqIgxBH0oiCBsiBkEESQ0OIAxBIGsgDCAIGyEEIAUgCEECdGohBSALIQcDQCAFKAIAIAR0IQggBEEBaiIEQSBGBEAgBkEEayEGQQAhBCAFQQRqIQULIAdBDEEIIAhBAEgbaigCACIHRQ0BIAcuAQQiCEEATg0DIAZBA0sNAAsLIBhBAXFFDQMMCgsgBkEEayEGIAVBBGohBSAEQSBrIQQLIAMgCSATamogCCAcazoAACAJQQFqIgkgDkghGCAJIA5HDQALCyAOIBNqIRMgDUEBaiENIBpBAWoiGiAPRw0ACyAUIQ0LIBBBAWoiECAZRw0ACwwCCyAOQQBMDQMgDiAPbCEVQSAgCigCBCIdayEfIAooAighEiAKKAIsIQsgCigCGCEXIBlBAEwhFiAbIQUDQEEAIR4gECETQQAhCEEAIRggFkUEQANAAkAgD0EATA0AIAggD2ohFEEAIQ1BASEaA0AgACgCECIRIAhBA3VqLQAAIAhBB3F0QYABcQRAIAVFIARBH0tyIQkCQAJAAkAgBkEQTwRAQQAhByAJDQ8gBSgCACAEdCAfdiEJIBcgHUEgIARrSgR/IAUoAgRBwAAgBCAdamt2IAlyBSAJC0ECdGoiCS4BACIMQQBOBEAgCS8BAiEJIAQgDEH//wNxaiIEQSBJDQQMAwsgC0UNDyAEIBJqIgdBIGsgByAHQR9KIgcbIQQgBkEEayAGIAcbIQYgBSAHQQJ0aiEFIAshBwNAIAUoAgAgBHQhCSAEQQFqIgRBIEYEQCAGQQRrIQZBACEEIAVBBGohBQsgB0EMQQggCUEASBtqKAIAIgdFDQIgBy4BBCIJQQBIDQALDAMLQQAhByAJIAZBBElyDQ4gBSgCACAEdCAfdiEJIBcgHUEgIARrSgR/IAZBCEkNDyAFKAIEQcAAIAQgHWprdiAJcgUgCQtBAnRqIgkuAQAiDEEATgRAIAkvAQIhCSAEIAxB//8DcWoiBEEgTw0CDAMLIAtFDQ4gBkEEayAGIAQgEmoiDEEfSiIJGyIGQQRJDQ4gDEEgayAMIAkbIQQgBSAJQQJ0aiEFIAshBwNAIAUoAgAgBHQhCSAEQQFqIgRBIEYEQCAGQQRrIQZBACEEIAVBBGohBQsgB0EMQQggCUEASBtqKAIAIgdFDQEgBy4BBCIJQQBODQMgBkEDSw0ACwsgGkEBcQ0KDAQLIAZBBGshBiAFQQRqIQUgBEEgayEECyAJQf//A3EgHGshCQJAIA0EQCARIAhBAWsiB0EDdWotAAAgB0EHcXRBgAFxDQELIB5FDQAgESAIIA9rIgdBA3VqLQAAIAdBB3F0QYABcUUNACADIBMgFWtqLQAAIRgLIAMgE2ogCSAYaiIYOgAACyAOIBNqIRMgCEEBaiEIIA1BAWoiDSAPSCEaIA0gD0cNAAsgFCEICyAeQQFqIh4gGUcNAAsLIA4gEEEBaiIQRw0ACwwBC0EgIAooAgQiEWshFSAKKAIoIRYgCigCLCELIAooAhghDCAPQQBMIRQgGyEFA0BBACEaIBRFBEADQEEBIRNBACEIAkAgDkEATA0AA0AgBUUgBEEfS3IhAAJAAkACQCAGQRBPBEBBACEHIAANDSAFKAIAIAR0IBV2IQAgDCARQSAgBGtKBH8gBSgCBEHAACAEIBFqa3YgAHIFIAALQQJ0aiIALgEAIhBBAE4EQCAALwECIQAgBCAQQf//A3FqIgRBIEkNBAwDCyALRQ0NIAQgFmoiAEEgayAAIABBH0oiABshBCAGQQRrIAYgABshBiAFIABBAnRqIQUgCyEHA0AgBSgCACAEdCEAIARBAWoiBEEgRgRAIAZBBGshBkEAIQQgBUEEaiEFCyAHQQxBCCAAQQBIG2ooAgAiB0UNAiAHLgEEIgBBAEgNAAsMAwtBACEHIAAgBkEESXINDCAFKAIAIAR0IBV2IQAgDCARQSAgBGtKBH8gBkEISQ0NIAUoAgRBwAAgBCARamt2IAByBSAAC0ECdGoiAC4BACIQQQBOBEAgAC8BAiEAIAQgEEH//wNxaiIEQSBPDQIMAwsgC0UNDCAGQQRrIAYgBCAWaiIQQR9KIgAbIgZBBEkNDCAQQSBrIBAgABshBCAFIABBAnRqIQUgCyEHA0AgBSgCACAEdCEAIARBAWoiBEEgRgRAIAZBBGshBkEAIQQgBUEEaiEFCyAHQQxBCCAAQQBIG2ooAgAiB0UNASAHLgEEIgBBAE4NAyAGQQNLDQALCyATQQFxRQ0DDAgLIAZBBGshBiAFQQRqIQUgBEEgayEECyADIAggCWpqIAAgHGs6AAAgCEEBaiIIIA5IIRMgCCAORw0ACwsgCSAOaiEJIBpBAWoiGiAPRw0ACwsgDUEBaiINIBlHDQALCyAEQQBKQQJ0DAILQQAhBwwCCyAbIQVBAAshACACKAIAIgMgBSAbayAAakEEakF8cSIATwRAIAEgASgCACAAajYCACACIAMgAGs2AgALIAAgA00hBwsgCkEIahAiIAooAhgiAARAIAogADYCHCAAEAYLIAooAgwiAEUNACAKIAA2AhAgABAGCyAKQTBqJAAgBwurBgIKfwF8IwBBEGsiBSQAAkACQAJAIAFFDQAgACgCMCIDQQFHIQIgACgCKCEKIAAoAiwhCAJ/IAArA1giDJlEAAAAAAAA4EFjBEAgDKoMAQtBgICAgHgLIQYgAkUEQEEBIQIgCkEATA0CIAhBAXEhCQNAAkAgCEEATA0AIAQhAiAJBEAgACgCECAEQQN1ai0AACAEQQdxdEGAAXEEQCABIARqIAY6AAALIARBAWohAgsgBCAIaiEEIAhBAUYNAANAIAAoAhAgAkEDdWotAAAgAkEHcXRBgAFxBEAgASACaiAGOgAACyAAKAIQIAJBAWoiA0EDdWotAAAgA0EHcXRBgAFxBEAgASADaiAGOgAACyACQQJqIgIgBEcNAAsLQQEhAiAHQQFqIgcgCkcNAAsMAgtBACECIAVBADYCCCAFQgA3AwAgAwRAIANBAEgNAyAFIAMQCSICNgIAIAUgAjYCBCACIAYgAxAHGgsCQAJAIAwgACsDYGENACAAKAKsASAAKAKoAWtBA3UgA0cNASADRQ0AQQAhAiADQQFHBEAgA0F+cSEEA0AgBSgCACACagJ/IAAoAqgBIAJBA3RqKwMAIgyZRAAAAAAAAOBBYwRAIAyqDAELQYCAgIB4CzoAACACQQFyIgcgBSgCAGoCfyAAKAKoASAHQQN0aisDACIMmUQAAAAAAADgQWMEQCAMqgwBC0GAgICAeAs6AAAgAkECaiECIAlBAmoiCSAERw0ACwsgA0EBcUUNACAFKAIAIAJqAn8gACgCqAEgAkEDdGorAwAiDJlEAAAAAAAA4EFjBEAgDKoMAQtBgICAgHgLOgAACwJAIApBAEwEQCAFKAIAIQYMAQsgBSgCACEGQQAhCUEAIQcDQEEAIQQgCEEASgRAIAchAgNAIAAoAhAgAkEDdWotAAAgAkEHcXRBgAFxBEAgASAJaiAGIAMQCBoLIAMgCWohCSACQQFqIQIgBEEBaiIEIAhHDQALIAcgCGohBwsgC0EBaiILIApHDQALCyAGBEAgBhAGC0EBIQIMAgsgAkUNACACEAYLQQAhAgsgBUEQaiQAIAIPCxAKAAuxBgENfyMAQRBrIggkAAJAAkAgAUUNACABKAIARQ0AIABBqAFqIQYCQCAAKAIwIgMgACgCrAEgACgCqAEiBGtBA3UiBUsEQCAGIAMgBWsQDgwBCyADIAVPDQAgACAEIANBA3RqNgKsAQsgAEG0AWohDAJAAkAgACgCuAEgACgCtAEiBGtBA3UiBSADSQRAIAwgAyAFaxAOIAhBADYCCCAIQgA3AwAMAQsgAyAFSQRAIAAgBCADQQN0ajYCuAELQQAhBSAIQQA2AgggCEIANwMAIANFDQELIANBAEgNAiAIIAMQCSIFIANqIgA2AgggBUEAIAMQBxogCCAANgIECwJAAkACQCACKAIAIgAgA0kNACAFIAEoAgAiCSADEAghBCABIAMgCWoiDTYCACACIAAgA2siDjYCAAJAIANFDQAgBigCACEGQQAhCUEAIQAgA0EBa0EDTwRAIANBfHEhCwNAIAYgAEEDdGogACAEaiwAALc5AwAgBiAAQQFyIgpBA3RqIAQgCmosAAC3OQMAIAYgAEECciIKQQN0aiAEIApqLAAAtzkDACAGIABBA3IiCkEDdGogBCAKaiwAALc5AwAgAEEEaiEAIA9BBGoiDyALRw0ACwsgA0EDcSILRQ0AA0AgBiAAQQN0aiAAIARqLAAAtzkDACAAQQFqIQAgCUEBaiIJIAtHDQALCyADIA5LDQAgBCANIAMQCCEEIAEgAyANajYCACACIA4gA2s2AgAgAw0BQQEhBwsgBQ0BDAILIAwoAgAhAUEAIQlBACEAIANBAWtBA08EQCADQXxxIQZBACECA0AgASAAQQN0aiAAIARqLAAAtzkDACABIABBAXIiB0EDdGogBCAHaiwAALc5AwAgASAAQQJyIgdBA3RqIAQgB2osAAC3OQMAIAEgAEEDciIHQQN0aiAEIAdqLAAAtzkDACAAQQRqIQAgAkEEaiICIAZHDQALCyADQQNxIgJFBEBBASEHDAELA0AgASAAQQN0aiAAIARqLAAAtzkDAEEBIQcgAEEBaiEAIAlBAWoiCSACRw0ACwsgCCAFNgIEIAUQBgsgCEEQaiQAIAcPCxAKAAurBgEPfyMAQRBrIggkAAJAAkAgAUUNACABKAIARQ0AIABBqAFqIQUCQCAAKAIwIgMgACgCrAEgACgCqAEiB2tBA3UiBEsEQCAFIAMgBGsQDgwBCyADIARPDQAgACAHIANBA3RqNgKsAQsgAEG0AWohDgJAAkAgACgCuAEgACgCtAEiB2tBA3UiBCADSQRAIA4gAyAEaxAOIAhBADYCCCAIQgA3AwAMAQsgAyAESQRAIAAgByADQQN0ajYCuAELQQAhBCAIQQA2AgggCEIANwMAIAMNAEEAIQcMAQsgA0GAgICAAk8NAiAIIANBA3QiBBAJIgcgBGoiADYCCCAHQQAgBBAHGiAIIAA2AgQLAkACQAJAIAIoAgAiACAESQ0AIAcgASgCACIKIAQQCCEGIAEgBCAKaiIPNgIAIAIgACAEayIQNgIAAkAgA0UNACAFKAIAIQVBACEKQQAhACADQQFrQQNPBEAgA0F8cSERA0AgBSAAQQN0IglqIAYgCWorAwA5AwAgBSAJQQhyIgxqIAYgDGorAwA5AwAgBSAJQRByIgxqIAYgDGorAwA5AwAgBSAJQRhyIglqIAYgCWorAwA5AwAgAEEEaiEAIAtBBGoiCyARRw0ACwsgA0EDcSIJRQ0AA0AgBSAAQQN0IgtqIAYgC2orAwA5AwAgAEEBaiEAIApBAWoiCiAJRw0ACwsgBCAQSw0AIAYgDyAEEAghBiABIAQgD2o2AgAgAiAQIARrNgIAIAMNAUEBIQ0LIAcNAQwCCyAOKAIAIQFBACEKQQAhACADQQFrQQNPBEAgA0F8cSEEQQAhCwNAIAEgAEEDdCICaiACIAZqKwMAOQMAIAEgAkEIciIFaiAFIAZqKwMAOQMAIAEgAkEQciIFaiAFIAZqKwMAOQMAIAEgAkEYciICaiACIAZqKwMAOQMAIABBBGohACALQQRqIgsgBEcNAAsLIANBA3EiAkUEQEEBIQ0MAQsDQCABIABBA3QiA2ogAyAGaisDADkDAEEBIQ0gAEEBaiEAIApBAWoiCiACRw0ACwsgCCAHNgIEIAcQBgsgCEEQaiQAIA0PCxAKAAvdBgEOfyMAQRBrIgckAAJAAkAgAUUNACABKAIARQ0AIABBqAFqIQgCQCAAKAIwIgQgACgCrAEgACgCqAEiBmtBA3UiA0sEQCAIIAQgA2sQDgwBCyADIARNDQAgACAGIARBA3RqNgKsAQsgAEG0AWohDQJAAkAgACgCuAEgACgCtAEiBmtBA3UiAyAESQRAIA0gBCADaxAOIAdBADYCCCAHQgA3AwAMAQsgAyAESwRAIAAgBiAEQQN0ajYCuAELQQAhAyAHQQA2AgggB0IANwMAIAQNAEEAIQYMAQsgBEGAgICABE8NAiAHIARBAnQiAxAJIgYgA2oiADYCCCAGQQAgAxAHGiAHIAA2AgQLAkACQAJAIAIoAgAiACADSQ0AIAYgASgCACIJIAMQCCEFIAEgAyAJaiIONgIAIAIgACADayIPNgIAAkAgBEUNACAIKAIAIQhBACEJQQAhACAEQQFrQQNPBEAgBEF8cSEQA0AgCCAAQQN0aiAFIABBAnRqKgIAuzkDACAIIABBAXIiC0EDdGogBSALQQJ0aioCALs5AwAgCCAAQQJyIgtBA3RqIAUgC0ECdGoqAgC7OQMAIAggAEEDciILQQN0aiAFIAtBAnRqKgIAuzkDACAAQQRqIQAgCkEEaiIKIBBHDQALCyAEQQNxIgpFDQADQCAIIABBA3RqIAUgAEECdGoqAgC7OQMAIABBAWohACAJQQFqIgkgCkcNAAsLIAMgD0sNACAFIA4gAxAIIQUgASADIA5qNgIAIAIgDyADazYCACAEDQFBASEMCyAGDQEMAgsgDSgCACEBQQAhCUEAIQAgBEEBa0EDTwRAIARBfHEhAkEAIQoDQCABIABBA3RqIAUgAEECdGoqAgC7OQMAIAEgAEEBciIDQQN0aiAFIANBAnRqKgIAuzkDACABIABBAnIiA0EDdGogBSADQQJ0aioCALs5AwAgASAAQQNyIgNBA3RqIAUgA0ECdGoqAgC7OQMAIABBBGohACAKQQRqIgogAkcNAAsLIARBA3EiAkUEQEEBIQwMAQsDQCABIABBA3RqIAUgAEECdGoqAgC7OQMAQQEhDCAAQQFqIQAgCUEBaiIJIAJHDQALCyAHIAY2AgQgBhAGCyAHQRBqJAAgDA8LEAoAC90GAQ5/IwBBEGsiByQAAkACQCABRQ0AIAEoAgBFDQAgAEGoAWohCAJAIAAoAjAiBCAAKAKsASAAKAKoASIGa0EDdSIDSwRAIAggBCADaxAODAELIAMgBE0NACAAIAYgBEEDdGo2AqwBCyAAQbQBaiENAkACQCAAKAK4ASAAKAK0ASIGa0EDdSIDIARJBEAgDSAEIANrEA4gB0EANgIIIAdCADcDAAwBCyADIARLBEAgACAGIARBA3RqNgK4AQtBACEDIAdBADYCCCAHQgA3AwAgBA0AQQAhBgwBCyAEQYCAgIAETw0CIAcgBEECdCIDEAkiBiADaiIANgIIIAZBACADEAcaIAcgADYCBAsCQAJAAkAgAigCACIAIANJDQAgBiABKAIAIgkgAxAIIQUgASADIAlqIg42AgAgAiAAIANrIg82AgACQCAERQ0AIAgoAgAhCEEAIQlBACEAIARBAWtBA08EQCAEQXxxIRADQCAIIABBA3RqIAUgAEECdGooAgC4OQMAIAggAEEBciILQQN0aiAFIAtBAnRqKAIAuDkDACAIIABBAnIiC0EDdGogBSALQQJ0aigCALg5AwAgCCAAQQNyIgtBA3RqIAUgC0ECdGooAgC4OQMAIABBBGohACAKQQRqIgogEEcNAAsLIARBA3EiCkUNAANAIAggAEEDdGogBSAAQQJ0aigCALg5AwAgAEEBaiEAIAlBAWoiCSAKRw0ACwsgAyAPSw0AIAUgDiADEAghBSABIAMgDmo2AgAgAiAPIANrNgIAIAQNAUEBIQwLIAYNAQwCCyANKAIAIQFBACEJQQAhACAEQQFrQQNPBEAgBEF8cSECQQAhCgNAIAEgAEEDdGogBSAAQQJ0aigCALg5AwAgASAAQQFyIgNBA3RqIAUgA0ECdGooAgC4OQMAIAEgAEECciIDQQN0aiAFIANBAnRqKAIAuDkDACABIABBA3IiA0EDdGogBSADQQJ0aigCALg5AwAgAEEEaiEAIApBBGoiCiACRw0ACwsgBEEDcSICRQRAQQEhDAwBCwNAIAEgAEEDdGogBSAAQQJ0aigCALg5AwBBASEMIABBAWohACAJQQFqIgkgAkcNAAsLIAcgBjYCBCAGEAYLIAdBEGokACAMDwsQCgAL3QYBDn8jAEEQayIHJAACQAJAIAFFDQAgASgCAEUNACAAQagBaiEIAkAgACgCMCIEIAAoAqwBIAAoAqgBIgZrQQN1IgNLBEAgCCAEIANrEA4MAQsgAyAETQ0AIAAgBiAEQQN0ajYCrAELIABBtAFqIQ0CQAJAIAAoArgBIAAoArQBIgZrQQN1IgMgBEkEQCANIAQgA2sQDiAHQQA2AgggB0IANwMADAELIAMgBEsEQCAAIAYgBEEDdGo2ArgBC0EAIQMgB0EANgIIIAdCADcDACAEDQBBACEGDAELIARBgICAgARPDQIgByAEQQJ0IgMQCSIGIANqIgA2AgggBkEAIAMQBxogByAANgIECwJAAkACQCACKAIAIgAgA0kNACAGIAEoAgAiCSADEAghBSABIAMgCWoiDjYCACACIAAgA2siDzYCAAJAIARFDQAgCCgCACEIQQAhCUEAIQAgBEEBa0EDTwRAIARBfHEhEANAIAggAEEDdGogBSAAQQJ0aigCALc5AwAgCCAAQQFyIgtBA3RqIAUgC0ECdGooAgC3OQMAIAggAEECciILQQN0aiAFIAtBAnRqKAIAtzkDACAIIABBA3IiC0EDdGogBSALQQJ0aigCALc5AwAgAEEEaiEAIApBBGoiCiAQRw0ACwsgBEEDcSIKRQ0AA0AgCCAAQQN0aiAFIABBAnRqKAIAtzkDACAAQQFqIQAgCUEBaiIJIApHDQALCyADIA9LDQAgBSAOIAMQCCEFIAEgAyAOajYCACACIA8gA2s2AgAgBA0BQQEhDAsgBg0BDAILIA0oAgAhAUEAIQlBACEAIARBAWtBA08EQCAEQXxxIQJBACEKA0AgASAAQQN0aiAFIABBAnRqKAIAtzkDACABIABBAXIiA0EDdGogBSADQQJ0aigCALc5AwAgASAAQQJyIgNBA3RqIAUgA0ECdGooAgC3OQMAIAEgAEEDciIDQQN0aiAFIANBAnRqKAIAtzkDACAAQQRqIQAgCkEEaiIKIAJHDQALCyAEQQNxIgJFBEBBASEMDAELA0AgASAAQQN0aiAFIABBAnRqKAIAtzkDAEEBIQwgAEEBaiEAIAlBAWoiCSACRw0ACwsgByAGNgIEIAYQBgsgB0EQaiQAIAwPCxAKAAvZBgEOfyMAQRBrIgckAAJAAkAgAUUNACABKAIARQ0AIABBqAFqIQgCQCAAKAIwIgQgACgCrAEgACgCqAEiBmtBA3UiA0sEQCAIIAQgA2sQDgwBCyADIARNDQAgACAGIARBA3RqNgKsAQsgAEG0AWohDQJAAkAgACgCuAEgACgCtAEiBmtBA3UiAyAESQRAIA0gBCADaxAOIAdBADYCCCAHQgA3AwAMAQsgAyAESwRAIAAgBiAEQQN0ajYCuAELQQAhAyAHQQA2AgggB0IANwMAIAQNAEEAIQYMAQsgBEEASA0CIAcgBEEBdCIDEAkiBiADaiIANgIIIAZBACADEAcaIAcgADYCBAsCQAJAAkAgAigCACIAIANJDQAgBiABKAIAIgkgAxAIIQUgASADIAlqIg42AgAgAiAAIANrIg82AgACQCAERQ0AIAgoAgAhCEEAIQlBACEAIARBAWtBA08EQCAEQXxxIRADQCAIIABBA3RqIAUgAEEBdGovAQC4OQMAIAggAEEBciILQQN0aiAFIAtBAXRqLwEAuDkDACAIIABBAnIiC0EDdGogBSALQQF0ai8BALg5AwAgCCAAQQNyIgtBA3RqIAUgC0EBdGovAQC4OQMAIABBBGohACAKQQRqIgogEEcNAAsLIARBA3EiCkUNAANAIAggAEEDdGogBSAAQQF0ai8BALg5AwAgAEEBaiEAIAlBAWoiCSAKRw0ACwsgAyAPSw0AIAUgDiADEAghBSABIAMgDmo2AgAgAiAPIANrNgIAIAQNAUEBIQwLIAYNAQwCCyANKAIAIQFBACEJQQAhACAEQQFrQQNPBEAgBEF8cSECQQAhCgNAIAEgAEEDdGogBSAAQQF0ai8BALg5AwAgASAAQQFyIgNBA3RqIAUgA0EBdGovAQC4OQMAIAEgAEECciIDQQN0aiAFIANBAXRqLwEAuDkDACABIABBA3IiA0EDdGogBSADQQF0ai8BALg5AwAgAEEEaiEAIApBBGoiCiACRw0ACwsgBEEDcSICRQRAQQEhDAwBCwNAQQEhDCABIABBA3RqIAUgAEEBdGovAQC4OQMAIABBAWohACAJQQFqIgkgAkcNAAsLIAcgBjYCBCAGEAYLIAdBEGokACAMDwsQCgAL2QYBDn8jAEEQayIHJAACQAJAIAFFDQAgASgCAEUNACAAQagBaiEIAkAgACgCMCIEIAAoAqwBIAAoAqgBIgZrQQN1IgNLBEAgCCAEIANrEA4MAQsgAyAETQ0AIAAgBiAEQQN0ajYCrAELIABBtAFqIQ0CQAJAIAAoArgBIAAoArQBIgZrQQN1IgMgBEkEQCANIAQgA2sQDiAHQQA2AgggB0IANwMADAELIAMgBEsEQCAAIAYgBEEDdGo2ArgBC0EAIQMgB0EANgIIIAdCADcDACAEDQBBACEGDAELIARBAEgNAiAHIARBAXQiAxAJIgYgA2oiADYCCCAGQQAgAxAHGiAHIAA2AgQLAkACQAJAIAIoAgAiACADSQ0AIAYgASgCACIJIAMQCCEFIAEgAyAJaiIONgIAIAIgACADayIPNgIAAkAgBEUNACAIKAIAIQhBACEJQQAhACAEQQFrQQNPBEAgBEF8cSEQA0AgCCAAQQN0aiAFIABBAXRqLgEAtzkDACAIIABBAXIiC0EDdGogBSALQQF0ai4BALc5AwAgCCAAQQJyIgtBA3RqIAUgC0EBdGouAQC3OQMAIAggAEEDciILQQN0aiAFIAtBAXRqLgEAtzkDACAAQQRqIQAgCkEEaiIKIBBHDQALCyAEQQNxIgpFDQADQCAIIABBA3RqIAUgAEEBdGouAQC3OQMAIABBAWohACAJQQFqIgkgCkcNAAsLIAMgD0sNACAFIA4gAxAIIQUgASADIA5qNgIAIAIgDyADazYCACAEDQFBASEMCyAGDQEMAgsgDSgCACEBQQAhCUEAIQAgBEEBa0EDTwRAIARBfHEhAkEAIQoDQCABIABBA3RqIAUgAEEBdGouAQC3OQMAIAEgAEEBciIDQQN0aiAFIANBAXRqLgEAtzkDACABIABBAnIiA0EDdGogBSADQQF0ai4BALc5AwAgASAAQQNyIgNBA3RqIAUgA0EBdGouAQC3OQMAIABBBGohACAKQQRqIgogAkcNAAsLIARBA3EiAkUEQEEBIQwMAQsDQEEBIQwgASAAQQN0aiAFIABBAXRqLgEAtzkDACAAQQFqIQAgCUEBaiIJIAJHDQALCyAHIAY2AgQgBhAGCyAHQRBqJAAgDA8LEAoAC7EGAQ1/IwBBEGsiCCQAAkACQCABRQ0AIAEoAgBFDQAgAEGoAWohBgJAIAAoAjAiAyAAKAKsASAAKAKoASIEa0EDdSIFSwRAIAYgAyAFaxAODAELIAMgBU8NACAAIAQgA0EDdGo2AqwBCyAAQbQBaiEMAkACQCAAKAK4ASAAKAK0ASIEa0EDdSIFIANJBEAgDCADIAVrEA4gCEEANgIIIAhCADcDAAwBCyADIAVJBEAgACAEIANBA3RqNgK4AQtBACEFIAhBADYCCCAIQgA3AwAgA0UNAQsgA0EASA0CIAggAxAJIgUgA2oiADYCCCAFQQAgAxAHGiAIIAA2AgQLAkACQAJAIAIoAgAiACADSQ0AIAUgASgCACIJIAMQCCEEIAEgAyAJaiINNgIAIAIgACADayIONgIAAkAgA0UNACAGKAIAIQZBACEJQQAhACADQQFrQQNPBEAgA0F8cSELA0AgBiAAQQN0aiAAIARqLQAAuDkDACAGIABBAXIiCkEDdGogBCAKai0AALg5AwAgBiAAQQJyIgpBA3RqIAQgCmotAAC4OQMAIAYgAEEDciIKQQN0aiAEIApqLQAAuDkDACAAQQRqIQAgD0EEaiIPIAtHDQALCyADQQNxIgtFDQADQCAGIABBA3RqIAAgBGotAAC4OQMAIABBAWohACAJQQFqIgkgC0cNAAsLIAMgDksNACAEIA0gAxAIIQQgASADIA1qNgIAIAIgDiADazYCACADDQFBASEHCyAFDQEMAgsgDCgCACEBQQAhCUEAIQAgA0EBa0EDTwRAIANBfHEhBkEAIQIDQCABIABBA3RqIAAgBGotAAC4OQMAIAEgAEEBciIHQQN0aiAEIAdqLQAAuDkDACABIABBAnIiB0EDdGogBCAHai0AALg5AwAgASAAQQNyIgdBA3RqIAQgB2otAAC4OQMAIABBBGohACACQQRqIgIgBkcNAAsLIANBA3EiAkUEQEEBIQcMAQsDQCABIABBA3RqIAAgBGotAAC4OQMAQQEhByAAQQFqIQAgCUEBaiIJIAJHDQALCyAIIAU2AgQgBRAGCyAIQRBqJAAgBw8LEAoAC/cFAgZ/AXwjAEEQayIFJAAgBSACNgIIIAUgATYCDEEAIQICQCABRQ0AIARFDQAgA0UNACAAKAIgQQRIDQAgBUEMaiAFQQhqIABBIGoQF0UNACAAIAVBDGogBUEIahAaRQ0AIAAoAjAhBiAAKAI0RQRAIANBACAGQQN0IgAQBxogBEEAIAAQBxpBASECDAELIAArA1giCyAAKwNgYQRAQQEhAiAGQQBMDQFBACEBIAZBAWtBA08EQCAGQXxxIQgDQCAEIAFBA3QiAGogCzkDACAAIANqIAs5AwAgBCAAQQhyIgpqIAs5AwAgAyAKaiALOQMAIAQgAEEQciIKaiALOQMAIAMgCmogCzkDACAEIABBGHIiAGogCzkDACAAIANqIAs5AwAgAUEEaiEBIAlBBGoiCSAIRw0ACwsgBkEDcSIARQ0BA0AgBCABQQN0IgJqIAs5AwAgAiADaiALOQMAQQEhAiABQQFqIQEgB0EBaiIHIABHDQALDAELAkACQAJAAkACQAJAAkACQAJAIAAoAkgOCAcAAQIDBAUGCQsgACAFQQxqIAVBCGoQTQ0HDAgLIAAgBUEMaiAFQQhqEEwNBgwHCyAAIAVBDGogBUEIahBLDQUMBgsgACAFQQxqIAVBCGoQSg0EDAULIAAgBUEMaiAFQQhqEEkNAwwECyAAIAVBDGogBUEIahBIDQIMAwsgACAFQQxqIAVBCGoQRw0BDAILIAAgBUEMaiAFQQhqEEZFDQELQQEhAiAGQQBMDQAgACgCtAEhByAAKAKoASEIQQAhACAGQQFHBEAgBkF+cSEKA0AgAyAAQQN0IgFqIAEgCGorAwA5AwAgASAEaiABIAdqKwMAOQMAIAMgAUEIciIBaiABIAhqKwMAOQMAIAEgBGogASAHaisDADkDACAAQQJqIQAgCUECaiIJIApHDQALCyAGQQFxRQ0AIAMgAEEDdCIAaiAAIAhqKwMAOQMAIAAgBGogACAHaisDADkDAAsgBUEQaiQAIAILyi0CHX8DfiMAQSBrIgwkACAAKAIAIQtBBkEFIAMbIh8QLCEgIAxBADYCGCAMQgA3AxACQAJ/QQAgCy0AACIRQQJLDQAaIAQgBWwhGiABIAEoAgBBAWsiCTYCACALQQFqIQMCQCAgRQRAQQAhCwwBC0EAIAlBBkkNARpBACELA0BBACADLQAAIg4gIE8NAhogASAJQQFrNgIAIAMtAAEhCCABIAlBAms2AgBBACAIQQVLDQIaIAMoAAIhByABIAlBBmsiCTYCAEEAIAcgCUsNAhpBACAHEBIiBkUNAhogBiADQQZqIg8gBxAIIQMgASAJIAdrNgIAIAxBADYCDCMAQRBrIiIkACAiIBo2AgwCfyAiQQxqIQpBACEdQQAhHEEAIRkjAEFAaiITJAACQAJAIAMiCUUNAAJAAkACQAJAAkAgCS0AAA4EBAABAgMLIAkoAAIiBiAKKAIARw0FIAktAAEhAyAMIAYQEiIKNgIMIAoEQCAKIAMgBhAHGgsgCkEARyEcDAQLIAwgCigCACIDEBIiBjYCDCAGBEAgBiAJQQFqIAMQCBoLIAZBAEchHAwDC0EBIRwgCigCACIYEBIhGQJAIAdBAWsiFUUEQEEAIQYMAQsgCUEBaiEWIAlBAmohEEEAIQ1BACEGA0AgDSAWaiIKLAAAIgNB/wFxIRsCfyADQQBOBEAgBiAZaiANIBBqIBtBAWoQCBogDSAbaiENIAYgG2pBAWoMAQsgBiAZaiAKLQABIBsgG0H/ACAbQf8ASRsiA2tBAWoQBxogBiAbaiADa0EBagshBiANQQJqIg0gFUkNAAsLIAYgGEcEQAwJCyAMIBk2AgwMAgtB8AtBiQpBhgRB3goQAAALIBMgCUEBajYCPCAKKAIAISEgE0IANwIcIBNCADcCJCATQgA3AhQgE0GAgAI2AhAgE0EANgI0IBNCDDcCLAJAIBNBEGogE0E8aiAKQQUQJEUNACATQQA2AgwgE0EQaiATQQxqECNFDQAgDCAhEBIiGDYCDCAYRQ0AAkAgIUUNAEEgIBMoAgwiG2shFSAKKAIAIRQgEygCMCEWIBMoAjQhAyATKAIgIRAgEygCPCEXQQEhGUEAIQ0DQCAXRSANQR9LciEGAkACQCAUQRBPBEAgBg0EIBcoAgAgDXQgFXYhBiAQIBtBICANa0oEfyAXKAIEIB0gG2tBQGt2IAZyBSAGC0ECdGoiCi4BACIGQQBOBEAgCi8BAiEdIA0gBkH//wNxaiINQSBJDQMMAgsgA0UNBCANIBZqIgZBIGsgBiAGQR9KIgYbIQ0gFEEEayAUIAYbIRQgFyAGQQJ0aiEXIAMhBgNAIBcoAgAgDXQhCiANQQFqIg1BIEYEQCAXQQRqIRdBACENIBRBBGshFAsgBkEMQQggCkEASBtqKAIAIgZFDQUgBi4BBCIdQQBIDQALDAILIAYgFEEESXINAyAXKAIAIA10IBV2IQYgECAbQSAgDWtKBH8gFEEISQ0EIBcoAgQgHSAba0FAa3YgBnIFIAYLQQJ0aiIKLgEAIgZBAE4EQCAKLwECIR0gDSAGQf//A3FqIg1BIE8NAQwCCyADRQ0DIBRBBGsgFCANIBZqIgpBH0oiBhsiFEEESQ0DIApBIGsgCiAGGyENIBcgBkECdGohFyADIQYDQCAXKAIAIA10IQogDUEBaiINQSBGBEAgF0EEaiEXQQAhDSAUQQRrIRQLIAZBDEEIIApBAEgbaigCACIGRQ0EIAYuAQQiHUEATg0CIBRBA0sNAAsMAwsgFEEEayEUIBdBBGohFyANQSBrIQ0LIBggHGogHToAAEEAIA1rIR0gHEEBaiIcICFJIRkgHCAhRw0ACwsgGUUhHAsgE0EQahAiIBMoAiAiAwRAIBMgAzYCJCADEAYLIBMoAhQiA0UNACATIAM2AhggAxAGCyATQUBrJAAgHAwBC0GTDEGJCkHaA0HeChAAAAtFBEBBkAhBwwlBL0GtCBAAAAsgIkEQaiQAIAkQBgJAIBoEQCAMKAIMIRggCARAIBogCGshFiAaIAhBf3NqIRBBACEZIAghCwNAAkAgCyIGIBpODQAgBiAYaiELIBggGUF/cyAIamotAAAhA0EAIRUgBiEJIBYgGWpBA3EiCgRAA0AgCyALLQAAIANqIgM6AAAgCUEBaiEJIAtBAWohCyAVQQFqIhUgCkcNAAsLIBAgGWpBAk0NAANAIAsgCy0AACADaiIDOgAAIAsgCy0AASADaiIDOgABIAsgCy0AAiADaiIDOgACIAsgCy0AAyADaiIDOgADIAtBBGohCyAJQQRqIgkgGkgNAAsLIBlBAWohGSAGQQFrIQsgBkEBSg0ACyAMKAIUIQsLAkACQAJAIAwoAhgiAyALSwRAIAsgGDYCBCALIA42AgAgDCALQQhqIgs2AhQMAQsgCyAMKAIQIhBrIglBA3UiBkEBaiIIQYCAgIACTw0BIAMgEGsiC0ECdSIDIAggAyAISxtB/////wEgC0H4////B0kbIgoEfyAKQYCAgIACTw0DIApBA3QQCQVBAAsiCCAGQQN0aiIDIBg2AgQgAyAONgIAIANBCGohCyAJQQBKBEAgCCAQIAkQCBoLIAwgCCAKQQN0ajYCGCAMIAs2AhQgDCAINgIQIBBFDQAgEBAGCyAHIA9qIQMgEkEBaiISICBHDQMMBQsQCgALECEAC0GMDEG8CEGGAUHACxAAAAsgASgCACIJQQZPDQALQQAMAQsgACADNgIAIAxBADYCDAJAAkACQCARQRh0QRh1IgBB/wFxQX8gAEEDSRsiAEEBag4EAgEBAAELAn8gDEEMaiEYIAwoAhQiFiAMKAIQIhBrIgFBA3UiDyAfECxGBEAgGiAEIAVsRgRAAkAgDyAabBASIgZFDQAgGgRAIA9BASAPQQFLGyIAQX5xIQogAEEBcSESIAwoAhAhFUEAIQAgAUEQSSEJQQAhBwNAAkAgECAWRg0AQQAhAUEAIREgCUUEQANAIAYgFSABQQN0IghqIgMoAgAgB2pqIAMoAgQgAGotAAA6AAAgBiAVIAhBCHJqIgMoAgAgB2pqIAMoAgQgAGotAAA6AAAgAUECaiEBIBFBAmoiESAKRw0ACwsgEkUNACAGIBUgAUEDdGoiASgCACAHamogASgCBCAAai0AADoAAAsgByAPaiEHIABBAWoiACAaRw0ACwsgBiEAQQAhD0EAIRECQAJAAkACQCAfQQVrDgIAAgELIAQEQCAFQQJrIRUgBUEBayIBQX5xIRYgAUEBcSEQIAVBAkkhCiAAIQMDQAJAIAoNACAEQQFHBEBBACEHIAQhASAVBEADQCADIAFBAnRqIgggAyABIARrQQJ0aigCACIJIAgoAgAiCGoiEkH///8DcSAJIAhBgICAfHFqQYCAgHxxciIJNgIAIAMgASAEaiIIQQJ0aiIBIBIgASgCACIBakH///8DcSAJIAFBgICAfHFqQYCAgHxxcjYCACAEIAhqIQEgB0ECaiIHIBZHDQALCyAQRQ0BIAMgAUECdGoiCCADIAEgBGtBAnRqKAIAIgcgCCgCACIBakH///8DcSAHIAFBgICAfHFqQYCAgHxxcjYCAAwBCyADKAIAIQFBACEPIAQhByAVBEADQCADIAdBAnRqIgggASAIKAIAIghqIglB////A3EgASAIQYCAgHxxakGAgIB8cXIiCDYCACADIAQgB2oiB0ECdGoiASAJIAEoAgAiAWpB////A3EgCCABQYCAgHxxakGAgIB8cXIiATYCACAEIAdqIQcgD0ECaiIPIBZHDQALCyAQRQ0AIAMgB0ECdGoiByABIAcoAgAiB2pB////A3EgASAHQYCAgHxxakGAgIB8cXI2AgALIANBBGohAyARQQFqIhEgBEcNAAsLIAVFDQIgBEEBayIBQX5xIRIgAUEBcSEJQQAhESAEQQJJIQgDQAJAIAgNACAAKAIAIQNBACEPQQEhASAEQQJHBEADQCAAIAFBAnRqIgogCigCACIHQYCAgHxxIANqQYCAgHxxIAMgB2oiB0H///8DcXIiAzYCACAKIAMgCigCBCIDQYCAgHxxakGAgIB8cSADIAdqQf///wNxciIDNgIEIAFBAmohASAPQQJqIg8gEkcNAAsLIAlFDQAgACABQQJ0aiIBIAEoAgAiAUGAgIB8cSADakGAgIB8cSABIANqQf///wNxcjYCAAsgACAEQQJ0aiEAIBFBAWoiESAFRw0ACwwCC0GTDEH/CEGaB0GUCBAAAAsgBARAIAVBAmshECAFQQFrIgFBfnEhCiABQQFxIRIgBUECSSEJIAAhAwNAAkAgCQ0AIARBAUcEQEEAIQcgBCEBIBAEQANAIAMgAUEDdGoiCCADIAEgBGtBA3RqKQMAIiMgCCkDACIkfCIlQv////////8HgyAjICRCgICAgICAgHiDfEKAgICAgICAeIOEIiM3AwAgAyABIARqIghBA3RqIgEgJSABKQMAIiR8Qv////////8HgyAjICRCgICAgICAgHiDfEKAgICAgICAeIOENwMAIAQgCGohASAHQQJqIgcgCkcNAAsLIBJFDQEgAyABQQN0aiIHIAMgASAEa0EDdGopAwAiIyAHKQMAIiR8Qv////////8HgyAjICRCgICAgICAgHiDfEKAgICAgICAeIOENwMADAELIAMpAwAhI0EAIQcgBCEBIBAEQANAIAMgAUEDdGoiCCAjIAgpAwAiJHwiJUL/////////B4MgIyAkQoCAgICAgIB4g3xCgICAgICAgHiDhCIjNwMAIAMgASAEaiIIQQN0aiIBICUgASkDACIkfEL/////////B4MgIyAkQoCAgICAgIB4g3xCgICAgICAgHiDhCIjNwMAIAQgCGohASAHQQJqIgcgCkcNAAsLIBJFDQAgAyABQQN0aiIBICMgASkDACIkfEL/////////B4MgIyAkQoCAgICAgIB4g3xCgICAgICAgHiDhDcDAAsgA0EIaiEDIA9BAWoiDyAERw0ACwsgBUUNACAEQQFrIgFBfnEhEiABQQFxIQlBACEPIARBAkkhCANAAkAgCA0AIAApAwAhI0EAIQdBASEDIARBAkcEQANAIAAgA0EDdGoiASABKQMAIiRCgICAgICAgHiDICN8QoCAgICAgIB4gyAjICR8IiVC/////////weDhCIjNwMAIAEgIyABKQMIIiRCgICAgICAgHiDfEKAgICAgICAeIMgJCAlfEL/////////B4OEIiM3AwggA0ECaiEDIAdBAmoiByASRw0ACwsgCUUNACAAIANBA3RqIgEgASkDACIkQoCAgICAgIB4gyAjfEKAgICAgICAeIMgIyAkfEL/////////B4OENwMACyAAIARBA3RqIQAgD0EBaiIPIAVHDQALCyAfQQVGBEAgBiAaEFALIBgEQCAYIAY2AgAMAQsgBhAGCyAGQQBHDAILQY4LQbwIQfIEQZQIEAAACwwECyEeDAELAn8gDEEMaiEVQQAhDiAAQQJJBEAgDCgCFCIKIAwoAhAiEmsiA0EDdSIPIB8QLEYEQEEBIABBAkZBAXQgAEEBRhshHgJAIA8gBCAFbCIYbBASIgFFDQAgGARAIA9BASAPQQFLGyIAQX5xIQkgAEEBcSEIIAwoAhAhFkEAIREgA0EQSSEHA0ACQCAKIBJGDQBBACEAQQAhECAHRQRAA0AgASAWIABBA3QiBmoiAygCACAOamogAygCBCARai0AADoAACABIBYgBkEIcmoiAygCACAOamogAygCBCARai0AADoAACAAQQJqIQAgEEECaiIQIAlHDQALCyAIRQ0AIAEgFiAAQQN0aiIAKAIAIA5qaiAAKAIEIBFqLQAAOgAACyAOIA9qIQ4gEUEBaiIRIBhHDQALCyABIQBBACERAkAgHkUNAAJAAkACQCAfQQVrDgIAAgELAkAgHkECRw0AIAVFDQAgBEEBcSEWIARBAmtBfnEhECAEQQNJIQogACEDA0ACQCAKDQAgAygCBCEOQQAhD0ECIQYgBEEDRwRAA0AgAyAGQQJ0IhJqIgcgBygCACIHQYCAgHxxIA5qQYCAgHxxIAcgDmoiCUH///8DcXIiCDYCACADIBJBBHJqIgcgBygCACIHQYCAgHxxIAhqQYCAgHxxIAcgCWpB////A3FyIg42AgAgBkECaiEGIA9BAmoiDyAQRw0ACwsgFkUNACADIAZBAnRqIgYgBigCACIGQYCAgHxxIA5qQYCAgHxxIAYgDmpB////A3FyNgIACyADIARBAnRqIQMgEUEBaiIRIAVHDQALCyAeQQBMDQIgBUUNAiAEQQFrIgNBfnEhCiADQQFxIRJBACERIARBAkkhCQNAAkAgCQ0AIAAoAgAhDkEAIQ9BASEGIARBAkcEQANAIAAgBkECdGoiECAQKAIAIgNBgICAfHEgDmpBgICAfHEgAyAOaiIIQf///wNxciIHNgIAIBAgByAQKAIEIgNBgICAfHFqQYCAgHxxIAMgCGpB////A3FyIg42AgQgBkECaiEGIA9BAmoiDyAKRw0ACwsgEkUNACAAIAZBAnRqIgMgAygCACIDQYCAgHxxIA5qQYCAgHxxIAMgDmpB////A3FyNgIACyAAIARBAnRqIQAgEUEBaiIRIAVHDQALDAILQZMMQf8IQYEGQasLEAAACwJAIB5BAkcNACAFRQ0AIARBAXEhCiAEQQJrQX5xIRIgBEEDSSEJIAAhBgNAAkAgCQ0AIAYpAwghI0EAIQNBAiEOIARBA0cEQANAIAYgDkEDdCIIaiIHIAcpAwAiJEKAgICAgICAeIMgI3xCgICAgICAgHiDICMgJHwiJUL/////////B4OEIiM3AwAgBiAIQQhyaiIHICMgBykDACIkQoCAgICAgIB4g3xCgICAgICAgHiDICQgJXxC/////////weDhCIjNwMAIA5BAmohDiADQQJqIgMgEkcNAAsLIApFDQAgBiAOQQN0aiIDIAMpAwAiJEKAgICAgICAeIMgI3xCgICAgICAgHiDICMgJHxC/////////weDhDcDAAsgBiAEQQN0aiEGIBFBAWoiESAFRw0ACwsgHkEATA0AIAVFDQAgBEEBayIDQX5xIQkgA0EBcSEIQQAhBiAEQQJJIQcDQAJAIAcNACAAKQMAISNBACEDQQEhDiAEQQJHBEADQCAAIA5BA3RqIhIgEikDACIkQoCAgICAgIB4gyAjfEKAgICAgICAeIMgIyAkfCIlQv////////8Hg4QiIzcDACASICMgEikDCCIkQoCAgICAgIB4g3xCgICAgICAgHiDICQgJXxC/////////weDhCIjNwMIIA5BAmohDiADQQJqIgMgCUcNAAsLIAhFDQAgACAOQQN0aiIDIAMpAwAiJEKAgICAgICAeIMgI3xCgICAgICAgHiDICMgJHxC/////////weDhDcDAAsgACAEQQN0aiEAIAZBAWoiBiAFRw0ACwsgH0EFRgRAIAEgGBBQCyAVBEAgFSABNgIADAELIAEQBgsgAUEARwwCCwsMAwshHgsgDCgCECIAIAtHBEBBACEDIAAhCwNAIAsgA0EDdGooAgQQBiADQQFqIgMgDCgCFCAMKAIQIgtrQQN1SQ0ACwsgDCALNgIUIAwoAgwiAARAIAIgACAaICBsEAgaIAAQBgsgHgshASAMKAIQIgAEQCAAEAYLIAxBIGokACABDwtBBBACIgBB0As2AgAgAEG8EkEAEAEAC9cBAQV/AkAgAUUNACABQQFHBEAgAUF+cSEFA0AgACADQQJ0IgZqIgIgAigCACICQQF2QYCAgPwHcSACQf///wNxciACQQh0QYCAgIB4cXI2AgAgACAGQQRyaiICIAIoAgAiAkEBdkGAgID8B3EgAkH///8DcXIgAkEIdEGAgICAeHFyNgIAIANBAmohAyAEQQJqIgQgBUcNAAsLIAFBAXFFDQAgACADQQJ0aiIAIAAoAgAiAEEBdkGAgID8B3EgAEH///8DcXIgAEEIdEGAgICAeHFyNgIACwsLACAAEFIaIAAQBgsxAQJ/IABB7BU2AgAgACgCBEEMayIBIAEoAghBAWsiAjYCCCACQQBIBEAgARAGCyAAC90BAQR/IABBADYCCCAAQgA3AgACQCABBEAgAUGAgICABE8NASAAIAFBAnQiBBAJIgM2AgAgACADIARqIgQ2AgggAUEBa0H/////A3EhBSACKAIAIQIgAUEHcSIGBEBBACEBA0AgAyACNgIAIANBBGohAyABQQFqIgEgBkcNAAsLIAVBB08EQANAIAMgAjYCHCADIAI2AhggAyACNgIUIAMgAjYCECADIAI2AgwgAyACNgIIIAMgAjYCBCADIAI2AgAgA0EgaiIDIARHDQALCyAAIAQ2AgQLIAAPCxAKAAuaAQAgAEEBOgA1AkAgACgCBCACRw0AIABB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QmxvY2tTZXF1ZW5jZQByZXN0b3JlU2VxdWVuY2UAQXNzZXJ0aW9uIGZhaWxlZABzdGQ6OmJhZF9hbGxvYwBwcEJ5dGVbMF0gPT0gSFVGRk1BTl9OT1JNQUwAc2l6ZSA+IDAAUHVyZSB2aXJ0dWFsIGZ1bmN0aW9uIGNhbGxlZCEAQ250WkltYWdlIABMZXJjMiAAAAAAAAAAAHAGAAABAAAAAgAAAE42TGVyY05TMTBCaXRTdHVmZmVyRQAAALQJAABYBgAAAAAAAOgGAAAFAAAABgAAAAcAAAAIAAAACQAAAE42TGVyY05TOUNudFpJbWFnZUUATjZMZXJjTlM2VEltYWdlSU5TXzRDbnRaRUVFAE42TGVyY05TNUltYWdlRQC0CQAAxAYAANwJAACoBgAA1AYAANwJAACUBgAA3AYAAAAAAADcBgAACgAAAAsAAAAMAAAACAAAAAkAAAAAAAAAMAcAAA0AAAAOAAAATjZMZXJjTlM1TGVyYzJFALQJAAAgBwAAAAAAAGAHAAAPAAAAEAAAAE42TGVyY05TMTFCaXRTdHVmZmVyMkUAALQJAABIBwAAAAAAAIwHAAARAAAAEgAAAE42TGVyY05TN0JpdE1hc2tFAAAAtAkAAHgHAABOMTBfX2N4eGFiaXYxMTZfX3NoaW1fdHlwZV9pbmZvRQAAAADcCQAAlAcAAFgLAABOMTBfX2N4eGFiaXYxMTdfX2NsYXNzX3R5cGVfaW5mb0UAAADcCQAAxAcAALgHAABOMTBfX2N4eGFiaXYxMTdfX3BiYXNlX3R5cGVfaW5mb0UAAADcCQAA9AcAALgHAABOMTBfX2N4eGFiaXYxMTlfX3BvaW50ZXJfdHlwZV9pbmZvRQDcCQAAJAgAABgIAABOMTBfX2N4eGFiaXYxMjBfX2Z1bmN0aW9uX3R5cGVfaW5mb0UAAAAA3AkAAFQIAAC4BwAATjEwX19jeHhhYml2MTI5X19wb2ludGVyX3RvX21lbWJlcl90eXBlX2luZm9FAAAA3AkAAIgIAAAYCAAAAAAAAAgJAAATAAAAFAAAABUAAAAWAAAAFwAAAE4xMF9fY3h4YWJpdjEyM19fZnVuZGFtZW50YWxfdHlwZV9pbmZvRQDcCQAA4AgAALgHAAB2AAAAzAgAABQJAABEbgAAzAgAACAJAABjAAAAzAgAACwJAABQS2MAOAoAADgJAAABAAAAMAkAAGgAAADMCAAATAkAAGEAAADMCAAAWAkAAHMAAADMCAAAZAkAAHQAAADMCAAAcAkAAGkAAADMCAAAfAkAAGoAAADMCAAAiAkAAGYAAADMCAAAlAkAAGQAAADMCAAAoAkAAAAAAADoBwAAEwAAABgAAAAVAAAAFgAAABkAAAAaAAAAGwAAABwAAAAAAAAAJAoAABMAAAAdAAAAFQAAABYAAAAZAAAAHgAAAB8AAAAgAAAATjEwX19jeHhhYml2MTIwX19zaV9jbGFzc190eXBlX2luZm9FAAAAANwJAAD8CQAA6AcAAAAAAABICAAAEwAAACEAAAAVAAAAFgAAACIAAAAAAAAAsAoAAAQAAAAjAAAAJAAAAAAAAADYCgAABAAAACUAAAAmAAAAAAAAAJgKAAAEAAAAJwAAACgAAABTdDlleGNlcHRpb24AAAAAtAkAAIgKAABTdDliYWRfYWxsb2MAAAAA3AkAAKAKAACYCgAAU3QyMGJhZF9hcnJheV9uZXdfbGVuZ3RoAAAAANwJAAC8CgAAsAoAAAAAAAAICwAAAwAAACkAAAAqAAAAU3QxMWxvZ2ljX2Vycm9yANwJAAD4CgAAmAoAAAAAAAA8CwAAAwAAACsAAAAqAAAAU3QxMmxlbmd0aF9lcnJvcgAAAADcCQAAKAsAAAgLAABTdDl0eXBlX2luZm8AAAAAtAkAAEgLAEHgFgsDYA1Q",self.location).toString();function iA(U){try{if(U==j&&p)return new Uint8Array(p);if(Q)return Q(U);throw"both async and sync fetching of the wasm failed"}catch(W){_A(W)}}function IA(){if(!p&&(o||g)){if(typeof fetch=="function"&&!v(j))return fetch(j,{credentials:"same-origin"}).then(function(U){if(!U.ok)throw"failed to load wasm binary file at '"+j+"'";return U.arrayBuffer()}).catch(function(){return iA(j)});if(C)return new Promise(function(U,W){C(j,function(DA){U(new Uint8Array(DA))},W)})}return Promise.resolve().then(function(){return iA(j)})}function rA(){var U={a:cA};function W(b,X){var sA=b.exports;t.asm=sA,d=t.asm.g,T(d.buffer),P=t.asm.m,HA(t.asm.h),CA()}mA();function DA(b){W(b.instance)}function x(b){return IA().then(function(X){return WebAssembly.instantiate(X,U)}).then(function(X){return X}).then(b,function(X){B("failed to asynchronously prepare wasm: "+X),_A(X)})}function S(){return!p&&typeof WebAssembly.instantiateStreaming=="function"&&!UA(j)&&!v(j)&&!r&&typeof fetch=="function"?fetch(j,{credentials:"same-origin"}).then(function(b){var X=WebAssembly.instantiateStreaming(b,U);return X.then(DA,function(sA){return B("wasm streaming compile failed: "+sA),B("falling back to ArrayBuffer instantiation"),x(DA)})}):x(DA)}if(t.instantiateWasm)try{var $=t.instantiateWasm(U,W);return $}catch(b){return B("Module.instantiateWasm callback failed with error: "+b),!1}return S().catch(i),{}}function aA(U){for(;U.length>0;){var W=U.shift();if(typeof W=="function"){W(t);continue}var DA=W.func;typeof DA=="number"?W.arg===void 0?pA(DA)():pA(DA)(W.arg):DA(W.arg===void 0?null:W.arg)}}var fA=[];function pA(U){var W=fA[U];return W||(U>=fA.length&&(fA.length=U+1),fA[U]=W=P.get(U)),W}function TA(U,W,DA,x){_A("Assertion failed: "+R(U)+", at: "+[W?R(W):"unknown filename",DA,x?R(x):"unknown function"])}function N(U){return kA(U+24)+24}function D(U){this.excPtr=U,this.ptr=U-24,this.set_type=function(W){k[this.ptr+4>>2]=W},this.get_type=function(){return k[this.ptr+4>>2]},this.set_destructor=function(W){k[this.ptr+8>>2]=W},this.get_destructor=function(){return k[this.ptr+8>>2]},this.set_refcount=function(W){L[this.ptr>>2]=W},this.set_caught=function(W){W=W?1:0,m[this.ptr+12>>0]=W},this.get_caught=function(){return m[this.ptr+12>>0]!=0},this.set_rethrown=function(W){W=W?1:0,m[this.ptr+13>>0]=W},this.get_rethrown=function(){return m[this.ptr+13>>0]!=0},this.init=function(W,DA){this.set_adjusted_ptr(0),this.set_type(W),this.set_destructor(DA),this.set_refcount(0),this.set_caught(!1),this.set_rethrown(!1)},this.add_ref=function(){var W=L[this.ptr>>2];L[this.ptr>>2]=W+1},this.release_ref=function(){var W=L[this.ptr>>2];return L[this.ptr>>2]=W-1,W===1},this.set_adjusted_ptr=function(W){k[this.ptr+16>>2]=W},this.get_adjusted_ptr=function(){return k[this.ptr+16>>2]},this.get_exception_ptr=function(){var W=EA(this.get_type());if(W)return k[this.excPtr>>2];var DA=this.get_adjusted_ptr();return DA!==0?DA:this.excPtr}}function q(U,W,DA){var x=new D(U);throw x.init(W,DA),U}function eA(){_A("")}function tA(U,W,DA){u.copyWithin(U,W,W+DA)}function gA(){return 2147483648}function MA(U){try{return d.grow(U-F.byteLength+65535>>>16),T(d.buffer),1}catch{}}function hA(U){var W=u.length;U=U>>>0;var DA=gA();if(U>DA)return!1;let x=(sA,SA)=>sA+(SA-sA%SA)%SA;for(var S=1;S<=4;S*=2){var $=W*(1+.2/S);$=Math.min($,U+100663296);var b=Math.min(DA,x(Math.max(U,$),65536)),X=MA(b);if(X)return!0}return!1}var cA={a:TA,c:N,b:q,d:eA,f:tA,e:hA};rA(),t.___wasm_call_ctors=function(){return(t.___wasm_call_ctors=t.asm.h).apply(null,arguments)},t._lerc_getBlobInfo=function(){return(t._lerc_getBlobInfo=t.asm.i).apply(null,arguments)},t._lerc_getDataRanges=function(){return(t._lerc_getDataRanges=t.asm.j).apply(null,arguments)},t._lerc_decode=function(){return(t._lerc_decode=t.asm.k).apply(null,arguments)},t._lerc_decode_4D=function(){return(t._lerc_decode_4D=t.asm.l).apply(null,arguments)};var kA=t._malloc=function(){return(kA=t._malloc=t.asm.n).apply(null,arguments)};t._free=function(){return(t._free=t.asm.o).apply(null,arguments)};var EA=t.___cxa_is_pointer_type=function(){return(EA=t.___cxa_is_pointer_type=t.asm.p).apply(null,arguments)},wA;function JA(U){this.name="ExitStatus",this.message="Program terminated with exit("+U+")",this.status=U}nA=function U(){wA||LA(),wA||(nA=U)};function LA(U){if(Z>0||(z(),Z>0))return;function W(){wA||(wA=!0,t.calledRun=!0,!f&&(BA(),e(t),t.onRuntimeInitialized&&t.onRuntimeInitialized(),dA()))}t.setStatus?(t.setStatus("Running..."),setTimeout(function(){setTimeout(function(){t.setStatus("")},1),W()},1)):W()}if(t.run=LA,t.preInit)for(typeof t.preInit=="function"&&(t.preInit=[t.preInit]);t.preInit.length>0;)t.preInit.pop()();return LA(),t.ready}})();const kI=[{pixelType:"S8",size:1,ctor:Int8Array,range:[-128,128]},{pixelType:"U8",size:1,ctor:Uint8Array,range:[0,255]},{pixelType:"S16",size:2,ctor:Int16Array,range:[-32768,32767]},{pixelType:"U16",size:2,ctor:Uint16Array,range:[0,65536]},{pixelType:"S32",size:4,ctor:Int32Array,range:[-2147483648,2147483647]},{pixelType:"U32",size:4,ctor:Uint32Array,range:[0,4294967296]},{pixelType:"F32",size:4,ctor:Float32Array,range:[-34027999387901484e22,34027999387901484e22]},{pixelType:"F64",size:8,ctor:Float64Array,range:[-17976931348623157e292,17976931348623157e292]}];let ss=null,bI=!1;function HI(n={}){if(ss)return ss;const A=n.locateFile||((t,e)=>`${e}${t}`);return ss=uu({locateFile:A}).then(t=>t.ready.then(()=>{Du(t),bI=!0})),ss}function fu(){return bI}const ys={getBlobInfo:null,decode:null};function pu(n){return(n>>3<<3)+16}function Ne(n,A,t){t.set(n.slice(A,A+t.length))}function Du(n){const{_malloc:A,_free:t,_lerc_getBlobInfo:e,_lerc_getDataRanges:i,_lerc_decode_4D:s,asm:o}=n;let g;const r=Object.values(o).find(I=>I&&"buffer"in I&&I.buffer===n.HEAPU8.buffer),a=I=>{const E=I.map(l=>pu(l)),C=E.reduce((l,h)=>l+h),Q=A(C);g=new Uint8Array(r.buffer);let c=E[0];E[0]=Q;for(let l=1;l{const E=new Uint8Array(48),C=new Uint8Array(3*8),[Q,c,l]=a([I.length,E.length,C.length]);g.set(I,Q),g.set(E,c),g.set(C,l);let h=e(Q,I.length,c,l,12,3);if(h)throw t(Q),`lerc-getBlobInfo: error code is ${h}`;g=new Uint8Array(r.buffer),Ne(g,c,E),Ne(g,l,C);const B=new Uint32Array(E.buffer),p=new Float64Array(C.buffer),[d,f,_,w,R,F,m,u,L,k,T]=B,P={version:d,dimCount:_,width:w,height:R,validPixelCount:m,bandCount:F,blobSize:u,maskCount:L,depthCount:k,dataType:f,minValue:p[0],maxValue:p[1],maxZerror:p[2],statistics:[],bandCountWithNoData:T};if(T)return t(Q),P;if(k===1&&F===1)return t(Q),P.statistics.push({minValue:p[0],maxValue:p[1]}),P;const V=k*F*8,O=new Uint8Array(V),oA=new Uint8Array(V);let z=Q,BA=0,dA=0,uA=!1;if(g.byteLength1){const mA=HA.slice(nA*k,(nA+1)*k),CA=WA.slice(nA*k,(nA+1)*k),_A=Math.min.apply(null,mA),GA=Math.max.apply(null,CA);Z.push({minValue:_A,maxValue:GA,dimStats:{minValues:mA,maxValues:CA},depthStats:{minValues:mA,maxValues:CA}})}else Z.push({minValue:HA[nA],maxValue:WA[nA]});return t(z),uA||t(BA),P},ys.decode=(I,E)=>{const{maskCount:C,depthCount:Q,bandCount:c,width:l,height:h,dataType:B,bandCountWithNoData:p}=E,d=kI[B],f=l*h,_=new Uint8Array(f*c),w=f*Q*c*d.size,R=new Uint8Array(w),F=new Uint8Array(c),m=new Uint8Array(c*8),[u,L,k,T,P]=a([I.length,_.length,R.length,F.length,m.length]);g.set(I,u),g.set(_,L),g.set(R,k),g.set(F,T),g.set(m,P);const V=s(u,I.length,C,L,Q,l,h,c,B,k,T,P);if(V)throw t(u),`lerc-decode: error code is ${V}`;g=new Uint8Array(r.buffer),Ne(g,k,R),Ne(g,L,_);let O=null;if(p){Ne(g,T,F),Ne(g,P,m),O=[];const oA=new Float64Array(m.buffer);for(let z=0;z1){F.set(f[0]);for(let T=1;T=m;if(l>0&&u)for(let T=0;T1?f:null,{pixelType:k}=B;return{width:a,height:I,pixelType:k,statistics:h,pixels:d,mask:F,dimCount:C,depthCount:Q,bandMasks:L}}HI({locateFile:()=>{const n=new URL("data:application/wasm;base64,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Tg0AA0AgCiACQQN0ai8BAEUNASACQQFqIgIgA0cNAAsgAyECDAELIAIhBSACIANODQEDQCAKIAVBA3RqLwEADQIgBUEBaiIFIANHDQALCyADIAJrIgUgCSAFIAlKIgUbIQkgAiAIIAUbIQgMAgsgBSACayILIAkgCSALSCILGyEJIAIgCCALGyEIIAMgBSICSg0ACwsgAyAJayAAIARrSARAIAYgCCAJajYCFCAGIAMgCGoiADYCECAGKAIUIQQLQQAhAiAAIARMDQAgACAEayIFQQFxIQkCQCAEQQFqIABGBEBBACEADAELIAVBfnEhBUEAIQADQCAAIAogBEEAIAMgAyAEShtrQQN0ai8BACIIIAAgCEobIgAgCiAEQQFqIghBACADIAMgCEoba0EDdGovAQAiCCAAIAhKGyEAIARBAmohBCACQQJqIgIgBUcNAAsLIAkEQCAAIAogBEEAIAMgAyAEShtrQQN0ai8BACICIAAgAkobIQALIABBIWsiAkFgTwRAIAYgADYCDAsgAkFfSyECCwJAIAIiCkUNACAHKAIIIQwgBygCBCENIAEgBigCDCILIAcoAhwiDiALIA5IGyIANgIAIAcgBygCEDYCFCAGQX82AhhBACEFQQAhCAJAQQEgAHQiAyAHKAIYIgAgBygCECICa0ECdU0EQAJAIAcoAhQiBSACa0ECdSIJIAMgAyAJSxsiBEUNACAEQQFrIQ8CQCAEQQNxIhBFBEAgAiEADAELIAIhAANAIAAgBi8BGDsBACAAIAYvARo7AQIgBEEBayEEIABBBGohACAIQQFqIgggEEcNAAsLIA9BA0kNAANAIAAgBi8BGDsBACAAIAYvARo7AQIgACAGLwEYOwEEIAAgBi8BGjsBBiAAIAYvARg7AQggACAGLwEaOwEKIAAgBi8BGDsBDCAAIAYvARo7AQ4gAEEQaiEAIARBBGsiBA0ACwsgAyAJSwRAIAUgAyAJa0ECdGohAANAIAUgBigBGDYBACAFQQRqIgUgAEcNAAsgByAANgIUDAILIAcgAiADQQJ0ajYCFAwBCyACBEAgByACNgIUIAIQBiAHQQA2AhggB0IANwIQQQAhAAsCQCADQYCAgIAETw0AIABBAXUiAiADIAIgA0sbQf////8DIABB/P///wdJGyIAQYCAgIAETw0AIAcgAEECdCIAEAki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QYCAgHxxakGAgIB8cXIiCDYCACADIAQgB2oiB0ECdGoiASAJIAEoAgAiAWpB////A3EgCCABQYCAgHxxakGAgIB8cXIiATYCACAEIAdqIQcgD0ECaiIPIBZHDQALCyAQRQ0AIAMgB0ECdGoiByABIAcoAgAiB2pB////A3EgASAHQYCAgHxxakGAgIB8cXI2AgALIANBBGohAyARQQFqIhEgBEcNAAsLIAVFDQIgBEEBayIBQX5xIRIgAUEBcSEJQQAhESAEQQJJIQgDQAJAIAgNACAAKAIAIQNBACEPQQEhASAEQQJHBEADQCAAIAFBAnRqIgogCigCACIHQYCAgHxxIANqQYCAgHxxIAMgB2oiB0H///8DcXIiAzYCACAKIAMgCigCBCIDQYCAgHxxakGAgIB8cSADIAdqQf///wNxciIDNgIEIAFBAmohASAPQQJqIg8gEkcNAAsLIAlFDQAgACABQQJ0aiIBIAEoAgAiAUGAgIB8cSADakGAgIB8cSABIANqQf///wNxcjYCAAsgACAEQQJ0aiEAIBFBAWoiESAFRw0ACwwCC0GTDEH/CEGaB0GUCBAAAAsgBARAIAVBAmshECAFQQFrIgFBfnEhCiABQQFxIRIgBUECSSEJIAAhAwNAAkAgCQ0AIARBAUcEQEEAIQcgBCEBIBAEQANAIAMgAUEDdGoiCCADIAEgBGtBA3RqKQMAIiMgCCkDACIkfCIlQv////////8HgyAjICRCgICAgICAgHiDfEKAgICAgICAeIOEIiM3AwAgAyABIARqIghBA3RqIgEgJSABKQMAIiR8Qv////////8HgyAjICRCgICAgICAgHiDfEKAgICAgICAeIOENwMAIAQgCGohASAHQQJqIgcgCkcNAAsLIBJFDQEgAyABQQN0aiIHIAMgASAEa0EDdGopAwAiIyAHKQMAIiR8Qv////////8HgyAjICRCgICAgICAgHiDfEKAgICAgICAeIOENwMADAELIAMpAwAhI0EAIQcgBCEBIBAEQANAIAMgAUEDdGoiCCAjIAgpAwAiJHwiJUL/////////B4MgIyAkQoCAgICAgIB4g3xCgICAgICAgHiDhCIjNwMAIAMgASAEaiIIQQN0aiIBICUgASkDACIkfEL/////////B4MgIyAkQoCAgICAgIB4g3xCgICAgICAgHiDhCIjNwMAIAQgCGohASAHQQJqIgcgCkcNAAsLIBJFDQAgAyABQQN0aiIBICMgASkDACIkfEL/////////B4MgIyAkQoCAgICAgIB4g3xCgICAgICAgHiDhDcDAAsgA0EIaiEDIA9BAWoiDyAERw0ACwsgBUUNACAEQQFrIgFBfnEhEiABQQFxIQlBACEPIARBAkkhCANAAkAgCA0AIAApAwAhI0EAIQdBASEDIARBAkcEQANAIAAgA0EDdGoiASABKQMAIiRCgICAgICAgHiDICN8QoCAgICAgIB4gyAjICR8IiVC/////////weDhCIjNwMAIAEgIyABKQMIIiRCgICAgICAgHiDfEKAgICAgICAeIMgJCAlfEL/////////B4OEIiM3AwggA0ECaiEDIAdBAmoiByASRw0ACwsgCUUNACAAIANBA3RqIgEgASkDACIkQoCAgICAgIB4gyAjfEKAgICAgICAeIMgIyAkfEL/////////B4OENwMACyAAIARBA3RqIQAgD0EBaiIPIAVHDQALCyAfQQVGBEAgBiAaEFALIBgEQCAYIAY2AgAMAQsgBhAGCyAGQQBHDAILQY4LQbwIQfIEQZQIEAAACwwECyEeDAELAn8gDEEMaiEVQQAhDiAAQQJJBEAgDCgCFCIKIAwoAhAiEmsiA0EDdSIPIB8QLEYEQEEBIABBAkZBAXQgAEEBRhshHgJAIA8gBCAFbCIYbBASIgFFDQAgGARAIA9BASAPQQFLGyIAQX5xIQkgAEEBcSEIIAwoAhAhFkEAIREgA0EQSSEHA0ACQCAKIBJGDQBBACEAQQAhECAHRQRAA0AgASAWIABBA3QiBmoiAygCACAOamogAygCBCARai0AADoAACABIBYgBkEIcmoiAygCACAOamogAygCBCARai0AADoAACAAQQJqIQAgEEECaiIQIAlHDQALCyAIRQ0AIAEgFiAAQQN0aiIAKAIAIA5qaiAAKAIEIBFqLQAAOgAACyAOIA9qIQ4gEUEBaiIRIBhHDQALCyABIQBBACERAkAgHkUNAAJAAkACQCAfQQVrDgIAAgELAkAgHkECRw0AIAVFDQAgBEEBcSEWIARBAmtBfnEhECAEQQNJIQogACEDA0ACQCAKDQAgAygCBCEOQQAhD0ECIQYgBEEDRwRAA0AgAyAGQQJ0IhJqIgcgBygCACIHQYCAgHxxIA5qQYCAgHxxIAcgDmoiCUH///8DcXIiCDYCACADIBJBBHJqIgcgBygCACIHQYCAgHxxIAhqQYCAgHxxIAcgCWpB////A3FyIg42AgAgBkECaiEGIA9BAmoiDyAQRw0ACwsgFkUNACADIAZBAnRqIgYgBigCACIGQYCAgHxxIA5qQYCAgHxxIAYgDmpB////A3FyNgIACyADIARBAnRqIQMgEUEBaiIRIAVHDQALCyAeQQBMDQIgBUUNAiAEQQFrIgNBfnEhCiADQQFxIRJBACERIARBAkkhCQNAAkAgCQ0AIAAoAgAhDkEAIQ9BASEGIARBAkcEQANAIAAgBkECdGoiECAQKAIAIgNBgICAfHEgDmpBgICAfHEgAyAOaiIIQf///wNxciIHNgIAIBAgByAQKAIEIgNBgICAfHFqQYCAgHxxIAMgCGpB////A3FyIg42AgQgBkECaiEGIA9BAmoiDyAKRw0ACwsgEkUNACAAIAZBAnRqIgMgAygCACIDQYCAgHxxIA5qQYCAgHxxIAMgDmpB////A3FyNgIACyAAIARBAnRqIQAgEUEBaiIRIAVHDQALDAILQZMMQf8IQYEGQasLEAAACwJAIB5BAkcNACAFRQ0AIARBAXEhCiAEQQJrQX5xIRIgBEEDSSEJIAAhBgNAAkAgCQ0AIAYpAwghI0EAIQNBAiEOIARBA0cEQANAIAYgDkEDdCIIaiIHIAcpAwAiJEKAgICAgICAeIMgI3xCgICAgICAgHiDICMgJHwiJUL/////////B4OEIiM3AwAgBiAIQQhyaiIHICMgBykDACIkQoCAgICAgIB4g3xCgICAgICAgHiDICQgJXxC/////////weDhCIjNwMAIA5BAmohDiADQQJqIgMgEkcNAAsLIApFDQAgBiAOQQN0aiIDIAMpAwAiJEKAgICAgICAeIMgI3xCgICAgICAgHiDICMgJHxC/////////weDhDcDAAsgBiAEQQN0aiEGIBFBAWoiESAFRw0ACwsgHkEATA0AIAVFDQAgBEEBayIDQX5xIQkgA0EBcSEIQQAhBiAEQQJJIQcDQAJAIAcNACAAKQMAISNBACEDQQEhDiAEQQJHBEADQCAAIA5BA3RqIhIgEikDACIkQoCAgICAgIB4gyAjfEKAgICAgICAeIMgIyAkfCIlQv////////8Hg4QiIzcDACASICMgEikDCCIkQoCAgICAgIB4g3xCgICAgICAgHiDICQgJXxC/////////weDhCIjNwMIIA5BAmohDiADQQJqIgMgCUcNAAsLIAhFDQAgACAOQQN0aiIDIAMpAwAiJEKAgICAgICAeIMgI3xCgICAgICAgHiDICMgJHxC/////////weDhDcDAAsgACAEQQN0aiEAIAZBAWoiBiAFRw0ACwsgH0EFRgRAIAEgGBBQCyAVBEAgFSABNgIADAELIAEQBgsgAUEARwwCCwsMAwshHgsgDCgCECIAIAtHBEBBACEDIAAhCwNAIAsgA0EDdGooAgQQBiADQQFqIgMgDCgCFCAMKAIQIgtrQQN1SQ0ACwsgDCALNgIUIAwoAgwiAARAIAIgACAaICBsEAgaIAAQBgsgHgshASAMKAIQIgAEQCAAEAYLIAxBIGokACABDwtBBBACIgBB0As2AgAgAEG8EkEAEAEAC9cBAQV/AkAgAUUNACABQQFHBEAgAUF+cSEFA0AgACADQQJ0IgZqIgIgAigCACICQQF2QYCAgPwHcSACQf///wNxciACQQh0QYCAgIB4cXI2AgAgACAGQQRyaiICIAIoAgAiAkEBdkGAgID8B3EgAkH///8DcXIgAkEIdEGAgICAeHFyNgIAIANBAmohAyAEQQJqIgQgBUcNAAsLIAFBAXFFDQAgACADQQJ0aiIAIAAoAgAiAEEBdkGAgID8B3EgAEH///8DcXIgAEEIdEGAgICAeHFyNgIACwsLACAAEFIaIAAQBgsxAQJ/IABB7BU2AgAgACgCBEEMayIBIAEoAghBAWsiAjYCCCACQQBIBEAgARAGCyAAC90BAQR/IABBADYCCCAAQgA3AgACQCABBEAgAUGAgICABE8NASAAIAFBAnQiBBAJIgM2AgAgACADIARqIgQ2AgggAUEBa0H/////A3EhBSACKAIAIQIgAUEHcSIGBEBBACEBA0AgAyACNgIAIANBBGohAyABQQFqIgEgBkcNAAsLIAVBB08EQANAIAMgAjYCHCADIAI2AhggAyACNgIUIAMgAjYCECADIAI2AgwgAyACNgIIIAMgAjYCBCADIAI2AgAgA0EgaiIDIARHDQALCyAAIAQ2AgQLIAAPCxAKAAuaAQAgAEEBOgA1AkAgACgCBCACRw0AIABB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QmxvY2tTZXF1ZW5jZQByZXN0b3JlU2VxdWVuY2UAQXNzZXJ0aW9uIGZhaWxlZABzdGQ6OmJhZF9hbGxvYwBwcEJ5dGVbMF0gPT0gSFVGRk1BTl9OT1JNQUwAc2l6ZSA+IDAAUHVyZSB2aXJ0dWFsIGZ1bmN0aW9uIGNhbGxlZCEAQ250WkltYWdlIABMZXJjMiAAAAAAAAAAAHAGAAABAAAAAgAAAE42TGVyY05TMTBCaXRTdHVmZmVyRQAAALQJAABYBgAAAAAAAOgGAAAFAAAABgAAAAcAAAAIAAAACQAAAE42TGVyY05TOUNudFpJbWFnZUUATjZMZXJjTlM2VEltYWdlSU5TXzRDbnRaRUVFAE42TGVyY05TNUltYWdlRQC0CQAAxAYAANwJAACoBgAA1AYAANwJAACUBgAA3AYAAAAAAADcBgAACgAAAAsAAAAMAAAACAAAAAkAAAAAAAAAMAcAAA0AAAAOAAAATjZMZXJjTlM1TGVyYzJFALQJAAAgBwAAAAAAAGAHAAAPAAAAEAAAAE42TGVyY05TMTFCaXRTdHVmZmVyMkUAALQJAABIBwAAAAAAAIwHAAARAAAAEgAAAE42TGVyY05TN0JpdE1hc2tFAAAAtAkAAHgHAABOMTBfX2N4eGFiaXYxMTZfX3NoaW1fdHlwZV9pbmZvRQAAAADcCQAAlAcAAFgLAABOMTBfX2N4eGFiaXYxMTdfX2NsYXNzX3R5cGVfaW5mb0UAAADcCQAAxAcAALgHAABOMTBfX2N4eGFiaXYxMTdfX3BiYXNlX3R5cGVfaW5mb0UAAADcCQAA9AcAALgHAABOMTBfX2N4eGFiaXYxMTlfX3BvaW50ZXJfdHlwZV9pbmZvRQDcCQAAJAgAABgIAABOMTBfX2N4eGFiaXYxMjBfX2Z1bmN0aW9uX3R5cGVfaW5mb0UAAAAA3AkAAFQIAAC4BwAATjEwX19jeHhhYml2MTI5X19wb2ludGVyX3RvX21lbWJlcl90eXBlX2luZm9FAAAA3AkAAIgIAAAYCAAAAAAAAAgJAAATAAAAFAAAABUAAAAWAAAAFwAAAE4xMF9fY3h4YWJpdjEyM19fZnVuZGFtZW50YWxfdHlwZV9pbmZvRQDcCQAA4AgAALgHAAB2AAAAzAgAABQJAABEbgAAzAgAACAJAABjAAAAzAgAACwJAABQS2MAOAoAADgJAAABAAAAMAkAAGgAAADMCAAATAkAAGEAAADMCAAAWAkAAHMAAADMCAAAZAkAAHQAAADMCAAAcAkAAGkAAADMCAAAfAkAAGoAAADMCAAAiAkAAGYAAADMCAAAlAkAAGQAAADMCAAAoAkAAAAAAADoBwAAEwAAABgAAAAVAAAAFgAAABkAAAAaAAAAGwAAABwAAAAAAAAAJAoAABMAAAAdAAAAFQAAABYAAAAZAAAAHgAAAB8AAAAgAAAATjEwX19jeHhhYml2MTIwX19zaV9jbGFzc190eXBlX2luZm9FAAAAANwJAAD8CQAA6AcAAAAAAABICAAAEwAAACEAAAAVAAAAFgAAACIAAAAAAAAAsAoAAAQAAAAjAAAAJAAAAAAAAADYCgAABAAAACUAAAAmAAAAAAAAAJgKAAAEAAAAJwAAACgAAABTdDlleGNlcHRpb24AAAAAtAkAAIgKAABTdDliYWRfYWxsb2MAAAAA3AkAAKAKAACYCgAAU3QyMGJhZF9hcnJheV9uZXdfbGVuZ3RoAAAAANwJAAC8CgAAsAoAAAAAAAAICwAAAwAAACkAAAAqAAAAU3QxMWxvZ2ljX2Vycm9yANwJAAD4CgAAmAoAAAAAAAA8CwAAAwAAACsAAAAqAAAAU3QxMmxlbmd0aF9lcnJvcgAAAADcCQAAKAsAAAgLAABTdDl0eXBlX2luZm8AAAAAtAkAAEgLAEHgFgsDYA1Q",self.location).href;return console.log(n),n}});const wu=new it;class Ru extends Ae{constructor(){super();Y(this,"dataType","lerc");Y(this,"fileLoader",new _I(Dt.manager));this.fileLoader.setResponseType("arraybuffer")}load(t,e,i,s){if(e.coord.z<8)return setTimeout(i),new ne;const{url:o,rect:g}=Bg(t,e);return o?this._load(e,o,g,i,s):(setTimeout(i),wu)}_load(t,e,i,s,o){let g=t.coord.z*3;g=Math.min(Math.max(g,2),48);const r=new FI;return this.fileLoader.load(e,a=>{this.decode(a).then(I=>{const{data:E,size:C}=this.clip(I.dem,I.width,i,g);r.setData(E,C),s()})},void 0,a=>o(a),t.abortSignal),r}async decode(t){fu()||(console.log("load Lerc decoder"),await HI());const e=yu(t),{height:i,width:s,pixels:o}=e,g=new Float32Array(i*s);for(let r=0;r=t.sx&&g=t.sy&&rMath.PI&&(tt-=SA),VA<-Math.PI?VA+=SA:VA>Math.PI&&(VA-=SA),tt<=VA?g.theta=Math.max(tt,Math.min(VA,g.theta)):g.theta=g.theta>(tt+VA)/2?Math.max(tt,g.theta):Math.min(VA,g.theta)),g.phi=Math.max(e.minPolarAngle,Math.min(e.maxPolarAngle,g.phi)),g.makeSafe(),e.enableDamping===!0?e.target.addScaledVector(I,e.dampingFactor):e.target.add(I),e.target.sub(e.cursor),e.target.clampLength(e.minTargetRadius,e.maxTargetRadius),e.target.add(e.cursor);let mt=!1;if(e.zoomToCursor&&w||e.object.isOrthographicCamera)g.radius=dA(g.radius);else{const ht=g.radius;g.radius=dA(g.radius*a),mt=ht!=g.radius}if(x.setFromSpherical(g),x.applyQuaternion($),gt.copy(e.target).add(x),e.object.lookAt(e.target),e.enableDamping===!0?(r.theta*=1-e.dampingFactor,r.phi*=1-e.dampingFactor,I.multiplyScalar(1-e.dampingFactor)):(r.set(0,0,0),I.set(0,0,0)),e.zoomToCursor&&w){let ht=null;if(e.object.isPerspectiveCamera){const Ut=x.length();ht=dA(Ut*a);const pe=Ut-ht;e.object.position.addScaledVector(f,pe),e.object.updateMatrixWorld(),mt=!!pe}else if(e.object.isOrthographicCamera){const Ut=new M(_.x,_.y,0);Ut.unproject(e.object);const pe=e.object.zoom;e.object.zoom=Math.max(e.minZoom,Math.min(e.maxZoom,e.object.zoom/a)),e.object.updateProjectionMatrix(),mt=pe!==e.object.zoom;const qi=new M(_.x,_.y,0);qi.unproject(e.object),e.object.position.sub(qi).add(Ut),e.object.updateMatrixWorld(),ht=x.length()}else console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."),e.zoomToCursor=!1;ht!==null&&(this.screenSpacePanning?e.target.set(0,0,-1).transformDirection(e.object.matrix).multiplyScalar(ht).add(e.object.position):(os.origin.copy(e.object.position),os.direction.set(0,0,-1).transformDirection(e.object.matrix),Math.abs(e.object.up.dot(os.direction))o||8*(1-X.dot(e.object.quaternion))>o||sA.distanceToSquared(e.target)>o?(e.dispatchEvent(Na),b.copy(e.object.position),X.copy(e.object.quaternion),sA.copy(e.target),!0):!1}}(),this.dispose=function(){e.domElement.removeEventListener("contextmenu",wA),e.domElement.removeEventListener("pointerdown",TA),e.domElement.removeEventListener("pointercancel",D),e.domElement.removeEventListener("wheel",tA),e.domElement.removeEventListener("pointermove",N),e.domElement.removeEventListener("pointerup",D),e.domElement.getRootNode().removeEventListener("keydown",MA,{capture:!0}),e._domElementKeyEvents!==null&&(e._domElementKeyEvents.removeEventListener("keydown",cA),e._domElementKeyEvents=null)};const e=this,i={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6};let s=i.NONE;const o=1e-6,g=new da,r=new da;let a=1;const I=new M,E=new AA,C=new AA,Q=new AA,c=new AA,l=new AA,h=new AA,B=new AA,p=new AA,d=new AA,f=new M,_=new AA;let w=!1;const R=[],F={};let m=!1;function u(x){return x!==null?2*Math.PI/60*e.autoRotateSpeed*x:2*Math.PI/60/60*e.autoRotateSpeed}function L(x){const S=Math.abs(x*.01);return Math.pow(.95,e.zoomSpeed*S)}function k(x){r.theta-=x}function T(x){r.phi-=x}const P=function(){const x=new M;return function(S,$){x.setFromMatrixColumn($,0),x.multiplyScalar(-S),I.add(x)}}(),V=function(){const x=new M;return function(S,$){e.screenSpacePanning===!0?x.setFromMatrixColumn($,1):(x.setFromMatrixColumn($,0),x.crossVectors(e.object.up,x)),x.multiplyScalar(S),I.add(x)}}(),O=function(){const x=new M;return function(S,$){const b=e.domElement;if(e.object.isPerspectiveCamera){const X=e.object.position;x.copy(X).sub(e.target);let sA=x.length();sA*=Math.tan(e.object.fov/2*Math.PI/180),P(2*S*sA/b.clientHeight,e.object.matrix),V(2*$*sA/b.clientHeight,e.object.matrix)}else e.object.isOrthographicCamera?(P(S*(e.object.right-e.object.left)/e.object.zoom/b.clientWidth,e.object.matrix),V($*(e.object.top-e.object.bottom)/e.object.zoom/b.clientHeight,e.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),e.enablePan=!1)}}();function oA(x){e.object.isPerspectiveCamera||e.object.isOrthographicCamera?a/=x:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),e.enableZoom=!1)}function z(x){e.object.isPerspectiveCamera||e.object.isOrthographicCamera?a*=x:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),e.enableZoom=!1)}function BA(x,S){if(!e.zoomToCursor)return;w=!0;const $=e.domElement.getBoundingClientRect(),b=x-$.left,X=S-$.top,sA=$.width,SA=$.height;_.x=b/sA*2-1,_.y=-(X/SA)*2+1,f.set(_.x,_.y,1).unproject(e.object).sub(e.object.position).normalize()}function dA(x){return Math.max(e.minDistance,Math.min(e.maxDistance,x))}function uA(x){E.set(x.clientX,x.clientY)}function HA(x){BA(x.clientX,x.clientX),B.set(x.clientX,x.clientY)}function WA(x){c.set(x.clientX,x.clientY)}function Z(x){C.set(x.clientX,x.clientY),Q.subVectors(C,E).multiplyScalar(e.rotateSpeed);const S=e.domElement;k(2*Math.PI*Q.x/S.clientHeight),T(2*Math.PI*Q.y/S.clientHeight),E.copy(C),e.update()}function nA(x){p.set(x.clientX,x.clientY),d.subVectors(p,B),d.y>0?oA(L(d.y)):d.y<0&&z(L(d.y)),B.copy(p),e.update()}function mA(x){l.set(x.clientX,x.clientY),h.subVectors(l,c).multiplyScalar(e.panSpeed),O(h.x,h.y),c.copy(l),e.update()}function CA(x){BA(x.clientX,x.clientY),x.deltaY<0?z(L(x.deltaY)):x.deltaY>0&&oA(L(x.deltaY)),e.update()}function _A(x){let S=!1;switch(x.code){case e.keys.UP:x.ctrlKey||x.metaKey||x.shiftKey?T(2*Math.PI*e.rotateSpeed/e.domElement.clientHeight):O(0,e.keyPanSpeed),S=!0;break;case e.keys.BOTTOM:x.ctrlKey||x.metaKey||x.shiftKey?T(-2*Math.PI*e.rotateSpeed/e.domElement.clientHeight):O(0,-e.keyPanSpeed),S=!0;break;case e.keys.LEFT:x.ctrlKey||x.metaKey||x.shiftKey?k(2*Math.PI*e.rotateSpeed/e.domElement.clientHeight):O(e.keyPanSpeed,0),S=!0;break;case e.keys.RIGHT:x.ctrlKey||x.metaKey||x.shiftKey?k(-2*Math.PI*e.rotateSpeed/e.domElement.clientHeight):O(-e.keyPanSpeed,0),S=!0;break}S&&(x.preventDefault(),e.update())}function GA(x){if(R.length===1)E.set(x.pageX,x.pageY);else{const S=DA(x),$=.5*(x.pageX+S.x),b=.5*(x.pageY+S.y);E.set($,b)}}function UA(x){if(R.length===1)c.set(x.pageX,x.pageY);else{const S=DA(x),$=.5*(x.pageX+S.x),b=.5*(x.pageY+S.y);c.set($,b)}}function v(x){const S=DA(x),$=x.pageX-S.x,b=x.pageY-S.y,X=Math.sqrt($*$+b*b);B.set(0,X)}function j(x){e.enableZoom&&v(x),e.enablePan&&UA(x)}function iA(x){e.enableZoom&&v(x),e.enableRotate&&GA(x)}function IA(x){if(R.length==1)C.set(x.pageX,x.pageY);else{const $=DA(x),b=.5*(x.pageX+$.x),X=.5*(x.pageY+$.y);C.set(b,X)}Q.subVectors(C,E).multiplyScalar(e.rotateSpeed);const S=e.domElement;k(2*Math.PI*Q.x/S.clientHeight),T(2*Math.PI*Q.y/S.clientHeight),E.copy(C)}function rA(x){if(R.length===1)l.set(x.pageX,x.pageY);else{const S=DA(x),$=.5*(x.pageX+S.x),b=.5*(x.pageY+S.y);l.set($,b)}h.subVectors(l,c).multiplyScalar(e.panSpeed),O(h.x,h.y),c.copy(l)}function aA(x){const S=DA(x),$=x.pageX-S.x,b=x.pageY-S.y,X=Math.sqrt($*$+b*b);p.set(0,X),d.set(0,Math.pow(p.y/B.y,e.zoomSpeed)),oA(d.y),B.copy(p);const sA=(x.pageX+S.x)*.5,SA=(x.pageY+S.y)*.5;BA(sA,SA)}function fA(x){e.enableZoom&&aA(x),e.enablePan&&rA(x)}function pA(x){e.enableZoom&&aA(x),e.enableRotate&&IA(x)}function TA(x){e.enabled!==!1&&(R.length===0&&(e.domElement.setPointerCapture(x.pointerId),e.domElement.addEventListener("pointermove",N),e.domElement.addEventListener("pointerup",D)),!U(x)&&(JA(x),x.pointerType==="touch"?kA(x):q(x)))}function N(x){e.enabled!==!1&&(x.pointerType==="touch"?EA(x):eA(x))}function D(x){switch(LA(x),R.length){case 0:e.domElement.releasePointerCapture(x.pointerId),e.domElement.removeEventListener("pointermove",N),e.domElement.removeEventListener("pointerup",D),e.dispatchEvent(xa),s=i.NONE;break;case 1:const S=R[0],$=F[S];kA({pointerId:S,pageX:$.x,pageY:$.y});break}}function q(x){let S;switch(x.button){case 0:S=e.mouseButtons.LEFT;break;case 1:S=e.mouseButtons.MIDDLE;break;case 2:S=e.mouseButtons.RIGHT;break;default:S=-1}switch(S){case he.DOLLY:if(e.enableZoom===!1)return;HA(x),s=i.DOLLY;break;case he.ROTATE:if(x.ctrlKey||x.metaKey||x.shiftKey){if(e.enablePan===!1)return;WA(x),s=i.PAN}else{if(e.enableRotate===!1)return;uA(x),s=i.ROTATE}break;case he.PAN:if(x.ctrlKey||x.metaKey||x.shiftKey){if(e.enableRotate===!1)return;uA(x),s=i.ROTATE}else{if(e.enablePan===!1)return;WA(x),s=i.PAN}break;default:s=i.NONE}s!==i.NONE&&e.dispatchEvent(Go)}function eA(x){switch(s){case i.ROTATE:if(e.enableRotate===!1)return;Z(x);break;case i.DOLLY:if(e.enableZoom===!1)return;nA(x);break;case i.PAN:if(e.enablePan===!1)return;mA(x);break}}function tA(x){e.enabled===!1||e.enableZoom===!1||s!==i.NONE||(x.preventDefault(),e.dispatchEvent(Go),CA(gA(x)),e.dispatchEvent(xa))}function gA(x){const S=x.deltaMode,$={clientX:x.clientX,clientY:x.clientY,deltaY:x.deltaY};switch(S){case 1:$.deltaY*=16;break;case 2:$.deltaY*=100;break}return x.ctrlKey&&!m&&($.deltaY*=10),$}function MA(x){x.key==="Control"&&(m=!0,e.domElement.getRootNode().addEventListener("keyup",hA,{passive:!0,capture:!0}))}function hA(x){x.key==="Control"&&(m=!1,e.domElement.getRootNode().removeEventListener("keyup",hA,{passive:!0,capture:!0}))}function cA(x){e.enabled===!1||e.enablePan===!1||_A(x)}function kA(x){switch(W(x),R.length){case 1:switch(e.touches.ONE){case xe.ROTATE:if(e.enableRotate===!1)return;GA(x),s=i.TOUCH_ROTATE;break;case xe.PAN:if(e.enablePan===!1)return;UA(x),s=i.TOUCH_PAN;break;default:s=i.NONE}break;case 2:switch(e.touches.TWO){case xe.DOLLY_PAN:if(e.enableZoom===!1&&e.enablePan===!1)return;j(x),s=i.TOUCH_DOLLY_PAN;break;case xe.DOLLY_ROTATE:if(e.enableZoom===!1&&e.enableRotate===!1)return;iA(x),s=i.TOUCH_DOLLY_ROTATE;break;default:s=i.NONE}break;default:s=i.NONE}s!==i.NONE&&e.dispatchEvent(Go)}function EA(x){switch(W(x),s){case i.TOUCH_ROTATE:if(e.enableRotate===!1)return;IA(x),e.update();break;case i.TOUCH_PAN:if(e.enablePan===!1)return;rA(x),e.update();break;case i.TOUCH_DOLLY_PAN:if(e.enableZoom===!1&&e.enablePan===!1)return;fA(x),e.update();break;case i.TOUCH_DOLLY_ROTATE:if(e.enableZoom===!1&&e.enableRotate===!1)return;pA(x),e.update();break;default:s=i.NONE}}function wA(x){e.enabled!==!1&&x.preventDefault()}function JA(x){R.push(x.pointerId)}function LA(x){delete F[x.pointerId];for(let S=0;S{const o=Math.max(this.controls.getPolarAngle(),.1),g=Math.max(this.controls.getDistance(),.1);s.zoomSpeed=Math.max(Math.log(g),1.8),this.camera.far=Ri.clamp(g/o*8,100,5e4),this.camera.near=this.camera.far/1e3,this.camera.updateProjectionMatrix(),this.scene.fog instanceof ls&&(this.scene.fog.density=o/(g+5)/4*this.fogFactor),g>8e3?(s.minAzimuthAngle=0,s.maxAzimuthAngle=0):(s.minAzimuthAngle=-1/0,s.maxAzimuthAngle=1/0),s.maxPolarAngle=Math.min(Math.pow(1e4,4)/Math.pow(g,4),1.1)}),s.saveState(),s}_createAmbLight(){return new Nd(16777215,1.5)}_createDirLight(){const t=new Md(16777215,1.5);return t.target.position.copy(this.controls.target),t.position.set(-1e3,-2e3,1e4),t}resize(){const t=this.width,e=this.height;return this.renderer.setPixelRatio(window.devicePixelRatio),this.renderer.setSize(t,e),this.camera.aspect=t/e,this.camera.updateProjectionMatrix(),this}animate(){this.controls.update(),this.renderer.render(this.scene,this.camera),this.dispatchEvent({type:"update",delta:this._clock.getDelta()}),requestAnimationFrame(this.animate.bind(this))}}class Lu extends Mt{constructor(t){super(t);Y(this,"token","");Y(this,"format","webp");Y(this,"style","mapbox.satellite");Y(this,"attribution","MapBox");Y(this,"maxLevel",19);Y(this,"url","https://api.mapbox.com/v4/{style}/{z}/{x}/{y}.{format}?access_token={token}");Object.assign(this,t)}}class vu extends Mt{constructor(t){super(t);Y(this,"dataType","image");Y(this,"attribution","ArcGIS");Y(this,"style","World_Imagery");Y(this,"url","https://services.arcgisonline.com/arcgis/rest/services/{style}/MapServer/tile/{z}/{y}/{x}");Object.assign(this,t)}}class Uu extends Mt{constructor(t){super(t);Y(this,"dataType","lerc");Y(this,"attribution","ArcGIS");Y(this,"maxLevel",13);Y(this,"url","https://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer/tile/{z}/{y}/{x}");Object.assign(this,t)}}class Gu extends Mt{constructor(t){super(t);Y(this,"dataType","image");Y(this,"attribution","Bing[GS(2021)1731号]");Y(this,"style","A");Y(this,"mkt","zh-CN");Y(this,"subdomains","123");Object.assign(this,t)}getUrl(t,e,i){const s=Tu(i,t,e);return`https://t${this.s}.dynamic.tiles.ditu.live.com/comp/ch/${s}?mkt=${this.mkt}&ur=CN&it=${this.style}&n=z&og=804&cstl=vb`}}function Tu(n,A,t){let e="";for(let i=n;i>0;i--){const s=1<>4,o=(1<>4,g=Math.pow(2,i)-1-e;return`https://p${this.s}.map.gtimg.com/${this.style}/${i}/${s}/${o}/${t}_${g}.jpg`}}class Yu extends Mt{constructor(t){super(t);Y(this,"attribution","中科星图[GS(2022)3995号]");Y(this,"token","");Y(this,"style","img");Y(this,"format","webp");Y(this,"subdomains","12");Y(this,"url","https://tiles{s}.geovisearth.com/base/v1/{style}/{z}/{x}/{y}?format={format}&tmsIds=w&token={token}");Object.assign(this,t)}}const Ku=` +varying vec2 vUv; +uniform vec3 bkColor; +uniform vec3 airColor; + +void main() { + vUv = uv; + gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); +} +`,Wu=` + + + +varying vec2 vUv; +uniform vec3 bkColor; +uniform vec3 airColor; + +void main() { + + // 当前点距中点的距离 + float d = distance(vUv, vec2(0.5f))*5.0f; + + if(d<0.49f){ + // 球体颜色 + float a = smoothstep(0.0f,0.4f,d-0.12f); + gl_FragColor = vec4(vec3(0.0f), a); + } else if(d<0.5){ + float c = (d-0.48f)/0.02f; + gl_FragColor =vec4(mix(vec3(0.0f),airColor,c*c),1.5f-d); + } else if(d<0.53f){ + // 光晕(0.48-0.52) + float c = (d-0.49f)/0.04f; + gl_FragColor = vec4(mix(airColor,bkColor,sqrt(c)),1.0); + } else{ + // 球体外颜色 + gl_FragColor = vec4(bkColor,1.0f); + } + + // #include + // #include + // #include + +} +`;class PI extends ie{constructor(A){super({uniforms:za.merge([lA.fog,{bkColor:{value:A.bkColor},airColor:{value:A.airColor}}]),transparent:!0,depthTest:!1,vertexShader:Ku,fragmentShader:Wu,lights:!1})}}class Vu extends St{get bkColor(){return this.material.uniforms.bkColor.value}set bkColor(A){this.material.uniforms.bkColor.value.set(A)}constructor(A,t=new FA(6724044)){super(new ne(5,5),new PI({bkColor:A,airColor:t})),this.renderOrder=999}}const Ct=Object.freeze(Object.defineProperty({__proto__:null,ArcGisDemSource:Uu,ArcGisSource:vu,BingSource:Gu,EarthMaskMaterial:PI,FakeEarth:Vu,GDSource:ku,GLViewer:_u,GeoqSource:bu,GoogleSource:Hu,MapBoxSource:Lu,MapTilerSource:Pu,StadiaSource:Ou,TDTSource:Ju,TXSource:qu,ZKXTSource:Yu},Symbol.toStringTag,{value:"Module"})),hg="pk.eyJ1Ijoic2hhbmUwMjIwNzIiLCJhIjoiY2p5amF6YnFiMDB0YjNkcGU1ZWxoMWl0NiJ9.TsmgK5-HJKWOE-DscbNbTA",yf=new Ct.MapBoxSource({token:hg,dataType:"image",style:"mapbox.satellite"}),wf=new Ct.MapBoxSource({token:hg,dataType:"terrain-rgb",style:"mapbox.terrain-rgb",maxLevel:15});new Ct.MapBoxSource({token:hg,dataType:"image",style:"mapbox.terrain-rgb",maxLevel:15});const bs="4ea7bc4e9a2efc4e76be33d9511600dfa3b4f24bb81cb69561ab0b833d9b482c";new Ct.ZKXTSource({token:bs,dataType:"image",style:"img",format:"webp"});const Rf=new Ct.ZKXTSource({token:bs,dataType:"image",style:"cia",format:"webp"}),Sf=new Ct.ZKXTSource({token:bs,dataType:"terrain-rgb",style:"terrain_rgb",format:"png",maxLevel:10});new Ct.ZKXTSource({token:bs,dataType:"image",style:"terrain_rgb",format:"png",maxLevel:10});const cg="get_your_own_key_QmavnBrQwNGsQ8YvPzZg";new Ct.MapTilerSource({token:cg,dataType:"image",style:"satellite",format:"jpg"});const Mf=new Ct.MapTilerSource({token:cg,dataType:"terrain-rgb",style:"terrain-rgb",format:"png",maxLevel:12});new Ct.MapTilerSource({token:cg,dataType:"image",style:"terrain-rgb",format:"png",maxLevel:12});const Hs="56b81006f361f6406d0e940d2f89a39c";new Ct.TDTSource({token:Hs,style:"img_w"});new Ct.TDTSource({token:Hs,style:"cia_w"});new Ct.TDTSource({token:Hs,style:"cta_w"});new Ct.TDTSource({token:Hs,style:"img_c",projectionID:"4326"});const Nf=new Ct.BingSource({style:"A,L"});new Ct.GDSource({style:"6"});new Ct.GDSource({style:"8"});new Ct.ArcGisSource;new Ct.ArcGisDemSource;new Ct.ArcGisSource({style:"Reference/World_Boundaries_and_Places"});new Ct.TXSource;const xf=new Ct.GoogleSource;new Mt({dataType:"test"});export{ds as $,Df as A,hn as B,QI as C,BI as D,ue as E,df as F,Pn as G,uf as H,ls as I,Te as J,sf as K,of as L,hg as M,mg as N,st as O,ne as P,fa as Q,fI as R,pI as S,Ef as T,Ge as U,M as V,wl as W,Mt as X,TI as Y,it as Z,Sl as _,yf as a,xl as a$,nt as a0,Qf as a1,If as a2,XI as a3,Cf as a4,lf as a5,vt as a6,xI as a7,Zt as a8,Ai as a9,Lt as aA,jd as aB,Bt as aC,Dt as aD,Hi as aE,he as aF,xe as aG,da as aH,Xu as aI,ju as aJ,Zu as aK,Bf as aL,gf as aM,tf as aN,Zr as aO,hf as aP,Wt as aQ,Xe as aR,$t as aS,Qd as aT,$A as aU,Af as aV,Fs as aW,ef as aX,Za as aY,oI as aZ,Ea as a_,OA as aa,In as ab,ce as ac,Jt as ad,Ae as ae,af,Pt as ag,ke as ah,cf as ai,SE as aj,Ri as ak,Ll as al,nf as am,$u as an,Ml as ao,xf as ap,Nf as aq,dI as ar,mf as as,de as at,Fe as au,je as av,za as aw,lA as ax,ie as ay,Po as az,AA as b,Jo as b0,At as b1,Rt as b2,_E as b3,qs as b4,un as b5,ze as b6,Oo as b7,Es as b8,ms as b9,Ds as ba,Gs as bb,jt as bc,fe as bd,Us as be,ja as bf,xi as bg,ee as bh,pf as c,KA as d,St as e,hd as f,rf as g,ff as h,_s as i,EI as j,CI as k,mI as l,wf as m,uI as n,DI as o,vl as p,Ct as q,FA as r,Mf as s,Sf as t,Rl as u,_t as v,Nd as w,Rf as x,Md as y,NI as z}; diff --git a/docs/assets/step1.1-7de44970.js b/docs/assets/step1.1-7de44970.js new file mode 100644 index 0000000..2644d6b --- /dev/null +++ b/docs/assets/step1.1-7de44970.js @@ -0,0 +1 @@ +import"./modulepreload-polyfill-3cfb730f.js";import{q as o,Y as c,M as n}from"./mapSource-2c762b60.js";const a=document.querySelector("#map"),m=new o.GLViewer(a),r=n,t=new o.MapBoxSource({token:r,dataType:"image",style:"mapbox.satellite"}),l=new o.MapBoxSource({token:r,dataType:"terrain-rgb",style:"mapbox.terrain-rgb",maxLevel:15}),e=c.create({imgSource:t,demSource:l,lon0:90,minLevel:2,maxLevel:18});m.scene.add(e);document.querySelector("#mapbox").addEventListener("click",()=>{e.imgSource=t,e.reload()});document.querySelector("#bing").addEventListener("click",()=>{e.imgSource=new o.BingSource,e.reload()});document.querySelector("#gd").addEventListener("click",()=>{e.imgSource=[new o.GDSource({style:"6"}),new o.GDSource({style:"8"})],e.reload()});document.querySelector("#tx").addEventListener("click",()=>{e.imgSource=[new o.TXSource,new o.GDSource({style:"8"})],e.reload()}); diff --git a/docs/assets/step1.10-a3595beb.js b/docs/assets/step1.10-a3595beb.js new file mode 100644 index 0000000..981a3e5 --- /dev/null +++ b/docs/assets/step1.10-a3595beb.js @@ -0,0 +1 @@ +import"./modulepreload-polyfill-3cfb730f.js";import{V as s,a as i,q as m,r as p}from"./mapSource-2c762b60.js";import{c as d,a as f,u as l,s as h,b as w}from"./util-e741174c.js";const e=d([i]),r=e.geo2pos(new s(105,34)),g=new s(r.x,r.y,0),u=new s(0,-5e3,1e4),o=f("#map",g,u);o.scene.add(e);l(o);function k(t,c){var n;const a=new m.FakeEarth(((n=t.scene.fog)==null?void 0:n.color)||new p(0));return a.name="fakeearth",a.applyMatrix4(c.rootTile.matrix),t.controls.addEventListener("change",()=>{a.visible=t.controls.getDistance()>3e3}),a}e.add(k(o,e));h(o,e);w(e); diff --git a/docs/assets/step1.2-39352c0d.js b/docs/assets/step1.2-39352c0d.js new file mode 100644 index 0000000..4084b36 --- /dev/null +++ b/docs/assets/step1.2-39352c0d.js @@ -0,0 +1 @@ +import"./modulepreload-polyfill-3cfb730f.js";import{c as u,a as y}from"./util-e741174c.js";import{V as n,m as x,a as w}from"./mapSource-2c762b60.js";import{e as c}from"./tween.module-e5a426a4.js";const m=u(w,x),e=m.geo2pos(new n(108,34)),f=new n(e.x,e.y,0),g=new n(0,-2e3,5e3),o=y("#map",f,g);o.scene.add(m);document.querySelector("#jump").addEventListener("click",()=>{o.controls.target.set(e.x,e.y,0),o.camera.position.set(e.x,e.y-300,500)});document.querySelector("#timer").addEventListener("click",()=>{o.controls.target.set(e.x,e.y,0);const t=o.camera.position;t.set(e.x,e.y,1e4);const r=setInterval(()=>{t.add(new n(0,-30,-200)),t.z<2e3&&clearInterval(r)},20)});document.querySelector("#tween").addEventListener("click",()=>{E(o,m,138.732,35.35)});document.querySelector("#reset").addEventListener("click",()=>{o.controls.reset()});function E(t,r,d,p){const s=r.geo2pos(new n(d,p));t.controls.target.set(s.x,s.y,0);const a=t.camera,i=new c.Tween(a.position);i.to({x:a.position.x,y:0,z:8e3},1e3);const l=new c.Tween(a.position);l.to({x:s.x,y:s.y-10,z:6},1500).easing(c.Easing.Quartic.Out),i.chain(l),t.controls.enabled=!1,i.start().onComplete(()=>{t.controls.enabled=!0})}o.addEventListener("update",()=>c.update()); diff --git a/docs/assets/step1.3-2106ab51.js b/docs/assets/step1.3-2106ab51.js new file mode 100644 index 0000000..2d28974 --- /dev/null +++ b/docs/assets/step1.3-2106ab51.js @@ -0,0 +1,13 @@ +import"./modulepreload-polyfill-3cfb730f.js";import{V as a,m as d,a as l,x,b as f}from"./mapSource-2c762b60.js";import{c as F,a as $}from"./util-e741174c.js";const c=F([l,x],d),m=c.geo2pos(new a(108.95,34.2)),p=new a(m.x,m.y,0),g=new a(0,-50,40),i=$("#map",p,g);i.scene.add(c);function u(o,n){const e=new f;o.container.addEventListener("pointermove",r=>{e.x=r.clientX/o.renderer.domElement.clientWidth*2-1,e.y=-(r.clientY/o.renderer.domElement.clientHeight)*2+1;const t=n.getLocalInfoFromScreen(o.camera,e);if(t){const s=document.querySelector("#local-info");s.innerHTML=`经度:${t.location.x.toFixed(2)}° + 纬度:${t.location.y.toFixed(2)}° + 海拔:${t.location.z.toFixed(2)}km + 距离:${t.distance.toFixed(2)}km `,t.normal&&(s.innerHTML+=`法向量:(${t.normal.x.toFixed(1)}, + ${t.normal.y.toFixed(1)}, + ${t.normal.z.toFixed(1)})(可用于坡向计算)`)}})}function h(o){const n=()=>{const e=document.querySelector("#camera-info");e&&(e.innerHTML=`摄像机:(${o.camera.position.x.toFixed(1)}, + ${o.camera.position.y.toFixed(1)}, + ${o.camera.position.z.toFixed(1)}), + near:${o.camera.near.toFixed(1)}, + far:${o.camera.far.toFixed(1)}, + 方位角:${(o.controls.getAzimuthalAngle()*180/Math.PI).toFixed(1)}°, + 俯仰角:${(o.controls.getPolarAngle()*180/Math.PI).toFixed(1)}°, + 距离:${o.controls.getDistance().toFixed(1)}km`)};o.controls.addEventListener("change",n),n()}u(i,c);h(i); diff --git a/docs/assets/step1.4-8d360382.js b/docs/assets/step1.4-8d360382.js new file mode 100644 index 0000000..8ed36d3 --- /dev/null +++ b/docs/assets/step1.4-8d360382.js @@ -0,0 +1 @@ +import"./modulepreload-polyfill-3cfb730f.js";import{V as r,m as i,a as d}from"./mapSource-2c762b60.js";import{c,a as m,s as l}from"./util-e741174c.js";const t=c(d,i),a=t.geo2pos(new r(138.732,35.35)),L=new r(a.x,a.y,0),g=new r(0,-8,5),s=m("#map",L,g);s.scene.add(t);(n=>{const o=document.querySelector("#loading");o&&(n.addEventListener("loading-start",e=>{o.innerHTML="Started: "+e.itemsLoaded+" of "+e.itemsTotal+" files."}),n.addEventListener("loading-progress",e=>{o.innerHTML="Loading: "+e.itemsLoaded+" of "+e.itemsTotal+" files."}),n.addEventListener("loading-complete",()=>{o.innerHTML="Loading complete!"}),n.addEventListener("loading-error",e=>{o.innerHTML="There was an error loading "+e}))})(t);l(s,t); diff --git a/docs/assets/step1.5-3a3f4300.js b/docs/assets/step1.5-3a3f4300.js new file mode 100644 index 0000000..2aece05 --- /dev/null +++ b/docs/assets/step1.5-3a3f4300.js @@ -0,0 +1,4 @@ +import"./modulepreload-polyfill-3cfb730f.js";import{V as o,A as w,G as x,c as m,m as y,a as f}from"./mapSource-2c762b60.js";import{C as g,a as u}from"./CSS2DRenderer-3bb201fb.js";import{c as h,a as E,s as L,b as S}from"./util-e741174c.js";const a=h(f,y),p=a.geo2pos(new o(95,25)),v=new o(p.x,p.y,0),F=new o(0,-2e3,3e3),e=E("#map",v,F);e.scene.add(a);const c=new g;c.setSize(e.container.clientWidth,e.container.clientHeight);c.domElement.style.position="absolute";e.container.appendChild(c.domElement);e.addEventListener("update",()=>{c.render(e.scene,e.camera)});window.addEventListener("resize",()=>c.setSize(e.container.clientWidth,e.container.clientHeight));e.controls.addEventListener("change",()=>{c.domElement.style.display=e.controls.getDistance()<1e4?"inline":"none"});(()=>{const t=new w(3e3);t.position.set(p.x,p.y,10),e.scene.add(t)})();const l=new x;a.add(l);(()=>{const t=new o(0,0,1);for(let n=60;n<140;n+=10)for(let s=0;s<70;s+=10){const i=a.geo2pos(new o(n,s)),r=new m(t,new o(i.x,i.y,-1),50);l.add(r)}l.traverse(n=>{if(n instanceof m){const s=document.createElement("span");s.className="label";const i=a.pos2geo(new o(n.position.x,n.position.y));s.innerHTML=`${i.x.toFixed(0)},${i.y.toFixed(0)}`,s.addEventListener("mouseenter",()=>{const d=a.getLocalInfoFromGeo(new o(i.x,i.y));d&&(s.title=`场景坐标: +x: ${d.point.x.toFixed(3)} +y: ${d.point.y.toFixed(3)} +z: ${d.point.z.toFixed(3)}`)});const r=new u(s);r.position.copy(n.position.clone().add(new o(0,0,10))),l.add(r)}})})();(()=>{const t=new w;e.scene.add(t),e.controls.addEventListener("change",()=>{e.camera.updateMatrixWorld();const n=new o(-.9,-.85,0).unproject(e.camera);t.position.copy(n),t.scale.setScalar(t.position.distanceTo(e.camera.position)/50)})})();L(e,a);S(a); diff --git a/docs/assets/step1.6-4e2ea0ff.js b/docs/assets/step1.6-4e2ea0ff.js new file mode 100644 index 0000000..c82c548 --- /dev/null +++ b/docs/assets/step1.6-4e2ea0ff.js @@ -0,0 +1 @@ +import"./modulepreload-polyfill-3cfb730f.js";import{V as n,G as d,c}from"./mapSource-2c762b60.js";import{C as p,a as w}from"./CSS2DRenderer-3bb201fb.js";import{c as f,a as h,s as S,b}from"./util-e741174c.js";const y=[{name:"沈阳市",value:["123.429092","41.796768"]},{name:"长春市",value:["125.324501","43.886841"]},{name:"哈尔滨市",value:["126.642464","45.756966"]},{name:"北京市",value:["116.405289","39.904987"]},{name:"天津市",value:["117.190186","39.125595"]},{name:"呼和浩特市",value:["111.751990","40.841490"]},{name:"银川市",value:["106.232480","38.486440"]},{name:"太原市",value:["112.549248","37.857014"]},{name:"石家庄市",value:["114.502464","38.045475"]},{name:"济南市",value:["117.000923","36.675808"]},{name:"郑州市",value:["113.665413","34.757977"]},{name:"西安市",value:["108.948021","34.263161"],about:"Guojf.SXMB"},{name:"武汉市",value:["114.298569","30.584354"]},{name:"南京市",value:["118.76741","32.041546"]},{name:"合肥市",value:["117.283043","31.861191"]},{name:"上海市",value:["121.472641","31.231707"]},{name:"长沙市",value:["112.982277","28.19409"]},{name:"南昌市",value:["115.892151","28.676493"]},{name:"杭州市",value:["120.15358","30.287458"]},{name:"福州市",value:["119.306236","26.075302"]},{name:"广州市",value:["113.28064","23.125177"]},{name:"台北市",value:["121.5200760","25.0307240"]},{name:"海口市",value:["110.199890","20.044220"]},{name:"南宁市",value:["108.320007","22.82402"]},{name:"重庆市",value:["106.504959","29.533155"]},{name:"昆明市",value:["102.71225","25.040609"]},{name:"贵阳市",value:["106.713478","26.578342"]},{name:"成都市",value:["104.065735","30.659462"]},{name:"兰州市",value:["103.834170","36.061380"]},{name:"西宁市",value:["101.777820","36.617290"]},{name:"拉萨市",value:["91.11450","29.644150"]},{name:"乌鲁木齐市",value:["87.616880","43.826630"]},{name:"香港",value:["114.165460","22.275340"]},{name:"澳门",value:["113.549130","22.198750"]}];const o=f(),i=o.geo2pos(new n(110,34)),E=new n(i.x,i.y,0),g=new n(0,-2e3,3e3),e=h("#map",E,g);e.scene.add(o);const l=new p;l.setSize(e.container.clientWidth,e.container.clientHeight);l.domElement.style.position="absolute";e.container.appendChild(l.domElement);e.addEventListener("update",()=>{l.render(e.scene,e.camera)});window.addEventListener("resize",()=>l.setSize(e.container.clientWidth,e.container.clientHeight));const m=new d;o.add(m);(()=>{const v=new n(0,0,1);y.forEach(a=>{const t=Number.parseFloat(a.value[0]),s=Number.parseFloat(a.value[1]),u=o.geo2pos(new n(t,s)),r=new c(v,new n(u.x,u.y,-2),20);r.name=a.name,r.userData=a,m.add(r)}),m.traverse(a=>{if(a instanceof c){const t=document.createElement("span");t.className="label",t.innerHTML=`${a.name}`,t.title=`${JSON.stringify(a.userData)}`;const s=new w(t);s.position.copy(a.position.clone().add(new n(0,0,1))),m.add(s)}})})();S(e,o);b(o); diff --git a/docs/assets/step1.7-4cf19b0f.js b/docs/assets/step1.7-4cf19b0f.js new file mode 100644 index 0000000..b6bfc7c --- /dev/null +++ b/docs/assets/step1.7-4cf19b0f.js @@ -0,0 +1 @@ +import"./modulepreload-polyfill-3cfb730f.js";import{V as t,e as d,P as l,f as y,T as g,b as w,a as M,x as f,d as h}from"./mapSource-2c762b60.js";import{c as u,a as L,s as P,b as V}from"./util-e741174c.js";const s=u([M,f]),m=s.geo2pos(new t(105,34)),b=new t(m.x,m.y,0),E=new t(0,-3e3,4e3),p=L("#map",b,E);p.scene.add(s);s.addEventListener("tile-loaded",e=>{e.tile.material.forEach(a=>{var o;return(o=a.color)==null?void 0:o.set(8947848)})});const _=(e,a,o)=>{const n=s.geo2pos(new t(e.x,e.y)),r=s.geo2pos(new t(a.x,a.y)),c=new t(r.x-n.x,r.y-n.y,1),x=new t(n.x+c.x/2,r.y-c.y/2,o),i=new h;return i.setPosition(x),i.scale(c),i};(()=>{const e=new d(new l,new y({map:new g().load("../image/ACHN_QREF_20210725_100000.png"),transparent:!0})),a=new w(67,11),o=new w(140,57);e.applyMatrix4(_(a,o,6)),e.renderOrder=10,p.scene.add(e)})();P(p,s);V(s); diff --git a/docs/assets/step1.8-14208c5a.js b/docs/assets/step1.8-14208c5a.js new file mode 100644 index 0000000..728728b --- /dev/null +++ b/docs/assets/step1.8-14208c5a.js @@ -0,0 +1 @@ +import"./modulepreload-polyfill-3cfb730f.js";import{V as a,G as l,g as m,T as x,B as g,e as c,h,S as f,R as G,C as u,i as T,j as C,k as M,D as P,l as I,n as S,o as v,P as X,p as B,a as L,x as b}from"./mapSource-2c762b60.js";import{T as O}from"./TeapotGeometry-eb533028.js";import{c as R,a as V,b as j,s as D}from"./util-e741174c.js";const t=R([L,b]),w=t.geo2pos(new a(105,35)),E=new a(w.x,w.y,0),k=new a(0,-3e3,2e3),d=V("#map",E,k);d.scene.add(t);t.addEventListener("tile-loaded",o=>{o.tile.material.forEach(s=>{var e;return(e=s.color)==null?void 0:e.set(8947848)})});const n=new l;n.renderOrder=10;const r=new m({map:new x().load("../image/test.jpg"),shininess:30});(()=>{const o=new g(8e3,8e3,1e3),s=new c(o);s.position.set(w.x,w.y,1600),n.add(new h(s))})();(()=>{const o=t.geo2pos(new a(80,40)),s=new g(500,500,300),e=new c(s,r);e.position.set(o.x,o.y,150),n.add(e)})();(()=>{const o=t.geo2pos(new a(90,40)),s=new f(300),e=new c(s,r);e.position.set(o.x,o.y,150),n.add(e)})();(()=>{const o=t.geo2pos(new a(100,40)),s=new G(100,300),e=new c(s,r);e.position.set(o.x,o.y,150),n.add(e)})();(()=>{const o=t.geo2pos(new a(110,40)),s=new O(200),e=new c(s,r);e.position.set(o.x,o.y,100),e.rotateX(Math.PI/2),n.add(e)})();(()=>{const o=t.geo2pos(new a(120,40)),s=new u(300,500),e=new c(s,r);e.position.set(o.x,o.y,150),e.rotateX(Math.PI/2),n.add(e)})();(()=>{const o=t.geo2pos(new a(130,40)),s=new T(200,300,300),e=new c(s,r);e.position.set(o.x,o.y,150),e.rotateX(Math.PI/2),n.add(e)})();(()=>{const o=t.geo2pos(new a(80,30)),s=new C(150,200),e=new c(s,r);e.position.set(o.x,o.y,100),e.rotateX(Math.PI/2),n.add(e)})();(()=>{const o=t.geo2pos(new a(90,30)),s=new M(200),e=new c(s,r);e.position.set(o.x,o.y,100),n.add(e)})();(()=>{const o=t.geo2pos(new a(100,30)),s=new P(200),e=new c(s,r);e.position.set(o.x,o.y,100),n.add(e)})();(()=>{const o=t.geo2pos(new a(110,30)),s=new I(200,50),e=new c(s,r);e.position.set(o.x,o.y,100),n.add(e)})();(()=>{const o=t.geo2pos(new a(120,30)),s=new S(200),e=new c(s,r);e.position.set(o.x,o.y,100),n.add(e)})();(()=>{const o=t.geo2pos(new a(130,30)),s=new v(200,80),e=new c(s,r);e.position.set(o.x,o.y,100),n.add(e)})();(()=>{const o=t.geo2pos(new a(105,50)),s=new X(8e3,2e3),e=new OffscreenCanvas(2400,600),p=e.getContext("2d");p.fillStyle="#0033ff88",p.fillRect(0,0,e.width,e.height),p.fillStyle="#ffffff",p.font="bold 96px arial",p.textAlign="center",p==null||p.fillText("Three-Tile 几何体演示",1200,200);const y=new m({map:new B(e),transparent:!0}),i=new c(s,y);i.position.set(o.x,o.y,0),i.rotateX(Math.PI/2),n.add(new h(i)),n.add(i)})();d.scene.add(n);j(t);D(d,t); diff --git a/docs/assets/step1.9-fa4f073e.js b/docs/assets/step1.9-fa4f073e.js new file mode 100644 index 0000000..6ef68ac --- /dev/null +++ b/docs/assets/step1.9-fa4f073e.js @@ -0,0 +1 @@ +import"./modulepreload-polyfill-3cfb730f.js";import{V as o,a as c,x as m}from"./mapSource-2c762b60.js";import{c as p,a as l,s as i,b as d}from"./util-e741174c.js";const t=p([c,m]),r=t.geo2pos(new o(105,34)),u=new o(r.x,r.y,0),f=new o(0,-3e3,4e3),s=l("#map",u,f);s.scene.add(t);function g(e){e.addEventListener("update",x=>{const a=document.querySelector("#compass-plane");a&&(a.style.transform=`rotateX(${e.controls.getPolarAngle()}rad)`);const n=document.querySelector("#compass-text");n&&(n.style.transform=`rotate(${e.controls.getAzimuthalAngle()}rad)`)})}g(s);i(s,t);d(t); diff --git a/docs/assets/step2.1-065a2316.js b/docs/assets/step2.1-065a2316.js new file mode 100644 index 0000000..01f36e8 --- /dev/null +++ b/docs/assets/step2.1-065a2316.js @@ -0,0 +1 @@ +var x=Object.defineProperty;var v=(t,a,o)=>a in t?x(t,a,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[a]=o;var s=(t,a,o)=>(v(t,typeof a!="symbol"?a+"":a,o),o);import"./modulepreload-polyfill-3cfb730f.js";import{V as c,X as r,a as g,q as h,m as E}from"./mapSource-2c762b60.js";import{c as T,a as L,d as q,e as z,s as k,b as G}from"./util-e741174c.js";const e=T(g,E),n=e.geo2pos(new c(100.3,37)),f=new c(n.x,n.y,0),A=new c(-6,-100,100),i=L("#map",f,A);i.scene.add(e);q(i,e);var d;(d=document.querySelector("#arcgis"))==null||d.addEventListener("click",()=>{const t=r.create({dataType:"image",url:"https://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}"});t.attribution="ArcGIS",e.imgSource=t,e.reload()});var m;(m=document.querySelector("#gd"))==null||m.addEventListener("click",()=>{const t=new r({url:"https://webst04.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}",attribution:"GAODE",dataType:"image"}),a=new r({url:"https://webst04.is.autonavi.com/appmaptile?style=8&x={x}&y={y}&z={z}",attribution:"GAODE",dataType:"image"});e.imgSource=[t,a],e.reload()});var u;(u=document.querySelector("#google"))==null||u.addEventListener("click",()=>{class t extends r{constructor(){super(...arguments);s(this,"attribution","Google");s(this,"dataType","image")}getUrl(S,b,w){return`https://gac-geo.googlecnapps.cn/maps/vt?lyrs=y&x=${S}&y=${b}&z=${w}`}}e.imgSource=new t,e.reload()});var l;(l=document.querySelector("#debug"))==null||l.addEventListener("click",()=>{e.imgSource=[g,new r({attribution:"TileTest",dataType:"test"})],e.reload()});var p;(p=document.querySelector("#demdebug"))==null||p.addEventListener("click",()=>{class t extends h.MapBoxSource{constructor(){super(...arguments);s(this,"style","mapbox.terrain-rgb");s(this,"dataType","image")}}e.imgSource=[new t,new r({url:"https://webst04.is.autonavi.com/appmaptile?style=8&x={x}&y={y}&z={z}",attribution:"GAODE",dataType:"image"})],e.reload()});const y=()=>{const t=document.querySelector("#attribution");t&&(t.innerHTML="© "+e.attributions.join(" | © "))};e.addEventListener("source-changed",()=>y());y();z(e);k(i,e);G(e); diff --git a/docs/assets/step2.10-e28bdd90.js b/docs/assets/step2.10-e28bdd90.js new file mode 100644 index 0000000..7cc67a0 --- /dev/null +++ b/docs/assets/step2.10-e28bdd90.js @@ -0,0 +1,2 @@ +import"./modulepreload-polyfill-3cfb730f.js";import{a7 as Dt,V as h,O as at,a8 as D,d as _t,J as Pt,a9 as Ct,i as A,B as E,Z as rt,aa as ct,e as a,n as J,ab as X,S as Rt,o as j,P as Xt,ac as Qt,ad as Ht,ae as Yt,af as ht,ag as dt,ah as Zt,a6 as pt,r as Ot,H as St,ai as zt,y as jt,m as Gt,a as Ft}from"./mapSource-2c762b60.js";import{g as qt}from"./lil-gui.module.min-a1e98589.js";import{G as Ut}from"./GLTFLoader-9aad0524.js";import{c as Wt,a as Bt,e as Nt,b as Vt,s as Jt,g as Kt,h as $t,f as te}from"./util-e741174c.js";const Z=new Dt,M=new h,Q=new h,u=new D,ut={X:new h(1,0,0),Y:new h(0,1,0),Z:new h(0,0,1)},it={type:"change"},mt={type:"mouseDown",mode:null},ft={type:"mouseUp",mode:null},wt={type:"objectChange"};class ee extends at{constructor(e,o){super(),o===void 0&&(console.warn('THREE.TransformControls: The second parameter "domElement" is now mandatory.'),o=document),this.isTransformControls=!0,this.visible=!1,this.domElement=o,this.domElement.style.touchAction="none";const i=new re;this._gizmo=i,this.add(i);const n=new le;this._plane=n,this.add(n);const s=this;function t(f,S){let C=S;Object.defineProperty(s,f,{get:function(){return C!==void 0?C:S},set:function(Y){C!==Y&&(C=Y,n[f]=Y,i[f]=Y,s.dispatchEvent({type:f+"-changed",value:Y}),s.dispatchEvent(it))}}),s[f]=S,n[f]=S,i[f]=S}t("camera",e),t("object",void 0),t("enabled",!0),t("axis",null),t("mode","translate"),t("translationSnap",null),t("rotationSnap",null),t("scaleSnap",null),t("space","world"),t("size",1),t("dragging",!1),t("showX",!0),t("showY",!0),t("showZ",!0);const r=new h,c=new h,w=new D,m=new D,y=new h,d=new D,g=new h,v=new h,_=new h,P=0,x=new h;t("worldPosition",r),t("worldPositionStart",c),t("worldQuaternion",w),t("worldQuaternionStart",m),t("cameraPosition",y),t("cameraQuaternion",d),t("pointStart",g),t("pointEnd",v),t("rotationAxis",_),t("rotationAngle",P),t("eye",x),this._offset=new h,this._startNorm=new h,this._endNorm=new h,this._cameraScale=new h,this._parentPosition=new h,this._parentQuaternion=new D,this._parentQuaternionInv=new D,this._parentScale=new h,this._worldScaleStart=new h,this._worldQuaternionInv=new D,this._worldScale=new h,this._positionStart=new h,this._quaternionStart=new D,this._scaleStart=new h,this._getPointer=ne.bind(this),this._onPointerDown=oe.bind(this),this._onPointerHover=ie.bind(this),this._onPointerMove=se.bind(this),this._onPointerUp=ae.bind(this),this.domElement.addEventListener("pointerdown",this._onPointerDown),this.domElement.addEventListener("pointermove",this._onPointerHover),this.domElement.addEventListener("pointerup",this._onPointerUp)}updateMatrixWorld(e){this.object!==void 0&&(this.object.updateMatrixWorld(),this.object.parent===null?console.error("TransformControls: The attached 3D object must be a part of the scene graph."):this.object.parent.matrixWorld.decompose(this._parentPosition,this._parentQuaternion,this._parentScale),this.object.matrixWorld.decompose(this.worldPosition,this.worldQuaternion,this._worldScale),this._parentQuaternionInv.copy(this._parentQuaternion).invert(),this._worldQuaternionInv.copy(this.worldQuaternion).invert()),this.camera.updateMatrixWorld(),this.camera.matrixWorld.decompose(this.cameraPosition,this.cameraQuaternion,this._cameraScale),this.camera.isOrthographicCamera?this.camera.getWorldDirection(this.eye).negate():this.eye.copy(this.cameraPosition).sub(this.worldPosition).normalize(),super.updateMatrixWorld(e)}pointerHover(e){if(this.object===void 0||this.dragging===!0)return;e!==null&&Z.setFromCamera(e,this.camera);const o=ot(this._gizmo.picker[this.mode],Z);o?this.axis=o.object.name:this.axis=null}pointerDown(e){if(!(this.object===void 0||this.dragging===!0||e!=null&&e.button!==0)&&this.axis!==null){e!==null&&Z.setFromCamera(e,this.camera);const o=ot(this._plane,Z,!0);o&&(this.object.updateMatrixWorld(),this.object.parent.updateMatrixWorld(),this._positionStart.copy(this.object.position),this._quaternionStart.copy(this.object.quaternion),this._scaleStart.copy(this.object.scale),this.object.matrixWorld.decompose(this.worldPositionStart,this.worldQuaternionStart,this._worldScaleStart),this.pointStart.copy(o.point).sub(this.worldPositionStart)),this.dragging=!0,mt.mode=this.mode,this.dispatchEvent(mt)}}pointerMove(e){const o=this.axis,i=this.mode,n=this.object;let s=this.space;if(i==="scale"?s="local":(o==="E"||o==="XYZE"||o==="XYZ")&&(s="world"),n===void 0||o===null||this.dragging===!1||e!==null&&e.button!==-1)return;e!==null&&Z.setFromCamera(e,this.camera);const t=ot(this._plane,Z,!0);if(t){if(this.pointEnd.copy(t.point).sub(this.worldPositionStart),i==="translate")this._offset.copy(this.pointEnd).sub(this.pointStart),s==="local"&&o!=="XYZ"&&this._offset.applyQuaternion(this._worldQuaternionInv),o.indexOf("X")===-1&&(this._offset.x=0),o.indexOf("Y")===-1&&(this._offset.y=0),o.indexOf("Z")===-1&&(this._offset.z=0),s==="local"&&o!=="XYZ"?this._offset.applyQuaternion(this._quaternionStart).divide(this._parentScale):this._offset.applyQuaternion(this._parentQuaternionInv).divide(this._parentScale),n.position.copy(this._offset).add(this._positionStart),this.translationSnap&&(s==="local"&&(n.position.applyQuaternion(u.copy(this._quaternionStart).invert()),o.search("X")!==-1&&(n.position.x=Math.round(n.position.x/this.translationSnap)*this.translationSnap),o.search("Y")!==-1&&(n.position.y=Math.round(n.position.y/this.translationSnap)*this.translationSnap),o.search("Z")!==-1&&(n.position.z=Math.round(n.position.z/this.translationSnap)*this.translationSnap),n.position.applyQuaternion(this._quaternionStart)),s==="world"&&(n.parent&&n.position.add(M.setFromMatrixPosition(n.parent.matrixWorld)),o.search("X")!==-1&&(n.position.x=Math.round(n.position.x/this.translationSnap)*this.translationSnap),o.search("Y")!==-1&&(n.position.y=Math.round(n.position.y/this.translationSnap)*this.translationSnap),o.search("Z")!==-1&&(n.position.z=Math.round(n.position.z/this.translationSnap)*this.translationSnap),n.parent&&n.position.sub(M.setFromMatrixPosition(n.parent.matrixWorld))));else if(i==="scale"){if(o.search("XYZ")!==-1){let r=this.pointEnd.length()/this.pointStart.length();this.pointEnd.dot(this.pointStart)<0&&(r*=-1),Q.set(r,r,r)}else M.copy(this.pointStart),Q.copy(this.pointEnd),M.applyQuaternion(this._worldQuaternionInv),Q.applyQuaternion(this._worldQuaternionInv),Q.divide(M),o.search("X")===-1&&(Q.x=1),o.search("Y")===-1&&(Q.y=1),o.search("Z")===-1&&(Q.z=1);n.scale.copy(this._scaleStart).multiply(Q),this.scaleSnap&&(o.search("X")!==-1&&(n.scale.x=Math.round(n.scale.x/this.scaleSnap)*this.scaleSnap||this.scaleSnap),o.search("Y")!==-1&&(n.scale.y=Math.round(n.scale.y/this.scaleSnap)*this.scaleSnap||this.scaleSnap),o.search("Z")!==-1&&(n.scale.z=Math.round(n.scale.z/this.scaleSnap)*this.scaleSnap||this.scaleSnap))}else if(i==="rotate"){this._offset.copy(this.pointEnd).sub(this.pointStart);const r=20/this.worldPosition.distanceTo(M.setFromMatrixPosition(this.camera.matrixWorld));let c=!1;o==="XYZE"?(this.rotationAxis.copy(this._offset).cross(this.eye).normalize(),this.rotationAngle=this._offset.dot(M.copy(this.rotationAxis).cross(this.eye))*r):(o==="X"||o==="Y"||o==="Z")&&(this.rotationAxis.copy(ut[o]),M.copy(ut[o]),s==="local"&&M.applyQuaternion(this.worldQuaternion),M.cross(this.eye),M.length()===0?c=!0:this.rotationAngle=this._offset.dot(M.normalize())*r),(o==="E"||c)&&(this.rotationAxis.copy(this.eye),this.rotationAngle=this.pointEnd.angleTo(this.pointStart),this._startNorm.copy(this.pointStart).normalize(),this._endNorm.copy(this.pointEnd).normalize(),this.rotationAngle*=this._endNorm.cross(this._startNorm).dot(this.eye)<0?1:-1),this.rotationSnap&&(this.rotationAngle=Math.round(this.rotationAngle/this.rotationSnap)*this.rotationSnap),s==="local"&&o!=="E"&&o!=="XYZE"?(n.quaternion.copy(this._quaternionStart),n.quaternion.multiply(u.setFromAxisAngle(this.rotationAxis,this.rotationAngle)).normalize()):(this.rotationAxis.applyQuaternion(this._parentQuaternionInv),n.quaternion.copy(u.setFromAxisAngle(this.rotationAxis,this.rotationAngle)),n.quaternion.multiply(this._quaternionStart).normalize())}this.dispatchEvent(it),this.dispatchEvent(wt)}}pointerUp(e){e!==null&&e.button!==0||(this.dragging&&this.axis!==null&&(ft.mode=this.mode,this.dispatchEvent(ft)),this.dragging=!1,this.axis=null)}dispose(){this.domElement.removeEventListener("pointerdown",this._onPointerDown),this.domElement.removeEventListener("pointermove",this._onPointerHover),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.domElement.removeEventListener("pointerup",this._onPointerUp),this.traverse(function(e){e.geometry&&e.geometry.dispose(),e.material&&e.material.dispose()})}attach(e){return this.object=e,this.visible=!0,this}detach(){return this.object=void 0,this.visible=!1,this.axis=null,this}reset(){this.enabled&&this.dragging&&(this.object.position.copy(this._positionStart),this.object.quaternion.copy(this._quaternionStart),this.object.scale.copy(this._scaleStart),this.dispatchEvent(it),this.dispatchEvent(wt),this.pointStart.copy(this.pointEnd))}getRaycaster(){return Z}getMode(){return this.mode}setMode(e){this.mode=e}setTranslationSnap(e){this.translationSnap=e}setRotationSnap(e){this.rotationSnap=e}setScaleSnap(e){this.scaleSnap=e}setSize(e){this.size=e}setSpace(e){this.space=e}}function ne(l){if(this.domElement.ownerDocument.pointerLockElement)return{x:0,y:0,button:l.button};{const e=this.domElement.getBoundingClientRect();return{x:(l.clientX-e.left)/e.width*2-1,y:-(l.clientY-e.top)/e.height*2+1,button:l.button}}}function ie(l){if(this.enabled)switch(l.pointerType){case"mouse":case"pen":this.pointerHover(this._getPointer(l));break}}function oe(l){this.enabled&&(document.pointerLockElement||this.domElement.setPointerCapture(l.pointerId),this.domElement.addEventListener("pointermove",this._onPointerMove),this.pointerHover(this._getPointer(l)),this.pointerDown(this._getPointer(l)))}function se(l){this.enabled&&this.pointerMove(this._getPointer(l))}function ae(l){this.enabled&&(this.domElement.releasePointerCapture(l.pointerId),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.pointerUp(this._getPointer(l)))}function ot(l,e,o){const i=e.intersectObject(l,!0);for(let n=0;n.9&&(t.visible=!1)),this.axis==="Y"&&(u.setFromEuler(K.set(0,0,Math.PI/2)),t.quaternion.copy(i).multiply(u),Math.abs(p.copy(O).applyQuaternion(i).dot(this.eye))>.9&&(t.visible=!1)),this.axis==="Z"&&(u.setFromEuler(K.set(0,Math.PI/2,0)),t.quaternion.copy(i).multiply(u),Math.abs(p.copy(U).applyQuaternion(i).dot(this.eye))>.9&&(t.visible=!1)),this.axis==="XYZE"&&(u.setFromEuler(K.set(0,Math.PI/2,0)),p.copy(this.rotationAxis),t.quaternion.setFromRotationMatrix(bt.lookAt(yt,p,O)),t.quaternion.multiply(u),t.visible=this.dragging),this.axis==="E"&&(t.visible=!1)):t.name==="START"?(t.position.copy(this.worldPositionStart),t.visible=this.dragging):t.name==="END"?(t.position.copy(this.worldPosition),t.visible=this.dragging):t.name==="DELTA"?(t.position.copy(this.worldPositionStart),t.quaternion.copy(this.worldQuaternionStart),M.set(1e-10,1e-10,1e-10).add(this.worldPositionStart).sub(this.worldPosition).multiplyScalar(-1),M.applyQuaternion(this.worldQuaternionStart.clone().invert()),t.scale.copy(M),t.visible=this.dragging):(t.quaternion.copy(i),this.dragging?t.position.copy(this.worldPositionStart):t.position.copy(this.worldPosition),this.axis&&(t.visible=this.axis.search(t.name)!==-1));continue}t.quaternion.copy(i),this.mode==="translate"||this.mode==="scale"?(t.name==="X"&&Math.abs(p.copy(q).applyQuaternion(i).dot(this.eye))>.99&&(t.scale.set(1e-10,1e-10,1e-10),t.visible=!1),t.name==="Y"&&Math.abs(p.copy(O).applyQuaternion(i).dot(this.eye))>.99&&(t.scale.set(1e-10,1e-10,1e-10),t.visible=!1),t.name==="Z"&&Math.abs(p.copy(U).applyQuaternion(i).dot(this.eye))>.99&&(t.scale.set(1e-10,1e-10,1e-10),t.visible=!1),t.name==="XY"&&Math.abs(p.copy(U).applyQuaternion(i).dot(this.eye))<.2&&(t.scale.set(1e-10,1e-10,1e-10),t.visible=!1),t.name==="YZ"&&Math.abs(p.copy(q).applyQuaternion(i).dot(this.eye))<.2&&(t.scale.set(1e-10,1e-10,1e-10),t.visible=!1),t.name==="XZ"&&Math.abs(p.copy(O).applyQuaternion(i).dot(this.eye))<.2&&(t.scale.set(1e-10,1e-10,1e-10),t.visible=!1)):this.mode==="rotate"&&($.copy(i),p.copy(this.eye).applyQuaternion(u.copy(i).invert()),t.name.search("E")!==-1&&t.quaternion.setFromRotationMatrix(bt.lookAt(this.eye,yt,O)),t.name==="X"&&(u.setFromAxisAngle(q,Math.atan2(-p.y,p.z)),u.multiplyQuaternions($,u),t.quaternion.copy(u)),t.name==="Y"&&(u.setFromAxisAngle(O,Math.atan2(p.x,p.z)),u.multiplyQuaternions($,u),t.quaternion.copy(u)),t.name==="Z"&&(u.setFromAxisAngle(U,Math.atan2(p.y,p.x)),u.multiplyQuaternions($,u),t.quaternion.copy(u))),t.visible=t.visible&&(t.name.indexOf("X")===-1||this.showX),t.visible=t.visible&&(t.name.indexOf("Y")===-1||this.showY),t.visible=t.visible&&(t.name.indexOf("Z")===-1||this.showZ),t.visible=t.visible&&(t.name.indexOf("E")===-1||this.showX&&this.showY&&this.showZ),t.material._color=t.material._color||t.material.color.clone(),t.material._opacity=t.material._opacity||t.material.opacity,t.material.color.copy(t.material._color),t.material.opacity=t.material._opacity,this.enabled&&this.axis&&(t.name===this.axis||this.axis.split("").some(function(c){return t.name===c}))&&(t.material.color.setHex(16776960),t.material.opacity=1)}super.updateMatrixWorld(e)}}class le extends a{constructor(){super(new Xt(1e5,1e5,2,2),new Pt({visible:!1,wireframe:!0,side:Qt,transparent:!0,opacity:.1,toneMapped:!1})),this.isTransformControlsPlane=!0,this.type="TransformControlsPlane"}updateMatrixWorld(e){let o=this.space;switch(this.position.copy(this.worldPosition),this.mode==="scale"&&(o="local"),tt.copy(q).applyQuaternion(o==="local"?this.worldQuaternion:et),G.copy(O).applyQuaternion(o==="local"?this.worldQuaternion:et),F.copy(U).applyQuaternion(o==="local"?this.worldQuaternion:et),p.copy(G),this.mode){case"translate":case"scale":switch(this.axis){case"X":p.copy(this.eye).cross(tt),k.copy(tt).cross(p);break;case"Y":p.copy(this.eye).cross(G),k.copy(G).cross(p);break;case"Z":p.copy(this.eye).cross(F),k.copy(F).cross(p);break;case"XY":k.copy(F);break;case"YZ":k.copy(tt);break;case"XZ":p.copy(F),k.copy(G);break;case"XYZ":case"E":k.set(0,0,0);break}break;case"rotate":default:k.set(0,0,0)}k.length()===0?this.quaternion.copy(this.cameraQuaternion):(gt.lookAt(M.set(0,0,0),k,p),this.quaternion.setFromRotationMatrix(gt)),super.updateMatrixWorld(e)}}const st=new WeakMap;class ce extends Yt{constructor(e){super(e),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(e){return this.decoderPath=e,this}setDecoderConfig(e){return this.decoderConfig=e,this}setWorkerLimit(e){return this.workerLimit=e,this}load(e,o,i,n){const s=new ht(this.manager);s.setPath(this.path),s.setResponseType("arraybuffer"),s.setRequestHeader(this.requestHeader),s.setWithCredentials(this.withCredentials),s.load(e,t=>{this.parse(t,o,n)},i,n)}parse(e,o,i=()=>{}){this.decodeDracoFile(e,o,null,null,dt,i).catch(i)}decodeDracoFile(e,o,i,n,s=Zt,t=()=>{}){const r={attributeIDs:i||this.defaultAttributeIDs,attributeTypes:n||this.defaultAttributeTypes,useUniqueIDs:!!i,vertexColorSpace:s};return this.decodeGeometry(e,r).then(o).catch(t)}decodeGeometry(e,o){const i=JSON.stringify(o);if(st.has(e)){const c=st.get(e);if(c.key===i)return c.promise;if(e.byteLength===0)throw new Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.")}let n;const s=this.workerNextTaskID++,t=e.byteLength,r=this._getWorker(s,t).then(c=>(n=c,new Promise((w,m)=>{n._callbacks[s]={resolve:w,reject:m},n.postMessage({type:"decode",id:s,taskConfig:o,buffer:e},[e])}))).then(c=>this._createGeometry(c.geometry));return r.catch(()=>!0).then(()=>{n&&s&&this._releaseTask(n,s)}),st.set(e,{key:i,promise:r}),r}_createGeometry(e){const o=new rt;e.index&&o.setIndex(new pt(e.index.array,1));for(let i=0;i{i.load(e,n,void 0,s)})}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;const e=typeof WebAssembly!="object"||this.decoderConfig.type==="js",o=[];return e?o.push(this._loadLibrary("draco_decoder.js","text")):(o.push(this._loadLibrary("draco_wasm_wrapper.js","text")),o.push(this._loadLibrary("draco_decoder.wasm","arraybuffer"))),this.decoderPending=Promise.all(o).then(i=>{const n=i[0];e||(this.decoderConfig.wasmBinary=i[1]);const s=he.toString(),t=["/* draco decoder */",n,"","/* worker */",s.substring(s.indexOf("{")+1,s.lastIndexOf("}"))].join(` +`);this.workerSourceURL=URL.createObjectURL(new Blob([t]))}),this.decoderPending}_getWorker(e,o){return this._initDecoder().then(()=>{if(this.workerPool.lengths._taskLoad?-1:1});const i=this.workerPool[this.workerPool.length-1];return i._taskCosts[e]=o,i._taskLoad+=o,i})}_releaseTask(e,o){e._taskLoad-=e._taskCosts[o],delete e._callbacks[o],delete e._taskCosts[o]}debug(){console.log("Task load: ",this.workerPool.map(e=>e._taskLoad))}dispose(){for(let e=0;e{const y=m.draco,d=new y.Decoder;try{const g=o(y,d,new Int8Array(c),w),v=g.attributes.map(_=>_.array.buffer);g.index&&v.push(g.index.array.buffer),self.postMessage({type:"decode",id:r.id,geometry:g},v)}catch(g){console.error(g),self.postMessage({type:"error",id:r.id,error:g.message})}finally{y.destroy(d)}});break}};function o(t,r,c,w){const m=w.attributeIDs,y=w.attributeTypes;let d,g;const v=r.GetEncodedGeometryType(c);if(v===t.TRIANGULAR_MESH)d=new t.Mesh,g=r.DecodeArrayToMesh(c,c.byteLength,d);else if(v===t.POINT_CLOUD)d=new t.PointCloud,g=r.DecodeArrayToPointCloud(c,c.byteLength,d);else throw new Error("THREE.DRACOLoader: Unexpected geometry type.");if(!g.ok()||d.ptr===0)throw new Error("THREE.DRACOLoader: Decoding failed: "+g.error_msg());const _={index:null,attributes:[]};for(const P in m){const x=self[y[P]];let f,S;if(w.useUniqueIDs)S=m[P],f=r.GetAttributeByUniqueId(d,S);else{if(S=r.GetAttributeId(d,t[m[P]]),S===-1)continue;f=r.GetAttribute(d,S)}const C=n(t,r,d,P,x,f);P==="color"&&(C.vertexColorSpace=w.vertexColorSpace),_.attributes.push(C)}return v===t.TRIANGULAR_MESH&&(_.index=i(t,r,d)),t.destroy(d),_}function i(t,r,c){const m=c.num_faces()*3,y=m*4,d=t._malloc(y);r.GetTrianglesUInt32Array(c,y,d);const g=new Uint32Array(t.HEAPF32.buffer,d,m).slice();return t._free(d),{array:g,itemSize:1}}function n(t,r,c,w,m,y){const d=y.num_components(),v=c.num_points()*d,_=v*m.BYTES_PER_ELEMENT,P=s(t,m),x=t._malloc(_);r.GetAttributeDataArrayForAllPoints(c,y,P,_,x);const f=new m(t.HEAPF32.buffer,x,v).slice();return t._free(x),{name:w,array:f,itemSize:d}}function s(t,r){switch(r){case Float32Array:return t.DT_FLOAT32;case Int8Array:return t.DT_INT8;case Int16Array:return t.DT_INT16;case Int32Array:return t.DT_INT32;case Uint8Array:return t.DT_UINT8;case Uint16Array:return t.DT_UINT16;case Uint32Array:return t.DT_UINT32}}}const H=Wt(Ft,Gt),nt=H.geo2pos(new h(108.9507,34.1915)),de=new h(nt.x,nt.y,.5),pe=new h(-.5,-.5,0),b=Bt("#map",de,pe);b.renderer.shadowMap.enabled=!0;H.receiveShadow=!0;b.scene.add(H);b.ambLight.intensity=.5;b.dirLight.intensity=.5;const ue=new St(b.dirLight.shadow.camera);b.scene.add(ue);b.controls.maxPolarAngle=Math.PI/2.4;b.controls.saveState();(()=>{const l=new ce;l.setDecoderPath("../lib/draco/gltf/");const e=new Ut;e.setDRACOLoader(l);let o;e.load("../model/LittlestTokyo.glb",function(i){o=i.scene,o.traverse(s=>{s.castShadow=!0,s.receiveShadow=!0}),o.castShadow=!0,b.scene.add(o);const n=new zt(o);n.clipAction(i.animations[0]).play(),H.addEventListener("update",s=>{n.update(s.delta)}),we(o),me(o)})})();const me=l=>{const e=new jt(16777215,3);e.target=l,e.position.set(500,1e4,1e4),e.castShadow=!0,e.shadow.camera.near=.1,e.shadow.camera.far=10,e.shadow.camera.left=-1,e.shadow.camera.right=1,e.shadow.camera.top=1,e.shadow.camera.bottom=-1,e.shadow.mapSize.setScalar(1024),l.add(e),b.scene.add(new St(e.shadow.camera))},fe=l=>{const e=new ee(b.camera,b.renderer.domElement);return e.attach(l),e.addEventListener("dragging-changed",function(o){b.controls.enabled=!o.value}),e.enabled=!1,e.visible=!1,b.scene.add(e),e},we=l=>{const e={initModel:()=>{l.scale.setScalar(5e-4),l.position.set(nt.x,nt.y,.55),l.rotation.set(Math.PI/2,0,0),b.controls.reset()}};e.initModel();const o=fe(l),i=new qt;i.add(b,"fogFactor",.1,5,.1).listen().name("雾(能见度系数)"),i.add(o,"enabled").onChange(n=>o.visible=n).name("模型编辑"),i.add(o,"mode",{平移:"translate",旋转:"rotate",缩放:"scale"}).name("编辑方式"),i.add(e,"initModel").name("复位")};Nt(H);Vt(H);Jt(b,H);Kt(H);$t(b);te(b); diff --git a/docs/assets/step2.11-fccd5b24.js b/docs/assets/step2.11-fccd5b24.js new file mode 100644 index 0000000..2475813 --- /dev/null +++ b/docs/assets/step2.11-fccd5b24.js @@ -0,0 +1 @@ +import"./modulepreload-polyfill-3cfb730f.js";import{g}from"./lil-gui.module.min-a1e98589.js";import{V as r,aj as f,m as h,a as C,ak as d}from"./mapSource-2c762b60.js";import{S as y}from"./Sky-419151f3.js";import{c as w,a as v,b as x,s as M}from"./util-e741174c.js";const s=w(C,h),m=s.geo2pos(new r(109,35)),S=new r(m.x,m.y,0),b=new r(0,-10,4),o=v("#map",S,b);o.scene.add(s);o.controls.maxPolarAngle=Math.PI;var l;(l=o.scene.fog)==null||l.color.set(8947848);o.renderer.useLegacyLights=!1;o.renderer.toneMapping=f;o.renderer.toneMappingExposure=.7;D();function D(){const t=new y;t.material.uniforms.up.value=new r(0,0,1),t.scale.setScalar(45e4),o.scene.add(t);const c=new r,e={turbidity:10,rayleigh:3,mieCoefficient:.005,mieDirectionalG:.7,elevation:85,azimuth:15,exposure:o.renderer.toneMappingExposure};function a(){const i=t.material.uniforms;i.turbidity.value=e.turbidity,i.rayleigh.value=e.rayleigh,i.mieCoefficient.value=e.mieCoefficient,i.mieDirectionalG.value=e.mieDirectionalG;const u=d.degToRad(e.azimuth),p=d.degToRad(e.elevation);c.setFromSphericalCoords(1e4,u,p),i.sunPosition.value.copy(c),o.renderer.toneMappingExposure=e.exposure,o.renderer.render(o.scene,o.camera)}const n=new g;n.add(e,"turbidity",0,20,.1).onChange(a),n.add(e,"rayleigh",0,4,.001).onChange(a),n.add(e,"mieCoefficient",0,.1,.001).onChange(a),n.add(e,"mieDirectionalG",0,1,.001).onChange(a),n.add(e,"elevation",0,100,1).onChange(a),n.add(e,"azimuth",-180,180,1).onChange(a),n.add(e,"exposure",0,1,1e-4).onChange(a),n.addColor(o.scene.fog,"color").name("FogColor"),a()}x(s);M(o,s); diff --git a/docs/assets/step2.2-d00d7c25.js b/docs/assets/step2.2-d00d7c25.js new file mode 100644 index 0000000..6130b8c --- /dev/null +++ b/docs/assets/step2.2-d00d7c25.js @@ -0,0 +1 @@ +import"./modulepreload-polyfill-3cfb730f.js";import{V as r,m as s,a as t,s as n,t as c}from"./mapSource-2c762b60.js";import{g as p}from"./lil-gui.module.min-a1e98589.js";import{c as i,a as l,d as x,e as D,s as u,b as w}from"./util-e741174c.js";const e=i(t,s),d=e.geo2pos(new r(95,30)),S=new r(d.x,d.y,0),M=new r(0,20,2),o=l("#map",S,M);o.scene.add(e);x(o,e);const m={noneDem:()=>{e.demSource=void 0,e.reload()},mapboxDem:()=>{e.demSource=s,e.reload()},mapTilerDem:()=>{e.demSource=n,e.reload()},zkxtDem:()=>{e.demSource=c,e.reload()}},a=new p;a.add(m,"noneDem").name("无地形");a.add(m,"mapboxDem").name("MapBox地形瓦片(MaxLevel=15)");a.add(m,"mapTilerDem").name("MapTiler地形瓦片(MaxLevel=12)");a.add(m,"zkxtDem").name("中科星图地形瓦片(MaxLevel=10)");a.add(e.scale,"z",1,10,.1).name("地形拉伸倍数");a.add(o.controls.target,"z",-10,10,.01).name("摄像机焦点高度偏移");a.add(e.position,"z",-1,1,.01).name("地图模型高度偏移");D(e);u(o,e);w(e); diff --git a/docs/assets/step2.3-8e6f478c.js b/docs/assets/step2.3-8e6f478c.js new file mode 100644 index 0000000..8b8abf1 --- /dev/null +++ b/docs/assets/step2.3-8e6f478c.js @@ -0,0 +1 @@ +import"./modulepreload-polyfill-3cfb730f.js";import{g as s}from"./lil-gui.module.min-a1e98589.js";import{V as n,m,a as c}from"./mapSource-2c762b60.js";import{c as i,a as l,d as p,e as g,b as h,s as w}from"./util-e741174c.js";const o=i(c,m),d=o.geo2pos(new n(95.36,30.3)),u=new n(d.x,d.y,0),L=new n(2,-10,5),a=l("#map",u,L);a.scene.add(o);p(a,o);const r=new s,e=r.addFolder("地图控制");e.add(o.scale,"z",1,10,.1).name("地形拉伸倍数");e.add(a.controls.target,"z",-10,10,.01).name("控制焦点高度偏移");e.add(o.position,"z",-1,1,.01).name("地图模型高度偏移");e.add(a.controls,"maxPolarAngle",0,Math.PI/2,.1).name("倾角限制");e.add(a.controls,"enableDamping").name("惯性控制");e.add(a.controls,"autoRotate").name("自动旋转");e.add(o,"reload").name("重建瓦片树");const t=r.addFolder("环境设置");t.add(a.ambLight,"intensity",0,5,.1).name("环境光强度");t.addColor(a.ambLight,"color").name("环境光颜色");t.add(a.dirLight,"intensity",0,5,.1).name("直射光强度");t.addColor(a.dirLight,"color").name("直射光光颜色");g(o);h(o);w(a,o); diff --git a/docs/assets/step2.4-60eed367.js b/docs/assets/step2.4-60eed367.js new file mode 100644 index 0000000..2d90fdc --- /dev/null +++ b/docs/assets/step2.4-60eed367.js @@ -0,0 +1 @@ +var l=Object.defineProperty;var g=(a,s,e)=>s in a?l(a,s,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[s]=e;var i=(a,s,e)=>(g(a,typeof s!="symbol"?s+"":s,e),e);import"./modulepreload-polyfill-3cfb730f.js";import{g as p}from"./lil-gui.module.min-a1e98589.js";import{O as w,E as u,u as x,W as f,v as y,w as M,y as b,z as L,F as S,H as C,r as P,I as d,V as m,e as D,l as v,g as F,m as _,a as z}from"./mapSource-2c762b60.js";import{c as E,e as k,b as R}from"./util-e741174c.js";import{M as A}from"./MapControls-abd2b561.js";import{S as I}from"./stats.module-8826aad6.js";w.DEFAULT_UP.set(0,0,1);class j extends u{constructor(e,t){super();i(this,"scene",new x);i(this,"renderer",new f({antialias:!0,logarithmicDepthBuffer:!0}));i(this,"camera",new y(50,1,.1,1e3));i(this,"controls");i(this,"ambLight",new M(16777215,.1));i(this,"dirLight",new b(16777215,.8));i(this,"container");i(this,"_stats",new I);i(this,"_clock",new L);i(this,"_fogFactor",1);this.container=e,this.setRender(),this.setScene(),this.setCamera(t),this.controls=this.createControls(t),this.scene.add(this.ambLight),this.setDirLight(),this.setState(e),window.addEventListener("resize",this.resize.bind(this)),this.resize(),this.animate()}get fogFactor(){return this._fogFactor}set fogFactor(e){this._fogFactor=e,this.controls.dispatchEvent({type:"change",target:this.controls})}setState(e){this._stats.dom.style.left="",this._stats.dom.style.top="",this._stats.dom.style.right="0px",this._stats.dom.style.bottom="0px",this._stats.dom.style.zIndex="100",e.appendChild(this._stats.dom)}setDirLight(){const e=this.dirLight;e.target.position.copy(this.controls.target),e.position.set(e.target.position.x,e.target.position.y-100,100),e.castShadow=!0,e.shadow.camera.near=.1,e.shadow.camera.far=200,e.shadow.camera.left=-100,e.shadow.camera.right=100,e.shadow.camera.top=100,e.shadow.camera.bottom=-100,e.shadow.mapSize.setScalar(2048),this.scene.add(e),this.scene.add(new S(e)),this.scene.add(new C(e.shadow.camera))}setCamera(e){this.camera.position.set(e.x-10,e.y-20,e.z)}setScene(){this.scene.background=new P(11184810),this.scene.fog=new d(11184810)}setRender(){this.renderer.sortObjects=!0,this.renderer.shadowMap.enabled=!0,this.renderer.setPixelRatio(window.devicePixelRatio),this.container.appendChild(this.renderer.domElement)}createControls(e){const t=new A(this.camera,this.container);return t.domElement=this.container,t.target.set(e.x,e.y,3),t.minDistance=.1,t.maxDistance=1e4,t.zoomSpeed=3,t.minPolarAngle=1,t.enableDamping=!0,t.listenToKeyEvents(window),t.addEventListener("change",()=>{const h=Math.max(t.getPolarAngle(),.2),c=Math.max(t.getDistance(),1);t.zoomSpeed=Math.max(Math.log(c),1.2),this.scene.fog instanceof d&&(this.scene.fog.density=h/c/4*this.fogFactor),this.camera.far=Math.min(c/h*8,6e4),this.camera.near=Math.min(Math.max(this.camera.far/100,.1),1),this.camera.updateProjectionMatrix()}),t}resize(){const e=this.container.clientWidth,t=this.container.clientHeight;return this.renderer.setPixelRatio(window.devicePixelRatio),this.renderer.setSize(e,t),this.camera.aspect=e/t,this.camera.updateProjectionMatrix(),this}animate(){this.controls.update(),this._stats.update(),this.renderer.render(this.scene,this.camera);const e=this._clock.getDelta();this.dispatchEvent({type:"update",delta:e}),requestAnimationFrame(this.animate.bind(this))}}const r=E(z,_),B=document.querySelector("#map"),n=r.geo2pos(new m(86.92,27.95)),o=new j(B,new m(n.x,n.y,10));o.scene.add(r);r.addEventListener("tile-created",a=>{a.tile.receiveShadow=!0,a.tile.castShadow=!0});const H=(()=>{const a=new D(new v(1,.3,128,16),new F({color:3355443,shininess:30,specular:13421772,emissive:0}));return a.position.set(n.x,n.y-5,8),a.castShadow=!0,a})();o.scene.add(H);(()=>{const a=new p,s=a.addFolder("地图控制");s.add(r.scale,"z",1,10,.1).name("高度拉伸倍数"),s.add(r.position,"z",-1,1,.01).name("高度偏移"),s.add(o.controls,"minPolarAngle",Math.PI/4,Math.PI/2,.1).name("最小倾角限制"),s.add(o.controls,"maxPolarAngle",Math.PI/4,Math.PI/2,.1).name("最大倾角限制"),s.add(o.controls,"enableDamping").name("惯性控制"),s.add(o.controls,"autoRotate").name("自动旋转"),s.add(r,"reload").name("重建瓦片树");const e=a.addFolder("环境设置");e.addColor(o.ambLight,"color").name("环境光颜色"),e.add(o.ambLight,"intensity",0,5,.1).name("环境光强度"),e.addColor(o.dirLight,"color").name("直射光颜色"),e.add(o.dirLight,"intensity",0,5,.1).name("直射光强度")})();k(r);R(r); diff --git a/docs/assets/step2.5-e53307de.js b/docs/assets/step2.5-e53307de.js new file mode 100644 index 0000000..a476a64 --- /dev/null +++ b/docs/assets/step2.5-e53307de.js @@ -0,0 +1,106 @@ +import"./modulepreload-polyfill-3cfb730f.js";import{e as C,J as Z,V as c,K as k,L as T,r as M,b as z,N as $,Q as q,U as G,Z as ee,_ as te,$ as R,a0 as ie,T as ne,a1 as oe,m as se,a as re}from"./mapSource-2c762b60.js";import{g as ae}from"./lil-gui.module.min-a1e98589.js";import{c as le,a as ce,d as ue,b as ve,s as pe}from"./util-e741174c.js";class x extends C{constructor(){super(x.Geometry,new Z({opacity:0,transparent:!0})),this.isLensflare=!0,this.type="Lensflare",this.frustumCulled=!1,this.renderOrder=1/0;const i=new c,a=new c,r=new k(16,16),e=new k(16,16);let U=G;const u=x.Geometry,P=new T({uniforms:{scale:{value:null},screenPosition:{value:null}},vertexShader:` + + precision highp float; + + uniform vec3 screenPosition; + uniform vec2 scale; + + attribute vec3 position; + + void main() { + + gl_Position = vec4( position.xy * scale + screenPosition.xy, screenPosition.z, 1.0 ); + + }`,fragmentShader:` + + precision highp float; + + void main() { + + gl_FragColor = vec4( 1.0, 0.0, 1.0, 1.0 ); + + }`,depthTest:!0,depthWrite:!1,transparent:!1}),V=new T({uniforms:{map:{value:r},scale:{value:null},screenPosition:{value:null}},vertexShader:` + + precision highp float; + + uniform vec3 screenPosition; + uniform vec2 scale; + + attribute vec3 position; + attribute vec2 uv; + + varying vec2 vUV; + + void main() { + + vUV = uv; + + gl_Position = vec4( position.xy * scale + screenPosition.xy, screenPosition.z, 1.0 ); + + }`,fragmentShader:` + + precision highp float; + + uniform sampler2D map; + + varying vec2 vUV; + + void main() { + + gl_FragColor = texture2D( map, vUV ); + + }`,depthTest:!1,depthWrite:!1,transparent:!1}),E=new C(u,P),v=[],D=l.Shader,p=new T({name:D.name,uniforms:{map:{value:null},occlusionMap:{value:e},color:{value:new M(16777215)},scale:{value:new z},screenPosition:{value:new c}},vertexShader:D.vertexShader,fragmentShader:D.fragmentShader,blending:$,transparent:!0,depthWrite:!1}),J=new C(u,p);this.addElement=function(s){v.push(s)};const L=new z,f=new z,S=new q,t=new ie;this.onBeforeRender=function(s,A,d){s.getCurrentViewport(t);const I=s.getRenderTarget(),F=I!==null?I.texture.type:G;U!==F&&(r.dispose(),e.dispose(),r.type=e.type=F,U=F);const K=t.w/t.z,W=t.z/2,_=t.w/2;let m=16/t.w;if(L.set(m*K,m),S.min.set(t.x,t.y),S.max.set(t.x+(t.z-16),t.y+(t.w-16)),a.setFromMatrixPosition(this.matrixWorld),a.applyMatrix4(d.matrixWorldInverse),!(a.z>0)&&(i.copy(a).applyMatrix4(d.projectionMatrix),f.x=t.x+i.x*W+W-8,f.y=t.y+i.y*_+_-8,S.containsPoint(f))){s.copyFramebufferToTexture(r,f);let y=P.uniforms;y.scale.value=L,y.screenPosition.value=i,s.renderBufferDirect(d,null,u,P,E,null),s.copyFramebufferToTexture(e,f),y=V.uniforms,y.scale.value=L,y.screenPosition.value=i,s.renderBufferDirect(d,null,u,V,E,null);const O=-i.x*2,Q=-i.y*2;for(let B=0,X=v.length;B{const o=new ne,i=o.load("../image/lensflare/lensflare0.png"),a=o.load("../image/lensflare/lensflare1.png"),r=o.load("../image/lensflare/lensflare3.png"),e=new x;return e.addElement(new l(i,512)),e.addElement(new l(a,256,0)),e.addElement(new l(r,60,.4)),e.addElement(new l(r,100,.6)),e.addElement(new l(r,200,.8)),e.addElement(new l(r,70,.9)),e.position.set(5e3,2e4,3e3),e.frustumCulled=!1,e})();n.scene.add(H);const me=(()=>{const o=new oe(new M(16777215),3);return o.position.copy(H.position),o.frustumCulled=!1,o})();n.scene.add(me);ue(n,w);const ye=new ae,b=ye.addFolder("环境设置");b.addColor(n.ambLight,"color").name("环境光颜色");b.add(n.ambLight,"intensity",0,5,.1).name("环境光强度");b.addColor(n.dirLight,"color").name("直射光颜色");b.add(n.dirLight,"intensity",0,4,.1).name("直射光强度");b.addColor(n.scene,"background").name("天空颜色");ve(w);pe(n,w); diff --git a/docs/assets/step2.6-3358b323.js b/docs/assets/step2.6-3358b323.js new file mode 100644 index 0000000..c50fdfe --- /dev/null +++ b/docs/assets/step2.6-3358b323.js @@ -0,0 +1 @@ +import"./modulepreload-polyfill-3cfb730f.js";import{g as r}from"./lil-gui.module.min-a1e98589.js";import{V as n,m as d,a as c}from"./mapSource-2c762b60.js";import{c as m,a as i,d as g,e as p,b as l,s as h}from"./util-e741174c.js";const a=m(c,d),t=a.geo2pos(new n(109,34)),w=new n(t.x,t.y,0),f=new n(-5,10,4),o=i("#map",w,f);o.scene.add(a);g(o,a);const L=new r,e=L.addFolder("环境设置");e.add(o.ambLight,"intensity",0,5,.1).name("环境光强度");e.addColor(o.ambLight,"color").name("环境光颜色");e.add(o.dirLight,"intensity",0,5,.1).name("直射光强度");e.addColor(o.dirLight,"color").name("直射光光颜色");e.add(o,"fogFactor",.1,3,.1).listen().name("雾(能见度系数)");e.addColor(o.scene,"background").name("天空及大气颜色").onChange(s=>{o.scene.fog.color=s});p(a);l(a);h(o,a); diff --git a/docs/assets/step2.7-524025c6.js b/docs/assets/step2.7-524025c6.js new file mode 100644 index 0000000..abf1dba --- /dev/null +++ b/docs/assets/step2.7-524025c6.js @@ -0,0 +1 @@ +import"./modulepreload-polyfill-3cfb730f.js";import{g as d}from"./lil-gui.module.min-a1e98589.js";import{V as n,a2 as c,m,a as i}from"./mapSource-2c762b60.js";import{c as g,a as p,d as y,e as b,b as k,s as x}from"./util-e741174c.js";const e=g(i,m),s=e.geo2pos(new n(109,34)),l=new n(s.x,s.y,0),h=new n(-5,10,4),o=p("#map",l,h);o.scene.add(e);y(o,e);const t=new c().setPath("../image/skybox/").load(["skybox_nx.png","skybox_px.png","skybox_ny.png","skybox_py.png","skybox_nz.png","skybox_pz.png"]);o.scene.background=t;const u={sky:!0},w=new d,a=w.addFolder("环境设置");a.add(o.ambLight,"intensity",0,5,.1).name("环境光强度");a.addColor(o.ambLight,"color").name("环境光颜色");a.add(o.dirLight,"intensity",0,5,.1).name("直射光强度");a.addColor(o.dirLight,"color").name("直射光光颜色");a.add(o,"fogFactor",.1,3,.1).listen().name("雾(能见度系数)");a.add(u,"sky").name("云").onChange(r=>{o.scene.background=r?t:o.scene.fog.color});b(e);k(e);x(o,e); diff --git a/docs/assets/step2.8-0f505c17.js b/docs/assets/step2.8-0f505c17.js new file mode 100644 index 0000000..876ea97 --- /dev/null +++ b/docs/assets/step2.8-0f505c17.js @@ -0,0 +1 @@ +import"./modulepreload-polyfill-3cfb730f.js";import{V as c,m as p,a as l}from"./mapSource-2c762b60.js";import{e}from"./tween.module-e5a426a4.js";import{c as y,a as g,d as E,e as h,b as k,s as L,f as S}from"./util-e741174c.js";const a=y(l,p),s=a.geo2pos(new c(105,40)),v=new c(s.x,s.y,0),z=new c(0,-1,1e3),t=g("#map",v,z);t.scene.add(a);t.addEventListener("update",()=>e.update());E(t,a);const o=()=>new e.Tween(t.camera.position).to({x:s.x,y:s.y-1e3,z:1e4},500),u=()=>{const n=new e.Tween(t.camera.position);o().chain(n.to({y:1e3,z:1500},1e3).easing(e.Easing.Back.In)).start()},f=()=>{const n=new e.Tween(t.camera.position);o().chain(n.to({y:1e3,z:1500},3e3).easing(e.Easing.Bounce.Out)).start()},x=()=>{const n=new e.Tween(t.camera.position);o().chain(n.to({y:1e3,z:1500},3e3).easing(e.Easing.Circular.In)).start()},T=()=>{const n=new e.Tween(t.camera.position);o().chain(n.to({y:1e3,z:1500},3e3).easing(e.Easing.Elastic.In)).start()},q=()=>{const n=new e.Tween(a.rotation);o().chain(n.to({z:4*Math.PI},3e3).easing(e.Easing.Quartic.Out)).start().onComplete(()=>{a.rotation.z=0})};u();var i;(i=document.querySelector("#anim1"))==null||i.addEventListener("click",()=>u());var r;(r=document.querySelector("#anim2"))==null||r.addEventListener("click",()=>f());var m;(m=document.querySelector("#anim3"))==null||m.addEventListener("click",()=>x());var d;(d=document.querySelector("#anim4"))==null||d.addEventListener("click",()=>T());var w;(w=document.querySelector("#anim5"))==null||w.addEventListener("click",()=>q());h(a);k(a);L(t,a);S(t); diff --git a/docs/assets/step2.9-a66e0502.js b/docs/assets/step2.9-a66e0502.js new file mode 100644 index 0000000..3387040 --- /dev/null +++ b/docs/assets/step2.9-a66e0502.js @@ -0,0 +1 @@ +import"./modulepreload-polyfill-3cfb730f.js";import{V as r,a3 as m,a4 as g,a5 as l,G as y,f as S,e as w,l as L,m as M,a as f}from"./mapSource-2c762b60.js";import{T as k}from"./TeapotGeometry-eb533028.js";import{e as n}from"./tween.module-e5a426a4.js";import{c as b,a as v,d as x,e as E,b as B,s as T,f as G}from"./util-e741174c.js";const s=b(f,M);s.receiveShadow=!0;const i=s.geo2pos(new r(105,30)),P=new r(i.x,i.y,0),I=new r(0,-10,1e4),t=v("#map",P,I);t.ambLight.intensity=.2;t.dirLight.intensity=.5;t.dirLight.castShadow=!0;t.scene.add(s);t.renderer.shadowMap.enabled=!0;t.renderer.shadowMap.type=m;const c=(()=>{const e=new g(16777215,10,5e3,Math.PI/4,.5,0),a=s.geo2pos(new r(105,30));return e.position.set(a.x,a.y+2e3,3e3),e.target.position.set(a.x,a.y,0),e.castShadow=!0,e.shadow.camera.visible=!0,e})();t.scene.add(c);t.scene.add(new l(c));const d=new y,p=new S({color:34986}),h=(()=>{const e=s.geo2pos(new r(100,40)),a=new k(200),o=new w(a,p);return o.position.set(e.x,e.y,2e3),o.rotateX(Math.PI/2),o.castShadow=!0,o.receiveShadow=!0,d.add(o),o})(),u=(()=>{const e=s.geo2pos(new r(110,40)),a=new L(200,50),o=new w(a,p);return o.position.set(e.x,e.y,2e3),o.rotateX(Math.PI/2),o.castShadow=!0,o.receiveShadow=!0,d.add(o),o})();t.scene.add(d);x(t,s);new n.Tween(t.camera.position).to({y:1e3,z:1e3},5e3).easing(n.Easing.Bounce.Out).start(500);new n.Tween(h.position).to({z:200},1e3).easing(n.Easing.Bounce.Out).start(6e3),new n.Tween(u.position).to({z:250},1e3).easing(n.Easing.Bounce.Out).start(7e3);(()=>{const e=document.querySelector("#anim");t.addEventListener("update",a=>{n.update(),e.checked&&(h.rotation.y+=a.delta,u.rotation.y+=a.delta)})})();(()=>{const e=document.querySelector("#shadow");e.addEventListener("click",()=>{t.renderer.shadowMap.enabled=e.checked,t.dirLight.castShadow=e.checked,t.renderer.shadowMap.needsUpdate=!0})})();(()=>{const e=document.querySelector("#light");e.addEventListener("click",()=>{c.visible=e.checked})})();E(s);B(s);T(t,s);G(t); diff --git a/docs/assets/step3.1-64f177e6.js b/docs/assets/step3.1-64f177e6.js new file mode 100644 index 0000000..225e5a8 --- /dev/null +++ b/docs/assets/step3.1-64f177e6.js @@ -0,0 +1 @@ +var y=Object.defineProperty;var P=(i,s,t)=>s in i?y(i,s,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[s]=t;var n=(i,s,t)=>(P(i,typeof s!="symbol"?s+"":s,t),t);import"./modulepreload-polyfill-3cfb730f.js";import{g as v}from"./lil-gui.module.min-a1e98589.js";import{O as D,E as S,u as z,W as C,v as f,w as E,y as _,z as A,r as u,I as x,F,V as M,T as b,al as I,Z as R,aa as k,am as B,ag as T,an as Z,ao as j,m as O,a as X}from"./mapSource-2c762b60.js";import{c as G,b as U,s as V}from"./util-e741174c.js";import{M as W}from"./MapControls-abd2b561.js";import{S as Y}from"./stats.module-8826aad6.js";D.DEFAULT_UP.set(0,0,1);class q extends S{constructor(t,e){super();n(this,"scene",new z);n(this,"renderer",new C({antialias:!0,logarithmicDepthBuffer:!0}));n(this,"camera",new f(50,1,.1,1e3));n(this,"controls");n(this,"ambLight",new E(16777215));n(this,"dirLight",new _(16777215));n(this,"container");n(this,"flash",!0);n(this,"rain",!0);n(this,"_stats",new Y);n(this,"_clock",new A);this.container=t,this.renderer.sortObjects=!1,this.renderer.setPixelRatio(window.devicePixelRatio),this.container.appendChild(this.renderer.domElement);const o=0;this.scene.background=new u(o),this.scene.fog=new x(o),this.camera=new f(50,1,.1,1e3),this.camera.position.set(e.x,e.y-30,e.z),this.scene.add(this.ambLight),this.dirLight.target.position.set(0,5e3,0),this.dirLight.position.set(-1e3,1e4,1e4),this.scene.add(this.dirLight),this.scene.add(new F(this.dirLight)),this._stats.dom.style.left="",this._stats.dom.style.top="",this._stats.dom.style.right="0px",this._stats.dom.style.bottom="0px",this._stats.dom.style.zIndex="100",t.appendChild(this._stats.dom),this.controls=this.createControls(e),window.addEventListener("resize",this.resize.bind(this)),this.resize(),this.animate()}createControls(t){const e=new W(this.camera,this.container);return e.domElement=this.container,e.target.set(t.x,t.y,3),e.minDistance=.1,e.maxDistance=100,e.zoomSpeed=3,e.minPolarAngle=1,e.maxPolarAngle=1.4,e.enableDamping=!0,e.listenToKeyEvents(window),e.addEventListener("change",()=>{const o=Math.max(e.getPolarAngle(),.2),r=Math.max(e.getDistance(),1);e.zoomSpeed=Math.max(Math.log(r),1.2),this.scene.fog instanceof x&&(this.scene.fog.density=o/r/4),this.camera.far=Math.min(r/o*8,6e4),this.camera.near=Math.min(Math.max(this.camera.far/100,.1),1),this.camera.updateProjectionMatrix()}),e}resize(){const t=this.container.clientWidth,e=this.container.clientHeight;return this.renderer.setPixelRatio(window.devicePixelRatio),this.renderer.setSize(t,e),this.camera.aspect=t/e,this.camera.updateProjectionMatrix(),this}animate(){this.controls.update(),this._stats.update(),this.renderer.render(this.scene,this.camera);const t=this._clock.getDelta();this.dispatchEvent({type:"update",delta:t}),requestAnimationFrame(this.animate.bind(this))}}const d=G(X,O),H=document.querySelector("#map"),l=d.geo2pos(new M(94.8,29.6)),a=new q(H,new M(l.x,l.y,8));a.scene.add(d);const w=(()=>{const i=new b().load("../image/rain.png");i.rotation=.2;const s=new I({size:10,map:i,transparent:!0,depthTest:!1,fog:!1,sizeAttenuation:!1}),t=[],e=new R,o=5e3;for(let g=0;g{if(a.rain){const h=e.attributes.position;for(let c=0;c{const i=new b().load("../image/thunder.png");i.colorSpace=T;const s=new Z(new j({map:i,fog:!1,depthTest:!1}));s.position.set(l.x,l.y+30,15),s.scale.setScalar(20),a.scene.add(s),d.addEventListener("update",t=>{var e;if(a.flash){let o=new u(4386);s.visible=!1,a.ambLight.intensity=.5,a.dirLight.intensity=.5,Math.round(Math.random()*10)%20===0&&(o=new u(8806),s.position.setX(l.x+Math.random()*100-50),s.visible=!0,a.ambLight.intensity=5,a.dirLight.intensity=3),(e=a.scene.fog)==null||e.color.set(o),a.scene.background=new u(o)}})})();const L=new v,m=L.addFolder("地图控制");m.add(d.scale,"z",1,10,.1).name("高度拉伸倍数");m.add(d.position,"z",-1,1,.01).name("高度偏移");m.add(a.controls,"minPolarAngle",Math.PI/4,Math.PI/2,.1).name("最小倾角限制");m.add(a.controls,"maxPolarAngle",Math.PI/4,Math.PI/2,.1).name("最大倾角限制");m.add(a.controls,"enableDamping").name("惯性控制");m.add(a.controls,"autoRotate").name("自动旋转");m.add(d,"reload").name("重建瓦片树");const p=L.addFolder("环境设置");p.addColor(a.ambLight,"color").name("环境光颜色");p.addColor(a.dirLight,"color").name("直射光光颜色");p.add(a,"flash").name("闪电特效");p.add(a,"rain").name("下雨特效").onChange(i=>w.visible=i);p.add(w.material,"size",5,20,.1).name("雨滴大小");p.add(w.userData,"speed",2,100,1).name("雨滴速度");U(d);V(a,d); diff --git a/docs/assets/step3.2-5d5f42e4.js b/docs/assets/step3.2-5d5f42e4.js new file mode 100644 index 0000000..0dbb5e6 --- /dev/null +++ b/docs/assets/step3.2-5d5f42e4.js @@ -0,0 +1 @@ +var M=Object.defineProperty;var D=(o,e,i)=>e in o?M(o,e,{enumerable:!0,configurable:!0,writable:!0,value:i}):o[e]=i;var h=(o,e,i)=>(D(o,typeof e!="symbol"?e+"":e,i),i);import"./modulepreload-polyfill-3cfb730f.js";import{g as F}from"./lil-gui.module.min-a1e98589.js";import{E as V,V as c,a8 as L,O as A,u as _,W as K,v as E,w as j,y as R,z as C,r as P,I as W,ai as T,a as z,ap as H,aq as U,m as q}from"./mapSource-2c762b60.js";import{e as Q}from"./tween.module-e5a426a4.js";import{G as X}from"./GLTFLoader-9aad0524.js";import{c as B,f as G,e as I,b as O,s as Y}from"./util-e741174c.js";import{S as Z}from"./stats.module-8826aad6.js";const J={type:"change"};class N extends V{constructor(e,i){super(),this.object=e,this.domElement=i,this.enabled=!0,this.movementSpeed=1,this.rollSpeed=.005,this.dragToLook=!1,this.autoForward=!1;const t=this,r=1e-6,d=new L,u=new c;this.tmpQuaternion=new L,this.status=0,this.moveState={up:0,down:0,left:0,right:0,forward:0,back:0,pitchUp:0,pitchDown:0,yawLeft:0,yawRight:0,rollLeft:0,rollRight:0},this.moveVector=new c(0,0,0),this.rotationVector=new c(0,0,0),this.keydown=function(s){if(!(s.altKey||this.enabled===!1)){switch(s.code){case"ShiftLeft":case"ShiftRight":this.movementSpeedMultiplier=.1;break;case"KeyW":this.moveState.forward=1;break;case"KeyS":this.moveState.back=1;break;case"KeyA":this.moveState.left=1;break;case"KeyD":this.moveState.right=1;break;case"KeyR":this.moveState.up=1;break;case"KeyF":this.moveState.down=1;break;case"ArrowUp":this.moveState.pitchUp=1;break;case"ArrowDown":this.moveState.pitchDown=1;break;case"ArrowLeft":this.moveState.yawLeft=1;break;case"ArrowRight":this.moveState.yawRight=1;break;case"KeyQ":this.moveState.rollLeft=1;break;case"KeyE":this.moveState.rollRight=1;break}this.updateMovementVector(),this.updateRotationVector()}},this.keyup=function(s){if(this.enabled!==!1){switch(s.code){case"ShiftLeft":case"ShiftRight":this.movementSpeedMultiplier=1;break;case"KeyW":this.moveState.forward=0;break;case"KeyS":this.moveState.back=0;break;case"KeyA":this.moveState.left=0;break;case"KeyD":this.moveState.right=0;break;case"KeyR":this.moveState.up=0;break;case"KeyF":this.moveState.down=0;break;case"ArrowUp":this.moveState.pitchUp=0;break;case"ArrowDown":this.moveState.pitchDown=0;break;case"ArrowLeft":this.moveState.yawLeft=0;break;case"ArrowRight":this.moveState.yawRight=0;break;case"KeyQ":this.moveState.rollLeft=0;break;case"KeyE":this.moveState.rollRight=0;break}this.updateMovementVector(),this.updateRotationVector()}},this.pointerdown=function(s){if(this.enabled!==!1)if(this.dragToLook)this.status++;else{switch(s.button){case 0:this.moveState.forward=1;break;case 2:this.moveState.back=1;break}this.updateMovementVector()}},this.pointermove=function(s){if(this.enabled!==!1&&(!this.dragToLook||this.status>0)){const l=this.getContainerDimensions(),p=l.size[0]/2,k=l.size[1]/2;this.moveState.yawLeft=-(s.pageX-l.offset[0]-p)/p,this.moveState.pitchDown=(s.pageY-l.offset[1]-k)/k,this.updateRotationVector()}},this.pointerup=function(s){if(this.enabled!==!1){if(this.dragToLook)this.status--,this.moveState.yawLeft=this.moveState.pitchDown=0;else{switch(s.button){case 0:this.moveState.forward=0;break;case 2:this.moveState.back=0;break}this.updateMovementVector()}this.updateRotationVector()}},this.pointercancel=function(){this.enabled!==!1&&(this.dragToLook?(this.status=0,this.moveState.yawLeft=this.moveState.pitchDown=0):(this.moveState.forward=0,this.moveState.back=0,this.updateMovementVector()),this.updateRotationVector())},this.contextMenu=function(s){this.enabled!==!1&&s.preventDefault()},this.update=function(s){if(this.enabled===!1)return;const l=s*t.movementSpeed,p=s*t.rollSpeed;t.object.translateX(t.moveVector.x*l),t.object.translateY(t.moveVector.y*l),t.object.translateZ(t.moveVector.z*l),t.tmpQuaternion.set(t.rotationVector.x*p,t.rotationVector.y*p,t.rotationVector.z*p,1).normalize(),t.object.quaternion.multiply(t.tmpQuaternion),(u.distanceToSquared(t.object.position)>r||8*(1-d.dot(t.object.quaternion))>r)&&(t.dispatchEvent(J),d.copy(t.object.quaternion),u.copy(t.object.position))},this.updateMovementVector=function(){const s=this.moveState.forward||this.autoForward&&!this.moveState.back?1:0;this.moveVector.x=-this.moveState.left+this.moveState.right,this.moveVector.y=-this.moveState.down+this.moveState.up,this.moveVector.z=-s+this.moveState.back},this.updateRotationVector=function(){this.rotationVector.x=-this.moveState.pitchDown+this.moveState.pitchUp,this.rotationVector.y=-this.moveState.yawRight+this.moveState.yawLeft,this.rotationVector.z=-this.moveState.rollRight+this.moveState.rollLeft},this.getContainerDimensions=function(){return this.domElement!=document?{size:[this.domElement.offsetWidth,this.domElement.offsetHeight],offset:[this.domElement.offsetLeft,this.domElement.offsetTop]}:{size:[window.innerWidth,window.innerHeight],offset:[0,0]}},this.dispose=function(){this.domElement.removeEventListener("contextmenu",w),this.domElement.removeEventListener("pointerdown",f),this.domElement.removeEventListener("pointermove",v),this.domElement.removeEventListener("pointerup",S),this.domElement.removeEventListener("pointercancel",b),window.removeEventListener("keydown",g),window.removeEventListener("keyup",y)};const w=this.contextMenu.bind(this),v=this.pointermove.bind(this),f=this.pointerdown.bind(this),S=this.pointerup.bind(this),b=this.pointercancel.bind(this),g=this.keydown.bind(this),y=this.keyup.bind(this);this.domElement.addEventListener("contextmenu",w),this.domElement.addEventListener("pointerdown",f),this.domElement.addEventListener("pointermove",v),this.domElement.addEventListener("pointerup",S),this.domElement.addEventListener("pointercancel",b),window.addEventListener("keydown",g),window.addEventListener("keyup",y),this.updateMovementVector(),this.updateRotationVector()}}A.DEFAULT_UP.set(0,0,1);class $ extends V{constructor(i,t){super();h(this,"scene",new _);h(this,"renderer",new K({antialias:!0,logarithmicDepthBuffer:!0}));h(this,"camera",new E(80,1,.1,1e3));h(this,"controls");h(this,"ambLight",new j(16777215,.5));h(this,"dirLight",new R(16777215,1.5));h(this,"container");h(this,"_stats",new Z);h(this,"_clock",new C);this.container=i,this.renderer.sortObjects=!0,this.renderer.setPixelRatio(window.devicePixelRatio),this.container.appendChild(this.renderer.domElement);const r=14414079;this.scene.background=new P(r),this.scene.fog=new W(r,.0012),this.renderer.shadowMap.enabled=!0,this.camera=new E(50,1,.1,1e3),this.camera.position.set(t.x,t.y+20,t.z+10),this.camera.lookAt(t.x,t.y,t.z),this.scene.add(this.ambLight),this._stats.dom.style.left="",this._stats.dom.style.top="",this._stats.dom.style.right="0px",this._stats.dom.style.bottom="0px",this._stats.dom.style.zIndex="100",i.appendChild(this._stats.dom),this.controls=this.createControls(),window.addEventListener("resize",this.resize.bind(this)),this.resize(),this.animate()}createControls(){const i=new N(this.camera,this.container);return i.domElement=this.container,i.autoForward=!1,i.movementSpeed=2,i.rollSpeed=.05,i}resize(){const i=this.container.clientWidth,t=this.container.clientHeight;return this.renderer.setPixelRatio(window.devicePixelRatio),this.renderer.setSize(i,t),this.camera.aspect=i/t,this.camera.updateProjectionMatrix(),this}animate(){this._stats.update();const i=this._clock.getDelta();this.controls.update(i),this.renderer.render(this.scene,this.camera),this.dispatchEvent({type:"update",delta:i}),requestAnimationFrame(this.animate.bind(this))}}const a=B(z,q),ee=document.querySelector("#map"),x=a.geo2pos(new c(86.92,28.5)),n=new $(ee,new c(x.x,x.y,10));n.scene.add(a);a.receiveShadow=!0;const te=new X;te.loadAsync("../model/Flamingo.glb").then(o=>{const e=o.scene;e.scale.setScalar(.01),n.scene.add(e),e.traverse(i=>{i.receiveShadow=!0,i.castShadow=!0}),oe(e),se(e),ie(o)});const oe=o=>{const e=new R(16777215,1.5);e.target=o,e.position.set(-2,3,-10),e.castShadow=!0,e.shadow.camera.near=.1,e.shadow.camera.far=1e3,e.shadow.camera.left=-10,e.shadow.camera.right=10,e.shadow.camera.top=10,e.shadow.camera.bottom=-10,e.shadow.mapSize.setScalar(1024),o.add(e)},ie=o=>{const e=o.scene,i=new T(e);i.clipAction(o.animations[0]).play(),n.addEventListener("update",t=>{var d;e.position.set(0,-.5,-3),e.applyMatrix4(n.camera.matrixWorld);const r=((d=a.getLocalInfoFromWorld(new c(e.position.x,e.position.y)))==null?void 0:d.location.z)||0;if(m.modelHeight=e.position.z-r,m.modelHeight<=.2)e.rotateZ(t.delta*Math.PI),n.controls.movementSpeed=0;else{const u=new c(0,0,-10).applyMatrix4(n.camera.matrixWorld);e.lookAt(u),n.controls.movementSpeed=2,i.update(t.delta)}Q.update()})},m={modelHeight:0,mapbox:()=>{a.imgSource=z,a.reload()},google:()=>{a.imgSource=H,a.reload()},bing:()=>{a.imgSource=U,a.reload()},toXmly:()=>{const o=a.geo2pos(new c(86.92,28.4));n.camera.position.set(o.x,o.y,15)},toXian:()=>{const o=a.geo2pos(new c(109,34.7));n.camera.position.set(o.x,o.y,8)},toBeijing:()=>{const o=a.geo2pos(new c(116.4,40));n.camera.position.set(o.x,o.y,10)},toXiangGang:()=>{const o=a.geo2pos(new c(114.18,22.3));n.camera.position.set(o.x,o.y,5)}},se=o=>{const e=new F,i=e.addFolder("环境");i.add(n.scene.fog,"density",1e-4,.01,1e-4).name("能见度系数"),i.add(n.ambLight,"intensity",.1,2,.1).name("环境光强度");const t=e.addFolder("地图源");t.add(m,"mapbox"),t.add(m,"google").name("google(有偏移)"),t.add(m,"bing").name("bing(有偏移)");const r=e.addFolder("小鸟");r.add(o,"visible").name("显示"),r.add(n.controls,"autoForward").name("自动前进"),r.add(o.position,"z").listen().name("飞行海拔高度km"),r.add(m,"modelHeight").listen().name("飞行距地高度km");const d=e.addFolder("定位");d.add(m,"toXian").name("西安"),d.add(m,"toBeijing").name("北京"),d.add(m,"toXmly").name("喜马拉雅")};G(n);I(a);O(a);Y(n,a); diff --git a/docs/assets/step3.3-0a594458.js b/docs/assets/step3.3-0a594458.js new file mode 100644 index 0000000..4bbad22 --- /dev/null +++ b/docs/assets/step3.3-0a594458.js @@ -0,0 +1 @@ +var z=Object.defineProperty;var A=(o,r,e)=>r in o?z(o,r,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[r]=e;var i=(o,r,e)=>(A(o,typeof r!="symbol"?r+"":r,e),e);import"./modulepreload-polyfill-3cfb730f.js";import{g as D}from"./lil-gui.module.min-a1e98589.js";import{V as d,E as S,ad as I,O as R,z as Z,y as W,w as j,v as K,u as O,r as X,I as T,W as Y,G as q,e as B,S as G,g as V,T as U,b as N,m as Q,a as F,ap as H,aq as J,a2 as $}from"./mapSource-2c762b60.js";import{T as k,e as E}from"./tween.module-e5a426a4.js";import{c as ee,e as te,b as oe,s as ae}from"./util-e741174c.js";import{S as re}from"./stats.module-8826aad6.js";const l=new I(0,0,0,"YXZ"),p=new d,ne={type:"change"},se={type:"lock"},ie={type:"unlock"},P=Math.PI/2;class ce extends S{constructor(r,e){super(),this.camera=r,this.domElement=e,this.isLocked=!1,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.pointerSpeed=1,this._onMouseMove=de.bind(this),this._onPointerlockChange=me.bind(this),this._onPointerlockError=he.bind(this),this.connect()}connect(){this.domElement.ownerDocument.addEventListener("mousemove",this._onMouseMove),this.domElement.ownerDocument.addEventListener("pointerlockchange",this._onPointerlockChange),this.domElement.ownerDocument.addEventListener("pointerlockerror",this._onPointerlockError)}disconnect(){this.domElement.ownerDocument.removeEventListener("mousemove",this._onMouseMove),this.domElement.ownerDocument.removeEventListener("pointerlockchange",this._onPointerlockChange),this.domElement.ownerDocument.removeEventListener("pointerlockerror",this._onPointerlockError)}dispose(){this.disconnect()}getObject(){return this.camera}getDirection(r){return r.set(0,0,-1).applyQuaternion(this.camera.quaternion)}moveForward(r){const e=this.camera;p.setFromMatrixColumn(e.matrix,0),p.crossVectors(e.up,p),e.position.addScaledVector(p,r)}moveRight(r){const e=this.camera;p.setFromMatrixColumn(e.matrix,0),e.position.addScaledVector(p,r)}lock(){this.domElement.requestPointerLock()}unlock(){this.domElement.ownerDocument.exitPointerLock()}}function de(o){if(this.isLocked===!1)return;const r=o.movementX||o.mozMovementX||o.webkitMovementX||0,e=o.movementY||o.mozMovementY||o.webkitMovementY||0,t=this.camera;l.setFromQuaternion(t.quaternion),l.y-=r*.002*this.pointerSpeed,l.x-=e*.002*this.pointerSpeed,l.x=Math.max(P-this.maxPolarAngle,Math.min(P-this.minPolarAngle,l.x)),t.quaternion.setFromEuler(l),this.dispatchEvent(ne)}function me(){this.domElement.ownerDocument.pointerLockElement===this.domElement?(this.dispatchEvent(se),this.isLocked=!0):(this.dispatchEvent(ie),this.isLocked=!1)}function he(){console.error("THREE.PointerLockControls: Unable to use Pointer Lock API")}R.DEFAULT_UP.set(0,1,0);let u=!1,b=!1,y=!1,x=!1,f=!1,M=performance.now();const c=new d,w=new d;class le extends S{constructor(e,t=new d(0,-1e3,1e4)){super();i(this,"scene");i(this,"renderer");i(this,"camera");i(this,"controls");i(this,"ambLight");i(this,"dirLight");i(this,"container");i(this,"_stats");i(this,"_clock",new Z);i(this,"_autoForward",!1);i(this,"cameraZ",8);this.container=e,this.renderer=this._createRenderer(),this.scene=this._createScene(),this.camera=this._createCamera(t),this.controls=this._createControls(this.camera,e),this.scene.add(this.controls.getObject()),this._stats=this.createStats(),e.appendChild(this._stats.dom),this.ambLight=this._createAmbLight(),this.scene.add(this.ambLight),this.dirLight=this._createDirLight(),this.scene.add(this.dirLight),this.container.appendChild(this.renderer.domElement),this.container.addEventListener("click",s=>{this.controls.isLocked?s.button===2&&this.controls.unlock():this.controls.lock()}),window.addEventListener("resize",this.resize.bind(this)),this.resize(),this.animate()}get autoForward(){return this._autoForward}set autoForward(e){u=e,this._autoForward=e}createStats(){const e=new re;return e.dom.style.left="",e.dom.style.top="",e.dom.style.right="0px",e.dom.style.bottom="0px",e.dom.style.zIndex="100",e}_createDirLight(){const e=new W(16777215,1.5);return e.target.position.copy(this.camera.position),e.position.set(-1e3,-2e3,1e4),e.castShadow=!0,e.shadow.camera.near=.1,e.shadow.camera.far=100,e.shadow.camera.left=-10,e.shadow.camera.right=10,e.shadow.camera.top=10,e.shadow.camera.bottom=-10,e.shadow.mapSize.setScalar(1024),e}_createAmbLight(){return new j(16777215,2)}_createControls(e,t){const s=new ce(e,t);s.minPolarAngle=Math.PI/2.2,s.maxPolarAngle=Math.PI;const m=function(h){switch(h.code){case"ArrowUp":case"KeyW":u=!0;break;case"ArrowLeft":case"KeyA":y=!0;break;case"ArrowDown":case"KeyS":b=!0;break;case"ArrowRight":case"KeyD":x=!0;break;case"Space":f&&(c.y+=350),f=!1;break}},v=function(h){switch(h.code){case"ArrowUp":case"KeyW":u=!1;break;case"ArrowLeft":case"KeyA":y=!1;break;case"ArrowDown":case"KeyS":b=!1;break;case"ArrowRight":case"KeyD":x=!1;break}};return document.addEventListener("keydown",m),document.addEventListener("keyup",v),s}_createCamera(e){const t=new K(80,1,.1,5e4);return t.position.copy(e),t.name="mainCamera",t}_createScene(){const t=new O;return t.background=new X(12312063),t.fog=new T(12312063,.003),t}_createRenderer(){const e=new Y({antialias:!0,alpha:!0,logarithmicDepthBuffer:!0,precision:"highp"});return e.shadowMap.enabled=!0,e.sortObjects=!0,e.setPixelRatio(window.devicePixelRatio),e}resize(){const e=this.container.clientWidth,t=this.container.clientHeight;return this.renderer.setPixelRatio(window.devicePixelRatio),this.renderer.setSize(e,t),this.camera.aspect=e/t,this.camera.updateProjectionMatrix(),this}animate(){requestAnimationFrame(this.animate.bind(this)),this._stats.update();const e=performance.now(),t=this.controls;if(t.isLocked===!0){u||(u=this.autoForward);const s=(e-M)/1e3;c.x-=c.x*10*s,c.z-=c.z*10*s,c.y-=9.8*300*s,w.z=Number(u)-Number(b),w.x=Number(x)-Number(y),w.normalize(),(u||b)&&(c.z-=w.z*this.cameraZ*5*s),(y||x)&&(c.x-=w.x*this.cameraZ*5*s),t.moveRight(-c.x*s),t.moveForward(-c.z*s),t.getObject().position.y+=c.y*s,t.getObject().position.y{var h;const r=a.controls.getObject();if(!a.controls.isLocked||o.button!=0)return;const e=(h=n.getLocalInfoFromScreen(r,new N(0,0)))==null?void 0:h.point;if(!e)return;const t=_.clone();t.scale.setScalar(a.cameraZ/40),C.add(t);const s=r.position.clone().applyMatrix4(n.matrixWorld.clone().invert());t.position.copy(s);const m=1e3;new k(t.position).to({x:e.x,y:e.y},m).easing(E.Easing.Quadratic.Out).start(),new k(t.position).to({z:e.z},m).easing(E.Easing.Quadratic.In).start().onComplete(()=>{setTimeout(()=>{t.removeFromParent(),t.geometry.dispose(),t.material.dispose()},10*m)}),new k(t.rotation).to({x:Math.PI,y:Math.PI,z:Math.PI},m).start();const v=r.position.y;new k(r.position).to({y:v+1},100).repeat(1).yoyo(!0).start(1)});a.container.addEventListener("mousewheel",o=>{a.controls.isLocked&&o instanceof WheelEvent&&(a.cameraZ+=o.deltaY/500)});a.addEventListener("update",o=>{E.update(),a.dirLight.position.set(1,3,0),a.dirLight.position.applyMatrix4(a.camera.matrixWorld),a.dirLight.updateMatrixWorld(),a.dirLight.target.position.set(0,2,-5),a.dirLight.target.position.applyMatrix4(a.camera.matrixWorld),a.dirLight.target.updateMatrixWorld()});const g={mapbox:()=>{n.imgSource=F,n.reload()},google:()=>{n.imgSource=H,n.reload()},bing:()=>{n.imgSource=J,n.reload()},toXian:()=>{const o=n.geo2pos(new d(108.94,34.3));a.camera.position.set(o.x,2,-o.y+5),a.cameraZ=2,a.camera.rotation.set(-.46,0,0)},toXiangGang:()=>{const o=n.geo2pos(new d(114.18,22.3));a.camera.position.set(o.x,2,-o.y),a.cameraZ=2,a.camera.rotation.set(-.46,0,0)},toFushishan:()=>{const o=n.geo2pos(new d(138.7322,35.35356));a.camera.position.set(o.x,5,-o.y+5),a.cameraZ=5,a.camera.rotation.set(-.46,0,0)}};(()=>{const o=new D,r=o.addFolder("环境");r.add(a.scene.fog,"density",1e-4,.1,1e-4).name("能见度系数"),r.add(a.ambLight,"intensity",.1,2,.1).name("环境光强度"),r.add(a.dirLight,"intensity",.1,2,.1).name("直射光强度");const e=o.addFolder("地图源");e.add(g,"mapbox"),e.add(g,"google").name("google(有偏移)"),e.add(g,"bing").name("bing(有偏移)");const t=o.addFolder("定位");t.add(g,"toXian").name("西安"),t.add(g,"toXiangGang").name("香港"),t.add(g,"toFushishan").name("富士山");const s=o.addFolder("控制");s.add(a,"cameraZ",0,10,.1).name("飞行海拔高度km").listen().onChange(m=>a.camera.position.setY(m)),s.add(a,"autoForward").name("自动前进")})();const ue=o=>{const r=new $().setPath("../image/skybox/").load(["skybox_py.png","skybox_py.png","skybox_px.png","skybox_px.png","skybox_pz.png","skybox_pz.png"]);o.scene.background=r};ue(a);te(n);oe(n);ae(a,n); diff --git a/docs/assets/step3.4-bf312301.js b/docs/assets/step3.4-bf312301.js new file mode 100644 index 0000000..f7f9805 --- /dev/null +++ b/docs/assets/step3.4-bf312301.js @@ -0,0 +1,2 @@ +import"./modulepreload-polyfill-3cfb730f.js";import{g as P}from"./lil-gui.module.min-a1e98589.js";import{ar as E,ae as z,af as C,as as H,V as S,a3 as G,y as I,H as B,ai as F,g as x,e as q,b as _,m as V,a as T,ap as O,aq as R}from"./mapSource-2c762b60.js";import{e as L,T as M}from"./tween.module-e5a426a4.js";import{G as W}from"./GLTFLoader-9aad0524.js";import{c as D,a as N,f as j,e as J,b as U,s as X}from"./util-e741174c.js";class Z extends E{constructor(t,e={}){const o=e.font;if(o===void 0)super();else{const s=o.generateShapes(t,e.size);e.depth===void 0&&e.height!==void 0&&console.warn("THREE.TextGeometry: .height is now depreciated. Please use .depth instead"),e.depth=e.depth!==void 0?e.depth:e.height!==void 0?e.height:50,e.bevelThickness===void 0&&(e.bevelThickness=10),e.bevelSize===void 0&&(e.bevelSize=8),e.bevelEnabled===void 0&&(e.bevelEnabled=!1),super(s,e)}this.type="TextGeometry"}}class K extends z{constructor(t){super(t)}load(t,e,o,s){const a=this,i=new C(this.manager);i.setPath(this.path),i.setRequestHeader(this.requestHeader),i.setWithCredentials(this.withCredentials),i.load(t,function(r){const p=a.parse(JSON.parse(r));e&&e(p)},o,s)}parse(t){return new Q(t)}}class Q{constructor(t){this.isFont=!0,this.type="Font",this.data=t}generateShapes(t,e=100){const o=[],s=$(t,e,this.data);for(let a=0,i=s.length;a{ne(n),se(n),ae(n),oe(n),re(n)});const oe=n=>{const t=n.scene,e=new I(16777215,3);e.target=t,e.position.set(5,10,-5),e.castShadow=!0,e.shadow.camera.visible=!0;const o=e.shadow.camera;o.far=30,o.near=.1,o.left=-2,o.right=2,o.top=2,o.bottom=-2,t.add(e),c.scene.add(new B(e.shadow.camera))},ne=n=>{const t=n.scene;c.scene.add(t),t.traverse(o=>{o.receiveShadow=!0,o.castShadow=!0}),t.rotateX(Math.PI/2),t.scale.setScalar(.5);const e=new F(n.scene);ie(n,e),c.addEventListener("update",o=>{L.update(),e.update(o.delta)})},se=n=>{const t=n.scene;k.loadAsync("../model/Stork.glb").then(e=>{const o=e.scene;o.rotateY(Math.PI),o.scale.setScalar(.005),o.traverse(a=>{a.castShadow=!0}),o.position.set(0,2,2),t.add(o);const s=new F(o);s.clipAction(e.animations[0]).play(),c.addEventListener("update",a=>{L.update(),s.update(a.delta)})})},ae=n=>{new K().load("../fonts/helvetiker_regular.typeface.json",function(e){const o=new Z("Hit Points 99.9%",{font:e,size:80,height:5,curveSegments:12,bevelEnabled:!0,bevelThickness:10,bevelSize:8,bevelSegments:5}),s=[new x({color:16777215,flatShading:!0}),new x({color:13421772})],a=new q(o,s);a.geometry.center(),a.scale.setScalar(.002),a.position.setY(2),a.rotation.set(0,Math.PI,0),n.scene.add(a)})},ie=(n,t)=>{const e=n.scene;let o=new M(e.position);c.container.addEventListener("click",s=>{var p;const a=c.camera,i=new _;i.x=s.clientX/c.container.clientWidth*2-1,i.y=1-s.clientY/c.container.clientHeight*2;const r=(p=h.getLocalInfoFromScreen(a,i))==null?void 0:p.point;r&&(o=ce(n,t,r,o))})},ce=(n,t,e,o)=>{const s=n.scene,a=n.animations;o.stop(),o=new M(s.position);const i=e.clone();i.setZ(s.position.z),s.lookAt(i),s.rotateY(Math.PI);const r=e.distanceTo(s.position);if(r<30){const p=r<3?3:1;o.to(e,r*p*400).start().onStart(()=>{t.stopAllAction(),t.clipAction(a[p]).play()}).onUpdate((u,g)=>{var y;const m=(y=h.getLocalInfoFromWorld(new S(u.x,u.y)))==null?void 0:y.point;m&&s.position.copy(m)}).onComplete(()=>{t.stopAllAction(),t.clipAction(a[0]).play()})}else s.position.copy(e),t.stopAllAction();return o},w={mapbox:()=>{h.imgSource=T,h.reload()},google:()=>{h.imgSource=O,h.reload()},bing:()=>{h.imgSource=R,h.reload()},toXian:()=>{const n=h.geo2pos(new S(108.94,34.3));c.camera.position.set(n.x,n.y-3,2),c.controls.target.set(n.x,n.y,0)},toFushishan:()=>{const n=h.geo2pos(new S(138.7322,35.35356));c.camera.position.set(n.x,n.y+10,8),c.controls.target.set(n.x,n.y,0)},modelSize:.5},re=n=>{const t=new P,e=t.addFolder("环境");e.add(c.ambLight,"intensity",.1,2,.1).name("环境光强度"),e.add(c.dirLight,"intensity",.1,2,.1).name("直射光强度");const o=t.addFolder("地图源");o.add(w,"mapbox"),o.add(w,"google").name("google(有偏移)"),o.add(w,"bing").name("bing(有偏移)");const s=t.addFolder("定位");s.add(w,"toXian").name("西安"),s.add(w,"toFushishan").name("富士山"),t.addFolder("控制").add(w,"modelSize",.01,2,.01).name("模型大小").onChange(i=>n.scene.scale.setScalar(i))};j(c);J(h);U(h);X(c,h); diff --git a/docs/assets/step3.5-b10ba913.js b/docs/assets/step3.5-b10ba913.js new file mode 100644 index 0000000..dcd4d00 --- /dev/null +++ b/docs/assets/step3.5-b10ba913.js @@ -0,0 +1,97 @@ +var te=Object.defineProperty;var re=(i,t,e)=>t in i?te(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e;var h=(i,t,e)=>(re(i,typeof t!="symbol"?t+"":t,e),e);import"./modulepreload-polyfill-3cfb730f.js";import{e as ae,V as o,r as D,at as ie,au as oe,d as k,v as H,av as ne,aw as j,ax as U,ay as se,a0 as B,O as ce,E as le,z as de,y as ue,w as me,u as fe,I as he,W as ge,aj as pe,P as ve,T as xe,az as we,m as ye,a as Ce,ak as G}from"./mapSource-2c762b60.js";import{g as Se}from"./lil-gui.module.min-a1e98589.js";import{S as Me}from"./Sky-419151f3.js";import{c as be,b as _e,s as Le}from"./util-e741174c.js";import{M as De}from"./MapControls-abd2b561.js";class Pe extends ae{constructor(t,e={}){super(t),this.isWater=!0;const r=this,s=e.textureWidth!==void 0?e.textureWidth:512,a=e.textureHeight!==void 0?e.textureHeight:512,c=e.clipBias!==void 0?e.clipBias:0,l=e.alpha!==void 0?e.alpha:1,v=e.time!==void 0?e.time:0,x=e.waterNormals!==void 0?e.waterNormals:null,q=e.sunDirection!==void 0?e.sunDirection:new o(.70707,.70707,0),O=new D(e.sunColor!==void 0?e.sunColor:16777215),X=new D(e.waterColor!==void 0?e.waterColor:8355711),T=e.eye!==void 0?e.eye:new o(0,0,0),K=e.distortionScale!==void 0?e.distortionScale:20,J=e.side!==void 0?e.side:ie,Q=e.fog!==void 0?e.fog:!1,C=new oe,w=new o,S=new o,E=new o,b=new k,P=new o(0,0,-1),g=new B,_=new o,z=new o,L=new B,F=new k,u=new H,A=new ne(s,a),W={name:"MirrorShader",uniforms:j.merge([U.fog,U.lights,{normalSampler:{value:null},mirrorSampler:{value:null},alpha:{value:1},time:{value:0},size:{value:1},distortionScale:{value:20},textureMatrix:{value:new k},sunColor:{value:new D(8355711)},sunDirection:{value:new o(.70707,.70707,0)},eye:{value:new o},waterColor:{value:new D(5592405)}}]),vertexShader:` + uniform mat4 textureMatrix; + uniform float time; + + varying vec4 mirrorCoord; + varying vec4 worldPosition; + + #include + #include + #include + #include + + void main() { + mirrorCoord = modelMatrix * vec4( position, 1.0 ); + worldPosition = mirrorCoord.xyzw; + mirrorCoord = textureMatrix * mirrorCoord; + vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 ); + gl_Position = projectionMatrix * mvPosition; + + #include + #include + #include + #include + #include + }`,fragmentShader:` + uniform sampler2D mirrorSampler; + uniform float alpha; + uniform float time; + uniform float size; + uniform float distortionScale; + uniform sampler2D normalSampler; + uniform vec3 sunColor; + uniform vec3 sunDirection; + uniform vec3 eye; + uniform vec3 waterColor; + + varying vec4 mirrorCoord; + varying vec4 worldPosition; + + vec4 getNoise( vec2 uv ) { + vec2 uv0 = ( uv / 103.0 ) + vec2(time / 17.0, time / 29.0); + vec2 uv1 = uv / 107.0-vec2( time / -19.0, time / 31.0 ); + vec2 uv2 = uv / vec2( 8907.0, 9803.0 ) + vec2( time / 101.0, time / 97.0 ); + vec2 uv3 = uv / vec2( 1091.0, 1027.0 ) - vec2( time / 109.0, time / -113.0 ); + vec4 noise = texture2D( normalSampler, uv0 ) + + texture2D( normalSampler, uv1 ) + + texture2D( normalSampler, uv2 ) + + texture2D( normalSampler, uv3 ); + return noise * 0.5 - 1.0; + } + + void sunLight( const vec3 surfaceNormal, const vec3 eyeDirection, float shiny, float spec, float diffuse, inout vec3 diffuseColor, inout vec3 specularColor ) { + vec3 reflection = normalize( reflect( -sunDirection, surfaceNormal ) ); + float direction = max( 0.0, dot( eyeDirection, reflection ) ); + specularColor += pow( direction, shiny ) * sunColor * spec; + diffuseColor += max( dot( sunDirection, surfaceNormal ), 0.0 ) * sunColor * diffuse; + } + + #include + #include + #include + #include + #include + #include + #include + #include + + void main() { + + #include + vec4 noise = getNoise( worldPosition.xz * size ); + vec3 surfaceNormal = normalize( noise.xzy * vec3( 1.5, 1.0, 1.5 ) ); + + vec3 diffuseLight = vec3(0.0); + vec3 specularLight = vec3(0.0); + + vec3 worldToEye = eye-worldPosition.xyz; + vec3 eyeDirection = normalize( worldToEye ); + sunLight( surfaceNormal, eyeDirection, 100.0, 2.0, 0.5, diffuseLight, specularLight ); + + float distance = length(worldToEye); + + vec2 distortion = surfaceNormal.xz * ( 0.001 + 1.0 / distance ) * distortionScale; + vec3 reflectionSample = vec3( texture2D( mirrorSampler, mirrorCoord.xy / mirrorCoord.w + distortion ) ); + + float theta = max( dot( eyeDirection, surfaceNormal ), 0.0 ); + float rf0 = 0.3; + float reflectance = rf0 + ( 1.0 - rf0 ) * pow( ( 1.0 - theta ), 5.0 ); + vec3 scatter = max( 0.0, dot( surfaceNormal, eyeDirection ) ) * waterColor; + vec3 albedo = mix( ( sunColor * diffuseLight * 0.3 + scatter ) * getShadowMask(), ( vec3( 0.1 ) + reflectionSample * 0.9 + reflectionSample * specularLight ), reflectance); + vec3 outgoingLight = albedo; + gl_FragColor = vec4( outgoingLight, alpha ); + + #include + #include + #include + }`},m=new se({name:W.name,uniforms:j.clone(W.uniforms),vertexShader:W.vertexShader,fragmentShader:W.fragmentShader,lights:!0,side:J,fog:Q});m.uniforms.mirrorSampler.value=A.texture,m.uniforms.textureMatrix.value=F,m.uniforms.alpha.value=l,m.uniforms.time.value=v,m.uniforms.normalSampler.value=x,m.uniforms.sunColor.value=O,m.uniforms.waterColor.value=X,m.uniforms.sunDirection.value=q,m.uniforms.distortionScale.value=K,m.uniforms.eye.value=T,r.material=m,r.onBeforeRender=function(d,Y,M){if(S.setFromMatrixPosition(r.matrixWorld),E.setFromMatrixPosition(M.matrixWorld),b.extractRotation(r.matrixWorld),w.set(0,0,1),w.applyMatrix4(b),_.subVectors(S,E),_.dot(w)>0)return;_.reflect(w).negate(),_.add(S),b.extractRotation(M.matrixWorld),P.set(0,0,-1),P.applyMatrix4(b),P.add(E),z.subVectors(S,P),z.reflect(w).negate(),z.add(S),u.position.copy(_),u.up.set(0,1,0),u.up.applyMatrix4(b),u.up.reflect(w),u.lookAt(z),u.far=M.far,u.updateMatrixWorld(),u.projectionMatrix.copy(M.projectionMatrix),F.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),F.multiply(u.projectionMatrix),F.multiply(u.matrixWorldInverse),C.setFromNormalAndCoplanarPoint(w,S),C.applyMatrix4(u.matrixWorldInverse),g.set(C.normal.x,C.normal.y,C.normal.z,C.constant);const f=u.projectionMatrix;L.x=(Math.sign(g.x)+f.elements[8])/f.elements[0],L.y=(Math.sign(g.y)+f.elements[9])/f.elements[5],L.z=-1,L.w=(1+f.elements[10])/f.elements[14],g.multiplyScalar(2/g.dot(L)),f.elements[2]=g.x,f.elements[6]=g.y,f.elements[10]=g.z+1-c,f.elements[14]=g.w,T.setFromMatrixPosition(M.matrixWorld);const Z=d.getRenderTarget(),$=d.xr.enabled,ee=d.shadowMap.autoUpdate;r.visible=!1,d.xr.enabled=!1,d.shadowMap.autoUpdate=!1,d.setRenderTarget(A),d.state.buffers.depth.setMask(!0),d.autoClear===!1&&d.clear(),d.render(Y,u),r.visible=!0,d.xr.enabled=$,d.shadowMap.autoUpdate=ee,d.setRenderTarget(Z);const N=M.viewport;N!==void 0&&d.state.viewport(N)}}}ce.DEFAULT_UP.set(0,1,0);class ze extends le{constructor(e,r=new o(0,3e3,0),s=new o(0,-1e3,1e4)){super();h(this,"scene");h(this,"renderer");h(this,"camera");h(this,"controls");h(this,"ambLight");h(this,"dirLight");h(this,"container");h(this,"_clock",new de);h(this,"_fogFactor",1);this.container=e,this.renderer=this._createRenderer(),this.scene=this._createScene(),this.camera=this._createCamera(s),this.controls=this._createControls(r,this.camera,e),this.ambLight=this._createAmbLight(),this.scene.add(this.ambLight),this.dirLight=this._createDirLight(),this.scene.add(this.dirLight),this.container.appendChild(this.renderer.domElement),window.addEventListener("resize",this.resize.bind(this)),this.resize(),this.animate()}get fogFactor(){return this._fogFactor}set fogFactor(e){this._fogFactor=e,this.controls.dispatchEvent({type:"change",target:this.controls})}_createDirLight(){const e=new ue(16777215,1.5);return e.target.position.copy(this.controls.target),e.position.set(-1e3,-2e3,1e4),e}_createAmbLight(){return new me(16777215,2)}_createControls(e,r,s){const a=new De(r,s);return a.target.copy(e),a.minDistance=.1,a.maxDistance=15e3,a.zoomSpeed=3,a.maxPolarAngle=1.2,a.enableDamping=!0,a.listenToKeyEvents(window),a.addEventListener("change",()=>{const c=Math.max(this.controls.getPolarAngle(),.1),l=Math.max(this.controls.getDistance(),.1);a.zoomSpeed=Math.max(Math.log(l),1.8),this.camera.far=Math.max(Math.min(l/c*8,5e4),100),this.camera.near=this.camera.far/1e3,this.camera.updateProjectionMatrix()}),a.saveState(),a}_createCamera(e){const r=new H(80,1,.1,5e4);return r.position.copy(e),r}_createScene(){const r=new fe;return r.background=new D(14414079),r.fog=new he(14414079,0),r}_createRenderer(){const e=new ge({antialias:!0,alpha:!0,logarithmicDepthBuffer:!0,precision:"highp"});return e.sortObjects=!0,e.setPixelRatio(window.devicePixelRatio),e}resize(){const e=this.container.clientWidth,r=this.container.clientHeight;return this.renderer.setPixelRatio(window.devicePixelRatio),this.renderer.setSize(e,r),this.camera.aspect=e/r,this.camera.updateProjectionMatrix(),this}animate(){this.renderer.render(this.scene,this.camera),this.controls.update(),this.dispatchEvent({type:"update",delta:this._clock.getDelta()}),requestAnimationFrame(this.animate.bind(this))}}const p=be([Ce],ye),R=p.geo2pos(new o(89.4,42.7)),V=new o(R.x,0,-R.y),Fe=new o(0,10,50),n=new ze(document.querySelector("#map"),V,V.clone().add(Fe));p.rotateX(-Math.PI/2);n.scene.add(p);n.controls.maxPolarAngle=Math.PI;n.scene.fog=null;n.renderer.toneMapping=pe;n.renderer.toneMappingExposure=.7;n.dirLight.intensity=1.5;n.ambLight.intensity=2;const I=Re(),y=We();Ee();function We(){const i=new ve(300,300),t=new Pe(i,{textureWidth:512,textureHeight:512,waterNormals:new xe().load("../image/waternormals.jpg",function(s){s.wrapS=s.wrapT=we}),sunDirection:new o,sunColor:16777215,waterColor:7695,distortionScale:1,alpha:1});t.material.transparent=!0,t.material.uniforms.size.value=6,t.position.set(R.x,R.y+5,.2);const e=t.onBeforeRender,r=t.onAfterRender;return t.onBeforeRender=(s,a,c,l,v,x)=>{p.autoUpdate=!1,e.call(t,s,a,c,l,v,x)},t.onAfterRender=(s,a,c,l,v,x)=>{p.autoUpdate=!0,r.call(t,s,a,c,l,v,x)},p.add(t),n.addEventListener("update",()=>{t.material.uniforms.time.value+=1/60}),t}function Re(){const i=new Me;return i.scale.setScalar(45e4),p.add(i),i}function Ee(){const i=new o,t={turbidity:10,rayleigh:3,mieCoefficient:.005,mieDirectionalG:.7,elevation:.5,azimuth:180,exposure:n.renderer.toneMappingExposure};function e(){const l=I.material.uniforms;l.turbidity.value=t.turbidity,l.rayleigh.value=t.rayleigh,l.mieCoefficient.value=t.mieCoefficient,l.mieDirectionalG.value=t.mieDirectionalG;const v=G.degToRad(90-t.elevation),x=G.degToRad(t.azimuth);i.setFromSphericalCoords(1,v,x),l.sunPosition.value.copy(i),n.dirLight.position.copy(i),y.material.uniforms.sunDirection.value.copy(i).normalize(),n.renderer.toneMappingExposure=t.exposure,n.renderer.render(n.scene,n.camera)}const r=new Se,s=r.addFolder("环境");s.add(n.ambLight,"intensity",0,5).name("环境光"),s.add(n.dirLight,"intensity",0,5).name("直射光");const a=r.addFolder("天空");a.add(I,"visible"),a.add(t,"turbidity",0,20,.1).onChange(e),a.add(t,"rayleigh",0,4,.001).onChange(e),a.add(t,"mieCoefficient",0,.1,.001).onChange(e),a.add(t,"mieDirectionalG",0,1,.001).onChange(e),a.add(t,"elevation",0,90,.1).onChange(e),a.add(t,"azimuth",-180,180,.1).onChange(e),a.add(t,"exposure",0,1,1e-4).onChange(e);const c=r.addFolder("水体");c.add(y,"visible"),c.add(y.position,"z",-1,5,.01).name("水面高度"),c.add(y.scale,"x",.1,10).name("东西宽度"),c.add(y.scale,"y",.1,10).name("南北宽度"),c.add(y.material.uniforms.size,"value",.1,10,.1).name("size"),c.add(y.material.uniforms.alpha,"value",.1,1,.1).name("alpha"),e()}_e(p);Le(n,p); diff --git a/docs/assets/step4.1-70989949.js b/docs/assets/step4.1-70989949.js new file mode 100644 index 0000000..c6d44a1 --- /dev/null +++ b/docs/assets/step4.1-70989949.js @@ -0,0 +1 @@ +import"./modulepreload-polyfill-3cfb730f.js";import{aB as s,J as n,q as c,r as m,Y as i,a as l,m as d,V as u}from"./mapSource-2c762b60.js";class w extends s{loadMaterial(y,t){const a=[new n({wireframe:!0,color:16776960})];return setTimeout(()=>t(a)),a}}const p=document.querySelector("#map"),o=new c.GLViewer(p);o.scene.background=new m(0);const g=new w,r=new i({loader:g,imgSource:[l],demSource:d,lon0:90,minLevel:2});o.scene.add(r);const e=r.geo2pos(new u(95,29.65));o.controls.target.set(e.x,e.y,0);o.camera.position.set(e.x,e.y+100,100); diff --git a/docs/assets/step4.2-049ea2c2.js b/docs/assets/step4.2-049ea2c2.js new file mode 100644 index 0000000..0f24f76 --- /dev/null +++ b/docs/assets/step4.2-049ea2c2.js @@ -0,0 +1 @@ +import"./modulepreload-polyfill-3cfb730f.js";import{aB as s,P as a,q as c,r as m,Y as l,a as i,m as d,V as u}from"./mapSource-2c762b60.js";class g extends s{loadGeometry(x,r){const t=new a;return setTimeout(()=>r(t)),t}}const p=document.querySelector("#map"),o=new c.GLViewer(p);o.scene.background=new m(0);const w=new g,n=new l({loader:w,imgSource:[i],demSource:d,lon0:90,minLevel:2});o.scene.add(n);const e=n.geo2pos(new u(95,29.65));o.controls.target.set(e.x,e.y,0);o.camera.position.set(e.x,e.y+100,100); diff --git a/docs/assets/step4.3-7f69c4b7.js b/docs/assets/step4.3-7f69c4b7.js new file mode 100644 index 0000000..7b43e59 --- /dev/null +++ b/docs/assets/step4.3-7f69c4b7.js @@ -0,0 +1 @@ +import"./modulepreload-polyfill-3cfb730f.js";import{aB as l,P as m,g as d,p as w,q as f,Y as u,a as x,m as g,V as p}from"./mapSource-2c762b60.js";class y extends l{loadGeometry(t,s){const o=new m;return setTimeout(()=>s(o)),o}loadMaterial(t,s){const o=new d;return o.map=new w(z(t.coord.x,t.coord.y,t.coord.z)),setTimeout(()=>s([o])),[o]}}function z(r,t,s){const c=new OffscreenCanvas(256,256),e=c.getContext("2d");return e&&(e.strokeStyle="#ccc",e.lineWidth=2,e.strokeRect(5,5,256-10,256-10),e.fillStyle="#ccc",e.shadowColor="black",e.shadowBlur=5,e.shadowOffsetX=1,e.shadowOffsetY=1,e.font="bold 20px arial",e.textAlign="center",e.fillText("一块瓦片",256/2,60),e.fillText(`坐标(${r}, ${t}, ${s})`,256/2,100),e.fillText("采用googles scheme",256/2,140)),c}const h=document.querySelector("#map"),n=new f.GLViewer(h),S=new y,i=new u({loader:S,imgSource:[x],demSource:g,lon0:90,minLevel:2});n.scene.add(i);const a=i.geo2pos(new p(95,29.65));n.controls.target.set(a.x,a.y,0);n.camera.position.set(a.x,a.y-80,50); diff --git a/docs/assets/step4.4-282854f4.js b/docs/assets/step4.4-282854f4.js new file mode 100644 index 0000000..739462b --- /dev/null +++ b/docs/assets/step4.4-282854f4.js @@ -0,0 +1 @@ +var m=Object.defineProperty;var w=(r,t,a)=>t in r?m(r,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):r[t]=a;var c=(r,t,a)=>(w(r,typeof t!="symbol"?t+"":t,a),a);import"./modulepreload-polyfill-3cfb730f.js";import{aC as d,J as u,aD as p,X as h,q as f,Y as x,a as g,V as y}from"./mapSource-2c762b60.js";import{b as M,s as k}from"./util-e741174c.js";class _{constructor(){c(this,"dataType","watermark");c(this,"_texture")}load(t,a,s,e){this._texture||(this._texture=new d(this.drawWaterMark(t.attribution)),this._texture.needsUpdate=!0);const l=new u({transparent:!0,map:this._texture,opacity:t.opacity});return setTimeout(s),l}drawWaterMark(t){const s=new OffscreenCanvas(256,256),e=s.getContext("2d");return e.scale(1,-1),e.translate(0,-256),e&&(e.fillStyle="white",e.shadowColor="black",e.shadowBlur=5,e.shadowOffsetX=1,e.shadowOffsetY=1,e.font="bold 14px arial",e.textAlign="center",e.translate(256/2,256/2),e.rotate(30*Math.PI/180),e.fillText(`${t}`,0,0)),s.transferToImageBitmap()}}p.registerMaterialLoader(new _);const z=h.create({attribution:"three-tile",dataType:"watermark"}),L=document.querySelector("#map"),i=new f.GLViewer(L),n=x.create({imgSource:[g,z],lon0:90,minLevel:2});i.scene.add(n);const o=n.geo2pos(new y(100,34));i.controls.target.set(o.x,o.y,0);i.camera.position.set(o.x,o.y-1e3,3e3);M(n);k(i,n); diff --git a/docs/assets/step4.5-fb6b3ab7.js b/docs/assets/step4.5-fb6b3ab7.js new file mode 100644 index 0000000..131fef8 --- /dev/null +++ b/docs/assets/step4.5-fb6b3ab7.js @@ -0,0 +1 @@ +import"./modulepreload-polyfill-3cfb730f.js";import{q as t,M as a,X as n,Y as c,m as s,V as m}from"./mapSource-2c762b60.js";const i=document.querySelector("#map"),o=new t.GLViewer(i),u=new t.MapBoxSource({token:a,dataType:"normal",style:"mapbox.terrain-rgb",maxLevel:15}),l=new n({attribution:"three-tile-debug",dataType:"debug"}),r=c.create({imgSource:[u,l],demSource:s,lon0:90,minLevel:2});o.scene.add(r);const e=r.geo2pos(new m(95,29.65));o.controls.target.set(e.x,e.y,0);o.camera.position.set(e.x,e.y-20,15); diff --git a/docs/assets/step4.6-02c65e4f.js b/docs/assets/step4.6-02c65e4f.js new file mode 100644 index 0000000..89ff6a5 --- /dev/null +++ b/docs/assets/step4.6-02c65e4f.js @@ -0,0 +1 @@ +var i=Object.defineProperty;var p=(o,e,a)=>e in o?i(o,e,{enumerable:!0,configurable:!0,writable:!0,value:a}):o[e]=a;var s=(o,e,a)=>(p(o,typeof e!="symbol"?e+"":e,a),a);import"./modulepreload-polyfill-3cfb730f.js";import{aD as w,o as d,X as y,V as r,a as u}from"./mapSource-2c762b60.js";import{c as b,a as f,b as g,s as L}from"./util-e741174c.js";class T{constructor(){s(this,"dataType","ball");s(this,"name","ball loader")}load(e,a,m,h){const l=new d(.35,.15);return setTimeout(m),l}}w.registerGeometryLoader(new T);const G=new y({dataType:"ball"}),t=b([u],G),n=t.geo2pos(new r(105,30)),V=new r(n.x,n.y,0),_=new r(0,-3,3),c=f("#map",V,_);c.scene.add(t);g(t);L(c,t); diff --git a/docs/assets/step4.7-7fed83d8.js b/docs/assets/step4.7-7fed83d8.js new file mode 100644 index 0000000..a805279 --- /dev/null +++ b/docs/assets/step4.7-7fed83d8.js @@ -0,0 +1 @@ +var m=Object.defineProperty;var u=(t,e,a)=>e in t?m(t,e,{enumerable:!0,configurable:!0,writable:!0,value:a}):t[e]=a;var o=(t,e,a)=>(u(t,typeof e!="symbol"?e+"":e,a),a);import"./modulepreload-polyfill-3cfb730f.js";import{T as w,J as d,aD as l,X as y,V as r,m as x}from"./mapSource-2c762b60.js";import{c as T,a as f,s as g}from"./util-e741174c.js";class v{constructor(){o(this,"dataType","uv");o(this,"_texture",new w().load("../image/test.jpg"))}load(e,a,i,_){const p=new d({transparent:!0,map:this._texture,opacity:e.opacity});return setTimeout(i),p}}l.registerMaterialLoader(new v);const L=new y({dataType:"uv"}),s=T([L],x),n=s.geo2pos(new r(105,30)),M=new r(n.x,n.y,0),V=new r(0,-500,100),c=f("#map",M,V);c.scene.add(s);g(c,s); diff --git a/docs/assets/step4.8-586296b5.js b/docs/assets/step4.8-586296b5.js new file mode 100644 index 0000000..2c38d3a --- /dev/null +++ b/docs/assets/step4.8-586296b5.js @@ -0,0 +1,45 @@ +var C=Object.defineProperty;var T=(a,n,e)=>n in a?C(a,n,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[n]=e;var i=(a,n,e)=>(T(a,typeof n!="symbol"?n+"":n,e),e);import"./modulepreload-polyfill-3cfb730f.js";import{g as D}from"./lil-gui.module.min-a1e98589.js";import{O as M,E as S,z as P,u as g,V as d,y,w as b,I as F,v as L,r as R,W as _,av as u,bf as z,b2 as f,bg as E,bh as U,aY as A,ay as B,P as I,e as w,H as Z,l as k,g as N,c as W,m as H,a as j}from"./mapSource-2c762b60.js";import{c as O,s as V,e as q,b as G}from"./util-e741174c.js";import{M as $}from"./MapControls-abd2b561.js";M.DEFAULT_UP.set(0,0,1);class K extends S{constructor(e,r=new d(0,3e3,0),o=new d(0,-1e3,1e4)){super();i(this,"scene");i(this,"renderer");i(this,"camera");i(this,"controls");i(this,"ambLight");i(this,"dirLight");i(this,"container");i(this,"_clock",new P);i(this,"depthRenderTarget");i(this,"depthCamera");i(this,"depthScene",new g);i(this,"depthMesh");i(this,"depthPixelBuffer",new Uint8Array(100*100));i(this,"depthCanvasContex");i(this,"currentRenderTarget");i(this,"_fogFactor",1);this.container=e,this.renderer=this._createRenderer(),this.scene=this._createScene(),this.camera=this._createCamera(r),this.controls=this._createControls(r,this.camera,e),this.ambLight=this._createAmbLight(),this.scene.add(this.ambLight),this.dirLight=this._createDirLight(),this.scene.add(this.dirLight),this.depthMesh=this.createDepth(),this.container.appendChild(this.renderer.domElement);const t=document.querySelector("#depthcanvas");t.width=this.width,t.height=this.height,this.depthCanvasContex=t.getContext("2d"),window.addEventListener("resize",this.resize.bind(this)),this.resize(),this.animate()}get width(){return this.container.clientWidth}get height(){return this.container.clientHeight}get fogFactor(){return this._fogFactor}set fogFactor(e){this._fogFactor=e,this.controls.dispatchEvent({type:"change",target:this.controls})}_createDirLight(){const e=new y(16777215,.5);return e.target.position.copy(this.controls.target),e.position.set(-1e3,-2e3,1e4),e}_createAmbLight(){return new b(16777215,.7)}_createControls(e,r,o){const t=new $(r,o);return t.target.copy(e),t.minDistance=.1,t.maxDistance=15e3,t.zoomSpeed=3,t.maxPolarAngle=1.2,t.enableDamping=!0,t.listenToKeyEvents(window),t.addEventListener("change",()=>{const m=Math.max(this.controls.getPolarAngle(),.1),c=Math.max(this.controls.getDistance(),.1);t.zoomSpeed=Math.max(Math.log(c),1.8),this.camera.far=Math.max(Math.min(c/m*8,5e4),10),this.camera.near=this.camera.far/1e3,this.camera.updateProjectionMatrix(),this.scene.fog instanceof F&&(this.scene.fog.density=m/(c+5)/4*this.fogFactor)}),t.saveState(),t}_createCamera(e){const r=new L(80,1,.1,5e4);return r.position.set(e.x-10,e.y-20,e.z),r}_createScene(){const r=new g;return r.background=new R(14414079),r}_createRenderer(){const e=new _({antialias:!0,alpha:!0,logarithmicDepthBuffer:!1,precision:"highp",depth:!0});return e.sortObjects=!0,e.setPixelRatio(window.devicePixelRatio),e.autoClear=!1,e}resize(){const e=this.width,r=this.height;return this.currentRenderTarget&&this.currentRenderTarget.dispose(),this.currentRenderTarget=new u(e,r),this.renderer.setPixelRatio(window.devicePixelRatio),this.renderer.setSize(e,r),this.camera.aspect=e/r,this.camera.updateProjectionMatrix(),this}animate(){requestAnimationFrame(this.animate.bind(this)),this.camera,this.depthMesh.material.uniforms.cameraNear.value=this.camera.near,this.depthMesh.material.uniforms.cameraFar.value=this.camera.far,this.depthMesh.material.uniforms.cameraMatrixInverse.value=this.camera.matrixWorldInverse,this.renderer.setRenderTarget(this.depthRenderTarget),this.renderer.render(this.scene,this.camera),this.renderer.setRenderTarget(this.currentRenderTarget),this.renderer.render(this.depthScene,this.depthCamera),this.renderer.setRenderTarget(null),this.renderer.render(this.depthScene,this.depthCamera),this.renderer.readRenderTargetPixels(this.currentRenderTarget,0,0,this.currentRenderTarget.width,this.currentRenderTarget.height,this.depthPixelBuffer);const e=new ImageData(new Uint8ClampedArray(this.depthPixelBuffer),this.depthRenderTarget.width,this.depthRenderTarget.height);this.depthCanvasContex.putImageData(e,0,0),this.controls.update(),this.dispatchEvent({type:"update",delta:this._clock.getDelta()})}createDepth(){const e=this.container.clientWidth,r=this.container.clientHeight,o=new z(e,r),t=new u(e,r);this.depthPixelBuffer=new Uint8Array(e*r*4),t.texture.minFilter=f,t.texture.magFilter=f,t.texture.generateMipmaps=!1,t.depthTexture=o,t.depthTexture.format=E,t.depthTexture.type=U,this.depthRenderTarget=t,this.depthCamera=new A(-1,1,1,-1,0,1);const m=new B({uniforms:{depthTexture:{value:o},tDiffuse:{value:t.texture},cameraNear:{value:this.camera.near},cameraFar:{value:this.camera.far},cameraMatrixInverse:{value:this.camera.matrixWorldInverse},scale:{value:1}},vertexShader:` + varying vec2 vUv; + void main() { + vUv = uv; + gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); + } + `,fragmentShader:` + + uniform sampler2D depthTexture; + uniform sampler2D tDiffuse; + uniform float cameraNear; + uniform float cameraFar; + uniform mat4 cameraMatrixInverse; + uniform float scale; + varying vec2 vUv; + + #include + #include + + + float readDepth( sampler2D depthSampler, vec2 coord ) { + // fragCoordZ:0.0-1.0 + float fragCoordZ = texture2D( depthSampler, coord ).x; + // 透视深度Z转换为摄像机坐标系的Z + float viewZ = perspectiveDepthToViewZ(fragCoordZ, cameraNear, cameraFar ); + // 将摄像机坐标系的Z映射到0-1范围 + return viewZToOrthographicDepth(viewZ, cameraNear, cameraFar ); + } + + void main() { + float depth = readDepth(depthTexture, vUv); + vec4 diffuse = texture2D(tDiffuse,vUv); + // 使用线性深度值重建世界坐标 + //float z = cameraNear * cameraFar / ((cameraFar - cameraNear) * depth*100.0 - cameraFar); + + vec4 cameraSpacePosition = vec4(vUv, depth, 1.0); + vec4 worldSpacePosition = cameraMatrixInverse * cameraSpacePosition;// * scale; + worldSpacePosition = normalize(worldSpacePosition); + + + gl_FragColor = vec4(worldSpacePosition.xyz, 1.0); + gl_FragColor = vec4(worldSpacePosition.z,worldSpacePosition.z,worldSpacePosition.z, 1.0); + gl_FragColor = vec4(vUv,depth,1.0); + } + `}),c=new I(2,2),p=new w(c,m);return this.depthScene.add(p),this.depthScene.add(new Z(this.depthCamera)),p}}const h=O(j,H),Y=document.querySelector("#map"),l=h.geo2pos(new d(86.92,27.95)),s=new K(Y,new d(l.x,l.y,10));s.scene.add(h);const X=(()=>{const a=new w(new k(1,.3,128,16),new N({color:3355443,shininess:30,specular:13421772,emissive:0}));return a.position.set(l.x,l.y-5,8),a.castShadow=!0,a})();h.add(X);(()=>{const a=new D;a.add(s.camera,"near",.1,100,.1).listen(),a.add(s.camera,"far",.1,1e4,.1).listen(),a.add(s.depthMesh.material.uniforms.scale,"value",0,10,1e-6)})();V(s,h);q(h);G(h);const x=new W(new d,s.camera.position);x.setLength(100);h.add(x);const v=document.querySelector("#depth");s.container.addEventListener("pointermove",a=>{s.camera.updateMatrixWorld();const n=(s.height-a.clientY)*s.width+a.clientX;if(v){const e=s.depthPixelBuffer[n*4+0],r=s.depthPixelBuffer[n*4+1],o=s.depthPixelBuffer[n*4+2];v.innerHTML=`${e},${r},${o}`}}); diff --git a/docs/assets/step5.1-8cff7f95.js b/docs/assets/step5.1-8cff7f95.js new file mode 100644 index 0000000..ecb8969 --- /dev/null +++ b/docs/assets/step5.1-8cff7f95.js @@ -0,0 +1,7 @@ +import"./modulepreload-polyfill-3cfb730f.js";import{V as s,r as w,G as M,e as f,B as S,h as v,b as g,P as C,T as b,g as B,aC as L,ac as _,a as F,d as D}from"./mapSource-2c762b60.js";import{g as G}from"./lil-gui.module.min-a1e98589.js";import{c as P,a as V,u as I,e as T,s as z,b as E}from"./util-e741174c.js";const n=P([F]),x=n.geo2pos(new s(105,34)),U=new s(x.x,x.y,0),k=new s(0,-5e3,1e4),t=V("#map",U,k);t.scene.add(n);t.scene.background=new w(0);n.addEventListener("tile-loaded",a=>{a.tile.material.forEach(o=>{var e;return(e=o.color)==null?void 0:e.set(new w(8947848))})});const H=(a,o,e)=>{const r=n.geo2pos(new s(a.x,a.y)),d=n.geo2pos(new s(o.x,o.y)),p=new s(d.x-r.x,d.y-r.y,1),y=new s(r.x+p.x/2,d.y-p.y/2,e),u=new D;return u.setPosition(y),u.scale(p),u},c=((a,o)=>{const e=new M;e.applyMatrix4(H(a,o,1)),e.scale.setZ(200),e.translateZ(100),e.renderOrder=10;const r=new f(new S),d=new v(r,16711935);return e.add(d),e})(new g(67,11),new g(140,57)),l=(()=>{const a=new f(new C(1,1,529,420),O({scale:.5}));return N(a,"../image/SATE_L1_F2G_VISSR_MWB_NOM_FDI-202107241900.HDF.png"),a})();c.add(l);t.scene.add(c);const h=new G,i=h.addFolder("卫星云图");i.add(c.scale,"z",100,500,1).name("垂直拉伸").onChange(a=>c.position.z=a/2);i.addColor(l.material,"color").name("颜色");i.add(l.material,"opacity",.1,1,.1).name("透明度");i.add(l.material,"wireframe").name("网格");const m=h.addFolder("环境设置");m.addColor(t.ambLight,"color").name("环境光颜色");m.add(t.ambLight,"intensity",0,5,.1).name("环境光强度");m.addColor(t.dirLight,"color").name("直射光颜色");m.add(t.dirLight,"intensity",0,5,.1).name("直射光强度");function N(a,o){var e;return(e=a.material.map)==null||e.dispose(),a.material.map=new b().load(o,r=>{r.needsUpdate=!0}),a}function O(a={scale:1}){const o=new B({displacementMap:new L,transparent:!0,displacementScale:a.scale,displacementBias:0,side:_,opacity:.6,color:new w(13421772)});return o.onBeforeCompile=e=>{e.vertexShader=`uniform sampler2D map; + `+e.vertexShader,e.vertexShader=e.vertexShader.replace("#include ","transformed += normalize( objectNormal ) * ( texture2D(map, vMapUv ).a * displacementScale + displacementBias );"),e.fragmentShader=e.fragmentShader.replace("#include ",` + #include + float h = texture2D(map, vMapUv ).a; + diffuseColor.rgb *= h; + diffuseColor.a = clamp(diffuseColor.a * 2.0, 0.0, 1.0); + `)},o}I(t);T(n);z(t,n);E(n); diff --git a/docs/assets/step5.2-93261b70.js b/docs/assets/step5.2-93261b70.js new file mode 100644 index 0000000..daa84f8 --- /dev/null +++ b/docs/assets/step5.2-93261b70.js @@ -0,0 +1,2 @@ +import"./modulepreload-polyfill-3cfb730f.js";import{V as c,r as g,G as h,e as p,B as x,h as f,b as m,P as v,T as M,g as S,aC as b,ac as B,a as C}from"./mapSource-2c762b60.js";import{g as y}from"./lil-gui.module.min-a1e98589.js";import{c as L,a as G,i as F,u as P,s as V,b as _}from"./util-e741174c.js";const n=L([C]),l=n.geo2pos(new c(105,34)),z=new c(l.x,l.y,0),D=new c(0,-5e3,1e4),r=G("#map",z,D);r.scene.add(n);r.scene.background=new g(0);const o=((a,t)=>{const e=new h;e.applyMatrix4(F(n,a,t,1)),e.scale.setZ(200),e.translateZ(100),e.renderOrder=10;const d=new p(new x),w=new f(d,16711935);return e.add(w),e})(new m(67,11),new m(140,57)),u=(()=>{const a=new p(new v(1,1,529,420),H({scale:.5}));return T(a,"../image/ACHN_QREF_20210725_100000.png"),a.renderOrder=10,a})();o.add(u);r.scene.add(o);function T(a,t){var e;return(e=a.material.map)==null||e.dispose(),a.material.map=new M().load(t,d=>{d.needsUpdate=!0}),a}function H(a={scale:1}){const t=new S({displacementMap:new b,transparent:!0,displacementScale:a.scale,displacementBias:0,side:B});return t.onBeforeCompile=e=>{e.vertexShader=`uniform sampler2D map; + `+e.vertexShader,e.vertexShader=e.vertexShader.replace("#include ","transformed += normalize( objectNormal ) * ( texture2D(map, vMapUv ).a * displacementScale + displacementBias );")},t}const i=new y;i.add(o.scale,"z",100,500,1).name("雷达图垂直拉伸").onChange(a=>o.position.z=a/2);i.add(u.material,"wireframe").name("雷达图网格");const s=i.addFolder("环境设置");s.addColor(r.ambLight,"color").name("环境光颜色");s.add(r.ambLight,"intensity",0,1,.1).name("环境光强度");s.addColor(r.dirLight,"color").name("直射光颜色");s.add(r.dirLight,"intensity",0,1,.1).name("直射光强度");P(r);V(r,n);_(n); diff --git a/docs/assets/step5.3-df985c43.js b/docs/assets/step5.3-df985c43.js new file mode 100644 index 0000000..880a919 --- /dev/null +++ b/docs/assets/step5.3-df985c43.js @@ -0,0 +1 @@ +import"./modulepreload-polyfill-3cfb730f.js";import{V as n,r as w,a3 as h,a4 as l,a5 as m,e as p,n as g,g as u,f as M,a as y}from"./mapSource-2c762b60.js";import{G as L}from"./GLTFLoader-9aad0524.js";import{c as S,a as f,e as b,b as v,s as P}from"./util-e741174c.js";const a=S([y]);a.receiveShadow=!0;const i=a.geo2pos(new n(105,34)),k=new n(i.x,i.y,0),x=new n(0,-5e3,1e4),e=f("#map",k,x);e.scene.add(a);e.scene.background=new w(0);e.ambLight.intensity=.5;e.dirLight.intensity=.5;e.renderer.shadowMap.enabled=!0;e.renderer.shadowMap.type=h;(()=>{const t=document.querySelector("#shadow");t.addEventListener("click",()=>{e.renderer.shadowMap.enabled=t.checked,e.renderer.shadowMap.needsUpdate=!0,a.rootTile.traverse(o=>{o.material.forEach(s=>{s.needsUpdate=!0})})})})();const c=(()=>{const t=new l(16777215,3,3e4,Math.PI/3.5,0,0),o=a.geo2pos(new n(105,30));return t.position.set(o.x,o.y-3e3,6e3),t.target.position.set(o.x,o.y,0),t.castShadow=!0,t})();e.scene.add(c);e.scene.add(new m(c));const d=new p(new g(100),new u({color:8947967}));d.position.copy(c.position);d.lookAt(c.target.position);e.scene.add(d);const I=new M({color:12303291,transparent:!0,opacity:.9});let r;new L().load("../model/cloud09.glb",t=>{r=t.scene;const o=a.geo2pos(new n(60,0));r.position.set(o.x,o.y,2),r.scale.setScalar(50),r.rotation.set(Math.PI/2,Math.PI/2,0),r.traverse(s=>{s instanceof p&&(s.castShadow=!0,s.receiveShadow=!0,s.material=I)}),e.scene.add(r)});b(a);v(a);P(e,a); diff --git a/docs/assets/step5.4-570845db.js b/docs/assets/step5.4-570845db.js new file mode 100644 index 0000000..11e2c29 --- /dev/null +++ b/docs/assets/step5.4-570845db.js @@ -0,0 +1,20 @@ +var V=Object.defineProperty;var B=(s,e,t)=>e in s?V(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t;var a=(s,e,t)=>(B(s,typeof e!="symbol"?e+"":e,t),t);import"./modulepreload-polyfill-3cfb730f.js";import{r as m,ah as x,ak as D,f as G,ac as H,e as b,P,aa as _,af as E,V as F,G as k,B as A,h as j,b as M,a as z}from"./mapSource-2c762b60.js";import{g as U}from"./lil-gui.module.min-a1e98589.js";import{c as Z,a as I,i as N,s as K,b as O}from"./util-e741174c.js";class R{constructor(e,t=32){this.isLut=!0,this.lut=[],this.map=[],this.n=0,this.minV=0,this.maxV=1,this.setColorMap(e,t)}set(e){return e.isLut===!0&&this.copy(e),this}setMin(e){return this.minV=e,this}setMax(e){return this.maxV=e,this}setColorMap(e,t=32){this.map=w[e]||w.rainbow,this.n=t;const o=1/this.n,r=new m,h=new m;this.lut.length=0,this.lut.push(new m(this.map[0][1]));for(let c=1;cthis.map[i][0]&&n<=this.map[i+1][0]){const l=this.map[i][0],p=this.map[i+1][0];r.setHex(this.map[i][1],x),h.setHex(this.map[i+1][1],x);const d=new m().lerpColors(r,h,(n-l)/(p-l));this.lut.push(d)}}return this.lut.push(new m(this.map[this.map.length-1][1])),this}copy(e){return this.lut=e.lut,this.map=e.map,this.n=e.n,this.minV=e.minV,this.maxV=e.maxV,this}getColor(e){e=D.clamp(e,this.minV,this.maxV),e=(e-this.minV)/(this.maxV-this.minV);const t=Math.round(e*this.n);return this.lut[t]}addColorMap(e,t){return w[e]=t,this}createCanvas(){const e=document.createElement("canvas");return e.width=1,e.height=this.n,this.updateCanvas(e),e}updateCanvas(e){const t=e.getContext("2d",{alpha:!1}),o=t.getImageData(0,0,1,this.n),r=o.data;let h=0;const c=1/this.n,n=new m,i=new m,l=new m;for(let p=1;p>=0;p-=c)for(let d=this.map.length-1;d>=0;d--)if(p=this.map[d-1][0]){const C=this.map[d-1][0],L=this.map[d][0];n.setHex(this.map[d-1][1],x),i.setHex(this.map[d][1],x),l.lerpColors(n,i,(p-C)/(L-C)),r[h*4]=Math.round(l.r*255),r[h*4+1]=Math.round(l.g*255),r[h*4+2]=Math.round(l.b*255),r[h*4+3]=255,h+=1}return t.putImageData(o,0,0),e}}const w={rainbow:[[0,255],[.2,65535],[.5,65280],[.8,16776960],[1,16711680]],cooltowarm:[[0,3952322],[.2,10206463],[.5,14474460],[.8,16163717],[1,11797542]],blackbody:[[0,0],[.2,7864320],[.5,15086080],[.8,16776960],[1,16777215]],grayscale:[[0,0],[.2,4210752],[.5,8355712],[.8,12566463],[1,16777215]]};function q(s={scale:1}){const e=new G({transparent:!0,vertexColors:!0,opacity:.6,side:H,displacementScale:s.scale});return e.onBeforeCompile=t=>{t.vertexShader=`varying vec3 vPosition; + `+t.vertexShader,t.vertexShader=t.vertexShader.replace("#include ",` + #include + vPosition = position; + // transformed += normalize( objectNormal ) * ( texture2D(map, vUv ).a * displacementScale + displacementBias ); + `),t.fragmentShader=`varying vec3 vPosition; + `+t.fragmentShader,t.fragmentShader=t.fragmentShader.replace("#include ",` + #include + float h = vPosition.z; + + // 等值线 + float step = h*20.0 ; // 分析20条等值线 + float f = fract(step);// 小数部分 + float width = fwidth(step);// 相邻像素的差 + float aa = smoothstep(width, width/1.1, f);//两个值之间插值 + float inv = 1.0 - aa; + if(inv<1.0){ + gl_FragColor = vec4(0.0,0.0,0.3,1.0); + } + `)},e}class J extends b{constructor(t){super();a(this,"_hScale",5);a(this,"width",1);a(this,"height",1);a(this,"data",[]);a(this,"max",-999999);a(this,"min",999999);a(this,"material",q());t&&this.setData(t)}setData(t){var o;return this.width=t[0].length,this.height=t.length,this.data=t.flat(),this.max=Math.max(...this.data),this.min=Math.min(...this.data),(o=this.geometry)==null||o.dispose(),this.geometry=new P(1,1,this.width-1,this.height-1),this.hScale=1,this}get hScale(){return this._hScale}set hScale(t){this._hScale=t;const o=this.geometry.attributes.position,r=[];let h=new R("rainbow",512);h.setMax(100),h.setMin(0);for(let c=0,n=o.count;c{s.tile.material.forEach(e=>{var t;return(t=e.color)==null?void 0:t.set(new m(8947848))})});const f=((s,e)=>{const t=new k;t.applyMatrix4(N(u,s,e,1)),t.scale.setZ(200),t.translateZ(100),t.renderOrder=10;const o=new b(new A),r=new j(o,16711935);return t.add(r),t})(new M(67,11),new M(140,57)),v=(()=>{const s=new J;return Q("../data/md4/10112608.000").then(e=>{s.setData(e.data),console.log(e.data)}),s.scale.setZ(.5),s})();f.add(v);g.scene.add(f);const $=new U,y=$.addFolder("500hpa高度场");y.add(f.scale,"z",100,1e3,1).name("垂直拉伸").onChange(s=>f.position.z=s/2);y.add(v.material,"opacity",.1,1,.1).name("透明度");y.add(v.material,"wireframe").name("网格");K(g,u);O(u); diff --git a/docs/assets/util-e741174c.js b/docs/assets/util-e741174c.js new file mode 100644 index 0000000..335e3c8 --- /dev/null +++ b/docs/assets/util-e741174c.js @@ -0,0 +1,11 @@ +import{Y as g,a as x,q as d,b as m,a2 as u,e as p,P as y,J as f,T as L,ag as h,r as b,V as c,d as k}from"./mapSource-2c762b60.js";const M=(e=x,o)=>g.create({imgSource:e,demSource:o,lon0:90,minLevel:2,maxLevel:18}),T=(e,o,t)=>{const n=document.querySelector(e);if(!n)throw new Error(`Element ${e} is not found!`);return new d.GLViewer(n,o,o.clone().add(t))},$=(e,o="#load-state")=>{const t=document.querySelector(o);t&&(e.addEventListener("loading-start",n=>{t.innerHTML="Started: "+n.itemsLoaded+" of "+n.itemsTotal+" files."}),e.addEventListener("loading-progress",n=>{t.innerHTML="Loading: "+n.itemsLoaded+" of "+n.itemsTotal+" files."}),e.addEventListener("loading-complete",()=>{t.innerHTML="Loading complete!"}),e.addEventListener("loading-error",n=>{t.innerHTML="There was an error loading "+n}))},E=(e,o="#camera")=>{const t=document.querySelector(o);t&&e.controls.addEventListener("change",()=>{t.innerHTML=`摄像机:(${e.camera.position.x.toFixed(2)}, + ${e.camera.position.y.toFixed(2)}, + ${e.camera.position.z.toFixed(2)}) + 焦点:(${e.controls.target.x.toFixed(2)}, + ${e.controls.target.y.toFixed(2)}, + ${e.controls.target.z.toFixed(2)}) + 方位角:${e.controls.getAzimuthalAngle().toFixed(2)}° + 俯仰角:${e.controls.getPolarAngle().toFixed(2)}°`})},S=(e,o,t="#location")=>{const n=document.querySelector(t);if(n){const s=new m;e.container.addEventListener("pointermove",r=>{s.x=r.clientX/e.container.clientWidth*2-1,s.y=-(r.clientY/e.container.clientHeight)*2+1;const a=o.getLocalInfoFromScreen(e.camera,s);a?n.innerHTML=`经度:${a.location.x.toFixed(3)}° + 纬度:${a.location.y.toFixed(3)}° + 海拔:${(a.location.z*1e3).toFixed(1)}m + 离摄像机距离:${a.distance.toFixed(3)}km `:n.innerHTML=""})}},q=(e,o="#attribution")=>{const t=document.querySelector(o);if(t){const n=()=>t.innerHTML="© "+e.attributions.join(" | © ");e.addEventListener("source-changed",n),n()}},H=e=>{const o=new u().setPath("../image/skybox/").load(["skybox_nx.png","skybox_px.png","skybox_ny.png","skybox_py.png","skybox_nz.png","skybox_pz.png"]);e.scene.background=o},w=e=>{const o=new p(new y,new f({map:new L().load("../image/tile0.png",t=>t.colorSpace=h)}));o.name="background",o.material.polygonOffsetFactor=10,o.material.polygonOffsetUnits=1,o.material.polygonOffset=!0,o.renderOrder=-1,o.translateZ(-.1),o.applyMatrix4(e.rootTile.matrix),e.add(o)};function z(e,o){var n;const t=new d.FakeEarth(((n=e.scene.fog)==null?void 0:n.color)||new b(0));t.name="fakeearth",t.applyMatrix4(o.rootTile.matrix),e.controls.addEventListener("change",()=>{t.visible=e.controls.getDistance()>3e3}),o.add(t)}function A(e){e.addEventListener("update",()=>{const o=document.querySelector("#compass-plane");o&&(o.style.transform=`rotateX(${e.controls.getPolarAngle()}rad)`);const t=document.querySelector("#compass-text");t&&(t.style.transform=`rotate(${e.controls.getAzimuthalAngle()}rad)`)})}const C=(e,o,t,n)=>{const s=e.geo2pos(new c(o.x,o.y)),r=e.geo2pos(new c(t.x,t.y)),a=new c(r.x-s.x,r.y-s.y,1),l=new c(s.x+a.x/2,r.y-a.y/2,n),i=new k;return i.setPosition(l),i.scale(a),i};export{T as a,$ as b,M as c,z as d,w as e,H as f,q as g,E as h,C as i,S as s,A as u}; diff --git a/docs/step1.1/index.html b/docs/step1.1/index.html index 160ad17..ee82199 100644 --- a/docs/step1.1/index.html +++ b/docs/step1.1/index.html @@ -7,9 +7,9 @@ content="width=device-width, initial-scale=1.0, user-scalable=no" /> three-tile demo - + - + diff --git a/docs/step1.10/index.html b/docs/step1.10/index.html index ee53cb3..e0569e4 100644 --- a/docs/step1.10/index.html +++ b/docs/step1.10/index.html @@ -7,10 +7,10 @@ content="width=device-width, initial-scale=1.0, user-scalable=no" /> three-tile demo - + - - + + diff --git a/docs/step1.2/index.html b/docs/step1.2/index.html index 2e3eaf4..411ec4b 100644 --- a/docs/step1.2/index.html +++ b/docs/step1.2/index.html @@ -4,10 +4,10 @@ three-tile demo - + - - + + diff --git a/docs/step1.3/index.html b/docs/step1.3/index.html index cdb199b..26ce744 100644 --- a/docs/step1.3/index.html +++ b/docs/step1.3/index.html @@ -4,10 +4,10 @@ three-tile demo - + - - + + diff --git a/docs/step1.4/index.html b/docs/step1.4/index.html index 5f58177..e0abc41 100644 --- a/docs/step1.4/index.html +++ b/docs/step1.4/index.html @@ -7,10 +7,10 @@ content="width=device-width, initial-scale=1.0, user-scalable=no" /> three-tile demo - + - - + + diff --git a/docs/step1.5/index.html b/docs/step1.5/index.html index 7d297a5..92449cb 100644 --- a/docs/step1.5/index.html +++ b/docs/step1.5/index.html @@ -4,11 +4,11 @@ three-tile demo - + - - - + + + diff --git a/docs/step1.6/index.html b/docs/step1.6/index.html index d020755..86f4581 100644 --- a/docs/step1.6/index.html +++ b/docs/step1.6/index.html @@ -4,11 +4,11 @@ three-tile demo - + - - - + + + diff --git a/docs/step1.7/index.html b/docs/step1.7/index.html index 27eeba7..075eca7 100644 --- a/docs/step1.7/index.html +++ b/docs/step1.7/index.html @@ -4,10 +4,10 @@ three-tile demo - + - - + + diff --git a/docs/step1.8/index.html b/docs/step1.8/index.html index 4bf41df..95e1cfb 100644 --- a/docs/step1.8/index.html +++ b/docs/step1.8/index.html @@ -4,11 +4,11 @@ three-tile demo - + - - - + + + diff --git a/docs/step1.9/index.html b/docs/step1.9/index.html index 7f1ce4c..baba3cf 100644 --- a/docs/step1.9/index.html +++ b/docs/step1.9/index.html @@ -7,10 +7,10 @@ content="width=device-width, initial-scale=1.0, user-scalable=no" /> three-tile demo - + - - + + diff --git a/docs/step2.1/index.html b/docs/step2.1/index.html index ebf8f81..6058318 100644 --- a/docs/step2.1/index.html +++ b/docs/step2.1/index.html @@ -7,10 +7,10 @@ content="width=device-width, initial-scale=1.0, user-scalable=no" /> three-tile demo - + - - + + diff --git a/docs/step2.10/index.html b/docs/step2.10/index.html index acdb7db..e53bf63 100644 --- a/docs/step2.10/index.html +++ b/docs/step2.10/index.html @@ -4,12 +4,12 @@ three-tile demo - + - + - - + + diff --git a/docs/step2.11/index.html b/docs/step2.11/index.html index aab3dd4..d4d1880 100644 --- a/docs/step2.11/index.html +++ b/docs/step2.11/index.html @@ -7,12 +7,12 @@ content="width=device-width, initial-scale=1.0, user-scalable=no" /> three-tile demo - + - - - + + + diff --git a/docs/step2.2/index.html b/docs/step2.2/index.html index 6304824..40d05d2 100644 --- a/docs/step2.2/index.html +++ b/docs/step2.2/index.html @@ -4,11 +4,11 @@ three-tile demo - + - + - + diff --git a/docs/step2.3/index.html b/docs/step2.3/index.html index f5bb604..52d6a97 100644 --- a/docs/step2.3/index.html +++ b/docs/step2.3/index.html @@ -4,11 +4,11 @@ three-tile demo - + - - + + diff --git a/docs/step2.4/index.html b/docs/step2.4/index.html index fd72ccd..ede6ac5 100644 --- a/docs/step2.4/index.html +++ b/docs/step2.4/index.html @@ -4,12 +4,12 @@ three-tile demo - + - - - + + + diff --git a/docs/step2.5/index.html b/docs/step2.5/index.html index 4e98e79..807fddc 100644 --- a/docs/step2.5/index.html +++ b/docs/step2.5/index.html @@ -7,11 +7,11 @@ content="width=device-width, initial-scale=1.0, user-scalable=no" /> three-tile demo - + - + - + diff --git a/docs/step2.6/index.html b/docs/step2.6/index.html index 7479fbd..82e99f6 100644 --- a/docs/step2.6/index.html +++ b/docs/step2.6/index.html @@ -4,11 +4,11 @@ three-tile demo - + - - + + diff --git a/docs/step2.7/index.html b/docs/step2.7/index.html index 88933a4..5617c2b 100644 --- a/docs/step2.7/index.html +++ b/docs/step2.7/index.html @@ -4,11 +4,11 @@ three-tile demo - + - - + + diff --git a/docs/step2.8/index.html b/docs/step2.8/index.html index f086d8e..7ffbb38 100644 --- a/docs/step2.8/index.html +++ b/docs/step2.8/index.html @@ -4,11 +4,11 @@ three-tile demo - + - + - + diff --git a/docs/step2.9/index.html b/docs/step2.9/index.html index d450be3..d0f278d 100644 --- a/docs/step2.9/index.html +++ b/docs/step2.9/index.html @@ -4,12 +4,12 @@ three-tile demo - + - - + + - + diff --git a/docs/step3.1/index.html b/docs/step3.1/index.html index 61230f3..a7f3769 100644 --- a/docs/step3.1/index.html +++ b/docs/step3.1/index.html @@ -4,12 +4,12 @@ three-tile demo - + - - - + + + diff --git a/docs/step3.2/index.html b/docs/step3.2/index.html index 231cd53..b3c359b 100644 --- a/docs/step3.2/index.html +++ b/docs/step3.2/index.html @@ -4,13 +4,13 @@ three-tile demo - + - + - - + + diff --git a/docs/step3.3/index.html b/docs/step3.3/index.html index 1ce91a2..63618b9 100644 --- a/docs/step3.3/index.html +++ b/docs/step3.3/index.html @@ -4,12 +4,12 @@ three-tile demo - + - + - + diff --git a/docs/step3.4/index.html b/docs/step3.4/index.html index a90e31b..5a7cb6c 100644 --- a/docs/step3.4/index.html +++ b/docs/step3.4/index.html @@ -7,13 +7,13 @@ content="width=device-width, initial-scale=1.0, user-scalable=no" /> three-tile demo - + - + - - + + diff --git a/docs/step3.5/index.html b/docs/step3.5/index.html index dbc7e64..1597ede 100644 --- a/docs/step3.5/index.html +++ b/docs/step3.5/index.html @@ -6,13 +6,13 @@ name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> three-tile demo - + - + - - - + + + diff --git a/docs/step4.1/index.html b/docs/step4.1/index.html index 347111e..77721f0 100644 --- a/docs/step4.1/index.html +++ b/docs/step4.1/index.html @@ -7,9 +7,9 @@ content="width=device-width, initial-scale=1.0, user-scalable=no" /> three-tile demo - + - + diff --git a/docs/step4.2/index.html b/docs/step4.2/index.html index 58b835f..ed500ff 100644 --- a/docs/step4.2/index.html +++ b/docs/step4.2/index.html @@ -7,9 +7,9 @@ content="width=device-width, initial-scale=1.0, user-scalable=no" /> three-tile demo - + - + diff --git a/docs/step4.3/index.html b/docs/step4.3/index.html index 0c93c07..3d00246 100644 --- a/docs/step4.3/index.html +++ b/docs/step4.3/index.html @@ -7,9 +7,9 @@ content="width=device-width, initial-scale=1.0, user-scalable=no" /> three-tile demo - + - + diff --git a/docs/step4.4/index.html b/docs/step4.4/index.html index ef1afbc..fdfa7c7 100644 --- a/docs/step4.4/index.html +++ b/docs/step4.4/index.html @@ -7,10 +7,10 @@ content="width=device-width, initial-scale=1.0, user-scalable=no" /> three-tile demo - + - - + + diff --git a/docs/step4.5/index.html b/docs/step4.5/index.html index 3d24bf9..dc406a6 100644 --- a/docs/step4.5/index.html +++ b/docs/step4.5/index.html @@ -7,9 +7,9 @@ content="width=device-width, initial-scale=1.0, user-scalable=no" /> three-tile demo - + - + diff --git a/docs/step4.6/index.html b/docs/step4.6/index.html index 796750f..848a0e0 100644 --- a/docs/step4.6/index.html +++ b/docs/step4.6/index.html @@ -7,10 +7,10 @@ content="width=device-width, initial-scale=1.0, user-scalable=no" /> three-tile demo - + - - + + diff --git a/docs/step4.7/index.html b/docs/step4.7/index.html index 973f116..8c44f29 100644 --- a/docs/step4.7/index.html +++ b/docs/step4.7/index.html @@ -7,10 +7,10 @@ content="width=device-width, initial-scale=1.0, user-scalable=no" /> three-tile demo - + - - + + diff --git a/docs/step4.8/index.html b/docs/step4.8/index.html index fad7225..2f78b54 100644 --- a/docs/step4.8/index.html +++ b/docs/step4.8/index.html @@ -7,12 +7,12 @@ content="width=device-width, initial-scale=1.0, user-scalable=no" /> three-tile demo - + - - - + + + + + + + + + + +
+
+
伪三维卫星云图
+ +
+
+
location
+ +
+
+ + + +
+
+ N WE S +
+
+
+ + + diff --git a/docs/step5.2/index.html b/docs/step5.2/index.html new file mode 100644 index 0000000..603216a --- /dev/null +++ b/docs/step5.2/index.html @@ -0,0 +1,47 @@ + + + + + + three-tile demo + + + + + + + + +
+
+
伪三维天气雷达图
+ +
+
+
location
+ +
+
+ + + +
+
+ N WE S +
+
+
+ + + diff --git a/docs/step5.3/index.html b/docs/step5.3/index.html new file mode 100644 index 0000000..28ab76f --- /dev/null +++ b/docs/step5.3/index.html @@ -0,0 +1,34 @@ + + + + + + three-tile demo + + + + + + + + +
+
+
加载大模型(三维云量,python生成后台模型)
+
+
+ +
+
load-state
+
location
+ + + diff --git a/docs/step5.4/index.html b/docs/step5.4/index.html new file mode 100644 index 0000000..172e102 --- /dev/null +++ b/docs/step5.4/index.html @@ -0,0 +1,28 @@ + + + + + + three-tile demo + + + + + + + + +
+
+
等高线(读取Micaps第4类格式,使用着色器渲染等值线,暂未考虑地图投影)
+ +
+
+
location
+
+ + + diff --git a/vite.config.ts b/vite.config.ts index 519ffb1..16c2b07 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -50,10 +50,10 @@ export default defineConfig({ "step4.7": resolve("src/step4.7/index.html"), "step4.8": resolve("src/step4.8/index.html"), - // "step5.1": resolve("src/step5.1/index.html"), - // "step5.2": resolve("src/step5.2/index.html"), - // "step5.3": resolve("src/step5.3/index.html"), - // "step5.4": resolve("src/step5.4/index.html"), + "step5.1": resolve("src/step5.1/index.html"), + "step5.2": resolve("src/step5.2/index.html"), + "step5.3": resolve("src/step5.3/index.html"), + "step5.4": resolve("src/step5.4/index.html"), }, }, },