Browse Source

Updated build.

Mr.doob 13 years ago
parent
commit
d46ab7e2ec
1 changed files with 83 additions and 82 deletions
  1. 83 82
      build/three.min.js

+ 83 - 82
build/three.min.js

@@ -33,7 +33,7 @@ THREE.Matrix3.prototype={constructor:THREE.Matrix3,getInverse:function(a){var b=
 transpose:function(){var a,b=this.elements;a=b[1];b[1]=b[3];b[3]=a;a=b[2];b[2]=b[6];b[6]=a;a=b[5];b[5]=b[7];b[7]=a;return this},transposeIntoArray:function(a){var b=this.m;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}};THREE.Matrix4=function(a,b,c,d,f,e,g,h,i,j,l,n,m,q,o,p){this.elements=new Float32Array(16);this.set(void 0!==a?a:1,b||0,c||0,d||0,f||0,void 0!==e?e:1,g||0,h||0,i||0,j||0,void 0!==l?l:1,n||0,m||0,q||0,o||0,void 0!==p?p:1)};
 THREE.Matrix4.prototype={constructor:THREE.Matrix4,set:function(a,b,c,d,f,e,g,h,i,j,l,n,m,q,o,p){var r=this.elements;r[0]=a;r[4]=b;r[8]=c;r[12]=d;r[1]=f;r[5]=e;r[9]=g;r[13]=h;r[2]=i;r[6]=j;r[10]=l;r[14]=n;r[3]=m;r[7]=q;r[11]=o;r[15]=p;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},copy:function(a){a=a.elements;this.set(a[0],a[4],a[8],a[12],a[1],a[5],a[9],a[13],a[2],a[6],a[10],a[14],a[3],a[7],a[11],a[15]);return this},lookAt:function(a,b,c){var d=this.elements,
 f=THREE.Matrix4.__v1,e=THREE.Matrix4.__v2,g=THREE.Matrix4.__v3;g.sub(a,b).normalize();0===g.length()&&(g.z=1);f.cross(c,g).normalize();0===f.length()&&(g.x+=1E-4,f.cross(c,g).normalize());e.cross(g,f);d[0]=f.x;d[4]=e.x;d[8]=g.x;d[1]=f.y;d[5]=e.y;d[9]=g.y;d[2]=f.z;d[6]=e.z;d[10]=g.z;return this},multiply:function(a,b){var c=a.elements,d=b.elements,f=this.elements,e=c[0],g=c[4],h=c[8],i=c[12],j=c[1],l=c[5],n=c[9],m=c[13],q=c[2],o=c[6],p=c[10],r=c[14],t=c[3],u=c[7],v=c[11],c=c[15],s=d[0],z=d[4],w=d[8],
-A=d[12],J=d[1],D=d[5],F=d[9],B=d[13],E=d[2],H=d[6],Q=d[10],L=d[14],K=d[3],I=d[7],M=d[11],d=d[15];f[0]=e*s+g*J+h*E+i*K;f[4]=e*z+g*D+h*H+i*I;f[8]=e*w+g*F+h*Q+i*M;f[12]=e*A+g*B+h*L+i*d;f[1]=j*s+l*J+n*E+m*K;f[5]=j*z+l*D+n*H+m*I;f[9]=j*w+l*F+n*Q+m*M;f[13]=j*A+l*B+n*L+m*d;f[2]=q*s+o*J+p*E+r*K;f[6]=q*z+o*D+p*H+r*I;f[10]=q*w+o*F+p*Q+r*M;f[14]=q*A+o*B+p*L+r*d;f[3]=t*s+u*J+v*E+c*K;f[7]=t*z+u*D+v*H+c*I;f[11]=t*w+u*F+v*Q+c*M;f[15]=t*A+u*B+v*L+c*d;return this},multiplySelf:function(a){return this.multiply(this,
+A=d[12],I=d[1],D=d[5],F=d[9],B=d[13],E=d[2],H=d[6],Q=d[10],L=d[14],K=d[3],J=d[7],M=d[11],d=d[15];f[0]=e*s+g*I+h*E+i*K;f[4]=e*z+g*D+h*H+i*J;f[8]=e*w+g*F+h*Q+i*M;f[12]=e*A+g*B+h*L+i*d;f[1]=j*s+l*I+n*E+m*K;f[5]=j*z+l*D+n*H+m*J;f[9]=j*w+l*F+n*Q+m*M;f[13]=j*A+l*B+n*L+m*d;f[2]=q*s+o*I+p*E+r*K;f[6]=q*z+o*D+p*H+r*J;f[10]=q*w+o*F+p*Q+r*M;f[14]=q*A+o*B+p*L+r*d;f[3]=t*s+u*I+v*E+c*K;f[7]=t*z+u*D+v*H+c*J;f[11]=t*w+u*F+v*Q+c*M;f[15]=t*A+u*B+v*L+c*d;return this},multiplySelf:function(a){return this.multiply(this,
 a)},multiplyToArray:function(a,b,c){var d=this.elements;this.multiply(a,b);c[0]=d[0];c[1]=d[1];c[2]=d[2];c[3]=d[3];c[4]=d[4];c[5]=d[5];c[6]=d[6];c[7]=d[7];c[8]=d[8];c[9]=d[9];c[10]=d[10];c[11]=d[11];c[12]=d[12];c[13]=d[13];c[14]=d[14];c[15]=d[15];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},multiplyVector3:function(a){var b=this.elements,
 c=a.x,d=a.y,f=a.z,e=1/(b[3]*c+b[7]*d+b[11]*f+b[15]);a.x=(b[0]*c+b[4]*d+b[8]*f+b[12])*e;a.y=(b[1]*c+b[5]*d+b[9]*f+b[13])*e;a.z=(b[2]*c+b[6]*d+b[10]*f+b[14])*e;return a},multiplyVector4:function(a){var b=this.elements,c=a.x,d=a.y,f=a.z,e=a.w;a.x=b[0]*c+b[4]*d+b[8]*f+b[12]*e;a.y=b[1]*c+b[5]*d+b[9]*f+b[13]*e;a.z=b[2]*c+b[6]*d+b[10]*f+b[14]*e;a.w=b[3]*c+b[7]*d+b[11]*f+b[15]*e;return a},multiplyVector3Array:function(a){for(var b=THREE.Matrix4.__v1,c=0,d=a.length;c<d;c+=3)b.x=a[c],b.y=a[c+1],b.z=a[c+2],
 this.multiplyVector3(b),a[c]=b.x,a[c+1]=b.y,a[c+2]=b.z;return a},rotateAxis:function(a){var b=this.elements,c=a.x,d=a.y,f=a.z;a.x=c*b[0]+d*b[4]+f*b[8];a.y=c*b[1]+d*b[5]+f*b[9];a.z=c*b[2]+d*b[6]+f*b[10];a.normalize();return a},crossVector:function(a){var b=this.elements,c=new THREE.Vector4;c.x=b[0]*a.x+b[4]*a.y+b[8]*a.z+b[12]*a.w;c.y=b[1]*a.x+b[5]*a.y+b[9]*a.z+b[13]*a.w;c.z=b[2]*a.x+b[6]*a.y+b[10]*a.z+b[14]*a.w;c.w=a.w?b[3]*a.x+b[7]*a.y+b[11]*a.z+b[15]*a.w:1;return c},determinant:function(){var a=
@@ -59,7 +59,7 @@ THREE.Frustum.prototype.setFromMatrix=function(a){var b=this.planes,c=a.elements
 THREE.Frustum.prototype.contains=function(a){for(var b=0,c=this.planes,b=a.matrixWorld,d=b.elements,a=-a.geometry.boundingSphere.radius*b.getMaxScaleOnAxis(),f=0;6>f;f++)if(b=c[f].x*d[12]+c[f].y*d[13]+c[f].z*d[14]+c[f].w,b<=a)return!1;return!0};THREE.Frustum.__v1=new THREE.Vector3;
 (function(a){a.Ray=function(b,c,d,f){this.origin=b||new a.Vector3;this.direction=c||new a.Vector3;this.near=d||0;this.far=f||Infinity};var b=new a.Vector3,c=new a.Vector3,d=new a.Vector3,f=new a.Vector3,e=new a.Vector3,g=new a.Vector3,h=new a.Matrix4,i=function(a,b){return a.distance-b.distance},j=new a.Vector3,l=new a.Vector3,n=new a.Vector3,m=function(a,b,c){j.sub(c,a);var d=j.dot(b),a=l.add(a,n.copy(b).multiplyScalar(d));return c.distanceTo(a)},q=function(a,b,c,d){j.sub(d,b);l.sub(c,b);n.sub(a,
 b);var a=j.dot(j),b=j.dot(l),c=j.dot(n),f=l.dot(l),d=l.dot(n),e=1/(a*f-b*b),f=(f*c-b*d)*e,a=(a*d-b*c)*e;return 0<=f&&0<=a&&1>f+a},o=function(i,j,l){var n,p;if(i instanceof a.Particle){n=m(j.origin,j.direction,i.matrixWorld.getPosition());if(n>i.scale.x)return l;p={distance:n,point:i.position,face:null,object:i};l.push(p)}else if(i instanceof a.Mesh){var o=i.geometry.boundingSphere.radius*i.matrixWorld.getMaxScaleOnAxis();n=m(j.origin,j.direction,i.matrixWorld.getPosition());if(n>o)return l;var w,
-A,J=i.geometry,D=J.vertices,F,B,E;F=i.geometry.materials;B=i.material instanceof a.MeshFaceMaterial;var H,Q=j.precision;i.matrixRotationWorld.extractRotation(i.matrixWorld);b.copy(j.origin);h.getInverse(i.matrixWorld);c.copy(b);h.multiplyVector3(c);d.copy(j.direction);h.rotateAxis(d).normalize();o=0;for(w=J.faces.length;o<w;o++)if(p=J.faces[o],n=!0===B?F[p.materialIndex]:i.material,void 0!==n&&(E=n.side,f.sub(p.centroid,c),e=p.normal,n=d.dot(e),!(Math.abs(n)<Q)&&(A=e.dot(f)/n,!(0>A)&&(E===a.DoubleSide||
+A,I=i.geometry,D=I.vertices,F,B,E;F=i.geometry.materials;B=i.material instanceof a.MeshFaceMaterial;var H,Q=j.precision;i.matrixRotationWorld.extractRotation(i.matrixWorld);b.copy(j.origin);h.getInverse(i.matrixWorld);c.copy(b);h.multiplyVector3(c);d.copy(j.direction);h.rotateAxis(d).normalize();o=0;for(w=I.faces.length;o<w;o++)if(p=I.faces[o],n=!0===B?F[p.materialIndex]:i.material,void 0!==n&&(E=n.side,f.sub(p.centroid,c),e=p.normal,n=d.dot(e),!(Math.abs(n)<Q)&&(A=e.dot(f)/n,!(0>A)&&(E===a.DoubleSide||
 (E===a.FrontSide?0>n:0<n)))))if(g.add(c,d.multiplyScalar(A)),p instanceof a.Face3)n=D[p.a],A=D[p.b],E=D[p.c],q(g,n,A,E)&&(A=i.matrixWorld.multiplyVector3(g.clone()),n=b.distanceTo(A),n<j.near||n>j.far||(p={distance:n,point:A,face:p,faceIndex:o,object:i},l.push(p)));else if(p instanceof a.Face4&&(n=D[p.a],A=D[p.b],E=D[p.c],H=D[p.d],q(g,n,A,H)||q(g,A,E,H)))A=i.matrixWorld.multiplyVector3(g.clone()),n=b.distanceTo(A),n<j.near||n>j.far||(p={distance:n,point:A,face:p,faceIndex:o,object:i},l.push(p))}},
 p=function(a,b,c){for(var a=a.getDescendants(),d=0,f=a.length;d<f;d++)o(a[d],b,c)};a.Ray.prototype.precision=1E-4;a.Ray.prototype.set=function(a,b){this.origin=a;this.direction=b};a.Ray.prototype.intersectObject=function(a,b){var c=[];!0===b&&p(a,this,c);o(a,this,c);c.sort(i);return c};a.Ray.prototype.intersectObjects=function(a,b){for(var c=[],d=0,f=a.length;d<f;d++)o(a[d],this,c),!0===b&&p(a[d],this,c);c.sort(i);return c}})(THREE);
 THREE.Rectangle=function(){function a(){e=d-b;g=f-c}var b=0,c=0,d=0,f=0,e=0,g=0,h=!0;this.getX=function(){return b};this.getY=function(){return c};this.getWidth=function(){return e};this.getHeight=function(){return g};this.getLeft=function(){return b};this.getTop=function(){return c};this.getRight=function(){return d};this.getBottom=function(){return f};this.set=function(e,g,l,n){h=!1;b=e;c=g;d=l;f=n;a()};this.addPoint=function(e,g){!0===h?(h=!1,b=e,c=g,d=e,f=g):(b=b<e?b:e,c=c<g?c:g,d=d>e?d:e,f=f>
@@ -76,8 +76,8 @@ if(1!==this.scale.x||1!==this.scale.y||1!==this.scale.z)this.matrix.scale(this.s
 c;b++)this.children[b].updateMatrixWorld(a)},clone:function(a){void 0===a&&(a=new THREE.Object3D);a.name=this.name;a.up.copy(this.up);a.position.copy(this.position);a.rotation instanceof THREE.Vector3&&a.rotation.copy(this.rotation);a.eulerOrder=this.eulerOrder;a.scale.copy(this.scale);a.renderDepth=this.renderDepth;a.rotationAutoUpdate=this.rotationAutoUpdate;a.matrix.copy(this.matrix);a.matrixWorld.copy(this.matrixWorld);a.matrixRotationWorld.copy(this.matrixRotationWorld);a.matrixAutoUpdate=this.matrixAutoUpdate;
 a.matrixWorldNeedsUpdate=this.matrixWorldNeedsUpdate;a.quaternion.copy(this.quaternion);a.useQuaternion=this.useQuaternion;a.boundRadius=this.boundRadius;a.boundRadiusScale=this.boundRadiusScale;a.visible=this.visible;a.castShadow=this.castShadow;a.receiveShadow=this.receiveShadow;a.frustumCulled=this.frustumCulled;return a}};THREE.Object3D.__m1=new THREE.Matrix4;THREE.Object3D.defaultEulerOrder="XYZ";THREE.Object3DCount=0;
 THREE.Projector=function(){function a(){if(e===h){var a=new THREE.RenderableObject;g.push(a);h++;e++;return a}return g[e++]}function b(){if(j===n){var a=new THREE.RenderableVertex;l.push(a);n++;j++;return a}return l[j++]}function c(a,b){return b.z-a.z}function d(a,b){var c=0,d=1,f=a.z+a.w,e=b.z+b.w,g=-a.z+a.w,h=-b.z+b.w;if(0<=f&&0<=e&&0<=g&&0<=h)return!0;if(0>f&&0>e||0>g&&0>h)return!1;0>f?c=Math.max(c,f/(f-e)):0>e&&(d=Math.min(d,f/(f-e)));0>g?c=Math.max(c,g/(g-h)):0>h&&(d=Math.min(d,g/(g-h)));if(d<
-c)return!1;a.lerpSelf(b,c);b.lerpSelf(a,1-d);return!0}var f,e,g=[],h=0,i,j,l=[],n=0,m,q,o=[],p=0,r,t=[],u=0,v,s,z=[],w=0,A,J,D=[],F=0,B={objects:[],sprites:[],lights:[],elements:[]},E=new THREE.Vector3,H=new THREE.Vector4,Q=new THREE.Matrix4,L=new THREE.Matrix4,K=new THREE.Frustum,I=new THREE.Vector4,M=new THREE.Vector4;this.projectVector=function(a,b){b.matrixWorldInverse.getInverse(b.matrixWorld);Q.multiply(b.projectionMatrix,b.matrixWorldInverse);Q.multiplyVector3(a);return a};this.unprojectVector=
-function(a,b){b.projectionMatrixInverse.getInverse(b.projectionMatrix);Q.multiply(b.matrixWorld,b.projectionMatrixInverse);Q.multiplyVector3(a);return a};this.pickingRay=function(a,b){var c;a.z=-1;c=new THREE.Vector3(a.x,a.y,1);this.unprojectVector(a,b);this.unprojectVector(c,b);c.subSelf(a).normalize();return new THREE.Ray(a,c)};this.projectScene=function(g,h,n,N){var fa=h.near,S=h.far,ra=!1,wa,O,ga,P,X,ia,$,ca,Ja,ua,La,Wa,oa,Xa,kb,Ta;J=s=r=q=0;B.elements.length=0;g.updateMatrixWorld();void 0===
+c)return!1;a.lerpSelf(b,c);b.lerpSelf(a,1-d);return!0}var f,e,g=[],h=0,i,j,l=[],n=0,m,q,o=[],p=0,r,t=[],u=0,v,s,z=[],w=0,A,I,D=[],F=0,B={objects:[],sprites:[],lights:[],elements:[]},E=new THREE.Vector3,H=new THREE.Vector4,Q=new THREE.Matrix4,L=new THREE.Matrix4,K=new THREE.Frustum,J=new THREE.Vector4,M=new THREE.Vector4;this.projectVector=function(a,b){b.matrixWorldInverse.getInverse(b.matrixWorld);Q.multiply(b.projectionMatrix,b.matrixWorldInverse);Q.multiplyVector3(a);return a};this.unprojectVector=
+function(a,b){b.projectionMatrixInverse.getInverse(b.projectionMatrix);Q.multiply(b.matrixWorld,b.projectionMatrixInverse);Q.multiplyVector3(a);return a};this.pickingRay=function(a,b){var c;a.z=-1;c=new THREE.Vector3(a.x,a.y,1);this.unprojectVector(a,b);this.unprojectVector(c,b);c.subSelf(a).normalize();return new THREE.Ray(a,c)};this.projectScene=function(g,h,n,N){var fa=h.near,S=h.far,ra=!1,wa,O,ga,P,X,ia,$,ca,Ja,ua,La,Wa,oa,Xa,kb,Ta;I=s=r=q=0;B.elements.length=0;g.updateMatrixWorld();void 0===
 h.parent&&h.updateMatrixWorld();h.matrixWorldInverse.getInverse(h.matrixWorld);Q.multiply(h.projectionMatrix,h.matrixWorldInverse);K.setFromMatrix(Q);e=0;B.objects.length=0;B.sprites.length=0;B.lights.length=0;var gb=function(b){for(var c=0,d=b.children.length;c<d;c++){var e=b.children[c];if(!1!==e.visible){if(e instanceof THREE.Light)B.lights.push(e);else if(e instanceof THREE.Mesh||e instanceof THREE.Line){if(!1===e.frustumCulled||!0===K.contains(e))f=a(),f.object=e,null!==e.renderDepth?f.z=e.renderDepth:
 (E.copy(e.matrixWorld.getPosition()),Q.multiplyVector3(E),f.z=E.z),B.objects.push(f)}else e instanceof THREE.Sprite||e instanceof THREE.Particle?(f=a(),f.object=e,null!==e.renderDepth?f.z=e.renderDepth:(E.copy(e.matrixWorld.getPosition()),Q.multiplyVector3(E),f.z=E.z),B.sprites.push(f)):(f=a(),f.object=e,null!==e.renderDepth?f.z=e.renderDepth:(E.copy(e.matrixWorld.getPosition()),Q.multiplyVector3(E),f.z=E.z),B.objects.push(f));gb(e)}}};gb(g);!0===n&&B.objects.sort(c);g=0;for(n=B.objects.length;g<
 n;g++)if(ca=B.objects[g].object,Ja=ca.matrixWorld,j=0,ca instanceof THREE.Mesh){ua=ca.geometry;La=ca.geometry.materials;ga=ua.vertices;Wa=ua.faces;Xa=ua.faceVertexUvs;ua=ca.matrixRotationWorld.extractRotation(Ja);kb=ca.material instanceof THREE.MeshFaceMaterial;wa=0;for(O=ga.length;wa<O;wa++)i=b(),i.positionWorld.copy(ga[wa]),Ja.multiplyVector3(i.positionWorld),i.positionScreen.copy(i.positionWorld),Q.multiplyVector4(i.positionScreen),i.positionScreen.x/=i.positionScreen.w,i.positionScreen.y/=i.positionScreen.w,
@@ -85,8 +85,8 @@ i.visible=i.positionScreen.z>fa&&i.positionScreen.z<S;ga=0;for(wa=Wa.length;ga<w
 o.push(oa),p++,q++,m=oa):m=o[q++],m.v1.copy(P),m.v2.copy(X),m.v3.copy($);else continue;else continue;else if(O instanceof THREE.Face4)if(P=l[O.a],X=l[O.b],$=l[O.c],oa=l[O.d],!0===P.visible&&!0===X.visible&&!0===$.visible&&!0===oa.visible)if(ra=0>(oa.positionScreen.x-P.positionScreen.x)*(X.positionScreen.y-P.positionScreen.y)-(oa.positionScreen.y-P.positionScreen.y)*(X.positionScreen.x-P.positionScreen.x)||0>(X.positionScreen.x-$.positionScreen.x)*(oa.positionScreen.y-$.positionScreen.y)-(X.positionScreen.y-
 $.positionScreen.y)*(oa.positionScreen.x-$.positionScreen.x),ia===THREE.DoubleSide||ra===(ia===THREE.FrontSide)){if(r===u){var rb=new THREE.RenderableFace4;t.push(rb);u++;r++;m=rb}else m=t[r++];m.v1.copy(P);m.v2.copy(X);m.v3.copy($);m.v4.copy(oa)}else continue;else continue;m.normalWorld.copy(O.normal);!1===ra&&(ia===THREE.BackSide||ia===THREE.DoubleSide)&&m.normalWorld.negate();ua.multiplyVector3(m.normalWorld);m.centroidWorld.copy(O.centroid);Ja.multiplyVector3(m.centroidWorld);m.centroidScreen.copy(m.centroidWorld);
 Q.multiplyVector3(m.centroidScreen);$=O.vertexNormals;P=0;for(X=$.length;P<X;P++)oa=m.vertexNormalsWorld[P],oa.copy($[P]),!1===ra&&(ia===THREE.BackSide||ia===THREE.DoubleSide)&&oa.negate(),ua.multiplyVector3(oa);m.vertexNormalsLength=$.length;P=0;for(X=Xa.length;P<X;P++)if(oa=Xa[P][ga],void 0!==oa){ia=0;for($=oa.length;ia<$;ia++)m.uvs[P][ia]=oa[ia]}m.color=O.color;m.material=Ta;m.z=m.centroidScreen.z;B.elements.push(m)}}else if(ca instanceof THREE.Line){L.multiply(Q,Ja);ga=ca.geometry.vertices;P=
-b();P.positionScreen.copy(ga[0]);L.multiplyVector4(P.positionScreen);Ja=ca.type===THREE.LinePieces?2:1;wa=1;for(O=ga.length;wa<O;wa++)P=b(),P.positionScreen.copy(ga[wa]),L.multiplyVector4(P.positionScreen),0<(wa+1)%Ja||(X=l[j-2],I.copy(P.positionScreen),M.copy(X.positionScreen),!0===d(I,M)&&(I.multiplyScalar(1/I.w),M.multiplyScalar(1/M.w),s===w?(La=new THREE.RenderableLine,z.push(La),w++,s++,v=La):v=z[s++],v.v1.positionScreen.copy(I),v.v2.positionScreen.copy(M),v.z=Math.max(I.z,M.z),v.material=ca.material,
-B.elements.push(v)))}g=0;for(n=B.sprites.length;g<n;g++)ca=B.sprites[g].object,Ja=ca.matrixWorld,ca instanceof THREE.Particle&&(H.set(Ja.elements[12],Ja.elements[13],Ja.elements[14],1),Q.multiplyVector4(H),H.z/=H.w,0<H.z&&1>H.z&&(J===F?(fa=new THREE.RenderableParticle,D.push(fa),F++,J++,A=fa):A=D[J++],A.object=ca,A.x=H.x/H.w,A.y=H.y/H.w,A.z=H.z,A.rotation=ca.rotation.z,A.scale.x=ca.scale.x*Math.abs(A.x-(H.x+h.projectionMatrix.elements[0])/(H.w+h.projectionMatrix.elements[12])),A.scale.y=ca.scale.y*
+b();P.positionScreen.copy(ga[0]);L.multiplyVector4(P.positionScreen);Ja=ca.type===THREE.LinePieces?2:1;wa=1;for(O=ga.length;wa<O;wa++)P=b(),P.positionScreen.copy(ga[wa]),L.multiplyVector4(P.positionScreen),0<(wa+1)%Ja||(X=l[j-2],J.copy(P.positionScreen),M.copy(X.positionScreen),!0===d(J,M)&&(J.multiplyScalar(1/J.w),M.multiplyScalar(1/M.w),s===w?(La=new THREE.RenderableLine,z.push(La),w++,s++,v=La):v=z[s++],v.v1.positionScreen.copy(J),v.v2.positionScreen.copy(M),v.z=Math.max(J.z,M.z),v.material=ca.material,
+B.elements.push(v)))}g=0;for(n=B.sprites.length;g<n;g++)ca=B.sprites[g].object,Ja=ca.matrixWorld,ca instanceof THREE.Particle&&(H.set(Ja.elements[12],Ja.elements[13],Ja.elements[14],1),Q.multiplyVector4(H),H.z/=H.w,0<H.z&&1>H.z&&(I===F?(fa=new THREE.RenderableParticle,D.push(fa),F++,I++,A=fa):A=D[I++],A.object=ca,A.x=H.x/H.w,A.y=H.y/H.w,A.z=H.z,A.rotation=ca.rotation.z,A.scale.x=ca.scale.x*Math.abs(A.x-(H.x+h.projectionMatrix.elements[0])/(H.w+h.projectionMatrix.elements[12])),A.scale.y=ca.scale.y*
 Math.abs(A.y-(H.y+h.projectionMatrix.elements[5])/(H.w+h.projectionMatrix.elements[13])),A.material=ca.material,B.elements.push(A)));!0===N&&B.elements.sort(c);return B}};THREE.Quaternion=function(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=void 0!==d?d:1};
 THREE.Quaternion.prototype={constructor:THREE.Quaternion,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w;return this},setFromEuler:function(a,b){var c=Math.cos(a.x/2),d=Math.cos(a.y/2),f=Math.cos(a.z/2),e=Math.sin(a.x/2),g=Math.sin(a.y/2),h=Math.sin(a.z/2);void 0===b||"XYZ"===b?(this.x=e*d*f+c*g*h,this.y=c*g*f-e*d*h,this.z=c*d*h+e*g*f,this.w=c*d*f-e*g*h):"YXZ"===b?(this.x=e*d*f+c*g*h,this.y=c*g*f-e*d*h,this.z=c*d*
 h-e*g*f,this.w=c*d*f+e*g*h):"ZXY"===b?(this.x=e*d*f-c*g*h,this.y=c*g*f+e*d*h,this.z=c*d*h+e*g*f,this.w=c*d*f-e*g*h):"ZYX"===b?(this.x=e*d*f-c*g*h,this.y=c*g*f+e*d*h,this.z=c*d*h-e*g*f,this.w=c*d*f+e*g*h):"YZX"===b?(this.x=e*d*f+c*g*h,this.y=c*g*f+e*d*h,this.z=c*d*h-e*g*f,this.w=c*d*f-e*g*h):"XZY"===b&&(this.x=e*d*f-c*g*h,this.y=c*g*f-e*d*h,this.z=c*d*h+e*g*f,this.w=c*d*f+e*g*h);return this},setFromAxisAngle:function(a,b){var c=b/2,d=Math.sin(c);this.x=a.x*d;this.y=a.y*d;this.z=a.z*d;this.w=Math.cos(c);
@@ -110,8 +110,8 @@ b;a++)d[a].normalize();a=0;for(b=this.faces.length;a<b;a++)c=this.faces[a],c ins
 f.__originalFaceNormal=f.normal.clone();f.__originalVertexNormals||(f.__originalVertexNormals=[]);a=0;for(b=f.vertexNormals.length;a<b;a++)f.__originalVertexNormals[a]?f.__originalVertexNormals[a].copy(f.vertexNormals[a]):f.__originalVertexNormals[a]=f.vertexNormals[a].clone()}var e=new THREE.Geometry;e.faces=this.faces;a=0;for(b=this.morphTargets.length;a<b;a++){if(!this.morphNormals[a]){this.morphNormals[a]={};this.morphNormals[a].faceNormals=[];this.morphNormals[a].vertexNormals=[];var g=this.morphNormals[a].faceNormals,
 h=this.morphNormals[a].vertexNormals,i,j;c=0;for(d=this.faces.length;c<d;c++)f=this.faces[c],i=new THREE.Vector3,j=f instanceof THREE.Face3?{a:new THREE.Vector3,b:new THREE.Vector3,c:new THREE.Vector3}:{a:new THREE.Vector3,b:new THREE.Vector3,c:new THREE.Vector3,d:new THREE.Vector3},g.push(i),h.push(j)}g=this.morphNormals[a];e.vertices=this.morphTargets[a].vertices;e.computeFaceNormals();e.computeVertexNormals();c=0;for(d=this.faces.length;c<d;c++)f=this.faces[c],i=g.faceNormals[c],j=g.vertexNormals[c],
 i.copy(f.normal),f instanceof THREE.Face3?(j.a.copy(f.vertexNormals[0]),j.b.copy(f.vertexNormals[1]),j.c.copy(f.vertexNormals[2])):(j.a.copy(f.vertexNormals[0]),j.b.copy(f.vertexNormals[1]),j.c.copy(f.vertexNormals[2]),j.d.copy(f.vertexNormals[3]))}c=0;for(d=this.faces.length;c<d;c++)f=this.faces[c],f.normal=f.__originalFaceNormal,f.vertexNormals=f.__originalVertexNormals},computeTangents:function(){function a(a,b,c,d,f,e,H){h=a.vertices[b];i=a.vertices[c];j=a.vertices[d];l=g[f];n=g[e];m=g[H];q=i.x-
-h.x;o=j.x-h.x;p=i.y-h.y;r=j.y-h.y;t=i.z-h.z;u=j.z-h.z;v=n.u-l.u;s=m.u-l.u;z=n.v-l.v;w=m.v-l.v;A=1/(v*w-s*z);B.set((w*q-z*o)*A,(w*p-z*r)*A,(w*t-z*u)*A);E.set((v*o-s*q)*A,(v*r-s*p)*A,(v*u-s*t)*A);D[b].addSelf(B);D[c].addSelf(B);D[d].addSelf(B);F[b].addSelf(E);F[c].addSelf(E);F[d].addSelf(E)}var b,c,d,f,e,g,h,i,j,l,n,m,q,o,p,r,t,u,v,s,z,w,A,J,D=[],F=[],B=new THREE.Vector3,E=new THREE.Vector3,H=new THREE.Vector3,Q=new THREE.Vector3,L=new THREE.Vector3;b=0;for(c=this.vertices.length;b<c;b++)D[b]=new THREE.Vector3,
-F[b]=new THREE.Vector3;b=0;for(c=this.faces.length;b<c;b++)e=this.faces[b],g=this.faceVertexUvs[0][b],e instanceof THREE.Face3?a(this,e.a,e.b,e.c,0,1,2):e instanceof THREE.Face4&&(a(this,e.a,e.b,e.d,0,1,3),a(this,e.b,e.c,e.d,1,2,3));var K=["a","b","c","d"];b=0;for(c=this.faces.length;b<c;b++){e=this.faces[b];for(d=0;d<e.vertexNormals.length;d++)L.copy(e.vertexNormals[d]),f=e[K[d]],J=D[f],H.copy(J),H.subSelf(L.multiplyScalar(L.dot(J))).normalize(),Q.cross(e.vertexNormals[d],J),f=Q.dot(F[f]),f=0>f?
+h.x;o=j.x-h.x;p=i.y-h.y;r=j.y-h.y;t=i.z-h.z;u=j.z-h.z;v=n.u-l.u;s=m.u-l.u;z=n.v-l.v;w=m.v-l.v;A=1/(v*w-s*z);B.set((w*q-z*o)*A,(w*p-z*r)*A,(w*t-z*u)*A);E.set((v*o-s*q)*A,(v*r-s*p)*A,(v*u-s*t)*A);D[b].addSelf(B);D[c].addSelf(B);D[d].addSelf(B);F[b].addSelf(E);F[c].addSelf(E);F[d].addSelf(E)}var b,c,d,f,e,g,h,i,j,l,n,m,q,o,p,r,t,u,v,s,z,w,A,I,D=[],F=[],B=new THREE.Vector3,E=new THREE.Vector3,H=new THREE.Vector3,Q=new THREE.Vector3,L=new THREE.Vector3;b=0;for(c=this.vertices.length;b<c;b++)D[b]=new THREE.Vector3,
+F[b]=new THREE.Vector3;b=0;for(c=this.faces.length;b<c;b++)e=this.faces[b],g=this.faceVertexUvs[0][b],e instanceof THREE.Face3?a(this,e.a,e.b,e.c,0,1,2):e instanceof THREE.Face4&&(a(this,e.a,e.b,e.d,0,1,3),a(this,e.b,e.c,e.d,1,2,3));var K=["a","b","c","d"];b=0;for(c=this.faces.length;b<c;b++){e=this.faces[b];for(d=0;d<e.vertexNormals.length;d++)L.copy(e.vertexNormals[d]),f=e[K[d]],I=D[f],H.copy(I),H.subSelf(L.multiplyScalar(L.dot(I))).normalize(),Q.cross(e.vertexNormals[d],I),f=Q.dot(F[f]),f=0>f?
 -1:1,e.vertexTangents[d]=new THREE.Vector4(H.x,H.y,H.z,f)}this.hasTangents=!0},computeBoundingBox:function(){this.boundingBox||(this.boundingBox={min:new THREE.Vector3,max:new THREE.Vector3});if(0<this.vertices.length){var a;a=this.vertices[0];this.boundingBox.min.copy(a);this.boundingBox.max.copy(a);for(var b=this.boundingBox.min,c=this.boundingBox.max,d=1,f=this.vertices.length;d<f;d++)(a=this.vertices[d],a.x<b.x?b.x=a.x:a.x>c.x&&(c.x=a.x),a.y<b.y?b.y=a.y:a.y>c.y&&(c.y=a.y),a.z<b.z)?b.z=a.z:a.z>
 c.z&&(c.z=a.z)}else this.boundingBox.min.set(0,0,0),this.boundingBox.max.set(0,0,0)},computeBoundingSphere:function(){var a=0;null===this.boundingSphere&&(this.boundingSphere={radius:0});for(var b=0,c=this.vertices.length;b<c;b++){var d=this.vertices[b].lengthSq();d>a&&(a=d)}this.boundingSphere.radius=Math.sqrt(a)},mergeVertices:function(){var a={},b=[],c=[],d,f=Math.pow(10,4),e,g,h,i;e=0;for(g=this.vertices.length;e<g;e++)d=this.vertices[e],d=[Math.round(d.x*f),Math.round(d.y*f),Math.round(d.z*f)].join("_"),
 void 0===a[d]?(a[d]=e,b.push(this.vertices[e]),c[e]=b.length-1):c[e]=c[a[d]];e=0;for(g=this.faces.length;e<g;e++)if(a=this.faces[e],a instanceof THREE.Face3)a.a=c[a.a],a.b=c[a.b],a.c=c[a.c];else if(a instanceof THREE.Face4){a.a=c[a.a];a.b=c[a.b];a.c=c[a.c];a.d=c[a.d];d=[a.a,a.b,a.c,a.d];for(f=3;0<f;f--)if(d.indexOf(a["abcd"[f]])!==f){d.splice(f,1);this.faces[e]=new THREE.Face3(d[0],d[1],d[2],a.normal,a.color,a.materialIndex);d=0;for(h=this.faceVertexUvs.length;d<h;d++)(i=this.faceVertexUvs[d][e])&&
@@ -122,8 +122,8 @@ if(a){for(var b,c=0,d,f,e=0,g=a.length;e<g;e+=3)b=a[e],d=a[e+1],f=a[e+2],b=b*b+d
 g=this.attributes.position.array,h=this.attributes.normal.array,i,j,l,n,m,q,o=new THREE.Vector3,p=new THREE.Vector3,r=new THREE.Vector3,t=new THREE.Vector3,u=new THREE.Vector3;c=0;for(d=f.length;c<d;++c){b=f[c].start;i=f[c].count;var v=f[c].index;a=b;for(b+=i;a<b;a+=3)i=v+e[a],j=v+e[a+1],l=v+e[a+2],n=g[3*i],m=g[3*i+1],q=g[3*i+2],o.set(n,m,q),n=g[3*j],m=g[3*j+1],q=g[3*j+2],p.set(n,m,q),n=g[3*l],m=g[3*l+1],q=g[3*l+2],r.set(n,m,q),t.sub(r,p),u.sub(o,p),t.crossSelf(u),h[3*i]+=t.x,h[3*i+1]+=t.y,h[3*i+
 2]+=t.z,h[3*j]+=t.x,h[3*j+1]+=t.y,h[3*j+2]+=t.z,h[3*l]+=t.x,h[3*l+1]+=t.y,h[3*l+2]+=t.z}a=0;for(b=h.length;a<b;a+=3)n=h[a],m=h[a+1],q=h[a+2],c=1/Math.sqrt(n*n+m*m+q*q),h[a]*=c,h[a+1]*=c,h[a+2]*=c;this.normalsNeedUpdate=!0}},computeTangents:function(){function a(a){Z.x=d[3*a];Z.y=d[3*a+1];Z.z=d[3*a+2];ea.copy(Z);fa=i[a];M.copy(fa);M.subSelf(Z.multiplyScalar(Z.dot(fa))).normalize();T.cross(ea,fa);S=T.dot(j[a]);N=0>S?-1:1;h[4*a]=M.x;h[4*a+1]=M.y;h[4*a+2]=M.z;h[4*a+3]=N}if(void 0===this.attributes.index||
 void 0===this.attributes.position||void 0===this.attributes.normal||void 0===this.attributes.uv)console.warn("Missing required attributes (index, position, normal or uv) in BufferGeometry.computeTangents()");else{var b=this.attributes.index.array,c=this.attributes.position.array,d=this.attributes.normal.array,f=this.attributes.uv.array,e=c.length/3;if(void 0===this.attributes.tangent){var g=4*e;this.attributes.tangent={itemSize:4,array:new Float32Array(g),numItems:g}}for(var h=this.attributes.tangent.array,
-i=[],j=[],g=0;g<e;g++)i[g]=new THREE.Vector3,j[g]=new THREE.Vector3;var l,n,m,q,o,p,r,t,u,v,s,z,w,A,J,e=new THREE.Vector3,g=new THREE.Vector3,D,F,B,E,H,Q,L,K=this.offsets;B=0;for(E=K.length;B<E;++B){F=K[B].start;H=K[B].count;var I=K[B].index;D=F;for(F+=H;D<F;D+=3)H=I+b[D],Q=I+b[D+1],L=I+b[D+2],l=c[3*H],n=c[3*H+1],m=c[3*H+2],q=c[3*Q],o=c[3*Q+1],p=c[3*Q+2],r=c[3*L],t=c[3*L+1],u=c[3*L+2],v=f[2*H],s=f[2*H+1],z=f[2*Q],w=f[2*Q+1],A=f[2*L],J=f[2*L+1],q-=l,l=r-l,o-=n,n=t-n,p-=m,m=u-m,z-=v,v=A-v,w-=s,s=J-
-s,J=1/(z*s-v*w),e.set((s*q-w*l)*J,(s*o-w*n)*J,(s*p-w*m)*J),g.set((z*l-v*q)*J,(z*n-v*o)*J,(z*m-v*p)*J),i[H].addSelf(e),i[Q].addSelf(e),i[L].addSelf(e),j[H].addSelf(g),j[Q].addSelf(g),j[L].addSelf(g)}var M=new THREE.Vector3,T=new THREE.Vector3,Z=new THREE.Vector3,ea=new THREE.Vector3,N,fa,S;B=0;for(E=K.length;B<E;++B){F=K[B].start;H=K[B].count;I=K[B].index;D=F;for(F+=H;D<F;D+=3)H=I+b[D],Q=I+b[D+1],L=I+b[D+2],a(H),a(Q),a(L)}this.tangentsNeedUpdate=this.hasTangents=!0}}};
+i=[],j=[],g=0;g<e;g++)i[g]=new THREE.Vector3,j[g]=new THREE.Vector3;var l,n,m,q,o,p,r,t,u,v,s,z,w,A,I,e=new THREE.Vector3,g=new THREE.Vector3,D,F,B,E,H,Q,L,K=this.offsets;B=0;for(E=K.length;B<E;++B){F=K[B].start;H=K[B].count;var J=K[B].index;D=F;for(F+=H;D<F;D+=3)H=J+b[D],Q=J+b[D+1],L=J+b[D+2],l=c[3*H],n=c[3*H+1],m=c[3*H+2],q=c[3*Q],o=c[3*Q+1],p=c[3*Q+2],r=c[3*L],t=c[3*L+1],u=c[3*L+2],v=f[2*H],s=f[2*H+1],z=f[2*Q],w=f[2*Q+1],A=f[2*L],I=f[2*L+1],q-=l,l=r-l,o-=n,n=t-n,p-=m,m=u-m,z-=v,v=A-v,w-=s,s=I-
+s,I=1/(z*s-v*w),e.set((s*q-w*l)*I,(s*o-w*n)*I,(s*p-w*m)*I),g.set((z*l-v*q)*I,(z*n-v*o)*I,(z*m-v*p)*I),i[H].addSelf(e),i[Q].addSelf(e),i[L].addSelf(e),j[H].addSelf(g),j[Q].addSelf(g),j[L].addSelf(g)}var M=new THREE.Vector3,T=new THREE.Vector3,Z=new THREE.Vector3,ea=new THREE.Vector3,N,fa,S;B=0;for(E=K.length;B<E;++B){F=K[B].start;H=K[B].count;J=K[B].index;D=F;for(F+=H;D<F;D+=3)H=J+b[D],Q=J+b[D+1],L=J+b[D+2],a(H),a(Q),a(L)}this.tangentsNeedUpdate=this.hasTangents=!0}}};
 THREE.Spline=function(a){function b(a,b,c,d,f,e,g){a=0.5*(c-a);d=0.5*(d-b);return(2*(b-c)+a+d)*g+(-3*(b-c)-2*a-d)*e+a*f+b}this.points=a;var c=[],d={x:0,y:0,z:0},f,e,g,h,i,j,l,n,m;this.initFromArray=function(a){this.points=[];for(var b=0;b<a.length;b++)this.points[b]={x:a[b][0],y:a[b][1],z:a[b][2]}};this.getPoint=function(a){f=(this.points.length-1)*a;e=Math.floor(f);g=f-e;c[0]=0===e?e:e-1;c[1]=e;c[2]=e>this.points.length-2?this.points.length-1:e+1;c[3]=e>this.points.length-3?this.points.length-1:
 e+2;j=this.points[c[0]];l=this.points[c[1]];n=this.points[c[2]];m=this.points[c[3]];h=g*g;i=g*h;d.x=b(j.x,l.x,n.x,m.x,g,h,i);d.y=b(j.y,l.y,n.y,m.y,g,h,i);d.z=b(j.z,l.z,n.z,m.z,g,h,i);return d};this.getControlPointsArray=function(){var a,b,c=this.points.length,d=[];for(a=0;a<c;a++)b=this.points[a],d[a]=[b.x,b.y,b.z];return d};this.getLength=function(a){var b,c,d,f=b=b=0,e=new THREE.Vector3,g=new THREE.Vector3,h=[],i=0;h[0]=0;a||(a=100);c=this.points.length*a;e.copy(this.points[0]);for(a=1;a<c;a++)b=
 a/c,d=this.getPoint(b),g.copy(d),i+=g.distanceTo(e),e.copy(d),b*=this.points.length-1,b=Math.floor(b),b!=f&&(h[b]=i,f=b);h[h.length]=i;return{chunks:h,total:i}};this.reparametrizeByArcLength=function(a){var b,c,d,f,e,g,h=[],i=new THREE.Vector3,l=this.getLength();h.push(i.copy(this.points[0]).clone());for(b=1;b<this.points.length;b++){c=l.chunks[b]-l.chunks[b-1];g=Math.ceil(a*c/l.total);f=(b-1)/(this.points.length-1);e=b/(this.points.length-1);for(c=1;c<g-1;c++)d=f+c*(1/g)*(e-f),d=this.getPoint(d),
@@ -151,13 +151,13 @@ THREE.BinaryLoader.prototype.load=function(a,b,c,d){var c=c?c:this.extractUrlBas
 THREE.BinaryLoader.prototype.loadAjaxJSON=function(a,b,c,d,f,e){var g=new XMLHttpRequest;g.onreadystatechange=function(){if(4==g.readyState)if(200==g.status||0==g.status){var h=JSON.parse(g.responseText);a.loadAjaxBuffers(h,c,f,d,e)}else console.error("THREE.BinaryLoader: Couldn't load ["+b+"] ["+g.status+"]")};g.open("GET",b,!0);g.send(null)};
 THREE.BinaryLoader.prototype.loadAjaxBuffers=function(a,b,c,d,f){var e=new XMLHttpRequest,g=c+"/"+a.buffers,h=0;e.onreadystatechange=function(){if(4==e.readyState)if(200==e.status||0==e.status){var c=e.response;void 0===c&&(c=(new Uint8Array(e.responseBody)).buffer);THREE.BinaryLoader.prototype.createBinModel(c,b,d,a.materials)}else console.error("THREE.BinaryLoader: Couldn't load ["+g+"] ["+e.status+"]");else 3==e.readyState?f&&(0==h&&(h=e.getResponseHeader("Content-Length")),f({total:h,loaded:e.responseText.length})):
 2==e.readyState&&(h=e.getResponseHeader("Content-Length"))};e.open("GET",g,!0);e.responseType="arraybuffer";e.send(null)};
-THREE.BinaryLoader.prototype.createBinModel=function(a,b,c,d){var f=function(b){var c,f,i,j,l,n,m,q,o,p,r,t,u,v,s;function z(a){return a%4?4-a%4:0}function w(a,b){return(new Uint8Array(a,b,1))[0]}function A(a,b){return(new Uint32Array(a,b,1))[0]}function J(b,c){var d,f,e,g,h,i,j,l,n=new Uint32Array(a,c,3*b);for(d=0;d<b;d++){f=n[3*d];e=n[3*d+1];g=n[3*d+2];h=I[2*f];f=I[2*f+1];i=I[2*e];j=I[2*e+1];e=I[2*g];l=I[2*g+1];g=Q.faceVertexUvs[0];var m=[];m.push(new THREE.UV(h,f));m.push(new THREE.UV(i,j));m.push(new THREE.UV(e,
-l));g.push(m)}}function D(b,c){var d,f,e,g,h,i,j,l,n,m,p=new Uint32Array(a,c,4*b);for(d=0;d<b;d++){f=p[4*d];e=p[4*d+1];g=p[4*d+2];h=p[4*d+3];i=I[2*f];f=I[2*f+1];j=I[2*e];n=I[2*e+1];l=I[2*g];m=I[2*g+1];g=I[2*h];e=I[2*h+1];h=Q.faceVertexUvs[0];var o=[];o.push(new THREE.UV(i,f));o.push(new THREE.UV(j,n));o.push(new THREE.UV(l,m));o.push(new THREE.UV(g,e));h.push(o)}}function F(b,c,d){for(var f,e,g,h,c=new Uint32Array(a,c,3*b),i=new Uint16Array(a,d,b),d=0;d<b;d++)f=c[3*d],e=c[3*d+1],g=c[3*d+2],h=i[d],
+THREE.BinaryLoader.prototype.createBinModel=function(a,b,c,d){var f=function(b){var c,f,i,j,l,n,m,q,o,p,r,t,u,v,s;function z(a){return a%4?4-a%4:0}function w(a,b){return(new Uint8Array(a,b,1))[0]}function A(a,b){return(new Uint32Array(a,b,1))[0]}function I(b,c){var d,f,e,g,h,i,j,l,n=new Uint32Array(a,c,3*b);for(d=0;d<b;d++){f=n[3*d];e=n[3*d+1];g=n[3*d+2];h=J[2*f];f=J[2*f+1];i=J[2*e];j=J[2*e+1];e=J[2*g];l=J[2*g+1];g=Q.faceVertexUvs[0];var m=[];m.push(new THREE.UV(h,f));m.push(new THREE.UV(i,j));m.push(new THREE.UV(e,
+l));g.push(m)}}function D(b,c){var d,f,e,g,h,i,j,l,n,m,p=new Uint32Array(a,c,4*b);for(d=0;d<b;d++){f=p[4*d];e=p[4*d+1];g=p[4*d+2];h=p[4*d+3];i=J[2*f];f=J[2*f+1];j=J[2*e];n=J[2*e+1];l=J[2*g];m=J[2*g+1];g=J[2*h];e=J[2*h+1];h=Q.faceVertexUvs[0];var o=[];o.push(new THREE.UV(i,f));o.push(new THREE.UV(j,n));o.push(new THREE.UV(l,m));o.push(new THREE.UV(g,e));h.push(o)}}function F(b,c,d){for(var f,e,g,h,c=new Uint32Array(a,c,3*b),i=new Uint16Array(a,d,b),d=0;d<b;d++)f=c[3*d],e=c[3*d+1],g=c[3*d+2],h=i[d],
 Q.faces.push(new THREE.Face3(f,e,g,null,null,h))}function B(b,c,d){for(var f,e,g,h,i,c=new Uint32Array(a,c,4*b),j=new Uint16Array(a,d,b),d=0;d<b;d++)f=c[4*d],e=c[4*d+1],g=c[4*d+2],h=c[4*d+3],i=j[d],Q.faces.push(new THREE.Face4(f,e,g,h,null,null,i))}function E(b,c,d,f){for(var e,g,h,i,j,l,n,c=new Uint32Array(a,c,3*b),d=new Uint32Array(a,d,3*b),m=new Uint16Array(a,f,b),f=0;f<b;f++){e=c[3*f];g=c[3*f+1];h=c[3*f+2];j=d[3*f];l=d[3*f+1];n=d[3*f+2];i=m[f];var p=K[3*l],o=K[3*l+1];l=K[3*l+2];var q=K[3*n],r=
 K[3*n+1];n=K[3*n+2];Q.faces.push(new THREE.Face3(e,g,h,[new THREE.Vector3(K[3*j],K[3*j+1],K[3*j+2]),new THREE.Vector3(p,o,l),new THREE.Vector3(q,r,n)],null,i))}}function H(b,c,d,f){for(var e,g,h,i,j,l,n,m,p,c=new Uint32Array(a,c,4*b),d=new Uint32Array(a,d,4*b),o=new Uint16Array(a,f,b),f=0;f<b;f++){e=c[4*f];g=c[4*f+1];h=c[4*f+2];i=c[4*f+3];l=d[4*f];n=d[4*f+1];m=d[4*f+2];p=d[4*f+3];j=o[f];var q=K[3*n],r=K[3*n+1];n=K[3*n+2];var s=K[3*m],t=K[3*m+1];m=K[3*m+2];var u=K[3*p],v=K[3*p+1];p=K[3*p+2];Q.faces.push(new THREE.Face4(e,
-g,h,i,[new THREE.Vector3(K[3*l],K[3*l+1],K[3*l+2]),new THREE.Vector3(q,r,n),new THREE.Vector3(s,t,m),new THREE.Vector3(u,v,p)],null,j))}}var Q=this,L=0,K=[],I=[],M,T,Z;THREE.Geometry.call(this);THREE.Loader.prototype.initMaterials(Q,d,b);s=a;T=L;b=new Uint8Array(s,T,12);p="";for(u=0;12>u;u++)p+=String.fromCharCode(b[T+u]);c=w(s,T+12);w(s,T+13);w(s,T+14);w(s,T+15);f=w(s,T+16);i=w(s,T+17);j=w(s,T+18);l=w(s,T+19);n=A(s,T+20);m=A(s,T+20+4);q=A(s,T+20+8);o=A(s,T+20+12);p=A(s,T+20+16);r=A(s,T+20+20);t=
+g,h,i,[new THREE.Vector3(K[3*l],K[3*l+1],K[3*l+2]),new THREE.Vector3(q,r,n),new THREE.Vector3(s,t,m),new THREE.Vector3(u,v,p)],null,j))}}var Q=this,L=0,K=[],J=[],M,T,Z;THREE.Geometry.call(this);THREE.Loader.prototype.initMaterials(Q,d,b);s=a;T=L;b=new Uint8Array(s,T,12);p="";for(u=0;12>u;u++)p+=String.fromCharCode(b[T+u]);c=w(s,T+12);w(s,T+13);w(s,T+14);w(s,T+15);f=w(s,T+16);i=w(s,T+17);j=w(s,T+18);l=w(s,T+19);n=A(s,T+20);m=A(s,T+20+4);q=A(s,T+20+8);o=A(s,T+20+12);p=A(s,T+20+16);r=A(s,T+20+20);t=
 A(s,T+20+24);u=A(s,T+20+28);b=A(s,T+20+32);v=A(s,T+20+36);s=A(s,T+20+40);L+=c;T=3*f+l;Z=4*f+l;M=o*T;c=p*(T+3*i);f=r*(T+3*j);l=t*(T+3*i+3*j);T=u*Z;i=b*(Z+4*i);j=v*(Z+4*j);Z=L;var L=new Float32Array(a,L,3*n),ea,N,fa,S;for(ea=0;ea<n;ea++)N=L[3*ea],fa=L[3*ea+1],S=L[3*ea+2],Q.vertices.push(new THREE.Vector3(N,fa,S));n=L=Z+3*n*Float32Array.BYTES_PER_ELEMENT;if(m){L=new Int8Array(a,L,3*m);for(Z=0;Z<m;Z++)ea=L[3*Z],N=L[3*Z+1],fa=L[3*Z+2],K.push(ea/127,N/127,fa/127)}L=n+3*m*Int8Array.BYTES_PER_ELEMENT;m=L+=
-z(3*m);if(q){L=new Float32Array(a,L,2*q);for(n=0;n<q;n++)Z=L[2*n],ea=L[2*n+1],I.push(Z,ea)}q=L=m+2*q*Float32Array.BYTES_PER_ELEMENT;M=q+M+z(2*o);m=M+c+z(2*p);c=m+f+z(2*r);f=c+l+z(2*t);T=f+T+z(2*u);l=T+i+z(2*b);i=l+j+z(2*v);r&&(j=m+3*r*Uint32Array.BYTES_PER_ELEMENT,F(r,m,j+3*r*Uint32Array.BYTES_PER_ELEMENT),J(r,j));t&&(r=c+3*t*Uint32Array.BYTES_PER_ELEMENT,j=r+3*t*Uint32Array.BYTES_PER_ELEMENT,E(t,c,r,j+3*t*Uint32Array.BYTES_PER_ELEMENT),J(t,j));v&&(t=l+4*v*Uint32Array.BYTES_PER_ELEMENT,B(v,l,t+4*
+z(3*m);if(q){L=new Float32Array(a,L,2*q);for(n=0;n<q;n++)Z=L[2*n],ea=L[2*n+1],J.push(Z,ea)}q=L=m+2*q*Float32Array.BYTES_PER_ELEMENT;M=q+M+z(2*o);m=M+c+z(2*p);c=m+f+z(2*r);f=c+l+z(2*t);T=f+T+z(2*u);l=T+i+z(2*b);i=l+j+z(2*v);r&&(j=m+3*r*Uint32Array.BYTES_PER_ELEMENT,F(r,m,j+3*r*Uint32Array.BYTES_PER_ELEMENT),I(r,j));t&&(r=c+3*t*Uint32Array.BYTES_PER_ELEMENT,j=r+3*t*Uint32Array.BYTES_PER_ELEMENT,E(t,c,r,j+3*t*Uint32Array.BYTES_PER_ELEMENT),I(t,j));v&&(t=l+4*v*Uint32Array.BYTES_PER_ELEMENT,B(v,l,t+4*
 v*Uint32Array.BYTES_PER_ELEMENT),D(v,t));s&&(v=i+4*s*Uint32Array.BYTES_PER_ELEMENT,t=v+4*s*Uint32Array.BYTES_PER_ELEMENT,H(s,i,v,t+4*s*Uint32Array.BYTES_PER_ELEMENT),D(s,t));o&&F(o,q,q+3*o*Uint32Array.BYTES_PER_ELEMENT);p&&(o=M+3*p*Uint32Array.BYTES_PER_ELEMENT,E(p,M,o,o+3*p*Uint32Array.BYTES_PER_ELEMENT));u&&B(u,f,f+4*u*Uint32Array.BYTES_PER_ELEMENT);b&&(p=T+4*b*Uint32Array.BYTES_PER_ELEMENT,H(b,T,p,p+4*b*Uint32Array.BYTES_PER_ELEMENT));this.computeCentroids();this.computeFaceNormals();THREE.Loader.prototype.hasNormals(this)&&
 this.computeTangents()};f.prototype=Object.create(THREE.Geometry.prototype);b(new f(c))};THREE.ImageLoader=function(){THREE.EventTarget.call(this);this.crossOrigin=null};
 THREE.ImageLoader.prototype={constructor:THREE.ImageLoader,load:function(a,b){var c=this;void 0===b&&(b=new Image);b.addEventListener("load",function(){c.dispatchEvent({type:"load",content:b})},!1);b.addEventListener("error",function(){c.dispatchEvent({type:"error",message:"Couldn't load URL ["+a+"]"})},!1);c.crossOrigin&&(b.crossOrigin=c.crossOrigin);b.src=a}};THREE.JSONLoader=function(a){THREE.Loader.call(this,a)};THREE.JSONLoader.prototype=Object.create(THREE.Loader.prototype);
@@ -179,28 +179,28 @@ b;l.image.height=c;l.image.getContext("2d").drawImage(a,0,0,b,c)}else l.image=a;
 g.mapBumpWrap);g.mapNormal&&j(m,"normalMap",g.mapNormal,g.mapNormalRepeat,g.mapNormalOffset,g.mapNormalWrap);g.mapSpecular&&j(m,"specularMap",g.mapSpecular,g.mapSpecularRepeat,g.mapSpecularOffset,g.mapSpecularWrap);g.mapNormal?(j=THREE.ShaderUtils.lib.normal,l=THREE.UniformsUtils.clone(j.uniforms),l.tNormal.value=m.normalMap,g.mapNormalFactor&&l.uNormalScale.value.set(g.mapNormalFactor,g.mapNormalFactor),m.map&&(l.tDiffuse.value=m.map,l.enableDiffuse.value=!0),m.specularMap&&(l.tSpecular.value=m.specularMap,
 l.enableSpecular.value=!0),m.lightMap&&(l.tAO.value=m.lightMap,l.enableAO.value=!0),l.uDiffuseColor.value.setHex(m.color),l.uSpecularColor.value.setHex(m.specular),l.uAmbientColor.value.setHex(m.ambient),l.uShininess.value=m.shininess,void 0!==m.opacity&&(l.uOpacity.value=m.opacity),m=new THREE.ShaderMaterial({fragmentShader:j.fragmentShader,vertexShader:j.vertexShader,uniforms:l,lights:!0,fog:!0})):m=new THREE[n](m);void 0!==g.DbgName&&(m.name=g.DbgName);d.materials[e]=m}}var g=a.faces,o=a.vertices,
 m=a.normals,j=a.colors,l=0;if(a.uvs)for(e=0;e<a.uvs.length;e++)a.uvs[e].length&&l++;for(e=0;e<l;e++)d.faceUvs[e]=[],d.faceVertexUvs[e]=[];n=0;for(q=o.length;n<q;){var p=new THREE.Vector3;p.x=o[n++]*f;p.y=o[n++]*f;p.z=o[n++]*f;d.vertices.push(p)}n=0;for(q=g.length;n<q;){var r=g[n++],t=r&2,e=r&4,u=r&8,v=r&16,o=r&32,s=r&64,p=r&128;if(r&1){r=new THREE.Face4;r.a=g[n++];r.b=g[n++];r.c=g[n++];r.d=g[n++];var z=4}else r=new THREE.Face3,r.a=g[n++],r.b=g[n++],r.c=g[n++],z=3;t&&(t=g[n++],r.materialIndex=t);var w=
-d.faces.length;if(e)for(e=0;e<l;e++){var A=a.uvs[e],t=g[n++],J=A[2*t],t=A[2*t+1];d.faceUvs[e][w]=new THREE.UV(J,t)}if(u)for(e=0;e<l;e++){for(var A=a.uvs[e],u=[],D=0;D<z;D++)t=g[n++],J=A[2*t],t=A[2*t+1],u[D]=new THREE.UV(J,t);d.faceVertexUvs[e][w]=u}v&&(v=3*g[n++],t=new THREE.Vector3,t.x=m[v++],t.y=m[v++],t.z=m[v],r.normal=t);if(o)for(e=0;e<z;e++)v=3*g[n++],t=new THREE.Vector3,t.x=m[v++],t.y=m[v++],t.z=m[v],r.vertexNormals.push(t);s&&(o=g[n++],r.color=new THREE.Color(j[o]));if(p)for(e=0;e<z;e++)o=
+d.faces.length;if(e)for(e=0;e<l;e++){var A=a.uvs[e],t=g[n++],I=A[2*t],t=A[2*t+1];d.faceUvs[e][w]=new THREE.UV(I,t)}if(u)for(e=0;e<l;e++){for(var A=a.uvs[e],u=[],D=0;D<z;D++)t=g[n++],I=A[2*t],t=A[2*t+1],u[D]=new THREE.UV(I,t);d.faceVertexUvs[e][w]=u}v&&(v=3*g[n++],t=new THREE.Vector3,t.x=m[v++],t.y=m[v++],t.z=m[v],r.normal=t);if(o)for(e=0;e<z;e++)v=3*g[n++],t=new THREE.Vector3,t.x=m[v++],t.y=m[v++],t.z=m[v],r.vertexNormals.push(t);s&&(o=g[n++],r.color=new THREE.Color(j[o]));if(p)for(e=0;e<z;e++)o=
 g[n++],r.vertexColors.push(new THREE.Color(j[o]));d.faces.push(r)}if(a.skinWeights){e=0;for(g=a.skinWeights.length;e<g;e+=2)d.skinWeights.push(new THREE.Vector4(a.skinWeights[e],a.skinWeights[e+1],0,0))}if(a.skinIndices){e=0;for(g=a.skinIndices.length;e<g;e+=2)m=0,d.skinIndices.push(new THREE.Vector4(a.skinIndices[e],a.skinIndices[e+1],m,0))}d.bones=a.bones;d.animation=a.animation;if(a.morphTargets){e=0;for(g=a.morphTargets.length;e<g;e++){d.morphTargets[e]={};d.morphTargets[e].name=a.morphTargets[e].name;
 d.morphTargets[e].vertices=[];m=d.morphTargets[e].vertices;j=a.morphTargets[e].vertices;t=0;for(l=j.length;t<l;t+=3)p=new THREE.Vector3,p.x=j[t]*f,p.y=j[t+1]*f,p.z=j[t+2]*f,m.push(p)}}if(a.morphColors){e=0;for(g=a.morphColors.length;e<g;e++){d.morphColors[e]={};d.morphColors[e].name=a.morphColors[e].name;d.morphColors[e].colors=[];f=d.morphColors[e].colors;j=a.morphColors[e].colors;m=0;for(l=j.length;m<l;m+=3)n=new THREE.Color(16755200),n.setRGB(j[m],j[m+1],j[m+2]),f.push(n)}}d.computeCentroids();
 d.computeFaceNormals();return d}};THREE.SceneLoader=function(){this.onLoadStart=function(){};this.onLoadProgress=function(){};this.onLoadComplete=function(){};this.callbackSync=function(){};this.callbackProgress=function(){};this.geometryHandlerMap={};this.addGeometryHandler("ascii",THREE.JSONLoader);this.addGeometryHandler("binary",THREE.BinaryLoader)};THREE.SceneLoader.prototype.constructor=THREE.SceneLoader;
 THREE.SceneLoader.prototype.load=function(a,b){var c=this,d=new XMLHttpRequest;d.onreadystatechange=function(){if(4===d.readyState)if(200===d.status||0===d.status){var f=JSON.parse(d.responseText);c.parse(f,b,a)}else console.error("THREE.SceneLoader: Couldn't load ["+a+"] ["+d.status+"]")};d.open("GET",a,!0);d.send(null)};THREE.SceneLoader.prototype.addGeometryHandler=function(a,b){this.geometryHandlerMap[a]={loaderClass:b}};
-THREE.SceneLoader.prototype.parse=function(a,b,c){function d(a,b){return"relativeToHTML"==b?a:j+"/"+a}function f(a,b){for(var c in b)if(void 0===I.objects[c]){var d=b[c],e=null;if(void 0!==d.geometry){if(J=I.geometries[d.geometry])e=!1,D=I.materials[d.materials[0]],(e=D instanceof THREE.ShaderMaterial)&&J.computeTangents(),u=d.position,v=d.rotation,s=d.quaternion,z=d.scale,r=d.matrix,s=0,0===d.materials.length&&(D=new THREE.MeshFaceMaterial),1<d.materials.length&&(D=new THREE.MeshFaceMaterial),d.morph?
-(e=new THREE.MorphAnimMesh(J,D),void 0!==d.duration&&(e.duration=d.duration),void 0!==d.time&&(e.time=d.time),void 0!==d.mirroredLoop&&(e.mirroredLoop=d.mirroredLoop),D.morphNormals&&J.computeMorphNormals()):e=new THREE.Mesh(J,D),e.name=c,r?(e.matrixAutoUpdate=!1,e.matrix.set(r[0],r[1],r[2],r[3],r[4],r[5],r[6],r[7],r[8],r[9],r[10],r[11],r[12],r[13],r[14],r[15])):(e.position.set(u[0],u[1],u[2]),s?(e.quaternion.set(s[0],s[1],s[2],s[3]),e.useQuaternion=!0):e.rotation.set(v[0],v[1],v[2]),e.scale.set(z[0],
-z[1],z[2])),e.visible=d.visible,e.castShadow=d.castShadow,e.receiveShadow=d.receiveShadow,a.add(e),I.objects[c]=e}else u=d.position,v=d.rotation,s=d.quaternion,z=d.scale,s=0,e=new THREE.Object3D,e.name=c,e.position.set(u[0],u[1],u[2]),s?(e.quaternion.set(s[0],s[1],s[2],s[3]),e.useQuaternion=!0):e.rotation.set(v[0],v[1],v[2]),e.scale.set(z[0],z[1],z[2]),e.visible=void 0!==d.visible?d.visible:!1,a.add(e),I.objects[c]=e,I.empties[c]=e;if(e){if(void 0!==d.properties)for(var g in d.properties)e.properties[g]=
-d.properties[g];void 0!==d.children&&f(e,d.children)}}}function e(a){return function(b){I.geometries[a]=b;f(I.scene,M.objects);H-=1;i.onLoadComplete();h()}}function g(a){return function(b){I.geometries[a]=b}}function h(){i.callbackProgress({totalModels:L,totalTextures:K,loadedModels:L-H,loadedTextures:K-Q},I);i.onLoadProgress();0===H&&0===Q&&b(I)}var i=this,j=THREE.Loader.prototype.extractUrlBase(c),l,n,m,q,o,p,r,t,u,v,s,z,w,A,J,D,F,B,E,H,Q,L,K,I,M=a;for(w in this.geometryHandlerMap)this.geometryHandlerMap[w].loaderObject=
-new this.geometryHandlerMap[w].loaderClass;Q=H=0;I={scene:new THREE.Scene,geometries:{},materials:{},textures:{},objects:{},cameras:{},lights:{},fogs:{},empties:{}};if(M.transform&&(a=M.transform.position,c=M.transform.rotation,w=M.transform.scale,a&&I.scene.position.set(a[0],a[1],a[2]),c&&I.scene.rotation.set(c[0],c[1],c[2]),w&&I.scene.scale.set(w[0],w[1],w[2]),a||c||w))I.scene.updateMatrix(),I.scene.updateMatrixWorld();a=function(a){return function(){Q-=a;h();i.onLoadComplete()}};for(q in M.cameras)w=
-M.cameras[q],"perspective"===w.type?F=new THREE.PerspectiveCamera(w.fov,w.aspect,w.near,w.far):"ortho"===w.type&&(F=new THREE.OrthographicCamera(w.left,w.right,w.top,w.bottom,w.near,w.far)),u=w.position,c=w.target,w=w.up,F.position.set(u[0],u[1],u[2]),F.target=new THREE.Vector3(c[0],c[1],c[2]),w&&F.up.set(w[0],w[1],w[2]),I.cameras[q]=F;for(m in M.lights)c=M.lights[m],q=void 0!==c.color?c.color:16777215,F=void 0!==c.intensity?c.intensity:1,"directional"===c.type?(u=c.direction,t=new THREE.DirectionalLight(q,
-F),t.position.set(u[0],u[1],u[2]),t.position.normalize()):"point"===c.type?(u=c.position,t=c.distance,t=new THREE.PointLight(q,F,t),t.position.set(u[0],u[1],u[2])):"ambient"===c.type&&(t=new THREE.AmbientLight(q)),I.scene.add(t),I.lights[m]=t;for(o in M.fogs)m=M.fogs[o],"linear"===m.type?B=new THREE.Fog(0,m.near,m.far):"exp2"===m.type&&(B=new THREE.FogExp2(0,m.density)),w=m.color,B.color.setRGB(w[0],w[1],w[2]),I.fogs[o]=B;I.cameras&&M.defaults.camera&&(I.currentCamera=I.cameras[M.defaults.camera]);
-I.fogs&&M.defaults.fog&&(I.scene.fog=I.fogs[M.defaults.fog]);w=M.defaults.bgcolor;I.bgColor=new THREE.Color;I.bgColor.setRGB(w[0],w[1],w[2]);I.bgColorAlpha=M.defaults.bgalpha;for(l in M.geometries)o=M.geometries[l],o.type in this.geometryHandlerMap&&(H+=1,i.onLoadStart());L=H;for(l in M.geometries)if(o=M.geometries[l],"cube"===o.type)J=new THREE.CubeGeometry(o.width,o.height,o.depth,o.segmentsWidth,o.segmentsHeight,o.segmentsDepth,null,o.flipped,o.sides),I.geometries[l]=J;else if("plane"===o.type)J=
-new THREE.PlaneGeometry(o.width,o.height,o.segmentsWidth,o.segmentsHeight),I.geometries[l]=J;else if("sphere"===o.type)J=new THREE.SphereGeometry(o.radius,o.segmentsWidth,o.segmentsHeight),I.geometries[l]=J;else if("cylinder"===o.type)J=new THREE.CylinderGeometry(o.topRad,o.botRad,o.height,o.radSegs,o.heightSegs),I.geometries[l]=J;else if("torus"===o.type)J=new THREE.TorusGeometry(o.radius,o.tube,o.segmentsR,o.segmentsT),I.geometries[l]=J;else if("icosahedron"===o.type)J=new THREE.IcosahedronGeometry(o.radius,
-o.subdivisions),I.geometries[l]=J;else if(o.type in this.geometryHandlerMap){B={};for(E in o)"type"!==E&&"url"!==E&&(B[E]=o[E]);this.geometryHandlerMap[o.type].loaderObject.load(d(o.url,M.urlBaseType),e(l),B)}else"embedded"===o.type&&(o=M.embeds[o.id],o.metadata=M.metadata,o&&this.geometryHandlerMap.ascii.loaderObject.createModel(o,g(l),""));for(p in M.textures)if(l=M.textures[p],l.url instanceof Array){Q+=l.url.length;for(E=0;E<l.url.length;E++)i.onLoadStart()}else Q+=1,i.onLoadStart();K=Q;for(p in M.textures){l=
+THREE.SceneLoader.prototype.parse=function(a,b,c){function d(a,b){return"relativeToHTML"==b?a:j+"/"+a}function f(a,b){for(var c in b)if(void 0===J.objects[c]){var d=b[c],e=null;if(void 0!==d.geometry){if(I=J.geometries[d.geometry])e=!1,D=J.materials[d.materials[0]],(e=D instanceof THREE.ShaderMaterial)&&I.computeTangents(),u=d.position,v=d.rotation,s=d.quaternion,z=d.scale,r=d.matrix,s=0,0===d.materials.length&&(D=new THREE.MeshFaceMaterial),1<d.materials.length&&(D=new THREE.MeshFaceMaterial),d.morph?
+(e=new THREE.MorphAnimMesh(I,D),void 0!==d.duration&&(e.duration=d.duration),void 0!==d.time&&(e.time=d.time),void 0!==d.mirroredLoop&&(e.mirroredLoop=d.mirroredLoop),D.morphNormals&&I.computeMorphNormals()):e=new THREE.Mesh(I,D),e.name=c,r?(e.matrixAutoUpdate=!1,e.matrix.set(r[0],r[1],r[2],r[3],r[4],r[5],r[6],r[7],r[8],r[9],r[10],r[11],r[12],r[13],r[14],r[15])):(e.position.set(u[0],u[1],u[2]),s?(e.quaternion.set(s[0],s[1],s[2],s[3]),e.useQuaternion=!0):e.rotation.set(v[0],v[1],v[2]),e.scale.set(z[0],
+z[1],z[2])),e.visible=d.visible,e.castShadow=d.castShadow,e.receiveShadow=d.receiveShadow,a.add(e),J.objects[c]=e}else u=d.position,v=d.rotation,s=d.quaternion,z=d.scale,s=0,e=new THREE.Object3D,e.name=c,e.position.set(u[0],u[1],u[2]),s?(e.quaternion.set(s[0],s[1],s[2],s[3]),e.useQuaternion=!0):e.rotation.set(v[0],v[1],v[2]),e.scale.set(z[0],z[1],z[2]),e.visible=void 0!==d.visible?d.visible:!1,a.add(e),J.objects[c]=e,J.empties[c]=e;if(e){if(void 0!==d.properties)for(var g in d.properties)e.properties[g]=
+d.properties[g];void 0!==d.children&&f(e,d.children)}}}function e(a){return function(b){J.geometries[a]=b;f(J.scene,M.objects);H-=1;i.onLoadComplete();h()}}function g(a){return function(b){J.geometries[a]=b}}function h(){i.callbackProgress({totalModels:L,totalTextures:K,loadedModels:L-H,loadedTextures:K-Q},J);i.onLoadProgress();0===H&&0===Q&&b(J)}var i=this,j=THREE.Loader.prototype.extractUrlBase(c),l,n,m,q,o,p,r,t,u,v,s,z,w,A,I,D,F,B,E,H,Q,L,K,J,M=a;for(w in this.geometryHandlerMap)this.geometryHandlerMap[w].loaderObject=
+new this.geometryHandlerMap[w].loaderClass;Q=H=0;J={scene:new THREE.Scene,geometries:{},materials:{},textures:{},objects:{},cameras:{},lights:{},fogs:{},empties:{}};if(M.transform&&(a=M.transform.position,c=M.transform.rotation,w=M.transform.scale,a&&J.scene.position.set(a[0],a[1],a[2]),c&&J.scene.rotation.set(c[0],c[1],c[2]),w&&J.scene.scale.set(w[0],w[1],w[2]),a||c||w))J.scene.updateMatrix(),J.scene.updateMatrixWorld();a=function(a){return function(){Q-=a;h();i.onLoadComplete()}};for(q in M.cameras)w=
+M.cameras[q],"perspective"===w.type?F=new THREE.PerspectiveCamera(w.fov,w.aspect,w.near,w.far):"ortho"===w.type&&(F=new THREE.OrthographicCamera(w.left,w.right,w.top,w.bottom,w.near,w.far)),u=w.position,c=w.target,w=w.up,F.position.set(u[0],u[1],u[2]),F.target=new THREE.Vector3(c[0],c[1],c[2]),w&&F.up.set(w[0],w[1],w[2]),J.cameras[q]=F;for(m in M.lights)c=M.lights[m],q=void 0!==c.color?c.color:16777215,F=void 0!==c.intensity?c.intensity:1,"directional"===c.type?(u=c.direction,t=new THREE.DirectionalLight(q,
+F),t.position.set(u[0],u[1],u[2]),t.position.normalize()):"point"===c.type?(u=c.position,t=c.distance,t=new THREE.PointLight(q,F,t),t.position.set(u[0],u[1],u[2])):"ambient"===c.type&&(t=new THREE.AmbientLight(q)),J.scene.add(t),J.lights[m]=t;for(o in M.fogs)m=M.fogs[o],"linear"===m.type?B=new THREE.Fog(0,m.near,m.far):"exp2"===m.type&&(B=new THREE.FogExp2(0,m.density)),w=m.color,B.color.setRGB(w[0],w[1],w[2]),J.fogs[o]=B;J.cameras&&M.defaults.camera&&(J.currentCamera=J.cameras[M.defaults.camera]);
+J.fogs&&M.defaults.fog&&(J.scene.fog=J.fogs[M.defaults.fog]);w=M.defaults.bgcolor;J.bgColor=new THREE.Color;J.bgColor.setRGB(w[0],w[1],w[2]);J.bgColorAlpha=M.defaults.bgalpha;for(l in M.geometries)o=M.geometries[l],o.type in this.geometryHandlerMap&&(H+=1,i.onLoadStart());L=H;for(l in M.geometries)if(o=M.geometries[l],"cube"===o.type)I=new THREE.CubeGeometry(o.width,o.height,o.depth,o.segmentsWidth,o.segmentsHeight,o.segmentsDepth,null,o.flipped,o.sides),J.geometries[l]=I;else if("plane"===o.type)I=
+new THREE.PlaneGeometry(o.width,o.height,o.segmentsWidth,o.segmentsHeight),J.geometries[l]=I;else if("sphere"===o.type)I=new THREE.SphereGeometry(o.radius,o.segmentsWidth,o.segmentsHeight),J.geometries[l]=I;else if("cylinder"===o.type)I=new THREE.CylinderGeometry(o.topRad,o.botRad,o.height,o.radSegs,o.heightSegs),J.geometries[l]=I;else if("torus"===o.type)I=new THREE.TorusGeometry(o.radius,o.tube,o.segmentsR,o.segmentsT),J.geometries[l]=I;else if("icosahedron"===o.type)I=new THREE.IcosahedronGeometry(o.radius,
+o.subdivisions),J.geometries[l]=I;else if(o.type in this.geometryHandlerMap){B={};for(E in o)"type"!==E&&"url"!==E&&(B[E]=o[E]);this.geometryHandlerMap[o.type].loaderObject.load(d(o.url,M.urlBaseType),e(l),B)}else"embedded"===o.type&&(o=M.embeds[o.id],o.metadata=M.metadata,o&&this.geometryHandlerMap.ascii.loaderObject.createModel(o,g(l),""));for(p in M.textures)if(l=M.textures[p],l.url instanceof Array){Q+=l.url.length;for(E=0;E<l.url.length;E++)i.onLoadStart()}else Q+=1,i.onLoadStart();K=Q;for(p in M.textures){l=
 M.textures[p];void 0!==l.mapping&&void 0!==THREE[l.mapping]&&(l.mapping=new THREE[l.mapping]);if(l.url instanceof Array){o=l.url.length;B=[];for(E=0;E<o;E++)B[E]=d(l.url[E],M.urlBaseType);E=(E=B[0].endsWith(".dds"))?THREE.ImageUtils.loadCompressedTextureCube(B,l.mapping,a(o)):THREE.ImageUtils.loadTextureCube(B,l.mapping,a(o))}else{E=l.url.toLowerCase().endsWith(".dds");o=d(l.url,M.urlBaseType);B=a(1);E=E?THREE.ImageUtils.loadCompressedTexture(o,l.mapping,B):THREE.ImageUtils.loadTexture(o,l.mapping,
 B);void 0!==THREE[l.minFilter]&&(E.minFilter=THREE[l.minFilter]);void 0!==THREE[l.magFilter]&&(E.magFilter=THREE[l.magFilter]);l.anisotropy&&(E.anisotropy=l.anisotropy);if(l.repeat&&(E.repeat.set(l.repeat[0],l.repeat[1]),1!==l.repeat[0]&&(E.wrapS=THREE.RepeatWrapping),1!==l.repeat[1]))E.wrapT=THREE.RepeatWrapping;l.offset&&E.offset.set(l.offset[0],l.offset[1]);if(l.wrap&&(o={repeat:THREE.RepeatWrapping,mirror:THREE.MirroredRepeatWrapping},void 0!==o[l.wrap[0]]&&(E.wrapS=o[l.wrap[0]]),void 0!==o[l.wrap[1]]))E.wrapT=
-o[l.wrap[1]]}I.textures[p]=E}for(n in M.materials){r=M.materials[n];for(A in r.parameters)"envMap"===A||"map"===A||"lightMap"===A||"bumpMap"===A?r.parameters[A]=I.textures[r.parameters[A]]:"shading"===A?r.parameters[A]="flat"===r.parameters[A]?THREE.FlatShading:THREE.SmoothShading:"side"===A?r.parameters[A]="double"==r.parameters[A]?THREE.DoubleSide:"back"==r.parameters[A]?THREE.BackSide:THREE.FrontSide:"blending"===A?r.parameters[A]=r.parameters[A]in THREE?THREE[r.parameters[A]]:THREE.NormalBlending:
+o[l.wrap[1]]}J.textures[p]=E}for(n in M.materials){r=M.materials[n];for(A in r.parameters)"envMap"===A||"map"===A||"lightMap"===A||"bumpMap"===A?r.parameters[A]=J.textures[r.parameters[A]]:"shading"===A?r.parameters[A]="flat"===r.parameters[A]?THREE.FlatShading:THREE.SmoothShading:"side"===A?r.parameters[A]="double"==r.parameters[A]?THREE.DoubleSide:"back"==r.parameters[A]?THREE.BackSide:THREE.FrontSide:"blending"===A?r.parameters[A]=r.parameters[A]in THREE?THREE[r.parameters[A]]:THREE.NormalBlending:
 "combine"===A?r.parameters[A]="MixOperation"==r.parameters[A]?THREE.MixOperation:THREE.MultiplyOperation:"vertexColors"===A?"face"==r.parameters[A]?r.parameters[A]=THREE.FaceColors:r.parameters[A]&&(r.parameters[A]=THREE.VertexColors):"wrapRGB"===A&&(p=r.parameters[A],r.parameters[A]=new THREE.Vector3(p[0],p[1],p[2]));void 0!==r.parameters.opacity&&1>r.parameters.opacity&&(r.parameters.transparent=!0);r.parameters.normalMap?(p=THREE.ShaderUtils.lib.normal,a=THREE.UniformsUtils.clone(p.uniforms),l=
-r.parameters.color,E=r.parameters.specular,o=r.parameters.ambient,B=r.parameters.shininess,a.tNormal.value=I.textures[r.parameters.normalMap],r.parameters.normalScale&&a.uNormalScale.value.set(r.parameters.normalScale[0],r.parameters.normalScale[1]),r.parameters.map&&(a.tDiffuse.value=r.parameters.map,a.enableDiffuse.value=!0),r.parameters.envMap&&(a.tCube.value=r.parameters.envMap,a.enableReflection.value=!0,a.uReflectivity.value=r.parameters.reflectivity),r.parameters.lightMap&&(a.tAO.value=r.parameters.lightMap,
-a.enableAO.value=!0),r.parameters.specularMap&&(a.tSpecular.value=I.textures[r.parameters.specularMap],a.enableSpecular.value=!0),r.parameters.displacementMap&&(a.tDisplacement.value=I.textures[r.parameters.displacementMap],a.enableDisplacement.value=!0,a.uDisplacementBias.value=r.parameters.displacementBias,a.uDisplacementScale.value=r.parameters.displacementScale),a.uDiffuseColor.value.setHex(l),a.uSpecularColor.value.setHex(E),a.uAmbientColor.value.setHex(o),a.uShininess.value=B,r.parameters.opacity&&
-(a.uOpacity.value=r.parameters.opacity),D=new THREE.ShaderMaterial({fragmentShader:p.fragmentShader,vertexShader:p.vertexShader,uniforms:a,lights:!0,fog:!0})):D=new THREE[r.type](r.parameters);I.materials[n]=D}f(I.scene,M.objects);i.callbackSync(I);h()};THREE.TextureLoader=function(){THREE.EventTarget.call(this);this.crossOrigin=null};
+r.parameters.color,E=r.parameters.specular,o=r.parameters.ambient,B=r.parameters.shininess,a.tNormal.value=J.textures[r.parameters.normalMap],r.parameters.normalScale&&a.uNormalScale.value.set(r.parameters.normalScale[0],r.parameters.normalScale[1]),r.parameters.map&&(a.tDiffuse.value=r.parameters.map,a.enableDiffuse.value=!0),r.parameters.envMap&&(a.tCube.value=r.parameters.envMap,a.enableReflection.value=!0,a.uReflectivity.value=r.parameters.reflectivity),r.parameters.lightMap&&(a.tAO.value=r.parameters.lightMap,
+a.enableAO.value=!0),r.parameters.specularMap&&(a.tSpecular.value=J.textures[r.parameters.specularMap],a.enableSpecular.value=!0),r.parameters.displacementMap&&(a.tDisplacement.value=J.textures[r.parameters.displacementMap],a.enableDisplacement.value=!0,a.uDisplacementBias.value=r.parameters.displacementBias,a.uDisplacementScale.value=r.parameters.displacementScale),a.uDiffuseColor.value.setHex(l),a.uSpecularColor.value.setHex(E),a.uAmbientColor.value.setHex(o),a.uShininess.value=B,r.parameters.opacity&&
+(a.uOpacity.value=r.parameters.opacity),D=new THREE.ShaderMaterial({fragmentShader:p.fragmentShader,vertexShader:p.vertexShader,uniforms:a,lights:!0,fog:!0})):D=new THREE[r.type](r.parameters);J.materials[n]=D}f(J.scene,M.objects);i.callbackSync(J);h()};THREE.TextureLoader=function(){THREE.EventTarget.call(this);this.crossOrigin=null};
 THREE.TextureLoader.prototype={constructor:THREE.TextureLoader,load:function(a){var b=this,c=new Image;c.addEventListener("load",function(){var a=new THREE.Texture(c);a.needsUpdate=!0;b.dispatchEvent({type:"load",content:a})},!1);c.addEventListener("error",function(){b.dispatchEvent({type:"error",message:"Couldn't load URL ["+a+"]"})},!1);b.crossOrigin&&(c.crossOrigin=b.crossOrigin);c.src=a}};
 THREE.Material=function(){this.id=THREE.MaterialCount++;this.name="";this.side=THREE.FrontSide;this.opacity=1;this.transparent=!1;this.blending=THREE.NormalBlending;this.blendSrc=THREE.SrcAlphaFactor;this.blendDst=THREE.OneMinusSrcAlphaFactor;this.blendEquation=THREE.AddEquation;this.depthWrite=this.depthTest=!0;this.polygonOffset=!1;this.alphaTest=this.polygonOffsetUnits=this.polygonOffsetFactor=0;this.overdraw=!1;this.needsUpdate=this.visible=!0};
 THREE.Material.prototype.setValues=function(a){if(void 0!==a)for(var b in a){var c=a[b];if(void 0===c)console.warn("THREE.Material: '"+b+"' parameter is undefined.");else if(b in this){var d=this[b];d instanceof THREE.Color&&c instanceof THREE.Color?d.copy(c):d instanceof THREE.Color&&"number"===typeof c?d.setHex(c):d instanceof THREE.Vector3&&c instanceof THREE.Vector3?d.copy(c):this[b]=c}}};
@@ -267,34 +267,34 @@ THREE.Scene.prototype.__addObject=function(a){if(a instanceof THREE.Light)-1===t
 THREE.Scene.prototype.__removeObject=function(a){if(a instanceof THREE.Light){var b=this.__lights.indexOf(a);-1!==b&&this.__lights.splice(b,1)}else a instanceof THREE.Camera||(b=this.__objects.indexOf(a),-1!==b&&(this.__objects.splice(b,1),this.__objectsRemoved.push(a),b=this.__objectsAdded.indexOf(a),-1!==b&&this.__objectsAdded.splice(b,1)));for(b=0;b<a.children.length;b++)this.__removeObject(a.children[b])};
 THREE.Fog=function(a,b,c){this.color=new THREE.Color(a);this.near=void 0!==b?b:1;this.far=void 0!==c?c:1E3};THREE.FogExp2=function(a,b){this.color=new THREE.Color(a);this.density=void 0!==b?b:2.5E-4};
 THREE.CanvasRenderer=function(a){function b(a){u!==a&&(u=p.globalAlpha=a)}function c(a){v!==a&&(a===THREE.NormalBlending?p.globalCompositeOperation="source-over":a===THREE.AdditiveBlending?p.globalCompositeOperation="lighter":a===THREE.SubtractiveBlending&&(p.globalCompositeOperation="darker"),v=a)}function d(a){s!==a&&(s=p.strokeStyle=a)}function f(a){z!==a&&(z=p.fillStyle=a)}console.log("THREE.CanvasRenderer",THREE.REVISION);var a=a||{},e=this,g,h,i,j=new THREE.Projector,l=void 0!==a.canvas?a.canvas:
-document.createElement("canvas"),n,m,q,o,p=l.getContext("2d"),r=new THREE.Color(0),t=0,u=1,v=0,s=null,z=null,w=null,A=null,J=null,D,F,B,E,H=new THREE.RenderableVertex,Q=new THREE.RenderableVertex,L,K,I,M,T,Z,ea,N,fa,S,ra,wa,O=new THREE.Color,ga=new THREE.Color,P=new THREE.Color,X=new THREE.Color,ia=new THREE.Color,$=new THREE.Color,ca=new THREE.Color,Ja={},ua={},La,Wa,oa,Xa,kb,Ta,gb,rb,Qb,fb,bb=new THREE.Rectangle,Ma=new THREE.Rectangle,za=new THREE.Rectangle,xb=!1,Ga=new THREE.Color,sb=new THREE.Color,
+document.createElement("canvas"),n,m,q,o,p=l.getContext("2d"),r=new THREE.Color(0),t=0,u=1,v=0,s=null,z=null,w=null,A=null,I=null,D,F,B,E,H=new THREE.RenderableVertex,Q=new THREE.RenderableVertex,L,K,J,M,T,Z,ea,N,fa,S,ra,wa,O=new THREE.Color,ga=new THREE.Color,P=new THREE.Color,X=new THREE.Color,ia=new THREE.Color,$=new THREE.Color,ca=new THREE.Color,Ja={},ua={},La,Wa,oa,Xa,kb,Ta,gb,rb,Qb,fb,bb=new THREE.Rectangle,Ma=new THREE.Rectangle,za=new THREE.Rectangle,xb=!1,Ga=new THREE.Color,sb=new THREE.Color,
 hb=new THREE.Color,xa=new THREE.Vector3,ib,ab,Ya,Ha,yb,k,a=16;ib=document.createElement("canvas");ib.width=ib.height=2;ab=ib.getContext("2d");ab.fillStyle="rgba(0,0,0,1)";ab.fillRect(0,0,2,2);Ya=ab.getImageData(0,0,2,2);Ha=Ya.data;yb=document.createElement("canvas");yb.width=yb.height=a;k=yb.getContext("2d");k.translate(-a/2,-a/2);k.scale(a,a);a--;this.domElement=l;this.sortElements=this.sortObjects=this.autoClear=!0;this.info={render:{vertices:0,faces:0}};this.setSize=function(a,b){n=a;m=b;q=Math.floor(n/
-2);o=Math.floor(m/2);l.width=n;l.height=m;bb.set(-q,-o,q,o);Ma.set(-q,-o,q,o);u=1;v=0;J=A=w=z=s=null};this.setClearColor=function(a,b){r.copy(a);t=void 0!==b?b:1;Ma.set(-q,-o,q,o)};this.setClearColorHex=function(a,b){r.setHex(a);t=void 0!==b?b:1;Ma.set(-q,-o,q,o)};this.getMaxAnisotropy=function(){return 0};this.clear=function(){p.setTransform(1,0,0,-1,q,o);!1===Ma.isEmpty()&&(Ma.minSelf(bb),Ma.inflate(2),1>t&&p.clearRect(Math.floor(Ma.getX()),Math.floor(Ma.getY()),Math.floor(Ma.getWidth()),Math.floor(Ma.getHeight())),
+2);o=Math.floor(m/2);l.width=n;l.height=m;bb.set(-q,-o,q,o);Ma.set(-q,-o,q,o);u=1;v=0;I=A=w=z=s=null};this.setClearColor=function(a,b){r.copy(a);t=void 0!==b?b:1;Ma.set(-q,-o,q,o)};this.setClearColorHex=function(a,b){r.setHex(a);t=void 0!==b?b:1;Ma.set(-q,-o,q,o)};this.getMaxAnisotropy=function(){return 0};this.clear=function(){p.setTransform(1,0,0,-1,q,o);!1===Ma.isEmpty()&&(Ma.minSelf(bb),Ma.inflate(2),1>t&&p.clearRect(Math.floor(Ma.getX()),Math.floor(Ma.getY()),Math.floor(Ma.getWidth()),Math.floor(Ma.getHeight())),
 0<t&&(c(THREE.NormalBlending),b(1),f("rgba("+Math.floor(255*r.r)+","+Math.floor(255*r.g)+","+Math.floor(255*r.b)+","+t+")"),p.fillRect(Math.floor(Ma.getX()),Math.floor(Ma.getY()),Math.floor(Ma.getWidth()),Math.floor(Ma.getHeight()))),Ma.empty())};this.render=function(a,l){function n(a,b,c){for(var d=0,f=i.length;d<f;d++){var e=i[d],g=e.color;if(e instanceof THREE.DirectionalLight){var h=e.matrixWorld.getPosition().normalize(),k=b.dot(h);0>=k||(k*=e.intensity,c.r+=g.r*k,c.g+=g.g*k,c.b+=g.b*k)}else e instanceof
-THREE.PointLight&&(h=e.matrixWorld.getPosition(),k=b.dot(xa.sub(h,a).normalize()),0>=k||(k*=0==e.distance?1:1-Math.min(a.distanceTo(h)/e.distance,1),0!=k&&(k*=e.intensity,c.r+=g.r*k,c.g+=g.g*k,c.b+=g.b*k)))}}function m(a,d,f,g,h,i,k,j){e.info.render.vertices+=3;e.info.render.faces++;b(j.opacity);c(j.blending);L=a.positionScreen.x;K=a.positionScreen.y;I=d.positionScreen.x;M=d.positionScreen.y;T=f.positionScreen.x;Z=f.positionScreen.y;r(L,K,I,M,T,Z);(j instanceof THREE.MeshLambertMaterial||j instanceof
+THREE.PointLight&&(h=e.matrixWorld.getPosition(),k=b.dot(xa.sub(h,a).normalize()),0>=k||(k*=0==e.distance?1:1-Math.min(a.distanceTo(h)/e.distance,1),0!=k&&(k*=e.intensity,c.r+=g.r*k,c.g+=g.g*k,c.b+=g.b*k)))}}function m(a,d,f,g,h,i,k,j){e.info.render.vertices+=3;e.info.render.faces++;b(j.opacity);c(j.blending);L=a.positionScreen.x;K=a.positionScreen.y;J=d.positionScreen.x;M=d.positionScreen.y;T=f.positionScreen.x;Z=f.positionScreen.y;r(L,K,J,M,T,Z);(j instanceof THREE.MeshLambertMaterial||j instanceof
 THREE.MeshPhongMaterial)&&null===j.map&&null===j.map?($.copy(j.color),ca.copy(j.emissive),j.vertexColors===THREE.FaceColors&&($.r*=k.color.r,$.g*=k.color.g,$.b*=k.color.b),!0===xb)?!1===j.wireframe&&j.shading==THREE.SmoothShading&&3==k.vertexNormalsLength?(ga.r=P.r=X.r=Ga.r,ga.g=P.g=X.g=Ga.g,ga.b=P.b=X.b=Ga.b,n(k.v1.positionWorld,k.vertexNormalsWorld[0],ga),n(k.v2.positionWorld,k.vertexNormalsWorld[1],P),n(k.v3.positionWorld,k.vertexNormalsWorld[2],X),ga.r=ga.r*$.r+ca.r,ga.g=ga.g*$.g+ca.g,ga.b=ga.b*
-$.b+ca.b,P.r=P.r*$.r+ca.r,P.g=P.g*$.g+ca.g,P.b=P.b*$.b+ca.b,X.r=X.r*$.r+ca.r,X.g=X.g*$.g+ca.g,X.b=X.b*$.b+ca.b,ia.r=0.5*(P.r+X.r),ia.g=0.5*(P.g+X.g),ia.b=0.5*(P.b+X.b),oa=Ec(ga,P,X,ia),ic(L,K,I,M,T,Z,0,0,1,0,0,1,oa)):(O.r=Ga.r,O.g=Ga.g,O.b=Ga.b,n(k.centroidWorld,k.normalWorld,O),O.r=O.r*$.r+ca.r,O.g=O.g*$.g+ca.g,O.b=O.b*$.b+ca.b,!0===j.wireframe?t(O,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):u(O)):!0===j.wireframe?t(j.color,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):
-u(j.color):j instanceof THREE.MeshBasicMaterial||j instanceof THREE.MeshLambertMaterial||j instanceof THREE.MeshPhongMaterial?null!==j.map?j.map.mapping instanceof THREE.UVMapping&&(Xa=k.uvs[0],Ea(L,K,I,M,T,Z,Xa[g].u,Xa[g].v,Xa[h].u,Xa[h].v,Xa[i].u,Xa[i].v,j.map)):null!==j.envMap?j.envMap.mapping instanceof THREE.SphericalReflectionMapping&&(a=l.matrixWorldInverse,xa.copy(k.vertexNormalsWorld[g]),kb=0.5*(xa.x*a.elements[0]+xa.y*a.elements[4]+xa.z*a.elements[8])+0.5,Ta=0.5*(xa.x*a.elements[1]+xa.y*
-a.elements[5]+xa.z*a.elements[9])+0.5,xa.copy(k.vertexNormalsWorld[h]),gb=0.5*(xa.x*a.elements[0]+xa.y*a.elements[4]+xa.z*a.elements[8])+0.5,rb=0.5*(xa.x*a.elements[1]+xa.y*a.elements[5]+xa.z*a.elements[9])+0.5,xa.copy(k.vertexNormalsWorld[i]),Qb=0.5*(xa.x*a.elements[0]+xa.y*a.elements[4]+xa.z*a.elements[8])+0.5,fb=0.5*(xa.x*a.elements[1]+xa.y*a.elements[5]+xa.z*a.elements[9])+0.5,Ea(L,K,I,M,T,Z,kb,Ta,gb,rb,Qb,fb,j.envMap)):(O.copy(j.color),j.vertexColors===THREE.FaceColors&&(O.r*=k.color.r,O.g*=
-k.color.g,O.b*=k.color.b),!0===j.wireframe?t(O,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):u(O)):j instanceof THREE.MeshDepthMaterial?(La=l.near,Wa=l.far,ga.r=ga.g=ga.b=1-fc(a.positionScreen.z,La,Wa),P.r=P.g=P.b=1-fc(d.positionScreen.z,La,Wa),X.r=X.g=X.b=1-fc(f.positionScreen.z,La,Wa),ia.r=0.5*(P.r+X.r),ia.g=0.5*(P.g+X.g),ia.b=0.5*(P.b+X.b),oa=Ec(ga,P,X,ia),ic(L,K,I,M,T,Z,0,0,1,0,0,1,oa)):j instanceof THREE.MeshNormalMaterial&&(O.r=v(k.normalWorld.x),O.g=v(k.normalWorld.y),O.b=v(k.normalWorld.z),
-!0===j.wireframe?t(O,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):u(O))}function r(a,b,c,d,f,e){p.beginPath();p.moveTo(a,b);p.lineTo(c,d);p.lineTo(f,e);p.closePath()}function s(a,b,c,d,f,e,g,h){p.beginPath();p.moveTo(a,b);p.lineTo(c,d);p.lineTo(f,e);p.lineTo(g,h);p.closePath()}function t(a,b,c,f){w!==b&&(w=p.lineWidth=b);A!==c&&(A=p.lineCap=c);J!==f&&(J=p.lineJoin=f);d(a.getContextStyle());p.stroke();za.inflate(2*b)}function u(a){f(a.getContextStyle());p.fill()}function Ea(a,b,c,d,
+$.b+ca.b,P.r=P.r*$.r+ca.r,P.g=P.g*$.g+ca.g,P.b=P.b*$.b+ca.b,X.r=X.r*$.r+ca.r,X.g=X.g*$.g+ca.g,X.b=X.b*$.b+ca.b,ia.r=0.5*(P.r+X.r),ia.g=0.5*(P.g+X.g),ia.b=0.5*(P.b+X.b),oa=Ec(ga,P,X,ia),ic(L,K,J,M,T,Z,0,0,1,0,0,1,oa)):(O.r=Ga.r,O.g=Ga.g,O.b=Ga.b,n(k.centroidWorld,k.normalWorld,O),O.r=O.r*$.r+ca.r,O.g=O.g*$.g+ca.g,O.b=O.b*$.b+ca.b,!0===j.wireframe?t(O,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):u(O)):!0===j.wireframe?t(j.color,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):
+u(j.color):j instanceof THREE.MeshBasicMaterial||j instanceof THREE.MeshLambertMaterial||j instanceof THREE.MeshPhongMaterial?null!==j.map?j.map.mapping instanceof THREE.UVMapping&&(Xa=k.uvs[0],Ea(L,K,J,M,T,Z,Xa[g].u,Xa[g].v,Xa[h].u,Xa[h].v,Xa[i].u,Xa[i].v,j.map)):null!==j.envMap?j.envMap.mapping instanceof THREE.SphericalReflectionMapping&&(a=l.matrixWorldInverse,xa.copy(k.vertexNormalsWorld[g]),kb=0.5*(xa.x*a.elements[0]+xa.y*a.elements[4]+xa.z*a.elements[8])+0.5,Ta=0.5*(xa.x*a.elements[1]+xa.y*
+a.elements[5]+xa.z*a.elements[9])+0.5,xa.copy(k.vertexNormalsWorld[h]),gb=0.5*(xa.x*a.elements[0]+xa.y*a.elements[4]+xa.z*a.elements[8])+0.5,rb=0.5*(xa.x*a.elements[1]+xa.y*a.elements[5]+xa.z*a.elements[9])+0.5,xa.copy(k.vertexNormalsWorld[i]),Qb=0.5*(xa.x*a.elements[0]+xa.y*a.elements[4]+xa.z*a.elements[8])+0.5,fb=0.5*(xa.x*a.elements[1]+xa.y*a.elements[5]+xa.z*a.elements[9])+0.5,Ea(L,K,J,M,T,Z,kb,Ta,gb,rb,Qb,fb,j.envMap)):(O.copy(j.color),j.vertexColors===THREE.FaceColors&&(O.r*=k.color.r,O.g*=
+k.color.g,O.b*=k.color.b),!0===j.wireframe?t(O,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):u(O)):j instanceof THREE.MeshDepthMaterial?(La=l.near,Wa=l.far,ga.r=ga.g=ga.b=1-fc(a.positionScreen.z,La,Wa),P.r=P.g=P.b=1-fc(d.positionScreen.z,La,Wa),X.r=X.g=X.b=1-fc(f.positionScreen.z,La,Wa),ia.r=0.5*(P.r+X.r),ia.g=0.5*(P.g+X.g),ia.b=0.5*(P.b+X.b),oa=Ec(ga,P,X,ia),ic(L,K,J,M,T,Z,0,0,1,0,0,1,oa)):j instanceof THREE.MeshNormalMaterial&&(O.r=v(k.normalWorld.x),O.g=v(k.normalWorld.y),O.b=v(k.normalWorld.z),
+!0===j.wireframe?t(O,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):u(O))}function r(a,b,c,d,f,e){p.beginPath();p.moveTo(a,b);p.lineTo(c,d);p.lineTo(f,e);p.closePath()}function s(a,b,c,d,f,e,g,h){p.beginPath();p.moveTo(a,b);p.lineTo(c,d);p.lineTo(f,e);p.lineTo(g,h);p.closePath()}function t(a,b,c,f){w!==b&&(w=p.lineWidth=b);A!==c&&(A=p.lineCap=c);I!==f&&(I=p.lineJoin=f);d(a.getContextStyle());p.stroke();za.inflate(2*b)}function u(a){f(a.getContextStyle());p.fill()}function Ea(a,b,c,d,
 e,g,h,i,k,j,l,n,m){if(!(m instanceof THREE.DataTexture||void 0===m.image||0==m.image.width)){if(!0===m.needsUpdate){var Ea=m.wrapS==THREE.RepeatWrapping,o=m.wrapT==THREE.RepeatWrapping;Ja[m.id]=p.createPattern(m.image,!0===Ea&&!0===o?"repeat":!0===Ea&&!1===o?"repeat-x":!1===Ea&&!0===o?"repeat-y":"no-repeat");m.needsUpdate=!1}void 0===Ja[m.id]?f("rgba(0,0,0,1)"):f(Ja[m.id]);var Ea=m.offset.x/m.repeat.x,o=m.offset.y/m.repeat.y,q=m.image.width*m.repeat.x,r=m.image.height*m.repeat.y,h=(h+Ea)*q,i=(1-i+
 o)*r,c=c-a,d=d-b,e=e-a,g=g-b,k=(k+Ea)*q-h,j=(1-j+o)*r-i,l=(l+Ea)*q-h,n=(1-n+o)*r-i,Ea=k*n-l*j;0===Ea?(void 0===ua[m.id]&&(b=document.createElement("canvas"),b.width=m.image.width,b.height=m.image.height,b=b.getContext("2d"),b.drawImage(m.image,0,0),ua[m.id]=b.getImageData(0,0,m.image.width,m.image.height).data),b=ua[m.id],h=4*(Math.floor(h)+Math.floor(i)*m.image.width),O.setRGB(b[h]/255,b[h+1]/255,b[h+2]/255),u(O)):(Ea=1/Ea,m=(n*c-j*e)*Ea,j=(n*d-j*g)*Ea,c=(k*e-l*c)*Ea,d=(k*g-l*d)*Ea,a=a-m*h-c*i,h=
 b-j*h-d*i,p.save(),p.transform(m,j,c,d,a,h),p.fill(),p.restore())}}function ic(a,b,c,d,f,e,g,h,i,k,j,l,n){var m,Ea;m=n.width-1;Ea=n.height-1;g*=m;h*=Ea;c-=a;d-=b;f-=a;e-=b;i=i*m-g;k=k*Ea-h;j=j*m-g;l=l*Ea-h;Ea=1/(i*l-j*k);m=(l*c-k*f)*Ea;k=(l*d-k*e)*Ea;c=(i*f-j*c)*Ea;d=(i*e-j*d)*Ea;a=a-m*g-c*h;b=b-k*g-d*h;p.save();p.transform(m,k,c,d,a,b);p.clip();p.drawImage(n,0,0);p.restore()}function Ec(a,b,c,d){Ha[0]=255*a.r|0;Ha[1]=255*a.g|0;Ha[2]=255*a.b|0;Ha[4]=255*b.r|0;Ha[5]=255*b.g|0;Ha[6]=255*b.b|0;Ha[8]=
-255*c.r|0;Ha[9]=255*c.g|0;Ha[10]=255*c.b|0;Ha[12]=255*d.r|0;Ha[13]=255*d.g|0;Ha[14]=255*d.b|0;ab.putImageData(Ya,0,0);k.drawImage(ib,0,0);return yb}function fc(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}function v(a){a=0.5*(a+1);return 0>a?0:1<a?1:a}function z(a,b){var c=b.x-a.x,d=b.y-a.y,f=c*c+d*d;0!==f&&(f=1/Math.sqrt(f),c*=f,d*=f,b.x+=c,b.y+=d,a.x-=c,a.y-=d)}if(!1===l instanceof THREE.Camera)console.error("THREE.CanvasRenderer.render: camera is not an instance of THREE.Camera.");else{var Xb,Gc,ka,
-aa;!0===this.autoClear?this.clear():p.setTransform(1,0,0,-1,q,o);e.info.render.vertices=0;e.info.render.faces=0;g=j.projectScene(a,l,this.sortObjects,this.sortElements);h=g.elements;i=g.lights;xb=0<i.length;if(!0===xb){Ga.setRGB(0,0,0);sb.setRGB(0,0,0);hb.setRGB(0,0,0);Xb=0;for(Gc=i.length;Xb<Gc;Xb++){aa=i[Xb];var la=aa.color;aa instanceof THREE.AmbientLight?(Ga.r+=la.r,Ga.g+=la.g,Ga.b+=la.b):aa instanceof THREE.DirectionalLight?(sb.r+=la.r,sb.g+=la.g,sb.b+=la.b):aa instanceof THREE.PointLight&&(hb.r+=
-la.r,hb.g+=la.g,hb.b+=la.b)}}Xb=0;for(Gc=h.length;Xb<Gc;Xb++)if(ka=h[Xb],aa=ka.material,!(void 0===aa||!1===aa.visible)){za.empty();if(ka instanceof THREE.RenderableParticle){D=ka;D.x*=q;D.y*=o;var la=D,Za=ka;b(aa.opacity);c(aa.blending);var tb=void 0,ub=void 0,lb=void 0,mb=void 0,lc=ka=void 0,Vc=void 0;aa instanceof THREE.ParticleBasicMaterial?null===aa.map?(lb=Za.object.scale.x,mb=Za.object.scale.y,lb*=Za.scale.x*q,mb*=Za.scale.y*o,za.set(la.x-lb,la.y-mb,la.x+lb,la.y+mb),!1!==bb.intersects(za)&&
-(f(aa.color.getContextStyle()),p.save(),p.translate(la.x,la.y),p.rotate(-Za.rotation),p.scale(lb,mb),p.fillRect(-1,-1,2,2),p.restore())):(ka=aa.map.image,lc=ka.width>>1,Vc=ka.height>>1,lb=Za.scale.x*q,mb=Za.scale.y*o,tb=lb*lc,ub=mb*Vc,za.set(la.x-tb,la.y-ub,la.x+tb,la.y+ub),!1!==bb.intersects(za)&&(p.save(),p.translate(la.x,la.y),p.rotate(-Za.rotation),p.scale(lb,-mb),p.translate(-lc,-Vc),p.drawImage(ka,0,0),p.restore())):aa instanceof THREE.ParticleCanvasMaterial&&(tb=Za.scale.x*q,ub=Za.scale.y*
-o,za.set(la.x-tb,la.y-ub,la.x+tb,la.y+ub),!1!==bb.intersects(za)&&(d(aa.color.getContextStyle()),f(aa.color.getContextStyle()),p.save(),p.translate(la.x,la.y),p.rotate(-Za.rotation),p.scale(tb,ub),aa.program(p),p.restore()))}else if(ka instanceof THREE.RenderableLine){if(D=ka.v1,F=ka.v2,D.positionScreen.x*=q,D.positionScreen.y*=o,F.positionScreen.x*=q,F.positionScreen.y*=o,za.addPoint(D.positionScreen.x,D.positionScreen.y),za.addPoint(F.positionScreen.x,F.positionScreen.y),!0===bb.intersects(za)&&
-(la=D,Za=F,b(aa.opacity),c(aa.blending),p.beginPath(),p.moveTo(la.positionScreen.x,la.positionScreen.y),p.lineTo(Za.positionScreen.x,Za.positionScreen.y),aa instanceof THREE.LineBasicMaterial))la=aa.linewidth,w!==la&&(w=p.lineWidth=la),la=aa.linecap,A!==la&&(A=p.lineCap=la),la=aa.linejoin,J!==la&&(J=p.lineJoin=la),d(aa.color.getContextStyle()),p.stroke(),za.inflate(2*aa.linewidth)}else if(ka instanceof THREE.RenderableFace3)D=ka.v1,F=ka.v2,B=ka.v3,D.positionScreen.x*=q,D.positionScreen.y*=o,F.positionScreen.x*=
-q,F.positionScreen.y*=o,B.positionScreen.x*=q,B.positionScreen.y*=o,!0===aa.overdraw&&(z(D.positionScreen,F.positionScreen),z(F.positionScreen,B.positionScreen),z(B.positionScreen,D.positionScreen)),za.add3Points(D.positionScreen.x,D.positionScreen.y,F.positionScreen.x,F.positionScreen.y,B.positionScreen.x,B.positionScreen.y),!0===bb.intersects(za)&&m(D,F,B,0,1,2,ka,aa,a);else if(ka instanceof THREE.RenderableFace4&&(D=ka.v1,F=ka.v2,B=ka.v3,E=ka.v4,D.positionScreen.x*=q,D.positionScreen.y*=o,F.positionScreen.x*=
-q,F.positionScreen.y*=o,B.positionScreen.x*=q,B.positionScreen.y*=o,E.positionScreen.x*=q,E.positionScreen.y*=o,H.positionScreen.copy(F.positionScreen),Q.positionScreen.copy(E.positionScreen),!0===aa.overdraw&&(z(D.positionScreen,F.positionScreen),z(F.positionScreen,E.positionScreen),z(E.positionScreen,D.positionScreen),z(B.positionScreen,H.positionScreen),z(B.positionScreen,Q.positionScreen)),za.addPoint(D.positionScreen.x,D.positionScreen.y),za.addPoint(F.positionScreen.x,F.positionScreen.y),za.addPoint(B.positionScreen.x,
-B.positionScreen.y),za.addPoint(E.positionScreen.x,E.positionScreen.y),!0===bb.intersects(za)))(la=D,Za=F,tb=B,ub=E,lb=H,mb=Q,lc=a,e.info.render.vertices+=4,e.info.render.faces++,b(aa.opacity),c(aa.blending),void 0!==aa.map&&null!==aa.map||void 0!==aa.envMap&&null!==aa.envMap)?(m(la,Za,ub,0,1,3,ka,aa,lc),m(lb,tb,mb,1,2,3,ka,aa,lc)):(L=la.positionScreen.x,K=la.positionScreen.y,I=Za.positionScreen.x,M=Za.positionScreen.y,T=tb.positionScreen.x,Z=tb.positionScreen.y,ea=ub.positionScreen.x,N=ub.positionScreen.y,
-fa=lb.positionScreen.x,S=lb.positionScreen.y,ra=mb.positionScreen.x,wa=mb.positionScreen.y,aa instanceof THREE.MeshLambertMaterial||aa instanceof THREE.MeshPhongMaterial)?($.copy(aa.color),ca.copy(aa.emissive),aa.vertexColors===THREE.FaceColors&&($.r*=ka.color.r,$.g*=ka.color.g,$.b*=ka.color.b),!0===xb)?!1===aa.wireframe&&aa.shading==THREE.SmoothShading&&4==ka.vertexNormalsLength?(ga.r=P.r=X.r=ia.r=Ga.r,ga.g=P.g=X.g=ia.g=Ga.g,ga.b=P.b=X.b=ia.b=Ga.b,n(ka.v1.positionWorld,ka.vertexNormalsWorld[0],ga),
-n(ka.v2.positionWorld,ka.vertexNormalsWorld[1],P),n(ka.v4.positionWorld,ka.vertexNormalsWorld[3],X),n(ka.v3.positionWorld,ka.vertexNormalsWorld[2],ia),ga.r=ga.r*$.r+ca.r,ga.g=ga.g*$.g+ca.g,ga.b=ga.b*$.b+ca.b,P.r=P.r*$.r+ca.r,P.g=P.g*$.g+ca.g,P.b=P.b*$.b+ca.b,X.r=X.r*$.r+ca.r,X.g=X.g*$.g+ca.g,X.b=X.b*$.b+ca.b,ia.r=ia.r*$.r+ca.r,ia.g=ia.g*$.g+ca.g,ia.b=ia.b*$.b+ca.b,oa=Ec(ga,P,X,ia),r(L,K,I,M,ea,N),ic(L,K,I,M,ea,N,0,0,1,0,0,1,oa),r(fa,S,T,Z,ra,wa),ic(fa,S,T,Z,ra,wa,1,0,1,1,0,1,oa)):(O.r=Ga.r,O.g=Ga.g,
-O.b=Ga.b,n(ka.centroidWorld,ka.normalWorld,O),O.r=O.r*$.r+ca.r,O.g=O.g*$.g+ca.g,O.b=O.b*$.b+ca.b,s(L,K,I,M,T,Z,ea,N),!0===aa.wireframe?t(O,aa.wireframeLinewidth,aa.wireframeLinecap,aa.wireframeLinejoin):u(O)):(O.r=$.r+ca.r,O.g=$.g+ca.g,O.b=$.b+ca.b,s(L,K,I,M,T,Z,ea,N),!0===aa.wireframe?t(O,aa.wireframeLinewidth,aa.wireframeLinecap,aa.wireframeLinejoin):u(O)):aa instanceof THREE.MeshBasicMaterial?(O.copy(aa.color),aa.vertexColors===THREE.FaceColors&&(O.r*=ka.color.r,O.g*=ka.color.g,O.b*=ka.color.b),
-s(L,K,I,M,T,Z,ea,N),!0===aa.wireframe?t(O,aa.wireframeLinewidth,aa.wireframeLinecap,aa.wireframeLinejoin):u(O)):aa instanceof THREE.MeshNormalMaterial?(O.r=v(ka.normalWorld.x),O.g=v(ka.normalWorld.y),O.b=v(ka.normalWorld.z),s(L,K,I,M,T,Z,ea,N),!0===aa.wireframe?t(O,aa.wireframeLinewidth,aa.wireframeLinecap,aa.wireframeLinejoin):u(O)):aa instanceof THREE.MeshDepthMaterial&&(La=l.near,Wa=l.far,ga.r=ga.g=ga.b=1-fc(la.positionScreen.z,La,Wa),P.r=P.g=P.b=1-fc(Za.positionScreen.z,La,Wa),X.r=X.g=X.b=1-fc(ub.positionScreen.z,
-La,Wa),ia.r=ia.g=ia.b=1-fc(tb.positionScreen.z,La,Wa),oa=Ec(ga,P,X,ia),r(L,K,I,M,ea,N),ic(L,K,I,M,ea,N,0,0,1,0,0,1,oa),r(fa,S,T,Z,ra,wa),ic(fa,S,T,Z,ra,wa,1,0,1,1,0,1,oa));Ma.addRectangle(za)}p.setTransform(1,0,0,1,0,0)}}};
+255*c.r|0;Ha[9]=255*c.g|0;Ha[10]=255*c.b|0;Ha[12]=255*d.r|0;Ha[13]=255*d.g|0;Ha[14]=255*d.b|0;ab.putImageData(Ya,0,0);k.drawImage(ib,0,0);return yb}function fc(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}function v(a){a=0.5*(a+1);return 0>a?0:1<a?1:a}function Xb(a,b){var c=b.x-a.x,d=b.y-a.y,f=c*c+d*d;0!==f&&(f=1/Math.sqrt(f),c*=f,d*=f,b.x+=c,b.y+=d,a.x-=c,a.y-=d)}if(!1===l instanceof THREE.Camera)console.error("THREE.CanvasRenderer.render: camera is not an instance of THREE.Camera.");else{var z,Gc,ka,
+aa;!0===this.autoClear?this.clear():p.setTransform(1,0,0,-1,q,o);e.info.render.vertices=0;e.info.render.faces=0;g=j.projectScene(a,l,this.sortObjects,this.sortElements);h=g.elements;i=g.lights;xb=0<i.length;if(!0===xb){Ga.setRGB(0,0,0);sb.setRGB(0,0,0);hb.setRGB(0,0,0);z=0;for(Gc=i.length;z<Gc;z++){aa=i[z];var la=aa.color;aa instanceof THREE.AmbientLight?(Ga.r+=la.r,Ga.g+=la.g,Ga.b+=la.b):aa instanceof THREE.DirectionalLight?(sb.r+=la.r,sb.g+=la.g,sb.b+=la.b):aa instanceof THREE.PointLight&&(hb.r+=
+la.r,hb.g+=la.g,hb.b+=la.b)}}z=0;for(Gc=h.length;z<Gc;z++)if(ka=h[z],aa=ka.material,!(void 0===aa||!1===aa.visible)){za.empty();if(ka instanceof THREE.RenderableParticle){D=ka;D.x*=q;D.y*=o;var la=D,Za=ka;b(aa.opacity);c(aa.blending);var tb=void 0,ub=void 0,lb=void 0,mb=void 0,lc=ka=void 0,Vc=void 0;aa instanceof THREE.ParticleBasicMaterial?null===aa.map?(lb=Za.object.scale.x,mb=Za.object.scale.y,lb*=Za.scale.x*q,mb*=Za.scale.y*o,za.set(la.x-lb,la.y-mb,la.x+lb,la.y+mb),!1!==bb.intersects(za)&&(f(aa.color.getContextStyle()),
+p.save(),p.translate(la.x,la.y),p.rotate(-Za.rotation),p.scale(lb,mb),p.fillRect(-1,-1,2,2),p.restore())):(ka=aa.map.image,lc=ka.width>>1,Vc=ka.height>>1,lb=Za.scale.x*q,mb=Za.scale.y*o,tb=lb*lc,ub=mb*Vc,za.set(la.x-tb,la.y-ub,la.x+tb,la.y+ub),!1!==bb.intersects(za)&&(p.save(),p.translate(la.x,la.y),p.rotate(-Za.rotation),p.scale(lb,-mb),p.translate(-lc,-Vc),p.drawImage(ka,0,0),p.restore())):aa instanceof THREE.ParticleCanvasMaterial&&(tb=Za.scale.x*q,ub=Za.scale.y*o,za.set(la.x-tb,la.y-ub,la.x+tb,
+la.y+ub),!1!==bb.intersects(za)&&(d(aa.color.getContextStyle()),f(aa.color.getContextStyle()),p.save(),p.translate(la.x,la.y),p.rotate(-Za.rotation),p.scale(tb,ub),aa.program(p),p.restore()))}else if(ka instanceof THREE.RenderableLine){if(D=ka.v1,F=ka.v2,D.positionScreen.x*=q,D.positionScreen.y*=o,F.positionScreen.x*=q,F.positionScreen.y*=o,za.addPoint(D.positionScreen.x,D.positionScreen.y),za.addPoint(F.positionScreen.x,F.positionScreen.y),!0===bb.intersects(za)&&(la=D,Za=F,b(aa.opacity),c(aa.blending),
+p.beginPath(),p.moveTo(la.positionScreen.x,la.positionScreen.y),p.lineTo(Za.positionScreen.x,Za.positionScreen.y),aa instanceof THREE.LineBasicMaterial))la=aa.linewidth,w!==la&&(w=p.lineWidth=la),la=aa.linecap,A!==la&&(A=p.lineCap=la),la=aa.linejoin,I!==la&&(I=p.lineJoin=la),d(aa.color.getContextStyle()),p.stroke(),za.inflate(2*aa.linewidth)}else if(ka instanceof THREE.RenderableFace3)D=ka.v1,F=ka.v2,B=ka.v3,D.positionScreen.x*=q,D.positionScreen.y*=o,F.positionScreen.x*=q,F.positionScreen.y*=o,B.positionScreen.x*=
+q,B.positionScreen.y*=o,!0===aa.overdraw&&(Xb(D.positionScreen,F.positionScreen),Xb(F.positionScreen,B.positionScreen),Xb(B.positionScreen,D.positionScreen)),za.add3Points(D.positionScreen.x,D.positionScreen.y,F.positionScreen.x,F.positionScreen.y,B.positionScreen.x,B.positionScreen.y),!0===bb.intersects(za)&&m(D,F,B,0,1,2,ka,aa,a);else if(ka instanceof THREE.RenderableFace4&&(D=ka.v1,F=ka.v2,B=ka.v3,E=ka.v4,D.positionScreen.x*=q,D.positionScreen.y*=o,F.positionScreen.x*=q,F.positionScreen.y*=o,B.positionScreen.x*=
+q,B.positionScreen.y*=o,E.positionScreen.x*=q,E.positionScreen.y*=o,H.positionScreen.copy(F.positionScreen),Q.positionScreen.copy(E.positionScreen),!0===aa.overdraw&&(Xb(D.positionScreen,F.positionScreen),Xb(F.positionScreen,E.positionScreen),Xb(E.positionScreen,D.positionScreen),Xb(B.positionScreen,H.positionScreen),Xb(B.positionScreen,Q.positionScreen)),za.addPoint(D.positionScreen.x,D.positionScreen.y),za.addPoint(F.positionScreen.x,F.positionScreen.y),za.addPoint(B.positionScreen.x,B.positionScreen.y),
+za.addPoint(E.positionScreen.x,E.positionScreen.y),!0===bb.intersects(za)))(la=D,Za=F,tb=B,ub=E,lb=H,mb=Q,lc=a,e.info.render.vertices+=4,e.info.render.faces++,b(aa.opacity),c(aa.blending),void 0!==aa.map&&null!==aa.map||void 0!==aa.envMap&&null!==aa.envMap)?(m(la,Za,ub,0,1,3,ka,aa,lc),m(lb,tb,mb,1,2,3,ka,aa,lc)):(L=la.positionScreen.x,K=la.positionScreen.y,J=Za.positionScreen.x,M=Za.positionScreen.y,T=tb.positionScreen.x,Z=tb.positionScreen.y,ea=ub.positionScreen.x,N=ub.positionScreen.y,fa=lb.positionScreen.x,
+S=lb.positionScreen.y,ra=mb.positionScreen.x,wa=mb.positionScreen.y,aa instanceof THREE.MeshLambertMaterial||aa instanceof THREE.MeshPhongMaterial)?($.copy(aa.color),ca.copy(aa.emissive),aa.vertexColors===THREE.FaceColors&&($.r*=ka.color.r,$.g*=ka.color.g,$.b*=ka.color.b),!0===xb)?!1===aa.wireframe&&aa.shading==THREE.SmoothShading&&4==ka.vertexNormalsLength?(ga.r=P.r=X.r=ia.r=Ga.r,ga.g=P.g=X.g=ia.g=Ga.g,ga.b=P.b=X.b=ia.b=Ga.b,n(ka.v1.positionWorld,ka.vertexNormalsWorld[0],ga),n(ka.v2.positionWorld,
+ka.vertexNormalsWorld[1],P),n(ka.v4.positionWorld,ka.vertexNormalsWorld[3],X),n(ka.v3.positionWorld,ka.vertexNormalsWorld[2],ia),ga.r=ga.r*$.r+ca.r,ga.g=ga.g*$.g+ca.g,ga.b=ga.b*$.b+ca.b,P.r=P.r*$.r+ca.r,P.g=P.g*$.g+ca.g,P.b=P.b*$.b+ca.b,X.r=X.r*$.r+ca.r,X.g=X.g*$.g+ca.g,X.b=X.b*$.b+ca.b,ia.r=ia.r*$.r+ca.r,ia.g=ia.g*$.g+ca.g,ia.b=ia.b*$.b+ca.b,oa=Ec(ga,P,X,ia),r(L,K,J,M,ea,N),ic(L,K,J,M,ea,N,0,0,1,0,0,1,oa),r(fa,S,T,Z,ra,wa),ic(fa,S,T,Z,ra,wa,1,0,1,1,0,1,oa)):(O.r=Ga.r,O.g=Ga.g,O.b=Ga.b,n(ka.centroidWorld,
+ka.normalWorld,O),O.r=O.r*$.r+ca.r,O.g=O.g*$.g+ca.g,O.b=O.b*$.b+ca.b,s(L,K,J,M,T,Z,ea,N),!0===aa.wireframe?t(O,aa.wireframeLinewidth,aa.wireframeLinecap,aa.wireframeLinejoin):u(O)):(O.r=$.r+ca.r,O.g=$.g+ca.g,O.b=$.b+ca.b,s(L,K,J,M,T,Z,ea,N),!0===aa.wireframe?t(O,aa.wireframeLinewidth,aa.wireframeLinecap,aa.wireframeLinejoin):u(O)):aa instanceof THREE.MeshBasicMaterial?(O.copy(aa.color),aa.vertexColors===THREE.FaceColors&&(O.r*=ka.color.r,O.g*=ka.color.g,O.b*=ka.color.b),s(L,K,J,M,T,Z,ea,N),!0===aa.wireframe?
+t(O,aa.wireframeLinewidth,aa.wireframeLinecap,aa.wireframeLinejoin):u(O)):aa instanceof THREE.MeshNormalMaterial?(O.r=v(ka.normalWorld.x),O.g=v(ka.normalWorld.y),O.b=v(ka.normalWorld.z),s(L,K,J,M,T,Z,ea,N),!0===aa.wireframe?t(O,aa.wireframeLinewidth,aa.wireframeLinecap,aa.wireframeLinejoin):u(O)):aa instanceof THREE.MeshDepthMaterial&&(La=l.near,Wa=l.far,ga.r=ga.g=ga.b=1-fc(la.positionScreen.z,La,Wa),P.r=P.g=P.b=1-fc(Za.positionScreen.z,La,Wa),X.r=X.g=X.b=1-fc(ub.positionScreen.z,La,Wa),ia.r=ia.g=
+ia.b=1-fc(tb.positionScreen.z,La,Wa),oa=Ec(ga,P,X,ia),r(L,K,J,M,ea,N),ic(L,K,J,M,ea,N,0,0,1,0,0,1,oa),r(fa,S,T,Z,ra,wa),ic(fa,S,T,Z,ra,wa,1,0,1,1,0,1,oa));Ma.addRectangle(za)}p.setTransform(1,0,0,1,0,0)}}};
 THREE.ShaderChunk={fog_pars_fragment:"#ifdef USE_FOG\nuniform vec3 fogColor;\n#ifdef FOG_EXP2\nuniform float fogDensity;\n#else\nuniform float fogNear;\nuniform float fogFar;\n#endif\n#endif",fog_fragment:"#ifdef USE_FOG\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\n#ifdef FOG_EXP2\nconst float LOG2 = 1.442695;\nfloat fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n#else\nfloat fogFactor = smoothstep( fogNear, fogFar, depth );\n#endif\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\nuniform float reflectivity;\nuniform samplerCube envMap;\nuniform float flipEnvMap;\nuniform int combine;\n#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\nuniform bool useRefract;\nuniform float refractionRatio;\n#else\nvarying vec3 vReflect;\n#endif\n#endif",
 envmap_fragment:"#ifdef USE_ENVMAP\nvec3 reflectVec;\n#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\nvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\nif ( useRefract ) {\nreflectVec = refract( cameraToVertex, normal, refractionRatio );\n} else { \nreflectVec = reflect( cameraToVertex, normal );\n}\n#else\nreflectVec = vReflect;\n#endif\n#ifdef DOUBLE_SIDED\nfloat flipNormal = ( -1.0 + 2.0 * float( gl_FrontFacing ) );\nvec4 cubeColor = textureCube( envMap, flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n#else\nvec4 cubeColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n#endif\n#ifdef GAMMA_INPUT\ncubeColor.xyz *= cubeColor.xyz;\n#endif\nif ( combine == 1 ) {\ngl_FragColor.xyz = mix( gl_FragColor.xyz, cubeColor.xyz, specularStrength * reflectivity );\n} else {\ngl_FragColor.xyz = mix( gl_FragColor.xyz, gl_FragColor.xyz * cubeColor.xyz, specularStrength * reflectivity );\n}\n#endif",
 envmap_pars_vertex:"#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP )\nvarying vec3 vReflect;\nuniform float refractionRatio;\nuniform bool useRefract;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( PHONG ) || defined( LAMBERT ) || defined ( USE_SHADOWMAP )\n#ifdef USE_SKINNING\nvec4 mPosition = modelMatrix * skinned;\n#endif\n#if defined( USE_MORPHTARGETS ) && ! defined( USE_SKINNING )\nvec4 mPosition = modelMatrix * vec4( morphed, 1.0 );\n#endif\n#if ! defined( USE_MORPHTARGETS ) && ! defined( USE_SKINNING )\nvec4 mPosition = modelMatrix * vec4( position, 1.0 );\n#endif\n#endif",
@@ -351,9 +351,9 @@ k.bufferData(k.ARRAY_BUFFER,i.array,b));a.tangentsNeedUpdate&&void 0!==d&&(k.bin
 h.object,i.visible){if(g)h=g;else{h=h[b];if(!h)continue;f&&S.setBlending(h.blending,h.blendEquation,h.blendSrc,h.blendDst);S.setDepthTest(h.depthTest);S.setDepthWrite(h.depthWrite);A(h.polygonOffset,h.polygonOffsetFactor,h.polygonOffsetUnits)}S.renderImmediateObject(c,d,e,h,i)}}function q(a,b,c){a.push({buffer:b,object:c,opaque:null,transparent:null})}function o(a){for(var b in a.attributes)if(a.attributes[b].needsUpdate)return!0;return!1}function p(a){for(var b in a.attributes)a.attributes[b].needsUpdate=
 !1}function r(a,b){for(var c=a.length-1;0<=c;c--)a[c].object===b&&a.splice(c,1)}function t(a,b){for(var c=a.length-1;0<=c;c--)a[c]===b&&a.splice(c,1)}function u(a,b,c,d,e){ca=0;d.needsUpdate&&(d.program&&S.deallocateMaterial(d),S.initMaterial(d,b,c,e),d.needsUpdate=!1);d.morphTargets&&!e.__webglMorphTargetInfluences&&(e.__webglMorphTargetInfluences=new Float32Array(S.maxMorphTargets));var f=!1,g=d.program,h=g.uniforms,i=d.uniforms;g!==O&&(k.useProgram(g),O=g,f=!0);d.id!==P&&(P=d.id,f=!0);if(f||a!==
 ia)k.uniformMatrix4fv(h.projectionMatrix,!1,a._projectionMatrixArray),a!==ia&&(ia=a);if(d.skinning)if(kc&&e.useVertexTexture){if(null!==h.boneTexture){var j=v();k.uniform1i(h.boneTexture,j);S.setTexture(e.boneTexture,j)}}else null!==h.boneGlobalMatrices&&k.uniformMatrix4fv(h.boneGlobalMatrices,!1,e.boneMatrices);if(f){c&&d.fog&&(i.fogColor.value=c.color,c instanceof THREE.Fog?(i.fogNear.value=c.near,i.fogFar.value=c.far):c instanceof THREE.FogExp2&&(i.fogDensity.value=c.density));if(d instanceof THREE.MeshPhongMaterial||
-d instanceof THREE.MeshLambertMaterial||d.lights){if(Ha){for(var l=0,m=0,n=0,p,o,q,r,s=yb,t=s.directional.colors,u=s.directional.positions,A=s.point.colors,D=s.point.positions,E=s.point.distances,B=s.spot.colors,J=s.spot.positions,K=s.spot.distances,I=s.spot.directions,L=s.spot.angles,M=s.spot.exponents,N=s.hemi.skyColors,X=s.hemi.groundColors,$=s.hemi.positions,ga=0,T=0,ea=0,fa=0,c=p=q=q=o=0,f=b.length;c<f;c++)j=b[c],!j.onlyShadow&&j.visible&&(p=j.color,r=j.intensity,o=j.distance,j instanceof THREE.AmbientLight?
+d instanceof THREE.MeshLambertMaterial||d.lights){if(Ha){for(var l=0,m=0,n=0,p,o,q,r,s=yb,t=s.directional.colors,u=s.directional.positions,A=s.point.colors,D=s.point.positions,E=s.point.distances,B=s.spot.colors,I=s.spot.positions,K=s.spot.distances,J=s.spot.directions,L=s.spot.angles,M=s.spot.exponents,N=s.hemi.skyColors,X=s.hemi.groundColors,$=s.hemi.positions,ga=0,T=0,ea=0,fa=0,c=p=q=q=o=0,f=b.length;c<f;c++)j=b[c],!j.onlyShadow&&j.visible&&(p=j.color,r=j.intensity,o=j.distance,j instanceof THREE.AmbientLight?
 S.gammaInput?(l+=p.r*p.r,m+=p.g*p.g,n+=p.b*p.b):(l+=p.r,m+=p.g,n+=p.b):j instanceof THREE.DirectionalLight?(o=3*ga,S.gammaInput?z(t,o,p,r*r):w(t,o,p,r),Ya.copy(j.matrixWorld.getPosition()),Ya.subSelf(j.target.matrixWorld.getPosition()),Ya.normalize(),u[o]=Ya.x,u[o+1]=Ya.y,u[o+2]=Ya.z,ga+=1):j instanceof THREE.PointLight?(q=3*T,S.gammaInput?z(A,q,p,r*r):w(A,q,p,r),r=j.matrixWorld.getPosition(),D[q]=r.x,D[q+1]=r.y,D[q+2]=r.z,E[T]=o,T+=1):j instanceof THREE.SpotLight?(q=3*ea,S.gammaInput?z(B,q,p,r*r):
-w(B,q,p,r),r=j.matrixWorld.getPosition(),J[q]=r.x,J[q+1]=r.y,J[q+2]=r.z,K[ea]=o,Ya.copy(r),Ya.subSelf(j.target.matrixWorld.getPosition()),Ya.normalize(),I[q]=Ya.x,I[q+1]=Ya.y,I[q+2]=Ya.z,L[ea]=Math.cos(j.angle),M[ea]=j.exponent,ea+=1):j instanceof THREE.HemisphereLight&&(o=j.color,q=j.groundColor,p=3*fa,S.gammaInput?(r*=r,z(N,p,o,r),z(X,p,q,r)):(w(N,p,o,r),w(X,p,q,r)),r=j.matrixWorld.getPosition(),$[p]=r.x,$[p+1]=r.y,$[p+2]=r.z,fa+=1));c=3*ga;for(f=t.length;c<f;c++)t[c]=0;c=3*T;for(f=A.length;c<f;c++)A[c]=
+w(B,q,p,r),r=j.matrixWorld.getPosition(),I[q]=r.x,I[q+1]=r.y,I[q+2]=r.z,K[ea]=o,Ya.copy(r),Ya.subSelf(j.target.matrixWorld.getPosition()),Ya.normalize(),J[q]=Ya.x,J[q+1]=Ya.y,J[q+2]=Ya.z,L[ea]=Math.cos(j.angle),M[ea]=j.exponent,ea+=1):j instanceof THREE.HemisphereLight&&(o=j.color,q=j.groundColor,p=3*fa,S.gammaInput?(r*=r,z(N,p,o,r),z(X,p,q,r)):(w(N,p,o,r),w(X,p,q,r)),r=j.matrixWorld.getPosition(),$[p]=r.x,$[p+1]=r.y,$[p+2]=r.z,fa+=1));c=3*ga;for(f=t.length;c<f;c++)t[c]=0;c=3*T;for(f=A.length;c<f;c++)A[c]=
 0;c=3*ea;for(f=B.length;c<f;c++)B[c]=0;c=3*fa;for(f=N.length;c<f;c++)N[c]=0;c=3*fa;for(f=X.length;c<f;c++)X[c]=0;s.directional.length=ga;s.point.length=T;s.spot.length=ea;s.hemi.length=fa;s.ambient[0]=l;s.ambient[1]=m;s.ambient[2]=n;Ha=!1}c=yb;i.ambientLightColor.value=c.ambient;i.directionalLightColor.value=c.directional.colors;i.directionalLightDirection.value=c.directional.positions;i.pointLightColor.value=c.point.colors;i.pointLightPosition.value=c.point.positions;i.pointLightDistance.value=c.point.distances;
 i.spotLightColor.value=c.spot.colors;i.spotLightPosition.value=c.spot.positions;i.spotLightDistance.value=c.spot.distances;i.spotLightDirection.value=c.spot.directions;i.spotLightAngle.value=c.spot.angles;i.spotLightExponent.value=c.spot.exponents;i.hemisphereLightSkyColor.value=c.hemi.skyColors;i.hemisphereLightGroundColor.value=c.hemi.groundColors;i.hemisphereLightPosition.value=c.hemi.positions}if(d instanceof THREE.MeshBasicMaterial||d instanceof THREE.MeshLambertMaterial||d instanceof THREE.MeshPhongMaterial){i.opacity.value=
 d.opacity;S.gammaInput?i.diffuse.value.copyGammaToLinear(d.color):i.diffuse.value=d.color;i.map.value=d.map;i.lightMap.value=d.lightMap;i.specularMap.value=d.specularMap;d.bumpMap&&(i.bumpMap.value=d.bumpMap,i.bumpScale.value=d.bumpScale);d.normalMap&&(i.normalMap.value=d.normalMap,i.normalScale.value.copy(d.normalScale));var Z;d.map?Z=d.map:d.specularMap?Z=d.specularMap:d.normalMap?Z=d.normalMap:d.bumpMap&&(Z=d.bumpMap);void 0!==Z&&(c=Z.offset,Z=Z.repeat,i.offsetRepeat.value.set(c.x,c.y,Z.x,Z.y));
@@ -368,18 +368,18 @@ t=Math.floor(s.width*u/A),u=Math.floor(s.height*u/A),A=document.createElement("c
 l,0,n,n,s,j[l]);c.generateMipmaps&&m&&k.generateMipmap(k.TEXTURE_CUBE_MAP);c.needsUpdate=!1;if(c.onUpdate)c.onUpdate()}else k.activeTexture(k.TEXTURE0+f),k.bindTexture(k.TEXTURE_CUBE_MAP,c.image.__webglTextureCube)}else n instanceof THREE.WebGLRenderTargetCube?(c=n,k.activeTexture(k.TEXTURE0+j),k.bindTexture(k.TEXTURE_CUBE_MAP,c.__webglTexture)):S.setTexture(n,j)}else if("tv"===l){void 0===c._array&&(c._array=[]);l=0;for(m=c.value.length;l<m;l++)c._array[l]=v();k.uniform1iv(f,c._array);l=0;for(m=
 c.value.length;l<m;l++)n=c.value[l],j=c._array[l],n&&S.setTexture(n,j)}if((d instanceof THREE.ShaderMaterial||d instanceof THREE.MeshPhongMaterial||d.envMap)&&null!==h.cameraPosition)b=a.matrixWorld.getPosition(),k.uniform3f(h.cameraPosition,b.x,b.y,b.z);(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d instanceof THREE.ShaderMaterial||d.skinning)&&null!==h.viewMatrix&&k.uniformMatrix4fv(h.viewMatrix,!1,a._viewMatrixArray)}k.uniformMatrix4fv(h.modelViewMatrix,!1,e._modelViewMatrix.elements);
 h.normalMatrix&&k.uniformMatrix3fv(h.normalMatrix,!1,e._normalMatrix.elements);null!==h.modelMatrix&&k.uniformMatrix4fv(h.modelMatrix,!1,e.matrixWorld.elements);return g}function v(){var a=ca;a>=sc&&console.warn("Trying to use "+a+" texture units while this GPU supports only "+sc);ca+=1;return a}function s(a,b){a._modelViewMatrix.multiply(b.matrixWorldInverse,a.matrixWorld);a._normalMatrix.getInverse(a._modelViewMatrix);a._normalMatrix.transpose()}function z(a,b,c,d){a[b]=c.r*c.r*d;a[b+1]=c.g*c.g*
-d;a[b+2]=c.b*c.b*d}function w(a,b,c,d){a[b]=c.r*d;a[b+1]=c.g*d;a[b+2]=c.b*d}function A(a,b,c){gb!==a&&(a?k.enable(k.POLYGON_OFFSET_FILL):k.disable(k.POLYGON_OFFSET_FILL),gb=a);if(a&&(rb!==b||Qb!==c))k.polygonOffset(b,c),rb=b,Qb=c}function J(a){for(var a=a.split("\n"),b=0,c=a.length;b<c;b++)a[b]=b+1+": "+a[b];return a.join("\n")}function D(a,b){var c;"fragment"===a?c=k.createShader(k.FRAGMENT_SHADER):"vertex"===a&&(c=k.createShader(k.VERTEX_SHADER));k.shaderSource(c,b);k.compileShader(c);return!k.getShaderParameter(c,
-k.COMPILE_STATUS)?(console.error(k.getShaderInfoLog(c)),console.error(J(b)),null):c}function F(a,b,c){c?(k.texParameteri(a,k.TEXTURE_WRAP_S,H(b.wrapS)),k.texParameteri(a,k.TEXTURE_WRAP_T,H(b.wrapT)),k.texParameteri(a,k.TEXTURE_MAG_FILTER,H(b.magFilter)),k.texParameteri(a,k.TEXTURE_MIN_FILTER,H(b.minFilter))):(k.texParameteri(a,k.TEXTURE_WRAP_S,k.CLAMP_TO_EDGE),k.texParameteri(a,k.TEXTURE_WRAP_T,k.CLAMP_TO_EDGE),k.texParameteri(a,k.TEXTURE_MAG_FILTER,E(b.magFilter)),k.texParameteri(a,k.TEXTURE_MIN_FILTER,
+d;a[b+2]=c.b*c.b*d}function w(a,b,c,d){a[b]=c.r*d;a[b+1]=c.g*d;a[b+2]=c.b*d}function A(a,b,c){gb!==a&&(a?k.enable(k.POLYGON_OFFSET_FILL):k.disable(k.POLYGON_OFFSET_FILL),gb=a);if(a&&(rb!==b||Qb!==c))k.polygonOffset(b,c),rb=b,Qb=c}function I(a){for(var a=a.split("\n"),b=0,c=a.length;b<c;b++)a[b]=b+1+": "+a[b];return a.join("\n")}function D(a,b){var c;"fragment"===a?c=k.createShader(k.FRAGMENT_SHADER):"vertex"===a&&(c=k.createShader(k.VERTEX_SHADER));k.shaderSource(c,b);k.compileShader(c);return!k.getShaderParameter(c,
+k.COMPILE_STATUS)?(console.error(k.getShaderInfoLog(c)),console.error(I(b)),null):c}function F(a,b,c){c?(k.texParameteri(a,k.TEXTURE_WRAP_S,H(b.wrapS)),k.texParameteri(a,k.TEXTURE_WRAP_T,H(b.wrapT)),k.texParameteri(a,k.TEXTURE_MAG_FILTER,H(b.magFilter)),k.texParameteri(a,k.TEXTURE_MIN_FILTER,H(b.minFilter))):(k.texParameteri(a,k.TEXTURE_WRAP_S,k.CLAMP_TO_EDGE),k.texParameteri(a,k.TEXTURE_WRAP_T,k.CLAMP_TO_EDGE),k.texParameteri(a,k.TEXTURE_MAG_FILTER,E(b.magFilter)),k.texParameteri(a,k.TEXTURE_MIN_FILTER,
 E(b.minFilter)));if(Rb&&b.type!==THREE.FloatType&&(1<b.anisotropy||b.__oldAnisotropy))k.texParameterf(a,Rb.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(b.anisotropy,Fc)),b.__oldAnisotropy=b.anisotropy}function B(a,b){k.bindRenderbuffer(k.RENDERBUFFER,a);b.depthBuffer&&!b.stencilBuffer?(k.renderbufferStorage(k.RENDERBUFFER,k.DEPTH_COMPONENT16,b.width,b.height),k.framebufferRenderbuffer(k.FRAMEBUFFER,k.DEPTH_ATTACHMENT,k.RENDERBUFFER,a)):b.depthBuffer&&b.stencilBuffer?(k.renderbufferStorage(k.RENDERBUFFER,k.DEPTH_STENCIL,
 b.width,b.height),k.framebufferRenderbuffer(k.FRAMEBUFFER,k.DEPTH_STENCIL_ATTACHMENT,k.RENDERBUFFER,a)):k.renderbufferStorage(k.RENDERBUFFER,k.RGBA4,b.width,b.height)}function E(a){return a===THREE.NearestFilter||a===THREE.NearestMipMapNearestFilter||a===THREE.NearestMipMapLinearFilter?k.NEAREST:k.LINEAR}function H(a){if(a===THREE.RepeatWrapping)return k.REPEAT;if(a===THREE.ClampToEdgeWrapping)return k.CLAMP_TO_EDGE;if(a===THREE.MirroredRepeatWrapping)return k.MIRRORED_REPEAT;if(a===THREE.NearestFilter)return k.NEAREST;
 if(a===THREE.NearestMipMapNearestFilter)return k.NEAREST_MIPMAP_NEAREST;if(a===THREE.NearestMipMapLinearFilter)return k.NEAREST_MIPMAP_LINEAR;if(a===THREE.LinearFilter)return k.LINEAR;if(a===THREE.LinearMipMapNearestFilter)return k.LINEAR_MIPMAP_NEAREST;if(a===THREE.LinearMipMapLinearFilter)return k.LINEAR_MIPMAP_LINEAR;if(a===THREE.UnsignedByteType)return k.UNSIGNED_BYTE;if(a===THREE.UnsignedShort4444Type)return k.UNSIGNED_SHORT_4_4_4_4;if(a===THREE.UnsignedShort5551Type)return k.UNSIGNED_SHORT_5_5_5_1;
 if(a===THREE.UnsignedShort565Type)return k.UNSIGNED_SHORT_5_6_5;if(a===THREE.ByteType)return k.BYTE;if(a===THREE.ShortType)return k.SHORT;if(a===THREE.UnsignedShortType)return k.UNSIGNED_SHORT;if(a===THREE.IntType)return k.INT;if(a===THREE.UnsignedIntType)return k.UNSIGNED_INT;if(a===THREE.FloatType)return k.FLOAT;if(a===THREE.AlphaFormat)return k.ALPHA;if(a===THREE.RGBFormat)return k.RGB;if(a===THREE.RGBAFormat)return k.RGBA;if(a===THREE.LuminanceFormat)return k.LUMINANCE;if(a===THREE.LuminanceAlphaFormat)return k.LUMINANCE_ALPHA;
 if(a===THREE.AddEquation)return k.FUNC_ADD;if(a===THREE.SubtractEquation)return k.FUNC_SUBTRACT;if(a===THREE.ReverseSubtractEquation)return k.FUNC_REVERSE_SUBTRACT;if(a===THREE.ZeroFactor)return k.ZERO;if(a===THREE.OneFactor)return k.ONE;if(a===THREE.SrcColorFactor)return k.SRC_COLOR;if(a===THREE.OneMinusSrcColorFactor)return k.ONE_MINUS_SRC_COLOR;if(a===THREE.SrcAlphaFactor)return k.SRC_ALPHA;if(a===THREE.OneMinusSrcAlphaFactor)return k.ONE_MINUS_SRC_ALPHA;if(a===THREE.DstAlphaFactor)return k.DST_ALPHA;
 if(a===THREE.OneMinusDstAlphaFactor)return k.ONE_MINUS_DST_ALPHA;if(a===THREE.DstColorFactor)return k.DST_COLOR;if(a===THREE.OneMinusDstColorFactor)return k.ONE_MINUS_DST_COLOR;if(a===THREE.SrcAlphaSaturateFactor)return k.SRC_ALPHA_SATURATE;if(void 0!==zb){if(a===THREE.RGB_S3TC_DXT1_Format)return zb.COMPRESSED_RGB_S3TC_DXT1_EXT;if(a===THREE.RGBA_S3TC_DXT1_Format)return zb.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(a===THREE.RGBA_S3TC_DXT3_Format)return zb.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(a===THREE.RGBA_S3TC_DXT5_Format)return zb.COMPRESSED_RGBA_S3TC_DXT5_EXT}return 0}
-console.log("THREE.WebGLRenderer",THREE.REVISION);var a=a||{},Q=void 0!==a.canvas?a.canvas:document.createElement("canvas"),L=void 0!==a.precision?a.precision:"highp",K=void 0!==a.alpha?a.alpha:!0,I=void 0!==a.premultipliedAlpha?a.premultipliedAlpha:!0,M=void 0!==a.antialias?a.antialias:!1,T=void 0!==a.stencil?a.stencil:!0,Z=void 0!==a.preserveDrawingBuffer?a.preserveDrawingBuffer:!1,ea=void 0!==a.clearColor?new THREE.Color(a.clearColor):new THREE.Color(0),N=void 0!==a.clearAlpha?a.clearAlpha:0,fa=
+console.log("THREE.WebGLRenderer",THREE.REVISION);var a=a||{},Q=void 0!==a.canvas?a.canvas:document.createElement("canvas"),L=void 0!==a.precision?a.precision:"highp",K=void 0!==a.alpha?a.alpha:!0,J=void 0!==a.premultipliedAlpha?a.premultipliedAlpha:!0,M=void 0!==a.antialias?a.antialias:!1,T=void 0!==a.stencil?a.stencil:!0,Z=void 0!==a.preserveDrawingBuffer?a.preserveDrawingBuffer:!1,ea=void 0!==a.clearColor?new THREE.Color(a.clearColor):new THREE.Color(0),N=void 0!==a.clearAlpha?a.clearAlpha:0,fa=
 void 0!==a.maxLights?a.maxLights:4;this.domElement=Q;this.context=null;this.autoUpdateScene=this.autoUpdateObjects=this.sortObjects=this.autoClearStencil=this.autoClearDepth=this.autoClearColor=this.autoClear=!0;this.shadowMapEnabled=this.physicallyBasedShading=this.gammaOutput=this.gammaInput=!1;this.shadowMapCullFrontFaces=this.shadowMapSoft=this.shadowMapAutoUpdate=!0;this.shadowMapCascade=this.shadowMapDebug=!1;this.maxMorphTargets=8;this.maxMorphNormals=4;this.autoScaleCubemaps=!0;this.renderPluginsPre=
 [];this.renderPluginsPost=[];this.info={memory:{programs:0,geometries:0,textures:0},render:{calls:0,vertices:0,faces:0,points:0}};var S=this,ra=[],wa=0,O=null,ga=null,P=-1,X=null,ia=null,$=0,ca=0,Ja=-1,ua=-1,La=-1,Wa=-1,oa=-1,Xa=-1,kb=-1,Ta=-1,gb=null,rb=null,Qb=null,fb=null,bb=0,Ma=0,za=0,xb=0,Ga=0,sb=0,hb=new THREE.Frustum,xa=new THREE.Matrix4,ib=new THREE.Matrix4,ab=new THREE.Vector4,Ya=new THREE.Vector3,Ha=!0,yb={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],
-positions:[],distances:[]},spot:{length:0,colors:[],positions:[],distances:[],directions:[],angles:[],exponents:[]},hemi:{length:0,skyColors:[],groundColors:[],positions:[]}},k,Rb,zb;try{if(!(k=Q.getContext("experimental-webgl",{alpha:K,premultipliedAlpha:I,antialias:M,stencil:T,preserveDrawingBuffer:Z})))throw"Error creating WebGL context.";}catch(Tc){console.error(Tc)}a=k.getExtension("OES_texture_float");K=k.getExtension("OES_standard_derivatives");Rb=k.getExtension("EXT_texture_filter_anisotropic")||
+positions:[],distances:[]},spot:{length:0,colors:[],positions:[],distances:[],directions:[],angles:[],exponents:[]},hemi:{length:0,skyColors:[],groundColors:[],positions:[]}},k,Rb,zb;try{if(!(k=Q.getContext("experimental-webgl",{alpha:K,premultipliedAlpha:J,antialias:M,stencil:T,preserveDrawingBuffer:Z})))throw"Error creating WebGL context.";}catch(Tc){console.error(Tc)}a=k.getExtension("OES_texture_float");K=k.getExtension("OES_standard_derivatives");Rb=k.getExtension("EXT_texture_filter_anisotropic")||
 k.getExtension("MOZ_EXT_texture_filter_anisotropic")||k.getExtension("WEBKIT_EXT_texture_filter_anisotropic");zb=k.getExtension("WEBGL_compressed_texture_s3tc")||k.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||k.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");a||console.log("THREE.WebGLRenderer: Float textures not supported.");K||console.log("THREE.WebGLRenderer: Standard derivatives not supported.");Rb||console.log("THREE.WebGLRenderer: Anisotropic texture filtering not supported.");zb||
 console.log("THREE.WebGLRenderer: S3TC compressed textures not supported.");k.clearColor(0,0,0,1);k.clearDepth(1);k.clearStencil(0);k.enable(k.DEPTH_TEST);k.depthFunc(k.LEQUAL);k.frontFace(k.CCW);k.cullFace(k.BACK);k.enable(k.CULL_FACE);k.enable(k.BLEND);k.blendEquation(k.FUNC_ADD);k.blendFunc(k.SRC_ALPHA,k.ONE_MINUS_SRC_ALPHA);k.clearColor(ea.r,ea.g,ea.b,N);this.context=k;var sc=k.getParameter(k.MAX_TEXTURE_IMAGE_UNITS),K=k.getParameter(k.MAX_VERTEX_TEXTURE_IMAGE_UNITS);k.getParameter(k.MAX_TEXTURE_SIZE);
 var Uc=k.getParameter(k.MAX_CUBE_MAP_TEXTURE_SIZE),Fc=Rb?k.getParameter(Rb.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0,jc=0<K,kc=jc&&a;zb&&k.getParameter(k.COMPRESSED_TEXTURE_FORMATS);this.getContext=function(){return k};this.supportsVertexTextures=function(){return jc};this.getMaxAnisotropy=function(){return Fc};this.setSize=function(a,b){Q.width=a;Q.height=b;this.setViewport(0,0,Q.width,Q.height)};this.setViewport=function(a,b,c,d){bb=void 0!==a?a:0;Ma=void 0!==b?b:0;za=void 0!==c?c:Q.width;xb=void 0!==d?
@@ -410,11 +410,11 @@ g.visible&&(!(g instanceof THREE.Mesh||g instanceof THREE.ParticleSystem)||!g.fr
 (ab.copy(g.matrixWorld.getPosition()),xa.multiplyVector3(ab),e.z=ab.z))}this.sortObjects&&h.sort(i);h=a.__webglObjectsImmediate;d=0;for(f=h.length;d<f;d++)e=h[d],g=e.object,g.visible&&(s(g,b),g=e.object.material,g.transparent?(e.transparent=g,e.opaque=null):(e.opaque=g,e.transparent=null));a.overrideMaterial?(d=a.overrideMaterial,this.setBlending(d.blending,d.blendEquation,d.blendSrc,d.blendDst),this.setDepthTest(d.depthTest),this.setDepthWrite(d.depthWrite),A(d.polygonOffset,d.polygonOffsetFactor,
 d.polygonOffsetUnits),n(a.__webglObjects,!1,"",b,j,p,!0,d),m(a.__webglObjectsImmediate,"",b,j,p,!1,d)):(this.setBlending(THREE.NormalBlending),n(a.__webglObjects,!0,"opaque",b,j,p,!1),m(a.__webglObjectsImmediate,"opaque",b,j,p,!1),n(a.__webglObjects,!1,"transparent",b,j,p,!0),m(a.__webglObjectsImmediate,"transparent",b,j,p,!0));l(this.renderPluginsPost,a,b);c&&(c.generateMipmaps&&c.minFilter!==THREE.NearestFilter&&c.minFilter!==THREE.LinearFilter)&&(c instanceof THREE.WebGLRenderTargetCube?(k.bindTexture(k.TEXTURE_CUBE_MAP,
 c.__webglTexture),k.generateMipmap(k.TEXTURE_CUBE_MAP),k.bindTexture(k.TEXTURE_CUBE_MAP,null)):(k.bindTexture(k.TEXTURE_2D,c.__webglTexture),k.generateMipmap(k.TEXTURE_2D),k.bindTexture(k.TEXTURE_2D,null)));this.setDepthTest(!0);this.setDepthWrite(!0)}};this.renderImmediateObject=function(a,b,c,d,f){var e=u(a,b,c,d,f);X=-1;S.setMaterialFaces(d);f.immediateRenderCallback?f.immediateRenderCallback(e,k,hb):f.render(function(a){S.renderBufferImmediate(a,e,d)})};this.initWebGLObjects=function(a){a.__webglObjects||
-(a.__webglObjects=[],a.__webglObjectsImmediate=[],a.__webglSprites=[],a.__webglFlares=[]);for(;a.__objectsAdded.length;){var i=a.__objectsAdded[0],j=a,l=void 0,m=void 0,n=void 0;if(!i.__webglInit)if(i.__webglInit=!0,i._modelViewMatrix=new THREE.Matrix4,i._normalMatrix=new THREE.Matrix3,i instanceof THREE.Mesh)if(m=i.geometry,m instanceof THREE.Geometry){if(void 0===m.geometryGroups){var s=m,u=void 0,v=void 0,w=void 0,z=void 0,A=void 0,D=void 0,B=void 0,E={},J=s.morphTargets.length,F=s.morphNormals.length;
-s.geometryGroups={};u=0;for(v=s.faces.length;u<v;u++)w=s.faces[u],z=w.materialIndex,D=void 0!==z?z:-1,void 0===E[D]&&(E[D]={hash:D,counter:0}),B=E[D].hash+"_"+E[D].counter,void 0===s.geometryGroups[B]&&(s.geometryGroups[B]={faces3:[],faces4:[],materialIndex:z,vertices:0,numMorphTargets:J,numMorphNormals:F}),A=w instanceof THREE.Face3?3:4,65535<s.geometryGroups[B].vertices+A&&(E[D].counter+=1,B=E[D].hash+"_"+E[D].counter,void 0===s.geometryGroups[B]&&(s.geometryGroups[B]={faces3:[],faces4:[],materialIndex:z,
-vertices:0,numMorphTargets:J,numMorphNormals:F})),w instanceof THREE.Face3?s.geometryGroups[B].faces3.push(u):s.geometryGroups[B].faces4.push(u),s.geometryGroups[B].vertices+=A;s.geometryGroupsList=[];var H=void 0;for(H in s.geometryGroups)s.geometryGroups[H].id=$++,s.geometryGroupsList.push(s.geometryGroups[H])}for(l in m.geometryGroups)if(n=m.geometryGroups[l],!n.__webglVertexBuffer){var O=n;O.__webglVertexBuffer=k.createBuffer();O.__webglNormalBuffer=k.createBuffer();O.__webglTangentBuffer=k.createBuffer();
-O.__webglColorBuffer=k.createBuffer();O.__webglUVBuffer=k.createBuffer();O.__webglUV2Buffer=k.createBuffer();O.__webglSkinIndicesBuffer=k.createBuffer();O.__webglSkinWeightsBuffer=k.createBuffer();O.__webglFaceBuffer=k.createBuffer();O.__webglLineBuffer=k.createBuffer();var I=void 0,K=void 0;if(O.numMorphTargets){O.__webglMorphTargetsBuffers=[];I=0;for(K=O.numMorphTargets;I<K;I++)O.__webglMorphTargetsBuffers.push(k.createBuffer())}if(O.numMorphNormals){O.__webglMorphNormalsBuffers=[];I=0;for(K=O.numMorphNormals;I<
-K;I++)O.__webglMorphNormalsBuffers.push(k.createBuffer())}S.info.memory.geometries++;var P=n,L=i,M=L.geometry,N=P.faces3,Q=P.faces4,X=3*N.length+4*Q.length,ca=1*N.length+2*Q.length,ga=3*N.length+4*Q.length,T=c(L,P),Z=f(T),ea=d(T),fa=T.vertexColors?T.vertexColors:!1;P.__vertexArray=new Float32Array(3*X);ea&&(P.__normalArray=new Float32Array(3*X));M.hasTangents&&(P.__tangentArray=new Float32Array(4*X));fa&&(P.__colorArray=new Float32Array(3*X));if(Z){if(0<M.faceUvs.length||0<M.faceVertexUvs.length)P.__uvArray=
+(a.__webglObjects=[],a.__webglObjectsImmediate=[],a.__webglSprites=[],a.__webglFlares=[]);for(;a.__objectsAdded.length;){var i=a.__objectsAdded[0],j=a,l=void 0,m=void 0,n=void 0;if(!i.__webglInit)if(i.__webglInit=!0,i._modelViewMatrix=new THREE.Matrix4,i._normalMatrix=new THREE.Matrix3,i instanceof THREE.Mesh)if(m=i.geometry,m instanceof THREE.Geometry){if(void 0===m.geometryGroups){var s=m,u=void 0,v=void 0,w=void 0,z=void 0,A=void 0,D=void 0,B=void 0,I={},E=s.morphTargets.length,F=s.morphNormals.length;
+s.geometryGroups={};u=0;for(v=s.faces.length;u<v;u++)w=s.faces[u],z=w.materialIndex,D=void 0!==z?z:-1,void 0===I[D]&&(I[D]={hash:D,counter:0}),B=I[D].hash+"_"+I[D].counter,void 0===s.geometryGroups[B]&&(s.geometryGroups[B]={faces3:[],faces4:[],materialIndex:z,vertices:0,numMorphTargets:E,numMorphNormals:F}),A=w instanceof THREE.Face3?3:4,65535<s.geometryGroups[B].vertices+A&&(I[D].counter+=1,B=I[D].hash+"_"+I[D].counter,void 0===s.geometryGroups[B]&&(s.geometryGroups[B]={faces3:[],faces4:[],materialIndex:z,
+vertices:0,numMorphTargets:E,numMorphNormals:F})),w instanceof THREE.Face3?s.geometryGroups[B].faces3.push(u):s.geometryGroups[B].faces4.push(u),s.geometryGroups[B].vertices+=A;s.geometryGroupsList=[];var H=void 0;for(H in s.geometryGroups)s.geometryGroups[H].id=$++,s.geometryGroupsList.push(s.geometryGroups[H])}for(l in m.geometryGroups)if(n=m.geometryGroups[l],!n.__webglVertexBuffer){var O=n;O.__webglVertexBuffer=k.createBuffer();O.__webglNormalBuffer=k.createBuffer();O.__webglTangentBuffer=k.createBuffer();
+O.__webglColorBuffer=k.createBuffer();O.__webglUVBuffer=k.createBuffer();O.__webglUV2Buffer=k.createBuffer();O.__webglSkinIndicesBuffer=k.createBuffer();O.__webglSkinWeightsBuffer=k.createBuffer();O.__webglFaceBuffer=k.createBuffer();O.__webglLineBuffer=k.createBuffer();var J=void 0,K=void 0;if(O.numMorphTargets){O.__webglMorphTargetsBuffers=[];J=0;for(K=O.numMorphTargets;J<K;J++)O.__webglMorphTargetsBuffers.push(k.createBuffer())}if(O.numMorphNormals){O.__webglMorphNormalsBuffers=[];J=0;for(K=O.numMorphNormals;J<
+K;J++)O.__webglMorphNormalsBuffers.push(k.createBuffer())}S.info.memory.geometries++;var P=n,L=i,M=L.geometry,N=P.faces3,Q=P.faces4,X=3*N.length+4*Q.length,ca=1*N.length+2*Q.length,ga=3*N.length+4*Q.length,T=c(L,P),Z=f(T),ea=d(T),fa=T.vertexColors?T.vertexColors:!1;P.__vertexArray=new Float32Array(3*X);ea&&(P.__normalArray=new Float32Array(3*X));M.hasTangents&&(P.__tangentArray=new Float32Array(4*X));fa&&(P.__colorArray=new Float32Array(3*X));if(Z){if(0<M.faceUvs.length||0<M.faceVertexUvs.length)P.__uvArray=
 new Float32Array(2*X);if(1<M.faceUvs.length||1<M.faceVertexUvs.length)P.__uv2Array=new Float32Array(2*X)}L.geometry.skinWeights.length&&L.geometry.skinIndices.length&&(P.__skinIndexArray=new Float32Array(4*X),P.__skinWeightArray=new Float32Array(4*X));P.__faceArray=new Uint16Array(3*ca);P.__lineArray=new Uint16Array(2*ga);var ia=void 0,ra=void 0;if(P.numMorphTargets){P.__morphTargetsArrays=[];ia=0;for(ra=P.numMorphTargets;ia<ra;ia++)P.__morphTargetsArrays.push(new Float32Array(3*X))}if(P.numMorphNormals){P.__morphNormalsArrays=
 [];ia=0;for(ra=P.numMorphNormals;ia<ra;ia++)P.__morphNormalsArrays.push(new Float32Array(3*X))}P.__webglFaceCount=3*ca;P.__webglLineCount=2*ga;if(T.attributes){void 0===P.__webglCustomAttributesList&&(P.__webglCustomAttributesList=[]);var Ja=void 0;for(Ja in T.attributes){var oa=T.attributes[Ja],ua={},xa;for(xa in oa)ua[xa]=oa[xa];if(!ua.__webglInitialized||ua.createUniqueBuffers){ua.__webglInitialized=!0;var wa=1;"v2"===ua.type?wa=2:"v3"===ua.type?wa=3:"v4"===ua.type?wa=4:"c"===ua.type&&(wa=3);ua.size=
 wa;ua.array=new Float32Array(X*wa);ua.buffer=k.createBuffer();ua.buffer.belongsToAttribute=Ja;oa.needsUpdate=!0;ua.__original=oa}P.__webglCustomAttributesList.push(ua)}}P.__inittedArrays=!0;m.verticesNeedUpdate=!0;m.morphTargetsNeedUpdate=!0;m.elementsNeedUpdate=!0;m.uvsNeedUpdate=!0;m.normalsNeedUpdate=!0;m.tangentsNeedUpdate=!0;m.colorsNeedUpdate=!0}}else m instanceof THREE.BufferGeometry&&e(m);else if(i instanceof THREE.Ribbon){if(m=i.geometry,!m.__webglVertexBuffer){var La=m;La.__webglVertexBuffer=
@@ -533,7 +533,7 @@ THREE.FontUtils={faces:{},face:"helvetiker",weight:"normal",style:"normal",size:
 c+d;l=b[a++]*c;q=b[a++]*c+d;o=b[a++]*c;f.quadraticCurveTo(q,o,i,l);if(g=e[e.length-1]){n=g.x;m=g.y;g=1;for(h=this.divisions;g<=h;g++){var u=g/h;THREE.Shape.Utils.b2(u,n,q,i);THREE.Shape.Utils.b2(u,m,o,l)}}break;case "b":i=b[a++]*c+d;l=b[a++]*c;q=b[a++]*c+d;o=b[a++]*-c;p=b[a++]*c+d;r=b[a++]*-c;f.bezierCurveTo(i,l,q,o,p,r);if(g=e[e.length-1]){n=g.x;m=g.y;g=1;for(h=this.divisions;g<=h;g++){u=g/h;THREE.Shape.Utils.b3(u,n,q,p,i);THREE.Shape.Utils.b3(u,m,o,r,l)}}}}}return{offset:t.ha*c,path:f}}}};
 THREE.FontUtils.generateShapes=function(a,b){var b=b||{},c=b.curveSegments!==void 0?b.curveSegments:4,d=b.font!==void 0?b.font:"helvetiker",f=b.weight!==void 0?b.weight:"normal",e=b.style!==void 0?b.style:"normal";THREE.FontUtils.size=b.size!==void 0?b.size:100;THREE.FontUtils.divisions=c;THREE.FontUtils.face=d;THREE.FontUtils.weight=f;THREE.FontUtils.style=e;c=THREE.FontUtils.drawText(a).paths;d=[];f=0;for(e=c.length;f<e;f++)Array.prototype.push.apply(d,c[f].toShapes());return d};
 (function(a){var b=function(a){for(var b=a.length,f=0,e=b-1,g=0;g<b;e=g++)f=f+(a[e].x*a[g].y-a[g].x*a[e].y);return f*0.5};a.Triangulate=function(a,d){var f=a.length;if(f<3)return null;var e=[],g=[],h=[],i,j,l;if(b(a)>0)for(j=0;j<f;j++)g[j]=j;else for(j=0;j<f;j++)g[j]=f-1-j;var n=2*f;for(j=f-1;f>2;){if(n--<=0){console.log("Warning, unable to triangulate polygon!");break}i=j;f<=i&&(i=0);j=i+1;f<=j&&(j=0);l=j+1;f<=l&&(l=0);var m;a:{m=a;var q=i,o=j,p=l,r=f,t=g,u=void 0,v=void 0,s=void 0,z=void 0,w=void 0,
-A=void 0,J=void 0,D=void 0,F=void 0,v=m[t[q]].x,s=m[t[q]].y,z=m[t[o]].x,w=m[t[o]].y,A=m[t[p]].x,J=m[t[p]].y;if(1E-10>(z-v)*(J-s)-(w-s)*(A-v))m=false;else{for(u=0;u<r;u++)if(!(u==q||u==o||u==p)){var D=m[t[u]].x,F=m[t[u]].y,B=void 0,E=void 0,H=void 0,Q=void 0,L=void 0,K=void 0,I=void 0,M=void 0,T=void 0,Z=void 0,ea=void 0,N=void 0,B=H=L=void 0,B=A-z,E=J-w,H=v-A,Q=s-J,L=z-v,K=w-s,I=D-v,M=F-s,T=D-z,Z=F-w,ea=D-A,N=F-J,B=B*Z-E*T,L=L*M-K*I,H=H*N-Q*ea;if(B>=0&&H>=0&&L>=0){m=false;break a}}m=true}}if(m){e.push([a[g[i]],
+A=void 0,I=void 0,D=void 0,F=void 0,v=m[t[q]].x,s=m[t[q]].y,z=m[t[o]].x,w=m[t[o]].y,A=m[t[p]].x,I=m[t[p]].y;if(1E-10>(z-v)*(I-s)-(w-s)*(A-v))m=false;else{for(u=0;u<r;u++)if(!(u==q||u==o||u==p)){var D=m[t[u]].x,F=m[t[u]].y,B=void 0,E=void 0,H=void 0,Q=void 0,L=void 0,K=void 0,J=void 0,M=void 0,T=void 0,Z=void 0,ea=void 0,N=void 0,B=H=L=void 0,B=A-z,E=I-w,H=v-A,Q=s-I,L=z-v,K=w-s,J=D-v,M=F-s,T=D-z,Z=F-w,ea=D-A,N=F-I,B=B*Z-E*T,L=L*M-K*J,H=H*N-Q*ea;if(B>=0&&H>=0&&L>=0){m=false;break a}}m=true}}if(m){e.push([a[g[i]],
 a[g[j]],a[g[l]]]);h.push([g[i],g[j],g[l]]);i=j;for(l=j+1;l<f;i++,l++)g[i]=g[l];f--;n=2*f}}return d?h:e};a.Triangulate.area=b;return a})(THREE.FontUtils);self._typeface_js={faces:THREE.FontUtils.faces,loadFace:THREE.FontUtils.loadFace};THREE.Curve=function(){};THREE.Curve.prototype.getPoint=function(){console.log("Warning, getPoint() not implemented!");return null};THREE.Curve.prototype.getPointAt=function(a){a=this.getUtoTmapping(a);return this.getPoint(a)};
 THREE.Curve.prototype.getPoints=function(a){a||(a=5);var b,c=[];for(b=0;b<=a;b++)c.push(this.getPoint(b/a));return c};THREE.Curve.prototype.getSpacedPoints=function(a){a||(a=5);var b,c=[];for(b=0;b<=a;b++)c.push(this.getPointAt(b/a));return c};THREE.Curve.prototype.getLength=function(){var a=this.getLengths();return a[a.length-1]};
 THREE.Curve.prototype.getLengths=function(a){a||(a=this.__arcLengthDivisions?this.__arcLengthDivisions:200);if(this.cacheArcLengths&&this.cacheArcLengths.length==a+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=false;var b=[],c,d=this.getPoint(0),f,e=0;b.push(0);for(f=1;f<=a;f++){c=this.getPoint(f/a);e=e+c.distanceTo(d);b.push(e);d=c}return this.cacheArcLengths=b};THREE.Curve.prototype.updateArcLengths=function(){this.needsUpdate=true;this.getLengths()};
@@ -660,17 +660,18 @@ this.checkDistances=function(){if(!d.noZoom||!d.noPan){d.object.position.lengthS
 2&&!d.noPan&&(q=d.getMouseOnScreen(a.clientX,a.clientY)))}},false);this.domElement.addEventListener("mousedown",function(a){if(d.enabled){a.preventDefault();a.stopPropagation();if(g===-1){g=a.button;g===0&&!d.noRotate?i=j=d.getMouseProjectionOnBall(a.clientX,a.clientY):g===1&&!d.noZoom?l=n=d.getMouseOnScreen(a.clientX,a.clientY):this.noPan||(m=q=d.getMouseOnScreen(a.clientX,a.clientY))}}},false);this.domElement.addEventListener("mouseup",function(a){if(d.enabled){a.preventDefault();a.stopPropagation();
 g=-1}},false);this.domElement.addEventListener("DOMMouseScroll",c,false);this.domElement.addEventListener("mousewheel",c,false);window.addEventListener("keydown",function(a){if(d.enabled&&g===-1){a.keyCode===d.keys[0]&&!d.noRotate?g=0:a.keyCode===d.keys[1]&&!d.noZoom?g=1:a.keyCode===d.keys[2]&&!d.noPan&&(g=2);g!==-1&&(e=true)}},false);window.addEventListener("keyup",function(){d.enabled&&g!==-1&&(g=-1)},false);this.handleResize()};
 THREE.OrbitControls=function(a,b){function c(){return 2*Math.PI/60/60*e.autoRotateSpeed}function d(a){a.preventDefault();if(u===t.ROTATE){i.set(a.clientX,a.clientY);j.sub(i,h);e.rotateLeft(2*Math.PI*j.x/g*e.userRotateSpeed);e.rotateUp(2*Math.PI*j.y/g*e.userRotateSpeed);h.copy(i)}else if(u===t.ZOOM){n.set(a.clientX,a.clientY);m.sub(n,l);m.y>0?e.zoomIn():e.zoomOut();l.copy(n)}}function f(){if(e.userRotate){document.removeEventListener("mousemove",d,false);document.removeEventListener("mouseup",f,false);
-u=t.NONE}}THREE.EventTarget.call(this);this.object=a;this.domElement=b!==void 0?b:document;this.center=new THREE.Vector3;this.userZoom=true;this.userZoomSpeed=1;this.userRotate=true;this.userRotateSpeed=1;this.autoRotate=false;this.autoRotateSpeed=2;var e=this,g=1800,h=new THREE.Vector2,i=new THREE.Vector2,j=new THREE.Vector2,l=new THREE.Vector2,n=new THREE.Vector2,m=new THREE.Vector2,q=0,o=0,p=1,r=new THREE.Vector3,t={NONE:-1,ROTATE:0,ZOOM:1},u=t.NONE,v={type:"change"};this.rotateLeft=function(a){a===
-void 0&&(a=c());o=o-a};this.rotateRight=function(a){a===void 0&&(a=c());o=o+a};this.rotateUp=function(a){a===void 0&&(a=c());q=q-a};this.rotateDown=function(a){a===void 0&&(a=c());q=q+a};this.zoomIn=function(a){a===void 0&&(a=Math.pow(0.95,e.userZoomSpeed));p=p/a};this.zoomOut=function(a){a===void 0&&(a=Math.pow(0.95,e.userZoomSpeed));p=p*a};this.update=function(){var a=this.object.position,b=a.clone().subSelf(this.center),d=Math.atan2(b.x,b.z),e=Math.atan2(Math.sqrt(b.x*b.x+b.z*b.z),b.y);this.autoRotate&&
-this.rotateLeft(c());var d=d+o,e=e+q,e=Math.max(1E-6,Math.min(Math.PI-1E-6,e)),f=b.length();b.x=f*Math.sin(e)*Math.sin(d);b.y=f*Math.cos(e);b.z=f*Math.sin(e)*Math.cos(d);b.multiplyScalar(p);a.copy(this.center).addSelf(b);this.object.lookAt(this.center);q=o=0;p=1;if(r.distanceTo(this.object.position)>0){this.dispatchEvent(v);r.copy(this.object.position)}};this.domElement.addEventListener("contextmenu",function(a){a.preventDefault()},false);this.domElement.addEventListener("mousedown",function(a){if(e.userRotate){a.preventDefault();
-if(a.button===0||a.button===2){u=t.ROTATE;h.set(a.clientX,a.clientY)}else if(a.button===1){u=t.ZOOM;l.set(a.clientX,a.clientY)}document.addEventListener("mousemove",d,false);document.addEventListener("mouseup",f,false)}},false);this.domElement.addEventListener("mousewheel",function(a){e.userZoom&&(a.wheelDelta>0?e.zoomOut():e.zoomIn())},false)};
+u=t.NONE}}THREE.EventTarget.call(this);this.object=a;this.domElement=b!==void 0?b:document;this.center=new THREE.Vector3;this.userZoom=true;this.userZoomSpeed=1;this.userRotate=true;this.userRotateSpeed=1;this.autoRotate=false;this.autoRotateSpeed=2;this.minPolarAngle=0;this.maxPolarAngle=Math.PI;this.minDistance=0;this.maxDistance=Infinity;var e=this,g=1800,h=new THREE.Vector2,i=new THREE.Vector2,j=new THREE.Vector2,l=new THREE.Vector2,n=new THREE.Vector2,m=new THREE.Vector2,q=0,o=0,p=1,r=new THREE.Vector3,
+t={NONE:-1,ROTATE:0,ZOOM:1},u=t.NONE,v={type:"change"};this.rotateLeft=function(a){a===void 0&&(a=c());o=o-a};this.rotateRight=function(a){a===void 0&&(a=c());o=o+a};this.rotateUp=function(a){a===void 0&&(a=c());q=q-a};this.rotateDown=function(a){a===void 0&&(a=c());q=q+a};this.zoomIn=function(a){a===void 0&&(a=Math.pow(0.95,e.userZoomSpeed));p=p/a};this.zoomOut=function(a){a===void 0&&(a=Math.pow(0.95,e.userZoomSpeed));p=p*a};this.update=function(){var a=this.object.position,b=a.clone().subSelf(this.center),
+d=Math.atan2(b.x,b.z),e=Math.atan2(Math.sqrt(b.x*b.x+b.z*b.z),b.y);this.autoRotate&&this.rotateLeft(c());var d=d+o,e=e+q,e=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,e)),e=Math.max(1E-6,Math.min(Math.PI-1E-6,e)),f=b.length()*p,f=Math.max(this.minDistance,Math.min(this.maxDistance,f));b.x=f*Math.sin(e)*Math.sin(d);b.y=f*Math.cos(e);b.z=f*Math.sin(e)*Math.cos(d);a.copy(this.center).addSelf(b);this.object.lookAt(this.center);q=o=0;p=1;if(r.distanceTo(this.object.position)>0){this.dispatchEvent(v);
+r.copy(this.object.position)}};this.domElement.addEventListener("contextmenu",function(a){a.preventDefault()},false);this.domElement.addEventListener("mousedown",function(a){if(e.userRotate){a.preventDefault();if(a.button===0||a.button===2){u=t.ROTATE;h.set(a.clientX,a.clientY)}else if(a.button===1){u=t.ZOOM;l.set(a.clientX,a.clientY)}document.addEventListener("mousemove",d,false);document.addEventListener("mouseup",f,false)}},false);this.domElement.addEventListener("mousewheel",function(a){e.userZoom&&
+(a.wheelDelta>0?e.zoomOut():e.zoomIn())},false)};
 THREE.CircleGeometry=function(a,b,c,d){THREE.Geometry.call(this);var a=a||50,c=c!==void 0?c:0,d=d!==void 0?d:Math.PI*2,b=b!==void 0?Math.max(3,b):8,f,e=[];f=new THREE.Vector3;var g=new THREE.UV(0.5,0.5);this.vertices.push(f);e.push(g);for(f=0;f<=b;f++){var h=new THREE.Vector3;h.x=a*Math.cos(c+f/b*d);h.y=a*Math.sin(c+f/b*d);this.vertices.push(h);e.push(new THREE.UV((h.x/a+1)/2,-(h.y/a+1)/2+1))}c=new THREE.Vector3(0,0,-1);for(f=1;f<=b;f++){this.faces.push(new THREE.Face3(f,f+1,0,[c,c,c]));this.faceVertexUvs[0].push([e[f],
 e[f+1],g])}this.computeCentroids();this.computeFaceNormals();this.boundingSphere={radius:a}};THREE.CircleGeometry.prototype=Object.create(THREE.Geometry.prototype);
 THREE.CubeGeometry=function(a,b,c,d,f,e,g,h){function i(a,b,c,g,h,i,l,m){var n,o=d||1,p=f||1,q=h/2,r=i/2,t=j.vertices.length;if(a==="x"&&b==="y"||a==="y"&&b==="x")n="z";else if(a==="x"&&b==="z"||a==="z"&&b==="x"){n="y";p=e||1}else if(a==="z"&&b==="y"||a==="y"&&b==="z"){n="x";o=e||1}var u=o+1,v=p+1,Z=h/o,ea=i/p,N=new THREE.Vector3;N[n]=l>0?1:-1;for(h=0;h<v;h++)for(i=0;i<u;i++){var fa=new THREE.Vector3;fa[a]=(i*Z-q)*c;fa[b]=(h*ea-r)*g;fa[n]=l;j.vertices.push(fa)}for(h=0;h<p;h++)for(i=0;i<o;i++){a=new THREE.Face4(i+
 u*h+t,i+u*(h+1)+t,i+1+u*(h+1)+t,i+1+u*h+t);a.normal.copy(N);a.vertexNormals.push(N.clone(),N.clone(),N.clone(),N.clone());a.materialIndex=m;j.faces.push(a);j.faceVertexUvs[0].push([new THREE.UV(i/o,1-h/p),new THREE.UV(i/o,1-(h+1)/p),new THREE.UV((i+1)/o,1-(h+1)/p),new THREE.UV((i+1)/o,1-h/p)])}}THREE.Geometry.call(this);var j=this,l=a/2,n=b/2,m=c/2,q,o,p,r,t,u;if(g!==void 0){if(g instanceof Array)this.materials=g;else{this.materials=[];for(q=0;q<6;q++)this.materials.push(g)}q=0;r=1;o=2;t=3;p=4;u=
 5}else this.materials=[];this.sides={px:true,nx:true,py:true,ny:true,pz:true,nz:true};if(h!=void 0)for(var v in h)this.sides[v]!==void 0&&(this.sides[v]=h[v]);this.sides.px&&i("z","y",-1,-1,c,b,l,q);this.sides.nx&&i("z","y",1,-1,c,b,-l,r);this.sides.py&&i("x","z",1,1,a,c,n,o);this.sides.ny&&i("x","z",1,-1,a,c,-n,t);this.sides.pz&&i("x","y",1,-1,a,b,m,p);this.sides.nz&&i("x","y",-1,-1,a,b,-m,u);this.computeCentroids();this.mergeVertices()};THREE.CubeGeometry.prototype=Object.create(THREE.Geometry.prototype);
 THREE.CylinderGeometry=function(a,b,c,d,f,e){THREE.Geometry.call(this);var a=a!==void 0?a:20,b=b!==void 0?b:20,c=c!==void 0?c:100,g=c/2,d=d||8,f=f||1,h,i,j=[],l=[];for(i=0;i<=f;i++){var n=[],m=[],q=i/f,o=q*(b-a)+a;for(h=0;h<=d;h++){var p=h/d,r=new THREE.Vector3;r.x=o*Math.sin(p*Math.PI*2);r.y=-q*c+g;r.z=o*Math.cos(p*Math.PI*2);this.vertices.push(r);n.push(this.vertices.length-1);m.push(new THREE.UV(p,1-q))}j.push(n);l.push(m)}c=(b-a)/c;for(h=0;h<d;h++){if(a!==0){n=this.vertices[j[0][h]].clone();m=
-this.vertices[j[0][h+1]].clone()}else{n=this.vertices[j[1][h]].clone();m=this.vertices[j[1][h+1]].clone()}n.setY(Math.sqrt(n.x*n.x+n.z*n.z)*c).normalize();m.setY(Math.sqrt(m.x*m.x+m.z*m.z)*c).normalize();for(i=0;i<f;i++){var q=j[i][h],o=j[i+1][h],p=j[i+1][h+1],r=j[i][h+1],t=n.clone(),u=n.clone(),v=m.clone(),s=m.clone(),z=l[i][h].clone(),w=l[i+1][h].clone(),A=l[i+1][h+1].clone(),J=l[i][h+1].clone();this.faces.push(new THREE.Face4(q,o,p,r,[t,u,v,s]));this.faceVertexUvs[0].push([z,w,A,J])}}if(!e&&a>
+this.vertices[j[0][h+1]].clone()}else{n=this.vertices[j[1][h]].clone();m=this.vertices[j[1][h+1]].clone()}n.setY(Math.sqrt(n.x*n.x+n.z*n.z)*c).normalize();m.setY(Math.sqrt(m.x*m.x+m.z*m.z)*c).normalize();for(i=0;i<f;i++){var q=j[i][h],o=j[i+1][h],p=j[i+1][h+1],r=j[i][h+1],t=n.clone(),u=n.clone(),v=m.clone(),s=m.clone(),z=l[i][h].clone(),w=l[i+1][h].clone(),A=l[i+1][h+1].clone(),I=l[i][h+1].clone();this.faces.push(new THREE.Face4(q,o,p,r,[t,u,v,s]));this.faceVertexUvs[0].push([z,w,A,I])}}if(!e&&a>
 0){this.vertices.push(new THREE.Vector3(0,g,0));for(h=0;h<d;h++){q=j[0][h];o=j[0][h+1];p=this.vertices.length-1;t=new THREE.Vector3(0,1,0);u=new THREE.Vector3(0,1,0);v=new THREE.Vector3(0,1,0);z=l[0][h].clone();w=l[0][h+1].clone();A=new THREE.UV(w.u,0);this.faces.push(new THREE.Face3(q,o,p,[t,u,v]));this.faceVertexUvs[0].push([z,w,A])}}if(!e&&b>0){this.vertices.push(new THREE.Vector3(0,-g,0));for(h=0;h<d;h++){q=j[i][h+1];o=j[i][h];p=this.vertices.length-1;t=new THREE.Vector3(0,-1,0);u=new THREE.Vector3(0,
 -1,0);v=new THREE.Vector3(0,-1,0);z=l[i][h+1].clone();w=l[i][h].clone();A=new THREE.UV(w.u,1);this.faces.push(new THREE.Face3(q,o,p,[t,u,v]));this.faceVertexUvs[0].push([z,w,A])}}this.computeCentroids();this.computeFaceNormals()};THREE.CylinderGeometry.prototype=Object.create(THREE.Geometry.prototype);
 THREE.ExtrudeGeometry=function(a,b){if(typeof a!=="undefined"){THREE.Geometry.call(this);a=a instanceof Array?a:[a];this.shapebb=a[a.length-1].getBoundingBox();this.addShapeList(a,b);this.computeCentroids();this.computeFaceNormals()}};THREE.ExtrudeGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ExtrudeGeometry.prototype.addShapeList=function(a,b){for(var c=a.length,d=0;d<c;d++)this.addShape(a[d],b)};
@@ -678,10 +679,10 @@ THREE.ExtrudeGeometry.prototype.addShape=function(a,b){function c(a,b,c){b||cons
 h.copy(b).addSelf(f);i.copy(c).addSelf(g);f=d.dot(g);g=i.subSelf(h).dot(g);if(f===0){console.log("Either infinite or no solutions!");g===0?console.log("Its finite solutions."):console.log("Too bad, no solutions.")}g=g/f;if(g<0){b=Math.atan2(b.y-a.y,b.x-a.x);a=Math.atan2(c.y-a.y,c.x-a.x);b>a&&(a=a+Math.PI*2);c=(b+a)/2;a=-Math.cos(c);c=-Math.sin(c);return new THREE.Vector2(a,c)}return d.multiplyScalar(g).addSelf(h).subSelf(a).clone()}function f(c,d){var e,f;for(N=c.length;--N>=0;){e=N;f=N-1;f<0&&(f=
 c.length-1);for(var g=0,h=m+l*2,g=0;g<h;g++){var i=T*g,j=T*(g+1),n=d+e+i,i=d+f+i,o=d+f+j,j=d+e+j,p=c,q=g,r=h,s=e,v=f,n=n+B,i=i+B,o=o+B,j=j+B;F.faces.push(new THREE.Face4(n,i,o,j,null,null,t));n=u.generateSideWallUV(F,a,p,b,n,i,o,j,q,r,s,v);F.faceVertexUvs[0].push(n)}}}function e(a,b,c){F.vertices.push(new THREE.Vector3(a,b,c))}function g(c,d,e,f){c=c+B;d=d+B;e=e+B;F.faces.push(new THREE.Face3(c,d,e,null,null,r));c=f?u.generateBottomUV(F,a,b,c,d,e):u.generateTopUV(F,a,b,c,d,e);F.faceVertexUvs[0].push(c)}
 var h=b.amount!==void 0?b.amount:100,i=b.bevelThickness!==void 0?b.bevelThickness:6,j=b.bevelSize!==void 0?b.bevelSize:i-2,l=b.bevelSegments!==void 0?b.bevelSegments:3,n=b.bevelEnabled!==void 0?b.bevelEnabled:true,m=b.steps!==void 0?b.steps:1,q=b.extrudePath,o,p=false,r=b.material,t=b.extrudeMaterial,u=b.UVGenerator!==void 0?b.UVGenerator:THREE.ExtrudeGeometry.WorldUVGenerator,v,s,z,w;if(q){o=q.getSpacedPoints(m);p=true;n=false;v=b.frames!==void 0?b.frames:new THREE.TubeGeometry.FrenetFrames(q,m,
-false);s=new THREE.Vector3;z=new THREE.Vector3;w=new THREE.Vector3}if(!n)j=i=l=0;var A,J,D,F=this,B=this.vertices.length,q=a.extractPoints(),E=q.shape,q=q.holes,H=!THREE.Shape.Utils.isClockWise(E);if(H){E=E.reverse();J=0;for(D=q.length;J<D;J++){A=q[J];THREE.Shape.Utils.isClockWise(A)&&(q[J]=A.reverse())}H=false}var Q=THREE.Shape.Utils.triangulateShape(E,q),H=E;J=0;for(D=q.length;J<D;J++){A=q[J];E=E.concat(A)}var L,K,I,M,T=E.length,Z=Q.length,ea=[],N=0,fa=H.length;L=fa-1;for(K=N+1;N<fa;N++,L++,K++){L===
-fa&&(L=0);K===fa&&(K=0);ea[N]=d(H[N],H[L],H[K])}var S=[],ra,wa=ea.concat();J=0;for(D=q.length;J<D;J++){A=q[J];ra=[];N=0;fa=A.length;L=fa-1;for(K=N+1;N<fa;N++,L++,K++){L===fa&&(L=0);K===fa&&(K=0);ra[N]=d(A[N],A[L],A[K])}S.push(ra);wa=wa.concat(ra)}for(L=0;L<l;L++){A=L/l;I=i*(1-A);K=j*Math.sin(A*Math.PI/2);N=0;for(fa=H.length;N<fa;N++){M=c(H[N],ea[N],K);e(M.x,M.y,-I)}J=0;for(D=q.length;J<D;J++){A=q[J];ra=S[J];N=0;for(fa=A.length;N<fa;N++){M=c(A[N],ra[N],K);e(M.x,M.y,-I)}}}K=j;for(N=0;N<T;N++){M=n?c(E[N],
-wa[N],K):E[N];if(p){z.copy(v.normals[0]).multiplyScalar(M.x);s.copy(v.binormals[0]).multiplyScalar(M.y);w.copy(o[0]).addSelf(z).addSelf(s);e(w.x,w.y,w.z)}else e(M.x,M.y,0)}for(A=1;A<=m;A++)for(N=0;N<T;N++){M=n?c(E[N],wa[N],K):E[N];if(p){z.copy(v.normals[A]).multiplyScalar(M.x);s.copy(v.binormals[A]).multiplyScalar(M.y);w.copy(o[A]).addSelf(z).addSelf(s);e(w.x,w.y,w.z)}else e(M.x,M.y,h/m*A)}for(L=l-1;L>=0;L--){A=L/l;I=i*(1-A);K=j*Math.sin(A*Math.PI/2);N=0;for(fa=H.length;N<fa;N++){M=c(H[N],ea[N],K);
-e(M.x,M.y,h+I)}J=0;for(D=q.length;J<D;J++){A=q[J];ra=S[J];N=0;for(fa=A.length;N<fa;N++){M=c(A[N],ra[N],K);p?e(M.x,M.y+o[m-1].y,o[m-1].x+I):e(M.x,M.y,h+I)}}}if(n){i=T*0;for(N=0;N<Z;N++){h=Q[N];g(h[2]+i,h[1]+i,h[0]+i,true)}i=T*(m+l*2);for(N=0;N<Z;N++){h=Q[N];g(h[0]+i,h[1]+i,h[2]+i,false)}}else{for(N=0;N<Z;N++){h=Q[N];g(h[2],h[1],h[0],true)}for(N=0;N<Z;N++){h=Q[N];g(h[0]+T*m,h[1]+T*m,h[2]+T*m,false)}}h=0;f(H,h);h=h+H.length;J=0;for(D=q.length;J<D;J++){A=q[J];f(A,h);h=h+A.length}};
+false);s=new THREE.Vector3;z=new THREE.Vector3;w=new THREE.Vector3}if(!n)j=i=l=0;var A,I,D,F=this,B=this.vertices.length,q=a.extractPoints(),E=q.shape,q=q.holes,H=!THREE.Shape.Utils.isClockWise(E);if(H){E=E.reverse();I=0;for(D=q.length;I<D;I++){A=q[I];THREE.Shape.Utils.isClockWise(A)&&(q[I]=A.reverse())}H=false}var Q=THREE.Shape.Utils.triangulateShape(E,q),H=E;I=0;for(D=q.length;I<D;I++){A=q[I];E=E.concat(A)}var L,K,J,M,T=E.length,Z=Q.length,ea=[],N=0,fa=H.length;L=fa-1;for(K=N+1;N<fa;N++,L++,K++){L===
+fa&&(L=0);K===fa&&(K=0);ea[N]=d(H[N],H[L],H[K])}var S=[],ra,wa=ea.concat();I=0;for(D=q.length;I<D;I++){A=q[I];ra=[];N=0;fa=A.length;L=fa-1;for(K=N+1;N<fa;N++,L++,K++){L===fa&&(L=0);K===fa&&(K=0);ra[N]=d(A[N],A[L],A[K])}S.push(ra);wa=wa.concat(ra)}for(L=0;L<l;L++){A=L/l;J=i*(1-A);K=j*Math.sin(A*Math.PI/2);N=0;for(fa=H.length;N<fa;N++){M=c(H[N],ea[N],K);e(M.x,M.y,-J)}I=0;for(D=q.length;I<D;I++){A=q[I];ra=S[I];N=0;for(fa=A.length;N<fa;N++){M=c(A[N],ra[N],K);e(M.x,M.y,-J)}}}K=j;for(N=0;N<T;N++){M=n?c(E[N],
+wa[N],K):E[N];if(p){z.copy(v.normals[0]).multiplyScalar(M.x);s.copy(v.binormals[0]).multiplyScalar(M.y);w.copy(o[0]).addSelf(z).addSelf(s);e(w.x,w.y,w.z)}else e(M.x,M.y,0)}for(A=1;A<=m;A++)for(N=0;N<T;N++){M=n?c(E[N],wa[N],K):E[N];if(p){z.copy(v.normals[A]).multiplyScalar(M.x);s.copy(v.binormals[A]).multiplyScalar(M.y);w.copy(o[A]).addSelf(z).addSelf(s);e(w.x,w.y,w.z)}else e(M.x,M.y,h/m*A)}for(L=l-1;L>=0;L--){A=L/l;J=i*(1-A);K=j*Math.sin(A*Math.PI/2);N=0;for(fa=H.length;N<fa;N++){M=c(H[N],ea[N],K);
+e(M.x,M.y,h+J)}I=0;for(D=q.length;I<D;I++){A=q[I];ra=S[I];N=0;for(fa=A.length;N<fa;N++){M=c(A[N],ra[N],K);p?e(M.x,M.y+o[m-1].y,o[m-1].x+J):e(M.x,M.y,h+J)}}}if(n){i=T*0;for(N=0;N<Z;N++){h=Q[N];g(h[2]+i,h[1]+i,h[0]+i,true)}i=T*(m+l*2);for(N=0;N<Z;N++){h=Q[N];g(h[0]+i,h[1]+i,h[2]+i,false)}}else{for(N=0;N<Z;N++){h=Q[N];g(h[2],h[1],h[0],true)}for(N=0;N<Z;N++){h=Q[N];g(h[0]+T*m,h[1]+T*m,h[2]+T*m,false)}}h=0;f(H,h);h=h+H.length;I=0;for(D=q.length;I<D;I++){A=q[I];f(A,h);h=h+A.length}};
 THREE.ExtrudeGeometry.WorldUVGenerator={generateTopUV:function(a,b,c,d,f,e){b=a.vertices[f].x;f=a.vertices[f].y;c=a.vertices[e].x;e=a.vertices[e].y;return[new THREE.UV(a.vertices[d].x,a.vertices[d].y),new THREE.UV(b,f),new THREE.UV(c,e)]},generateBottomUV:function(a,b,c,d,f,e){return this.generateTopUV(a,b,c,d,f,e)},generateSideWallUV:function(a,b,c,d,f,e,g,h){var b=a.vertices[f].x,c=a.vertices[f].y,f=a.vertices[f].z,d=a.vertices[e].x,i=a.vertices[e].y,e=a.vertices[e].z,j=a.vertices[g].x,l=a.vertices[g].y,
 g=a.vertices[g].z,n=a.vertices[h].x,m=a.vertices[h].y,a=a.vertices[h].z;return Math.abs(c-i)<0.01?[new THREE.UV(b,1-f),new THREE.UV(d,1-e),new THREE.UV(j,1-g),new THREE.UV(n,1-a)]:[new THREE.UV(c,1-f),new THREE.UV(i,1-e),new THREE.UV(l,1-g),new THREE.UV(m,1-a)]}};THREE.ExtrudeGeometry.__v1=new THREE.Vector2;THREE.ExtrudeGeometry.__v2=new THREE.Vector2;THREE.ExtrudeGeometry.__v3=new THREE.Vector2;THREE.ExtrudeGeometry.__v4=new THREE.Vector2;THREE.ExtrudeGeometry.__v5=new THREE.Vector2;
 THREE.ExtrudeGeometry.__v6=new THREE.Vector2;THREE.ShapeGeometry=function(a,b){THREE.Geometry.call(this);a instanceof Array===false&&(a=[a]);this.shapebb=a[a.length-1].getBoundingBox();this.addShapeList(a,b);this.computeCentroids();this.computeFaceNormals()};THREE.ShapeGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ShapeGeometry.prototype.addShapeList=function(a,b){for(var c=0,d=a.length;c<d;c++)this.addShape(a[c],b);return this};
@@ -731,12 +732,12 @@ THREE.SubdivisionModifier=function(a){this.subdivisions=a===void 0?1:a;this.useO
 var G={computeEdgeFaces:function(a){function b(a,b){g[a]===void 0&&(g[a]=[]);g[a].push(b)}var c,d,f,e,g={};c=0;for(d=a.faces.length;c<d;c++){f=a.faces[c];if(f instanceof THREE.Face3){e=orderedKey(f.a,f.b);b(e,c);e=orderedKey(f.b,f.c);b(e,c);e=orderedKey(f.c,f.a);b(e,c)}else if(f instanceof THREE.Face4){e=orderedKey(f.a,f.b);b(e,c);e=orderedKey(f.b,f.c);b(e,c);e=orderedKey(f.c,f.d);b(e,c);e=orderedKey(f.d,f.a);b(e,c)}}return g}};
 THREE.SubdivisionModifier.prototype.smooth=function(a){function b(){l.debug&&(console&&console.assert)&&console.assert.apply(console,arguments)}function c(){l.debug&&console.log.apply(console,arguments)}function d(){console&&console.log.apply(console,arguments)}function f(a,b,d,f,g,h,m){var n=new THREE.Face4(a,b,d,f,null,g.color,g.materialIndex);if(l.useOldVertexColors){n.vertexColors=[];for(var o,p,q,r=0;r<4;r++){q=h[r];o=new THREE.Color;o.setRGB(0,0,0);for(var s=0;s<q.length;s++){p=g.vertexColors[q[s]-
 1];o.r=o.r+p.r;o.g=o.g+p.g;o.b=o.b+p.b}o.r=o.r/q.length;o.g=o.g/q.length;o.b=o.b/q.length;n.vertexColors[r]=o}}i.push(n);if(l.supportUVs){g=[e(a,""),e(b,m),e(d,m),e(f,m)];g[0]?g[1]?g[2]?g[3]?j.push(g):c("d :( ",f+":"+m):c("c :( ",d+":"+m):c("b :( ",b+":"+m):c("a :( ",a+":"+m)}}function e(a,b){var e=a+":"+b,f=t[e];if(!f){a>=q&&a<q+m.length?c("face pt"):c("edge pt");d("warning, UV not found for",e);return null}return f}function g(a,b,c){var e=a+":"+b;e in t?d("dup vertexNo",a,"oldFaceNo",b,"value",
-c,"key",e,t[e]):t[e]=c}var h=[],i=[],j=[],l=this,n=a.vertices,m=a.faces,q=n.length,h=n.concat(),o=[],p={},r={},t={},u,v,s,z,w,A=a.faceVertexUvs[0],J;c("originalFaces, uvs, originalVerticesLength",m.length,A.length,q);if(l.supportUVs){u=0;for(v=A.length;u<v;u++){s=0;for(z=A[u].length;s<z;s++){J=m[u]["abcd".charAt(s)];g(J,u,A[u][s])}}}if(A.length==0)l.supportUVs=false;u=0;for(var D in t)u++;if(!u){l.supportUVs=false;c("no uvs")}u=0;for(v=m.length;u<v;u++){w=m[u];o.push(w.centroid);h.push(w.centroid);
-if(l.supportUVs){z=new THREE.UV;if(w instanceof THREE.Face3){z.u=e(w.a,u).u+e(w.b,u).u+e(w.c,u).u;z.v=e(w.a,u).v+e(w.b,u).v+e(w.c,u).v;z.u=z.u/3;z.v=z.v/3}else if(w instanceof THREE.Face4){z.u=e(w.a,u).u+e(w.b,u).u+e(w.c,u).u+e(w.d,u).u;z.v=e(w.a,u).v+e(w.b,u).v+e(w.c,u).v+e(w.d,u).v;z.u=z.u/4;z.v=z.v/4}g(q+u,"",z)}}D=G.computeEdgeFaces(a);var F,B;v=0;var E,H,A={};J={};for(u in D){F=D[u];E=u.split("_");H=E[0];E=E[1];s=H;w=[H,E];A[s]===void 0&&(A[s]=[]);A[s].push(w);s=E;w=[H,E];A[s]===void 0&&(A[s]=
-[]);A[s].push(w);s=0;for(z=F.length;s<z;s++){w=F[s];B=H;var Q=w,L=u;J[B]===void 0&&(J[B]={});J[B][Q]=L;B=E;Q=u;J[B]===void 0&&(J[B]={});J[B][w]=Q}F.length<2&&(r[u]=true)}for(u in D){F=D[u];w=F[0];B=F[1];E=u.split("_");H=E[0];E=E[1];z=new THREE.Vector3;b(F.length>0,"an edge without faces?!");if(F.length==1){z.addSelf(n[H]);z.addSelf(n[E]);z.multiplyScalar(0.5)}else{z.addSelf(o[w]);z.addSelf(o[B]);z.addSelf(n[H]);z.addSelf(n[E]);z.multiplyScalar(0.25)}p[u]=q+m.length+v;h.push(z);v++;if(l.supportUVs){z=
-new THREE.UV;z.u=e(H,w).u+e(E,w).u;z.v=e(H,w).v+e(E,w).v;z.u=z.u/2;z.v=z.v/2;g(p[u],w,z);if(F.length>=2){b(F.length==2,"did we plan for more than 2 edges?");z=new THREE.UV;z.u=e(H,B).u+e(E,B).u;z.v=e(H,B).v+e(E,B).v;z.u=z.u/2;z.v=z.v/2;g(p[u],B,z)}}}c("-- Step 2 done");console.log("facePoints",o,"edgePoints",p);console.log("edgeFaceMap",D,"vertexEdgeMap",A);var K,I;z=["123","12","2","23"];B=["123","23","3","31"];var Q=["123","31","1","12"],L=["1234","12","2","23"],M=["1234","23","3","34"],T=["1234",
-"34","4","41"],Z=["1234","41","1","12"];u=0;for(v=o.length;u<v;u++){w=m[u];F=q+u;if(w instanceof THREE.Face3){H=orderedKey(w.a,w.b);E=orderedKey(w.b,w.c);K=orderedKey(w.c,w.a);f(F,p[H],w.b,p[E],w,z,u);f(F,p[E],w.c,p[K],w,B,u);f(F,p[K],w.a,p[H],w,Q,u)}else if(w instanceof THREE.Face4){H=orderedKey(w.a,w.b);E=orderedKey(w.b,w.c);K=orderedKey(w.c,w.d);I=orderedKey(w.d,w.a);f(F,p[H],w.b,p[E],w,L,u);f(F,p[E],w.c,p[K],w,M,u);f(F,p[K],w.d,p[I],w,T,u);f(F,p[I],w.a,p[H],w,Z,u)}else c("face should be a face!",
-w)}p=new THREE.Vector3;w=new THREE.Vector3;u=0;for(v=n.length;u<v;u++)if(A[u]!==void 0){p.set(0,0,0);w.set(0,0,0);E=new THREE.Vector3(0,0,0);F=0;for(s in J[u]){p.addSelf(o[s]);F++}B=0;H=A[u].length;z=F!=H;for(s=0;s<H;s++)r[orderedKey(A[u][s][0],A[u][s][1])]&&B++;p.divideScalar(F);B=0;if(z){for(s=0;s<H;s++){F=A[u][s];if(Q=D[orderedKey(F[0],F[1])].length==1){F=n[F[0]].clone().addSelf(n[F[1]]).divideScalar(2);w.addSelf(F);B++}}w.divideScalar(4);b(B==2,"should have only 2 boundary edges")}else{for(s=
+c,"key",e,t[e]):t[e]=c}var h=[],i=[],j=[],l=this,n=a.vertices,m=a.faces,q=n.length,h=n.concat(),o=[],p={},r={},t={},u,v,s,z,w,A=a.faceVertexUvs[0],I;c("originalFaces, uvs, originalVerticesLength",m.length,A.length,q);if(l.supportUVs){u=0;for(v=A.length;u<v;u++){s=0;for(z=A[u].length;s<z;s++){I=m[u]["abcd".charAt(s)];g(I,u,A[u][s])}}}if(A.length==0)l.supportUVs=false;u=0;for(var D in t)u++;if(!u){l.supportUVs=false;c("no uvs")}u=0;for(v=m.length;u<v;u++){w=m[u];o.push(w.centroid);h.push(w.centroid);
+if(l.supportUVs){z=new THREE.UV;if(w instanceof THREE.Face3){z.u=e(w.a,u).u+e(w.b,u).u+e(w.c,u).u;z.v=e(w.a,u).v+e(w.b,u).v+e(w.c,u).v;z.u=z.u/3;z.v=z.v/3}else if(w instanceof THREE.Face4){z.u=e(w.a,u).u+e(w.b,u).u+e(w.c,u).u+e(w.d,u).u;z.v=e(w.a,u).v+e(w.b,u).v+e(w.c,u).v+e(w.d,u).v;z.u=z.u/4;z.v=z.v/4}g(q+u,"",z)}}D=G.computeEdgeFaces(a);var F,B;v=0;var E,H,A={};I={};for(u in D){F=D[u];E=u.split("_");H=E[0];E=E[1];s=H;w=[H,E];A[s]===void 0&&(A[s]=[]);A[s].push(w);s=E;w=[H,E];A[s]===void 0&&(A[s]=
+[]);A[s].push(w);s=0;for(z=F.length;s<z;s++){w=F[s];B=H;var Q=w,L=u;I[B]===void 0&&(I[B]={});I[B][Q]=L;B=E;Q=u;I[B]===void 0&&(I[B]={});I[B][w]=Q}F.length<2&&(r[u]=true)}for(u in D){F=D[u];w=F[0];B=F[1];E=u.split("_");H=E[0];E=E[1];z=new THREE.Vector3;b(F.length>0,"an edge without faces?!");if(F.length==1){z.addSelf(n[H]);z.addSelf(n[E]);z.multiplyScalar(0.5)}else{z.addSelf(o[w]);z.addSelf(o[B]);z.addSelf(n[H]);z.addSelf(n[E]);z.multiplyScalar(0.25)}p[u]=q+m.length+v;h.push(z);v++;if(l.supportUVs){z=
+new THREE.UV;z.u=e(H,w).u+e(E,w).u;z.v=e(H,w).v+e(E,w).v;z.u=z.u/2;z.v=z.v/2;g(p[u],w,z);if(F.length>=2){b(F.length==2,"did we plan for more than 2 edges?");z=new THREE.UV;z.u=e(H,B).u+e(E,B).u;z.v=e(H,B).v+e(E,B).v;z.u=z.u/2;z.v=z.v/2;g(p[u],B,z)}}}c("-- Step 2 done");console.log("facePoints",o,"edgePoints",p);console.log("edgeFaceMap",D,"vertexEdgeMap",A);var K,J;z=["123","12","2","23"];B=["123","23","3","31"];var Q=["123","31","1","12"],L=["1234","12","2","23"],M=["1234","23","3","34"],T=["1234",
+"34","4","41"],Z=["1234","41","1","12"];u=0;for(v=o.length;u<v;u++){w=m[u];F=q+u;if(w instanceof THREE.Face3){H=orderedKey(w.a,w.b);E=orderedKey(w.b,w.c);K=orderedKey(w.c,w.a);f(F,p[H],w.b,p[E],w,z,u);f(F,p[E],w.c,p[K],w,B,u);f(F,p[K],w.a,p[H],w,Q,u)}else if(w instanceof THREE.Face4){H=orderedKey(w.a,w.b);E=orderedKey(w.b,w.c);K=orderedKey(w.c,w.d);J=orderedKey(w.d,w.a);f(F,p[H],w.b,p[E],w,L,u);f(F,p[E],w.c,p[K],w,M,u);f(F,p[K],w.d,p[J],w,T,u);f(F,p[J],w.a,p[H],w,Z,u)}else c("face should be a face!",
+w)}p=new THREE.Vector3;w=new THREE.Vector3;u=0;for(v=n.length;u<v;u++)if(A[u]!==void 0){p.set(0,0,0);w.set(0,0,0);E=new THREE.Vector3(0,0,0);F=0;for(s in I[u]){p.addSelf(o[s]);F++}B=0;H=A[u].length;z=F!=H;for(s=0;s<H;s++)r[orderedKey(A[u][s][0],A[u][s][1])]&&B++;p.divideScalar(F);B=0;if(z){for(s=0;s<H;s++){F=A[u][s];if(Q=D[orderedKey(F[0],F[1])].length==1){F=n[F[0]].clone().addSelf(n[F[1]]).divideScalar(2);w.addSelf(F);B++}}w.divideScalar(4);b(B==2,"should have only 2 boundary edges")}else{for(s=
 0;s<H;s++){F=A[u][s];F=n[F[0]].clone().addSelf(n[F[1]]).divideScalar(2);w.addSelf(F)}w.divideScalar(H)}E.addSelf(n[u]);if(z){E.divideScalar(2);E.addSelf(w)}else{E.multiplyScalar(H-3);E.addSelf(p);E.addSelf(w.multiplyScalar(2));E.divideScalar(H)}h[u]=E}a.vertices=h;a.faces=i;a.faceVertexUvs[0]=j;delete a.__tmpVertices;a.computeCentroids();a.computeFaceNormals();a.computeVertexNormals()};THREE.ImmediateRenderObject=function(){THREE.Object3D.call(this);this.render=function(){}};
 THREE.ImmediateRenderObject.prototype=Object.create(THREE.Object3D.prototype);THREE.LensFlare=function(a,b,c,d,f){THREE.Object3D.call(this);this.lensFlares=[];this.positionScreen=new THREE.Vector3;this.customUpdateCallback=void 0;a!==void 0&&this.add(a,b,c,d,f)};THREE.LensFlare.prototype=Object.create(THREE.Object3D.prototype);
 THREE.LensFlare.prototype.add=function(a,b,c,d,f,e){b===void 0&&(b=-1);c===void 0&&(c=0);e===void 0&&(e=1);f===void 0&&(f=new THREE.Color(16777215));if(d===void 0)d=THREE.NormalBlending;c=Math.min(c,Math.max(0,c));this.lensFlares.push({texture:a,size:b,distance:c,x:0,y:0,z:0,scale:1,rotation:1,opacity:e,color:f,blending:d})};
@@ -753,10 +754,10 @@ THREE.LensFlarePlugin=function(){function a(a){var c=b.createProgram(),d=b.creat
 0;d[o++]=1;d[o++]=1;d[o++]=1;d[o++]=1;d[o++]=-1;d[o++]=1;d[o++]=0;d[o++]=1;o=0;f[o++]=0;f[o++]=1;f[o++]=2;f[o++]=0;f[o++]=2;f[o++]=3;e=b.createBuffer();g=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,e);b.bufferData(b.ARRAY_BUFFER,d,b.STATIC_DRAW);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,g);b.bufferData(b.ELEMENT_ARRAY_BUFFER,f,b.STATIC_DRAW);h=b.createTexture();i=b.createTexture();b.bindTexture(b.TEXTURE_2D,h);b.texImage2D(b.TEXTURE_2D,0,b.RGB,16,16,0,b.RGB,b.UNSIGNED_BYTE,null);b.texParameteri(b.TEXTURE_2D,
 b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.NEAREST);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.NEAREST);b.bindTexture(b.TEXTURE_2D,i);b.texImage2D(b.TEXTURE_2D,0,b.RGBA,16,16,0,b.RGBA,b.UNSIGNED_BYTE,null);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.NEAREST);
 b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.NEAREST);if(b.getParameter(b.MAX_VERTEX_TEXTURE_IMAGE_UNITS)<=0){j=false;l=a(THREE.ShaderFlares.lensFlare)}else{j=true;l=a(THREE.ShaderFlares.lensFlareVertexTexture)}n={};m={};n.vertex=b.getAttribLocation(l,"position");n.uv=b.getAttribLocation(l,"uv");m.renderType=b.getUniformLocation(l,"renderType");m.map=b.getUniformLocation(l,"map");m.occlusionMap=b.getUniformLocation(l,"occlusionMap");m.opacity=b.getUniformLocation(l,"opacity");m.color=b.getUniformLocation(l,
-"color");m.scale=b.getUniformLocation(l,"scale");m.rotation=b.getUniformLocation(l,"rotation");m.screenPosition=b.getUniformLocation(l,"screenPosition");q=false};this.render=function(a,d,f,t){var a=a.__webglFlares,u=a.length;if(u){var v=new THREE.Vector3,s=t/f,z=f*0.5,w=t*0.5,A=16/t,J=new THREE.Vector2(A*s,A),D=new THREE.Vector3(1,1,0),F=new THREE.Vector2(1,1),B=m,A=n;b.useProgram(l);if(!q){b.enableVertexAttribArray(n.vertex);b.enableVertexAttribArray(n.uv);q=true}b.uniform1i(B.occlusionMap,0);b.uniform1i(B.map,
-1);b.bindBuffer(b.ARRAY_BUFFER,e);b.vertexAttribPointer(A.vertex,2,b.FLOAT,false,16,0);b.vertexAttribPointer(A.uv,2,b.FLOAT,false,16,8);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,g);b.disable(b.CULL_FACE);b.depthMask(false);var E,H,Q,L,K;for(E=0;E<u;E++){A=16/t;J.set(A*s,A);L=a[E];v.set(L.matrixWorld.elements[12],L.matrixWorld.elements[13],L.matrixWorld.elements[14]);d.matrixWorldInverse.multiplyVector3(v);d.projectionMatrix.multiplyVector3(v);D.copy(v);F.x=D.x*z+z;F.y=D.y*w+w;if(j||F.x>0&&F.x<f&&F.y>0&&
-F.y<t){b.activeTexture(b.TEXTURE1);b.bindTexture(b.TEXTURE_2D,h);b.copyTexImage2D(b.TEXTURE_2D,0,b.RGB,F.x-8,F.y-8,16,16,0);b.uniform1i(B.renderType,0);b.uniform2f(B.scale,J.x,J.y);b.uniform3f(B.screenPosition,D.x,D.y,D.z);b.disable(b.BLEND);b.enable(b.DEPTH_TEST);b.drawElements(b.TRIANGLES,6,b.UNSIGNED_SHORT,0);b.activeTexture(b.TEXTURE0);b.bindTexture(b.TEXTURE_2D,i);b.copyTexImage2D(b.TEXTURE_2D,0,b.RGBA,F.x-8,F.y-8,16,16,0);b.uniform1i(B.renderType,1);b.disable(b.DEPTH_TEST);b.activeTexture(b.TEXTURE1);
-b.bindTexture(b.TEXTURE_2D,h);b.drawElements(b.TRIANGLES,6,b.UNSIGNED_SHORT,0);L.positionScreen.copy(D);L.customUpdateCallback?L.customUpdateCallback(L):L.updateLensFlares();b.uniform1i(B.renderType,2);b.enable(b.BLEND);H=0;for(Q=L.lensFlares.length;H<Q;H++){K=L.lensFlares[H];if(K.opacity>0.001&&K.scale>0.001){D.x=K.x;D.y=K.y;D.z=K.z;A=K.size*K.scale/t;J.x=A*s;J.y=A;b.uniform3f(B.screenPosition,D.x,D.y,D.z);b.uniform2f(B.scale,J.x,J.y);b.uniform1f(B.rotation,K.rotation);b.uniform1f(B.opacity,K.opacity);
+"color");m.scale=b.getUniformLocation(l,"scale");m.rotation=b.getUniformLocation(l,"rotation");m.screenPosition=b.getUniformLocation(l,"screenPosition");q=false};this.render=function(a,d,f,t){var a=a.__webglFlares,u=a.length;if(u){var v=new THREE.Vector3,s=t/f,z=f*0.5,w=t*0.5,A=16/t,I=new THREE.Vector2(A*s,A),D=new THREE.Vector3(1,1,0),F=new THREE.Vector2(1,1),B=m,A=n;b.useProgram(l);if(!q){b.enableVertexAttribArray(n.vertex);b.enableVertexAttribArray(n.uv);q=true}b.uniform1i(B.occlusionMap,0);b.uniform1i(B.map,
+1);b.bindBuffer(b.ARRAY_BUFFER,e);b.vertexAttribPointer(A.vertex,2,b.FLOAT,false,16,0);b.vertexAttribPointer(A.uv,2,b.FLOAT,false,16,8);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,g);b.disable(b.CULL_FACE);b.depthMask(false);var E,H,Q,L,K;for(E=0;E<u;E++){A=16/t;I.set(A*s,A);L=a[E];v.set(L.matrixWorld.elements[12],L.matrixWorld.elements[13],L.matrixWorld.elements[14]);d.matrixWorldInverse.multiplyVector3(v);d.projectionMatrix.multiplyVector3(v);D.copy(v);F.x=D.x*z+z;F.y=D.y*w+w;if(j||F.x>0&&F.x<f&&F.y>0&&
+F.y<t){b.activeTexture(b.TEXTURE1);b.bindTexture(b.TEXTURE_2D,h);b.copyTexImage2D(b.TEXTURE_2D,0,b.RGB,F.x-8,F.y-8,16,16,0);b.uniform1i(B.renderType,0);b.uniform2f(B.scale,I.x,I.y);b.uniform3f(B.screenPosition,D.x,D.y,D.z);b.disable(b.BLEND);b.enable(b.DEPTH_TEST);b.drawElements(b.TRIANGLES,6,b.UNSIGNED_SHORT,0);b.activeTexture(b.TEXTURE0);b.bindTexture(b.TEXTURE_2D,i);b.copyTexImage2D(b.TEXTURE_2D,0,b.RGBA,F.x-8,F.y-8,16,16,0);b.uniform1i(B.renderType,1);b.disable(b.DEPTH_TEST);b.activeTexture(b.TEXTURE1);
+b.bindTexture(b.TEXTURE_2D,h);b.drawElements(b.TRIANGLES,6,b.UNSIGNED_SHORT,0);L.positionScreen.copy(D);L.customUpdateCallback?L.customUpdateCallback(L):L.updateLensFlares();b.uniform1i(B.renderType,2);b.enable(b.BLEND);H=0;for(Q=L.lensFlares.length;H<Q;H++){K=L.lensFlares[H];if(K.opacity>0.001&&K.scale>0.001){D.x=K.x;D.y=K.y;D.z=K.z;A=K.size*K.scale/t;I.x=A*s;I.y=A;b.uniform3f(B.screenPosition,D.x,D.y,D.z);b.uniform2f(B.scale,I.x,I.y);b.uniform1f(B.rotation,K.rotation);b.uniform1f(B.opacity,K.opacity);
 b.uniform3f(B.color,K.color.r,K.color.g,K.color.b);c.setBlending(K.blending,K.blendEquation,K.blendSrc,K.blendDst);c.setTexture(K.texture,1);b.drawElements(b.TRIANGLES,6,b.UNSIGNED_SHORT,0)}}}}b.enable(b.CULL_FACE);b.enable(b.DEPTH_TEST);b.depthMask(true)}}};
 THREE.ShadowMapPlugin=function(){var a,b,c,d,f,e,g=new THREE.Frustum,h=new THREE.Matrix4,i=new THREE.Vector3,j=new THREE.Vector3;this.init=function(g){a=g.context;b=g;var g=THREE.ShaderLib.depthRGBA,h=THREE.UniformsUtils.clone(g.uniforms);c=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader,vertexShader:g.vertexShader,uniforms:h});d=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader,vertexShader:g.vertexShader,uniforms:h,morphTargets:true});f=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader,
 vertexShader:g.vertexShader,uniforms:h,skinning:true});e=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader,vertexShader:g.vertexShader,uniforms:h,morphTargets:true,skinning:true});c._shadowPass=true;d._shadowPass=true;f._shadowPass=true;e._shadowPass=true};this.render=function(a,c){b.shadowMapEnabled&&b.shadowMapAutoUpdate&&this.update(a,c)};this.update=function(l,n){var m,q,o,p,r,t,u,v,s,z=[];p=0;a.clearColor(1,1,1,1);a.disable(a.BLEND);a.enable(a.CULL_FACE);a.frontFace(a.CCW);b.shadowMapCullFrontFaces?