浏览代码

Updated builds.

Mr.doob 6 年之前
父节点
当前提交
d65c008b5c
共有 3 个文件被更改,包括 193 次插入179 次删除
  1. 35 28
      build/three.js
  2. 123 123
      build/three.min.js
  3. 35 28
      build/three.module.js

+ 35 - 28
build/three.js

@@ -22404,10 +22404,10 @@
 
 		var gl = renderer.context;
 
-		var device = null;
 		var session = null;
 
-		var frameOfReference = null;
+		var referenceSpace = null;
+		var referenceSpaceType = 'local-floor';
 
 		var pose = null;
 
@@ -22416,7 +22416,7 @@
 
 		function isPresenting() {
 
-			return session !== null && frameOfReference !== null;
+			return session !== null && referenceSpace !== null;
 
 		}
 
@@ -22456,24 +22456,19 @@
 
 		};
 
-		this.getDevice = function () {
-
-			return device;
-
-		};
+		//
 
-		this.setDevice = function ( value ) {
+		function onSessionEvent( event ) {
 
-			if ( value !== undefined ) device = value;
+			for ( var i = 0; i < controllers.length; i ++ ) {
 
-		};
+				if ( inputSources[ i ] === event.inputSource ) {
 
-		//
+					controllers[ i ].dispatchEvent( { type: event.type } );
 
-		function onSessionEvent( event ) {
+				}
 
-			var controller = controllers[ inputSources.indexOf( event.inputSource ) ];
-			if ( controller ) controller.dispatchEvent( { type: event.type } );
+			}
 
 		}
 
@@ -22485,9 +22480,9 @@
 
 		}
 
-		function onRequestFrameOfReference( value ) {
+		function onRequestReferenceSpace( value ) {
 
-			frameOfReference = value;
+			referenceSpace = value;
 
 			animation.setContext( session );
 			animation.start();
@@ -22498,7 +22493,9 @@
 
 		};
 
-		this.setFrameOfReferenceType = function ( value ) {
+		this.setReferenceSpaceType = function ( value ) {
+
+			referenceSpaceType = value;
 
 		};
 
@@ -22515,15 +22512,15 @@
 
 				session.updateRenderState( { baseLayer: new XRWebGLLayer( session, gl ) } );
 
-				session.requestReferenceSpace( { type: 'stationary', subtype: 'eye-level' } ).then( onRequestFrameOfReference );
+				session.requestReferenceSpace( referenceSpaceType ).then( onRequestReferenceSpace );
 
 				//
 
-				inputSources = session.getInputSources();
+				inputSources = session.inputSources;
 
 				session.addEventListener( 'inputsourceschange', function () {
 
-					inputSources = session.getInputSources();
+					inputSources = session.inputSources;
 					console.log( inputSources );
 
 					for ( var i = 0; i < controllers.length; i ++ ) {
@@ -22600,7 +22597,7 @@
 
 		function onAnimationFrame( time, frame ) {
 
-			pose = frame.getViewerPose( frameOfReference );
+			pose = frame.getViewerPose( referenceSpace );
 
 			if ( pose !== null ) {
 
@@ -22613,7 +22610,7 @@
 
 					var view = views[ i ];
 					var viewport = layer.getViewport( view );
-					var viewMatrix = view.transform.inverse().matrix;
+					var viewMatrix = view.transform.inverse.matrix;
 
 					var camera = cameraVR.cameras[ i ];
 					camera.matrix.fromArray( viewMatrix ).getInverse( camera.matrix );
@@ -22640,13 +22637,11 @@
 
 				if ( inputSource ) {
 
-					var inputPose = frame.getPose( inputSource.targetRaySpace, frameOfReference );
+					var inputPose = frame.getPose( inputSource.targetRaySpace, referenceSpace );
 
 					if ( inputPose !== null ) {
 
-						var targetRay = new XRRay( inputPose.transform );
-						controller.matrix.elements = targetRay.matrix;
-
+						controller.matrix.fromArray( inputPose.transform.matrix );
 						controller.matrix.decompose( controller.position, controller.rotation, controller.scale );
 						controller.visible = true;
 
@@ -22684,6 +22679,18 @@
 
 		};
 
+		this.getDevice = function () {
+
+			console.warn( 'THREE.WebXRManager: getDevice() has been deprecated.' );
+
+		};
+
+		this.setDevice = function () {
+
+			console.warn( 'THREE.WebXRManager: setDevice() has been deprecated.' );
+
+		};
+
 		this.submitFrame = function () {};
 
 	}
@@ -22955,7 +22962,7 @@
 
 		// vr
 
-		var vr = ( typeof navigator !== 'undefined' && 'xr' in navigator && 'requestDevice' in navigator.xr ) ? new WebXRManager( _this ) : new WebVRManager( _this );
+		var vr = ( typeof navigator !== 'undefined' && 'xr' in navigator && 'supportsSession' in navigator.xr ) ? new WebXRManager( _this ) : new WebVRManager( _this );
 
 		this.vr = vr;
 

+ 123 - 123
build/three.min.js

@@ -15,10 +15,10 @@ e:[];this.materialIndex=void 0!==f?f:0}function sb(a,b,c,d){this._x=a||0;this._y
 !1}function I(a,b,c){if(Array.isArray(a))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.name="";this.array=a;this.itemSize=b;this.count=void 0!==a?a.length/b:0;this.normalized=!0===c;this.dynamic=!1;this.updateRange={offset:0,count:-1};this.version=0}function Cc(a,b,c){I.call(this,new Int8Array(a),b,c)}function Dc(a,b,c){I.call(this,new Uint8Array(a),b,c)}function Ec(a,b,c){I.call(this,new Uint8ClampedArray(a),b,c)}function Fc(a,b,c){I.call(this,new Int16Array(a),
 b,c)}function tb(a,b,c){I.call(this,new Uint16Array(a),b,c)}function Gc(a,b,c){I.call(this,new Int32Array(a),b,c)}function ub(a,b,c){I.call(this,new Uint32Array(a),b,c)}function A(a,b,c){I.call(this,new Float32Array(a),b,c)}function Hc(a,b,c){I.call(this,new Float64Array(a),b,c)}function Ye(){this.vertices=[];this.normals=[];this.colors=[];this.uvs=[];this.uvs2=[];this.groups=[];this.morphTargets={};this.skinWeights=[];this.skinIndices=[];this.boundingSphere=this.boundingBox=null;this.groupsNeedUpdate=
 this.uvsNeedUpdate=this.colorsNeedUpdate=this.normalsNeedUpdate=this.verticesNeedUpdate=!1}function Ze(a){if(0===a.length)return-Infinity;for(var b=a[0],c=1,d=a.length;c<d;++c)a[c]>b&&(b=a[c]);return b}function E(){Object.defineProperty(this,"id",{value:cg+=2});this.uuid=P.generateUUID();this.name="";this.type="BufferGeometry";this.index=null;this.attributes={};this.morphAttributes={};this.groups=[];this.boundingSphere=this.boundingBox=null;this.drawRange={start:0,count:Infinity};this.userData={}}
-function Ub(a,b,c,d,e,f){Q.call(this);this.type="BoxGeometry";this.parameters={width:a,height:b,depth:c,widthSegments:d,heightSegments:e,depthSegments:f};this.fromBufferGeometry(new vb(a,b,c,d,e,f));this.mergeVertices()}function vb(a,b,c,d,e,f){function g(a,b,c,d,e,f,g,l,Aa,oa,H){var r=f/Aa,u=g/oa,x=f/2,w=g/2,y=l/2;g=Aa+1;var z=oa+1,fa=f=0,R,F,D=new n;for(F=0;F<z;F++){var B=F*u-w;for(R=0;R<g;R++)D[a]=(R*r-x)*d,D[b]=B*e,D[c]=y,m.push(D.x,D.y,D.z),D[a]=0,D[b]=0,D[c]=0<l?1:-1,q.push(D.x,D.y,D.z),p.push(R/
-Aa),p.push(1-F/oa),f+=1}for(F=0;F<oa;F++)for(R=0;R<Aa;R++)a=v+R+g*(F+1),b=v+(R+1)+g*(F+1),c=v+(R+1)+g*F,k.push(v+R+g*F,a,c),k.push(a,b,c),fa+=6;h.addGroup(t,fa,H);t+=fa;v+=f}E.call(this);this.type="BoxBufferGeometry";this.parameters={width:a,height:b,depth:c,widthSegments:d,heightSegments:e,depthSegments:f};var h=this;a=a||1;b=b||1;c=c||1;d=Math.floor(d)||1;e=Math.floor(e)||1;f=Math.floor(f)||1;var k=[],m=[],q=[],p=[],v=0,t=0;g("z","y","x",-1,-1,c,b,a,f,e,0);g("z","y","x",1,-1,c,b,-a,f,e,1);g("x",
+function Ub(a,b,c,d,e,f){Q.call(this);this.type="BoxGeometry";this.parameters={width:a,height:b,depth:c,widthSegments:d,heightSegments:e,depthSegments:f};this.fromBufferGeometry(new vb(a,b,c,d,e,f));this.mergeVertices()}function vb(a,b,c,d,e,f){function g(a,b,c,d,e,f,g,l,Aa,oa,H){var r=f/Aa,v=g/oa,x=f/2,w=g/2,y=l/2;g=Aa+1;var z=oa+1,fa=f=0,R,F,D=new n;for(F=0;F<z;F++){var B=F*v-w;for(R=0;R<g;R++)D[a]=(R*r-x)*d,D[b]=B*e,D[c]=y,m.push(D.x,D.y,D.z),D[a]=0,D[b]=0,D[c]=0<l?1:-1,q.push(D.x,D.y,D.z),p.push(R/
+Aa),p.push(1-F/oa),f+=1}for(F=0;F<oa;F++)for(R=0;R<Aa;R++)a=u+R+g*(F+1),b=u+(R+1)+g*(F+1),c=u+(R+1)+g*F,k.push(u+R+g*F,a,c),k.push(a,b,c),fa+=6;h.addGroup(t,fa,H);t+=fa;u+=f}E.call(this);this.type="BoxBufferGeometry";this.parameters={width:a,height:b,depth:c,widthSegments:d,heightSegments:e,depthSegments:f};var h=this;a=a||1;b=b||1;c=c||1;d=Math.floor(d)||1;e=Math.floor(e)||1;f=Math.floor(f)||1;var k=[],m=[],q=[],p=[],u=0,t=0;g("z","y","x",-1,-1,c,b,a,f,e,0);g("z","y","x",1,-1,c,b,-a,f,e,1);g("x",
 "z","y",1,1,a,c,b,d,f,2);g("x","z","y",1,-1,a,c,-b,d,f,3);g("x","y","z",1,-1,a,b,c,d,e,4);g("x","y","z",-1,-1,a,b,-c,d,e,5);this.setIndex(k);this.addAttribute("position",new A(m,3));this.addAttribute("normal",new A(q,3));this.addAttribute("uv",new A(p,2))}function Jc(a,b,c,d){Q.call(this);this.type="PlaneGeometry";this.parameters={width:a,height:b,widthSegments:c,heightSegments:d};this.fromBufferGeometry(new yb(a,b,c,d));this.mergeVertices()}function yb(a,b,c,d){E.call(this);this.type="PlaneBufferGeometry";
-this.parameters={width:a,height:b,widthSegments:c,heightSegments:d};a=a||1;b=b||1;var e=a/2,f=b/2;c=Math.floor(c)||1;d=Math.floor(d)||1;var g=c+1,h=d+1,k=a/c,m=b/d,q=[],p=[],v=[],t=[];for(a=0;a<h;a++){var l=a*m-f;for(b=0;b<g;b++)p.push(b*k-e,-l,0),v.push(0,0,1),t.push(b/c),t.push(1-a/d)}for(a=0;a<d;a++)for(b=0;b<c;b++)e=b+g*(a+1),f=b+1+g*(a+1),h=b+1+g*a,q.push(b+g*a,e,h),q.push(e,f,h);this.setIndex(q);this.addAttribute("position",new A(p,3));this.addAttribute("normal",new A(v,3));this.addAttribute("uv",
+this.parameters={width:a,height:b,widthSegments:c,heightSegments:d};a=a||1;b=b||1;var e=a/2,f=b/2;c=Math.floor(c)||1;d=Math.floor(d)||1;var g=c+1,h=d+1,k=a/c,m=b/d,q=[],p=[],u=[],t=[];for(a=0;a<h;a++){var l=a*m-f;for(b=0;b<g;b++)p.push(b*k-e,-l,0),u.push(0,0,1),t.push(b/c),t.push(1-a/d)}for(a=0;a<d;a++)for(b=0;b<c;b++)e=b+g*(a+1),f=b+1+g*(a+1),h=b+1+g*a,q.push(b+g*a,e,h),q.push(e,f,h);this.setIndex(q);this.addAttribute("position",new A(p,3));this.addAttribute("normal",new A(u,3));this.addAttribute("uv",
 new A(t,2))}function O(){Object.defineProperty(this,"id",{value:dg++});this.uuid=P.generateUUID();this.name="";this.type="Material";this.lights=this.fog=!0;this.blending=1;this.side=0;this.vertexTangents=this.flatShading=!1;this.vertexColors=0;this.opacity=1;this.transparent=!1;this.blendSrc=204;this.blendDst=205;this.blendEquation=100;this.blendEquationAlpha=this.blendDstAlpha=this.blendSrcAlpha=null;this.depthFunc=3;this.depthWrite=this.depthTest=!0;this.clippingPlanes=null;this.clipShadows=this.clipIntersection=
 !1;this.shadowSide=null;this.colorWrite=!0;this.precision=null;this.polygonOffset=!1;this.polygonOffsetUnits=this.polygonOffsetFactor=0;this.dithering=!1;this.alphaTest=0;this.premultipliedAlpha=!1;this.visible=!0;this.userData={};this.needsUpdate=!0}function wa(a){O.call(this);this.type="ShaderMaterial";this.defines={};this.uniforms={};this.vertexShader="void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}";this.fragmentShader="void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}";
 this.linewidth=1;this.wireframe=!1;this.wireframeLinewidth=1;this.morphNormals=this.morphTargets=this.skinning=this.clipping=this.lights=this.fog=!1;this.extensions={derivatives:!1,fragDepth:!1,drawBuffers:!1,shaderTextureLOD:!1};this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv2:[0,0]};this.index0AttributeName=void 0;this.uniformsNeedUpdate=!1;void 0!==a&&(void 0!==a.attributes&&console.error("THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead."),this.setValues(a))}
@@ -29,14 +29,14 @@ vertexShader:Va.cube.vertexShader,fragmentShader:Va.cube.fragmentShader,side:1,d
 1:-1;if(m!==d||q!==l.version)k.material.needsUpdate=!0,m=d,q=l.version;b.unshift(k,k.geometry,k.material,0,0,null)}else if(d&&d.isTexture){void 0===h&&(h=new qa(new yb(2,2),new wa({type:"BackgroundMaterial",uniforms:Sb(Va.background.uniforms),vertexShader:Va.background.vertexShader,fragmentShader:Va.background.fragmentShader,side:0,depthTest:!1,depthWrite:!1,fog:!1})),h.geometry.removeAttribute("normal"),Object.defineProperty(h.material,"map",{get:function(){return this.uniforms.t2D.value}}),c.update(h));
 h.material.uniforms.t2D.value=d;!0===d.matrixAutoUpdate&&d.updateMatrix();h.material.uniforms.uvTransform.value.copy(d.matrix);if(m!==d||q!==d.version)h.material.needsUpdate=!0,m=d,q=d.version;b.unshift(h,h.geometry,h.material,0,0,null)}}}}function fg(a,b,c,d){var e;this.setMode=function(a){e=a};this.render=function(b,d){a.drawArrays(e,b,d);c.update(d,e)};this.renderInstances=function(f,g,h){if(d.isWebGL2)var k=a;else if(k=b.get("ANGLE_instanced_arrays"),null===k){console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");
 return}k[d.isWebGL2?"drawArraysInstanced":"drawArraysInstancedANGLE"](e,g,h,f.maxInstancedCount);c.update(h,e,f.maxInstancedCount)}}function gg(a,b,c){function d(b){if("highp"===b){if(0<a.getShaderPrecisionFormat(35633,36338).precision&&0<a.getShaderPrecisionFormat(35632,36338).precision)return"highp";b="mediump"}return"mediump"===b&&0<a.getShaderPrecisionFormat(35633,36337).precision&&0<a.getShaderPrecisionFormat(35632,36337).precision?"mediump":"lowp"}var e,f="undefined"!==typeof WebGL2RenderingContext&&
-a instanceof WebGL2RenderingContext,g=void 0!==c.precision?c.precision:"highp",h=d(g);h!==g&&(console.warn("THREE.WebGLRenderer:",g,"not supported, using",h,"instead."),g=h);c=!0===c.logarithmicDepthBuffer;h=a.getParameter(34930);var k=a.getParameter(35660),m=a.getParameter(3379),q=a.getParameter(34076),p=a.getParameter(34921),v=a.getParameter(36347),t=a.getParameter(36348),l=a.getParameter(36349),u=0<k,n=f||!!b.get("OES_texture_float"),z=u&&n,y=f?a.getParameter(36183):0;return{isWebGL2:f,getMaxAnisotropy:function(){if(void 0!==
-e)return e;var c=b.get("EXT_texture_filter_anisotropic");return e=null!==c?a.getParameter(c.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0},getMaxPrecision:d,precision:g,logarithmicDepthBuffer:c,maxTextures:h,maxVertexTextures:k,maxTextureSize:m,maxCubemapSize:q,maxAttributes:p,maxVertexUniforms:v,maxVaryings:t,maxFragmentUniforms:l,vertexTextures:u,floatFragmentTextures:n,floatVertexTextures:z,maxSamples:y}}function hg(){function a(){m.value!==d&&(m.value=d,m.needsUpdate=0<e);c.numPlanes=e;c.numIntersection=
+a instanceof WebGL2RenderingContext,g=void 0!==c.precision?c.precision:"highp",h=d(g);h!==g&&(console.warn("THREE.WebGLRenderer:",g,"not supported, using",h,"instead."),g=h);c=!0===c.logarithmicDepthBuffer;h=a.getParameter(34930);var k=a.getParameter(35660),m=a.getParameter(3379),q=a.getParameter(34076),p=a.getParameter(34921),u=a.getParameter(36347),t=a.getParameter(36348),l=a.getParameter(36349),v=0<k,n=f||!!b.get("OES_texture_float"),z=v&&n,y=f?a.getParameter(36183):0;return{isWebGL2:f,getMaxAnisotropy:function(){if(void 0!==
+e)return e;var c=b.get("EXT_texture_filter_anisotropic");return e=null!==c?a.getParameter(c.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0},getMaxPrecision:d,precision:g,logarithmicDepthBuffer:c,maxTextures:h,maxVertexTextures:k,maxTextureSize:m,maxCubemapSize:q,maxAttributes:p,maxVertexUniforms:u,maxVaryings:t,maxFragmentUniforms:l,vertexTextures:v,floatFragmentTextures:n,floatVertexTextures:z,maxSamples:y}}function hg(){function a(){m.value!==d&&(m.value=d,m.needsUpdate=0<e);c.numPlanes=e;c.numIntersection=
 0}function b(a,b,d,e){var f=null!==a?a.length:0,g=null;if(0!==f){g=m.value;if(!0!==e||null===g){e=d+4*f;b=b.matrixWorldInverse;k.getNormalMatrix(b);if(null===g||g.length<e)g=new Float32Array(e);for(e=0;e!==f;++e,d+=4)h.copy(a[e]).applyMatrix4(b,k),h.normal.toArray(g,d),g[d+3]=h.constant}m.value=g;m.needsUpdate=!0}c.numPlanes=f;return g}var c=this,d=null,e=0,f=!1,g=!1,h=new Ua,k=new pa,m={value:null,needsUpdate:!1};this.uniform=m;this.numIntersection=this.numPlanes=0;this.init=function(a,c,g){var h=
-0!==a.length||c||0!==e||f;f=c;d=b(a,g,0);e=a.length;return h};this.beginShadows=function(){g=!0;b(null)};this.endShadows=function(){g=!1;a()};this.setState=function(c,h,k,l,r,u){if(!f||null===c||0===c.length||g&&!k)g?b(null):a();else{k=g?0:e;var q=4*k,p=r.clippingState||null;m.value=p;p=b(c,l,q,u);for(c=0;c!==q;++c)p[c]=d[c];r.clippingState=p;this.numIntersection=h?this.numPlanes:0;this.numPlanes+=k}}}function ig(a){var b={};return{get:function(c){if(void 0!==b[c])return b[c];switch(c){case "WEBGL_depth_texture":var d=
+0!==a.length||c||0!==e||f;f=c;d=b(a,g,0);e=a.length;return h};this.beginShadows=function(){g=!0;b(null)};this.endShadows=function(){g=!1;a()};this.setState=function(c,h,k,l,r,v){if(!f||null===c||0===c.length||g&&!k)g?b(null):a();else{k=g?0:e;var q=4*k,p=r.clippingState||null;m.value=p;p=b(c,l,q,v);for(c=0;c!==q;++c)p[c]=d[c];r.clippingState=p;this.numIntersection=h?this.numPlanes:0;this.numPlanes+=k}}}function ig(a){var b={};return{get:function(c){if(void 0!==b[c])return b[c];switch(c){case "WEBGL_depth_texture":var d=
 a.getExtension("WEBGL_depth_texture")||a.getExtension("MOZ_WEBGL_depth_texture")||a.getExtension("WEBKIT_WEBGL_depth_texture");break;case "EXT_texture_filter_anisotropic":d=a.getExtension("EXT_texture_filter_anisotropic")||a.getExtension("MOZ_EXT_texture_filter_anisotropic")||a.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case "WEBGL_compressed_texture_s3tc":d=a.getExtension("WEBGL_compressed_texture_s3tc")||a.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||a.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");
 break;case "WEBGL_compressed_texture_pvrtc":d=a.getExtension("WEBGL_compressed_texture_pvrtc")||a.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:d=a.getExtension(c)}null===d&&console.warn("THREE.WebGLRenderer: "+c+" extension not supported.");return b[c]=d}}}function jg(a,b,c){function d(a){var g=a.target;a=e[g.id];null!==a.index&&b.remove(a.index);for(var k in a.attributes)b.remove(a.attributes[k]);g.removeEventListener("dispose",d);delete e[g.id];if(k=f[a.id])b.remove(k),delete f[a.id];
 c.memory.geometries--}var e={},f={};return{get:function(a,b){var f=e[b.id];if(f)return f;b.addEventListener("dispose",d);b.isBufferGeometry?f=b:b.isGeometry&&(void 0===b._bufferGeometry&&(b._bufferGeometry=(new E).setFromObject(a)),f=b._bufferGeometry);e[b.id]=f;c.memory.geometries++;return f},update:function(a){var c=a.index,d=a.attributes;null!==c&&b.update(c,34963);for(var e in d)b.update(d[e],34962);a=a.morphAttributes;for(e in a){c=a[e];d=0;for(var f=c.length;d<f;d++)b.update(c[d],34962)}},getWireframeAttribute:function(a){var c=
-f[a.id];if(c)return c;c=[];var d=a.index,e=a.attributes;if(null!==d){d=d.array;e=0;for(var g=d.length;e<g;e+=3){var p=d[e+0],v=d[e+1],l=d[e+2];c.push(p,v,v,l,l,p)}}else for(d=e.position.array,e=0,g=d.length/3-1;e<g;e+=3)p=e+0,v=e+1,l=e+2,c.push(p,v,v,l,l,p);c=new (65535<Ze(c)?ub:tb)(c,1);b.update(c,34963);return f[a.id]=c}}}function kg(a,b,c,d){var e,f,g;this.setMode=function(a){e=a};this.setIndex=function(a){f=a.type;g=a.bytesPerElement};this.render=function(b,d){a.drawElements(e,d,f,b*g);c.update(d,
+f[a.id];if(c)return c;c=[];var d=a.index,e=a.attributes;if(null!==d){d=d.array;e=0;for(var g=d.length;e<g;e+=3){var p=d[e+0],u=d[e+1],l=d[e+2];c.push(p,u,u,l,l,p)}}else for(d=e.position.array,e=0,g=d.length/3-1;e<g;e+=3)p=e+0,u=e+1,l=e+2,c.push(p,u,u,l,l,p);c=new (65535<Ze(c)?ub:tb)(c,1);b.update(c,34963);return f[a.id]=c}}}function kg(a,b,c,d){var e,f,g;this.setMode=function(a){e=a};this.setIndex=function(a){f=a.type;g=a.bytesPerElement};this.render=function(b,d){a.drawElements(e,d,f,b*g);c.update(d,
 e)};this.renderInstances=function(h,k,m){if(d.isWebGL2)var q=a;else if(q=b.get("ANGLE_instanced_arrays"),null===q){console.error("THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");return}q[d.isWebGL2?"drawElementsInstanced":"drawElementsInstancedANGLE"](e,m,f,k*g,h.maxInstancedCount);c.update(m,e,h.maxInstancedCount)}}function lg(a){var b={frame:0,calls:0,triangles:0,points:0,lines:0};return{memory:{geometries:0,
 textures:0},render:b,programs:null,autoReset:!0,reset:function(){b.frame++;b.calls=0;b.triangles=0;b.points=0;b.lines=0},update:function(a,d,e){e=e||1;b.calls++;switch(d){case 4:b.triangles+=a/3*e;break;case 5:case 6:b.triangles+=e*(a-2);break;case 1:b.lines+=a/2*e;break;case 3:b.lines+=e*(a-1);break;case 2:b.lines+=e*a;break;case 0:b.points+=e*a;break;default:console.error("THREE.WebGLInfo: Unknown draw mode:",d)}}}}function mg(a,b){return Math.abs(b[1])-Math.abs(a[1])}function ng(a){var b={},c=
 new Float32Array(8);return{update:function(d,e,f,g){var h=d.morphTargetInfluences,k=h.length;d=b[e.id];if(void 0===d){d=[];for(var m=0;m<k;m++)d[m]=[m,0];b[e.id]=d}var q=f.morphTargets&&e.morphAttributes.position;f=f.morphNormals&&e.morphAttributes.normal;for(m=0;m<k;m++){var p=d[m];0!==p[1]&&(q&&e.removeAttribute("morphTarget"+m),f&&e.removeAttribute("morphNormal"+m))}for(m=0;m<k;m++)p=d[m],p[0]=m,p[1]=h[m];d.sort(mg);for(m=0;8>m;m++){if(p=d[m])if(h=p[0],k=p[1]){q&&e.addAttribute("morphTarget"+m,
@@ -50,34 +50,34 @@ Ag,e)}function Bg(a,b,c){var d=this.cache,e=c.allocateTextureUnit();d[0]!==e&&(a
 case 35664:return qg;case 35665:return rg;case 35666:return sg;case 35674:return tg;case 35675:return ug;case 35676:return vg;case 35678:case 36198:return wg;case 35679:return zg;case 35680:return Bg;case 36289:return xg;case 5124:case 35670:return Cg;case 35667:case 35671:return Dg;case 35668:case 35672:return Eg;case 35669:case 35673:return Fg}}function Hg(a,b){a.uniform1fv(this.addr,b)}function Ig(a,b){a.uniform1iv(this.addr,b)}function Jg(a,b){a.uniform2iv(this.addr,b)}function Kg(a,b){a.uniform3iv(this.addr,
 b)}function Lg(a,b){a.uniform4iv(this.addr,b)}function Mg(a,b){b=Xb(b,this.size,2);a.uniform2fv(this.addr,b)}function Ng(a,b){b=Xb(b,this.size,3);a.uniform3fv(this.addr,b)}function Og(a,b){b=Xb(b,this.size,4);a.uniform4fv(this.addr,b)}function Pg(a,b){b=Xb(b,this.size,4);a.uniformMatrix2fv(this.addr,!1,b)}function Qg(a,b){b=Xb(b,this.size,9);a.uniformMatrix3fv(this.addr,!1,b)}function Rg(a,b){b=Xb(b,this.size,16);a.uniformMatrix4fv(this.addr,!1,b)}function Sg(a,b,c){var d=b.length,e=bf(c,d);a.uniform1iv(this.addr,
 e);for(a=0;a!==d;++a)c.safeSetTexture2D(b[a]||gf,e[a])}function Tg(a,b,c){var d=b.length,e=bf(c,d);a.uniform1iv(this.addr,e);for(a=0;a!==d;++a)c.safeSetTextureCube(b[a]||hf,e[a])}function Ug(a){switch(a){case 5126:return Hg;case 35664:return Mg;case 35665:return Ng;case 35666:return Og;case 35674:return Pg;case 35675:return Qg;case 35676:return Rg;case 35678:return Sg;case 35680:return Tg;case 5124:case 35670:return Ig;case 35667:case 35671:return Jg;case 35668:case 35672:return Kg;case 35669:case 35673:return Lg}}
-function Vg(a,b,c){this.id=a;this.addr=c;this.cache=[];this.setValue=Gg(b.type)}function jf(a,b,c){this.id=a;this.addr=c;this.cache=[];this.size=b.size;this.setValue=Ug(b.type)}function kf(a){this.id=a;this.seq=[];this.map={}}function hb(a,b){this.seq=[];this.map={};for(var c=a.getProgramParameter(b,35718),d=0;d<c;++d){var e=a.getActiveUniform(b,d),f=a.getUniformLocation(b,e.name),g=this,h=e.name,k=h.length;for(le.lastIndex=0;;){var m=le.exec(h),q=le.lastIndex,p=m[1],v=m[3];"]"===m[2]&&(p|=0);if(void 0===
-v||"["===v&&q+2===k){h=g;e=void 0===v?new Vg(p,e,f):new jf(p,e,f);h.seq.push(e);h.map[e.id]=e;break}else v=g.map[p],void 0===v&&(v=new kf(p),p=g,g=v,p.seq.push(g),p.map[g.id]=g),g=v}}}function Wg(a){a=a.split("\n");for(var b=0;b<a.length;b++)a[b]=b+1+": "+a[b];return a.join("\n")}function lf(a,b,c,d){var e=a.createShader(b);a.shaderSource(e,c);a.compileShader(e);!0===d&&(!1===a.getShaderParameter(e,35713)&&console.error("THREE.WebGLShader: Shader couldn't compile."),""!==a.getShaderInfoLog(e)&&console.warn("THREE.WebGLShader: gl.getShaderInfoLog()",
+function Vg(a,b,c){this.id=a;this.addr=c;this.cache=[];this.setValue=Gg(b.type)}function jf(a,b,c){this.id=a;this.addr=c;this.cache=[];this.size=b.size;this.setValue=Ug(b.type)}function kf(a){this.id=a;this.seq=[];this.map={}}function hb(a,b){this.seq=[];this.map={};for(var c=a.getProgramParameter(b,35718),d=0;d<c;++d){var e=a.getActiveUniform(b,d),f=a.getUniformLocation(b,e.name),g=this,h=e.name,k=h.length;for(le.lastIndex=0;;){var m=le.exec(h),q=le.lastIndex,p=m[1],u=m[3];"]"===m[2]&&(p|=0);if(void 0===
+u||"["===u&&q+2===k){h=g;e=void 0===u?new Vg(p,e,f):new jf(p,e,f);h.seq.push(e);h.map[e.id]=e;break}else u=g.map[p],void 0===u&&(u=new kf(p),p=g,g=u,p.seq.push(g),p.map[g.id]=g),g=u}}}function Wg(a){a=a.split("\n");for(var b=0;b<a.length;b++)a[b]=b+1+": "+a[b];return a.join("\n")}function lf(a,b,c,d){var e=a.createShader(b);a.shaderSource(e,c);a.compileShader(e);!0===d&&(!1===a.getShaderParameter(e,35713)&&console.error("THREE.WebGLShader: Shader couldn't compile."),""!==a.getShaderInfoLog(e)&&console.warn("THREE.WebGLShader: gl.getShaderInfoLog()",
 35633===b?"vertex":"fragment",a.getShaderInfoLog(e),Wg(c)));return e}function mf(a){switch(a){case 3E3:return["Linear","( value )"];case 3001:return["sRGB","( value )"];case 3002:return["RGBE","( value )"];case 3004:return["RGBM","( value, 7.0 )"];case 3005:return["RGBM","( value, 16.0 )"];case 3006:return["RGBD","( value, 256.0 )"];case 3007:return["Gamma","( value, float( GAMMA_FACTOR ) )"];default:throw Error("unsupported encoding: "+a);}}function Cd(a,b){b=mf(b);return"vec4 "+a+"( vec4 value ) { return "+
 b[0]+"ToLinear"+b[1]+"; }"}function Xg(a,b){b=mf(b);return"vec4 "+a+"( vec4 value ) { return LinearTo"+b[0]+b[1]+"; }"}function Yg(a,b){switch(b){case 1:b="Linear";break;case 2:b="Reinhard";break;case 3:b="Uncharted2";break;case 4:b="OptimizedCineon";break;case 5:b="ACESFilmic";break;default:throw Error("unsupported toneMapping: "+b);}return"vec3 "+a+"( vec3 color ) { return "+b+"ToneMapping( color ); }"}function Zg(a,b,c){a=a||{};return[a.derivatives||b.envMapCubeUV||b.bumpMap||b.normalMap&&!b.objectSpaceNormalMap||
 b.flatShading?"#extension GL_OES_standard_derivatives : enable":"",(a.fragDepth||b.logarithmicDepthBuffer)&&c.get("EXT_frag_depth")?"#extension GL_EXT_frag_depth : enable":"",a.drawBuffers&&c.get("WEBGL_draw_buffers")?"#extension GL_EXT_draw_buffers : require":"",(a.shaderTextureLOD||b.envMap)&&c.get("EXT_shader_texture_lod")?"#extension GL_EXT_shader_texture_lod : enable":""].filter(Kc).join("\n")}function $g(a){var b=[],c;for(c in a){var d=a[c];!1!==d&&b.push("#define "+c+" "+d)}return b.join("\n")}
 function Kc(a){return""!==a}function nf(a,b){return a.replace(/NUM_DIR_LIGHTS/g,b.numDirLights).replace(/NUM_SPOT_LIGHTS/g,b.numSpotLights).replace(/NUM_RECT_AREA_LIGHTS/g,b.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,b.numPointLights).replace(/NUM_HEMI_LIGHTS/g,b.numHemiLights)}function of(a,b){return a.replace(/NUM_CLIPPING_PLANES/g,b.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,b.numClippingPlanes-b.numClipIntersection)}function me(a){return a.replace(/^[ \t]*#include +<([\w\d./]+)>/gm,
-function(a,c){a=T[c];if(void 0===a)throw Error("Can not resolve #include <"+c+">");return me(a)})}function pf(a){return a.replace(/#pragma unroll_loop[\s]+?for \( int i = (\d+); i < (\d+); i \+\+ \) \{([\s\S]+?)(?=\})\}/g,function(a,c,d,e){a="";for(c=parseInt(c);c<parseInt(d);c++)a+=e.replace(/\[ i \]/g,"[ "+c+" ]");return a})}function ah(a,b,c,d,e,f,g,h){var k=a.context,m=d.defines,q=e.vertexShader,p=e.fragmentShader,v="SHADOWMAP_TYPE_BASIC";1===f.shadowMapType?v="SHADOWMAP_TYPE_PCF":2===f.shadowMapType&&
-(v="SHADOWMAP_TYPE_PCF_SOFT");var l="ENVMAP_TYPE_CUBE",r="ENVMAP_MODE_REFLECTION",u="ENVMAP_BLENDING_MULTIPLY";if(f.envMap){switch(d.envMap.mapping){case 301:case 302:l="ENVMAP_TYPE_CUBE";break;case 306:case 307:l="ENVMAP_TYPE_CUBE_UV";break;case 303:case 304:l="ENVMAP_TYPE_EQUIREC";break;case 305:l="ENVMAP_TYPE_SPHERE"}switch(d.envMap.mapping){case 302:case 304:r="ENVMAP_MODE_REFRACTION"}switch(d.combine){case 0:u="ENVMAP_BLENDING_MULTIPLY";break;case 1:u="ENVMAP_BLENDING_MIX";break;case 2:u="ENVMAP_BLENDING_ADD"}}var n=
+function(a,c){a=T[c];if(void 0===a)throw Error("Can not resolve #include <"+c+">");return me(a)})}function pf(a){return a.replace(/#pragma unroll_loop[\s]+?for \( int i = (\d+); i < (\d+); i \+\+ \) \{([\s\S]+?)(?=\})\}/g,function(a,c,d,e){a="";for(c=parseInt(c);c<parseInt(d);c++)a+=e.replace(/\[ i \]/g,"[ "+c+" ]");return a})}function ah(a,b,c,d,e,f,g,h){var k=a.context,m=d.defines,q=e.vertexShader,p=e.fragmentShader,u="SHADOWMAP_TYPE_BASIC";1===f.shadowMapType?u="SHADOWMAP_TYPE_PCF":2===f.shadowMapType&&
+(u="SHADOWMAP_TYPE_PCF_SOFT");var l="ENVMAP_TYPE_CUBE",r="ENVMAP_MODE_REFLECTION",v="ENVMAP_BLENDING_MULTIPLY";if(f.envMap){switch(d.envMap.mapping){case 301:case 302:l="ENVMAP_TYPE_CUBE";break;case 306:case 307:l="ENVMAP_TYPE_CUBE_UV";break;case 303:case 304:l="ENVMAP_TYPE_EQUIREC";break;case 305:l="ENVMAP_TYPE_SPHERE"}switch(d.envMap.mapping){case 302:case 304:r="ENVMAP_MODE_REFRACTION"}switch(d.combine){case 0:v="ENVMAP_BLENDING_MULTIPLY";break;case 1:v="ENVMAP_BLENDING_MIX";break;case 2:v="ENVMAP_BLENDING_ADD"}}var n=
 0<a.gammaFactor?a.gammaFactor:1,z=g.isWebGL2?"":Zg(d.extensions,f,b),y=$g(m),w=k.createProgram();d.isRawShaderMaterial?(m=[y].filter(Kc).join("\n"),0<m.length&&(m+="\n"),b=[z,y].filter(Kc).join("\n"),0<b.length&&(b+="\n")):(m=["precision "+f.precision+" float;","precision "+f.precision+" int;","#define SHADER_NAME "+e.name,y,f.supportsVertexTextures?"#define VERTEX_TEXTURES":"","#define GAMMA_FACTOR "+n,"#define MAX_BONES "+f.maxBones,f.useFog&&f.fog?"#define USE_FOG":"",f.useFog&&f.fogExp?"#define FOG_EXP2":
 "",f.map?"#define USE_MAP":"",f.envMap?"#define USE_ENVMAP":"",f.envMap?"#define "+r:"",f.lightMap?"#define USE_LIGHTMAP":"",f.aoMap?"#define USE_AOMAP":"",f.emissiveMap?"#define USE_EMISSIVEMAP":"",f.bumpMap?"#define USE_BUMPMAP":"",f.normalMap?"#define USE_NORMALMAP":"",f.normalMap&&f.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",f.displacementMap&&f.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",f.specularMap?"#define USE_SPECULARMAP":"",f.roughnessMap?"#define USE_ROUGHNESSMAP":
 "",f.metalnessMap?"#define USE_METALNESSMAP":"",f.alphaMap?"#define USE_ALPHAMAP":"",f.vertexTangents?"#define USE_TANGENT":"",f.vertexColors?"#define USE_COLOR":"",f.flatShading?"#define FLAT_SHADED":"",f.skinning?"#define USE_SKINNING":"",f.useVertexTexture?"#define BONE_TEXTURE":"",f.morphTargets?"#define USE_MORPHTARGETS":"",f.morphNormals&&!1===f.flatShading?"#define USE_MORPHNORMALS":"",f.doubleSided?"#define DOUBLE_SIDED":"",f.flipSided?"#define FLIP_SIDED":"",f.shadowMapEnabled?"#define USE_SHADOWMAP":
-"",f.shadowMapEnabled?"#define "+v:"",f.sizeAttenuation?"#define USE_SIZEATTENUATION":"",f.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",f.logarithmicDepthBuffer&&(g.isWebGL2||b.get("EXT_frag_depth"))?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_TANGENT",
+"",f.shadowMapEnabled?"#define "+u:"",f.sizeAttenuation?"#define USE_SIZEATTENUATION":"",f.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",f.logarithmicDepthBuffer&&(g.isWebGL2||b.get("EXT_frag_depth"))?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_TANGENT",
 "\tattribute vec4 tangent;","#endif","#ifdef USE_COLOR","\tattribute vec3 color;","#endif","#ifdef USE_MORPHTARGETS","\tattribute vec3 morphTarget0;","\tattribute vec3 morphTarget1;","\tattribute vec3 morphTarget2;","\tattribute vec3 morphTarget3;","\t#ifdef USE_MORPHNORMALS","\t\tattribute vec3 morphNormal0;","\t\tattribute vec3 morphNormal1;","\t\tattribute vec3 morphNormal2;","\t\tattribute vec3 morphNormal3;","\t#else","\t\tattribute vec3 morphTarget4;","\t\tattribute vec3 morphTarget5;","\t\tattribute vec3 morphTarget6;",
 "\t\tattribute vec3 morphTarget7;","\t#endif","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif","\n"].filter(Kc).join("\n"),b=[z,"precision "+f.precision+" float;","precision "+f.precision+" int;","#define SHADER_NAME "+e.name,y,f.alphaTest?"#define ALPHATEST "+f.alphaTest+(f.alphaTest%1?"":".0"):"","#define GAMMA_FACTOR "+n,f.useFog&&f.fog?"#define USE_FOG":"",f.useFog&&f.fogExp?"#define FOG_EXP2":"",f.map?"#define USE_MAP":"",f.matcap?"#define USE_MATCAP":
-"",f.envMap?"#define USE_ENVMAP":"",f.envMap?"#define "+l:"",f.envMap?"#define "+r:"",f.envMap?"#define "+u:"",f.lightMap?"#define USE_LIGHTMAP":"",f.aoMap?"#define USE_AOMAP":"",f.emissiveMap?"#define USE_EMISSIVEMAP":"",f.bumpMap?"#define USE_BUMPMAP":"",f.normalMap?"#define USE_NORMALMAP":"",f.normalMap&&f.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",f.specularMap?"#define USE_SPECULARMAP":"",f.roughnessMap?"#define USE_ROUGHNESSMAP":"",f.metalnessMap?"#define USE_METALNESSMAP":"",f.alphaMap?
-"#define USE_ALPHAMAP":"",f.vertexTangents?"#define USE_TANGENT":"",f.vertexColors?"#define USE_COLOR":"",f.gradientMap?"#define USE_GRADIENTMAP":"",f.flatShading?"#define FLAT_SHADED":"",f.doubleSided?"#define DOUBLE_SIDED":"",f.flipSided?"#define FLIP_SIDED":"",f.shadowMapEnabled?"#define USE_SHADOWMAP":"",f.shadowMapEnabled?"#define "+v:"",f.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",f.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",f.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":
+"",f.envMap?"#define USE_ENVMAP":"",f.envMap?"#define "+l:"",f.envMap?"#define "+r:"",f.envMap?"#define "+v:"",f.lightMap?"#define USE_LIGHTMAP":"",f.aoMap?"#define USE_AOMAP":"",f.emissiveMap?"#define USE_EMISSIVEMAP":"",f.bumpMap?"#define USE_BUMPMAP":"",f.normalMap?"#define USE_NORMALMAP":"",f.normalMap&&f.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",f.specularMap?"#define USE_SPECULARMAP":"",f.roughnessMap?"#define USE_ROUGHNESSMAP":"",f.metalnessMap?"#define USE_METALNESSMAP":"",f.alphaMap?
+"#define USE_ALPHAMAP":"",f.vertexTangents?"#define USE_TANGENT":"",f.vertexColors?"#define USE_COLOR":"",f.gradientMap?"#define USE_GRADIENTMAP":"",f.flatShading?"#define FLAT_SHADED":"",f.doubleSided?"#define DOUBLE_SIDED":"",f.flipSided?"#define FLIP_SIDED":"",f.shadowMapEnabled?"#define USE_SHADOWMAP":"",f.shadowMapEnabled?"#define "+u:"",f.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",f.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",f.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":
 "",f.logarithmicDepthBuffer&&(g.isWebGL2||b.get("EXT_frag_depth"))?"#define USE_LOGDEPTHBUF_EXT":"",f.envMap&&(g.isWebGL2||b.get("EXT_shader_texture_lod"))?"#define TEXTURE_LOD_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;",0!==f.toneMapping?"#define TONE_MAPPING":"",0!==f.toneMapping?T.tonemapping_pars_fragment:"",0!==f.toneMapping?Yg("toneMapping",f.toneMapping):"",f.dithering?"#define DITHERING":"",f.outputEncoding||f.mapEncoding||f.matcapEncoding||f.envMapEncoding||f.emissiveMapEncoding?
 T.encodings_pars_fragment:"",f.mapEncoding?Cd("mapTexelToLinear",f.mapEncoding):"",f.matcapEncoding?Cd("matcapTexelToLinear",f.matcapEncoding):"",f.envMapEncoding?Cd("envMapTexelToLinear",f.envMapEncoding):"",f.emissiveMapEncoding?Cd("emissiveMapTexelToLinear",f.emissiveMapEncoding):"",f.outputEncoding?Xg("linearToOutputTexel",f.outputEncoding):"",f.depthPacking?"#define DEPTH_PACKING "+d.depthPacking:"","\n"].filter(Kc).join("\n"));q=me(q);q=nf(q,f);q=of(q,f);p=me(p);p=nf(p,f);p=of(p,f);q=pf(q);
-p=pf(p);g.isWebGL2&&!d.isRawShaderMaterial&&(g=!1,v=/^\s*#version\s+300\s+es\s*\n/,d.isShaderMaterial&&null!==q.match(v)&&null!==p.match(v)&&(g=!0,q=q.replace(v,""),p=p.replace(v,"")),m="#version 300 es\n\n#define attribute in\n#define varying out\n#define texture2D texture\n"+m,b=["#version 300 es\n\n#define varying in",g?"":"out highp vec4 pc_fragColor;",g?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth\n#define texture2D texture\n#define textureCube texture\n#define texture2DProj textureProj\n#define texture2DLodEXT textureLod\n#define texture2DProjLodEXT textureProjLod\n#define textureCubeLodEXT textureLod\n#define texture2DGradEXT textureGrad\n#define texture2DProjGradEXT textureProjGrad\n#define textureCubeGradEXT textureGrad"].join("\n")+
-"\n"+b);p=b+p;q=lf(k,35633,m+q,a.debug.checkShaderErrors);p=lf(k,35632,p,a.debug.checkShaderErrors);k.attachShader(w,q);k.attachShader(w,p);void 0!==d.index0AttributeName?k.bindAttribLocation(w,0,d.index0AttributeName):!0===f.morphTargets&&k.bindAttribLocation(w,0,"position");k.linkProgram(w);if(a.debug.checkShaderErrors){a=k.getProgramInfoLog(w).trim();f=k.getShaderInfoLog(q).trim();g=k.getShaderInfoLog(p).trim();l=v=!0;if(!1===k.getProgramParameter(w,35714))v=!1,console.error("THREE.WebGLProgram: shader error: ",
-k.getError(),"35715",k.getProgramParameter(w,35715),"gl.getProgramInfoLog",a,f,g);else if(""!==a)console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()",a);else if(""===f||""===g)l=!1;l&&(this.diagnostics={runnable:v,material:d,programLog:a,vertexShader:{log:f,prefix:m},fragmentShader:{log:g,prefix:b}})}k.deleteShader(q);k.deleteShader(p);var D;this.getUniforms=function(){void 0===D&&(D=new hb(k,w,h));return D};var F;this.getAttributes=function(){if(void 0===F){for(var a={},b=k.getProgramParameter(w,
+p=pf(p);g.isWebGL2&&!d.isRawShaderMaterial&&(g=!1,u=/^\s*#version\s+300\s+es\s*\n/,d.isShaderMaterial&&null!==q.match(u)&&null!==p.match(u)&&(g=!0,q=q.replace(u,""),p=p.replace(u,"")),m="#version 300 es\n\n#define attribute in\n#define varying out\n#define texture2D texture\n"+m,b=["#version 300 es\n\n#define varying in",g?"":"out highp vec4 pc_fragColor;",g?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth\n#define texture2D texture\n#define textureCube texture\n#define texture2DProj textureProj\n#define texture2DLodEXT textureLod\n#define texture2DProjLodEXT textureProjLod\n#define textureCubeLodEXT textureLod\n#define texture2DGradEXT textureGrad\n#define texture2DProjGradEXT textureProjGrad\n#define textureCubeGradEXT textureGrad"].join("\n")+
+"\n"+b);p=b+p;q=lf(k,35633,m+q,a.debug.checkShaderErrors);p=lf(k,35632,p,a.debug.checkShaderErrors);k.attachShader(w,q);k.attachShader(w,p);void 0!==d.index0AttributeName?k.bindAttribLocation(w,0,d.index0AttributeName):!0===f.morphTargets&&k.bindAttribLocation(w,0,"position");k.linkProgram(w);if(a.debug.checkShaderErrors){a=k.getProgramInfoLog(w).trim();f=k.getShaderInfoLog(q).trim();g=k.getShaderInfoLog(p).trim();l=u=!0;if(!1===k.getProgramParameter(w,35714))u=!1,console.error("THREE.WebGLProgram: shader error: ",
+k.getError(),"35715",k.getProgramParameter(w,35715),"gl.getProgramInfoLog",a,f,g);else if(""!==a)console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()",a);else if(""===f||""===g)l=!1;l&&(this.diagnostics={runnable:u,material:d,programLog:a,vertexShader:{log:f,prefix:m},fragmentShader:{log:g,prefix:b}})}k.deleteShader(q);k.deleteShader(p);var D;this.getUniforms=function(){void 0===D&&(D=new hb(k,w,h));return D};var F;this.getAttributes=function(){if(void 0===F){for(var a={},b=k.getProgramParameter(w,
 35721),c=0;c<b;c++){var d=k.getActiveAttrib(w,c).name;a[d]=k.getAttribLocation(w,d)}F=a}return F};this.destroy=function(){k.deleteProgram(w);this.program=void 0};Object.defineProperties(this,{uniforms:{get:function(){console.warn("THREE.WebGLProgram: .uniforms is now .getUniforms().");return this.getUniforms()}},attributes:{get:function(){console.warn("THREE.WebGLProgram: .attributes is now .getAttributes().");return this.getAttributes()}}});this.name=e.name;this.id=bh++;this.code=c;this.usedTimes=
 1;this.program=w;this.vertexShader=q;this.fragmentShader=p;return this}function ch(a,b,c,d){function e(a,b){if(a)a.isTexture?c=a.encoding:a.isWebGLRenderTarget&&(console.warn("THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead."),c=a.texture.encoding);else var c=3E3;3E3===c&&b&&(c=3007);return c}var f=[],g={MeshDepthMaterial:"depth",MeshDistanceMaterial:"distanceRGBA",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",
 MeshPhongMaterial:"phong",MeshToonMaterial:"phong",MeshStandardMaterial:"physical",MeshPhysicalMaterial:"physical",MeshMatcapMaterial:"matcap",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointsMaterial:"points",ShadowMaterial:"shadow",SpriteMaterial:"sprite"},h="precision supportsVertexTextures map mapEncoding matcap matcapEncoding envMap envMapMode envMapEncoding lightMap aoMap emissiveMap emissiveMapEncoding bumpMap normalMap objectSpaceNormalMap displacementMap specularMap roughnessMap metalnessMap gradientMap alphaMap combine vertexColors vertexTangents fog useFog fogExp flatShading sizeAttenuation logarithmicDepthBuffer skinning maxBones useVertexTexture morphTargets morphNormals maxMorphTargets maxMorphNormals premultipliedAlpha numDirLights numPointLights numSpotLights numHemiLights numRectAreaLights shadowMapEnabled shadowMapType toneMapping physicallyCorrectLights alphaTest doubleSided flipSided numClippingPlanes numClipIntersection depthPacking dithering".split(" ");
-this.getParameters=function(b,d,f,h,v,l,r){var k=g[b.type];if(r.isSkinnedMesh){var m=r.skeleton.bones;if(c.floatVertexTextures)m=1024;else{var q=Math.min(Math.floor((c.maxVertexUniforms-20)/4),m.length);q<m.length?(console.warn("THREE.WebGLRenderer: Skeleton has "+m.length+" bones. This GPU supports "+q+"."),m=0):m=q}}else m=0;q=c.precision;null!==b.precision&&(q=c.getMaxPrecision(b.precision),q!==b.precision&&console.warn("THREE.WebGLProgram.getParameters:",b.precision,"not supported, using",q,"instead."));
+this.getParameters=function(b,d,f,h,u,l,r){var k=g[b.type];if(r.isSkinnedMesh){var m=r.skeleton.bones;if(c.floatVertexTextures)m=1024;else{var q=Math.min(Math.floor((c.maxVertexUniforms-20)/4),m.length);q<m.length?(console.warn("THREE.WebGLRenderer: Skeleton has "+m.length+" bones. This GPU supports "+q+"."),m=0):m=q}}else m=0;q=c.precision;null!==b.precision&&(q=c.getMaxPrecision(b.precision),q!==b.precision&&console.warn("THREE.WebGLProgram.getParameters:",b.precision,"not supported, using",q,"instead."));
 var p=a.getRenderTarget();return{shaderID:k,precision:q,supportsVertexTextures:c.vertexTextures,outputEncoding:e(p?p.texture:null,a.gammaOutput),map:!!b.map,mapEncoding:e(b.map,a.gammaInput),matcap:!!b.matcap,matcapEncoding:e(b.matcap,a.gammaInput),envMap:!!b.envMap,envMapMode:b.envMap&&b.envMap.mapping,envMapEncoding:e(b.envMap,a.gammaInput),envMapCubeUV:!!b.envMap&&(306===b.envMap.mapping||307===b.envMap.mapping),lightMap:!!b.lightMap,aoMap:!!b.aoMap,emissiveMap:!!b.emissiveMap,emissiveMapEncoding:e(b.emissiveMap,
 a.gammaInput),bumpMap:!!b.bumpMap,normalMap:!!b.normalMap,objectSpaceNormalMap:1===b.normalMapType,displacementMap:!!b.displacementMap,roughnessMap:!!b.roughnessMap,metalnessMap:!!b.metalnessMap,specularMap:!!b.specularMap,alphaMap:!!b.alphaMap,gradientMap:!!b.gradientMap,combine:b.combine,vertexTangents:b.normalMap&&b.vertexTangents,vertexColors:b.vertexColors,fog:!!h,useFog:b.fog,fogExp:h&&h.isFogExp2,flatShading:b.flatShading,sizeAttenuation:b.sizeAttenuation,logarithmicDepthBuffer:c.logarithmicDepthBuffer,
-skinning:b.skinning&&0<m,maxBones:m,useVertexTexture:c.floatVertexTextures,morphTargets:b.morphTargets,morphNormals:b.morphNormals,maxMorphTargets:a.maxMorphTargets,maxMorphNormals:a.maxMorphNormals,numDirLights:d.directional.length,numPointLights:d.point.length,numSpotLights:d.spot.length,numRectAreaLights:d.rectArea.length,numHemiLights:d.hemi.length,numClippingPlanes:v,numClipIntersection:l,dithering:b.dithering,shadowMapEnabled:a.shadowMap.enabled&&r.receiveShadow&&0<f.length,shadowMapType:a.shadowMap.type,
+skinning:b.skinning&&0<m,maxBones:m,useVertexTexture:c.floatVertexTextures,morphTargets:b.morphTargets,morphNormals:b.morphNormals,maxMorphTargets:a.maxMorphTargets,maxMorphNormals:a.maxMorphNormals,numDirLights:d.directional.length,numPointLights:d.point.length,numSpotLights:d.spot.length,numRectAreaLights:d.rectArea.length,numHemiLights:d.hemi.length,numClippingPlanes:u,numClipIntersection:l,dithering:b.dithering,shadowMapEnabled:a.shadowMap.enabled&&r.receiveShadow&&0<f.length,shadowMapType:a.shadowMap.type,
 toneMapping:a.toneMapping,physicallyCorrectLights:a.physicallyCorrectLights,premultipliedAlpha:b.premultipliedAlpha,alphaTest:b.alphaTest,doubleSided:2===b.side,flipSided:1===b.side,depthPacking:void 0!==b.depthPacking?b.depthPacking:!1}};this.getProgramCode=function(b,c){var d=[];c.shaderID?d.push(c.shaderID):(d.push(b.fragmentShader),d.push(b.vertexShader));if(void 0!==b.defines)for(var e in b.defines)d.push(e),d.push(b.defines[e]);for(e=0;e<h.length;e++)d.push(c[h[e]]);d.push(b.onBeforeCompile.toString());
 d.push(a.gammaOutput);d.push(a.gammaFactor);return d.join()};this.acquireProgram=function(e,g,h,p){for(var k,m=0,q=f.length;m<q;m++){var l=f[m];if(l.code===p){k=l;++k.usedTimes;break}}void 0===k&&(k=new ah(a,b,p,e,g,h,c,d),f.push(k));return k};this.releaseProgram=function(a){if(0===--a.usedTimes){var b=f.indexOf(a);f[b]=f[f.length-1];f.pop();a.destroy()}};this.programs=f}function dh(){var a=new WeakMap;return{get:function(b){var c=a.get(b);void 0===c&&(c={},a.set(b,c));return c},remove:function(b){a.delete(b)},
 update:function(b,c,d){a.get(b)[c]=d},dispose:function(){a=new WeakMap}}}function eh(a,b){return a.groupOrder!==b.groupOrder?a.groupOrder-b.groupOrder:a.renderOrder!==b.renderOrder?a.renderOrder-b.renderOrder:a.program!==b.program?a.program.id-b.program.id:a.material.id!==b.material.id?a.material.id-b.material.id:a.z!==b.z?a.z-b.z:a.id-b.id}function fh(a,b){return a.groupOrder!==b.groupOrder?a.groupOrder-b.groupOrder:a.renderOrder!==b.renderOrder?a.renderOrder-b.renderOrder:a.z!==b.z?b.z-a.z:a.id-
@@ -85,52 +85,52 @@ b.id}function qf(){function a(a,d,e,m,q,p){var g=b[c];void 0===g?(g={id:a.id,obj
 e:d).push(b)},unshift:function(b,c,f,m,q,p){b=a(b,c,f,m,q,p);(!0===f.transparent?e:d).unshift(b)},sort:function(){1<d.length&&d.sort(eh);1<e.length&&e.sort(fh)}}}function gh(){function a(c){c=c.target;c.removeEventListener("dispose",a);delete b[c.id]}var b={};return{get:function(c,d){var e=b[c.id];if(void 0===e){var f=new qf;b[c.id]={};b[c.id][d.id]=f;c.addEventListener("dispose",a)}else f=e[d.id],void 0===f&&(f=new qf,e[d.id]=f);return f},dispose:function(){b={}}}}function hh(){var a={};return{get:function(b){if(void 0!==
 a[b.id])return a[b.id];switch(b.type){case "DirectionalLight":var c={direction:new n,color:new C,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new B};break;case "SpotLight":c={position:new n,direction:new n,color:new C,distance:0,coneCos:0,penumbraCos:0,decay:0,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new B};break;case "PointLight":c={position:new n,color:new C,distance:0,decay:0,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new B,shadowCameraNear:1,shadowCameraFar:1E3};break;
 case "HemisphereLight":c={direction:new n,skyColor:new C,groundColor:new C};break;case "RectAreaLight":c={color:new C,position:new n,halfWidth:new n,halfHeight:new n}}return a[b.id]=c}}}function ih(){for(var a=new hh,b={id:jh++,hash:{stateID:-1,directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,shadowsLength:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],point:[],
-pointShadowMap:[],pointShadowMatrix:[],hemi:[]},c=0;9>c;c++)b.probe.push(new n);var d=new n,e=new N,f=new N;return{setup:function(c,h,k){for(var g=0,q=0,p=0,v=0;9>v;v++)b.probe[v].set(0,0,0);var l=0,r=0,u=0,n=0,z=0;k=k.matrixWorldInverse;v=0;for(var y=c.length;v<y;v++){var w=c[v],D=w.color,F=w.intensity,Aa=w.distance,oa=w.shadow&&w.shadow.map?w.shadow.map.texture:null;if(w.isAmbientLight)g+=D.r*F,q+=D.g*F,p+=D.b*F;else if(w.isLightProbe)for(oa=0;9>oa;oa++)b.probe[oa].addScaledVector(w.sh.coefficients[oa],
+pointShadowMap:[],pointShadowMatrix:[],hemi:[]},c=0;9>c;c++)b.probe.push(new n);var d=new n,e=new N,f=new N;return{setup:function(c,h,k){for(var g=0,q=0,p=0,u=0;9>u;u++)b.probe[u].set(0,0,0);var l=0,r=0,v=0,n=0,z=0;k=k.matrixWorldInverse;u=0;for(var y=c.length;u<y;u++){var w=c[u],D=w.color,F=w.intensity,Aa=w.distance,oa=w.shadow&&w.shadow.map?w.shadow.map.texture:null;if(w.isAmbientLight)g+=D.r*F,q+=D.g*F,p+=D.b*F;else if(w.isLightProbe)for(oa=0;9>oa;oa++)b.probe[oa].addScaledVector(w.sh.coefficients[oa],
 F);else if(w.isDirectionalLight){var H=a.get(w);H.color.copy(w.color).multiplyScalar(w.intensity);H.direction.setFromMatrixPosition(w.matrixWorld);d.setFromMatrixPosition(w.target.matrixWorld);H.direction.sub(d);H.direction.transformDirection(k);if(H.shadow=w.castShadow)F=w.shadow,H.shadowBias=F.bias,H.shadowRadius=F.radius,H.shadowMapSize=F.mapSize;b.directionalShadowMap[l]=oa;b.directionalShadowMatrix[l]=w.shadow.matrix;b.directional[l]=H;l++}else if(w.isSpotLight){H=a.get(w);H.position.setFromMatrixPosition(w.matrixWorld);
-H.position.applyMatrix4(k);H.color.copy(D).multiplyScalar(F);H.distance=Aa;H.direction.setFromMatrixPosition(w.matrixWorld);d.setFromMatrixPosition(w.target.matrixWorld);H.direction.sub(d);H.direction.transformDirection(k);H.coneCos=Math.cos(w.angle);H.penumbraCos=Math.cos(w.angle*(1-w.penumbra));H.decay=w.decay;if(H.shadow=w.castShadow)F=w.shadow,H.shadowBias=F.bias,H.shadowRadius=F.radius,H.shadowMapSize=F.mapSize;b.spotShadowMap[u]=oa;b.spotShadowMatrix[u]=w.shadow.matrix;b.spot[u]=H;u++}else if(w.isRectAreaLight)H=
+H.position.applyMatrix4(k);H.color.copy(D).multiplyScalar(F);H.distance=Aa;H.direction.setFromMatrixPosition(w.matrixWorld);d.setFromMatrixPosition(w.target.matrixWorld);H.direction.sub(d);H.direction.transformDirection(k);H.coneCos=Math.cos(w.angle);H.penumbraCos=Math.cos(w.angle*(1-w.penumbra));H.decay=w.decay;if(H.shadow=w.castShadow)F=w.shadow,H.shadowBias=F.bias,H.shadowRadius=F.radius,H.shadowMapSize=F.mapSize;b.spotShadowMap[v]=oa;b.spotShadowMatrix[v]=w.shadow.matrix;b.spot[v]=H;v++}else if(w.isRectAreaLight)H=
 a.get(w),H.color.copy(D).multiplyScalar(F),H.position.setFromMatrixPosition(w.matrixWorld),H.position.applyMatrix4(k),f.identity(),e.copy(w.matrixWorld),e.premultiply(k),f.extractRotation(e),H.halfWidth.set(.5*w.width,0,0),H.halfHeight.set(0,.5*w.height,0),H.halfWidth.applyMatrix4(f),H.halfHeight.applyMatrix4(f),b.rectArea[n]=H,n++;else if(w.isPointLight){H=a.get(w);H.position.setFromMatrixPosition(w.matrixWorld);H.position.applyMatrix4(k);H.color.copy(w.color).multiplyScalar(w.intensity);H.distance=
 w.distance;H.decay=w.decay;if(H.shadow=w.castShadow)F=w.shadow,H.shadowBias=F.bias,H.shadowRadius=F.radius,H.shadowMapSize=F.mapSize,H.shadowCameraNear=F.camera.near,H.shadowCameraFar=F.camera.far;b.pointShadowMap[r]=oa;b.pointShadowMatrix[r]=w.shadow.matrix;b.point[r]=H;r++}else w.isHemisphereLight&&(H=a.get(w),H.direction.setFromMatrixPosition(w.matrixWorld),H.direction.transformDirection(k),H.direction.normalize(),H.skyColor.copy(w.color).multiplyScalar(F),H.groundColor.copy(w.groundColor).multiplyScalar(F),
-b.hemi[z]=H,z++)}b.ambient[0]=g;b.ambient[1]=q;b.ambient[2]=p;b.directional.length=l;b.spot.length=u;b.rectArea.length=n;b.point.length=r;b.hemi.length=z;b.hash.stateID=b.id;b.hash.directionalLength=l;b.hash.pointLength=r;b.hash.spotLength=u;b.hash.rectAreaLength=n;b.hash.hemiLength=z;b.hash.shadowsLength=h.length},state:b}}function rf(){var a=new ih,b=[],c=[];return{init:function(){b.length=0;c.length=0},state:{lightsArray:b,shadowsArray:c,lights:a},setupLights:function(d){a.setup(b,c,d)},pushLight:function(a){b.push(a)},
+b.hemi[z]=H,z++)}b.ambient[0]=g;b.ambient[1]=q;b.ambient[2]=p;b.directional.length=l;b.spot.length=v;b.rectArea.length=n;b.point.length=r;b.hemi.length=z;b.hash.stateID=b.id;b.hash.directionalLength=l;b.hash.pointLength=r;b.hash.spotLength=v;b.hash.rectAreaLength=n;b.hash.hemiLength=z;b.hash.shadowsLength=h.length},state:b}}function rf(){var a=new ih,b=[],c=[];return{init:function(){b.length=0;c.length=0},state:{lightsArray:b,shadowsArray:c,lights:a},setupLights:function(d){a.setup(b,c,d)},pushLight:function(a){b.push(a)},
 pushShadow:function(a){c.push(a)}}}function kh(){function a(c){c=c.target;c.removeEventListener("dispose",a);delete b[c.id]}var b={};return{get:function(c,d){if(void 0===b[c.id]){var e=new rf;b[c.id]={};b[c.id][d.id]=e;c.addEventListener("dispose",a)}else void 0===b[c.id][d.id]?(e=new rf,b[c.id][d.id]=e):e=b[c.id][d.id];return e},dispose:function(){b={}}}}function ib(a){O.call(this);this.type="MeshDepthMaterial";this.depthPacking=3200;this.morphTargets=this.skinning=!1;this.displacementMap=this.alphaMap=
 this.map=null;this.displacementScale=1;this.displacementBias=0;this.wireframe=!1;this.wireframeLinewidth=1;this.lights=this.fog=!1;this.setValues(a)}function jb(a){O.call(this);this.type="MeshDistanceMaterial";this.referencePosition=new n;this.nearDistance=1;this.farDistance=1E3;this.morphTargets=this.skinning=!1;this.displacementMap=this.alphaMap=this.map=null;this.displacementScale=1;this.displacementBias=0;this.lights=this.fog=!1;this.setValues(a)}function sf(a,b,c){function d(b,c,d,e,f,g){var h=
-b.geometry;var k=p;var m=b.customDepthMaterial;d&&(k=v,m=b.customDistanceMaterial);m?k=m:(m=!1,c.morphTargets&&(h&&h.isBufferGeometry?m=h.morphAttributes&&h.morphAttributes.position&&0<h.morphAttributes.position.length:h&&h.isGeometry&&(m=h.morphTargets&&0<h.morphTargets.length)),b.isSkinnedMesh&&!1===c.skinning&&console.warn("THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:",b),b=b.isSkinnedMesh&&c.skinning,h=0,m&&(h|=1),b&&(h|=2),k=k[h]);a.localClippingEnabled&&!0===
+b.geometry;var k=p;var m=b.customDepthMaterial;d&&(k=u,m=b.customDistanceMaterial);m?k=m:(m=!1,c.morphTargets&&(h&&h.isBufferGeometry?m=h.morphAttributes&&h.morphAttributes.position&&0<h.morphAttributes.position.length:h&&h.isGeometry&&(m=h.morphTargets&&0<h.morphTargets.length)),b.isSkinnedMesh&&!1===c.skinning&&console.warn("THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:",b),b=b.isSkinnedMesh&&c.skinning,h=0,m&&(h|=1),b&&(h|=2),k=k[h]);a.localClippingEnabled&&!0===
 c.clipShadows&&0!==c.clippingPlanes.length&&(h=k.uuid,m=c.uuid,b=l[h],void 0===b&&(b={},l[h]=b),h=b[m],void 0===h&&(h=k.clone(),b[m]=h),k=h);k.visible=c.visible;k.wireframe=c.wireframe;k.side=null!=c.shadowSide?c.shadowSide:r[c.side];k.clipShadows=c.clipShadows;k.clippingPlanes=c.clippingPlanes;k.clipIntersection=c.clipIntersection;k.wireframeLinewidth=c.wireframeLinewidth;k.linewidth=c.linewidth;d&&k.isMeshDistanceMaterial&&(k.referencePosition.copy(e),k.nearDistance=f,k.farDistance=g);return k}
-function e(c,g,h,k){if(!1!==c.visible){if(c.layers.test(g.layers)&&(c.isMesh||c.isLine||c.isPoints)&&c.castShadow&&(!c.frustumCulled||f.intersectsObject(c))){c.modelViewMatrix.multiplyMatrices(h.matrixWorldInverse,c.matrixWorld);var m=b.update(c),p=c.material;if(Array.isArray(p))for(var v=m.groups,l=0,t=v.length;l<t;l++){var r=v[l],u=p[r.materialIndex];u&&u.visible&&(u=d(c,u,k,q,h.near,h.far),a.renderBufferDirect(h,null,m,u,c,r))}else p.visible&&(u=d(c,p,k,q,h.near,h.far),a.renderBufferDirect(h,null,
-m,u,c,null))}c=c.children;m=0;for(p=c.length;m<p;m++)e(c[m],g,h,k)}}var f=new Bd,g=new N,h=new B,k=new B(c,c),m=new n,q=new n,p=Array(4),v=Array(4),l={},r={0:1,1:0,2:2},u=[new n(1,0,0),new n(-1,0,0),new n(0,0,1),new n(0,0,-1),new n(0,1,0),new n(0,-1,0)],x=[new n(0,1,0),new n(0,1,0),new n(0,1,0),new n(0,1,0),new n(0,0,1),new n(0,0,-1)],z=[new ca,new ca,new ca,new ca,new ca,new ca];for(c=0;4!==c;++c){var y=0!==(c&1),w=0!==(c&2),D=new ib({depthPacking:3201,morphTargets:y,skinning:w});p[c]=D;y=new jb({morphTargets:y,
-skinning:w});v[c]=y}var F=this;this.enabled=!1;this.autoUpdate=!0;this.needsUpdate=!1;this.type=1;this.render=function(b,c,d){if(!1!==F.enabled&&(!1!==F.autoUpdate||!1!==F.needsUpdate)&&0!==b.length){var p=a.getRenderTarget(),v=a.state;v.setBlending(0);v.buffers.color.setClear(1,1,1,1);v.buffers.depth.setTest(!0);v.setScissorTest(!1);for(var l,t=0,r=b.length;t<r;t++){var n=b[t];l=n.shadow;var fa=n&&n.isPointLight;if(void 0===l)console.warn("THREE.WebGLShadowMap:",n,"has no shadow.");else{var R=l.camera;
+function e(c,g,h,k){if(!1!==c.visible){if(c.layers.test(g.layers)&&(c.isMesh||c.isLine||c.isPoints)&&c.castShadow&&(!c.frustumCulled||f.intersectsObject(c))){c.modelViewMatrix.multiplyMatrices(h.matrixWorldInverse,c.matrixWorld);var m=b.update(c),p=c.material;if(Array.isArray(p))for(var u=m.groups,l=0,t=u.length;l<t;l++){var r=u[l],v=p[r.materialIndex];v&&v.visible&&(v=d(c,v,k,q,h.near,h.far),a.renderBufferDirect(h,null,m,v,c,r))}else p.visible&&(v=d(c,p,k,q,h.near,h.far),a.renderBufferDirect(h,null,
+m,v,c,null))}c=c.children;m=0;for(p=c.length;m<p;m++)e(c[m],g,h,k)}}var f=new Bd,g=new N,h=new B,k=new B(c,c),m=new n,q=new n,p=Array(4),u=Array(4),l={},r={0:1,1:0,2:2},v=[new n(1,0,0),new n(-1,0,0),new n(0,0,1),new n(0,0,-1),new n(0,1,0),new n(0,-1,0)],x=[new n(0,1,0),new n(0,1,0),new n(0,1,0),new n(0,1,0),new n(0,0,1),new n(0,0,-1)],z=[new ca,new ca,new ca,new ca,new ca,new ca];for(c=0;4!==c;++c){var y=0!==(c&1),w=0!==(c&2),D=new ib({depthPacking:3201,morphTargets:y,skinning:w});p[c]=D;y=new jb({morphTargets:y,
+skinning:w});u[c]=y}var F=this;this.enabled=!1;this.autoUpdate=!0;this.needsUpdate=!1;this.type=1;this.render=function(b,c,d){if(!1!==F.enabled&&(!1!==F.autoUpdate||!1!==F.needsUpdate)&&0!==b.length){var p=a.getRenderTarget(),u=a.state;u.setBlending(0);u.buffers.color.setClear(1,1,1,1);u.buffers.depth.setTest(!0);u.setScissorTest(!1);for(var l,t=0,r=b.length;t<r;t++){var n=b[t];l=n.shadow;var fa=n&&n.isPointLight;if(void 0===l)console.warn("THREE.WebGLShadowMap:",n,"has no shadow.");else{var R=l.camera;
 h.copy(l.mapSize);h.min(k);if(fa){var w=h.x,y=h.y;z[0].set(2*w,y,w,y);z[1].set(0,y,w,y);z[2].set(3*w,y,w,y);z[3].set(w,y,w,y);z[4].set(3*w,0,w,y);z[5].set(w,0,w,y);h.x*=4;h.y*=2}null===l.map&&(l.map=new Sa(h.x,h.y,{minFilter:1003,magFilter:1003,format:1023}),l.map.texture.name=n.name+".shadowMap",R.updateProjectionMatrix());l.isSpotLightShadow&&l.update(n);w=l.map;y=l.matrix;q.setFromMatrixPosition(n.matrixWorld);R.position.copy(q);fa?(l=6,y.makeTranslation(-q.x,-q.y,-q.z)):(l=1,m.setFromMatrixPosition(n.target.matrixWorld),
-R.lookAt(m),R.updateMatrixWorld(),y.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),y.multiply(R.projectionMatrix),y.multiply(R.matrixWorldInverse));a.setRenderTarget(w);a.clear();for(n=0;n<l;n++)fa&&(m.copy(R.position),m.add(u[n]),R.up.copy(x[n]),R.lookAt(m),R.updateMatrixWorld(),v.viewport(z[n])),g.multiplyMatrices(R.projectionMatrix,R.matrixWorldInverse),f.setFromMatrix(g),e(c,d,R,fa)}}F.needsUpdate=!1;a.setRenderTarget(p)}}}function lh(a,b,c,d){function e(b,c,d){var e=new Uint8Array(4),f=a.createTexture();
-a.bindTexture(b,f);a.texParameteri(b,10241,9728);a.texParameteri(b,10240,9728);for(b=0;b<d;b++)a.texImage2D(c+b,0,6408,1,1,0,6408,5121,e);return f}function f(c,e){z[c]=1;0===y[c]&&(a.enableVertexAttribArray(c),y[c]=1);w[c]!==e&&((d.isWebGL2?a:b.get("ANGLE_instanced_arrays"))[d.isWebGL2?"vertexAttribDivisor":"vertexAttribDivisorANGLE"](c,e),w[c]=e)}function g(b){!0!==D[b]&&(a.enable(b),D[b]=!0)}function h(b){!1!==D[b]&&(a.disable(b),D[b]=!1)}function k(b,d,e,f,k,m,q,p){if(0===b)B&&(h(3042),B=!1);else if(B||
-(g(3042),B=!0),5!==b){if(b!==H||p!==fa){if(100!==gb||100!==Z)a.blendEquation(32774),Z=gb=100;if(p)switch(b){case 1:a.blendFuncSeparate(1,771,1,771);break;case 2:a.blendFunc(1,1);break;case 3:a.blendFuncSeparate(0,0,769,771);break;case 4:a.blendFuncSeparate(0,768,0,770);break;default:console.error("THREE.WebGLState: Invalid blending: ",b)}else switch(b){case 1:a.blendFuncSeparate(770,771,1,771);break;case 2:a.blendFunc(770,1);break;case 3:a.blendFunc(0,769);break;case 4:a.blendFunc(0,768);break;default:console.error("THREE.WebGLState: Invalid blending: ",
-b)}G=A=Ic=wb=null;H=b;fa=p}}else{k=k||d;m=m||e;q=q||f;if(d!==gb||k!==Z)a.blendEquationSeparate(c.convert(d),c.convert(k)),gb=d,Z=k;if(e!==wb||f!==Ic||m!==A||q!==G)a.blendFuncSeparate(c.convert(e),c.convert(f),c.convert(m),c.convert(q)),wb=e,Ic=f,A=m,G=q;H=b;fa=null}}function m(b){R!==b&&(b?a.frontFace(2304):a.frontFace(2305),R=b)}function q(b){0!==b?(g(2884),b!==ke&&(1===b?a.cullFace(1029):2===b?a.cullFace(1028):a.cullFace(1032))):h(2884);ke=b}function p(b,c,d){if(b){if(g(32823),$e!==c||tf!==d)a.polygonOffset(c,
-d),$e=c,tf=d}else h(32823)}function v(b){void 0===b&&(b=33984+E-1);C!==b&&(a.activeTexture(b),C=b)}var l=new function(){var b=!1,c=new ca,d=null,e=new ca(0,0,0,0);return{setMask:function(c){d===c||b||(a.colorMask(c,c,c,c),d=c)},setLocked:function(a){b=a},setClear:function(b,d,f,g,h){!0===h&&(b*=g,d*=g,f*=g);c.set(b,d,f,g);!1===e.equals(c)&&(a.clearColor(b,d,f,g),e.copy(c))},reset:function(){b=!1;d=null;e.set(-1,0,0,0)}}},r=new function(){var b=!1,c=null,d=null,e=null;return{setTest:function(a){a?
+R.lookAt(m),R.updateMatrixWorld(),y.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),y.multiply(R.projectionMatrix),y.multiply(R.matrixWorldInverse));a.setRenderTarget(w);a.clear();for(n=0;n<l;n++)fa&&(m.copy(R.position),m.add(v[n]),R.up.copy(x[n]),R.lookAt(m),R.updateMatrixWorld(),u.viewport(z[n])),g.multiplyMatrices(R.projectionMatrix,R.matrixWorldInverse),f.setFromMatrix(g),e(c,d,R,fa)}}F.needsUpdate=!1;a.setRenderTarget(p)}}}function lh(a,b,c,d){function e(b,c,d){var e=new Uint8Array(4),f=a.createTexture();
+a.bindTexture(b,f);a.texParameteri(b,10241,9728);a.texParameteri(b,10240,9728);for(b=0;b<d;b++)a.texImage2D(c+b,0,6408,1,1,0,6408,5121,e);return f}function f(c,e){z[c]=1;0===y[c]&&(a.enableVertexAttribArray(c),y[c]=1);w[c]!==e&&((d.isWebGL2?a:b.get("ANGLE_instanced_arrays"))[d.isWebGL2?"vertexAttribDivisor":"vertexAttribDivisorANGLE"](c,e),w[c]=e)}function g(b){!0!==D[b]&&(a.enable(b),D[b]=!0)}function h(b){!1!==D[b]&&(a.disable(b),D[b]=!1)}function k(b,d,e,f,k,m,p,q){if(0===b)B&&(h(3042),B=!1);else if(B||
+(g(3042),B=!0),5!==b){if(b!==H||q!==fa){if(100!==gb||100!==Z)a.blendEquation(32774),Z=gb=100;if(q)switch(b){case 1:a.blendFuncSeparate(1,771,1,771);break;case 2:a.blendFunc(1,1);break;case 3:a.blendFuncSeparate(0,0,769,771);break;case 4:a.blendFuncSeparate(0,768,0,770);break;default:console.error("THREE.WebGLState: Invalid blending: ",b)}else switch(b){case 1:a.blendFuncSeparate(770,771,1,771);break;case 2:a.blendFunc(770,1);break;case 3:a.blendFunc(0,769);break;case 4:a.blendFunc(0,768);break;default:console.error("THREE.WebGLState: Invalid blending: ",
+b)}G=A=Ic=wb=null;H=b;fa=q}}else{k=k||d;m=m||e;p=p||f;if(d!==gb||k!==Z)a.blendEquationSeparate(c.convert(d),c.convert(k)),gb=d,Z=k;if(e!==wb||f!==Ic||m!==A||p!==G)a.blendFuncSeparate(c.convert(e),c.convert(f),c.convert(m),c.convert(p)),wb=e,Ic=f,A=m,G=p;H=b;fa=null}}function m(b){R!==b&&(b?a.frontFace(2304):a.frontFace(2305),R=b)}function q(b){0!==b?(g(2884),b!==ke&&(1===b?a.cullFace(1029):2===b?a.cullFace(1028):a.cullFace(1032))):h(2884);ke=b}function p(b,c,d){if(b){if(g(32823),$e!==c||tf!==d)a.polygonOffset(c,
+d),$e=c,tf=d}else h(32823)}function u(b){void 0===b&&(b=33984+E-1);C!==b&&(a.activeTexture(b),C=b)}var l=new function(){var b=!1,c=new ca,d=null,e=new ca(0,0,0,0);return{setMask:function(c){d===c||b||(a.colorMask(c,c,c,c),d=c)},setLocked:function(a){b=a},setClear:function(b,d,f,g,h){!0===h&&(b*=g,d*=g,f*=g);c.set(b,d,f,g);!1===e.equals(c)&&(a.clearColor(b,d,f,g),e.copy(c))},reset:function(){b=!1;d=null;e.set(-1,0,0,0)}}},r=new function(){var b=!1,c=null,d=null,e=null;return{setTest:function(a){a?
 g(2929):h(2929)},setMask:function(d){c===d||b||(a.depthMask(d),c=d)},setFunc:function(b){if(d!==b){if(b)switch(b){case 0:a.depthFunc(512);break;case 1:a.depthFunc(519);break;case 2:a.depthFunc(513);break;case 3:a.depthFunc(515);break;case 4:a.depthFunc(514);break;case 5:a.depthFunc(518);break;case 6:a.depthFunc(516);break;case 7:a.depthFunc(517);break;default:a.depthFunc(515)}else a.depthFunc(515);d=b}},setLocked:function(a){b=a},setClear:function(b){e!==b&&(a.clearDepth(b),e=b)},reset:function(){b=
-!1;e=d=c=null}}},u=new function(){var b=!1,c=null,d=null,e=null,f=null,k=null,m=null,q=null,p=null;return{setTest:function(a){a?g(2960):h(2960)},setMask:function(d){c===d||b||(a.stencilMask(d),c=d)},setFunc:function(b,c,g){if(d!==b||e!==c||f!==g)a.stencilFunc(b,c,g),d=b,e=c,f=g},setOp:function(b,c,d){if(k!==b||m!==c||q!==d)a.stencilOp(b,c,d),k=b,m=c,q=d},setLocked:function(a){b=a},setClear:function(b){p!==b&&(a.clearStencil(b),p=b)},reset:function(){b=!1;p=q=m=k=f=e=d=c=null}}},n=a.getParameter(34921),
+!1;e=d=c=null}}},v=new function(){var b=!1,c=null,d=null,e=null,f=null,k=null,m=null,p=null,q=null;return{setTest:function(a){a?g(2960):h(2960)},setMask:function(d){c===d||b||(a.stencilMask(d),c=d)},setFunc:function(b,c,g){if(d!==b||e!==c||f!==g)a.stencilFunc(b,c,g),d=b,e=c,f=g},setOp:function(b,c,d){if(k!==b||m!==c||p!==d)a.stencilOp(b,c,d),k=b,m=c,p=d},setLocked:function(a){b=a},setClear:function(b){q!==b&&(a.clearStencil(b),q=b)},reset:function(){b=!1;q=p=m=k=f=e=d=c=null}}},n=a.getParameter(34921),
 z=new Uint8Array(n),y=new Uint8Array(n),w=new Uint8Array(n),D={},F=null,Aa=null,B=null,H=null,gb=null,wb=null,Ic=null,Z=null,A=null,G=null,fa=!1,R=null,ke=null,xb=null,$e=null,tf=null,E=a.getParameter(35661),K=!1;n=0;n=a.getParameter(7938);-1!==n.indexOf("WebGL")?(n=parseFloat(/^WebGL ([0-9])/.exec(n)[1]),K=1<=n):-1!==n.indexOf("OpenGL ES")&&(n=parseFloat(/^OpenGL ES ([0-9])/.exec(n)[1]),K=2<=n);var C=null,M={},N=new ca,Q=new ca,J={};J[3553]=e(3553,3553,1);J[34067]=e(34067,34069,6);l.setClear(0,0,
-0,1);r.setClear(1);u.setClear(0);g(2929);r.setFunc(3);m(!1);q(1);g(2884);k(0);return{buffers:{color:l,depth:r,stencil:u},initAttributes:function(){for(var a=0,b=z.length;a<b;a++)z[a]=0},enableAttribute:function(a){f(a,0)},enableAttributeAndDivisor:f,disableUnusedAttributes:function(){for(var b=0,c=y.length;b!==c;++b)y[b]!==z[b]&&(a.disableVertexAttribArray(b),y[b]=0)},enable:g,disable:h,getCompressedTextureFormats:function(){if(null===F&&(F=[],b.get("WEBGL_compressed_texture_pvrtc")||b.get("WEBGL_compressed_texture_s3tc")||
+0,1);r.setClear(1);v.setClear(0);g(2929);r.setFunc(3);m(!1);q(1);g(2884);k(0);return{buffers:{color:l,depth:r,stencil:v},initAttributes:function(){for(var a=0,b=z.length;a<b;a++)z[a]=0},enableAttribute:function(a){f(a,0)},enableAttributeAndDivisor:f,disableUnusedAttributes:function(){for(var b=0,c=y.length;b!==c;++b)y[b]!==z[b]&&(a.disableVertexAttribArray(b),y[b]=0)},enable:g,disable:h,getCompressedTextureFormats:function(){if(null===F&&(F=[],b.get("WEBGL_compressed_texture_pvrtc")||b.get("WEBGL_compressed_texture_s3tc")||
 b.get("WEBGL_compressed_texture_etc1")||b.get("WEBGL_compressed_texture_astc")))for(var c=a.getParameter(34467),d=0;d<c.length;d++)F.push(c[d]);return F},useProgram:function(b){return Aa!==b?(a.useProgram(b),Aa=b,!0):!1},setBlending:k,setMaterial:function(a,b){2===a.side?h(2884):g(2884);var c=1===a.side;b&&(c=!c);m(c);1===a.blending&&!1===a.transparent?k(0):k(a.blending,a.blendEquation,a.blendSrc,a.blendDst,a.blendEquationAlpha,a.blendSrcAlpha,a.blendDstAlpha,a.premultipliedAlpha);r.setFunc(a.depthFunc);
-r.setTest(a.depthTest);r.setMask(a.depthWrite);l.setMask(a.colorWrite);p(a.polygonOffset,a.polygonOffsetFactor,a.polygonOffsetUnits)},setFlipSided:m,setCullFace:q,setLineWidth:function(b){b!==xb&&(K&&a.lineWidth(b),xb=b)},setPolygonOffset:p,setScissorTest:function(a){a?g(3089):h(3089)},activeTexture:v,bindTexture:function(b,c){null===C&&v();var d=M[C];void 0===d&&(d={type:void 0,texture:void 0},M[C]=d);if(d.type!==b||d.texture!==c)a.bindTexture(b,c||J[b]),d.type=b,d.texture=c},compressedTexImage2D:function(){try{a.compressedTexImage2D.apply(a,
+r.setTest(a.depthTest);r.setMask(a.depthWrite);l.setMask(a.colorWrite);p(a.polygonOffset,a.polygonOffsetFactor,a.polygonOffsetUnits)},setFlipSided:m,setCullFace:q,setLineWidth:function(b){b!==xb&&(K&&a.lineWidth(b),xb=b)},setPolygonOffset:p,setScissorTest:function(a){a?g(3089):h(3089)},activeTexture:u,bindTexture:function(b,c){null===C&&u();var d=M[C];void 0===d&&(d={type:void 0,texture:void 0},M[C]=d);if(d.type!==b||d.texture!==c)a.bindTexture(b,c||J[b]),d.type=b,d.texture=c},compressedTexImage2D:function(){try{a.compressedTexImage2D.apply(a,
 arguments)}catch(X){console.error("THREE.WebGLState:",X)}},texImage2D:function(){try{a.texImage2D.apply(a,arguments)}catch(X){console.error("THREE.WebGLState:",X)}},texImage3D:function(){try{a.texImage3D.apply(a,arguments)}catch(X){console.error("THREE.WebGLState:",X)}},scissor:function(b){!1===N.equals(b)&&(a.scissor(b.x,b.y,b.z,b.w),N.copy(b))},viewport:function(b){!1===Q.equals(b)&&(a.viewport(b.x,b.y,b.z,b.w),Q.copy(b))},reset:function(){for(var b=0;b<y.length;b++)1===y[b]&&(a.disableVertexAttribArray(b),
-y[b]=0);D={};C=F=null;M={};ke=R=H=Aa=null;l.reset();r.reset();u.reset()}}}function mh(a,b,c,d,e,f,g){function h(a,b){return Ic?new OffscreenCanvas(a,b):document.createElementNS("http://www.w3.org/1999/xhtml","canvas")}function k(a,b,c,d){var e=1;if(a.width>d||a.height>d)e=d/Math.max(a.width,a.height);if(1>e||!0===b){if("undefined"!==typeof HTMLImageElement&&a instanceof HTMLImageElement||"undefined"!==typeof HTMLCanvasElement&&a instanceof HTMLCanvasElement||"undefined"!==typeof ImageBitmap&&a instanceof
+y[b]=0);D={};C=F=null;M={};ke=R=H=Aa=null;l.reset();r.reset();v.reset()}}}function mh(a,b,c,d,e,f,g){function h(a,b){return Ic?new OffscreenCanvas(a,b):document.createElementNS("http://www.w3.org/1999/xhtml","canvas")}function k(a,b,c,d){var e=1;if(a.width>d||a.height>d)e=d/Math.max(a.width,a.height);if(1>e||!0===b){if("undefined"!==typeof HTMLImageElement&&a instanceof HTMLImageElement||"undefined"!==typeof HTMLCanvasElement&&a instanceof HTMLCanvasElement||"undefined"!==typeof ImageBitmap&&a instanceof
 ImageBitmap)return d=b?P.floorPowerOfTwo:Math.floor,b=d(e*a.width),e=d(e*a.height),void 0===wb&&(wb=h(b,e)),c=c?h(b,e):wb,c.width=b,c.height=e,c.getContext("2d").drawImage(a,0,0,b,e),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+a.width+"x"+a.height+") to ("+b+"x"+e+")."),c;"data"in a&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+a.width+"x"+a.height+").")}return a}function m(a){return P.isPowerOfTwo(a.width)&&P.isPowerOfTwo(a.height)}function q(a,b){return a.generateMipmaps&&
-b&&1003!==a.minFilter&&1006!==a.minFilter}function p(b,c,e,f){a.generateMipmap(b);d.get(c).__maxMipLevel=Math.log(Math.max(e,f))*Math.LOG2E}function v(a,c){if(!e.isWebGL2)return a;var d=a;6403===a&&(5126===c&&(d=33326),5131===c&&(d=33325),5121===c&&(d=33321));6407===a&&(5126===c&&(d=34837),5131===c&&(d=34843),5121===c&&(d=32849));6408===a&&(5126===c&&(d=34836),5131===c&&(d=34842),5121===c&&(d=32856));33325===d||33326===d||34842===d||34836===d?b.get("EXT_color_buffer_float"):(34843===d||34837===d)&&
-console.warn("THREE.WebGLRenderer: Floating point textures with RGB format not supported. Please use RGBA instead.");return d}function l(a){return 1003===a||1004===a||1005===a?9728:9729}function r(b){b=b.target;b.removeEventListener("dispose",r);var c=d.get(b);void 0!==c.__webglInit&&(a.deleteTexture(c.__webglTexture),d.remove(b));b.isVideoTexture&&delete gb[b.id];g.memory.textures--}function u(b){b=b.target;b.removeEventListener("dispose",u);var c=d.get(b),e=d.get(b.texture);if(b){void 0!==e.__webglTexture&&
+b&&1003!==a.minFilter&&1006!==a.minFilter}function p(b,c,e,f){a.generateMipmap(b);d.get(c).__maxMipLevel=Math.log(Math.max(e,f))*Math.LOG2E}function u(a,c){if(!e.isWebGL2)return a;var d=a;6403===a&&(5126===c&&(d=33326),5131===c&&(d=33325),5121===c&&(d=33321));6407===a&&(5126===c&&(d=34837),5131===c&&(d=34843),5121===c&&(d=32849));6408===a&&(5126===c&&(d=34836),5131===c&&(d=34842),5121===c&&(d=32856));33325===d||33326===d||34842===d||34836===d?b.get("EXT_color_buffer_float"):(34843===d||34837===d)&&
+console.warn("THREE.WebGLRenderer: Floating point textures with RGB format not supported. Please use RGBA instead.");return d}function l(a){return 1003===a||1004===a||1005===a?9728:9729}function r(b){b=b.target;b.removeEventListener("dispose",r);var c=d.get(b);void 0!==c.__webglInit&&(a.deleteTexture(c.__webglTexture),d.remove(b));b.isVideoTexture&&delete gb[b.id];g.memory.textures--}function v(b){b=b.target;b.removeEventListener("dispose",v);var c=d.get(b),e=d.get(b.texture);if(b){void 0!==e.__webglTexture&&
 a.deleteTexture(e.__webglTexture);b.depthTexture&&b.depthTexture.dispose();if(b.isWebGLRenderTargetCube)for(e=0;6>e;e++)a.deleteFramebuffer(c.__webglFramebuffer[e]),c.__webglDepthbuffer&&a.deleteRenderbuffer(c.__webglDepthbuffer[e]);else a.deleteFramebuffer(c.__webglFramebuffer),c.__webglDepthbuffer&&a.deleteRenderbuffer(c.__webglDepthbuffer);d.remove(b.texture);d.remove(b)}g.memory.textures--}function n(a,b){var e=d.get(a);if(a.isVideoTexture){var f=a.id,h=g.render.frame;gb[f]!==h&&(gb[f]=h,a.update())}if(0<
 a.version&&e.__version!==a.version)if(f=a.image,void 0===f)console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined");else if(!1===f.complete)console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete");else{F(e,a,b);return}c.activeTexture(33984+b);c.bindTexture(3553,e.__webglTexture)}function z(b,g){var h=d.get(b);if(6===b.image.length)if(0<b.version&&h.__version!==b.version){D(h,b);c.activeTexture(33984+g);c.bindTexture(34067,h.__webglTexture);
-a.pixelStorei(37440,b.flipY);g=b&&b.isCompressedTexture;for(var l=b.image[0]&&b.image[0].isDataTexture,t=[],r=0;6>r;r++)t[r]=g||l?l?b.image[r].image:b.image[r]:k(b.image[r],!1,!0,e.maxCubemapSize);var u=t[0],n=m(u)||e.isWebGL2,x=f.convert(b.format),y=f.convert(b.type),F=v(x,y);w(34067,b,n);for(r=0;6>r;r++)if(g)for(var R,fa=t[r].mipmaps,z=0,H=fa.length;z<H;z++)R=fa[z],1023!==b.format&&1022!==b.format?-1<c.getCompressedTextureFormats().indexOf(x)?c.compressedTexImage2D(34069+r,z,F,R.width,R.height,
-0,R.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()"):c.texImage2D(34069+r,z,F,R.width,R.height,0,x,y,R.data);else l?c.texImage2D(34069+r,0,F,t[r].width,t[r].height,0,x,y,t[r].data):c.texImage2D(34069+r,0,F,x,y,t[r]);h.__maxMipLevel=g?fa.length-1:0;q(b,n)&&p(34067,b,u.width,u.height);h.__version=b.version;if(b.onUpdate)b.onUpdate(b)}else c.activeTexture(33984+g),c.bindTexture(34067,h.__webglTexture)}function y(a,b){c.activeTexture(33984+
+a.pixelStorei(37440,b.flipY);g=b&&b.isCompressedTexture;for(var l=b.image[0]&&b.image[0].isDataTexture,t=[],r=0;6>r;r++)t[r]=g||l?l?b.image[r].image:b.image[r]:k(b.image[r],!1,!0,e.maxCubemapSize);var v=t[0],n=m(v)||e.isWebGL2,x=f.convert(b.format),y=f.convert(b.type),F=u(x,y);w(34067,b,n);for(r=0;6>r;r++)if(g)for(var R,fa=t[r].mipmaps,z=0,H=fa.length;z<H;z++)R=fa[z],1023!==b.format&&1022!==b.format?-1<c.getCompressedTextureFormats().indexOf(x)?c.compressedTexImage2D(34069+r,z,F,R.width,R.height,
+0,R.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()"):c.texImage2D(34069+r,z,F,R.width,R.height,0,x,y,R.data);else l?c.texImage2D(34069+r,0,F,t[r].width,t[r].height,0,x,y,t[r].data):c.texImage2D(34069+r,0,F,x,y,t[r]);h.__maxMipLevel=g?fa.length-1:0;q(b,n)&&p(34067,b,v.width,v.height);h.__version=b.version;if(b.onUpdate)b.onUpdate(b)}else c.activeTexture(33984+g),c.bindTexture(34067,h.__webglTexture)}function y(a,b){c.activeTexture(33984+
 b);c.bindTexture(34067,d.get(a).__webglTexture)}function w(c,g,h){h?(a.texParameteri(c,10242,f.convert(g.wrapS)),a.texParameteri(c,10243,f.convert(g.wrapT)),32879!==c&&35866!==c||a.texParameteri(c,32882,f.convert(g.wrapR)),a.texParameteri(c,10240,f.convert(g.magFilter)),a.texParameteri(c,10241,f.convert(g.minFilter))):(a.texParameteri(c,10242,33071),a.texParameteri(c,10243,33071),32879!==c&&35866!==c||a.texParameteri(c,32882,33071),1001===g.wrapS&&1001===g.wrapT||console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping."),
 a.texParameteri(c,10240,l(g.magFilter)),a.texParameteri(c,10241,l(g.minFilter)),1003!==g.minFilter&&1006!==g.minFilter&&console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter."));!(h=b.get("EXT_texture_filter_anisotropic"))||1015===g.type&&null===b.get("OES_texture_float_linear")||1016===g.type&&null===(e.isWebGL2||b.get("OES_texture_half_float_linear"))||!(1<g.anisotropy||d.get(g).__currentAnisotropy)||(a.texParameterf(c,
 h.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(g.anisotropy,e.getMaxAnisotropy())),d.get(g).__currentAnisotropy=g.anisotropy)}function D(b,c){void 0===b.__webglInit&&(b.__webglInit=!0,c.addEventListener("dispose",r),b.__webglTexture=a.createTexture(),g.memory.textures++)}function F(b,d,g){var h=3553;d.isDataTexture2DArray&&(h=35866);d.isDataTexture3D&&(h=32879);D(b,d);c.activeTexture(33984+g);c.bindTexture(h,b.__webglTexture);a.pixelStorei(37440,d.flipY);a.pixelStorei(37441,d.premultiplyAlpha);a.pixelStorei(3317,
-d.unpackAlignment);g=e.isWebGL2?!1:1001!==d.wrapS||1001!==d.wrapT||1003!==d.minFilter&&1006!==d.minFilter;g=g&&!1===m(d.image);g=k(d.image,g,!1,e.maxTextureSize);var l=m(g)||e.isWebGL2,r=f.convert(d.format),t=f.convert(d.type),u=v(r,t);w(h,d,l);var n=d.mipmaps;if(d.isDepthTexture){u=6402;if(1015===d.type){if(!e.isWebGL2)throw Error("Float Depth Texture only supported in WebGL2.0");u=36012}else e.isWebGL2&&(u=33189);1026===d.format&&6402===u&&1012!==d.type&&1014!==d.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),
-d.type=1012,t=f.convert(d.type));1027===d.format&&(u=34041,1020!==d.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),d.type=1020,t=f.convert(d.type)));c.texImage2D(3553,0,u,g.width,g.height,0,r,t,null)}else if(d.isDataTexture)if(0<n.length&&l){for(var x=0,y=n.length;x<y;x++)h=n[x],c.texImage2D(3553,x,u,h.width,h.height,0,r,t,h.data);d.generateMipmaps=!1;b.__maxMipLevel=n.length-1}else c.texImage2D(3553,0,u,g.width,g.height,0,r,t,g.data),b.__maxMipLevel=
-0;else if(d.isCompressedTexture){x=0;for(y=n.length;x<y;x++)h=n[x],1023!==d.format&&1022!==d.format?-1<c.getCompressedTextureFormats().indexOf(r)?c.compressedTexImage2D(3553,x,u,h.width,h.height,0,h.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):c.texImage2D(3553,x,u,h.width,h.height,0,r,t,h.data);b.__maxMipLevel=n.length-1}else if(d.isDataTexture2DArray)c.texImage3D(35866,0,u,g.width,g.height,g.depth,0,r,t,g.data),b.__maxMipLevel=
-0;else if(d.isDataTexture3D)c.texImage3D(32879,0,u,g.width,g.height,g.depth,0,r,t,g.data),b.__maxMipLevel=0;else if(0<n.length&&l){x=0;for(y=n.length;x<y;x++)h=n[x],c.texImage2D(3553,x,u,r,t,h);d.generateMipmaps=!1;b.__maxMipLevel=n.length-1}else c.texImage2D(3553,0,u,r,t,g),b.__maxMipLevel=0;q(d,l)&&p(3553,d,g.width,g.height);b.__version=d.version;if(d.onUpdate)d.onUpdate(d)}function B(b,e,g,h){var k=f.convert(e.texture.format),m=f.convert(e.texture.type),q=v(k,m);c.texImage2D(h,0,q,e.width,e.height,
+d.unpackAlignment);g=e.isWebGL2?!1:1001!==d.wrapS||1001!==d.wrapT||1003!==d.minFilter&&1006!==d.minFilter;g=g&&!1===m(d.image);g=k(d.image,g,!1,e.maxTextureSize);var l=m(g)||e.isWebGL2,r=f.convert(d.format),t=f.convert(d.type),v=u(r,t);w(h,d,l);var n=d.mipmaps;if(d.isDepthTexture){v=6402;if(1015===d.type){if(!e.isWebGL2)throw Error("Float Depth Texture only supported in WebGL2.0");v=36012}else e.isWebGL2&&(v=33189);1026===d.format&&6402===v&&1012!==d.type&&1014!==d.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),
+d.type=1012,t=f.convert(d.type));1027===d.format&&(v=34041,1020!==d.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),d.type=1020,t=f.convert(d.type)));c.texImage2D(3553,0,v,g.width,g.height,0,r,t,null)}else if(d.isDataTexture)if(0<n.length&&l){for(var x=0,y=n.length;x<y;x++)h=n[x],c.texImage2D(3553,x,v,h.width,h.height,0,r,t,h.data);d.generateMipmaps=!1;b.__maxMipLevel=n.length-1}else c.texImage2D(3553,0,v,g.width,g.height,0,r,t,g.data),b.__maxMipLevel=
+0;else if(d.isCompressedTexture){x=0;for(y=n.length;x<y;x++)h=n[x],1023!==d.format&&1022!==d.format?-1<c.getCompressedTextureFormats().indexOf(r)?c.compressedTexImage2D(3553,x,v,h.width,h.height,0,h.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):c.texImage2D(3553,x,v,h.width,h.height,0,r,t,h.data);b.__maxMipLevel=n.length-1}else if(d.isDataTexture2DArray)c.texImage3D(35866,0,v,g.width,g.height,g.depth,0,r,t,g.data),b.__maxMipLevel=
+0;else if(d.isDataTexture3D)c.texImage3D(32879,0,v,g.width,g.height,g.depth,0,r,t,g.data),b.__maxMipLevel=0;else if(0<n.length&&l){x=0;for(y=n.length;x<y;x++)h=n[x],c.texImage2D(3553,x,v,r,t,h);d.generateMipmaps=!1;b.__maxMipLevel=n.length-1}else c.texImage2D(3553,0,v,r,t,g),b.__maxMipLevel=0;q(d,l)&&p(3553,d,g.width,g.height);b.__version=d.version;if(d.onUpdate)d.onUpdate(d)}function B(b,e,g,h){var k=f.convert(e.texture.format),m=f.convert(e.texture.type),p=u(k,m);c.texImage2D(h,0,p,e.width,e.height,
 0,k,m,null);a.bindFramebuffer(36160,b);a.framebufferTexture2D(36160,g,h,d.get(e.texture).__webglTexture,0);a.bindFramebuffer(36160,null)}function oa(b,c,d){a.bindRenderbuffer(36161,b);if(c.depthBuffer&&!c.stencilBuffer)d?(d=H(c),a.renderbufferStorageMultisample(36161,d,33189,c.width,c.height)):a.renderbufferStorage(36161,33189,c.width,c.height),a.framebufferRenderbuffer(36160,36096,36161,b);else if(c.depthBuffer&&c.stencilBuffer)d?(d=H(c),a.renderbufferStorageMultisample(36161,d,34041,c.width,c.height)):
-a.renderbufferStorage(36161,34041,c.width,c.height),a.framebufferRenderbuffer(36160,33306,36161,b);else{b=f.convert(c.texture.format);var e=f.convert(c.texture.type);b=v(b,e);d?(d=H(c),a.renderbufferStorageMultisample(36161,d,b,c.width,c.height)):a.renderbufferStorage(36161,b,c.width,c.height)}a.bindRenderbuffer(36161,null)}function H(a){return e.isWebGL2&&a.isWebGLMultisampleRenderTarget?Math.min(e.maxSamples,a.samples):0}var gb={},wb,Ic="undefined"!==typeof OffscreenCanvas,Z=0,A=!1,G=!1;this.allocateTextureUnit=
+a.renderbufferStorage(36161,34041,c.width,c.height),a.framebufferRenderbuffer(36160,33306,36161,b);else{b=f.convert(c.texture.format);var e=f.convert(c.texture.type);b=u(b,e);d?(d=H(c),a.renderbufferStorageMultisample(36161,d,b,c.width,c.height)):a.renderbufferStorage(36161,b,c.width,c.height)}a.bindRenderbuffer(36161,null)}function H(a){return e.isWebGL2&&a.isWebGLMultisampleRenderTarget?Math.min(e.maxSamples,a.samples):0}var gb={},wb,Ic="undefined"!==typeof OffscreenCanvas,Z=0,A=!1,G=!1;this.allocateTextureUnit=
 function(){var a=Z;a>=e.maxTextures&&console.warn("THREE.WebGLTextures: Trying to use "+a+" texture units while this GPU supports only "+e.maxTextures);Z+=1;return a};this.resetTextureUnits=function(){Z=0};this.setTexture2D=n;this.setTexture2DArray=function(a,b){var e=d.get(a);0<a.version&&e.__version!==a.version?F(e,a,b):(c.activeTexture(33984+b),c.bindTexture(35866,e.__webglTexture))};this.setTexture3D=function(a,b){var e=d.get(a);0<a.version&&e.__version!==a.version?F(e,a,b):(c.activeTexture(33984+
-b),c.bindTexture(32879,e.__webglTexture))};this.setTextureCube=z;this.setTextureCubeDynamic=y;this.setupRenderTarget=function(b){var h=d.get(b),k=d.get(b.texture);b.addEventListener("dispose",u);k.__webglTexture=a.createTexture();g.memory.textures++;var l=!0===b.isWebGLRenderTargetCube,r=!0===b.isWebGLMultisampleRenderTarget,t=m(b)||e.isWebGL2;if(l)for(h.__webglFramebuffer=[],r=0;6>r;r++)h.__webglFramebuffer[r]=a.createFramebuffer();else if(h.__webglFramebuffer=a.createFramebuffer(),r)if(e.isWebGL2){h.__webglMultisampledFramebuffer=
-a.createFramebuffer();h.__webglColorRenderbuffer=a.createRenderbuffer();a.bindRenderbuffer(36161,h.__webglColorRenderbuffer);r=f.convert(b.texture.format);var x=f.convert(b.texture.type);r=v(r,x);x=H(b);a.renderbufferStorageMultisample(36161,x,r,b.width,b.height);a.bindFramebuffer(36160,h.__webglMultisampledFramebuffer);a.framebufferRenderbuffer(36160,36064,36161,h.__webglColorRenderbuffer);a.bindRenderbuffer(36161,null);b.depthBuffer&&(h.__webglDepthRenderbuffer=a.createRenderbuffer(),oa(h.__webglDepthRenderbuffer,
+b),c.bindTexture(32879,e.__webglTexture))};this.setTextureCube=z;this.setTextureCubeDynamic=y;this.setupRenderTarget=function(b){var h=d.get(b),k=d.get(b.texture);b.addEventListener("dispose",v);k.__webglTexture=a.createTexture();g.memory.textures++;var l=!0===b.isWebGLRenderTargetCube,r=!0===b.isWebGLMultisampleRenderTarget,t=m(b)||e.isWebGL2;if(l)for(h.__webglFramebuffer=[],r=0;6>r;r++)h.__webglFramebuffer[r]=a.createFramebuffer();else if(h.__webglFramebuffer=a.createFramebuffer(),r)if(e.isWebGL2){h.__webglMultisampledFramebuffer=
+a.createFramebuffer();h.__webglColorRenderbuffer=a.createRenderbuffer();a.bindRenderbuffer(36161,h.__webglColorRenderbuffer);r=f.convert(b.texture.format);var x=f.convert(b.texture.type);r=u(r,x);x=H(b);a.renderbufferStorageMultisample(36161,x,r,b.width,b.height);a.bindFramebuffer(36160,h.__webglMultisampledFramebuffer);a.framebufferRenderbuffer(36160,36064,36161,h.__webglColorRenderbuffer);a.bindRenderbuffer(36161,null);b.depthBuffer&&(h.__webglDepthRenderbuffer=a.createRenderbuffer(),oa(h.__webglDepthRenderbuffer,
 b,!0));a.bindFramebuffer(36160,null)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.");if(l){c.bindTexture(34067,k.__webglTexture);w(34067,b.texture,t);for(r=0;6>r;r++)B(h.__webglFramebuffer[r],b,36064,34069+r);q(b.texture,t)&&p(34067,b.texture,b.width,b.height);c.bindTexture(34067,null)}else c.bindTexture(3553,k.__webglTexture),w(3553,b.texture,t),B(h.__webglFramebuffer,b,36064,3553),q(b.texture,t)&&p(3553,b.texture,b.width,b.height),c.bindTexture(3553,
 null);if(b.depthBuffer){h=d.get(b);k=!0===b.isWebGLRenderTargetCube;if(b.depthTexture){if(k)throw Error("target.depthTexture not supported in Cube render targets");if(b&&b.isWebGLRenderTargetCube)throw Error("Depth Texture with cube render targets is not supported");a.bindFramebuffer(36160,h.__webglFramebuffer);if(!b.depthTexture||!b.depthTexture.isDepthTexture)throw Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");d.get(b.depthTexture).__webglTexture&&b.depthTexture.image.width===
 b.width&&b.depthTexture.image.height===b.height||(b.depthTexture.image.width=b.width,b.depthTexture.image.height=b.height,b.depthTexture.needsUpdate=!0);n(b.depthTexture,0);h=d.get(b.depthTexture).__webglTexture;if(1026===b.depthTexture.format)a.framebufferTexture2D(36160,36096,3553,h,0);else if(1027===b.depthTexture.format)a.framebufferTexture2D(36160,33306,3553,h,0);else throw Error("Unknown depthTexture format");}else if(k)for(h.__webglDepthbuffer=[],k=0;6>k;k++)a.bindFramebuffer(36160,h.__webglFramebuffer[k]),
@@ -144,34 +144,34 @@ a&&(d=b.get("WEBGL_compressed_texture_etc1"),null!==d))return d.COMPRESSED_RGB_E
 d=b.get("WEBGL_depth_texture");if(null!==d)return d.UNSIGNED_INT_24_8_WEBGL}return 0}}}function Zb(){G.call(this);this.type="Group"}function Wa(){G.call(this);this.type="Camera";this.matrixWorldInverse=new N;this.projectionMatrix=new N;this.projectionMatrixInverse=new N}function W(a,b,c,d){Wa.call(this);this.type="PerspectiveCamera";this.fov=void 0!==a?a:50;this.zoom=1;this.near=void 0!==c?c:.1;this.far=void 0!==d?d:2E3;this.focus=10;this.aspect=void 0!==b?b:1;this.view=null;this.filmGauge=35;this.filmOffset=
 0;this.updateProjectionMatrix()}function Mc(a){W.call(this);this.cameras=a||[]}function vf(a,b,c){wf.setFromMatrixPosition(b.matrixWorld);xf.setFromMatrixPosition(c.matrixWorld);var d=wf.distanceTo(xf),e=b.projectionMatrix.elements,f=c.projectionMatrix.elements,g=e[14]/(e[10]-1);c=e[14]/(e[10]+1);var h=(e[9]+1)/e[5],k=(e[9]-1)/e[5],m=(e[8]-1)/e[0],q=(f[8]+1)/f[0];e=g*m;f=g*q;q=d/(-m+q);m=q*-m;b.matrixWorld.decompose(a.position,a.quaternion,a.scale);a.translateX(m);a.translateZ(q);a.matrixWorld.compose(a.position,
 a.quaternion,a.scale);a.matrixWorldInverse.getInverse(a.matrixWorld);b=g+q;g=c+q;a.projectionMatrix.makePerspective(e-m,f+(d-m),h*c/g*b,k*c/g*b,b,g)}function yf(a){function b(){return null!==h&&!0===h.isPresenting}function c(){if(b()){var c=h.getEyeParameters("left");e=2*c.renderWidth*l;f=c.renderHeight*l;Aa=a.getPixelRatio();a.getSize(F);a.setDrawingBufferSize(e,f,1);y.viewport.set(0,0,e/2,f);w.viewport.set(e/2,0,e/2,f);H.start()}else g.enabled&&a.setDrawingBufferSize(F.width,F.height,Aa),H.stop()}
-function d(a,b){null!==b&&4===b.length&&a.set(b[0]*e,b[1]*f,b[2]*e,b[3]*f)}var e,f,g=this,h=null,k=null,m=null,q=[],p=new N,v=new N,l=1,r="stage";"undefined"!==typeof window&&"VRFrameData"in window&&(k=new window.VRFrameData,window.addEventListener("vrdisplaypresentchange",c,!1));var u=new N,x=new na,z=new n,y=new W;y.viewport=new ca;y.layers.enable(1);var w=new W;w.viewport=new ca;w.layers.enable(2);var D=new Mc([y,w]);D.layers.enable(1);D.layers.enable(2);var F=new B,Aa,oa=[];this.enabled=!1;this.getController=
+function d(a,b){null!==b&&4===b.length&&a.set(b[0]*e,b[1]*f,b[2]*e,b[3]*f)}var e,f,g=this,h=null,k=null,m=null,q=[],p=new N,u=new N,l=1,r="stage";"undefined"!==typeof window&&"VRFrameData"in window&&(k=new window.VRFrameData,window.addEventListener("vrdisplaypresentchange",c,!1));var v=new N,x=new na,z=new n,y=new W;y.viewport=new ca;y.layers.enable(1);var w=new W;w.viewport=new ca;w.layers.enable(2);var D=new Mc([y,w]);D.layers.enable(1);D.layers.enable(2);var F=new B,Aa,oa=[];this.enabled=!1;this.getController=
 function(a){var b=q[a];void 0===b&&(b=new Zb,b.matrixAutoUpdate=!1,b.visible=!1,q[a]=b);return b};this.getDevice=function(){return h};this.setDevice=function(a){void 0!==a&&(h=a);H.setContext(a)};this.setFramebufferScaleFactor=function(a){l=a};this.setFrameOfReferenceType=function(a){r=a};this.setPoseTarget=function(a){void 0!==a&&(m=a)};this.getCamera=function(a){var c="stage"===r?1.6:0;if(!1===b())return a.position.set(0,c,0),a.rotation.set(0,0,0),a;h.depthNear=a.near;h.depthFar=a.far;h.getFrameData(k);
 if("stage"===r){var e=h.stageParameters;e?p.fromArray(e.sittingToStandingTransform):p.makeTranslation(0,c,0)}c=k.pose;e=null!==m?m:a;e.matrix.copy(p);e.matrix.decompose(e.position,e.quaternion,e.scale);null!==c.orientation&&(x.fromArray(c.orientation),e.quaternion.multiply(x));null!==c.position&&(x.setFromRotationMatrix(p),z.fromArray(c.position),z.applyQuaternion(x),e.position.add(z));e.updateMatrixWorld();y.near=a.near;w.near=a.near;y.far=a.far;w.far=a.far;y.matrixWorldInverse.fromArray(k.leftViewMatrix);
-w.matrixWorldInverse.fromArray(k.rightViewMatrix);v.getInverse(p);"stage"===r&&(y.matrixWorldInverse.multiply(v),w.matrixWorldInverse.multiply(v));a=e.parent;null!==a&&(u.getInverse(a.matrixWorld),y.matrixWorldInverse.multiply(u),w.matrixWorldInverse.multiply(u));y.matrixWorld.getInverse(y.matrixWorldInverse);w.matrixWorld.getInverse(w.matrixWorldInverse);y.projectionMatrix.fromArray(k.leftProjectionMatrix);w.projectionMatrix.fromArray(k.rightProjectionMatrix);vf(D,y,w);a=h.getLayers();a.length&&
+w.matrixWorldInverse.fromArray(k.rightViewMatrix);u.getInverse(p);"stage"===r&&(y.matrixWorldInverse.multiply(u),w.matrixWorldInverse.multiply(u));a=e.parent;null!==a&&(v.getInverse(a.matrixWorld),y.matrixWorldInverse.multiply(v),w.matrixWorldInverse.multiply(v));y.matrixWorld.getInverse(y.matrixWorldInverse);w.matrixWorld.getInverse(w.matrixWorldInverse);y.projectionMatrix.fromArray(k.leftProjectionMatrix);w.projectionMatrix.fromArray(k.rightProjectionMatrix);vf(D,y,w);a=h.getLayers();a.length&&
 (a=a[0],d(y.viewport,a.leftBounds),d(w.viewport,a.rightBounds));a:for(a=0;a<q.length;a++){c=q[a];b:{e=a;for(var f=navigator.getGamepads&&navigator.getGamepads(),g=0,l=0,t=f.length;g<t;g++){var n=f[g];if(n&&("Daydream Controller"===n.id||"Gear VR Controller"===n.id||"Oculus Go Controller"===n.id||"OpenVR Gamepad"===n.id||n.id.startsWith("Oculus Touch")||n.id.startsWith("Spatial Controller"))){if(l===e){e=n;break b}l++}}e=void 0}if(void 0!==e&&void 0!==e.pose){if(null===e.pose)break a;f=e.pose;!1===
 f.hasPosition&&c.position.set(.2,-.6,-.05);null!==f.position&&c.position.fromArray(f.position);null!==f.orientation&&c.quaternion.fromArray(f.orientation);c.matrix.compose(c.position,c.quaternion,c.scale);c.matrix.premultiply(p);c.matrix.decompose(c.position,c.quaternion,c.scale);c.matrixWorldNeedsUpdate=!0;c.visible=!0;f="Daydream Controller"===e.id?0:1;void 0===oa[a]&&(oa[a]=!1);oa[a]!==e.buttons[f].pressed&&(oa[a]=e.buttons[f].pressed,!0===oa[a]?c.dispatchEvent({type:"selectstart"}):(c.dispatchEvent({type:"selectend"}),
-c.dispatchEvent({type:"select"})))}else c.visible=!1}return D};this.getStandingMatrix=function(){return p};this.isPresenting=b;var H=new ie;this.setAnimationLoop=function(a){H.setAnimationLoop(a);b()&&H.start()};this.submitFrame=function(){b()&&h.submitFrame()};this.dispose=function(){"undefined"!==typeof window&&window.removeEventListener("vrdisplaypresentchange",c)}}function nh(a){function b(){return null!==k&&null!==m}function c(a){var b=p[l.indexOf(a.inputSource)];b&&b.dispatchEvent({type:a.type})}
-function d(){a.setFramebuffer(null);a.setRenderTarget(a.getRenderTarget());z.stop()}function e(a){m=a;z.setContext(k);z.start()}function f(a,b){null===b?a.matrixWorld.copy(a.matrix):a.matrixWorld.multiplyMatrices(b.matrixWorld,a.matrix);a.matrixWorldInverse.getInverse(a.matrixWorld)}var g=a.context,h=null,k=null,m=null,q=null,p=[],l=[],t=new W;t.layers.enable(1);t.viewport=new ca;var r=new W;r.layers.enable(2);r.viewport=new ca;var n=new Mc([t,r]);n.layers.enable(1);n.layers.enable(2);this.enabled=
-!1;this.getController=function(a){var b=p[a];void 0===b&&(b=new Zb,b.matrixAutoUpdate=!1,b.visible=!1,p[a]=b);return b};this.getDevice=function(){return h};this.setDevice=function(a){void 0!==a&&(h=a)};this.setFramebufferScaleFactor=function(a){};this.setFrameOfReferenceType=function(a){};this.setSession=function(a){k=a;null!==k&&(k.addEventListener("select",c),k.addEventListener("selectstart",c),k.addEventListener("selectend",c),k.addEventListener("end",d),k.updateRenderState({baseLayer:new XRWebGLLayer(k,
-g)}),k.requestReferenceSpace({type:"stationary",subtype:"eye-level"}).then(e),l=k.getInputSources(),k.addEventListener("inputsourceschange",function(){l=k.getInputSources();console.log(l);for(var a=0;a<p.length;a++)p[a].userData.inputSource=l[a]}))};this.getCamera=function(a){if(b()){var c=a.parent,d=n.cameras;f(n,c);for(var e=0;e<d.length;e++)f(d[e],c);a.matrixWorld.copy(n.matrixWorld);a=a.children;e=0;for(c=a.length;e<c;e++)a[e].updateMatrixWorld(!0);vf(n,t,r);return n}return a};this.isPresenting=
-b;var x=null,z=new ie;z.setAnimationLoop(function(b,c){q=c.getViewerPose(m);if(null!==q){var d=k.renderState.baseLayer,e=q.views;a.setFramebuffer(k.renderState.baseLayer.framebuffer);for(var f=0;f<e.length;f++){var g=e[f],h=d.getViewport(g),v=g.transform.inverse().matrix,r=n.cameras[f];r.matrix.fromArray(v).getInverse(r.matrix);r.projectionMatrix.fromArray(g.projectionMatrix);r.viewport.set(h.x,h.y,h.width,h.height);0===f&&n.matrix.copy(r.matrix)}}for(f=0;f<p.length;f++){d=p[f];if(e=l[f])if(e=c.getPose(e.targetRaySpace,
-m),null!==e){e=new XRRay(e.transform);d.matrix.elements=e.matrix;d.matrix.decompose(d.position,d.rotation,d.scale);d.visible=!0;continue}d.visible=!1}x&&x(b)});this.setAnimationLoop=function(a){x=a};this.dispose=function(){};this.getStandingMatrix=function(){console.warn("THREE.WebXRManager: getStandingMatrix() is no longer needed.");return new N};this.submitFrame=function(){}}function oe(a){var b;function c(){ia=new ig(L);Ba=new gg(L,ia,a);Ba.isWebGL2||(ia.get("WEBGL_depth_texture"),ia.get("OES_texture_float"),
+c.dispatchEvent({type:"select"})))}else c.visible=!1}return D};this.getStandingMatrix=function(){return p};this.isPresenting=b;var H=new ie;this.setAnimationLoop=function(a){H.setAnimationLoop(a);b()&&H.start()};this.submitFrame=function(){b()&&h.submitFrame()};this.dispose=function(){"undefined"!==typeof window&&window.removeEventListener("vrdisplaypresentchange",c)}}function nh(a){function b(){return null!==h&&null!==k}function c(a){for(var b=0;b<p.length;b++)l[b]===a.inputSource&&p[b].dispatchEvent({type:a.type})}
+function d(){a.setFramebuffer(null);a.setRenderTarget(a.getRenderTarget());z.stop()}function e(a){k=a;z.setContext(h);z.start()}function f(a,b){null===b?a.matrixWorld.copy(a.matrix):a.matrixWorld.multiplyMatrices(b.matrixWorld,a.matrix);a.matrixWorldInverse.getInverse(a.matrixWorld)}var g=a.context,h=null,k=null,m="local-floor",q=null,p=[],l=[],t=new W;t.layers.enable(1);t.viewport=new ca;var r=new W;r.layers.enable(2);r.viewport=new ca;var n=new Mc([t,r]);n.layers.enable(1);n.layers.enable(2);this.enabled=
+!1;this.getController=function(a){var b=p[a];void 0===b&&(b=new Zb,b.matrixAutoUpdate=!1,b.visible=!1,p[a]=b);return b};this.setFramebufferScaleFactor=function(a){};this.setReferenceSpaceType=function(a){m=a};this.setSession=function(a){h=a;null!==h&&(h.addEventListener("select",c),h.addEventListener("selectstart",c),h.addEventListener("selectend",c),h.addEventListener("end",d),h.updateRenderState({baseLayer:new XRWebGLLayer(h,g)}),h.requestReferenceSpace(m).then(e),l=h.inputSources,h.addEventListener("inputsourceschange",
+function(){l=h.inputSources;console.log(l);for(var a=0;a<p.length;a++)p[a].userData.inputSource=l[a]}))};this.getCamera=function(a){if(b()){var c=a.parent,d=n.cameras;f(n,c);for(var e=0;e<d.length;e++)f(d[e],c);a.matrixWorld.copy(n.matrixWorld);a=a.children;e=0;for(c=a.length;e<c;e++)a[e].updateMatrixWorld(!0);vf(n,t,r);return n}return a};this.isPresenting=b;var x=null,z=new ie;z.setAnimationLoop(function(b,c){q=c.getViewerPose(k);if(null!==q){var d=h.renderState.baseLayer,e=q.views;a.setFramebuffer(h.renderState.baseLayer.framebuffer);
+for(var f=0;f<e.length;f++){var g=e[f],m=d.getViewport(g),u=n.cameras[f];u.matrix.fromArray(g.transform.inverse.matrix).getInverse(u.matrix);u.projectionMatrix.fromArray(g.projectionMatrix);u.viewport.set(m.x,m.y,m.width,m.height);0===f&&n.matrix.copy(u.matrix)}}for(f=0;f<p.length;f++){d=p[f];if(e=l[f])if(e=c.getPose(e.targetRaySpace,k),null!==e){d.matrix.fromArray(e.transform.matrix);d.matrix.decompose(d.position,d.rotation,d.scale);d.visible=!0;continue}d.visible=!1}x&&x(b)});this.setAnimationLoop=
+function(a){x=a};this.dispose=function(){};this.getStandingMatrix=function(){console.warn("THREE.WebXRManager: getStandingMatrix() is no longer needed.");return new N};this.getDevice=function(){console.warn("THREE.WebXRManager: getDevice() has been deprecated.")};this.setDevice=function(){console.warn("THREE.WebXRManager: setDevice() has been deprecated.")};this.submitFrame=function(){}}function oe(a){var b;function c(){ia=new ig(L);Ba=new gg(L,ia,a);Ba.isWebGL2||(ia.get("WEBGL_depth_texture"),ia.get("OES_texture_float"),
 ia.get("OES_texture_half_float"),ia.get("OES_texture_half_float_linear"),ia.get("OES_standard_derivatives"),ia.get("OES_element_index_uint"),ia.get("ANGLE_instanced_arrays"));ia.get("OES_texture_float_linear");ea=new uf(L,ia,Ba);da=new lh(L,ia,ea,Ba);da.scissor(Y.copy(Yb).multiplyScalar(J));da.viewport(V.copy(X).multiplyScalar(J));lb=new lg(L);Ca=new dh;aa=new mh(L,ia,da,Ca,Ba,ea,lb);qa=new $f(L);sa=new jg(L,qa,lb);ja=new og(sa,lb);va=new ng(L);ka=new ch(Z,ia,Ba,aa);ta=new gh;ra=new kh;ma=new eg(Z,
 da,ja,Aa);wa=new fg(L,ia,lb,Ba);ya=new kg(L,ia,lb,Ba);lb.programs=ka.programs;Z.context=L;Z.capabilities=Ba;Z.extensions=ia;Z.properties=Ca;Z.renderLists=ta;Z.state=da;Z.info=lb}function d(a){a.preventDefault();console.log("THREE.WebGLRenderer: Context Lost.");M=!0}function e(){console.log("THREE.WebGLRenderer: Context Restored.");M=!1;c()}function f(a){a=a.target;a.removeEventListener("dispose",f);g(a);Ca.remove(a)}function g(a){var b=Ca.get(a).program;a.program=void 0;void 0!==b&&ka.releaseProgram(b)}
 function h(a,b){a.render(function(a){Z.renderBufferImmediate(a,b)})}function k(a,b,c,d){if(!1!==a.visible){if(a.layers.test(b.layers))if(a.isGroup)c=a.renderOrder;else if(a.isLight)C.pushLight(a),a.castShadow&&C.pushShadow(a);else if(a.isSprite){if(!a.frustumCulled||pa.intersectsSprite(a)){d&&kb.setFromMatrixPosition(a.matrixWorld).applyMatrix4(Lc);var e=ja.update(a),f=a.material;f.visible&&E.push(a,e,f,c,kb.z,null)}}else if(a.isImmediateRenderObject)d&&kb.setFromMatrixPosition(a.matrixWorld).applyMatrix4(Lc),
-E.push(a,null,a.material,c,kb.z,null);else if(a.isMesh||a.isLine||a.isPoints)if(a.isSkinnedMesh&&a.skeleton.update(),!a.frustumCulled||pa.intersectsObject(a))if(d&&kb.setFromMatrixPosition(a.matrixWorld).applyMatrix4(Lc),e=ja.update(a),f=a.material,Array.isArray(f))for(var g=e.groups,h=0,m=g.length;h<m;h++){var q=g[h],p=f[q.materialIndex];p&&p.visible&&E.push(a,e,p,c,kb.z,q)}else f.visible&&E.push(a,e,f,c,kb.z,null);a=a.children;h=0;for(m=a.length;h<m;h++)k(a[h],b,c,d)}}function m(a,b,c,d){for(var e=
-0,f=a.length;e<f;e++){var g=a[e],h=g.object,k=g.geometry,m=void 0===d?g.material:d;g=g.group;if(c.isArrayCamera){S=c;for(var p=c.cameras,l=0,v=p.length;l<v;l++){var r=p[l];h.layers.test(r.layers)&&(da.viewport(V.copy(r.viewport)),C.setupLights(r),q(h,b,r,k,m,g))}}else S=null,q(h,b,c,k,m,g)}}function q(a,c,d,e,f,g){a.onBeforeRender(Z,c,d,e,f,g);C=ra.get(c,S||d);a.modelViewMatrix.multiplyMatrices(d.matrixWorldInverse,a.matrixWorld);a.normalMatrix.getNormalMatrix(a.modelViewMatrix);if(a.isImmediateRenderObject){da.setMaterial(f);
-var k=l(d,c.fog,f,a);xb=b=null;I=!1;h(a,k)}else Z.renderBufferDirect(d,c.fog,e,f,a,g);a.onAfterRender(Z,c,d,e,f,g);C=ra.get(c,S||d)}function p(a,b,c){var d=Ca.get(a),e=C.state.lights,h=d.lightsHash,k=e.state.hash;c=ka.getParameters(a,e.state,C.state.shadowsArray,b,ba.numPlanes,ba.numIntersection,c);var m=ka.getProgramCode(a,c),q=d.program,p=!0;if(void 0===q)a.addEventListener("dispose",f);else if(q.code!==m)g(a);else{if(h.stateID!==k.stateID||h.directionalLength!==k.directionalLength||h.pointLength!==
-k.pointLength||h.spotLength!==k.spotLength||h.rectAreaLength!==k.rectAreaLength||h.hemiLength!==k.hemiLength||h.shadowsLength!==k.shadowsLength)h.stateID=k.stateID,h.directionalLength=k.directionalLength,h.pointLength=k.pointLength,h.spotLength=k.spotLength,h.rectAreaLength=k.rectAreaLength,h.hemiLength=k.hemiLength,h.shadowsLength=k.shadowsLength;else if(void 0!==c.shaderID)return;p=!1}p&&(c.shaderID?(m=Va[c.shaderID],d.shader={name:a.type,uniforms:Sb(m.uniforms),vertexShader:m.vertexShader,fragmentShader:m.fragmentShader}):
-d.shader={name:a.type,uniforms:a.uniforms,vertexShader:a.vertexShader,fragmentShader:a.fragmentShader},a.onBeforeCompile(d.shader,Z),m=ka.getProgramCode(a,c),q=ka.acquireProgram(a,d.shader,c,m),d.program=q,a.program=q);c=q.getAttributes();if(a.morphTargets)for(m=a.numSupportedMorphTargets=0;m<Z.maxMorphTargets;m++)0<=c["morphTarget"+m]&&a.numSupportedMorphTargets++;if(a.morphNormals)for(m=a.numSupportedMorphNormals=0;m<Z.maxMorphNormals;m++)0<=c["morphNormal"+m]&&a.numSupportedMorphNormals++;c=d.shader.uniforms;
+E.push(a,null,a.material,c,kb.z,null);else if(a.isMesh||a.isLine||a.isPoints)if(a.isSkinnedMesh&&a.skeleton.update(),!a.frustumCulled||pa.intersectsObject(a))if(d&&kb.setFromMatrixPosition(a.matrixWorld).applyMatrix4(Lc),e=ja.update(a),f=a.material,Array.isArray(f))for(var g=e.groups,h=0,m=g.length;h<m;h++){var p=g[h],q=f[p.materialIndex];q&&q.visible&&E.push(a,e,q,c,kb.z,p)}else f.visible&&E.push(a,e,f,c,kb.z,null);a=a.children;h=0;for(m=a.length;h<m;h++)k(a[h],b,c,d)}}function m(a,b,c,d){for(var e=
+0,f=a.length;e<f;e++){var g=a[e],h=g.object,k=g.geometry,m=void 0===d?g.material:d;g=g.group;if(c.isArrayCamera){S=c;for(var p=c.cameras,l=0,u=p.length;l<u;l++){var r=p[l];h.layers.test(r.layers)&&(da.viewport(V.copy(r.viewport)),C.setupLights(r),q(h,b,r,k,m,g))}}else S=null,q(h,b,c,k,m,g)}}function q(a,c,d,e,f,g){a.onBeforeRender(Z,c,d,e,f,g);C=ra.get(c,S||d);a.modelViewMatrix.multiplyMatrices(d.matrixWorldInverse,a.matrixWorld);a.normalMatrix.getNormalMatrix(a.modelViewMatrix);if(a.isImmediateRenderObject){da.setMaterial(f);
+var k=l(d,c.fog,f,a);xb=b=null;I=!1;h(a,k)}else Z.renderBufferDirect(d,c.fog,e,f,a,g);a.onAfterRender(Z,c,d,e,f,g);C=ra.get(c,S||d)}function p(a,b,c){var d=Ca.get(a),e=C.state.lights,h=d.lightsHash,k=e.state.hash;c=ka.getParameters(a,e.state,C.state.shadowsArray,b,ba.numPlanes,ba.numIntersection,c);var m=ka.getProgramCode(a,c),p=d.program,q=!0;if(void 0===p)a.addEventListener("dispose",f);else if(p.code!==m)g(a);else{if(h.stateID!==k.stateID||h.directionalLength!==k.directionalLength||h.pointLength!==
+k.pointLength||h.spotLength!==k.spotLength||h.rectAreaLength!==k.rectAreaLength||h.hemiLength!==k.hemiLength||h.shadowsLength!==k.shadowsLength)h.stateID=k.stateID,h.directionalLength=k.directionalLength,h.pointLength=k.pointLength,h.spotLength=k.spotLength,h.rectAreaLength=k.rectAreaLength,h.hemiLength=k.hemiLength,h.shadowsLength=k.shadowsLength;else if(void 0!==c.shaderID)return;q=!1}q&&(c.shaderID?(m=Va[c.shaderID],d.shader={name:a.type,uniforms:Sb(m.uniforms),vertexShader:m.vertexShader,fragmentShader:m.fragmentShader}):
+d.shader={name:a.type,uniforms:a.uniforms,vertexShader:a.vertexShader,fragmentShader:a.fragmentShader},a.onBeforeCompile(d.shader,Z),m=ka.getProgramCode(a,c),p=ka.acquireProgram(a,d.shader,c,m),d.program=p,a.program=p);c=p.getAttributes();if(a.morphTargets)for(m=a.numSupportedMorphTargets=0;m<Z.maxMorphTargets;m++)0<=c["morphTarget"+m]&&a.numSupportedMorphTargets++;if(a.morphNormals)for(m=a.numSupportedMorphNormals=0;m<Z.maxMorphNormals;m++)0<=c["morphNormal"+m]&&a.numSupportedMorphNormals++;c=d.shader.uniforms;
 if(!a.isShaderMaterial&&!a.isRawShaderMaterial||!0===a.clipping)d.numClippingPlanes=ba.numPlanes,d.numIntersection=ba.numIntersection,c.clippingPlanes=ba.uniform;d.fog=b;void 0===h&&(d.lightsHash=h={});h.stateID=k.stateID;h.directionalLength=k.directionalLength;h.pointLength=k.pointLength;h.spotLength=k.spotLength;h.rectAreaLength=k.rectAreaLength;h.hemiLength=k.hemiLength;h.shadowsLength=k.shadowsLength;a.lights&&(c.ambientLightColor.value=e.state.ambient,c.lightProbe.value=e.state.probe,c.directionalLights.value=
 e.state.directional,c.spotLights.value=e.state.spot,c.rectAreaLights.value=e.state.rectArea,c.pointLights.value=e.state.point,c.hemisphereLights.value=e.state.hemi,c.directionalShadowMap.value=e.state.directionalShadowMap,c.directionalShadowMatrix.value=e.state.directionalShadowMatrix,c.spotShadowMap.value=e.state.spotShadowMap,c.spotShadowMatrix.value=e.state.spotShadowMatrix,c.pointShadowMap.value=e.state.pointShadowMap,c.pointShadowMatrix.value=e.state.pointShadowMatrix);a=d.program.getUniforms();
 a=hb.seqWithValue(a.seq,c);d.uniformsList=a}function l(a,b,c,d){aa.resetTextureUnits();var e=Ca.get(c),f=e.lightsHash,g=C.state.lights.state.hash;ha&&(ne||a!==T)&&ba.setState(c.clippingPlanes,c.clipIntersection,c.clipShadows,a,e,a===T&&c.id===O);!1===c.needsUpdate&&(void 0===e.program?c.needsUpdate=!0:c.fog&&e.fog!==b?c.needsUpdate=!0:!c.lights||f.stateID===g.stateID&&f.directionalLength===g.directionalLength&&f.pointLength===g.pointLength&&f.spotLength===g.spotLength&&f.rectAreaLength===g.rectAreaLength&&
 f.hemiLength===g.hemiLength&&f.shadowsLength===g.shadowsLength?void 0===e.numClippingPlanes||e.numClippingPlanes===ba.numPlanes&&e.numIntersection===ba.numIntersection||(c.needsUpdate=!0):c.needsUpdate=!0);c.needsUpdate&&(p(c,b,d),c.needsUpdate=!1);var h=!1,k=!1,m=!1;f=e.program;g=f.getUniforms();var q=e.shader.uniforms;da.useProgram(f.program)&&(m=k=h=!0);c.id!==O&&(O=c.id,k=!0);if(h||T!==a){g.setValue(L,"projectionMatrix",a.projectionMatrix);Ba.logarithmicDepthBuffer&&g.setValue(L,"logDepthBufFC",
 2/(Math.log(a.far+1)/Math.LN2));T!==a&&(T=a,m=k=!0);if(c.isShaderMaterial||c.isMeshPhongMaterial||c.isMeshStandardMaterial||c.envMap)h=g.map.cameraPosition,void 0!==h&&h.setValue(L,kb.setFromMatrixPosition(a.matrixWorld));(c.isMeshPhongMaterial||c.isMeshLambertMaterial||c.isMeshBasicMaterial||c.isMeshStandardMaterial||c.isShaderMaterial||c.skinning)&&g.setValue(L,"viewMatrix",a.matrixWorldInverse)}if(c.skinning&&(g.setOptional(L,d,"bindMatrix"),g.setOptional(L,d,"bindMatrixInverse"),a=d.skeleton))if(h=
-a.bones,Ba.floatVertexTextures){if(void 0===a.boneTexture){h=Math.sqrt(4*h.length);h=P.ceilPowerOfTwo(h);h=Math.max(h,4);var l=new Float32Array(h*h*4);l.set(a.boneMatrices);var v=new rb(l,h,h,1023,1015);v.needsUpdate=!0;a.boneMatrices=l;a.boneTexture=v;a.boneTextureSize=h}g.setValue(L,"boneTexture",a.boneTexture,aa);g.setValue(L,"boneTextureSize",a.boneTextureSize)}else g.setOptional(L,a,"boneMatrices");k&&(g.setValue(L,"toneMappingExposure",Z.toneMappingExposure),g.setValue(L,"toneMappingWhitePoint",
+a.bones,Ba.floatVertexTextures){if(void 0===a.boneTexture){h=Math.sqrt(4*h.length);h=P.ceilPowerOfTwo(h);h=Math.max(h,4);var l=new Float32Array(h*h*4);l.set(a.boneMatrices);var u=new rb(l,h,h,1023,1015);u.needsUpdate=!0;a.boneMatrices=l;a.boneTexture=u;a.boneTextureSize=h}g.setValue(L,"boneTexture",a.boneTexture,aa);g.setValue(L,"boneTextureSize",a.boneTextureSize)}else g.setOptional(L,a,"boneMatrices");k&&(g.setValue(L,"toneMappingExposure",Z.toneMappingExposure),g.setValue(L,"toneMappingWhitePoint",
 Z.toneMappingWhitePoint),c.lights&&(k=m,q.ambientLightColor.needsUpdate=k,q.lightProbe.needsUpdate=k,q.directionalLights.needsUpdate=k,q.pointLights.needsUpdate=k,q.spotLights.needsUpdate=k,q.rectAreaLights.needsUpdate=k,q.hemisphereLights.needsUpdate=k),b&&c.fog&&(q.fogColor.value.copy(b.color),b.isFog?(q.fogNear.value=b.near,q.fogFar.value=b.far):b.isFogExp2&&(q.fogDensity.value=b.density)),c.isMeshBasicMaterial?t(q,c):c.isMeshLambertMaterial?(t(q,c),c.emissiveMap&&(q.emissiveMap.value=c.emissiveMap)):
-c.isMeshPhongMaterial?(t(q,c),c.isMeshToonMaterial?(r(q,c),c.gradientMap&&(q.gradientMap.value=c.gradientMap)):r(q,c)):c.isMeshStandardMaterial?(t(q,c),c.isMeshPhysicalMaterial?(u(q,c),q.reflectivity.value=c.reflectivity,q.clearCoat.value=c.clearCoat,q.clearCoatRoughness.value=c.clearCoatRoughness):u(q,c)):c.isMeshMatcapMaterial?(t(q,c),c.matcap&&(q.matcap.value=c.matcap),c.bumpMap&&(q.bumpMap.value=c.bumpMap,q.bumpScale.value=c.bumpScale,1===c.side&&(q.bumpScale.value*=-1)),c.normalMap&&(q.normalMap.value=
+c.isMeshPhongMaterial?(t(q,c),c.isMeshToonMaterial?(r(q,c),c.gradientMap&&(q.gradientMap.value=c.gradientMap)):r(q,c)):c.isMeshStandardMaterial?(t(q,c),c.isMeshPhysicalMaterial?(v(q,c),q.reflectivity.value=c.reflectivity,q.clearCoat.value=c.clearCoat,q.clearCoatRoughness.value=c.clearCoatRoughness):v(q,c)):c.isMeshMatcapMaterial?(t(q,c),c.matcap&&(q.matcap.value=c.matcap),c.bumpMap&&(q.bumpMap.value=c.bumpMap,q.bumpScale.value=c.bumpScale,1===c.side&&(q.bumpScale.value*=-1)),c.normalMap&&(q.normalMap.value=
 c.normalMap,q.normalScale.value.copy(c.normalScale),1===c.side&&q.normalScale.value.negate()),c.displacementMap&&(q.displacementMap.value=c.displacementMap,q.displacementScale.value=c.displacementScale,q.displacementBias.value=c.displacementBias)):c.isMeshDepthMaterial?(t(q,c),c.displacementMap&&(q.displacementMap.value=c.displacementMap,q.displacementScale.value=c.displacementScale,q.displacementBias.value=c.displacementBias)):c.isMeshDistanceMaterial?(t(q,c),c.displacementMap&&(q.displacementMap.value=
 c.displacementMap,q.displacementScale.value=c.displacementScale,q.displacementBias.value=c.displacementBias),q.referencePosition.value.copy(c.referencePosition),q.nearDistance.value=c.nearDistance,q.farDistance.value=c.farDistance):c.isMeshNormalMaterial?(t(q,c),c.bumpMap&&(q.bumpMap.value=c.bumpMap,q.bumpScale.value=c.bumpScale,1===c.side&&(q.bumpScale.value*=-1)),c.normalMap&&(q.normalMap.value=c.normalMap,q.normalScale.value.copy(c.normalScale),1===c.side&&q.normalScale.value.negate()),c.displacementMap&&
 (q.displacementMap.value=c.displacementMap,q.displacementScale.value=c.displacementScale,q.displacementBias.value=c.displacementBias)):c.isLineBasicMaterial?(q.diffuse.value.copy(c.color),q.opacity.value=c.opacity,c.isLineDashedMaterial&&(q.dashSize.value=c.dashSize,q.totalSize.value=c.dashSize+c.gapSize,q.scale.value=c.scale)):c.isPointsMaterial?(q.diffuse.value.copy(c.color),q.opacity.value=c.opacity,q.size.value=c.size*J,q.scale.value=.5*W,q.map.value=c.map,null!==c.map&&(!0===c.map.matrixAutoUpdate&&
@@ -179,13 +179,13 @@ c.map.updateMatrix(),q.uvTransform.value.copy(c.map.matrix))):c.isSpriteMaterial
 !0===c.uniformsNeedUpdate&&(hb.upload(L,e.uniformsList,q,aa),c.uniformsNeedUpdate=!1);c.isSpriteMaterial&&g.setValue(L,"center",d.center);g.setValue(L,"modelViewMatrix",d.modelViewMatrix);g.setValue(L,"normalMatrix",d.normalMatrix);g.setValue(L,"modelMatrix",d.matrixWorld);return f}function t(a,b){a.opacity.value=b.opacity;b.color&&a.diffuse.value.copy(b.color);b.emissive&&a.emissive.value.copy(b.emissive).multiplyScalar(b.emissiveIntensity);b.map&&(a.map.value=b.map);b.alphaMap&&(a.alphaMap.value=
 b.alphaMap);b.specularMap&&(a.specularMap.value=b.specularMap);b.envMap&&(a.envMap.value=b.envMap,a.flipEnvMap.value=b.envMap.isCubeTexture?-1:1,a.reflectivity.value=b.reflectivity,a.refractionRatio.value=b.refractionRatio,a.maxMipLevel.value=Ca.get(b.envMap).__maxMipLevel);b.lightMap&&(a.lightMap.value=b.lightMap,a.lightMapIntensity.value=b.lightMapIntensity);b.aoMap&&(a.aoMap.value=b.aoMap,a.aoMapIntensity.value=b.aoMapIntensity);if(b.map)var c=b.map;else b.specularMap?c=b.specularMap:b.displacementMap?
 c=b.displacementMap:b.normalMap?c=b.normalMap:b.bumpMap?c=b.bumpMap:b.roughnessMap?c=b.roughnessMap:b.metalnessMap?c=b.metalnessMap:b.alphaMap?c=b.alphaMap:b.emissiveMap&&(c=b.emissiveMap);void 0!==c&&(c.isWebGLRenderTarget&&(c=c.texture),!0===c.matrixAutoUpdate&&c.updateMatrix(),a.uvTransform.value.copy(c.matrix))}function r(a,b){a.specular.value.copy(b.specular);a.shininess.value=Math.max(b.shininess,1E-4);b.emissiveMap&&(a.emissiveMap.value=b.emissiveMap);b.bumpMap&&(a.bumpMap.value=b.bumpMap,
-a.bumpScale.value=b.bumpScale,1===b.side&&(a.bumpScale.value*=-1));b.normalMap&&(a.normalMap.value=b.normalMap,a.normalScale.value.copy(b.normalScale),1===b.side&&a.normalScale.value.negate());b.displacementMap&&(a.displacementMap.value=b.displacementMap,a.displacementScale.value=b.displacementScale,a.displacementBias.value=b.displacementBias)}function u(a,b){a.roughness.value=b.roughness;a.metalness.value=b.metalness;b.roughnessMap&&(a.roughnessMap.value=b.roughnessMap);b.metalnessMap&&(a.metalnessMap.value=
+a.bumpScale.value=b.bumpScale,1===b.side&&(a.bumpScale.value*=-1));b.normalMap&&(a.normalMap.value=b.normalMap,a.normalScale.value.copy(b.normalScale),1===b.side&&a.normalScale.value.negate());b.displacementMap&&(a.displacementMap.value=b.displacementMap,a.displacementScale.value=b.displacementScale,a.displacementBias.value=b.displacementBias)}function v(a,b){a.roughness.value=b.roughness;a.metalness.value=b.metalness;b.roughnessMap&&(a.roughnessMap.value=b.roughnessMap);b.metalnessMap&&(a.metalnessMap.value=
 b.metalnessMap);b.emissiveMap&&(a.emissiveMap.value=b.emissiveMap);b.bumpMap&&(a.bumpMap.value=b.bumpMap,a.bumpScale.value=b.bumpScale,1===b.side&&(a.bumpScale.value*=-1));b.normalMap&&(a.normalMap.value=b.normalMap,a.normalScale.value.copy(b.normalScale),1===b.side&&a.normalScale.value.negate());b.displacementMap&&(a.displacementMap.value=b.displacementMap,a.displacementScale.value=b.displacementScale,a.displacementBias.value=b.displacementBias);b.envMap&&(a.envMapIntensity.value=b.envMapIntensity)}
 console.log("THREE.WebGLRenderer","105dev");a=a||{};var x=void 0!==a.canvas?a.canvas:document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),z=void 0!==a.context?a.context:null,y=void 0!==a.alpha?a.alpha:!1,w=void 0!==a.depth?a.depth:!0,D=void 0!==a.stencil?a.stencil:!0,F=void 0!==a.antialias?a.antialias:!1,Aa=void 0!==a.premultipliedAlpha?a.premultipliedAlpha:!0,A=void 0!==a.preserveDrawingBuffer?a.preserveDrawingBuffer:!1,H=void 0!==a.powerPreference?a.powerPreference:"default",G=void 0!==
 a.failIfMajorPerformanceCaveat?a.failIfMajorPerformanceCaveat:!1,E=null,C=null;this.domElement=x;this.context=null;this.debug={checkShaderErrors:!0};this.sortObjects=this.autoClearStencil=this.autoClearDepth=this.autoClearColor=this.autoClear=!0;this.clippingPlanes=[];this.localClippingEnabled=!1;this.gammaFactor=2;this.physicallyCorrectLights=this.gammaOutput=this.gammaInput=!1;this.toneMappingWhitePoint=this.toneMappingExposure=this.toneMapping=1;this.maxMorphTargets=8;this.maxMorphNormals=4;var Z=
 this,M=!1,Q=null,fa=null,R=null,O=-1;var xb=b=null;var I=!1;var T=null,S=null,V=new ca,Y=new ca,U=null,Ab=x.width,W=x.height,J=1,X=new ca(0,0,Ab,W),Yb=new ca(0,0,Ab,W),na=!1,pa=new Bd,ba=new hg,ha=!1,ne=!1,Lc=new N,kb=new n;try{y={alpha:y,depth:w,stencil:D,antialias:F,premultipliedAlpha:Aa,preserveDrawingBuffer:A,powerPreference:H,failIfMajorPerformanceCaveat:G,xrCompatible:!0};x.addEventListener("webglcontextlost",d,!1);x.addEventListener("webglcontextrestored",e,!1);var L=z||x.getContext("webgl",
 y)||x.getContext("experimental-webgl",y);if(null===L){if(null!==x.getContext("webgl"))throw Error("Error creating WebGL context with your selected attributes.");throw Error("Error creating WebGL context.");}void 0===L.getShaderPrecisionFormat&&(L.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}})}catch(zf){throw console.error("THREE.WebGLRenderer: "+zf.message),zf;}var ia,Ba,da,lb,Ca,aa,qa,sa,ja,ka,ta,ra,ma,va,wa,ya,ea;c();var la="undefined"!==typeof navigator&&"xr"in
-navigator&&"requestDevice"in navigator.xr?new nh(Z):new yf(Z);this.vr=la;var za=new sf(Z,ja,Ba.maxTextureSize);this.shadowMap=za;this.getContext=function(){return L};this.getContextAttributes=function(){return L.getContextAttributes()};this.forceContextLoss=function(){var a=ia.get("WEBGL_lose_context");a&&a.loseContext()};this.forceContextRestore=function(){var a=ia.get("WEBGL_lose_context");a&&a.restoreContext()};this.getPixelRatio=function(){return J};this.setPixelRatio=function(a){void 0!==a&&
+navigator&&"supportsSession"in navigator.xr?new nh(Z):new yf(Z);this.vr=la;var za=new sf(Z,ja,Ba.maxTextureSize);this.shadowMap=za;this.getContext=function(){return L};this.getContextAttributes=function(){return L.getContextAttributes()};this.forceContextLoss=function(){var a=ia.get("WEBGL_lose_context");a&&a.loseContext()};this.forceContextRestore=function(){var a=ia.get("WEBGL_lose_context");a&&a.restoreContext()};this.getPixelRatio=function(){return J};this.setPixelRatio=function(a){void 0!==a&&
 (J=a,this.setSize(Ab,W,!1))};this.getSize=function(a){void 0===a&&(console.warn("WebGLRenderer: .getsize() now requires a Vector2 as an argument"),a=new B);return a.set(Ab,W)};this.setSize=function(a,b,c){la.isPresenting()?console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting."):(Ab=a,W=b,x.width=a*J,x.height=b*J,!1!==c&&(x.style.width=a+"px",x.style.height=b+"px"),this.setViewport(0,0,a,b))};this.getDrawingBufferSize=function(a){void 0===a&&(console.warn("WebGLRenderer: .getdrawingBufferSize() now requires a Vector2 as an argument"),
 a=new B);return a.set(Ab*J,W*J)};this.setDrawingBufferSize=function(a,b,c){Ab=a;W=b;J=c;x.width=a*c;x.height=b*c;this.setViewport(0,0,a,b)};this.getCurrentViewport=function(a){void 0===a&&(console.warn("WebGLRenderer: .getCurrentViewport() now requires a Vector4 as an argument"),a=new ca);return a.copy(V)};this.getViewport=function(a){return a.copy(X)};this.setViewport=function(a,b,c,d){a.isVector4?X.set(a.x,a.y,a.z,a.w):X.set(a,b,c,d);da.viewport(V.copy(X).multiplyScalar(J))};this.getScissor=function(a){return a.copy(Yb)};
 this.setScissor=function(a,b,c,d){a.isVector4?Yb.set(a.x,a.y,a.z,a.w):Yb.set(a,b,c,d);da.scissor(Y.copy(Yb).multiplyScalar(J))};this.getScissorTest=function(){return na};this.setScissorTest=function(a){da.setScissorTest(na=a)};this.getClearColor=function(){return ma.getClearColor()};this.setClearColor=function(){ma.setClearColor.apply(ma,arguments)};this.getClearAlpha=function(){return ma.getClearAlpha()};this.setClearAlpha=function(){ma.setClearAlpha.apply(ma,arguments)};this.clear=function(a,b,
@@ -193,8 +193,8 @@ c){var d=0;if(void 0===a||a)d|=16384;if(void 0===b||b)d|=256;if(void 0===c||c)d|
 var c=Ca.get(a);a.hasPositions&&!c.position&&(c.position=L.createBuffer());a.hasNormals&&!c.normal&&(c.normal=L.createBuffer());a.hasUvs&&!c.uv&&(c.uv=L.createBuffer());a.hasColors&&!c.color&&(c.color=L.createBuffer());b=b.getAttributes();a.hasPositions&&(L.bindBuffer(34962,c.position),L.bufferData(34962,a.positionArray,35048),da.enableAttribute(b.position),L.vertexAttribPointer(b.position,3,5126,!1,0,0));a.hasNormals&&(L.bindBuffer(34962,c.normal),L.bufferData(34962,a.normalArray,35048),da.enableAttribute(b.normal),
 L.vertexAttribPointer(b.normal,3,5126,!1,0,0));a.hasUvs&&(L.bindBuffer(34962,c.uv),L.bufferData(34962,a.uvArray,35048),da.enableAttribute(b.uv),L.vertexAttribPointer(b.uv,2,5126,!1,0,0));a.hasColors&&(L.bindBuffer(34962,c.color),L.bufferData(34962,a.colorArray,35048),da.enableAttribute(b.color),L.vertexAttribPointer(b.color,3,5126,!1,0,0));da.disableUnusedAttributes();L.drawArrays(4,0,a.count);a.count=0};this.renderBufferDirect=function(a,c,d,e,f,g){var h=f.isMesh&&0>f.matrixWorld.determinant();da.setMaterial(e,
 h);var k=l(a,c,e,f),m=!1;if(b!==d.id||xb!==k.id||I!==(!0===e.wireframe))b=d.id,xb=k.id,I=!0===e.wireframe,m=!0;f.morphTargetInfluences&&(va.update(f,d,e,k),m=!0);h=d.index;var q=d.attributes.position;c=1;!0===e.wireframe&&(h=sa.getWireframeAttribute(d),c=2);a=wa;if(null!==h){var p=qa.get(h);a=ya;a.setIndex(p)}if(m){if(d&&d.isInstancedBufferGeometry&&!Ba.isWebGL2&&null===ia.get("ANGLE_instanced_arrays"))console.error("THREE.WebGLRenderer.setupVertexAttributes: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");
-else{da.initAttributes();m=d.attributes;k=k.getAttributes();var v=e.defaultAttributeValues;for(D in k){var r=k[D];if(0<=r){var t=m[D];if(void 0!==t){var n=t.normalized,u=t.itemSize,x=qa.get(t);if(void 0!==x){var w=x.buffer,y=x.type;x=x.bytesPerElement;if(t.isInterleavedBufferAttribute){var F=t.data,z=F.stride;t=t.offset;F&&F.isInstancedInterleavedBuffer?(da.enableAttributeAndDivisor(r,F.meshPerAttribute),void 0===d.maxInstancedCount&&(d.maxInstancedCount=F.meshPerAttribute*F.count)):da.enableAttribute(r);
-L.bindBuffer(34962,w);L.vertexAttribPointer(r,u,y,n,z*x,t*x)}else t.isInstancedBufferAttribute?(da.enableAttributeAndDivisor(r,t.meshPerAttribute),void 0===d.maxInstancedCount&&(d.maxInstancedCount=t.meshPerAttribute*t.count)):da.enableAttribute(r),L.bindBuffer(34962,w),L.vertexAttribPointer(r,u,y,n,0,0)}}else if(void 0!==v&&(n=v[D],void 0!==n))switch(n.length){case 2:L.vertexAttrib2fv(r,n);break;case 3:L.vertexAttrib3fv(r,n);break;case 4:L.vertexAttrib4fv(r,n);break;default:L.vertexAttrib1fv(r,n)}}}da.disableUnusedAttributes()}null!==
+else{da.initAttributes();m=d.attributes;k=k.getAttributes();var u=e.defaultAttributeValues;for(D in k){var r=k[D];if(0<=r){var t=m[D];if(void 0!==t){var n=t.normalized,v=t.itemSize,x=qa.get(t);if(void 0!==x){var w=x.buffer,y=x.type;x=x.bytesPerElement;if(t.isInterleavedBufferAttribute){var F=t.data,z=F.stride;t=t.offset;F&&F.isInstancedInterleavedBuffer?(da.enableAttributeAndDivisor(r,F.meshPerAttribute),void 0===d.maxInstancedCount&&(d.maxInstancedCount=F.meshPerAttribute*F.count)):da.enableAttribute(r);
+L.bindBuffer(34962,w);L.vertexAttribPointer(r,v,y,n,z*x,t*x)}else t.isInstancedBufferAttribute?(da.enableAttributeAndDivisor(r,t.meshPerAttribute),void 0===d.maxInstancedCount&&(d.maxInstancedCount=t.meshPerAttribute*t.count)):da.enableAttribute(r),L.bindBuffer(34962,w),L.vertexAttribPointer(r,v,y,n,0,0)}}else if(void 0!==u&&(n=u[D],void 0!==n))switch(n.length){case 2:L.vertexAttrib2fv(r,n);break;case 3:L.vertexAttrib3fv(r,n);break;case 4:L.vertexAttrib4fv(r,n);break;default:L.vertexAttrib1fv(r,n)}}}da.disableUnusedAttributes()}null!==
 h&&L.bindBuffer(34963,p.buffer)}p=Infinity;null!==h?p=h.count:void 0!==q&&(p=q.count);h=d.drawRange.start*c;q=null!==g?g.start*c:0;var D=Math.max(h,q);g=Math.max(0,Math.min(p,h+d.drawRange.count*c,q+(null!==g?g.count*c:Infinity))-1-D+1);if(0!==g){if(f.isMesh)if(!0===e.wireframe)da.setLineWidth(e.wireframeLinewidth*(null===fa?J:1)),a.setMode(1);else switch(f.drawMode){case 0:a.setMode(4);break;case 1:a.setMode(5);break;case 2:a.setMode(6)}else f.isLine?(e=e.linewidth,void 0===e&&(e=1),da.setLineWidth(e*
 (null===fa?J:1)),f.isLineSegments?a.setMode(1):f.isLineLoop?a.setMode(2):a.setMode(3)):f.isPoints?a.setMode(0):f.isSprite&&a.setMode(4);d&&d.isInstancedBufferGeometry?0<d.maxInstancedCount&&a.renderInstances(d,D,g):a.render(D,g)}};this.compile=function(a,b){C=ra.get(a,b);C.init();a.traverse(function(a){a.isLight&&(C.pushLight(a),a.castShadow&&C.pushShadow(a))});C.setupLights(b);a.traverse(function(b){if(b.material)if(Array.isArray(b.material))for(var c=0;c<b.material.length;c++)p(b.material[c],a.fog,
 b);else p(b.material,a.fog,b)})};var xa=null,ua=new ie;ua.setAnimationLoop(function(a){la.isPresenting()||xa&&xa(a)});"undefined"!==typeof window&&ua.setContext(window);this.setAnimationLoop=function(a){xa=a;la.setAnimationLoop(a);ua.start()};this.render=function(a,c,d,e){if(void 0!==d){console.warn("THREE.WebGLRenderer.render(): the renderTarget argument has been removed. Use .setRenderTarget() instead.");var f=d}if(void 0!==e){console.warn("THREE.WebGLRenderer.render(): the forceClear argument has been removed. Use .clear() instead.");
@@ -215,7 +215,7 @@ b,c,d,e,f,g,h,k,m){m=void 0!==m?m:1026;if(1026!==m&&1027!==m)throw Error("DepthT
 a.faces;var m=0;for(d=k.length;m<d;m++){var q=k[m];for(c=0;3>c;c++){var p=q[h[c]];var l=q[h[(c+1)%3]];f[0]=Math.min(p,l);f[1]=Math.max(p,l);p=f[0]+","+f[1];void 0===g[p]&&(g[p]={index1:f[0],index2:f[1]})}}for(p in g)m=g[p],h=a.vertices[m.index1],b.push(h.x,h.y,h.z),h=a.vertices[m.index2],b.push(h.x,h.y,h.z)}else if(a&&a.isBufferGeometry)if(h=new n,null!==a.index){k=a.attributes.position;q=a.index;var t=a.groups;0===t.length&&(t=[{start:0,count:q.count,materialIndex:0}]);a=0;for(e=t.length;a<e;++a)for(m=
 t[a],c=m.start,d=m.count,m=c,d=c+d;m<d;m+=3)for(c=0;3>c;c++)p=q.getX(m+c),l=q.getX(m+(c+1)%3),f[0]=Math.min(p,l),f[1]=Math.max(p,l),p=f[0]+","+f[1],void 0===g[p]&&(g[p]={index1:f[0],index2:f[1]});for(p in g)m=g[p],h.fromBufferAttribute(k,m.index1),b.push(h.x,h.y,h.z),h.fromBufferAttribute(k,m.index2),b.push(h.x,h.y,h.z)}else for(k=a.attributes.position,m=0,d=k.count/3;m<d;m++)for(c=0;3>c;c++)g=3*m+c,h.fromBufferAttribute(k,g),b.push(h.x,h.y,h.z),g=3*m+(c+1)%3,h.fromBufferAttribute(k,g),b.push(h.x,
 h.y,h.z);this.addAttribute("position",new A(b,3))}function Tc(a,b,c){Q.call(this);this.type="ParametricGeometry";this.parameters={func:a,slices:b,stacks:c};this.fromBufferGeometry(new dc(a,b,c));this.mergeVertices()}function dc(a,b,c){E.call(this);this.type="ParametricBufferGeometry";this.parameters={func:a,slices:b,stacks:c};var d=[],e=[],f=[],g=[],h=new n,k=new n,m=new n,q=new n,p=new n,l,t;3>a.length&&console.error("THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter.");
-var r=b+1;for(l=0;l<=c;l++){var u=l/c;for(t=0;t<=b;t++){var x=t/b;a(x,u,k);e.push(k.x,k.y,k.z);0<=x-1E-5?(a(x-1E-5,u,m),q.subVectors(k,m)):(a(x+1E-5,u,m),q.subVectors(m,k));0<=u-1E-5?(a(x,u-1E-5,m),p.subVectors(k,m)):(a(x,u+1E-5,m),p.subVectors(m,k));h.crossVectors(q,p).normalize();f.push(h.x,h.y,h.z);g.push(x,u)}}for(l=0;l<c;l++)for(t=0;t<b;t++)a=l*r+t+1,h=(l+1)*r+t+1,k=(l+1)*r+t,d.push(l*r+t,a,k),d.push(a,h,k);this.setIndex(d);this.addAttribute("position",new A(e,3));this.addAttribute("normal",
+var r=b+1;for(l=0;l<=c;l++){var v=l/c;for(t=0;t<=b;t++){var x=t/b;a(x,v,k);e.push(k.x,k.y,k.z);0<=x-1E-5?(a(x-1E-5,v,m),q.subVectors(k,m)):(a(x+1E-5,v,m),q.subVectors(m,k));0<=v-1E-5?(a(x,v-1E-5,m),p.subVectors(k,m)):(a(x,v+1E-5,m),p.subVectors(m,k));h.crossVectors(q,p).normalize();f.push(h.x,h.y,h.z);g.push(x,v)}}for(l=0;l<c;l++)for(t=0;t<b;t++)a=l*r+t+1,h=(l+1)*r+t+1,k=(l+1)*r+t,d.push(l*r+t,a,k),d.push(a,h,k);this.setIndex(d);this.addAttribute("position",new A(e,3));this.addAttribute("normal",
 new A(f,3));this.addAttribute("uv",new A(g,2))}function Uc(a,b,c,d){Q.call(this);this.type="PolyhedronGeometry";this.parameters={vertices:a,indices:b,radius:c,detail:d};this.fromBufferGeometry(new ya(a,b,c,d));this.mergeVertices()}function ya(a,b,c,d){function e(a){h.push(a.x,a.y,a.z)}function f(b,c){b*=3;c.x=a[b+0];c.y=a[b+1];c.z=a[b+2]}function g(a,b,c,d){0>d&&1===a.x&&(k[b]=a.x-1);0===c.x&&0===c.z&&(k[b]=d/2/Math.PI+.5)}E.call(this);this.type="PolyhedronBufferGeometry";this.parameters={vertices:a,
 indices:b,radius:c,detail:d};c=c||1;d=d||0;var h=[],k=[];(function(a){for(var c=new n,d=new n,g=new n,h=0;h<b.length;h+=3){f(b[h+0],c);f(b[h+1],d);f(b[h+2],g);var k,m,l=c,z=d,y=g,w=Math.pow(2,a),D=[];for(m=0;m<=w;m++){D[m]=[];var F=l.clone().lerp(y,m/w),B=z.clone().lerp(y,m/w),A=w-m;for(k=0;k<=A;k++)D[m][k]=0===k&&m===w?F:F.clone().lerp(B,k/A)}for(m=0;m<w;m++)for(k=0;k<2*(w-m)-1;k++)l=Math.floor(k/2),0===k%2?(e(D[m][l+1]),e(D[m+1][l]),e(D[m][l])):(e(D[m][l+1]),e(D[m+1][l+1]),e(D[m+1][l]))}})(d);(function(a){for(var b=
 new n,c=0;c<h.length;c+=3)b.x=h[c+0],b.y=h[c+1],b.z=h[c+2],b.normalize().multiplyScalar(a),h[c+0]=b.x,h[c+1]=b.y,h[c+2]=b.z})(c);(function(){for(var a=new n,b=0;b<h.length;b+=3)a.x=h[b+0],a.y=h[b+1],a.z=h[b+2],k.push(Math.atan2(a.z,-a.x)/2/Math.PI+.5,1-(Math.atan2(-a.y,Math.sqrt(a.x*a.x+a.z*a.z))/Math.PI+.5));a=new n;b=new n;for(var c=new n,d=new n,e=new B,f=new B,l=new B,x=0,z=0;x<h.length;x+=9,z+=6){a.set(h[x+0],h[x+1],h[x+2]);b.set(h[x+3],h[x+4],h[x+5]);c.set(h[x+6],h[x+7],h[x+8]);e.set(k[z+0],
@@ -225,12 +225,12 @@ b){Q.call(this);this.type="TetrahedronGeometry";this.parameters={radius:a,detail
 11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1],a,b);this.type="IcosahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Yc(a,b){Q.call(this);this.type="DodecahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new gc(a,b));this.mergeVertices()}function gc(a,b){var c=(1+Math.sqrt(5))/2,d=1/c;ya.call(this,[-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-d,-c,0,-d,c,0,d,-c,0,d,c,-d,-c,0,-d,c,0,d,-c,0,d,c,
 0,-c,0,-d,c,0,-d,-c,0,d,c,0,d],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],a,b);this.type="DodecahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Zc(a,b,c,d,e,f){Q.call(this);this.type="TubeGeometry";this.parameters={path:a,tubularSegments:b,radius:c,radialSegments:d,
 closed:e};void 0!==f&&console.warn("THREE.TubeGeometry: taper has been removed.");a=new Db(a,b,c,d,e);this.tangents=a.tangents;this.normals=a.normals;this.binormals=a.binormals;this.fromBufferGeometry(a);this.mergeVertices()}function Db(a,b,c,d,e){function f(e){q=a.getPointAt(e/b,q);var f=g.normals[e];e=g.binormals[e];for(l=0;l<=d;l++){var m=l/d*Math.PI*2,p=Math.sin(m);m=-Math.cos(m);k.x=m*f.x+p*e.x;k.y=m*f.y+p*e.y;k.z=m*f.z+p*e.z;k.normalize();r.push(k.x,k.y,k.z);h.x=q.x+c*k.x;h.y=q.y+c*k.y;h.z=
-q.z+c*k.z;t.push(h.x,h.y,h.z)}}E.call(this);this.type="TubeBufferGeometry";this.parameters={path:a,tubularSegments:b,radius:c,radialSegments:d,closed:e};b=b||64;c=c||1;d=d||8;e=e||!1;var g=a.computeFrenetFrames(b,e);this.tangents=g.tangents;this.normals=g.normals;this.binormals=g.binormals;var h=new n,k=new n,m=new B,q=new n,p,l,t=[],r=[],u=[],x=[];for(p=0;p<b;p++)f(p);f(!1===e?b:0);for(p=0;p<=b;p++)for(l=0;l<=d;l++)m.x=p/b,m.y=l/d,u.push(m.x,m.y);(function(){for(l=1;l<=b;l++)for(p=1;p<=d;p++){var a=
-(d+1)*l+(p-1),c=(d+1)*l+p,e=(d+1)*(l-1)+p;x.push((d+1)*(l-1)+(p-1),a,e);x.push(a,c,e)}})();this.setIndex(x);this.addAttribute("position",new A(t,3));this.addAttribute("normal",new A(r,3));this.addAttribute("uv",new A(u,2))}function $c(a,b,c,d,e,f,g){Q.call(this);this.type="TorusKnotGeometry";this.parameters={radius:a,tube:b,tubularSegments:c,radialSegments:d,p:e,q:f};void 0!==g&&console.warn("THREE.TorusKnotGeometry: heightScale has been deprecated. Use .scale( x, y, z ) instead.");this.fromBufferGeometry(new hc(a,
-b,c,d,e,f));this.mergeVertices()}function hc(a,b,c,d,e,f){function g(a,b,c,d,e){var f=Math.sin(a);b=c/b*a;c=Math.cos(b);e.x=d*(2+c)*.5*Math.cos(a);e.y=d*(2+c)*f*.5;e.z=d*Math.sin(b)*.5}E.call(this);this.type="TorusKnotBufferGeometry";this.parameters={radius:a,tube:b,tubularSegments:c,radialSegments:d,p:e,q:f};a=a||1;b=b||.4;c=Math.floor(c)||64;d=Math.floor(d)||8;e=e||2;f=f||3;var h=[],k=[],m=[],q=[],p,l=new n,t=new n,r=new n,u=new n,x=new n,z=new n,y=new n;for(p=0;p<=c;++p){var w=p/c*e*Math.PI*2;
-g(w,e,f,a,r);g(w+.01,e,f,a,u);z.subVectors(u,r);y.addVectors(u,r);x.crossVectors(z,y);y.crossVectors(x,z);x.normalize();y.normalize();for(w=0;w<=d;++w){var D=w/d*Math.PI*2,F=-b*Math.cos(D);D=b*Math.sin(D);l.x=r.x+(F*y.x+D*x.x);l.y=r.y+(F*y.y+D*x.y);l.z=r.z+(F*y.z+D*x.z);k.push(l.x,l.y,l.z);t.subVectors(l,r).normalize();m.push(t.x,t.y,t.z);q.push(p/c);q.push(w/d)}}for(w=1;w<=c;w++)for(p=1;p<=d;p++)a=(d+1)*w+(p-1),b=(d+1)*w+p,e=(d+1)*(w-1)+p,h.push((d+1)*(w-1)+(p-1),a,e),h.push(a,b,e);this.setIndex(h);
+q.z+c*k.z;t.push(h.x,h.y,h.z)}}E.call(this);this.type="TubeBufferGeometry";this.parameters={path:a,tubularSegments:b,radius:c,radialSegments:d,closed:e};b=b||64;c=c||1;d=d||8;e=e||!1;var g=a.computeFrenetFrames(b,e);this.tangents=g.tangents;this.normals=g.normals;this.binormals=g.binormals;var h=new n,k=new n,m=new B,q=new n,p,l,t=[],r=[],v=[],x=[];for(p=0;p<b;p++)f(p);f(!1===e?b:0);for(p=0;p<=b;p++)for(l=0;l<=d;l++)m.x=p/b,m.y=l/d,v.push(m.x,m.y);(function(){for(l=1;l<=b;l++)for(p=1;p<=d;p++){var a=
+(d+1)*l+(p-1),c=(d+1)*l+p,e=(d+1)*(l-1)+p;x.push((d+1)*(l-1)+(p-1),a,e);x.push(a,c,e)}})();this.setIndex(x);this.addAttribute("position",new A(t,3));this.addAttribute("normal",new A(r,3));this.addAttribute("uv",new A(v,2))}function $c(a,b,c,d,e,f,g){Q.call(this);this.type="TorusKnotGeometry";this.parameters={radius:a,tube:b,tubularSegments:c,radialSegments:d,p:e,q:f};void 0!==g&&console.warn("THREE.TorusKnotGeometry: heightScale has been deprecated. Use .scale( x, y, z ) instead.");this.fromBufferGeometry(new hc(a,
+b,c,d,e,f));this.mergeVertices()}function hc(a,b,c,d,e,f){function g(a,b,c,d,e){var f=Math.sin(a);b=c/b*a;c=Math.cos(b);e.x=d*(2+c)*.5*Math.cos(a);e.y=d*(2+c)*f*.5;e.z=d*Math.sin(b)*.5}E.call(this);this.type="TorusKnotBufferGeometry";this.parameters={radius:a,tube:b,tubularSegments:c,radialSegments:d,p:e,q:f};a=a||1;b=b||.4;c=Math.floor(c)||64;d=Math.floor(d)||8;e=e||2;f=f||3;var h=[],k=[],m=[],q=[],p,l=new n,t=new n,r=new n,v=new n,x=new n,z=new n,y=new n;for(p=0;p<=c;++p){var w=p/c*e*Math.PI*2;
+g(w,e,f,a,r);g(w+.01,e,f,a,v);z.subVectors(v,r);y.addVectors(v,r);x.crossVectors(z,y);y.crossVectors(x,z);x.normalize();y.normalize();for(w=0;w<=d;++w){var D=w/d*Math.PI*2,F=-b*Math.cos(D);D=b*Math.sin(D);l.x=r.x+(F*y.x+D*x.x);l.y=r.y+(F*y.y+D*x.y);l.z=r.z+(F*y.z+D*x.z);k.push(l.x,l.y,l.z);t.subVectors(l,r).normalize();m.push(t.x,t.y,t.z);q.push(p/c);q.push(w/d)}}for(w=1;w<=c;w++)for(p=1;p<=d;p++)a=(d+1)*w+(p-1),b=(d+1)*w+p,e=(d+1)*(w-1)+p,h.push((d+1)*(w-1)+(p-1),a,e),h.push(a,b,e);this.setIndex(h);
 this.addAttribute("position",new A(k,3));this.addAttribute("normal",new A(m,3));this.addAttribute("uv",new A(q,2))}function ad(a,b,c,d,e){Q.call(this);this.type="TorusGeometry";this.parameters={radius:a,tube:b,radialSegments:c,tubularSegments:d,arc:e};this.fromBufferGeometry(new ic(a,b,c,d,e));this.mergeVertices()}function ic(a,b,c,d,e){E.call(this);this.type="TorusBufferGeometry";this.parameters={radius:a,tube:b,radialSegments:c,tubularSegments:d,arc:e};a=a||1;b=b||.4;c=Math.floor(c)||8;d=Math.floor(d)||
-6;e=e||2*Math.PI;var f=[],g=[],h=[],k=[],m=new n,q=new n,p=new n,l,t;for(l=0;l<=c;l++)for(t=0;t<=d;t++){var r=t/d*e,u=l/c*Math.PI*2;q.x=(a+b*Math.cos(u))*Math.cos(r);q.y=(a+b*Math.cos(u))*Math.sin(r);q.z=b*Math.sin(u);g.push(q.x,q.y,q.z);m.x=a*Math.cos(r);m.y=a*Math.sin(r);p.subVectors(q,m).normalize();h.push(p.x,p.y,p.z);k.push(t/d);k.push(l/c)}for(l=1;l<=c;l++)for(t=1;t<=d;t++)a=(d+1)*(l-1)+t-1,b=(d+1)*(l-1)+t,e=(d+1)*l+t,f.push((d+1)*l+t-1,a,e),f.push(a,b,e);this.setIndex(f);this.addAttribute("position",
+6;e=e||2*Math.PI;var f=[],g=[],h=[],k=[],m=new n,q=new n,p=new n,l,t;for(l=0;l<=c;l++)for(t=0;t<=d;t++){var r=t/d*e,v=l/c*Math.PI*2;q.x=(a+b*Math.cos(v))*Math.cos(r);q.y=(a+b*Math.cos(v))*Math.sin(r);q.z=b*Math.sin(v);g.push(q.x,q.y,q.z);m.x=a*Math.cos(r);m.y=a*Math.sin(r);p.subVectors(q,m).normalize();h.push(p.x,p.y,p.z);k.push(t/d);k.push(l/c)}for(l=1;l<=c;l++)for(t=1;t<=d;t++)a=(d+1)*(l-1)+t-1,b=(d+1)*(l-1)+t,e=(d+1)*l+t,f.push((d+1)*l+t-1,a,e),f.push(a,b,e);this.setIndex(f);this.addAttribute("position",
 new A(g,3));this.addAttribute("normal",new A(h,3));this.addAttribute("uv",new A(k,2))}function Af(a,b,c,d,e){for(var f,g=0,h=b,k=c-d;h<c;h+=d)g+=(a[k]-a[h])*(a[h+1]+a[k+1]),k=h;if(e===0<g)for(e=b;e<c;e+=d)f=Bf(e,a[e],a[e+1],f);else for(e=c-d;e>=b;e-=d)f=Bf(e,a[e],a[e+1],f);f&&Eb(f,f.next)&&(bd(f),f=f.next);return f}function cd(a,b){if(!a)return a;b||(b=a);do{var c=!1;if(a.steiner||!Eb(a,a.next)&&0!==ra(a.prev,a,a.next))a=a.next;else{bd(a);a=b=a.prev;if(a===a.next)break;c=!0}}while(c||a!==b);return b}
 function dd(a,b,c,d,e,f,g){if(a){if(!g&&f){var h=a,k=h;do null===k.z&&(k.z=re(k.x,k.y,d,e,f)),k.prevZ=k.prev,k=k.nextZ=k.next;while(k!==h);k.prevZ.nextZ=null;k.prevZ=null;h=k;var m,q,p,l,t=1;do{k=h;var r=h=null;for(q=0;k;){q++;var n=k;for(m=p=0;m<t&&(p++,n=n.nextZ,n);m++);for(l=t;0<p||0<l&&n;)0!==p&&(0===l||!n||k.z<=n.z)?(m=k,k=k.nextZ,p--):(m=n,n=n.nextZ,l--),r?r.nextZ=m:h=m,m.prevZ=r,r=m;k=n}r.nextZ=null;t*=2}while(1<q)}for(h=a;a.prev!==a.next;){k=a.prev;n=a.next;if(f)a:{r=a;l=d;var x=e,z=f;q=r.prev;
 p=r;t=r.next;if(0<=ra(q,p,t))r=!1;else{var y=q.x>p.x?q.x>t.x?q.x:t.x:p.x>t.x?p.x:t.x,w=q.y>p.y?q.y>t.y?q.y:t.y:p.y>t.y?p.y:t.y;m=re(q.x<p.x?q.x<t.x?q.x:t.x:p.x<t.x?p.x:t.x,q.y<p.y?q.y<t.y?q.y:t.y:p.y<t.y?p.y:t.y,l,x,z);l=re(y,w,l,x,z);for(x=r.nextZ;x&&x.z<=l;){if(x!==r.prev&&x!==r.next&&Id(q.x,q.y,p.x,p.y,t.x,t.y,x.x,x.y)&&0<=ra(x.prev,x,x.next)){r=!1;break a}x=x.nextZ}for(x=r.prevZ;x&&x.z>=m;){if(x!==r.prev&&x!==r.next&&Id(q.x,q.y,p.x,p.y,t.x,t.y,x.x,x.y)&&0<=ra(x.prev,x,x.next)){r=!1;break a}x=
@@ -242,7 +242,7 @@ g)*(b-h)&&0<=(c-g)*(f-h)-(e-g)*(d-h)}function ra(a,b,c){return(b.y-a.y)*(c.x-b.x
 c;d.next=c;c.prev=d;f.next=d;d.prev=f;return d}function Bf(a,b,c,d){a=new se(a,b,c);d?(a.next=d.next,a.prev=d,d.next.prev=a,d.next=a):(a.prev=a,a.next=a);return a}function bd(a){a.next.prev=a.prev;a.prev.next=a.next;a.prevZ&&(a.prevZ.nextZ=a.nextZ);a.nextZ&&(a.nextZ.prevZ=a.prevZ)}function se(a,b,c){this.i=a;this.x=b;this.y=c;this.nextZ=this.prevZ=this.z=this.next=this.prev=null;this.steiner=!1}function Ef(a){var b=a.length;2<b&&a[b-1].equals(a[0])&&a.pop()}function Ff(a,b){for(var c=0;c<b.length;c++)a.push(b[c].x),
 a.push(b[c].y)}function Fb(a,b){Q.call(this);this.type="ExtrudeGeometry";this.parameters={shapes:a,options:b};this.fromBufferGeometry(new Xa(a,b));this.mergeVertices()}function Xa(a,b){function c(a){function c(a,b,c){b||console.error("THREE.ExtrudeGeometry: vec does not exist");return b.clone().multiplyScalar(c).add(a)}function g(a,b,c){var d=a.x-b.x;var e=a.y-b.y;var f=c.x-a.x;var g=c.y-a.y,h=d*d+e*e;if(Math.abs(d*g-e*f)>Number.EPSILON){var k=Math.sqrt(h),m=Math.sqrt(f*f+g*g);h=b.x-e/k;b=b.y+d/k;
 g=((c.x-g/m-h)*g-(c.y+f/m-b)*f)/(d*g-e*f);f=h+d*g-a.x;d=b+e*g-a.y;e=f*f+d*d;if(2>=e)return new B(f,d);e=Math.sqrt(e/2)}else a=!1,d>Number.EPSILON?f>Number.EPSILON&&(a=!0):d<-Number.EPSILON?f<-Number.EPSILON&&(a=!0):Math.sign(e)===Math.sign(g)&&(a=!0),a?(f=-e,e=Math.sqrt(h)):(f=d,d=e,e=Math.sqrt(h/2));return new B(f/e,d/e)}function h(a,b){for(J=a.length;0<=--J;){var c=J;var f=J-1;0>f&&(f=a.length-1);var g,h=y+2*H;for(g=0;g<h;g++){var k=Y*g,m=Y*(g+1),q=b+f+k,p=b+f+m;m=b+c+m;r(b+c+k);r(q);r(m);r(q);
-r(p);r(m);k=e.length/3;k=G.generateSideWallUV(d,e,k-6,k-3,k-2,k-1);u(k[0]);u(k[1]);u(k[3]);u(k[1]);u(k[2]);u(k[3])}}}function k(a,b,c){x.push(a);x.push(b);x.push(c)}function l(a,b,c){r(a);r(b);r(c);a=e.length/3;a=G.generateTopUV(d,e,a-3,a-2,a-1);u(a[0]);u(a[1]);u(a[2])}function r(a){e.push(x[3*a]);e.push(x[3*a+1]);e.push(x[3*a+2])}function u(a){f.push(a.x);f.push(a.y)}var x=[],z=void 0!==b.curveSegments?b.curveSegments:12,y=void 0!==b.steps?b.steps:1,w=void 0!==b.depth?b.depth:100,D=void 0!==b.bevelEnabled?
+r(p);r(m);k=e.length/3;k=G.generateSideWallUV(d,e,k-6,k-3,k-2,k-1);v(k[0]);v(k[1]);v(k[3]);v(k[1]);v(k[2]);v(k[3])}}}function k(a,b,c){x.push(a);x.push(b);x.push(c)}function l(a,b,c){r(a);r(b);r(c);a=e.length/3;a=G.generateTopUV(d,e,a-3,a-2,a-1);v(a[0]);v(a[1]);v(a[2])}function r(a){e.push(x[3*a]);e.push(x[3*a+1]);e.push(x[3*a+2])}function v(a){f.push(a.x);f.push(a.y)}var x=[],z=void 0!==b.curveSegments?b.curveSegments:12,y=void 0!==b.steps?b.steps:1,w=void 0!==b.depth?b.depth:100,D=void 0!==b.bevelEnabled?
 b.bevelEnabled:!0,F=void 0!==b.bevelThickness?b.bevelThickness:6,A=void 0!==b.bevelSize?b.bevelSize:F-2,C=void 0!==b.bevelOffset?b.bevelOffset:0,H=void 0!==b.bevelSegments?b.bevelSegments:3,E=b.extrudePath,G=void 0!==b.UVGenerator?b.UVGenerator:rh;void 0!==b.amount&&(console.warn("THREE.ExtrudeBufferGeometry: amount has been renamed to depth."),w=b.amount);var K=!1;if(E){var Z=E.getSpacedPoints(y);K=!0;D=!1;var M=E.computeFrenetFrames(y,!1);var Q=new n;var fa=new n;var R=new n}D||(C=A=F=H=0);var N;
 z=a.extractPoints(z);a=z.shape;var O=z.holes;if(!bb.isClockWise(a)){a=a.reverse();var I=0;for(N=O.length;I<N;I++){var P=O[I];bb.isClockWise(P)&&(O[I]=P.reverse())}}var T=bb.triangulateShape(a,O),V=a;I=0;for(N=O.length;I<N;I++)P=O[I],a=a.concat(P);var S,Y=a.length,W,ba=T.length;z=[];var J=0;var X=V.length;var U=X-1;for(S=J+1;J<X;J++,U++,S++)U===X&&(U=0),S===X&&(S=0),z[J]=g(V[J],V[U],V[S]);E=[];var ca=z.concat();I=0;for(N=O.length;I<N;I++){P=O[I];var aa=[];J=0;X=P.length;U=X-1;for(S=J+1;J<X;J++,U++,
 S++)U===X&&(U=0),S===X&&(S=0),aa[J]=g(P[J],P[U],P[S]);E.push(aa);ca=ca.concat(aa)}for(U=0;U<H;U++){X=U/H;var ea=F*Math.cos(X*Math.PI/2);S=A*Math.sin(X*Math.PI/2)+C;J=0;for(X=V.length;J<X;J++){var ha=c(V[J],z[J],S);k(ha.x,ha.y,-ea)}I=0;for(N=O.length;I<N;I++)for(P=O[I],aa=E[I],J=0,X=P.length;J<X;J++)ha=c(P[J],aa[J],S),k(ha.x,ha.y,-ea)}S=A+C;for(J=0;J<Y;J++)ha=D?c(a[J],ca[J],S):a[J],K?(fa.copy(M.normals[0]).multiplyScalar(ha.x),Q.copy(M.binormals[0]).multiplyScalar(ha.y),R.copy(Z[0]).add(fa).add(Q),
@@ -251,9 +251,9 @@ k(R.x,R.y,R.z)):k(ha.x,ha.y,0);for(X=1;X<=y;X++)for(J=0;J<Y;J++)ha=D?c(a[J],ca[J
 {shapes:a,options:b};a=Array.isArray(a)?a:[a];for(var d=this,e=[],f=[],g=0,h=a.length;g<h;g++)c(a[g]);this.addAttribute("position",new A(e,3));this.addAttribute("uv",new A(f,2));this.computeVertexNormals()}function Gf(a,b,c){c.shapes=[];if(Array.isArray(a))for(var d=0,e=a.length;d<e;d++)c.shapes.push(a[d].uuid);else c.shapes.push(a.uuid);void 0!==b.extrudePath&&(c.options.extrudePath=b.extrudePath.toJSON());return c}function fd(a,b){Q.call(this);this.type="TextGeometry";this.parameters={text:a,parameters:b};
 this.fromBufferGeometry(new jc(a,b));this.mergeVertices()}function jc(a,b){b=b||{};var c=b.font;if(!c||!c.isFont)return console.error("THREE.TextGeometry: font parameter is not an instance of THREE.Font."),new Q;a=c.generateShapes(a,b.size);b.depth=void 0!==b.height?b.height:50;void 0===b.bevelThickness&&(b.bevelThickness=10);void 0===b.bevelSize&&(b.bevelSize=8);void 0===b.bevelEnabled&&(b.bevelEnabled=!1);Xa.call(this,a,b);this.type="TextBufferGeometry"}function gd(a,b,c,d,e,f,g){Q.call(this);this.type=
 "SphereGeometry";this.parameters={radius:a,widthSegments:b,heightSegments:c,phiStart:d,phiLength:e,thetaStart:f,thetaLength:g};this.fromBufferGeometry(new nb(a,b,c,d,e,f,g));this.mergeVertices()}function nb(a,b,c,d,e,f,g){E.call(this);this.type="SphereBufferGeometry";this.parameters={radius:a,widthSegments:b,heightSegments:c,phiStart:d,phiLength:e,thetaStart:f,thetaLength:g};a=a||1;b=Math.max(3,Math.floor(b)||8);c=Math.max(2,Math.floor(c)||6);d=void 0!==d?d:0;e=void 0!==e?e:2*Math.PI;f=void 0!==f?
-f:0;g=void 0!==g?g:Math.PI;var h=Math.min(f+g,Math.PI),k,m,q=0,p=[],l=new n,t=new n,r=[],u=[],x=[],z=[];for(m=0;m<=c;m++){var y=[],w=m/c,D=0;0==m&&0==f?D=.5/b:m==c&&h==Math.PI&&(D=-.5/b);for(k=0;k<=b;k++){var F=k/b;l.x=-a*Math.cos(d+F*e)*Math.sin(f+w*g);l.y=a*Math.cos(f+w*g);l.z=a*Math.sin(d+F*e)*Math.sin(f+w*g);u.push(l.x,l.y,l.z);t.copy(l).normalize();x.push(t.x,t.y,t.z);z.push(F+D,1-w);y.push(q++)}p.push(y)}for(m=0;m<c;m++)for(k=0;k<b;k++)a=p[m][k+1],d=p[m][k],e=p[m+1][k],g=p[m+1][k+1],(0!==m||
-0<f)&&r.push(a,d,g),(m!==c-1||h<Math.PI)&&r.push(d,e,g);this.setIndex(r);this.addAttribute("position",new A(u,3));this.addAttribute("normal",new A(x,3));this.addAttribute("uv",new A(z,2))}function hd(a,b,c,d,e,f){Q.call(this);this.type="RingGeometry";this.parameters={innerRadius:a,outerRadius:b,thetaSegments:c,phiSegments:d,thetaStart:e,thetaLength:f};this.fromBufferGeometry(new kc(a,b,c,d,e,f));this.mergeVertices()}function kc(a,b,c,d,e,f){E.call(this);this.type="RingBufferGeometry";this.parameters=
-{innerRadius:a,outerRadius:b,thetaSegments:c,phiSegments:d,thetaStart:e,thetaLength:f};a=a||.5;b=b||1;e=void 0!==e?e:0;f=void 0!==f?f:2*Math.PI;c=void 0!==c?Math.max(3,c):8;d=void 0!==d?Math.max(1,d):1;var g=[],h=[],k=[],m=[],q=a,p=(b-a)/d,l=new n,t=new B,r,u;for(r=0;r<=d;r++){for(u=0;u<=c;u++)a=e+u/c*f,l.x=q*Math.cos(a),l.y=q*Math.sin(a),h.push(l.x,l.y,l.z),k.push(0,0,1),t.x=(l.x/b+1)/2,t.y=(l.y/b+1)/2,m.push(t.x,t.y);q+=p}for(r=0;r<d;r++)for(b=r*(c+1),u=0;u<c;u++)a=u+b,e=a+c+1,f=a+c+2,q=a+1,g.push(a,
+f:0;g=void 0!==g?g:Math.PI;var h=Math.min(f+g,Math.PI),k,m,q=0,p=[],l=new n,t=new n,r=[],v=[],x=[],z=[];for(m=0;m<=c;m++){var y=[],w=m/c,D=0;0==m&&0==f?D=.5/b:m==c&&h==Math.PI&&(D=-.5/b);for(k=0;k<=b;k++){var F=k/b;l.x=-a*Math.cos(d+F*e)*Math.sin(f+w*g);l.y=a*Math.cos(f+w*g);l.z=a*Math.sin(d+F*e)*Math.sin(f+w*g);v.push(l.x,l.y,l.z);t.copy(l).normalize();x.push(t.x,t.y,t.z);z.push(F+D,1-w);y.push(q++)}p.push(y)}for(m=0;m<c;m++)for(k=0;k<b;k++)a=p[m][k+1],d=p[m][k],e=p[m+1][k],g=p[m+1][k+1],(0!==m||
+0<f)&&r.push(a,d,g),(m!==c-1||h<Math.PI)&&r.push(d,e,g);this.setIndex(r);this.addAttribute("position",new A(v,3));this.addAttribute("normal",new A(x,3));this.addAttribute("uv",new A(z,2))}function hd(a,b,c,d,e,f){Q.call(this);this.type="RingGeometry";this.parameters={innerRadius:a,outerRadius:b,thetaSegments:c,phiSegments:d,thetaStart:e,thetaLength:f};this.fromBufferGeometry(new kc(a,b,c,d,e,f));this.mergeVertices()}function kc(a,b,c,d,e,f){E.call(this);this.type="RingBufferGeometry";this.parameters=
+{innerRadius:a,outerRadius:b,thetaSegments:c,phiSegments:d,thetaStart:e,thetaLength:f};a=a||.5;b=b||1;e=void 0!==e?e:0;f=void 0!==f?f:2*Math.PI;c=void 0!==c?Math.max(3,c):8;d=void 0!==d?Math.max(1,d):1;var g=[],h=[],k=[],m=[],q=a,p=(b-a)/d,l=new n,t=new B,r,v;for(r=0;r<=d;r++){for(v=0;v<=c;v++)a=e+v/c*f,l.x=q*Math.cos(a),l.y=q*Math.sin(a),h.push(l.x,l.y,l.z),k.push(0,0,1),t.x=(l.x/b+1)/2,t.y=(l.y/b+1)/2,m.push(t.x,t.y);q+=p}for(r=0;r<d;r++)for(b=r*(c+1),v=0;v<c;v++)a=v+b,e=a+c+1,f=a+c+2,q=a+1,g.push(a,
 e,q),g.push(e,f,q);this.setIndex(g);this.addAttribute("position",new A(h,3));this.addAttribute("normal",new A(k,3));this.addAttribute("uv",new A(m,2))}function id(a,b,c,d){Q.call(this);this.type="LatheGeometry";this.parameters={points:a,segments:b,phiStart:c,phiLength:d};this.fromBufferGeometry(new lc(a,b,c,d));this.mergeVertices()}function lc(a,b,c,d){E.call(this);this.type="LatheBufferGeometry";this.parameters={points:a,segments:b,phiStart:c,phiLength:d};b=Math.floor(b)||12;c=c||0;d=d||2*Math.PI;
 d=P.clamp(d,0,2*Math.PI);var e=[],f=[],g=[],h=1/b,k=new n,m=new B,q;for(q=0;q<=b;q++){var p=c+q*h*d;var l=Math.sin(p),t=Math.cos(p);for(p=0;p<=a.length-1;p++)k.x=a[p].x*l,k.y=a[p].y,k.z=a[p].x*t,f.push(k.x,k.y,k.z),m.x=q/b,m.y=p/(a.length-1),g.push(m.x,m.y)}for(q=0;q<b;q++)for(p=0;p<a.length-1;p++)c=p+q*a.length,h=c+a.length,k=c+a.length+1,m=c+1,e.push(c,h,m),e.push(h,k,m);this.setIndex(e);this.addAttribute("position",new A(f,3));this.addAttribute("uv",new A(g,2));this.computeVertexNormals();if(d===
 2*Math.PI)for(d=this.attributes.normal.array,e=new n,f=new n,g=new n,c=b*a.length*3,p=q=0;q<a.length;q++,p+=3)e.x=d[p+0],e.y=d[p+1],e.z=d[p+2],f.x=d[c+p+0],f.y=d[c+p+1],f.z=d[c+p+2],g.addVectors(e,f).normalize(),d[p+0]=d[c+p+0]=g.x,d[p+1]=d[c+p+1]=g.y,d[p+2]=d[c+p+2]=g.z}function Gb(a,b){Q.call(this);this.type="ShapeGeometry";"object"===typeof b&&(console.warn("THREE.ShapeGeometry: Options parameter has been removed."),b=b.curveSegments);this.parameters={shapes:a,curveSegments:b};this.fromBufferGeometry(new Hb(a,
@@ -261,11 +261,11 @@ b));this.mergeVertices()}function Hb(a,b){function c(a){var c,h=e.length/3;a=a.e
 this.parameters={shapes:a,curveSegments:b};b=b||12;var d=[],e=[],f=[],g=[],h=0,k=0;if(!1===Array.isArray(a))c(a);else for(var m=0;m<a.length;m++)c(a[m]),this.addGroup(h,k,m),h+=k,k=0;this.setIndex(d);this.addAttribute("position",new A(e,3));this.addAttribute("normal",new A(f,3));this.addAttribute("uv",new A(g,2))}function Hf(a,b){b.shapes=[];if(Array.isArray(a))for(var c=0,d=a.length;c<d;c++)b.shapes.push(a[c].uuid);else b.shapes.push(a.uuid);return b}function mc(a,b){E.call(this);this.type="EdgesGeometry";
 this.parameters={thresholdAngle:b};var c=[];b=Math.cos(P.DEG2RAD*(void 0!==b?b:1));var d=[0,0],e={},f=["a","b","c"];if(a.isBufferGeometry){var g=new Q;g.fromBufferGeometry(a)}else g=a.clone();g.mergeVertices();g.computeFaceNormals();a=g.vertices;g=g.faces;for(var h=0,k=g.length;h<k;h++)for(var m=g[h],q=0;3>q;q++){var l=m[f[q]];var n=m[f[(q+1)%3]];d[0]=Math.min(l,n);d[1]=Math.max(l,n);l=d[0]+","+d[1];void 0===e[l]?e[l]={index1:d[0],index2:d[1],face1:h,face2:void 0}:e[l].face2=h}for(l in e)if(d=e[l],
 void 0===d.face2||g[d.face1].normal.dot(g[d.face2].normal)<=b)f=a[d.index1],c.push(f.x,f.y,f.z),f=a[d.index2],c.push(f.x,f.y,f.z);this.addAttribute("position",new A(c,3))}function Ib(a,b,c,d,e,f,g,h){Q.call(this);this.type="CylinderGeometry";this.parameters={radiusTop:a,radiusBottom:b,height:c,radialSegments:d,heightSegments:e,openEnded:f,thetaStart:g,thetaLength:h};this.fromBufferGeometry(new cb(a,b,c,d,e,f,g,h));this.mergeVertices()}function cb(a,b,c,d,e,f,g,h){function k(c){var e,f=new B,k=new n,
-p=0,u=!0===c?a:b,y=!0===c?1:-1;var A=r;for(e=1;e<=d;e++)l.push(0,x*y,0),v.push(0,y,0),t.push(.5,.5),r++;var E=r;for(e=0;e<=d;e++){var C=e/d*h+g,G=Math.cos(C);C=Math.sin(C);k.x=u*C;k.y=x*y;k.z=u*G;l.push(k.x,k.y,k.z);v.push(0,y,0);f.x=.5*G+.5;f.y=.5*C*y+.5;t.push(f.x,f.y);r++}for(e=0;e<d;e++)f=A+e,k=E+e,!0===c?q.push(k,k+1,f):q.push(k+1,k,f),p+=3;m.addGroup(z,p,!0===c?1:2);z+=p}E.call(this);this.type="CylinderBufferGeometry";this.parameters={radiusTop:a,radiusBottom:b,height:c,radialSegments:d,heightSegments:e,
-openEnded:f,thetaStart:g,thetaLength:h};var m=this;a=void 0!==a?a:1;b=void 0!==b?b:1;c=c||1;d=Math.floor(d)||8;e=Math.floor(e)||1;f=void 0!==f?f:!1;g=void 0!==g?g:0;h=void 0!==h?h:2*Math.PI;var q=[],l=[],v=[],t=[],r=0,u=[],x=c/2,z=0;(function(){var f,k,p=new n,F=new n,B=0,C=(b-a)/c;for(k=0;k<=e;k++){var H=[],A=k/e,E=A*(b-a)+a;for(f=0;f<=d;f++){var G=f/d,I=G*h+g,K=Math.sin(I);I=Math.cos(I);F.x=E*K;F.y=-A*c+x;F.z=E*I;l.push(F.x,F.y,F.z);p.set(K,C,I).normalize();v.push(p.x,p.y,p.z);t.push(G,1-A);H.push(r++)}u.push(H)}for(f=
-0;f<d;f++)for(k=0;k<e;k++)p=u[k+1][f],F=u[k+1][f+1],C=u[k][f+1],q.push(u[k][f],p,C),q.push(p,F,C),B+=6;m.addGroup(z,B,0);z+=B})();!1===f&&(0<a&&k(!0),0<b&&k(!1));this.setIndex(q);this.addAttribute("position",new A(l,3));this.addAttribute("normal",new A(v,3));this.addAttribute("uv",new A(t,2))}function jd(a,b,c,d,e,f,g){Ib.call(this,0,a,b,c,d,e,f,g);this.type="ConeGeometry";this.parameters={radius:a,height:b,radialSegments:c,heightSegments:d,openEnded:e,thetaStart:f,thetaLength:g}}function kd(a,b,
+p=0,v=!0===c?a:b,y=!0===c?1:-1;var A=r;for(e=1;e<=d;e++)l.push(0,x*y,0),u.push(0,y,0),t.push(.5,.5),r++;var E=r;for(e=0;e<=d;e++){var C=e/d*h+g,G=Math.cos(C);C=Math.sin(C);k.x=v*C;k.y=x*y;k.z=v*G;l.push(k.x,k.y,k.z);u.push(0,y,0);f.x=.5*G+.5;f.y=.5*C*y+.5;t.push(f.x,f.y);r++}for(e=0;e<d;e++)f=A+e,k=E+e,!0===c?q.push(k,k+1,f):q.push(k+1,k,f),p+=3;m.addGroup(z,p,!0===c?1:2);z+=p}E.call(this);this.type="CylinderBufferGeometry";this.parameters={radiusTop:a,radiusBottom:b,height:c,radialSegments:d,heightSegments:e,
+openEnded:f,thetaStart:g,thetaLength:h};var m=this;a=void 0!==a?a:1;b=void 0!==b?b:1;c=c||1;d=Math.floor(d)||8;e=Math.floor(e)||1;f=void 0!==f?f:!1;g=void 0!==g?g:0;h=void 0!==h?h:2*Math.PI;var q=[],l=[],u=[],t=[],r=0,v=[],x=c/2,z=0;(function(){var f,k,p=new n,F=new n,B=0,C=(b-a)/c;for(k=0;k<=e;k++){var H=[],A=k/e,E=A*(b-a)+a;for(f=0;f<=d;f++){var G=f/d,I=G*h+g,K=Math.sin(I);I=Math.cos(I);F.x=E*K;F.y=-A*c+x;F.z=E*I;l.push(F.x,F.y,F.z);p.set(K,C,I).normalize();u.push(p.x,p.y,p.z);t.push(G,1-A);H.push(r++)}v.push(H)}for(f=
+0;f<d;f++)for(k=0;k<e;k++)p=v[k+1][f],F=v[k+1][f+1],C=v[k][f+1],q.push(v[k][f],p,C),q.push(p,F,C),B+=6;m.addGroup(z,B,0);z+=B})();!1===f&&(0<a&&k(!0),0<b&&k(!1));this.setIndex(q);this.addAttribute("position",new A(l,3));this.addAttribute("normal",new A(u,3));this.addAttribute("uv",new A(t,2))}function jd(a,b,c,d,e,f,g){Ib.call(this,0,a,b,c,d,e,f,g);this.type="ConeGeometry";this.parameters={radius:a,height:b,radialSegments:c,heightSegments:d,openEnded:e,thetaStart:f,thetaLength:g}}function kd(a,b,
 c,d,e,f,g){cb.call(this,0,a,b,c,d,e,f,g);this.type="ConeBufferGeometry";this.parameters={radius:a,height:b,radialSegments:c,heightSegments:d,openEnded:e,thetaStart:f,thetaLength:g}}function ld(a,b,c,d){Q.call(this);this.type="CircleGeometry";this.parameters={radius:a,segments:b,thetaStart:c,thetaLength:d};this.fromBufferGeometry(new nc(a,b,c,d));this.mergeVertices()}function nc(a,b,c,d){E.call(this);this.type="CircleBufferGeometry";this.parameters={radius:a,segments:b,thetaStart:c,thetaLength:d};
-a=a||1;b=void 0!==b?Math.max(3,b):8;c=void 0!==c?c:0;d=void 0!==d?d:2*Math.PI;var e=[],f=[],g=[],h=[],k,m=new n,q=new B;f.push(0,0,0);g.push(0,0,1);h.push(.5,.5);var l=0;for(k=3;l<=b;l++,k+=3){var v=c+l/b*d;m.x=a*Math.cos(v);m.y=a*Math.sin(v);f.push(m.x,m.y,m.z);g.push(0,0,1);q.x=(f[k]/a+1)/2;q.y=(f[k+1]/a+1)/2;h.push(q.x,q.y)}for(k=1;k<=b;k++)e.push(k,k+1,0);this.setIndex(e);this.addAttribute("position",new A(f,3));this.addAttribute("normal",new A(g,3));this.addAttribute("uv",new A(h,2))}function Jb(a){O.call(this);
+a=a||1;b=void 0!==b?Math.max(3,b):8;c=void 0!==c?c:0;d=void 0!==d?d:2*Math.PI;var e=[],f=[],g=[],h=[],k,m=new n,q=new B;f.push(0,0,0);g.push(0,0,1);h.push(.5,.5);var l=0;for(k=3;l<=b;l++,k+=3){var u=c+l/b*d;m.x=a*Math.cos(u);m.y=a*Math.sin(u);f.push(m.x,m.y,m.z);g.push(0,0,1);q.x=(f[k]/a+1)/2;q.y=(f[k+1]/a+1)/2;h.push(q.x,q.y)}for(k=1;k<=b;k++)e.push(k,k+1,0);this.setIndex(e);this.addAttribute("position",new A(f,3));this.addAttribute("normal",new A(g,3));this.addAttribute("uv",new A(h,2))}function Jb(a){O.call(this);
 this.type="ShadowMaterial";this.color=new C(0);this.transparent=!0;this.setValues(a)}function oc(a){wa.call(this,a);this.type="RawShaderMaterial"}function Ya(a){O.call(this);this.defines={STANDARD:""};this.type="MeshStandardMaterial";this.color=new C(16777215);this.metalness=this.roughness=.5;this.lightMap=this.map=null;this.lightMapIntensity=1;this.aoMap=null;this.aoMapIntensity=1;this.emissive=new C(0);this.emissiveIntensity=1;this.bumpMap=this.emissiveMap=null;this.bumpScale=1;this.normalMap=null;
 this.normalMapType=0;this.normalScale=new B(1,1);this.displacementMap=null;this.displacementScale=1;this.displacementBias=0;this.envMap=this.alphaMap=this.metalnessMap=this.roughnessMap=null;this.envMapIntensity=1;this.refractionRatio=.98;this.wireframe=!1;this.wireframeLinewidth=1;this.wireframeLinejoin=this.wireframeLinecap="round";this.morphNormals=this.morphTargets=this.skinning=!1;this.setValues(a)}function Kb(a){Ya.call(this);this.defines={PHYSICAL:""};this.type="MeshPhysicalMaterial";this.reflectivity=
 .5;this.clearCoatRoughness=this.clearCoat=0;this.setValues(a)}function Ja(a){O.call(this);this.type="MeshPhongMaterial";this.color=new C(16777215);this.specular=new C(1118481);this.shininess=30;this.lightMap=this.map=null;this.lightMapIntensity=1;this.aoMap=null;this.aoMapIntensity=1;this.emissive=new C(0);this.emissiveIntensity=1;this.bumpMap=this.emissiveMap=null;this.bumpScale=1;this.normalMap=null;this.normalMapType=0;this.normalScale=new B(1,1);this.displacementMap=null;this.displacementScale=
@@ -357,7 +357,7 @@ a;this.z=d*Math.cos(c);return this},setFromCylindrical:function(a){return this.s
 c;this.z=a;return this},setFromMatrixColumn:function(a,b){return this.fromArray(a.elements,4*b)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;return a},fromBufferAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute().");
 this.x=a.getX(b);this.y=a.getY(b);this.z=a.getZ(b);return this}});Object.assign(pa.prototype,{isMatrix3:!0,set:function(a,b,c,d,e,f,g,h,k){var m=this.elements;m[0]=a;m[1]=d;m[2]=g;m[3]=b;m[4]=e;m[5]=h;m[6]=c;m[7]=f;m[8]=k;return this},identity:function(){this.set(1,0,0,0,1,0,0,0,1);return this},clone:function(){return(new this.constructor).fromArray(this.elements)},copy:function(a){var b=this.elements;a=a.elements;b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=
 a[8];return this},setFromMatrix4:function(a){a=a.elements;this.set(a[0],a[4],a[8],a[1],a[5],a[9],a[2],a[6],a[10]);return this},applyToBufferAttribute:function(){var a=new n;return function(b){for(var c=0,d=b.count;c<d;c++)a.x=b.getX(c),a.y=b.getY(c),a.z=b.getZ(c),a.applyMatrix3(this),b.setXYZ(c,a.x,a.y,a.z);return b}}(),multiply:function(a){return this.multiplyMatrices(this,a)},premultiply:function(a){return this.multiplyMatrices(a,this)},multiplyMatrices:function(a,b){var c=a.elements,d=b.elements;
-b=this.elements;a=c[0];var e=c[3],f=c[6],g=c[1],h=c[4],k=c[7],m=c[2],l=c[5];c=c[8];var p=d[0],n=d[3],t=d[6],r=d[1],u=d[4],x=d[7],z=d[2],y=d[5];d=d[8];b[0]=a*p+e*r+f*z;b[3]=a*n+e*u+f*y;b[6]=a*t+e*x+f*d;b[1]=g*p+h*r+k*z;b[4]=g*n+h*u+k*y;b[7]=g*t+h*x+k*d;b[2]=m*p+l*r+c*z;b[5]=m*n+l*u+c*y;b[8]=m*t+l*x+c*d;return this},multiplyScalar:function(a){var b=this.elements;b[0]*=a;b[3]*=a;b[6]*=a;b[1]*=a;b[4]*=a;b[7]*=a;b[2]*=a;b[5]*=a;b[8]*=a;return this},determinant:function(){var a=this.elements,b=a[0],c=a[1],
+b=this.elements;a=c[0];var e=c[3],f=c[6],g=c[1],h=c[4],k=c[7],m=c[2],l=c[5];c=c[8];var p=d[0],n=d[3],t=d[6],r=d[1],v=d[4],x=d[7],z=d[2],y=d[5];d=d[8];b[0]=a*p+e*r+f*z;b[3]=a*n+e*v+f*y;b[6]=a*t+e*x+f*d;b[1]=g*p+h*r+k*z;b[4]=g*n+h*v+k*y;b[7]=g*t+h*x+k*d;b[2]=m*p+l*r+c*z;b[5]=m*n+l*v+c*y;b[8]=m*t+l*x+c*d;return this},multiplyScalar:function(a){var b=this.elements;b[0]*=a;b[3]*=a;b[6]*=a;b[1]*=a;b[4]*=a;b[7]*=a;b[2]*=a;b[5]*=a;b[8]*=a;return this},determinant:function(){var a=this.elements,b=a[0],c=a[1],
 d=a[2],e=a[3],f=a[4],g=a[5],h=a[6],k=a[7];a=a[8];return b*f*a-b*g*k-c*e*a+c*g*h+d*e*k-d*f*h},getInverse:function(a,b){a&&a.isMatrix4&&console.error("THREE.Matrix3: .getInverse() no longer takes a Matrix4 argument.");var c=a.elements;a=this.elements;var d=c[0],e=c[1],f=c[2],g=c[3],h=c[4],k=c[5],m=c[6],l=c[7];c=c[8];var p=c*h-k*l,n=k*m-c*g,t=l*g-h*m,r=d*p+e*n+f*t;if(0===r){if(!0===b)throw Error("THREE.Matrix3: .getInverse() can't invert matrix, determinant is 0");console.warn("THREE.Matrix3: .getInverse() can't invert matrix, determinant is 0");
 return this.identity()}b=1/r;a[0]=p*b;a[1]=(f*l-c*e)*b;a[2]=(k*e-f*h)*b;a[3]=n*b;a[4]=(c*d-f*m)*b;a[5]=(f*g-k*d)*b;a[6]=t*b;a[7]=(e*m-l*d)*b;a[8]=(h*d-e*g)*b;return this},transpose:function(){var a=this.elements;var b=a[1];a[1]=a[3];a[3]=b;b=a[2];a[2]=a[6];a[6]=b;b=a[5];a[5]=a[7];a[7]=b;return this},getNormalMatrix:function(a){return this.setFromMatrix4(a).getInverse(this).transpose()},transposeIntoArray:function(a){var b=this.elements;a[0]=b[0];a[1]=b[3];a[2]=b[6];a[3]=b[1];a[4]=b[4];a[5]=b[7];a[6]=
 b[2];a[7]=b[5];a[8]=b[8];return this},setUvTransform:function(a,b,c,d,e,f,g){var h=Math.cos(e);e=Math.sin(e);this.set(c*h,c*e,-c*(h*f+e*g)+f+a,-d*e,d*h,-d*(-e*f+h*g)+g+b,0,0,1)},scale:function(a,b){var c=this.elements;c[0]*=a;c[3]*=a;c[6]*=a;c[1]*=b;c[4]*=b;c[7]*=b;return this},rotate:function(a){var b=Math.cos(a);a=Math.sin(a);var c=this.elements,d=c[0],e=c[3],f=c[6],g=c[1],h=c[4],k=c[7];c[0]=b*d+a*g;c[3]=b*e+a*h;c[6]=b*f+a*k;c[1]=-a*d+b*g;c[4]=-a*e+b*h;c[7]=-a*f+b*k;return this},translate:function(a,
@@ -401,21 +401,21 @@ b,c,d){this.normal.set(a,b,c);this.constant=d;return this},setFromNormalAndCopla
 new n;return function(b,c){void 0===c&&(console.warn("THREE.Plane: .intersectLine() target is now required"),c=new n);var d=b.delta(a),e=this.normal.dot(d);if(0===e){if(0===this.distanceToPoint(b.start))return c.copy(b.start)}else if(e=-(b.start.dot(this.normal)+this.constant)/e,!(0>e||1<e))return c.copy(d).multiplyScalar(e).add(b.start)}}(),intersectsLine:function(a){var b=this.distanceToPoint(a.start);a=this.distanceToPoint(a.end);return 0>b&&0<a||0>a&&0<b},intersectsBox:function(a){return a.intersectsPlane(this)},
 intersectsSphere:function(a){return a.intersectsPlane(this)},coplanarPoint:function(a){void 0===a&&(console.warn("THREE.Plane: .coplanarPoint() target is now required"),a=new n);return a.copy(this.normal).multiplyScalar(-this.constant)},applyMatrix4:function(){var a=new n,b=new pa;return function(c,d){d=d||b.getNormalMatrix(c);c=this.coplanarPoint(a).applyMatrix4(c);d=this.normal.applyMatrix3(d).normalize();this.constant=-c.dot(d);return this}}(),translate:function(a){this.constant-=a.dot(this.normal);
 return this},equals:function(a){return a.normal.equals(this.normal)&&a.constant===this.constant}});Object.assign(Bd.prototype,{set:function(a,b,c,d,e,f){var g=this.planes;g[0].copy(a);g[1].copy(b);g[2].copy(c);g[3].copy(d);g[4].copy(e);g[5].copy(f);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){for(var b=this.planes,c=0;6>c;c++)b[c].copy(a.planes[c]);return this},setFromMatrix:function(a){var b=this.planes,c=a.elements;a=c[0];var d=c[1],e=c[2],f=c[3],g=c[4],
-h=c[5],k=c[6],m=c[7],l=c[8],p=c[9],n=c[10],t=c[11],r=c[12],u=c[13],x=c[14];c=c[15];b[0].setComponents(f-a,m-g,t-l,c-r).normalize();b[1].setComponents(f+a,m+g,t+l,c+r).normalize();b[2].setComponents(f+d,m+h,t+p,c+u).normalize();b[3].setComponents(f-d,m-h,t-p,c-u).normalize();b[4].setComponents(f-e,m-k,t-n,c-x).normalize();b[5].setComponents(f+e,m+k,t+n,c+x).normalize();return this},intersectsObject:function(){var a=new Ta;return function(b){var c=b.geometry;null===c.boundingSphere&&c.computeBoundingSphere();
+h=c[5],k=c[6],m=c[7],l=c[8],p=c[9],n=c[10],t=c[11],r=c[12],v=c[13],x=c[14];c=c[15];b[0].setComponents(f-a,m-g,t-l,c-r).normalize();b[1].setComponents(f+a,m+g,t+l,c+r).normalize();b[2].setComponents(f+d,m+h,t+p,c+v).normalize();b[3].setComponents(f-d,m-h,t-p,c-v).normalize();b[4].setComponents(f-e,m-k,t-n,c-x).normalize();b[5].setComponents(f+e,m+k,t+n,c+x).normalize();return this},intersectsObject:function(){var a=new Ta;return function(b){var c=b.geometry;null===c.boundingSphere&&c.computeBoundingSphere();
 a.copy(c.boundingSphere).applyMatrix4(b.matrixWorld);return this.intersectsSphere(a)}}(),intersectsSprite:function(){var a=new Ta;return function(b){a.center.set(0,0,0);a.radius=.7071067811865476;a.applyMatrix4(b.matrixWorld);return this.intersectsSphere(a)}}(),intersectsSphere:function(a){var b=this.planes,c=a.center;a=-a.radius;for(var d=0;6>d;d++)if(b[d].distanceToPoint(c)<a)return!1;return!0},intersectsBox:function(){var a=new n;return function(b){for(var c=this.planes,d=0;6>d;d++){var e=c[d];
-a.x=0<e.normal.x?b.max.x:b.min.x;a.y=0<e.normal.y?b.max.y:b.min.y;a.z=0<e.normal.z?b.max.z:b.min.z;if(0>e.distanceToPoint(a))return!1}return!0}}(),containsPoint:function(a){for(var b=this.planes,c=0;6>c;c++)if(0>b[c].distanceToPoint(a))return!1;return!0}});Object.assign(N.prototype,{isMatrix4:!0,set:function(a,b,c,d,e,f,g,h,k,m,l,p,n,t,r,u){var q=this.elements;q[0]=a;q[4]=b;q[8]=c;q[12]=d;q[1]=e;q[5]=f;q[9]=g;q[13]=h;q[2]=k;q[6]=m;q[10]=l;q[14]=p;q[3]=n;q[7]=t;q[11]=r;q[15]=u;return this},identity:function(){this.set(1,
+a.x=0<e.normal.x?b.max.x:b.min.x;a.y=0<e.normal.y?b.max.y:b.min.y;a.z=0<e.normal.z?b.max.z:b.min.z;if(0>e.distanceToPoint(a))return!1}return!0}}(),containsPoint:function(a){for(var b=this.planes,c=0;6>c;c++)if(0>b[c].distanceToPoint(a))return!1;return!0}});Object.assign(N.prototype,{isMatrix4:!0,set:function(a,b,c,d,e,f,g,h,k,m,l,p,n,t,r,v){var q=this.elements;q[0]=a;q[4]=b;q[8]=c;q[12]=d;q[1]=e;q[5]=f;q[9]=g;q[13]=h;q[2]=k;q[6]=m;q[10]=l;q[14]=p;q[3]=n;q[7]=t;q[11]=r;q[15]=v;return this},identity:function(){this.set(1,
 0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},clone:function(){return(new N).fromArray(this.elements)},copy:function(a){var b=this.elements;a=a.elements;b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=a[11];b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return this},copyPosition:function(a){var b=this.elements;a=a.elements;b[12]=a[12];b[13]=a[13];b[14]=a[14];return this},extractBasis:function(a,b,c){a.setFromMatrixColumn(this,0);
 b.setFromMatrixColumn(this,1);c.setFromMatrixColumn(this,2);return this},makeBasis:function(a,b,c){this.set(a.x,b.x,c.x,0,a.y,b.y,c.y,0,a.z,b.z,c.z,0,0,0,0,1);return this},extractRotation:function(){var a=new n;return function(b){var c=this.elements,d=b.elements,e=1/a.setFromMatrixColumn(b,0).length(),f=1/a.setFromMatrixColumn(b,1).length();b=1/a.setFromMatrixColumn(b,2).length();c[0]=d[0]*e;c[1]=d[1]*e;c[2]=d[2]*e;c[3]=0;c[4]=d[4]*f;c[5]=d[5]*f;c[6]=d[6]*f;c[7]=0;c[8]=d[8]*b;c[9]=d[9]*b;c[10]=d[10]*
 b;c[11]=0;c[12]=0;c[13]=0;c[14]=0;c[15]=1;return this}}(),makeRotationFromEuler:function(a){a&&a.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");var b=this.elements,c=a.x,d=a.y,e=a.z,f=Math.cos(c);c=Math.sin(c);var g=Math.cos(d);d=Math.sin(d);var h=Math.cos(e);e=Math.sin(e);if("XYZ"===a.order){a=f*h;var k=f*e,m=c*h,l=c*e;b[0]=g*h;b[4]=-g*e;b[8]=d;b[1]=k+m*d;b[5]=a-l*d;b[9]=-c*g;b[2]=l-a*d;b[6]=m+k*d;b[10]=f*g}else"YXZ"===
 a.order?(a=g*h,k=g*e,m=d*h,l=d*e,b[0]=a+l*c,b[4]=m*c-k,b[8]=f*d,b[1]=f*e,b[5]=f*h,b[9]=-c,b[2]=k*c-m,b[6]=l+a*c,b[10]=f*g):"ZXY"===a.order?(a=g*h,k=g*e,m=d*h,l=d*e,b[0]=a-l*c,b[4]=-f*e,b[8]=m+k*c,b[1]=k+m*c,b[5]=f*h,b[9]=l-a*c,b[2]=-f*d,b[6]=c,b[10]=f*g):"ZYX"===a.order?(a=f*h,k=f*e,m=c*h,l=c*e,b[0]=g*h,b[4]=m*d-k,b[8]=a*d+l,b[1]=g*e,b[5]=l*d+a,b[9]=k*d-m,b[2]=-d,b[6]=c*g,b[10]=f*g):"YZX"===a.order?(a=f*g,k=f*d,m=c*g,l=c*d,b[0]=g*h,b[4]=l-a*e,b[8]=m*e+k,b[1]=e,b[5]=f*h,b[9]=-c*h,b[2]=-d*h,b[6]=k*
 e+m,b[10]=a-l*e):"XZY"===a.order&&(a=f*g,k=f*d,m=c*g,l=c*d,b[0]=g*h,b[4]=-e,b[8]=d*h,b[1]=a*e+l,b[5]=f*h,b[9]=k*e-m,b[2]=m*e-k,b[6]=c*h,b[10]=l*e+a);b[3]=0;b[7]=0;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return this},makeRotationFromQuaternion:function(){var a=new n(0,0,0),b=new n(1,1,1);return function(c){return this.compose(a,c,b)}}(),lookAt:function(){var a=new n,b=new n,c=new n;return function(d,e,f){var g=this.elements;c.subVectors(d,e);0===c.lengthSq()&&(c.z=1);c.normalize();a.crossVectors(f,
 c);0===a.lengthSq()&&(1===Math.abs(f.z)?c.x+=1E-4:c.z+=1E-4,c.normalize(),a.crossVectors(f,c));a.normalize();b.crossVectors(c,a);g[0]=a.x;g[4]=b.x;g[8]=c.x;g[1]=a.y;g[5]=b.y;g[9]=c.y;g[2]=a.z;g[6]=b.z;g[10]=c.z;return this}}(),multiply:function(a,b){return void 0!==b?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(a,b)):this.multiplyMatrices(this,a)},premultiply:function(a){return this.multiplyMatrices(a,this)},
-multiplyMatrices:function(a,b){var c=a.elements,d=b.elements;b=this.elements;a=c[0];var e=c[4],f=c[8],g=c[12],h=c[1],k=c[5],m=c[9],l=c[13],p=c[2],n=c[6],t=c[10],r=c[14],u=c[3],x=c[7],z=c[11];c=c[15];var y=d[0],w=d[4],D=d[8],F=d[12],B=d[1],C=d[5],H=d[9],A=d[13],E=d[2],G=d[6],I=d[10],K=d[14],M=d[3],N=d[7],R=d[11];d=d[15];b[0]=a*y+e*B+f*E+g*M;b[4]=a*w+e*C+f*G+g*N;b[8]=a*D+e*H+f*I+g*R;b[12]=a*F+e*A+f*K+g*d;b[1]=h*y+k*B+m*E+l*M;b[5]=h*w+k*C+m*G+l*N;b[9]=h*D+k*H+m*I+l*R;b[13]=h*F+k*A+m*K+l*d;b[2]=p*y+n*
-B+t*E+r*M;b[6]=p*w+n*C+t*G+r*N;b[10]=p*D+n*H+t*I+r*R;b[14]=p*F+n*A+t*K+r*d;b[3]=u*y+x*B+z*E+c*M;b[7]=u*w+x*C+z*G+c*N;b[11]=u*D+x*H+z*I+c*R;b[15]=u*F+x*A+z*K+c*d;return this},multiplyScalar:function(a){var b=this.elements;b[0]*=a;b[4]*=a;b[8]*=a;b[12]*=a;b[1]*=a;b[5]*=a;b[9]*=a;b[13]*=a;b[2]*=a;b[6]*=a;b[10]*=a;b[14]*=a;b[3]*=a;b[7]*=a;b[11]*=a;b[15]*=a;return this},applyToBufferAttribute:function(){var a=new n;return function(b){for(var c=0,d=b.count;c<d;c++)a.x=b.getX(c),a.y=b.getY(c),a.z=b.getZ(c),
+multiplyMatrices:function(a,b){var c=a.elements,d=b.elements;b=this.elements;a=c[0];var e=c[4],f=c[8],g=c[12],h=c[1],k=c[5],m=c[9],l=c[13],p=c[2],n=c[6],t=c[10],r=c[14],v=c[3],x=c[7],z=c[11];c=c[15];var y=d[0],w=d[4],D=d[8],F=d[12],B=d[1],C=d[5],H=d[9],A=d[13],E=d[2],G=d[6],I=d[10],K=d[14],M=d[3],N=d[7],R=d[11];d=d[15];b[0]=a*y+e*B+f*E+g*M;b[4]=a*w+e*C+f*G+g*N;b[8]=a*D+e*H+f*I+g*R;b[12]=a*F+e*A+f*K+g*d;b[1]=h*y+k*B+m*E+l*M;b[5]=h*w+k*C+m*G+l*N;b[9]=h*D+k*H+m*I+l*R;b[13]=h*F+k*A+m*K+l*d;b[2]=p*y+n*
+B+t*E+r*M;b[6]=p*w+n*C+t*G+r*N;b[10]=p*D+n*H+t*I+r*R;b[14]=p*F+n*A+t*K+r*d;b[3]=v*y+x*B+z*E+c*M;b[7]=v*w+x*C+z*G+c*N;b[11]=v*D+x*H+z*I+c*R;b[15]=v*F+x*A+z*K+c*d;return this},multiplyScalar:function(a){var b=this.elements;b[0]*=a;b[4]*=a;b[8]*=a;b[12]*=a;b[1]*=a;b[5]*=a;b[9]*=a;b[13]*=a;b[2]*=a;b[6]*=a;b[10]*=a;b[14]*=a;b[3]*=a;b[7]*=a;b[11]*=a;b[15]*=a;return this},applyToBufferAttribute:function(){var a=new n;return function(b){for(var c=0,d=b.count;c<d;c++)a.x=b.getX(c),a.y=b.getY(c),a.z=b.getZ(c),
 a.applyMatrix4(this),b.setXYZ(c,a.x,a.y,a.z);return b}}(),determinant:function(){var a=this.elements,b=a[0],c=a[4],d=a[8],e=a[12],f=a[1],g=a[5],h=a[9],k=a[13],m=a[2],l=a[6],p=a[10],n=a[14];return a[3]*(+e*h*l-d*k*l-e*g*p+c*k*p+d*g*n-c*h*n)+a[7]*(+b*h*n-b*k*p+e*f*p-d*f*n+d*k*m-e*h*m)+a[11]*(+b*k*l-b*g*n-e*f*l+c*f*n+e*g*m-c*k*m)+a[15]*(-d*g*m-b*h*l+b*g*p+d*f*l-c*f*p+c*h*m)},transpose:function(){var a=this.elements;var b=a[1];a[1]=a[4];a[4]=b;b=a[2];a[2]=a[8];a[8]=b;b=a[6];a[6]=a[9];a[9]=b;b=a[3];a[3]=
-a[12];a[12]=b;b=a[7];a[7]=a[13];a[13]=b;b=a[11];a[11]=a[14];a[14]=b;return this},setPosition:function(a,b,c){var d=this.elements;a.isVector3?(d[12]=a.x,d[13]=a.y,d[14]=a.z):(d[12]=a,d[13]=b,d[14]=c);return this},getInverse:function(a,b){var c=this.elements,d=a.elements;a=d[0];var e=d[1],f=d[2],g=d[3],h=d[4],k=d[5],m=d[6],l=d[7],p=d[8],n=d[9],t=d[10],r=d[11],u=d[12],x=d[13],z=d[14];d=d[15];var y=n*z*l-x*t*l+x*m*r-k*z*r-n*m*d+k*t*d,w=u*t*l-p*z*l-u*m*r+h*z*r+p*m*d-h*t*d,D=p*x*l-u*n*l+u*k*r-h*x*r-p*k*
-d+h*n*d,F=u*n*m-p*x*m-u*k*t+h*x*t+p*k*z-h*n*z,B=a*y+e*w+f*D+g*F;if(0===B){if(!0===b)throw Error("THREE.Matrix4: .getInverse() can't invert matrix, determinant is 0");console.warn("THREE.Matrix4: .getInverse() can't invert matrix, determinant is 0");return this.identity()}b=1/B;c[0]=y*b;c[1]=(x*t*g-n*z*g-x*f*r+e*z*r+n*f*d-e*t*d)*b;c[2]=(k*z*g-x*m*g+x*f*l-e*z*l-k*f*d+e*m*d)*b;c[3]=(n*m*g-k*t*g-n*f*l+e*t*l+k*f*r-e*m*r)*b;c[4]=w*b;c[5]=(p*z*g-u*t*g+u*f*r-a*z*r-p*f*d+a*t*d)*b;c[6]=(u*m*g-h*z*g-u*f*l+a*
-z*l+h*f*d-a*m*d)*b;c[7]=(h*t*g-p*m*g+p*f*l-a*t*l-h*f*r+a*m*r)*b;c[8]=D*b;c[9]=(u*n*g-p*x*g-u*e*r+a*x*r+p*e*d-a*n*d)*b;c[10]=(h*x*g-u*k*g+u*e*l-a*x*l-h*e*d+a*k*d)*b;c[11]=(p*k*g-h*n*g-p*e*l+a*n*l+h*e*r-a*k*r)*b;c[12]=F*b;c[13]=(p*x*f-u*n*f+u*e*t-a*x*t-p*e*z+a*n*z)*b;c[14]=(u*k*f-h*x*f-u*e*m+a*x*m+h*e*z-a*k*z)*b;c[15]=(h*n*f-p*k*f+p*e*m-a*n*m-h*e*t+a*k*t)*b;return this},scale:function(a){var b=this.elements,c=a.x,d=a.y;a=a.z;b[0]*=c;b[4]*=d;b[8]*=a;b[1]*=c;b[5]*=d;b[9]*=a;b[2]*=c;b[6]*=d;b[10]*=a;b[3]*=
+a[12];a[12]=b;b=a[7];a[7]=a[13];a[13]=b;b=a[11];a[11]=a[14];a[14]=b;return this},setPosition:function(a,b,c){var d=this.elements;a.isVector3?(d[12]=a.x,d[13]=a.y,d[14]=a.z):(d[12]=a,d[13]=b,d[14]=c);return this},getInverse:function(a,b){var c=this.elements,d=a.elements;a=d[0];var e=d[1],f=d[2],g=d[3],h=d[4],k=d[5],m=d[6],l=d[7],p=d[8],n=d[9],t=d[10],r=d[11],v=d[12],x=d[13],z=d[14];d=d[15];var y=n*z*l-x*t*l+x*m*r-k*z*r-n*m*d+k*t*d,w=v*t*l-p*z*l-v*m*r+h*z*r+p*m*d-h*t*d,D=p*x*l-v*n*l+v*k*r-h*x*r-p*k*
+d+h*n*d,F=v*n*m-p*x*m-v*k*t+h*x*t+p*k*z-h*n*z,B=a*y+e*w+f*D+g*F;if(0===B){if(!0===b)throw Error("THREE.Matrix4: .getInverse() can't invert matrix, determinant is 0");console.warn("THREE.Matrix4: .getInverse() can't invert matrix, determinant is 0");return this.identity()}b=1/B;c[0]=y*b;c[1]=(x*t*g-n*z*g-x*f*r+e*z*r+n*f*d-e*t*d)*b;c[2]=(k*z*g-x*m*g+x*f*l-e*z*l-k*f*d+e*m*d)*b;c[3]=(n*m*g-k*t*g-n*f*l+e*t*l+k*f*r-e*m*r)*b;c[4]=w*b;c[5]=(p*z*g-v*t*g+v*f*r-a*z*r-p*f*d+a*t*d)*b;c[6]=(v*m*g-h*z*g-v*f*l+a*
+z*l+h*f*d-a*m*d)*b;c[7]=(h*t*g-p*m*g+p*f*l-a*t*l-h*f*r+a*m*r)*b;c[8]=D*b;c[9]=(v*n*g-p*x*g-v*e*r+a*x*r+p*e*d-a*n*d)*b;c[10]=(h*x*g-v*k*g+v*e*l-a*x*l-h*e*d+a*k*d)*b;c[11]=(p*k*g-h*n*g-p*e*l+a*n*l+h*e*r-a*k*r)*b;c[12]=F*b;c[13]=(p*x*f-v*n*f+v*e*t-a*x*t-p*e*z+a*n*z)*b;c[14]=(v*k*f-h*x*f-v*e*m+a*x*m+h*e*z-a*k*z)*b;c[15]=(h*n*f-p*k*f+p*e*m-a*n*m-h*e*t+a*k*t)*b;return this},scale:function(a){var b=this.elements,c=a.x,d=a.y;a=a.z;b[0]*=c;b[4]*=d;b[8]*=a;b[1]*=c;b[5]*=d;b[9]*=a;b[2]*=c;b[6]*=d;b[10]*=a;b[3]*=
 c;b[7]*=d;b[11]*=a;return this},getMaxScaleOnAxis:function(){var a=this.elements;return Math.sqrt(Math.max(a[0]*a[0]+a[1]*a[1]+a[2]*a[2],a[4]*a[4]+a[5]*a[5]+a[6]*a[6],a[8]*a[8]+a[9]*a[9]+a[10]*a[10]))},makeTranslation:function(a,b,c){this.set(1,0,0,a,0,1,0,b,0,0,1,c,0,0,0,1);return this},makeRotationX:function(a){var b=Math.cos(a);a=Math.sin(a);this.set(1,0,0,0,0,b,-a,0,0,a,b,0,0,0,0,1);return this},makeRotationY:function(a){var b=Math.cos(a);a=Math.sin(a);this.set(b,0,a,0,0,1,0,0,-a,0,b,0,0,0,0,
 1);return this},makeRotationZ:function(a){var b=Math.cos(a);a=Math.sin(a);this.set(b,-a,0,0,a,b,0,0,0,0,1,0,0,0,0,1);return this},makeRotationAxis:function(a,b){var c=Math.cos(b);b=Math.sin(b);var d=1-c,e=a.x,f=a.y;a=a.z;var g=d*e,h=d*f;this.set(g*e+c,g*f-b*a,g*a+b*f,0,g*f+b*a,h*f+c,h*a-b*e,0,g*a-b*f,h*a+b*e,d*a*a+c,0,0,0,0,1);return this},makeScale:function(a,b,c){this.set(a,0,0,0,0,b,0,0,0,0,c,0,0,0,0,1);return this},makeShear:function(a,b,c){this.set(1,b,c,0,a,1,c,0,a,b,1,0,0,0,0,1);return this},
 compose:function(a,b,c){var d=this.elements,e=b._x,f=b._y,g=b._z,h=b._w,k=e+e,m=f+f,l=g+g;b=e*k;var p=e*m;e*=l;var n=f*m;f*=l;g*=l;k*=h;m*=h;h*=l;l=c.x;var t=c.y;c=c.z;d[0]=(1-(n+g))*l;d[1]=(p+h)*l;d[2]=(e-m)*l;d[3]=0;d[4]=(p-h)*t;d[5]=(1-(b+g))*t;d[6]=(f+k)*t;d[7]=0;d[8]=(e+m)*c;d[9]=(f-k)*c;d[10]=(1-(b+n))*c;d[11]=0;d[12]=a.x;d[13]=a.y;d[14]=a.z;d[15]=1;return this},decompose:function(){var a=new n,b=new N;return function(c,d,e){var f=this.elements,g=a.set(f[0],f[1],f[2]).length(),h=a.set(f[4],
@@ -540,7 +540,7 @@ applyMatrix:function(a){for(var b=(new pa).getNormalMatrix(a),c=0,d=this.vertice
 new N;return function(b){a.makeRotationX(b);this.applyMatrix(a);return this}}(),rotateY:function(){var a=new N;return function(b){a.makeRotationY(b);this.applyMatrix(a);return this}}(),rotateZ:function(){var a=new N;return function(b){a.makeRotationZ(b);this.applyMatrix(a);return this}}(),translate:function(){var a=new N;return function(b,c,d){a.makeTranslation(b,c,d);this.applyMatrix(a);return this}}(),scale:function(){var a=new N;return function(b,c,d){a.makeScale(b,c,d);this.applyMatrix(a);return this}}(),
 lookAt:function(){var a=new G;return function(b){a.lookAt(b);a.updateMatrix();this.applyMatrix(a.matrix)}}(),fromBufferGeometry:function(a){function b(a,b,d,e){var f=void 0===h?[]:[c.colors[a].clone(),c.colors[b].clone(),c.colors[d].clone()],l=void 0===g?[]:[(new n).fromArray(g,3*a),(new n).fromArray(g,3*b),(new n).fromArray(g,3*d)];e=new Tb(a,b,d,l,f,e);c.faces.push(e);void 0!==k&&c.faceVertexUvs[0].push([(new B).fromArray(k,2*a),(new B).fromArray(k,2*b),(new B).fromArray(k,2*d)]);void 0!==m&&c.faceVertexUvs[1].push([(new B).fromArray(m,
 2*a),(new B).fromArray(m,2*b),(new B).fromArray(m,2*d)])}var c=this,d=null!==a.index?a.index.array:void 0,e=a.attributes,f=e.position.array,g=void 0!==e.normal?e.normal.array:void 0,h=void 0!==e.color?e.color.array:void 0,k=void 0!==e.uv?e.uv.array:void 0,m=void 0!==e.uv2?e.uv2.array:void 0;void 0!==m&&(this.faceVertexUvs[1]=[]);for(e=0;e<f.length;e+=3)c.vertices.push((new n).fromArray(f,e)),void 0!==h&&c.colors.push((new C).fromArray(h,e));var l=a.groups;if(0<l.length)for(e=0;e<l.length;e++){f=l[e];
-var p=f.start,v=p;for(p+=f.count;v<p;v+=3)void 0!==d?b(d[v],d[v+1],d[v+2],f.materialIndex):b(v,v+1,v+2,f.materialIndex)}else if(void 0!==d)for(e=0;e<d.length;e+=3)b(d[e],d[e+1],d[e+2]);else for(e=0;e<f.length/3;e+=3)b(e,e+1,e+2);this.computeFaceNormals();null!==a.boundingBox&&(this.boundingBox=a.boundingBox.clone());null!==a.boundingSphere&&(this.boundingSphere=a.boundingSphere.clone());return this},center:function(){var a=new n;return function(){this.computeBoundingBox();this.boundingBox.getCenter(a).negate();
+var p=f.start,u=p;for(p+=f.count;u<p;u+=3)void 0!==d?b(d[u],d[u+1],d[u+2],f.materialIndex):b(u,u+1,u+2,f.materialIndex)}else if(void 0!==d)for(e=0;e<d.length;e+=3)b(d[e],d[e+1],d[e+2]);else for(e=0;e<f.length/3;e+=3)b(e,e+1,e+2);this.computeFaceNormals();null!==a.boundingBox&&(this.boundingBox=a.boundingBox.clone());null!==a.boundingSphere&&(this.boundingSphere=a.boundingSphere.clone());return this},center:function(){var a=new n;return function(){this.computeBoundingBox();this.boundingBox.getCenter(a).negate();
 this.translate(a.x,a.y,a.z);return this}}(),normalize:function(){this.computeBoundingSphere();var a=this.boundingSphere.center,b=this.boundingSphere.radius;b=0===b?1:1/b;var c=new N;c.set(b,0,0,-b*a.x,0,b,0,-b*a.y,0,0,b,-b*a.z,0,0,0,1);this.applyMatrix(c);return this},computeFaceNormals:function(){for(var a=new n,b=new n,c=0,d=this.faces.length;c<d;c++){var e=this.faces[c],f=this.vertices[e.a],g=this.vertices[e.b];a.subVectors(this.vertices[e.c],g);b.subVectors(f,g);a.cross(b);a.normalize();e.normal.copy(a)}},
 computeVertexNormals:function(a){void 0===a&&(a=!0);var b;var c=Array(this.vertices.length);var d=0;for(b=this.vertices.length;d<b;d++)c[d]=new n;if(a){var e=new n,f=new n;a=0;for(d=this.faces.length;a<d;a++){b=this.faces[a];var g=this.vertices[b.a];var h=this.vertices[b.b];var k=this.vertices[b.c];e.subVectors(k,h);f.subVectors(g,h);e.cross(f);c[b.a].add(e);c[b.b].add(e);c[b.c].add(e)}}else for(this.computeFaceNormals(),a=0,d=this.faces.length;a<d;a++)b=this.faces[a],c[b.a].add(b.normal),c[b.b].add(b.normal),
 c[b.c].add(b.normal);d=0;for(b=this.vertices.length;d<b;d++)c[d].normalize();a=0;for(d=this.faces.length;a<d;a++)b=this.faces[a],g=b.vertexNormals,3===g.length?(g[0].copy(c[b.a]),g[1].copy(c[b.b]),g[2].copy(c[b.c])):(g[0]=c[b.a].clone(),g[1]=c[b.b].clone(),g[2]=c[b.c].clone());0<this.faces.length&&(this.normalsNeedUpdate=!0)},computeFlatVertexNormals:function(){var a;this.computeFaceNormals();var b=0;for(a=this.faces.length;b<a;b++){var c=this.faces[b];var d=c.vertexNormals;3===d.length?(d[0].copy(c.normal),
@@ -548,13 +548,13 @@ d[1].copy(c.normal),d[2].copy(c.normal)):(d[0]=c.normal.clone(),d[1]=c.normal.cl
 d.__originalVertexNormals[e]=d.vertexNormals[e].clone()}var f=new Q;f.faces=this.faces;e=0;for(a=this.morphTargets.length;e<a;e++){if(!this.morphNormals[e]){this.morphNormals[e]={};this.morphNormals[e].faceNormals=[];this.morphNormals[e].vertexNormals=[];d=this.morphNormals[e].faceNormals;var g=this.morphNormals[e].vertexNormals;c=0;for(b=this.faces.length;c<b;c++){var h=new n;var k={a:new n,b:new n,c:new n};d.push(h);g.push(k)}}g=this.morphNormals[e];f.vertices=this.morphTargets[e].vertices;f.computeFaceNormals();
 f.computeVertexNormals();c=0;for(b=this.faces.length;c<b;c++)d=this.faces[c],h=g.faceNormals[c],k=g.vertexNormals[c],h.copy(d.normal),k.a.copy(d.vertexNormals[0]),k.b.copy(d.vertexNormals[1]),k.c.copy(d.vertexNormals[2])}c=0;for(b=this.faces.length;c<b;c++)d=this.faces[c],d.normal=d.__originalFaceNormal,d.vertexNormals=d.__originalVertexNormals},computeBoundingBox:function(){null===this.boundingBox&&(this.boundingBox=new Ha);this.boundingBox.setFromPoints(this.vertices)},computeBoundingSphere:function(){null===
 this.boundingSphere&&(this.boundingSphere=new Ta);this.boundingSphere.setFromPoints(this.vertices)},merge:function(a,b,c){if(a&&a.isGeometry){var d,e=this.vertices.length,f=this.vertices,g=a.vertices,h=this.faces,k=a.faces,m=this.faceVertexUvs[0],l=a.faceVertexUvs[0],p=this.colors,n=a.colors;void 0===c&&(c=0);void 0!==b&&(d=(new pa).getNormalMatrix(b));a=0;for(var t=g.length;a<t;a++){var r=g[a].clone();void 0!==b&&r.applyMatrix4(b);f.push(r)}a=0;for(t=n.length;a<t;a++)p.push(n[a].clone());a=0;for(t=
-k.length;a<t;a++){g=k[a];var u=g.vertexNormals;n=g.vertexColors;p=new Tb(g.a+e,g.b+e,g.c+e);p.normal.copy(g.normal);void 0!==d&&p.normal.applyMatrix3(d).normalize();b=0;for(f=u.length;b<f;b++)r=u[b].clone(),void 0!==d&&r.applyMatrix3(d).normalize(),p.vertexNormals.push(r);p.color.copy(g.color);b=0;for(f=n.length;b<f;b++)r=n[b],p.vertexColors.push(r.clone());p.materialIndex=g.materialIndex+c;h.push(p)}a=0;for(t=l.length;a<t;a++)if(c=l[a],d=[],void 0!==c){b=0;for(f=c.length;b<f;b++)d.push(c[b].clone());
+k.length;a<t;a++){g=k[a];var v=g.vertexNormals;n=g.vertexColors;p=new Tb(g.a+e,g.b+e,g.c+e);p.normal.copy(g.normal);void 0!==d&&p.normal.applyMatrix3(d).normalize();b=0;for(f=v.length;b<f;b++)r=v[b].clone(),void 0!==d&&r.applyMatrix3(d).normalize(),p.vertexNormals.push(r);p.color.copy(g.color);b=0;for(f=n.length;b<f;b++)r=n[b],p.vertexColors.push(r.clone());p.materialIndex=g.materialIndex+c;h.push(p)}a=0;for(t=l.length;a<t;a++)if(c=l[a],d=[],void 0!==c){b=0;for(f=c.length;b<f;b++)d.push(c[b].clone());
 m.push(d)}}else console.error("THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.",a)},mergeMesh:function(a){a&&a.isMesh?(a.matrixAutoUpdate&&a.updateMatrix(),this.merge(a.geometry,a.matrix)):console.error("THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.",a)},mergeVertices:function(){var a={},b=[],c=[],d=Math.pow(10,4),e;var f=0;for(e=this.vertices.length;f<e;f++){var g=this.vertices[f];g=Math.round(g.x*d)+"_"+Math.round(g.y*d)+"_"+Math.round(g.z*d);void 0===a[g]?
 (a[g]=f,b.push(this.vertices[f]),c[f]=b.length-1):c[f]=c[a[g]]}a=[];f=0;for(e=this.faces.length;f<e;f++)for(d=this.faces[f],d.a=c[d.a],d.b=c[d.b],d.c=c[d.c],d=[d.a,d.b,d.c],g=0;3>g;g++)if(d[g]===d[(g+1)%3]){a.push(f);break}for(f=a.length-1;0<=f;f--)for(d=a[f],this.faces.splice(d,1),c=0,e=this.faceVertexUvs.length;c<e;c++)this.faceVertexUvs[c].splice(d,1);f=this.vertices.length-b.length;this.vertices=b;return f},setFromPoints:function(a){this.vertices=[];for(var b=0,c=a.length;b<c;b++){var d=a[b];
 this.vertices.push(new n(d.x,d.y,d.z||0))}return this},sortFacesByMaterialIndex:function(){for(var a=this.faces,b=a.length,c=0;c<b;c++)a[c]._id=c;a.sort(function(a,b){return a.materialIndex-b.materialIndex});var d=this.faceVertexUvs[0],e=this.faceVertexUvs[1],f,g;d&&d.length===b&&(f=[]);e&&e.length===b&&(g=[]);for(c=0;c<b;c++){var h=a[c]._id;f&&f.push(d[h]);g&&g.push(e[h])}f&&(this.faceVertexUvs[0]=f);g&&(this.faceVertexUvs[1]=g)},toJSON:function(){function a(a,b,c){return c?a|1<<b:a&~(1<<b)}function b(a){var b=
 a.x.toString()+a.y.toString()+a.z.toString();if(void 0!==m[b])return m[b];m[b]=k.length/3;k.push(a.x,a.y,a.z);return m[b]}function c(a){var b=a.r.toString()+a.g.toString()+a.b.toString();if(void 0!==p[b])return p[b];p[b]=l.length;l.push(a.getHex());return p[b]}function d(a){var b=a.x.toString()+a.y.toString();if(void 0!==t[b])return t[b];t[b]=n.length/2;n.push(a.x,a.y);return t[b]}var e={metadata:{version:4.5,type:"Geometry",generator:"Geometry.toJSON"}};e.uuid=this.uuid;e.type=this.type;""!==this.name&&
-(e.name=this.name);if(void 0!==this.parameters){var f=this.parameters,g;for(g in f)void 0!==f[g]&&(e[g]=f[g]);return e}f=[];for(g=0;g<this.vertices.length;g++){var h=this.vertices[g];f.push(h.x,h.y,h.z)}h=[];var k=[],m={},l=[],p={},n=[],t={};for(g=0;g<this.faces.length;g++){var r=this.faces[g],u=void 0!==this.faceVertexUvs[0][g],x=0<r.normal.length(),z=0<r.vertexNormals.length,y=1!==r.color.r||1!==r.color.g||1!==r.color.b,w=0<r.vertexColors.length,D=0;D=a(D,0,0);D=a(D,1,!0);D=a(D,2,!1);D=a(D,3,u);
-D=a(D,4,x);D=a(D,5,z);D=a(D,6,y);D=a(D,7,w);h.push(D);h.push(r.a,r.b,r.c);h.push(r.materialIndex);u&&(u=this.faceVertexUvs[0][g],h.push(d(u[0]),d(u[1]),d(u[2])));x&&h.push(b(r.normal));z&&(x=r.vertexNormals,h.push(b(x[0]),b(x[1]),b(x[2])));y&&h.push(c(r.color));w&&(r=r.vertexColors,h.push(c(r[0]),c(r[1]),c(r[2])))}e.data={};e.data.vertices=f;e.data.normals=k;0<l.length&&(e.data.colors=l);0<n.length&&(e.data.uvs=[n]);e.data.faces=h;return e},clone:function(){return(new Q).copy(this)},copy:function(a){var b,
+(e.name=this.name);if(void 0!==this.parameters){var f=this.parameters,g;for(g in f)void 0!==f[g]&&(e[g]=f[g]);return e}f=[];for(g=0;g<this.vertices.length;g++){var h=this.vertices[g];f.push(h.x,h.y,h.z)}h=[];var k=[],m={},l=[],p={},n=[],t={};for(g=0;g<this.faces.length;g++){var r=this.faces[g],v=void 0!==this.faceVertexUvs[0][g],x=0<r.normal.length(),z=0<r.vertexNormals.length,y=1!==r.color.r||1!==r.color.g||1!==r.color.b,w=0<r.vertexColors.length,D=0;D=a(D,0,0);D=a(D,1,!0);D=a(D,2,!1);D=a(D,3,v);
+D=a(D,4,x);D=a(D,5,z);D=a(D,6,y);D=a(D,7,w);h.push(D);h.push(r.a,r.b,r.c);h.push(r.materialIndex);v&&(v=this.faceVertexUvs[0][g],h.push(d(v[0]),d(v[1]),d(v[2])));x&&h.push(b(r.normal));z&&(x=r.vertexNormals,h.push(b(x[0]),b(x[1]),b(x[2])));y&&h.push(c(r.color));w&&(r=r.vertexColors,h.push(c(r[0]),c(r[1]),c(r[2])))}e.data={};e.data.vertices=f;e.data.normals=k;0<l.length&&(e.data.colors=l);0<n.length&&(e.data.uvs=[n]);e.data.faces=h;return e},clone:function(){return(new Q).copy(this)},copy:function(a){var b,
 c,d;this.vertices=[];this.colors=[];this.faces=[];this.faceVertexUvs=[[]];this.morphTargets=[];this.morphNormals=[];this.skinWeights=[];this.skinIndices=[];this.lineDistances=[];this.boundingSphere=this.boundingBox=null;this.name=a.name;var e=a.vertices;var f=0;for(b=e.length;f<b;f++)this.vertices.push(e[f].clone());e=a.colors;f=0;for(b=e.length;f<b;f++)this.colors.push(e[f].clone());e=a.faces;f=0;for(b=e.length;f<b;f++)this.faces.push(e[f].clone());f=0;for(b=a.faceVertexUvs.length;f<b;f++){var g=
 a.faceVertexUvs[f];void 0===this.faceVertexUvs[f]&&(this.faceVertexUvs[f]=[]);e=0;for(c=g.length;e<c;e++){var h=g[e],k=[];var m=0;for(d=h.length;m<d;m++)k.push(h[m].clone());this.faceVertexUvs[f].push(k)}}m=a.morphTargets;f=0;for(b=m.length;f<b;f++){d={};d.name=m[f].name;if(void 0!==m[f].vertices)for(d.vertices=[],e=0,c=m[f].vertices.length;e<c;e++)d.vertices.push(m[f].vertices[e].clone());if(void 0!==m[f].normals)for(d.normals=[],e=0,c=m[f].normals.length;e<c;e++)d.normals.push(m[f].normals[e].clone());
 this.morphTargets.push(d)}m=a.morphNormals;f=0;for(b=m.length;f<b;f++){d={};if(void 0!==m[f].vertexNormals)for(d.vertexNormals=[],e=0,c=m[f].vertexNormals.length;e<c;e++)g=m[f].vertexNormals[e],h={},h.a=g.a.clone(),h.b=g.b.clone(),h.c=g.c.clone(),d.vertexNormals.push(h);if(void 0!==m[f].faceNormals)for(d.faceNormals=[],e=0,c=m[f].faceNormals.length;e<c;e++)d.faceNormals.push(m[f].faceNormals[e].clone());this.morphNormals.push(d)}e=a.skinWeights;f=0;for(b=e.length;f<b;f++)this.skinWeights.push(e[f].clone());
@@ -567,9 +567,9 @@ b[c++]=f.z}return this},copyVector4sArray:function(a){for(var b=this.array,c=0,d
 setXYZW:function(a,b,c,d,e){a*=this.itemSize;this.array[a+0]=b;this.array[a+1]=c;this.array[a+2]=d;this.array[a+3]=e;return this},onUpload:function(a){this.onUploadCallback=a;return this},clone:function(){return(new this.constructor(this.array,this.itemSize)).copy(this)},toJSON:function(){return{itemSize:this.itemSize,type:this.array.constructor.name,array:Array.prototype.slice.call(this.array),normalized:this.normalized}}});Cc.prototype=Object.create(I.prototype);Cc.prototype.constructor=Cc;Dc.prototype=
 Object.create(I.prototype);Dc.prototype.constructor=Dc;Ec.prototype=Object.create(I.prototype);Ec.prototype.constructor=Ec;Fc.prototype=Object.create(I.prototype);Fc.prototype.constructor=Fc;tb.prototype=Object.create(I.prototype);tb.prototype.constructor=tb;Gc.prototype=Object.create(I.prototype);Gc.prototype.constructor=Gc;ub.prototype=Object.create(I.prototype);ub.prototype.constructor=ub;A.prototype=Object.create(I.prototype);A.prototype.constructor=A;Hc.prototype=Object.create(I.prototype);Hc.prototype.constructor=
 Hc;Object.assign(Ye.prototype,{computeGroups:function(a){var b=[],c=void 0;a=a.faces;for(var d=0;d<a.length;d++){var e=a[d];if(e.materialIndex!==c){c=e.materialIndex;void 0!==f&&(f.count=3*d-f.start,b.push(f));var f={start:3*d,materialIndex:c}}}void 0!==f&&(f.count=3*d-f.start,b.push(f));this.groups=b},fromGeometry:function(a){var b=a.faces,c=a.vertices,d=a.faceVertexUvs,e=d[0]&&0<d[0].length,f=d[1]&&0<d[1].length,g=a.morphTargets,h=g.length;if(0<h){var k=[];for(var m=0;m<h;m++)k[m]={name:g[m].name,
-data:[]};this.morphTargets.position=k}var l=a.morphNormals,p=l.length;if(0<p){var n=[];for(m=0;m<p;m++)n[m]={name:l[m].name,data:[]};this.morphTargets.normal=n}var t=a.skinIndices,r=a.skinWeights,u=t.length===c.length,x=r.length===c.length;0<c.length&&0===b.length&&console.error("THREE.DirectGeometry: Faceless geometries are not supported.");for(m=0;m<b.length;m++){var z=b[m];this.vertices.push(c[z.a],c[z.b],c[z.c]);var y=z.vertexNormals;3===y.length?this.normals.push(y[0],y[1],y[2]):(y=z.normal,
+data:[]};this.morphTargets.position=k}var l=a.morphNormals,p=l.length;if(0<p){var n=[];for(m=0;m<p;m++)n[m]={name:l[m].name,data:[]};this.morphTargets.normal=n}var t=a.skinIndices,r=a.skinWeights,v=t.length===c.length,x=r.length===c.length;0<c.length&&0===b.length&&console.error("THREE.DirectGeometry: Faceless geometries are not supported.");for(m=0;m<b.length;m++){var z=b[m];this.vertices.push(c[z.a],c[z.b],c[z.c]);var y=z.vertexNormals;3===y.length?this.normals.push(y[0],y[1],y[2]):(y=z.normal,
 this.normals.push(y,y,y));y=z.vertexColors;3===y.length?this.colors.push(y[0],y[1],y[2]):(y=z.color,this.colors.push(y,y,y));!0===e&&(y=d[0][m],void 0!==y?this.uvs.push(y[0],y[1],y[2]):(console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ",m),this.uvs.push(new B,new B,new B)));!0===f&&(y=d[1][m],void 0!==y?this.uvs2.push(y[0],y[1],y[2]):(console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ",m),this.uvs2.push(new B,new B,new B)));for(y=0;y<h;y++){var w=g[y].vertices;
-k[y].data.push(w[z.a],w[z.b],w[z.c])}for(y=0;y<p;y++)w=l[y].vertexNormals[m],n[y].data.push(w.a,w.b,w.c);u&&this.skinIndices.push(t[z.a],t[z.b],t[z.c]);x&&this.skinWeights.push(r[z.a],r[z.b],r[z.c])}this.computeGroups(a);this.verticesNeedUpdate=a.verticesNeedUpdate;this.normalsNeedUpdate=a.normalsNeedUpdate;this.colorsNeedUpdate=a.colorsNeedUpdate;this.uvsNeedUpdate=a.uvsNeedUpdate;this.groupsNeedUpdate=a.groupsNeedUpdate;return this}});var cg=1;E.prototype=Object.assign(Object.create(za.prototype),
+k[y].data.push(w[z.a],w[z.b],w[z.c])}for(y=0;y<p;y++)w=l[y].vertexNormals[m],n[y].data.push(w.a,w.b,w.c);v&&this.skinIndices.push(t[z.a],t[z.b],t[z.c]);x&&this.skinWeights.push(r[z.a],r[z.b],r[z.c])}this.computeGroups(a);this.verticesNeedUpdate=a.verticesNeedUpdate;this.normalsNeedUpdate=a.normalsNeedUpdate;this.colorsNeedUpdate=a.colorsNeedUpdate;this.uvsNeedUpdate=a.uvsNeedUpdate;this.groupsNeedUpdate=a.groupsNeedUpdate;return this}});var cg=1;E.prototype=Object.assign(Object.create(za.prototype),
 {constructor:E,isBufferGeometry:!0,getIndex:function(){return this.index},setIndex:function(a){Array.isArray(a)?this.index=new (65535<Ze(a)?ub:tb)(a,1):this.index=a},addAttribute:function(a,b,c){if(!(b&&b.isBufferAttribute||b&&b.isInterleavedBufferAttribute))return console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )."),this.addAttribute(a,new I(b,c));if("index"===a)return console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute."),this.setIndex(b),
 this;this.attributes[a]=b;return this},getAttribute:function(a){return this.attributes[a]},removeAttribute:function(a){delete this.attributes[a];return this},addGroup:function(a,b,c){this.groups.push({start:a,count:b,materialIndex:void 0!==c?c:0})},clearGroups:function(){this.groups=[]},setDrawRange:function(a,b){this.drawRange.start=a;this.drawRange.count=b},applyMatrix:function(a){var b=this.attributes.position;void 0!==b&&(a.applyToBufferAttribute(b),b.needsUpdate=!0);var c=this.attributes.normal;
 void 0!==c&&(b=(new pa).getNormalMatrix(a),b.applyToBufferAttribute(c),c.needsUpdate=!0);c=this.attributes.tangent;void 0!==c&&(b=(new pa).getNormalMatrix(a),b.applyToBufferAttribute(c),c.needsUpdate=!0);null!==this.boundingBox&&this.computeBoundingBox();null!==this.boundingSphere&&this.computeBoundingSphere();return this},rotateX:function(){var a=new N;return function(b){a.makeRotationX(b);this.applyMatrix(a);return this}}(),rotateY:function(){var a=new N;return function(b){a.makeRotationY(b);this.applyMatrix(a);
@@ -584,7 +584,7 @@ b}0<a.skinIndices.length&&(c=new A(4*a.skinIndices.length,4),this.addAttribute("
 new Ha);var b=this.attributes.position,c=this.morphAttributes.position;if(void 0!==b){if(this.boundingBox.setFromBufferAttribute(b),c){b=0;for(var d=c.length;b<d;b++)a.setFromBufferAttribute(c[b]),this.boundingBox.expandByPoint(a.min),this.boundingBox.expandByPoint(a.max)}}else this.boundingBox.makeEmpty();(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))&&console.error('THREE.BufferGeometry.computeBoundingBox: Computed min/max have NaN values. The "position" attribute is likely to have NaN values.',
 this)}}(),computeBoundingSphere:function(){var a=new Ha,b=new Ha,c=new n;return function(){null===this.boundingSphere&&(this.boundingSphere=new Ta);var d=this.attributes.position,e=this.morphAttributes.position;if(d){var f=this.boundingSphere.center;a.setFromBufferAttribute(d);if(e)for(var g=0,h=e.length;g<h;g++){var k=e[g];b.setFromBufferAttribute(k);a.expandByPoint(b.min);a.expandByPoint(b.max)}a.getCenter(f);var m=0;g=0;for(h=d.count;g<h;g++)c.fromBufferAttribute(d,g),m=Math.max(m,f.distanceToSquared(c));
 if(e)for(g=0,h=e.length;g<h;g++){k=e[g];d=0;for(var l=k.count;d<l;d++)c.fromBufferAttribute(k,d),m=Math.max(m,f.distanceToSquared(c))}this.boundingSphere.radius=Math.sqrt(m);isNaN(this.boundingSphere.radius)&&console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',this)}}}(),computeFaceNormals:function(){},computeVertexNormals:function(){var a=this.index,b=this.attributes;if(b.position){var c=b.position.array;if(void 0===
-b.normal)this.addAttribute("normal",new I(new Float32Array(c.length),3));else for(var d=b.normal.array,e=0,f=d.length;e<f;e++)d[e]=0;d=b.normal.array;var g=new n,h=new n,k=new n,m=new n,l=new n;if(a){var p=a.array;e=0;for(f=a.count;e<f;e+=3){a=3*p[e+0];var v=3*p[e+1];var t=3*p[e+2];g.fromArray(c,a);h.fromArray(c,v);k.fromArray(c,t);m.subVectors(k,h);l.subVectors(g,h);m.cross(l);d[a]+=m.x;d[a+1]+=m.y;d[a+2]+=m.z;d[v]+=m.x;d[v+1]+=m.y;d[v+2]+=m.z;d[t]+=m.x;d[t+1]+=m.y;d[t+2]+=m.z}}else for(e=0,f=c.length;e<
+b.normal)this.addAttribute("normal",new I(new Float32Array(c.length),3));else for(var d=b.normal.array,e=0,f=d.length;e<f;e++)d[e]=0;d=b.normal.array;var g=new n,h=new n,k=new n,m=new n,l=new n;if(a){var p=a.array;e=0;for(f=a.count;e<f;e+=3){a=3*p[e+0];var u=3*p[e+1];var t=3*p[e+2];g.fromArray(c,a);h.fromArray(c,u);k.fromArray(c,t);m.subVectors(k,h);l.subVectors(g,h);m.cross(l);d[a]+=m.x;d[a+1]+=m.y;d[a+2]+=m.z;d[u]+=m.x;d[u+1]+=m.y;d[u+2]+=m.z;d[t]+=m.x;d[t+1]+=m.y;d[t+2]+=m.z}}else for(e=0,f=c.length;e<
 f;e+=9)g.fromArray(c,e),h.fromArray(c,e+3),k.fromArray(c,e+6),m.subVectors(k,h),l.subVectors(g,h),m.cross(l),d[e]=m.x,d[e+1]=m.y,d[e+2]=m.z,d[e+3]=m.x,d[e+4]=m.y,d[e+5]=m.z,d[e+6]=m.x,d[e+7]=m.y,d[e+8]=m.z;this.normalizeNormals();b.normal.needsUpdate=!0}},merge:function(a,b){if(a&&a.isBufferGeometry){void 0===b&&(b=0,console.warn("THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge."));var c=this.attributes,
 d;for(d in c)if(void 0!==a.attributes[d]){var e=c[d].array,f=a.attributes[d],g=f.array,h=f.itemSize*b;f=Math.min(g.length,e.length-h);for(var k=0;k<f;k++,h++)e[h]=g[k]}return this}console.error("THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.",a)},normalizeNormals:function(){var a=new n;return function(){for(var b=this.attributes.normal,c=0,d=b.count;c<d;c++)a.x=b.getX(c),a.y=b.getY(c),a.z=b.getZ(c),a.normalize(),b.setXYZ(c,a.x,a.y,a.z)}}(),toNonIndexed:function(){function a(a,
 b){var c=a.array;a=a.itemSize;for(var d=new c.constructor(b.length*a),e,f=0,g=0,h=b.length;g<h;g++){e=b[g]*a;for(var k=0;k<a;k++)d[f++]=c[e++]}return new I(d,a)}if(null===this.index)return console.warn("THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed."),this;var b=new E,c=this.index.array,d=this.attributes,e;for(e in d){var f=d[e];f=a(f,c);b.addAttribute(e,f)}var g=this.morphAttributes;for(e in g){var h=[],k=g[e];d=0;for(var m=k.length;d<m;d++)f=k[d],f=a(f,c),h.push(f);b.morphAttributes[e]=
@@ -619,17 +619,17 @@ e,f,g,h){a.subVectors(g,e);b.subVectors(f,e);c.subVectors(d,e);d=a.dot(a);e=a.do
 e,f,g,h,k){this.getBarycoord(b,c,d,e,a);k.set(0,0);k.addScaledVector(f,a.x);k.addScaledVector(g,a.y);k.addScaledVector(h,a.z);return k}}(),isFrontFacing:function(){var a=new n,b=new n;return function(c,d,e,f){a.subVectors(e,d);b.subVectors(c,d);return 0>a.cross(b).dot(f)?!0:!1}}()});Object.assign(aa.prototype,{set:function(a,b,c){this.a.copy(a);this.b.copy(b);this.c.copy(c);return this},setFromPointsAndIndices:function(a,b,c,d){this.a.copy(a[b]);this.b.copy(a[c]);this.c.copy(a[d]);return this},clone:function(){return(new this.constructor).copy(this)},
 copy:function(a){this.a.copy(a.a);this.b.copy(a.b);this.c.copy(a.c);return this},getArea:function(){var a=new n,b=new n;return function(){a.subVectors(this.c,this.b);b.subVectors(this.a,this.b);return.5*a.cross(b).length()}}(),getMidpoint:function(a){void 0===a&&(console.warn("THREE.Triangle: .getMidpoint() target is now required"),a=new n);return a.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},getNormal:function(a){return aa.getNormal(this.a,this.b,this.c,a)},getPlane:function(a){void 0===
 a&&(console.warn("THREE.Triangle: .getPlane() target is now required"),a=new n);return a.setFromCoplanarPoints(this.a,this.b,this.c)},getBarycoord:function(a,b){return aa.getBarycoord(a,this.a,this.b,this.c,b)},containsPoint:function(a){return aa.containsPoint(a,this.a,this.b,this.c)},getUV:function(a,b,c,d,e){return aa.getUV(a,this.a,this.b,this.c,b,c,d,e)},isFrontFacing:function(a){return aa.isFrontFacing(this.a,this.b,this.c,a)},intersectsBox:function(a){return a.intersectsTriangle(this)},closestPointToPoint:function(){var a=
-new n,b=new n,c=new n,d=new n,e=new n,f=new n;return function(g,h){void 0===h&&(console.warn("THREE.Triangle: .closestPointToPoint() target is now required"),h=new n);var k=this.a,m=this.b,l=this.c;a.subVectors(m,k);b.subVectors(l,k);d.subVectors(g,k);var p=a.dot(d),v=b.dot(d);if(0>=p&&0>=v)return h.copy(k);e.subVectors(g,m);var t=a.dot(e),r=b.dot(e);if(0<=t&&r<=t)return h.copy(m);var u=p*r-t*v;if(0>=u&&0<=p&&0>=t)return m=p/(p-t),h.copy(k).addScaledVector(a,m);f.subVectors(g,l);g=a.dot(f);var x=
-b.dot(f);if(0<=x&&g<=x)return h.copy(l);p=g*v-p*x;if(0>=p&&0<=v&&0>=x)return u=v/(v-x),h.copy(k).addScaledVector(b,u);v=t*x-g*r;if(0>=v&&0<=r-t&&0<=g-x)return c.subVectors(l,m),u=(r-t)/(r-t+(g-x)),h.copy(m).addScaledVector(c,u);l=1/(v+p+u);m=p*l;u*=l;return h.copy(k).addScaledVector(a,m).addScaledVector(b,u)}}(),equals:function(a){return a.a.equals(this.a)&&a.b.equals(this.b)&&a.c.equals(this.c)}});xa.prototype=Object.create(O.prototype);xa.prototype.constructor=xa;xa.prototype.isMeshBasicMaterial=
+new n,b=new n,c=new n,d=new n,e=new n,f=new n;return function(g,h){void 0===h&&(console.warn("THREE.Triangle: .closestPointToPoint() target is now required"),h=new n);var k=this.a,m=this.b,l=this.c;a.subVectors(m,k);b.subVectors(l,k);d.subVectors(g,k);var p=a.dot(d),u=b.dot(d);if(0>=p&&0>=u)return h.copy(k);e.subVectors(g,m);var t=a.dot(e),r=b.dot(e);if(0<=t&&r<=t)return h.copy(m);var v=p*r-t*u;if(0>=v&&0<=p&&0>=t)return m=p/(p-t),h.copy(k).addScaledVector(a,m);f.subVectors(g,l);g=a.dot(f);var x=
+b.dot(f);if(0<=x&&g<=x)return h.copy(l);p=g*u-p*x;if(0>=p&&0<=u&&0>=x)return v=u/(u-x),h.copy(k).addScaledVector(b,v);u=t*x-g*r;if(0>=u&&0<=r-t&&0<=g-x)return c.subVectors(l,m),v=(r-t)/(r-t+(g-x)),h.copy(m).addScaledVector(c,v);l=1/(u+p+v);m=p*l;v*=l;return h.copy(k).addScaledVector(a,m).addScaledVector(b,v)}}(),equals:function(a){return a.a.equals(this.a)&&a.b.equals(this.b)&&a.c.equals(this.c)}});xa.prototype=Object.create(O.prototype);xa.prototype.constructor=xa;xa.prototype.isMeshBasicMaterial=
 !0;xa.prototype.copy=function(a){O.prototype.copy.call(this,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.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.skinning=a.skinning;this.morphTargets=a.morphTargets;return this};qa.prototype=Object.assign(Object.create(G.prototype),{constructor:qa,isMesh:!0,setDrawMode:function(a){this.drawMode=a},copy:function(a){G.prototype.copy.call(this,a);this.drawMode=a.drawMode;void 0!==a.morphTargetInfluences&&(this.morphTargetInfluences=a.morphTargetInfluences.slice());void 0!==a.morphTargetDictionary&&(this.morphTargetDictionary=Object.assign({},a.morphTargetDictionary));
 return this},updateMorphTargets:function(){var a=this.geometry;if(a.isBufferGeometry){a=a.morphAttributes;var b=Object.keys(a);if(0<b.length){var c=a[b[0]];if(void 0!==c)for(this.morphTargetInfluences=[],this.morphTargetDictionary={},a=0,b=c.length;a<b;a++){var d=c[a].name||String(a);this.morphTargetInfluences.push(0);this.morphTargetDictionary[d]=a}}}else a=a.morphTargets,void 0!==a&&0<a.length&&console.error("THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")},
-raycast:function(){function a(a,b,c,d,e,f,g,h){if(null===(1===b.side?d.intersectTriangle(g,f,e,!0,h):d.intersectTriangle(e,f,g,2!==b.side,h)))return null;y.copy(h);y.applyMatrix4(a.matrixWorld);b=c.ray.origin.distanceTo(y);return b<c.near||b>c.far?null:{distance:b,point:y.clone(),object:a}}function b(b,c,d,e,q,n,y,C,A,E){f.fromBufferAttribute(q,C);g.fromBufferAttribute(q,A);h.fromBufferAttribute(q,E);q=b.morphTargetInfluences;if(c.morphTargets&&n&&q){p.set(0,0,0);v.set(0,0,0);t.set(0,0,0);for(var w=
-0,F=n.length;w<F;w++){var D=q[w],H=n[w];0!==D&&(k.fromBufferAttribute(H,C),m.fromBufferAttribute(H,A),l.fromBufferAttribute(H,E),p.addScaledVector(k.sub(f),D),v.addScaledVector(m.sub(g),D),t.addScaledVector(l.sub(h),D))}f.add(p);g.add(v);h.add(t)}if(b=a(b,c,d,e,f,g,h,z))y&&(r.fromBufferAttribute(y,C),u.fromBufferAttribute(y,A),x.fromBufferAttribute(y,E),b.uv=aa.getUV(z,f,g,h,r,u,x,new B)),y=new Tb(C,A,E),aa.getNormal(f,g,h,y.normal),b.face=y;return b}var c=new N,d=new zb,e=new Ta,f=new n,g=new n,
-h=new n,k=new n,m=new n,l=new n,p=new n,v=new n,t=new n,r=new B,u=new B,x=new B,z=new n,y=new n;return function(f,g){var h=this.geometry,k=this.material,m=this.matrixWorld;if(void 0!==k&&(null===h.boundingSphere&&h.computeBoundingSphere(),e.copy(h.boundingSphere),e.applyMatrix4(m),!1!==f.ray.intersectsSphere(e)&&(c.getInverse(m),d.copy(f.ray).applyMatrix4(c),null===h.boundingBox||!1!==d.intersectsBox(h.boundingBox))))if(h.isBufferGeometry){var l=h.index;m=h.attributes.position;var p=h.morphAttributes.position,
-q=h.attributes.uv,n=h.groups,t=h.drawRange,v,y;if(null!==l)if(Array.isArray(k)){var w=0;for(v=n.length;w<v;w++){var D=n[w];var C=k[D.materialIndex];var A=Math.max(D.start,t.start);for(y=h=Math.min(D.start+D.count,t.start+t.count);A<y;A+=3){h=l.getX(A);var E=l.getX(A+1);var G=l.getX(A+2);if(h=b(this,C,f,d,m,p,q,h,E,G))h.faceIndex=Math.floor(A/3),h.face.materialIndex=D.materialIndex,g.push(h)}}}else for(A=Math.max(0,t.start),h=Math.min(l.count,t.start+t.count),w=A,v=h;w<v;w+=3){if(h=l.getX(w),E=l.getX(w+
-1),G=l.getX(w+2),h=b(this,k,f,d,m,p,q,h,E,G))h.faceIndex=Math.floor(w/3),g.push(h)}else if(void 0!==m)if(Array.isArray(k))for(w=0,v=n.length;w<v;w++)for(D=n[w],C=k[D.materialIndex],A=Math.max(D.start,t.start),y=h=Math.min(D.start+D.count,t.start+t.count);A<y;A+=3){if(h=A,E=A+1,G=A+2,h=b(this,C,f,d,m,p,q,h,E,G))h.faceIndex=Math.floor(A/3),h.face.materialIndex=D.materialIndex,g.push(h)}else for(A=Math.max(0,t.start),h=Math.min(m.count,t.start+t.count),w=A,v=h;w<v;w+=3)if(h=w,E=w+1,G=w+2,h=b(this,k,
-f,d,m,p,q,h,E,G))h.faceIndex=Math.floor(w/3),g.push(h)}else if(h.isGeometry)for(m=Array.isArray(k),p=h.vertices,q=h.faces,h=h.faceVertexUvs[0],0<h.length&&(l=h),v=0,D=q.length;v<D;v++)if(C=q[v],h=m?k[C.materialIndex]:k,void 0!==h&&(n=p[C.a],t=p[C.b],w=p[C.c],h=a(this,h,f,d,n,t,w,z)))l&&l[v]&&(A=l[v],r.copy(A[0]),u.copy(A[1]),x.copy(A[2]),h.uv=aa.getUV(z,n,t,w,r,u,x,new B)),h.face=C,h.faceIndex=v,g.push(h)}}(),clone:function(){return(new this.constructor(this.geometry,this.material)).copy(this)}});
+raycast:function(){function a(a,b,c,d,e,f,g,h){if(null===(1===b.side?d.intersectTriangle(g,f,e,!0,h):d.intersectTriangle(e,f,g,2!==b.side,h)))return null;y.copy(h);y.applyMatrix4(a.matrixWorld);b=c.ray.origin.distanceTo(y);return b<c.near||b>c.far?null:{distance:b,point:y.clone(),object:a}}function b(b,c,d,e,q,n,y,C,A,E){f.fromBufferAttribute(q,C);g.fromBufferAttribute(q,A);h.fromBufferAttribute(q,E);q=b.morphTargetInfluences;if(c.morphTargets&&n&&q){p.set(0,0,0);u.set(0,0,0);t.set(0,0,0);for(var w=
+0,F=n.length;w<F;w++){var D=q[w],H=n[w];0!==D&&(k.fromBufferAttribute(H,C),m.fromBufferAttribute(H,A),l.fromBufferAttribute(H,E),p.addScaledVector(k.sub(f),D),u.addScaledVector(m.sub(g),D),t.addScaledVector(l.sub(h),D))}f.add(p);g.add(u);h.add(t)}if(b=a(b,c,d,e,f,g,h,z))y&&(r.fromBufferAttribute(y,C),v.fromBufferAttribute(y,A),x.fromBufferAttribute(y,E),b.uv=aa.getUV(z,f,g,h,r,v,x,new B)),y=new Tb(C,A,E),aa.getNormal(f,g,h,y.normal),b.face=y;return b}var c=new N,d=new zb,e=new Ta,f=new n,g=new n,
+h=new n,k=new n,m=new n,l=new n,p=new n,u=new n,t=new n,r=new B,v=new B,x=new B,z=new n,y=new n;return function(f,g){var h=this.geometry,k=this.material,m=this.matrixWorld;if(void 0!==k&&(null===h.boundingSphere&&h.computeBoundingSphere(),e.copy(h.boundingSphere),e.applyMatrix4(m),!1!==f.ray.intersectsSphere(e)&&(c.getInverse(m),d.copy(f.ray).applyMatrix4(c),null===h.boundingBox||!1!==d.intersectsBox(h.boundingBox))))if(h.isBufferGeometry){var l=h.index;m=h.attributes.position;var p=h.morphAttributes.position,
+q=h.attributes.uv,n=h.groups,t=h.drawRange,u,y;if(null!==l)if(Array.isArray(k)){var w=0;for(u=n.length;w<u;w++){var D=n[w];var C=k[D.materialIndex];var A=Math.max(D.start,t.start);for(y=h=Math.min(D.start+D.count,t.start+t.count);A<y;A+=3){h=l.getX(A);var E=l.getX(A+1);var G=l.getX(A+2);if(h=b(this,C,f,d,m,p,q,h,E,G))h.faceIndex=Math.floor(A/3),h.face.materialIndex=D.materialIndex,g.push(h)}}}else for(A=Math.max(0,t.start),h=Math.min(l.count,t.start+t.count),w=A,u=h;w<u;w+=3){if(h=l.getX(w),E=l.getX(w+
+1),G=l.getX(w+2),h=b(this,k,f,d,m,p,q,h,E,G))h.faceIndex=Math.floor(w/3),g.push(h)}else if(void 0!==m)if(Array.isArray(k))for(w=0,u=n.length;w<u;w++)for(D=n[w],C=k[D.materialIndex],A=Math.max(D.start,t.start),y=h=Math.min(D.start+D.count,t.start+t.count);A<y;A+=3){if(h=A,E=A+1,G=A+2,h=b(this,C,f,d,m,p,q,h,E,G))h.faceIndex=Math.floor(A/3),h.face.materialIndex=D.materialIndex,g.push(h)}else for(A=Math.max(0,t.start),h=Math.min(m.count,t.start+t.count),w=A,u=h;w<u;w+=3)if(h=w,E=w+1,G=w+2,h=b(this,k,
+f,d,m,p,q,h,E,G))h.faceIndex=Math.floor(w/3),g.push(h)}else if(h.isGeometry)for(m=Array.isArray(k),p=h.vertices,q=h.faces,h=h.faceVertexUvs[0],0<h.length&&(l=h),u=0,D=q.length;u<D;u++)if(C=q[u],h=m?k[C.materialIndex]:k,void 0!==h&&(n=p[C.a],t=p[C.b],w=p[C.c],h=a(this,h,f,d,n,t,w,z)))l&&l[u]&&(A=l[u],r.copy(A[0]),v.copy(A[1]),x.copy(A[2]),h.uv=aa.getUV(z,n,t,w,r,v,x,new B)),h.face=C,h.faceIndex=u,g.push(h)}}(),clone:function(){return(new this.constructor(this.geometry,this.material)).copy(this)}});
 ab.prototype=Object.create(V.prototype);ab.prototype.constructor=ab;ab.prototype.isCubeTexture=!0;Object.defineProperty(ab.prototype,"images",{get:function(){return this.image},set:function(a){this.image=a}});Vb.prototype=Object.create(V.prototype);Vb.prototype.constructor=Vb;Vb.prototype.isDataTexture2DArray=!0;Wb.prototype=Object.create(V.prototype);Wb.prototype.constructor=Wb;Wb.prototype.isDataTexture3D=!0;var gf=new V,yg=new Vb,Ag=new Wb,hf=new ab,af=[],cf=[],ff=new Float32Array(16),ef=new Float32Array(9),
 df=new Float32Array(4);jf.prototype.updateCache=function(a){var b=this.cache;a instanceof Float32Array&&b.length!==a.length&&(this.cache=new Float32Array(a.length));ua(b,a)};kf.prototype.setValue=function(a,b,c){for(var d=this.seq,e=0,f=d.length;e!==f;++e){var g=d[e];g.setValue(a,b[g.id],c)}};var le=/([\w\d_]+)(\])?(\[|\.)?/g;hb.prototype.setValue=function(a,b,c,d){b=this.map[b];void 0!==b&&b.setValue(a,c,d)};hb.prototype.setOptional=function(a,b,c){b=b[c];void 0!==b&&this.setValue(a,c,b)};hb.upload=
 function(a,b,c,d){for(var e=0,f=b.length;e!==f;++e){var g=b[e],h=c[g.id];!1!==h.needsUpdate&&g.setValue(a,h.value,d)}};hb.seqWithValue=function(a,b){for(var c=[],d=0,e=a.length;d!==e;++d){var f=a[d];f.id in b&&c.push(f)}return c};var bh=0,jh=0;ib.prototype=Object.create(O.prototype);ib.prototype.constructor=ib;ib.prototype.isMeshDepthMaterial=!0;ib.prototype.copy=function(a){O.prototype.copy.call(this,a);this.depthPacking=a.depthPacking;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.map=
@@ -647,8 +647,8 @@ a;return this},copy:function(a){this.array=new a.array.constructor(a.array);this
 {count:{get:function(){return this.data.count}},array:{get:function(){return this.data.array}}});Object.assign(Nc.prototype,{isInterleavedBufferAttribute:!0,setX:function(a,b){this.data.array[a*this.data.stride+this.offset]=b;return this},setY:function(a,b){this.data.array[a*this.data.stride+this.offset+1]=b;return this},setZ:function(a,b){this.data.array[a*this.data.stride+this.offset+2]=b;return this},setW:function(a,b){this.data.array[a*this.data.stride+this.offset+3]=b;return this},getX:function(a){return this.data.array[a*
 this.data.stride+this.offset]},getY:function(a){return this.data.array[a*this.data.stride+this.offset+1]},getZ:function(a){return this.data.array[a*this.data.stride+this.offset+2]},getW:function(a){return this.data.array[a*this.data.stride+this.offset+3]},setXY:function(a,b,c){a=a*this.data.stride+this.offset;this.data.array[a+0]=b;this.data.array[a+1]=c;return this},setXYZ:function(a,b,c,d){a=a*this.data.stride+this.offset;this.data.array[a+0]=b;this.data.array[a+1]=c;this.data.array[a+2]=d;return this},
 setXYZW:function(a,b,c,d,e){a=a*this.data.stride+this.offset;this.data.array[a+0]=b;this.data.array[a+1]=c;this.data.array[a+2]=d;this.data.array[a+3]=e;return this}});mb.prototype=Object.create(O.prototype);mb.prototype.constructor=mb;mb.prototype.isSpriteMaterial=!0;mb.prototype.copy=function(a){O.prototype.copy.call(this,a);this.color.copy(a.color);this.map=a.map;this.rotation=a.rotation;this.sizeAttenuation=a.sizeAttenuation;return this};var $b;Oc.prototype=Object.assign(Object.create(G.prototype),
-{constructor:Oc,isSprite:!0,raycast:function(){function a(a,b,c,d,h,k){e.subVectors(a,c).addScalar(.5).multiply(d);void 0!==h?(f.x=k*e.x-h*e.y,f.y=h*e.x+k*e.y):f.copy(e);a.copy(b);a.x+=f.x;a.y+=f.y;a.applyMatrix4(g)}var b=new n,c=new n,d=new n,e=new B,f=new B,g=new N,h=new n,k=new n,m=new n,l=new B,p=new B,v=new B;return function(e,f){c.setFromMatrixScale(this.matrixWorld);g.getInverse(this.modelViewMatrix).premultiply(this.matrixWorld);d.setFromMatrixPosition(this.modelViewMatrix);var q=this.material.rotation;
-if(0!==q){var n=Math.cos(q);var r=Math.sin(q)}q=this.center;a(h.set(-.5,-.5,0),d,q,c,r,n);a(k.set(.5,-.5,0),d,q,c,r,n);a(m.set(.5,.5,0),d,q,c,r,n);l.set(0,0);p.set(1,0);v.set(1,1);var t=e.ray.intersectTriangle(h,k,m,!1,b);if(null===t&&(a(k.set(-.5,.5,0),d,q,c,r,n),p.set(0,1),t=e.ray.intersectTriangle(h,m,k,!1,b),null===t))return;r=e.ray.origin.distanceTo(b);r<e.near||r>e.far||f.push({distance:r,point:b.clone(),uv:aa.getUV(b,h,k,m,l,p,v,new B),face:null,object:this})}}(),clone:function(){return(new this.constructor(this.material)).copy(this)},
+{constructor:Oc,isSprite:!0,raycast:function(){function a(a,b,c,d,h,k){e.subVectors(a,c).addScalar(.5).multiply(d);void 0!==h?(f.x=k*e.x-h*e.y,f.y=h*e.x+k*e.y):f.copy(e);a.copy(b);a.x+=f.x;a.y+=f.y;a.applyMatrix4(g)}var b=new n,c=new n,d=new n,e=new B,f=new B,g=new N,h=new n,k=new n,m=new n,l=new B,p=new B,u=new B;return function(e,f){c.setFromMatrixScale(this.matrixWorld);g.getInverse(this.modelViewMatrix).premultiply(this.matrixWorld);d.setFromMatrixPosition(this.modelViewMatrix);var q=this.material.rotation;
+if(0!==q){var n=Math.cos(q);var r=Math.sin(q)}q=this.center;a(h.set(-.5,-.5,0),d,q,c,r,n);a(k.set(.5,-.5,0),d,q,c,r,n);a(m.set(.5,.5,0),d,q,c,r,n);l.set(0,0);p.set(1,0);u.set(1,1);var t=e.ray.intersectTriangle(h,k,m,!1,b);if(null===t&&(a(k.set(-.5,.5,0),d,q,c,r,n),p.set(0,1),t=e.ray.intersectTriangle(h,m,k,!1,b),null===t))return;r=e.ray.origin.distanceTo(b);r<e.near||r>e.far||f.push({distance:r,point:b.clone(),uv:aa.getUV(b,h,k,m,l,p,u,new B),face:null,object:this})}}(),clone:function(){return(new this.constructor(this.material)).copy(this)},
 copy:function(a){G.prototype.copy.call(this,a);void 0!==a.center&&this.center.copy(a.center);return this}});Pc.prototype=Object.assign(Object.create(G.prototype),{constructor:Pc,isLOD:!0,copy:function(a){G.prototype.copy.call(this,a,!1);a=a.levels;for(var b=0,c=a.length;b<c;b++){var d=a[b];this.addLevel(d.object.clone(),d.distance)}return this},addLevel:function(a,b){void 0===b&&(b=0);b=Math.abs(b);for(var c=this.levels,d=0;d<c.length&&!(b<c[d].distance);d++);c.splice(d,0,{distance:b,object:a});this.add(a);
 return this},getObjectForDistance:function(a){for(var b=this.levels,c=1,d=b.length;c<d&&!(a<b[c].distance);c++);return b[c-1].object},raycast:function(){var a=new n;return function(b,c){a.setFromMatrixPosition(this.matrixWorld);var d=b.ray.origin.distanceTo(a);this.getObjectForDistance(d).raycast(b,c)}}(),update:function(){var a=new n,b=new n;return function(c){var d=this.levels;if(1<d.length){a.setFromMatrixPosition(c.matrixWorld);b.setFromMatrixPosition(this.matrixWorld);c=a.distanceTo(b);d[0].object.visible=
 !0;for(var e=1,f=d.length;e<f;e++)if(c>=d[e].distance)d[e-1].object.visible=!1,d[e].object.visible=!0;else break;for(;e<f;e++)d[e].object.visible=!1}}}(),toJSON:function(a){a=G.prototype.toJSON.call(this,a);a.object.levels=[];for(var b=this.levels,c=0,d=b.length;c<d;c++){var e=b[c];a.object.levels.push({object:e.object.uuid,distance:e.distance})}return a}});Qc.prototype=Object.assign(Object.create(qa.prototype),{constructor:Qc,isSkinnedMesh:!0,bind:function(a,b){this.skeleton=a;void 0===b&&(this.updateMatrixWorld(!0),
@@ -658,13 +658,13 @@ this.boneInverses.push(c)}},pose:function(){var a,b;var c=0;for(b=this.bones.len
 f=this.boneTexture,g=0,h=c.length;g<h;g++)a.multiplyMatrices(c[g]?c[g].matrixWorld:b,d[g]),a.toArray(e,16*g);void 0!==f&&(f.needsUpdate=!0)}}(),clone:function(){return new Gd(this.bones,this.boneInverses)},getBoneByName:function(a){for(var b=0,c=this.bones.length;b<c;b++){var d=this.bones[b];if(d.name===a)return d}}});pe.prototype=Object.assign(Object.create(G.prototype),{constructor:pe,isBone:!0});S.prototype=Object.create(O.prototype);S.prototype.constructor=S;S.prototype.isLineBasicMaterial=!0;
 S.prototype.copy=function(a){O.prototype.copy.call(this,a);this.color.copy(a.color);this.linewidth=a.linewidth;this.linecap=a.linecap;this.linejoin=a.linejoin;return this};sa.prototype=Object.assign(Object.create(G.prototype),{constructor:sa,isLine:!0,computeLineDistances:function(){var a=new n,b=new n;return function(){var c=this.geometry;if(c.isBufferGeometry)if(null===c.index){for(var d=c.attributes.position,e=[0],f=1,g=d.count;f<g;f++)a.fromBufferAttribute(d,f-1),b.fromBufferAttribute(d,f),e[f]=
 e[f-1],e[f]+=a.distanceTo(b);c.addAttribute("lineDistance",new A(e,1))}else console.warn("THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.");else if(c.isGeometry)for(d=c.vertices,e=c.lineDistances,e[0]=0,f=1,g=d.length;f<g;f++)e[f]=e[f-1],e[f]+=d[f-1].distanceTo(d[f]);return this}}(),raycast:function(){var a=new N,b=new zb,c=new Ta;return function(d,e){var f=d.linePrecision,g=this.geometry,h=this.matrixWorld;null===g.boundingSphere&&g.computeBoundingSphere();
-c.copy(g.boundingSphere);c.applyMatrix4(h);c.radius+=f;if(!1!==d.ray.intersectsSphere(c)){a.getInverse(h);b.copy(d.ray).applyMatrix4(a);f/=(this.scale.x+this.scale.y+this.scale.z)/3;f*=f;var k=new n,m=new n;h=new n;var l=new n,p=this&&this.isLineSegments?2:1;if(g.isBufferGeometry){var v=g.index,t=g.attributes.position.array;if(null!==v){v=v.array;g=0;for(var r=v.length-1;g<r;g+=p){var u=v[g+1];k.fromArray(t,3*v[g]);m.fromArray(t,3*u);u=b.distanceSqToSegment(k,m,l,h);u>f||(l.applyMatrix4(this.matrixWorld),
-u=d.ray.origin.distanceTo(l),u<d.near||u>d.far||e.push({distance:u,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}}else for(g=0,r=t.length/3-1;g<r;g+=p)k.fromArray(t,3*g),m.fromArray(t,3*g+3),u=b.distanceSqToSegment(k,m,l,h),u>f||(l.applyMatrix4(this.matrixWorld),u=d.ray.origin.distanceTo(l),u<d.near||u>d.far||e.push({distance:u,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}else if(g.isGeometry)for(k=
-g.vertices,m=k.length,g=0;g<m-1;g+=p)u=b.distanceSqToSegment(k[g],k[g+1],l,h),u>f||(l.applyMatrix4(this.matrixWorld),u=d.ray.origin.distanceTo(l),u<d.near||u>d.far||e.push({distance:u,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}}}(),clone:function(){return(new this.constructor(this.geometry,this.material)).copy(this)}});Y.prototype=Object.assign(Object.create(sa.prototype),{constructor:Y,isLineSegments:!0,computeLineDistances:function(){var a=new n,
+c.copy(g.boundingSphere);c.applyMatrix4(h);c.radius+=f;if(!1!==d.ray.intersectsSphere(c)){a.getInverse(h);b.copy(d.ray).applyMatrix4(a);f/=(this.scale.x+this.scale.y+this.scale.z)/3;f*=f;var k=new n,m=new n;h=new n;var l=new n,p=this&&this.isLineSegments?2:1;if(g.isBufferGeometry){var u=g.index,t=g.attributes.position.array;if(null!==u){u=u.array;g=0;for(var r=u.length-1;g<r;g+=p){var v=u[g+1];k.fromArray(t,3*u[g]);m.fromArray(t,3*v);v=b.distanceSqToSegment(k,m,l,h);v>f||(l.applyMatrix4(this.matrixWorld),
+v=d.ray.origin.distanceTo(l),v<d.near||v>d.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}}else for(g=0,r=t.length/3-1;g<r;g+=p)k.fromArray(t,3*g),m.fromArray(t,3*g+3),v=b.distanceSqToSegment(k,m,l,h),v>f||(l.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(l),v<d.near||v>d.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}else if(g.isGeometry)for(k=
+g.vertices,m=k.length,g=0;g<m-1;g+=p)v=b.distanceSqToSegment(k[g],k[g+1],l,h),v>f||(l.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(l),v<d.near||v>d.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}}}(),clone:function(){return(new this.constructor(this.geometry,this.material)).copy(this)}});Y.prototype=Object.assign(Object.create(sa.prototype),{constructor:Y,isLineSegments:!0,computeLineDistances:function(){var a=new n,
 b=new n;return function(){var c=this.geometry;if(c.isBufferGeometry)if(null===c.index){for(var d=c.attributes.position,e=[],f=0,g=d.count;f<g;f+=2)a.fromBufferAttribute(d,f),b.fromBufferAttribute(d,f+1),e[f]=0===f?0:e[f-1],e[f+1]=e[f]+a.distanceTo(b);c.addAttribute("lineDistance",new A(e,1))}else console.warn("THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.");else if(c.isGeometry)for(d=c.vertices,e=c.lineDistances,f=0,g=d.length;f<g;f+=2)a.copy(d[f]),
 b.copy(d[f+1]),e[f]=0===f?0:e[f-1],e[f+1]=e[f]+a.distanceTo(b);return this}}()});Hd.prototype=Object.assign(Object.create(sa.prototype),{constructor:Hd,isLineLoop:!0});Ia.prototype=Object.create(O.prototype);Ia.prototype.constructor=Ia;Ia.prototype.isPointsMaterial=!0;Ia.prototype.copy=function(a){O.prototype.copy.call(this,a);this.color.copy(a.color);this.map=a.map;this.size=a.size;this.sizeAttenuation=a.sizeAttenuation;this.morphTargets=a.morphTargets;return this};ac.prototype=Object.assign(Object.create(G.prototype),
 {constructor:ac,isPoints:!0,raycast:function(){var a=new N,b=new zb,c=new Ta;return function(d,e){function f(a,c){var f=b.distanceSqToPoint(a);f<l&&(b.closestPointToPoint(a,p),p.applyMatrix4(k),a=d.ray.origin.distanceTo(p),a<d.near||a>d.far||e.push({distance:a,distanceToRay:Math.sqrt(f),point:p.clone(),index:c,face:null,object:g}))}var g=this,h=this.geometry,k=this.matrixWorld,m=d.params.Points.threshold;null===h.boundingSphere&&h.computeBoundingSphere();c.copy(h.boundingSphere);c.applyMatrix4(k);
-c.radius+=m;if(!1!==d.ray.intersectsSphere(c)){a.getInverse(k);b.copy(d.ray).applyMatrix4(a);m/=(this.scale.x+this.scale.y+this.scale.z)/3;var l=m*m;m=new n;var p=new n;if(h.isBufferGeometry){var v=h.index;h=h.attributes.position.array;if(null!==v){var t=v.array;v=0;for(var r=t.length;v<r;v++){var u=t[v];m.fromArray(h,3*u);f(m,u)}}else for(v=0,t=h.length/3;v<t;v++)m.fromArray(h,3*v),f(m,v)}else for(m=h.vertices,v=0,t=m.length;v<t;v++)f(m[v],v)}}}(),clone:function(){return(new this.constructor(this.geometry,
+c.radius+=m;if(!1!==d.ray.intersectsSphere(c)){a.getInverse(k);b.copy(d.ray).applyMatrix4(a);m/=(this.scale.x+this.scale.y+this.scale.z)/3;var l=m*m;m=new n;var p=new n;if(h.isBufferGeometry){var u=h.index;h=h.attributes.position.array;if(null!==u){var t=u.array;u=0;for(var r=t.length;u<r;u++){var v=t[u];m.fromArray(h,3*v);f(m,v)}}else for(u=0,t=h.length/3;u<t;u++)m.fromArray(h,3*u),f(m,u)}else for(m=h.vertices,u=0,t=m.length;u<t;u++)f(m[u],u)}}}(),clone:function(){return(new this.constructor(this.geometry,
 this.material)).copy(this)}});qe.prototype=Object.assign(Object.create(V.prototype),{constructor:qe,isVideoTexture:!0,update:function(){var a=this.image;a.readyState>=a.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}});bc.prototype=Object.create(V.prototype);bc.prototype.constructor=bc;bc.prototype.isCompressedTexture=!0;Rc.prototype=Object.create(V.prototype);Rc.prototype.constructor=Rc;Rc.prototype.isCanvasTexture=!0;Sc.prototype=Object.create(V.prototype);Sc.prototype.constructor=Sc;Sc.prototype.isDepthTexture=
 !0;cc.prototype=Object.create(E.prototype);cc.prototype.constructor=cc;Tc.prototype=Object.create(Q.prototype);Tc.prototype.constructor=Tc;dc.prototype=Object.create(E.prototype);dc.prototype.constructor=dc;Uc.prototype=Object.create(Q.prototype);Uc.prototype.constructor=Uc;ya.prototype=Object.create(E.prototype);ya.prototype.constructor=ya;Vc.prototype=Object.create(Q.prototype);Vc.prototype.constructor=Vc;ec.prototype=Object.create(ya.prototype);ec.prototype.constructor=ec;Wc.prototype=Object.create(Q.prototype);
 Wc.prototype.constructor=Wc;Cb.prototype=Object.create(ya.prototype);Cb.prototype.constructor=Cb;Xc.prototype=Object.create(Q.prototype);Xc.prototype.constructor=Xc;fc.prototype=Object.create(ya.prototype);fc.prototype.constructor=fc;Yc.prototype=Object.create(Q.prototype);Yc.prototype.constructor=Yc;gc.prototype=Object.create(ya.prototype);gc.prototype.constructor=gc;Zc.prototype=Object.create(Q.prototype);Zc.prototype.constructor=Zc;Db.prototype=Object.create(E.prototype);Db.prototype.constructor=
@@ -712,7 +712,7 @@ b){if(!a)return console.error("THREE.AnimationClip: No animation in JSONLoader d
 a;return this},trim:function(){for(var a=0;a<this.tracks.length;a++)this.tracks[a].trim(0,this.duration);return this},validate:function(){for(var a=!0,b=0;b<this.tracks.length;b++)a=a&&this.tracks[b].validate();return a},optimize:function(){for(var a=0;a<this.tracks.length;a++)this.tracks[a].optimize();return this},clone:function(){for(var a=[],b=0;b<this.tracks.length;b++)a.push(this.tracks[b].clone());return new Ga(this.name,this.duration,a)}});var Rb={enabled:!1,files:{},add:function(a,b){!1!==
 this.enabled&&(this.files[a]=b)},get:function(a){if(!1!==this.enabled)return this.files[a]},remove:function(a){delete this.files[a]},clear:function(){this.files={}}},ea=new te,Ra={};Object.assign(Ka.prototype,{load:function(a,b,c,d){void 0===a&&(a="");void 0!==this.path&&(a=this.path+a);a=this.manager.resolveURL(a);var e=this,f=Rb.get(a);if(void 0!==f)return e.manager.itemStart(a),setTimeout(function(){b&&b(f);e.manager.itemEnd(a)},0),f;if(void 0!==Ra[a])Ra[a].push({onLoad:b,onProgress:c,onError:d});
 else{var g=a.match(/^data:(.*?)(;base64)?,(.*)$/);if(g){c=g[1];var h=!!g[2];g=g[3];g=decodeURIComponent(g);h&&(g=atob(g));try{var k=(this.responseType||"").toLowerCase();switch(k){case "arraybuffer":case "blob":var m=new Uint8Array(g.length);for(h=0;h<g.length;h++)m[h]=g.charCodeAt(h);var l="blob"===k?new Blob([m.buffer],{type:c}):m.buffer;break;case "document":l=(new DOMParser).parseFromString(g,c);break;case "json":l=JSON.parse(g);break;default:l=g}setTimeout(function(){b&&b(l);e.manager.itemEnd(a)},
-0)}catch(v){setTimeout(function(){d&&d(v);e.manager.itemError(a);e.manager.itemEnd(a)},0)}}else{Ra[a]=[];Ra[a].push({onLoad:b,onProgress:c,onError:d});var p=new XMLHttpRequest;p.open("GET",a,!0);p.addEventListener("load",function(b){var c=this.response;Rb.add(a,c);var d=Ra[a];delete Ra[a];if(200===this.status||0===this.status){0===this.status&&console.warn("THREE.FileLoader: HTTP Status 0 received.");for(var f=0,g=d.length;f<g;f++){var h=d[f];if(h.onLoad)h.onLoad(c)}}else{f=0;for(g=d.length;f<g;f++)if(h=
+0)}catch(u){setTimeout(function(){d&&d(u);e.manager.itemError(a);e.manager.itemEnd(a)},0)}}else{Ra[a]=[];Ra[a].push({onLoad:b,onProgress:c,onError:d});var p=new XMLHttpRequest;p.open("GET",a,!0);p.addEventListener("load",function(b){var c=this.response;Rb.add(a,c);var d=Ra[a];delete Ra[a];if(200===this.status||0===this.status){0===this.status&&console.warn("THREE.FileLoader: HTTP Status 0 received.");for(var f=0,g=d.length;f<g;f++){var h=d[f];if(h.onLoad)h.onLoad(c)}}else{f=0;for(g=d.length;f<g;f++)if(h=
 d[f],h.onError)h.onError(b);e.manager.itemError(a)}e.manager.itemEnd(a)},!1);p.addEventListener("progress",function(b){for(var c=Ra[a],d=0,e=c.length;d<e;d++){var f=c[d];if(f.onProgress)f.onProgress(b)}},!1);p.addEventListener("error",function(b){var c=Ra[a];delete Ra[a];for(var d=0,f=c.length;d<f;d++){var g=c[d];if(g.onError)g.onError(b)}e.manager.itemError(a);e.manager.itemEnd(a)},!1);p.addEventListener("abort",function(b){var c=Ra[a];delete Ra[a];for(var d=0,f=c.length;d<f;d++){var g=c[d];if(g.onError)g.onError(b)}e.manager.itemError(a);
 e.manager.itemEnd(a)},!1);void 0!==this.responseType&&(p.responseType=this.responseType);void 0!==this.withCredentials&&(p.withCredentials=this.withCredentials);p.overrideMimeType&&p.overrideMimeType(void 0!==this.mimeType?this.mimeType:"text/plain");for(h in this.requestHeader)p.setRequestHeader(h,this.requestHeader[h]);p.send(null)}e.manager.itemStart(a);return p}},setPath:function(a){this.path=a;return this},setResponseType:function(a){this.responseType=a;return this},setWithCredentials:function(a){this.withCredentials=
 a;return this},setMimeType:function(a){this.mimeType=a;return this},setRequestHeader:function(a){this.requestHeader=a;return this}});Object.assign(If.prototype,{load:function(a,b,c,d){var e=this,f=new Ka(e.manager);f.setPath(e.path);f.load(a,function(a){b(e.parse(JSON.parse(a)))},c,d)},parse:function(a){for(var b=[],c=0;c<a.length;c++){var d=Ga.parse(a[c]);b.push(d)}return b},setPath:function(a){this.path=a;return this}});Object.assign(Jf.prototype,{load:function(a,b,c,d){function e(e){k.load(a[e],
@@ -800,10 +800,10 @@ f.shadow.mapSize.fromArray(a.shadow.mapSize),void 0!==a.shadow.camera&&(f.shadow
 LinearFilter:1006,LinearMipMapNearestFilter:1007,LinearMipMapLinearFilter:1008};ze.prototype={constructor:ze,setOptions:function(a){this.options=a;return this},load:function(a,b,c,d){void 0===a&&(a="");void 0!==this.path&&(a=this.path+a);a=this.manager.resolveURL(a);var e=this,f=Rb.get(a);if(void 0!==f)return e.manager.itemStart(a),setTimeout(function(){b&&b(f);e.manager.itemEnd(a)},0),f;fetch(a).then(function(a){return a.blob()}).then(function(a){return void 0===e.options?createImageBitmap(a):createImageBitmap(a,
 e.options)}).then(function(c){Rb.add(a,c);b&&b(c);e.manager.itemEnd(a)}).catch(function(b){d&&d(b);e.manager.itemError(a);e.manager.itemEnd(a)});e.manager.itemStart(a)},setCrossOrigin:function(){return this},setPath:function(a){this.path=a;return this}};Object.assign(Ae.prototype,{moveTo:function(a,b){this.currentPath=new Pa;this.subPaths.push(this.currentPath);this.currentPath.moveTo(a,b)},lineTo:function(a,b){this.currentPath.lineTo(a,b)},quadraticCurveTo:function(a,b,c,d){this.currentPath.quadraticCurveTo(a,
 b,c,d)},bezierCurveTo:function(a,b,c,d,e,f){this.currentPath.bezierCurveTo(a,b,c,d,e,f)},splineThru:function(a){this.currentPath.splineThru(a)},toShapes:function(a,b){function c(a){for(var b=[],c=0,d=a.length;c<d;c++){var e=a[c],f=new ob;f.curves=e.curves;b.push(f)}return b}function d(a,b){for(var c=b.length,d=!1,e=c-1,f=0;f<c;e=f++){var g=b[e],h=b[f],k=h.x-g.x,l=h.y-g.y;if(Math.abs(l)>Number.EPSILON){if(0>l&&(g=b[f],k=-k,h=b[e],l=-l),!(a.y<g.y||a.y>h.y))if(a.y===g.y){if(a.x===g.x)return!0}else{e=
-l*(a.x-g.x)-k*(a.y-g.y);if(0===e)return!0;0>e||(d=!d)}}else if(a.y===g.y&&(h.x<=a.x&&a.x<=g.x||g.x<=a.x&&a.x<=h.x))return!0}return d}var e=bb.isClockWise,f=this.subPaths;if(0===f.length)return[];if(!0===b)return c(f);b=[];if(1===f.length){var g=f[0];var h=new ob;h.curves=g.curves;b.push(h);return b}var k=!e(f[0].getPoints());k=a?!k:k;h=[];var l=[],n=[],p=0;l[p]=void 0;n[p]=[];for(var v=0,t=f.length;v<t;v++){g=f[v];var r=g.getPoints();var u=e(r);(u=a?!u:u)?(!k&&l[p]&&p++,l[p]={s:new ob,p:r},l[p].s.curves=
-g.curves,k&&p++,n[p]=[]):n[p].push({h:g,p:r[0]})}if(!l[0])return c(f);if(1<l.length){v=!1;a=[];e=0;for(f=l.length;e<f;e++)h[e]=[];e=0;for(f=l.length;e<f;e++)for(g=n[e],u=0;u<g.length;u++){k=g[u];p=!0;for(r=0;r<l.length;r++)d(k.p,l[r].p)&&(e!==r&&a.push({froms:e,tos:r,hole:u}),p?(p=!1,h[r].push(k)):v=!0);p&&h[e].push(k)}0<a.length&&(v||(n=h))}v=0;for(e=l.length;v<e;v++)for(h=l[v].s,b.push(h),a=n[v],f=0,g=a.length;f<g;f++)h.holes.push(a[f].h);return b}});Object.assign(Be.prototype,{isFont:!0,generateShapes:function(a,
-b){void 0===b&&(b=100);var c=[],d=b;b=this.data;var e=Array.from?Array.from(a):String(a).split("");d/=b.resolution;var f=(b.boundingBox.yMax-b.boundingBox.yMin+b.underlineThickness)*d;a=[];for(var g=0,h=0,k=0;k<e.length;k++){var l=e[k];if("\n"===l)g=0,h-=f;else{var n=d;var p=g,v=h;if(l=b.glyphs[l]||b.glyphs["?"]){var t=new Ae;if(l.o)for(var r=l._cachedOutline||(l._cachedOutline=l.o.split(" ")),u=0,x=r.length;u<x;)switch(r[u++]){case "m":var z=r[u++]*n+p;var y=r[u++]*n+v;t.moveTo(z,y);break;case "l":z=
-r[u++]*n+p;y=r[u++]*n+v;t.lineTo(z,y);break;case "q":var w=r[u++]*n+p;var A=r[u++]*n+v;var B=r[u++]*n+p;var C=r[u++]*n+v;t.quadraticCurveTo(B,C,w,A);break;case "b":w=r[u++]*n+p,A=r[u++]*n+v,B=r[u++]*n+p,C=r[u++]*n+v,z=r[u++]*n+p,y=r[u++]*n+v,t.bezierCurveTo(B,C,z,y,w,A)}n={offsetX:l.ha*n,path:t}}else n=void 0;g+=n.offsetX;a.push(n.path)}}b=0;for(e=a.length;b<e;b++)Array.prototype.push.apply(c,a[b].toShapes());return c}});Object.assign(Lf.prototype,{load:function(a,b,c,d){var e=this,f=new Ka(this.manager);
+l*(a.x-g.x)-k*(a.y-g.y);if(0===e)return!0;0>e||(d=!d)}}else if(a.y===g.y&&(h.x<=a.x&&a.x<=g.x||g.x<=a.x&&a.x<=h.x))return!0}return d}var e=bb.isClockWise,f=this.subPaths;if(0===f.length)return[];if(!0===b)return c(f);b=[];if(1===f.length){var g=f[0];var h=new ob;h.curves=g.curves;b.push(h);return b}var k=!e(f[0].getPoints());k=a?!k:k;h=[];var l=[],n=[],p=0;l[p]=void 0;n[p]=[];for(var u=0,t=f.length;u<t;u++){g=f[u];var r=g.getPoints();var v=e(r);(v=a?!v:v)?(!k&&l[p]&&p++,l[p]={s:new ob,p:r},l[p].s.curves=
+g.curves,k&&p++,n[p]=[]):n[p].push({h:g,p:r[0]})}if(!l[0])return c(f);if(1<l.length){u=!1;a=[];e=0;for(f=l.length;e<f;e++)h[e]=[];e=0;for(f=l.length;e<f;e++)for(g=n[e],v=0;v<g.length;v++){k=g[v];p=!0;for(r=0;r<l.length;r++)d(k.p,l[r].p)&&(e!==r&&a.push({froms:e,tos:r,hole:v}),p?(p=!1,h[r].push(k)):u=!0);p&&h[e].push(k)}0<a.length&&(u||(n=h))}u=0;for(e=l.length;u<e;u++)for(h=l[u].s,b.push(h),a=n[u],f=0,g=a.length;f<g;f++)h.holes.push(a[f].h);return b}});Object.assign(Be.prototype,{isFont:!0,generateShapes:function(a,
+b){void 0===b&&(b=100);var c=[],d=b;b=this.data;var e=Array.from?Array.from(a):String(a).split("");d/=b.resolution;var f=(b.boundingBox.yMax-b.boundingBox.yMin+b.underlineThickness)*d;a=[];for(var g=0,h=0,k=0;k<e.length;k++){var l=e[k];if("\n"===l)g=0,h-=f;else{var n=d;var p=g,u=h;if(l=b.glyphs[l]||b.glyphs["?"]){var t=new Ae;if(l.o)for(var r=l._cachedOutline||(l._cachedOutline=l.o.split(" ")),v=0,x=r.length;v<x;)switch(r[v++]){case "m":var z=r[v++]*n+p;var y=r[v++]*n+u;t.moveTo(z,y);break;case "l":z=
+r[v++]*n+p;y=r[v++]*n+u;t.lineTo(z,y);break;case "q":var w=r[v++]*n+p;var A=r[v++]*n+u;var B=r[v++]*n+p;var C=r[v++]*n+u;t.quadraticCurveTo(B,C,w,A);break;case "b":w=r[v++]*n+p,A=r[v++]*n+u,B=r[v++]*n+p,C=r[v++]*n+u,z=r[v++]*n+p,y=r[v++]*n+u,t.bezierCurveTo(B,C,z,y,w,A)}n={offsetX:l.ha*n,path:t}}else n=void 0;g+=n.offsetX;a.push(n.path)}}b=0;for(e=a.length;b<e;b++)Array.prototype.push.apply(c,a[b].toShapes());return c}});Object.assign(Lf.prototype,{load:function(a,b,c,d){var e=this,f=new Ka(this.manager);
 f.setPath(this.path);f.load(a,function(a){try{var c=JSON.parse(a)}catch(k){console.warn("THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead."),c=JSON.parse(a.substring(65,a.length-2))}a=e.parse(c);b&&b(a)},c,d)},parse:function(a){return new Be(a)},setPath:function(a){this.path=a;return this}});sd.Handlers={handlers:[],add:function(a,b){this.handlers.push(a,b)},get:function(a){for(var b=this.handlers,c=0,d=b.length;c<d;c+=2){var e=b[c+1];if(b[c].test(a))return e}return null}};
 Object.assign(sd.prototype,{crossOrigin:"anonymous",onLoadStart:function(){},onLoadProgress:function(){},onLoadComplete:function(){},initMaterials:function(a,b,c){for(var d=[],e=0;e<a.length;++e)d[e]=this.createMaterial(a[e],b,c);return d},createMaterial:function(){var a={NoBlending:0,NormalBlending:1,AdditiveBlending:2,SubtractiveBlending:3,MultiplyBlending:4,CustomBlending:5},b=new C,c=new Pd,d=new Yd;return function(e,f,g){function h(a,b,d,e,h){a=f+a;var l=sd.Handlers.get(a);null!==l?a=l.load(a):
 (c.setCrossOrigin(g),a=c.load(a));void 0!==b&&(a.repeat.fromArray(b),1!==b[0]&&(a.wrapS=1E3),1!==b[1]&&(a.wrapT=1E3));void 0!==d&&a.offset.fromArray(d);void 0!==e&&("repeat"===e[0]&&(a.wrapS=1E3),"mirror"===e[0]&&(a.wrapS=1002),"repeat"===e[1]&&(a.wrapT=1E3),"mirror"===e[1]&&(a.wrapT=1002));void 0!==h&&(a.anisotropy=h);b=P.generateUUID();k[b]=a;return b}var k={},l={uuid:P.generateUUID(),type:"MeshLambertMaterial"},n;for(n in e){var p=e[n];switch(n){case "DbgColor":case "DbgIndex":case "opticalDensity":case "illumination":break;
@@ -819,8 +819,8 @@ var e=this.coefficients;b=.282095*e[0];b+=.488603*e[1]*d;b+=.488603*e[2]*a;b+=.4
 0;9>b;b++)this.coefficients[b].add(a.coefficients[b]);return this},scale:function(a){for(var b=0;9>b;b++)this.coefficients[b].multiplyScalar(a);return this},lerp:function(a,b){for(var c=0;9>c;c++)this.coefficients[c].lerp(a.coefficients[c],b);return this},equals:function(a){for(var b=0;9>b;b++)if(!this.coefficients[b].equals(a.coefficients[b]))return!1;return!0},copy:function(a){return this.set(a.coefficients)},clone:function(){return(new this.constructor).copy(this)},fromArray:function(a){for(var b=
 this.coefficients,c=0;9>c;c++)b[c].fromArray(a,3*c);return this},toArray:function(){for(var a=[],b=this.coefficients,c=0;9>c;c++)b[c].toArray(a,3*c);return a}});Object.assign(ae,{getBasisAt:function(a,b){var c=a.x,d=a.y;a=a.z;b[0]=.282095;b[1]=.488603*d;b[2]=.488603*a;b[3]=.488603*c;b[4]=1.092548*c*d;b[5]=1.092548*d*a;b[6]=.315392*(3*a*a-1);b[7]=1.092548*c*a;b[8]=.546274*(c*c-d*d)}});Qa.prototype=Object.assign(Object.create(U.prototype),{constructor:Qa,isLightProbe:!0,copy:function(a){U.prototype.copy.call(this,
 a);this.sh.copy(a.sh);this.intensity=a.intensity;return this},toJSON:function(a){return U.prototype.toJSON.call(this,a)}});De.prototype=Object.assign(Object.create(Qa.prototype),{constructor:De,isHemisphereLightProbe:!0,copy:function(a){Qa.prototype.copy.call(this,a);return this},toJSON:function(a){return Qa.prototype.toJSON.call(this,a)}});Ee.prototype=Object.assign(Object.create(Qa.prototype),{constructor:Ee,isAmbientLightProbe:!0,copy:function(a){Qa.prototype.copy.call(this,a);return this},toJSON:function(a){return Qa.prototype.toJSON.call(this,
-a)}});Object.assign(Mf.prototype,{update:function(){var a,b,c,d,e,f,g,h,k=new N,l=new N;return function(m){if(a!==this||b!==m.focus||c!==m.fov||d!==m.aspect*this.aspect||e!==m.near||f!==m.far||g!==m.zoom||h!==this.eyeSep){a=this;b=m.focus;c=m.fov;d=m.aspect*this.aspect;e=m.near;f=m.far;g=m.zoom;var n=m.projectionMatrix.clone();h=this.eyeSep/2;var q=h*e/b,t=e*Math.tan(P.DEG2RAD*c*.5)/g;l.elements[12]=-h;k.elements[12]=h;var r=-t*d+q;var u=t*d+q;n.elements[0]=2*e/(u-r);n.elements[8]=(u+r)/(u-r);this.cameraL.projectionMatrix.copy(n);
-r=-t*d-q;u=t*d-q;n.elements[0]=2*e/(u-r);n.elements[8]=(u+r)/(u-r);this.cameraR.projectionMatrix.copy(n)}this.cameraL.matrixWorld.copy(m.matrixWorld).multiply(l);this.cameraR.matrixWorld.copy(m.matrixWorld).multiply(k)}}()});td.prototype=Object.create(G.prototype);td.prototype.constructor=td;Object.assign(Fe.prototype,{start:function(){this.oldTime=this.startTime=("undefined"===typeof performance?Date:performance).now();this.elapsedTime=0;this.running=!0},stop:function(){this.getElapsedTime();this.autoStart=
+a)}});Object.assign(Mf.prototype,{update:function(){var a,b,c,d,e,f,g,h,k=new N,l=new N;return function(m){if(a!==this||b!==m.focus||c!==m.fov||d!==m.aspect*this.aspect||e!==m.near||f!==m.far||g!==m.zoom||h!==this.eyeSep){a=this;b=m.focus;c=m.fov;d=m.aspect*this.aspect;e=m.near;f=m.far;g=m.zoom;var n=m.projectionMatrix.clone();h=this.eyeSep/2;var q=h*e/b,t=e*Math.tan(P.DEG2RAD*c*.5)/g;l.elements[12]=-h;k.elements[12]=h;var r=-t*d+q;var v=t*d+q;n.elements[0]=2*e/(v-r);n.elements[8]=(v+r)/(v-r);this.cameraL.projectionMatrix.copy(n);
+r=-t*d-q;v=t*d-q;n.elements[0]=2*e/(v-r);n.elements[8]=(v+r)/(v-r);this.cameraR.projectionMatrix.copy(n)}this.cameraL.matrixWorld.copy(m.matrixWorld).multiply(l);this.cameraR.matrixWorld.copy(m.matrixWorld).multiply(k)}}()});td.prototype=Object.create(G.prototype);td.prototype.constructor=td;Object.assign(Fe.prototype,{start:function(){this.oldTime=this.startTime=("undefined"===typeof performance?Date:performance).now();this.elapsedTime=0;this.running=!0},stop:function(){this.getElapsedTime();this.autoStart=
 this.running=!1},getElapsedTime:function(){this.getDelta();return this.elapsedTime},getDelta:function(){var a=0;if(this.autoStart&&!this.running)return this.start(),0;if(this.running){var b=("undefined"===typeof performance?Date:performance).now();a=(b-this.oldTime)/1E3;this.oldTime=b;this.elapsedTime+=a}return a}});Ge.prototype=Object.assign(Object.create(G.prototype),{constructor:Ge,getInput:function(){return this.gain},removeFilter:function(){null!==this.filter&&(this.gain.disconnect(this.filter),
 this.filter.disconnect(this.context.destination),this.gain.connect(this.context.destination),this.filter=null);return this},getFilter:function(){return this.filter},setFilter:function(a){null!==this.filter?(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination)):this.gain.disconnect(this.context.destination);this.filter=a;this.gain.connect(this.filter);this.filter.connect(this.context.destination);return this},getMasterVolume:function(){return this.gain.gain.value},setMasterVolume:function(a){this.gain.gain.setTargetAtTime(a,
 this.context.currentTime,.01);return this},updateMatrixWorld:function(){var a=new n,b=new na,c=new n,d=new n,e=new Fe;return function(f){G.prototype.updateMatrixWorld.call(this,f);f=this.context.listener;var g=this.up;this.timeDelta=e.getDelta();this.matrixWorld.decompose(a,b,c);d.set(0,0,-1).applyQuaternion(b);if(f.positionX){var h=this.context.currentTime+this.timeDelta;f.positionX.linearRampToValueAtTime(a.x,h);f.positionY.linearRampToValueAtTime(a.y,h);f.positionZ.linearRampToValueAtTime(a.z,
@@ -849,10 +849,10 @@ this);return}a=a.skeleton.bones;for(c=0;c<a.length;c++)if(a[c].name===f){f=c;bre
 a);else{b=this.Versioning.None;this.targetObject=a;void 0!==a.needsUpdate?b=this.Versioning.NeedsUpdate:void 0!==a.matrixWorldNeedsUpdate&&(b=this.Versioning.MatrixWorldNeedsUpdate);c=this.BindingType.Direct;if(void 0!==e){if("morphTargetInfluences"===d){if(!a.geometry){console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.",this);return}if(a.geometry.isBufferGeometry){if(!a.geometry.morphAttributes){console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.",
 this);return}for(c=0;c<this.node.geometry.morphAttributes.position.length;c++)if(a.geometry.morphAttributes.position[c].name===e){e=c;break}}else{if(!a.geometry.morphTargets){console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphTargets.",this);return}for(c=0;c<this.node.geometry.morphTargets.length;c++)if(a.geometry.morphTargets[c].name===e){e=c;break}}}c=this.BindingType.ArrayElement;this.resolvedProperty=f;this.propertyIndex=e}else void 0!==
 f.fromArray&&void 0!==f.toArray?(c=this.BindingType.HasFromToArray,this.resolvedProperty=f):Array.isArray(f)?(c=this.BindingType.EntireArray,this.resolvedProperty=f):this.propertyName=d;this.getValue=this.GetterByBindingType[c];this.setValue=this.SetterByBindingTypeAndVersioning[c][b]}}else console.error("THREE.PropertyBinding: Trying to update node for track: "+this.path+" but it wasn't found.")},unbind:function(){this.node=null;this.getValue=this._getValue_unbound;this.setValue=this._setValue_unbound}});
-Object.assign(ta.prototype,{_getValue_unbound:ta.prototype.getValue,_setValue_unbound:ta.prototype.setValue});Object.assign(Of.prototype,{isAnimationObjectGroup:!0,add:function(){for(var a=this._objects,b=a.length,c=this.nCachedObjects_,d=this._indicesByUUID,e=this._paths,f=this._parsedPaths,g=this._bindings,h=g.length,k=void 0,l=0,n=arguments.length;l!==n;++l){var p=arguments[l],v=p.uuid,t=d[v];if(void 0===t){t=b++;d[v]=t;a.push(p);v=0;for(var r=h;v!==r;++v)g[v].push(new ta(p,e[v],f[v]))}else if(t<
-c){k=a[t];var u=--c;r=a[u];d[r.uuid]=t;a[t]=r;d[v]=u;a[u]=p;v=0;for(r=h;v!==r;++v){var x=g[v],z=x[t];x[t]=x[u];void 0===z&&(z=new ta(p,e[v],f[v]));x[u]=z}}else a[t]!==k&&console.error("THREE.AnimationObjectGroup: Different objects with the same UUID detected. Clean the caches or recreate your infrastructure when reloading scenes.")}this.nCachedObjects_=c},remove:function(){for(var a=this._objects,b=this.nCachedObjects_,c=this._indicesByUUID,d=this._bindings,e=d.length,f=0,g=arguments.length;f!==g;++f){var h=
-arguments[f],k=h.uuid,l=c[k];if(void 0!==l&&l>=b){var n=b++,p=a[n];c[p.uuid]=l;a[l]=p;c[k]=n;a[n]=h;h=0;for(k=e;h!==k;++h){p=d[h];var v=p[l];p[l]=p[n];p[n]=v}}}this.nCachedObjects_=b},uncache:function(){for(var a=this._objects,b=a.length,c=this.nCachedObjects_,d=this._indicesByUUID,e=this._bindings,f=e.length,g=0,h=arguments.length;g!==h;++g){var k=arguments[g].uuid,l=d[k];if(void 0!==l)if(delete d[k],l<c){k=--c;var n=a[k],p=--b,v=a[p];d[n.uuid]=l;a[l]=n;d[v.uuid]=k;a[k]=v;a.pop();n=0;for(v=f;n!==
-v;++n){var t=e[n],r=t[p];t[l]=t[k];t[k]=r;t.pop()}}else for(p=--b,v=a[p],d[v.uuid]=l,a[l]=v,a.pop(),n=0,v=f;n!==v;++n)t=e[n],t[l]=t[p],t.pop()}this.nCachedObjects_=c},subscribe_:function(a,b){var c=this._bindingsIndicesByPath,d=c[a],e=this._bindings;if(void 0!==d)return e[d];var f=this._paths,g=this._parsedPaths,h=this._objects,k=this.nCachedObjects_,l=Array(h.length);d=e.length;c[a]=d;f.push(a);g.push(b);e.push(l);c=k;for(d=h.length;c!==d;++c)l[c]=new ta(h[c],a,b);return l},unsubscribe_:function(a){var b=
+Object.assign(ta.prototype,{_getValue_unbound:ta.prototype.getValue,_setValue_unbound:ta.prototype.setValue});Object.assign(Of.prototype,{isAnimationObjectGroup:!0,add:function(){for(var a=this._objects,b=a.length,c=this.nCachedObjects_,d=this._indicesByUUID,e=this._paths,f=this._parsedPaths,g=this._bindings,h=g.length,k=void 0,l=0,n=arguments.length;l!==n;++l){var p=arguments[l],u=p.uuid,t=d[u];if(void 0===t){t=b++;d[u]=t;a.push(p);u=0;for(var r=h;u!==r;++u)g[u].push(new ta(p,e[u],f[u]))}else if(t<
+c){k=a[t];var v=--c;r=a[v];d[r.uuid]=t;a[t]=r;d[u]=v;a[v]=p;u=0;for(r=h;u!==r;++u){var x=g[u],z=x[t];x[t]=x[v];void 0===z&&(z=new ta(p,e[u],f[u]));x[v]=z}}else a[t]!==k&&console.error("THREE.AnimationObjectGroup: Different objects with the same UUID detected. Clean the caches or recreate your infrastructure when reloading scenes.")}this.nCachedObjects_=c},remove:function(){for(var a=this._objects,b=this.nCachedObjects_,c=this._indicesByUUID,d=this._bindings,e=d.length,f=0,g=arguments.length;f!==g;++f){var h=
+arguments[f],k=h.uuid,l=c[k];if(void 0!==l&&l>=b){var n=b++,p=a[n];c[p.uuid]=l;a[l]=p;c[k]=n;a[n]=h;h=0;for(k=e;h!==k;++h){p=d[h];var u=p[l];p[l]=p[n];p[n]=u}}}this.nCachedObjects_=b},uncache:function(){for(var a=this._objects,b=a.length,c=this.nCachedObjects_,d=this._indicesByUUID,e=this._bindings,f=e.length,g=0,h=arguments.length;g!==h;++g){var k=arguments[g].uuid,l=d[k];if(void 0!==l)if(delete d[k],l<c){k=--c;var n=a[k],p=--b,u=a[p];d[n.uuid]=l;a[l]=n;d[u.uuid]=k;a[k]=u;a.pop();n=0;for(u=f;n!==
+u;++n){var t=e[n],r=t[p];t[l]=t[k];t[k]=r;t.pop()}}else for(p=--b,u=a[p],d[u.uuid]=l,a[l]=u,a.pop(),n=0,u=f;n!==u;++n)t=e[n],t[l]=t[p],t.pop()}this.nCachedObjects_=c},subscribe_:function(a,b){var c=this._bindingsIndicesByPath,d=c[a],e=this._bindings;if(void 0!==d)return e[d];var f=this._paths,g=this._parsedPaths,h=this._objects,k=this.nCachedObjects_,l=Array(h.length);d=e.length;c[a]=d;f.push(a);g.push(b);e.push(l);c=k;for(d=h.length;c!==d;++c)l[c]=new ta(h[c],a,b);return l},unsubscribe_:function(a){var b=
 this._bindingsIndicesByPath,c=b[a];if(void 0!==c){var d=this._paths,e=this._parsedPaths,f=this._bindings,g=f.length-1,h=f[g];b[a[g]]=c;f[c]=h;f.pop();e[c]=e[g];e.pop();d[c]=d[g];d.pop()}}});Object.assign(Pf.prototype,{play:function(){this._mixer._activateAction(this);return this},stop:function(){this._mixer._deactivateAction(this);return this.reset()},reset:function(){this.paused=!1;this.enabled=!0;this.time=0;this._loopCount=-1;this._startTime=null;return this.stopFading().stopWarping()},isRunning:function(){return this.enabled&&
 !this.paused&&0!==this.timeScale&&null===this._startTime&&this._mixer._isActiveAction(this)},isScheduled:function(){return this._mixer._isActiveAction(this)},startAt:function(a){this._startTime=a;return this},setLoop:function(a,b){this.loop=a;this.repetitions=b;return this},setEffectiveWeight:function(a){this.weight=a;this._effectiveWeight=this.enabled?a:0;return this.stopFading()},getEffectiveWeight:function(){return this._effectiveWeight},fadeIn:function(a){return this._scheduleFading(a,0,1)},fadeOut:function(a){return this._scheduleFading(a,
 1,0)},crossFadeFrom:function(a,b,c){a.fadeOut(b);this.fadeIn(b);if(c){c=this._clip.duration;var d=a._clip.duration,e=c/d;a.warp(1,d/c,b);this.warp(e,1,b)}return this},crossFadeTo:function(a,b,c){return a.crossFadeFrom(this,b,c)},stopFading:function(){var a=this._weightInterpolant;null!==a&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(a));return this},setEffectiveTimeScale:function(a){this.timeScale=a;this._effectiveTimeScale=this.paused?0:a;return this.stopWarping()},getEffectiveTimeScale:function(){return this._effectiveTimeScale},
@@ -886,16 +886,16 @@ this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.
 a&&(console.warn("THREE.Line3: .getCenter() target is now required"),a=new n);return a.addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(a){void 0===a&&(console.warn("THREE.Line3: .delta() target is now required"),a=new n);return a.subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},at:function(a,b){void 0===b&&(console.warn("THREE.Line3: .at() target is now required"),b=
 new n);return this.delta(b).multiplyScalar(a).add(this.start)},closestPointToPointParameter:function(){var a=new n,b=new n;return function(c,d){a.subVectors(c,this.start);b.subVectors(this.end,this.start);c=b.dot(b);c=b.dot(a)/c;d&&(c=P.clamp(c,0,1));return c}}(),closestPointToPoint:function(a,b,c){a=this.closestPointToPointParameter(a,b);void 0===c&&(console.warn("THREE.Line3: .closestPointToPoint() target is now required"),c=new n);return this.delta(c).multiplyScalar(a).add(this.start)},applyMatrix4:function(a){this.start.applyMatrix4(a);
 this.end.applyMatrix4(a);return this},equals:function(a){return a.start.equals(this.start)&&a.end.equals(this.end)}});ud.prototype=Object.create(G.prototype);ud.prototype.constructor=ud;ud.prototype.isImmediateRenderObject=!0;vd.prototype=Object.create(Y.prototype);vd.prototype.constructor=vd;vd.prototype.update=function(){var a=new n,b=new n,c=new pa;return function(){var d=["a","b","c"];this.object.updateMatrixWorld(!0);c.getNormalMatrix(this.object.matrixWorld);var e=this.object.matrixWorld,f=
-this.geometry.attributes.position,g=this.object.geometry;if(g&&g.isGeometry)for(var h=g.vertices,k=g.faces,l=g=0,n=k.length;l<n;l++)for(var p=k[l],v=0,t=p.vertexNormals.length;v<t;v++){var r=p.vertexNormals[v];a.copy(h[p[d[v]]]).applyMatrix4(e);b.copy(r).applyMatrix3(c).normalize().multiplyScalar(this.size).add(a);f.setXYZ(g,a.x,a.y,a.z);g+=1;f.setXYZ(g,b.x,b.y,b.z);g+=1}else if(g&&g.isBufferGeometry)for(d=g.attributes.position,h=g.attributes.normal,v=g=0,t=d.count;v<t;v++)a.set(d.getX(v),d.getY(v),
-d.getZ(v)).applyMatrix4(e),b.set(h.getX(v),h.getY(v),h.getZ(v)),b.applyMatrix3(c).normalize().multiplyScalar(this.size).add(a),f.setXYZ(g,a.x,a.y,a.z),g+=1,f.setXYZ(g,b.x,b.y,b.z),g+=1;f.needsUpdate=!0}}();tc.prototype=Object.create(G.prototype);tc.prototype.constructor=tc;tc.prototype.dispose=function(){this.cone.geometry.dispose();this.cone.material.dispose()};tc.prototype.update=function(){var a=new n;return function(){this.light.updateMatrixWorld();var b=this.light.distance?this.light.distance:
+this.geometry.attributes.position,g=this.object.geometry;if(g&&g.isGeometry)for(var h=g.vertices,k=g.faces,l=g=0,n=k.length;l<n;l++)for(var p=k[l],u=0,t=p.vertexNormals.length;u<t;u++){var r=p.vertexNormals[u];a.copy(h[p[d[u]]]).applyMatrix4(e);b.copy(r).applyMatrix3(c).normalize().multiplyScalar(this.size).add(a);f.setXYZ(g,a.x,a.y,a.z);g+=1;f.setXYZ(g,b.x,b.y,b.z);g+=1}else if(g&&g.isBufferGeometry)for(d=g.attributes.position,h=g.attributes.normal,u=g=0,t=d.count;u<t;u++)a.set(d.getX(u),d.getY(u),
+d.getZ(u)).applyMatrix4(e),b.set(h.getX(u),h.getY(u),h.getZ(u)),b.applyMatrix3(c).normalize().multiplyScalar(this.size).add(a),f.setXYZ(g,a.x,a.y,a.z),g+=1,f.setXYZ(g,b.x,b.y,b.z),g+=1;f.needsUpdate=!0}}();tc.prototype=Object.create(G.prototype);tc.prototype.constructor=tc;tc.prototype.dispose=function(){this.cone.geometry.dispose();this.cone.material.dispose()};tc.prototype.update=function(){var a=new n;return function(){this.light.updateMatrixWorld();var b=this.light.distance?this.light.distance:
 1E3,c=b*Math.tan(this.light.angle);this.cone.scale.set(c,c,b);a.setFromMatrixPosition(this.light.target.matrixWorld);this.cone.lookAt(a);void 0!==this.color?this.cone.material.color.set(this.color):this.cone.material.color.copy(this.light.color)}}();uc.prototype=Object.create(Y.prototype);uc.prototype.constructor=uc;uc.prototype.updateMatrixWorld=function(){var a=new n,b=new N,c=new N;return function(d){var e=this.bones,f=this.geometry,g=f.getAttribute("position");c.getInverse(this.root.matrixWorld);
 for(var h=0,k=0;h<e.length;h++){var l=e[h];l.parent&&l.parent.isBone&&(b.multiplyMatrices(c,l.matrixWorld),a.setFromMatrixPosition(b),g.setXYZ(k,a.x,a.y,a.z),b.multiplyMatrices(c,l.parent.matrixWorld),a.setFromMatrixPosition(b),g.setXYZ(k+1,a.x,a.y,a.z),k+=2)}f.getAttribute("position").needsUpdate=!0;G.prototype.updateMatrixWorld.call(this,d)}}();vc.prototype=Object.create(qa.prototype);vc.prototype.constructor=vc;vc.prototype.dispose=function(){this.geometry.dispose();this.material.dispose()};vc.prototype.update=
 function(){void 0!==this.color?this.material.color.set(this.color):this.material.color.copy(this.light.color)};wc.prototype=Object.create(sa.prototype);wc.prototype.constructor=wc;wc.prototype.update=function(){this.scale.set(.5*this.light.width,.5*this.light.height,1);if(void 0!==this.color)this.material.color.set(this.color),this.children[0].material.color.set(this.color);else{this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity);var a=this.material.color,b=Math.max(a.r,
 a.g,a.b);1<b&&a.multiplyScalar(1/b);this.children[0].material.color.copy(this.material.color)}};wc.prototype.dispose=function(){this.geometry.dispose();this.material.dispose();this.children[0].geometry.dispose();this.children[0].material.dispose()};xc.prototype=Object.create(G.prototype);xc.prototype.constructor=xc;xc.prototype.dispose=function(){this.children[0].geometry.dispose();this.children[0].material.dispose()};xc.prototype.update=function(){var a=new n,b=new C,c=new C;return function(){var d=
 this.children[0];if(void 0!==this.color)this.material.color.set(this.color);else{var e=d.geometry.getAttribute("color");b.copy(this.light.color);c.copy(this.light.groundColor);for(var f=0,g=e.count;f<g;f++){var h=f<g/2?b:c;e.setXYZ(f,h.r,h.g,h.b)}e.needsUpdate=!0}d.lookAt(a.setFromMatrixPosition(this.light.matrixWorld).negate())}}();yc.prototype=Object.create(qa.prototype);yc.prototype.constructor=yc;yc.prototype.dispose=function(){this.geometry.dispose();this.material.dispose()};yc.prototype.onBeforeRender=
 function(){return function(){this.position.copy(this.lightProbe.position);this.scale.set(1,1,1).multiplyScalar(this.size);this.material.uniforms.intensity.value=this.lightProbe.intensity}}();ce.prototype=Object.assign(Object.create(Y.prototype),{constructor:ce,copy:function(a){Y.prototype.copy.call(this,a);this.geometry.copy(a.geometry);this.material.copy(a.material);return this},clone:function(){return(new this.constructor).copy(this)}});de.prototype=Object.create(Y.prototype);de.prototype.constructor=
-de;zc.prototype=Object.create(sa.prototype);zc.prototype.constructor=zc;zc.prototype.update=function(){function a(a,b,d,e){d=(b-a)/d;t.setXYZ(k,0,0,0);l++;for(n=a;n<b;n+=d)p=k+l,t.setXYZ(p,Math.sin(n)*c,0,Math.cos(n)*c),t.setXYZ(p+1,Math.sin(Math.min(n+d,b))*c,0,Math.cos(Math.min(n+d,b))*c),t.setXYZ(p+2,0,0,0),l+=3;v.addGroup(k,l,e);k+=l;l=0}var b=this.audio,c=this.range,d=this.divisionsInnerAngle,e=this.divisionsOuterAngle,f=P.degToRad(b.panner.coneInnerAngle);b=P.degToRad(b.panner.coneOuterAngle);
-var g=f/2,h=b/2,k=0,l=0,n,p,v=this.geometry,t=v.attributes.position;v.clearGroups();a(-h,-g,e,0);a(-g,g,d,1);a(g,h,e,0);t.needsUpdate=!0;f===b&&(this.material[0].visible=!1)};zc.prototype.dispose=function(){this.geometry.dispose();this.material[0].dispose();this.material[1].dispose()};wd.prototype=Object.create(Y.prototype);wd.prototype.constructor=wd;wd.prototype.update=function(){var a=new n,b=new n,c=new pa;return function(){this.object.updateMatrixWorld(!0);c.getNormalMatrix(this.object.matrixWorld);
+de;zc.prototype=Object.create(sa.prototype);zc.prototype.constructor=zc;zc.prototype.update=function(){function a(a,b,d,e){d=(b-a)/d;t.setXYZ(k,0,0,0);l++;for(n=a;n<b;n+=d)p=k+l,t.setXYZ(p,Math.sin(n)*c,0,Math.cos(n)*c),t.setXYZ(p+1,Math.sin(Math.min(n+d,b))*c,0,Math.cos(Math.min(n+d,b))*c),t.setXYZ(p+2,0,0,0),l+=3;u.addGroup(k,l,e);k+=l;l=0}var b=this.audio,c=this.range,d=this.divisionsInnerAngle,e=this.divisionsOuterAngle,f=P.degToRad(b.panner.coneInnerAngle);b=P.degToRad(b.panner.coneOuterAngle);
+var g=f/2,h=b/2,k=0,l=0,n,p,u=this.geometry,t=u.attributes.position;u.clearGroups();a(-h,-g,e,0);a(-g,g,d,1);a(g,h,e,0);t.needsUpdate=!0;f===b&&(this.material[0].visible=!1)};zc.prototype.dispose=function(){this.geometry.dispose();this.material[0].dispose();this.material[1].dispose()};wd.prototype=Object.create(Y.prototype);wd.prototype.constructor=wd;wd.prototype.update=function(){var a=new n,b=new n,c=new pa;return function(){this.object.updateMatrixWorld(!0);c.getNormalMatrix(this.object.matrixWorld);
 var d=this.object.matrixWorld,e=this.geometry.attributes.position,f=this.object.geometry,g=f.vertices;f=f.faces;for(var h=0,k=0,l=f.length;k<l;k++){var n=f[k],p=n.normal;a.copy(g[n.a]).add(g[n.b]).add(g[n.c]).divideScalar(3).applyMatrix4(d);b.copy(p).applyMatrix3(c).normalize().multiplyScalar(this.size).add(a);e.setXYZ(h,a.x,a.y,a.z);h+=1;e.setXYZ(h,b.x,b.y,b.z);h+=1}e.needsUpdate=!0}}();Ac.prototype=Object.create(G.prototype);Ac.prototype.constructor=Ac;Ac.prototype.dispose=function(){this.lightPlane.geometry.dispose();
 this.lightPlane.material.dispose();this.targetLine.geometry.dispose();this.targetLine.material.dispose()};Ac.prototype.update=function(){var a=new n,b=new n,c=new n;return function(){a.setFromMatrixPosition(this.light.matrixWorld);b.setFromMatrixPosition(this.light.target.matrixWorld);c.subVectors(b,a);this.lightPlane.lookAt(b);void 0!==this.color?(this.lightPlane.material.color.set(this.color),this.targetLine.material.color.set(this.color)):(this.lightPlane.material.color.copy(this.light.color),
 this.targetLine.material.color.copy(this.light.color));this.targetLine.lookAt(b);this.targetLine.scale.z=c.length()}}();xd.prototype=Object.create(Y.prototype);xd.prototype.constructor=xd;xd.prototype.update=function(){function a(a,g,h,k){d.set(g,h,k).unproject(e);a=c[a];if(void 0!==a)for(g=b.getAttribute("position"),h=0,k=a.length;h<k;h++)g.setXYZ(a[h],d.x,d.y,d.z)}var b,c,d=new n,e=new Wa;return function(){b=this.geometry;c=this.pointMap;e.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse);

+ 35 - 28
build/three.module.js

@@ -22398,10 +22398,10 @@ function WebXRManager( renderer ) {
 
 	var gl = renderer.context;
 
-	var device = null;
 	var session = null;
 
-	var frameOfReference = null;
+	var referenceSpace = null;
+	var referenceSpaceType = 'local-floor';
 
 	var pose = null;
 
@@ -22410,7 +22410,7 @@ function WebXRManager( renderer ) {
 
 	function isPresenting() {
 
-		return session !== null && frameOfReference !== null;
+		return session !== null && referenceSpace !== null;
 
 	}
 
@@ -22450,24 +22450,19 @@ function WebXRManager( renderer ) {
 
 	};
 
-	this.getDevice = function () {
-
-		return device;
-
-	};
+	//
 
-	this.setDevice = function ( value ) {
+	function onSessionEvent( event ) {
 
-		if ( value !== undefined ) device = value;
+		for ( var i = 0; i < controllers.length; i ++ ) {
 
-	};
+			if ( inputSources[ i ] === event.inputSource ) {
 
-	//
+				controllers[ i ].dispatchEvent( { type: event.type } );
 
-	function onSessionEvent( event ) {
+			}
 
-		var controller = controllers[ inputSources.indexOf( event.inputSource ) ];
-		if ( controller ) controller.dispatchEvent( { type: event.type } );
+		}
 
 	}
 
@@ -22479,9 +22474,9 @@ function WebXRManager( renderer ) {
 
 	}
 
-	function onRequestFrameOfReference( value ) {
+	function onRequestReferenceSpace( value ) {
 
-		frameOfReference = value;
+		referenceSpace = value;
 
 		animation.setContext( session );
 		animation.start();
@@ -22492,7 +22487,9 @@ function WebXRManager( renderer ) {
 
 	};
 
-	this.setFrameOfReferenceType = function ( value ) {
+	this.setReferenceSpaceType = function ( value ) {
+
+		referenceSpaceType = value;
 
 	};
 
@@ -22509,15 +22506,15 @@ function WebXRManager( renderer ) {
 
 			session.updateRenderState( { baseLayer: new XRWebGLLayer( session, gl ) } );
 
-			session.requestReferenceSpace( { type: 'stationary', subtype: 'eye-level' } ).then( onRequestFrameOfReference );
+			session.requestReferenceSpace( referenceSpaceType ).then( onRequestReferenceSpace );
 
 			//
 
-			inputSources = session.getInputSources();
+			inputSources = session.inputSources;
 
 			session.addEventListener( 'inputsourceschange', function () {
 
-				inputSources = session.getInputSources();
+				inputSources = session.inputSources;
 				console.log( inputSources );
 
 				for ( var i = 0; i < controllers.length; i ++ ) {
@@ -22594,7 +22591,7 @@ function WebXRManager( renderer ) {
 
 	function onAnimationFrame( time, frame ) {
 
-		pose = frame.getViewerPose( frameOfReference );
+		pose = frame.getViewerPose( referenceSpace );
 
 		if ( pose !== null ) {
 
@@ -22607,7 +22604,7 @@ function WebXRManager( renderer ) {
 
 				var view = views[ i ];
 				var viewport = layer.getViewport( view );
-				var viewMatrix = view.transform.inverse().matrix;
+				var viewMatrix = view.transform.inverse.matrix;
 
 				var camera = cameraVR.cameras[ i ];
 				camera.matrix.fromArray( viewMatrix ).getInverse( camera.matrix );
@@ -22634,13 +22631,11 @@ function WebXRManager( renderer ) {
 
 			if ( inputSource ) {
 
-				var inputPose = frame.getPose( inputSource.targetRaySpace, frameOfReference );
+				var inputPose = frame.getPose( inputSource.targetRaySpace, referenceSpace );
 
 				if ( inputPose !== null ) {
 
-					var targetRay = new XRRay( inputPose.transform );
-					controller.matrix.elements = targetRay.matrix;
-
+					controller.matrix.fromArray( inputPose.transform.matrix );
 					controller.matrix.decompose( controller.position, controller.rotation, controller.scale );
 					controller.visible = true;
 
@@ -22678,6 +22673,18 @@ function WebXRManager( renderer ) {
 
 	};
 
+	this.getDevice = function () {
+
+		console.warn( 'THREE.WebXRManager: getDevice() has been deprecated.' );
+
+	};
+
+	this.setDevice = function () {
+
+		console.warn( 'THREE.WebXRManager: setDevice() has been deprecated.' );
+
+	};
+
 	this.submitFrame = function () {};
 
 }
@@ -22949,7 +22956,7 @@ function WebGLRenderer( parameters ) {
 
 	// vr
 
-	var vr = ( typeof navigator !== 'undefined' && 'xr' in navigator && 'requestDevice' in navigator.xr ) ? new WebXRManager( _this ) : new WebVRManager( _this );
+	var vr = ( typeof navigator !== 'undefined' && 'xr' in navigator && 'supportsSession' in navigator.xr ) ? new WebXRManager( _this ) : new WebVRManager( _this );
 
 	this.vr = vr;