// ThreeCanvas.js - http://github.com/mrdoob/three.js 'use strict';var THREE=THREE||{REVISION:"50dev"};self.console||(self.console={info:function(){},log:function(){},debug:function(){},warn:function(){},error:function(){}});self.Int32Array||(self.Int32Array=Array,self.Float32Array=Array); (function(){for(var a=0,b=["ms","moz","webkit","o"],c=0;c>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},lerpSelf:function(a,b){this.r=this.r+(a.r-this.r)*b;this.g=this.g+(a.g-this.g)*b;this.b=this.b+(a.b-this.b)*b;return this},getHex:function(){return Math.floor(this.r*255)<<16^Math.floor(this.g*255)<<8^Math.floor(this.b*255)},getContextStyle:function(){return"rgb("+Math.floor(this.r*255)+","+Math.floor(this.g*255)+","+Math.floor(this.b*255)+")"},clone:function(){return(new THREE.Color).setRGB(this.r,this.g,this.b)}}; THREE.Vector2=function(a,b){this.x=a||0;this.y=b||0}; THREE.Vector2.prototype={constructor:THREE.Vector2,set:function(a,b){this.x=a;this.y=b;return this},copy:function(a){this.x=a.x;this.y=a.y;return this},add:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addSelf:function(a){this.x=this.x+a.x;this.y=this.y+a.y;return this},sub:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},subSelf:function(a){this.x=this.x-a.x;this.y=this.y-a.y;return this},multiplyScalar:function(a){this.x=this.x*a;this.y=this.y*a;return this},divideScalar:function(a){if(a){this.x= this.x/a;this.y=this.y/a}else this.set(0,0);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.lengthSq())},normalize:function(){return this.divideScalar(this.length())},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x,a=this.y-a.y;return b*b+a*a},setLength:function(a){return this.normalize().multiplyScalar(a)}, lerpSelf:function(a,b){this.x=this.x+(a.x-this.x)*b;this.y=this.y+(a.y-this.y)*b;return this},equals:function(a){return a.x===this.x&&a.y===this.y},isZero:function(){return this.lengthSq()<1.0E-4},clone:function(){return new THREE.Vector2(this.x,this.y)}};THREE.Vector3=function(a,b,c){this.x=a||0;this.y=b||0;this.z=c||0}; THREE.Vector3.prototype={constructor:THREE.Vector3,set:function(a,b,c){this.x=a;this.y=b;this.z=c;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},add:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},addSelf:function(a){this.x=this.x+a.x;this.y=this.y+a.y;this.z=this.z+a.z;return this},addScalar:function(a){this.x=this.x+a;this.y=this.y+ a;this.z=this.z+a;return this},sub:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;return this},subSelf:function(a){this.x=this.x-a.x;this.y=this.y-a.y;this.z=this.z-a.z;return this},multiply:function(a,b){this.x=a.x*b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},multiplySelf:function(a){this.x=this.x*a.x;this.y=this.y*a.y;this.z=this.z*a.z;return this},multiplyScalar:function(a){this.x=this.x*a;this.y=this.y*a;this.z=this.z*a;return this},divideSelf:function(a){this.x=this.x/a.x;this.y= this.y/a.y;this.z=this.z/a.z;return this},divideScalar:function(a){if(a){this.x=this.x/a;this.y=this.y/a;this.z=this.z/a}else this.z=this.y=this.x=0;return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.lengthSq())},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length())}, setLength:function(a){return this.normalize().multiplyScalar(a)},lerpSelf:function(a,b){this.x=this.x+(a.x-this.x)*b;this.y=this.y+(a.y-this.y)*b;this.z=this.z+(a.z-this.z)*b;return this},cross:function(a,b){this.x=a.y*b.z-a.z*b.y;this.y=a.z*b.x-a.x*b.z;this.z=a.x*b.y-a.y*b.x;return this},crossSelf:function(a){var b=this.x,c=this.y,d=this.z;this.x=c*a.z-d*a.y;this.y=d*a.x-b*a.z;this.z=b*a.y-c*a.x;return this},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){return(new THREE.Vector3).sub(this, a).lengthSq()},getPositionFromMatrix:function(a){this.x=a.elements[12];this.y=a.elements[13];this.z=a.elements[14];return this},setEulerFromRotationMatrix:function(a,b){function c(a){return Math.min(Math.max(a,-1),1)}var d=a.elements,e=d[0],f=d[4],g=d[8],i=d[1],j=d[5],l=d[9],h=d[2],k=d[6],d=d[10];switch(b||"XYZ"){case "YXZ":this.x=Math.asin(-c(l));if(Math.abs(l)<0.99999){this.y=Math.atan2(g,d);this.z=Math.atan2(i,j)}else{this.y=Math.atan2(-h,e);this.z=0}break;case "ZXY":this.x=Math.asin(c(k));if(Math.abs(k)< 0.99999){this.y=Math.atan2(-h,d);this.z=Math.atan2(-f,j)}else{this.y=0;this.z=Math.atan2(g,e)}break;case "ZYX":this.y=Math.asin(-c(h));if(Math.abs(h)<0.99999){this.x=Math.atan2(k,d);this.z=Math.atan2(i,e)}else{this.x=0;this.z=Math.atan2(-f,j)}break;case "YZX":this.z=Math.asin(c(i));if(Math.abs(i)<0.99999){this.x=Math.atan2(-l,j);this.y=Math.atan2(-h,e)}else{this.x=0;this.y=Math.atan2(h,d)}break;case "XZY":this.z=Math.asin(-c(f));if(Math.abs(f)<0.99999){this.x=Math.atan2(k,j);this.y=Math.atan2(g,e)}else{this.x= Math.atan2(-g,d);this.y=0}break;default:this.y=Math.asin(c(g));if(Math.abs(g)<0.99999){this.x=Math.atan2(-l,d);this.z=Math.atan2(-f,e)}else{this.x=Math.atan2(i,j);this.z=0}}return this},setEulerFromQuaternion:function(a,b){function c(a){return Math.min(Math.max(a,-1),1)}var d=a.x*a.x,e=a.y*a.y,f=a.z*a.z,g=a.w*a.w;switch(b){case "YXZ":this.x=Math.asin(c(2*(a.x*a.w-a.y*a.z)));this.y=Math.atan2(2*(a.x*a.z+a.y*a.w),g-d-e+f);this.z=Math.atan2(2*(a.x*a.y+a.z*a.w),g-d+e-f);break;case "ZXY":this.x=Math.asin(c(2* (a.x*a.w+a.y*a.z)));this.y=Math.atan2(2*(a.y*a.w-a.z*a.x),g-d-e+f);this.z=Math.atan2(2*(a.z*a.w-a.x*a.y),g-d+e-f);break;case "ZYX":this.x=Math.atan2(2*(a.x*a.w+a.z*a.y),g-d-e+f);this.y=Math.asin(c(2*(a.y*a.w-a.x*a.z)));this.z=Math.atan2(2*(a.x*a.y+a.z*a.w),g+d-e-f);break;case "YZX":this.x=Math.atan2(2*(a.x*a.w-a.z*a.y),g-d+e-f);this.y=Math.atan2(2*(a.y*a.w-a.x*a.z),g+d-e-f);this.z=Math.asin(c(2*(a.x*a.y+a.z*a.w)));break;case "XZY":this.x=Math.atan2(2*(a.x*a.w+a.y*a.z),g-d+e-f);this.y=Math.atan2(2* (a.x*a.z+a.y*a.w),g+d-e-f);this.z=Math.asin(c(2*(a.z*a.w-a.x*a.y)));break;default:this.x=Math.atan2(2*(a.x*a.w-a.y*a.z),g-d-e+f);this.y=Math.asin(c(2*(a.x*a.z+a.y*a.w)));this.z=Math.atan2(2*(a.z*a.w-a.x*a.y),g+d-e-f)}return this},getScaleFromMatrix:function(a){var b=this.set(a.elements[0],a.elements[1],a.elements[2]).length(),c=this.set(a.elements[4],a.elements[5],a.elements[6]).length(),a=this.set(a.elements[8],a.elements[9],a.elements[10]).length();this.x=b;this.y=c;this.z=a},equals:function(a){return a.x=== this.x&&a.y===this.y&&a.z===this.z},isZero:function(){return this.lengthSq()<1.0E-4},clone:function(){return new THREE.Vector3(this.x,this.y,this.z)}};THREE.Vector4=function(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=d!==void 0?d:1}; THREE.Vector4.prototype={constructor:THREE.Vector4,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!==void 0?a.w:1;return this},add:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addSelf:function(a){this.x=this.x+a.x;this.y=this.y+a.y;this.z=this.z+a.z;this.w=this.w+a.w;return this},sub:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;this.w=a.w-b.w;return this},subSelf:function(a){this.x= this.x-a.x;this.y=this.y-a.y;this.z=this.z-a.z;this.w=this.w-a.w;return this},multiplyScalar:function(a){this.x=this.x*a;this.y=this.y*a;this.z=this.z*a;this.w=this.w*a;return this},divideScalar:function(a){if(a){this.x=this.x/a;this.y=this.y/a;this.z=this.z/a;this.w=this.w/a}else{this.z=this.y=this.x=0;this.w=1}return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.dot(this)},length:function(){return Math.sqrt(this.lengthSq())}, normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.normalize().multiplyScalar(a)},lerpSelf:function(a,b){this.x=this.x+(a.x-this.x)*b;this.y=this.y+(a.y-this.y)*b;this.z=this.z+(a.z-this.z)*b;this.w=this.w+(a.w-this.w)*b;return this},clone:function(){return new THREE.Vector4(this.x,this.y,this.z,this.w)},setAxisAngleFromQuaternion:function(a){this.w=2*Math.acos(a.w);var b=Math.sqrt(1-a.w*a.w);if(b<1.0E-4){this.x=1;this.z=this.y=0}else{this.x=a.x/b;this.y= a.y/b;this.z=a.z/b}return this},setAxisAngleFromRotationMatrix:function(a){var b,c,d,a=a.elements,e=a[0];d=a[4];var f=a[8],g=a[1],i=a[5],j=a[9];c=a[2];b=a[6];var l=a[10];if(Math.abs(d-g)<0.01&&Math.abs(f-c)<0.01&&Math.abs(j-b)<0.01){if(Math.abs(d+g)<0.1&&Math.abs(f+c)<0.1&&Math.abs(j+b)<0.1&&Math.abs(e+i+l-3)<0.1){this.set(1,0,0,0);return this}a=Math.PI;e=(e+1)/2;i=(i+1)/2;l=(l+1)/2;d=(d+g)/4;f=(f+c)/4;j=(j+b)/4;if(e>i&&e>l)if(e<0.01){b=0;d=c=0.707106781}else{b=Math.sqrt(e);c=d/b;d=f/b}else if(i> l)if(i<0.01){b=0.707106781;c=0;d=0.707106781}else{c=Math.sqrt(i);b=d/c;d=j/c}else if(l<0.01){c=b=0.707106781;d=0}else{d=Math.sqrt(l);b=f/d;c=j/d}this.set(b,c,d,a);return this}a=Math.sqrt((b-j)*(b-j)+(f-c)*(f-c)+(g-d)*(g-d));Math.abs(a)<0.0010&&(a=1);this.x=(b-j)/a;this.y=(f-c)/a;this.z=(g-d)/a;this.w=Math.acos((e+i+l-1)/2);return this}}; THREE.EventTarget=function(){var a={};this.addEventListener=function(b,c){a[b]===void 0&&(a[b]=[]);a[b].indexOf(c)===-1&&a[b].push(c)};this.dispatchEvent=function(b){for(var c in a[b.type])a[b.type][c](b)};this.removeEventListener=function(b,c){var d=a[b].indexOf(c);d!==-1&&a[b].splice(d,1)}};THREE.Frustum=function(){this.planes=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4]}; THREE.Frustum.prototype.setFromMatrix=function(a){var b,c=this.planes,d=a.elements,a=d[0];b=d[1];var e=d[2],f=d[3],g=d[4],i=d[5],j=d[6],l=d[7],h=d[8],k=d[9],n=d[10],o=d[11],p=d[12],m=d[13],q=d[14],d=d[15];c[0].set(f-a,l-g,o-h,d-p);c[1].set(f+a,l+g,o+h,d+p);c[2].set(f+b,l+i,o+k,d+m);c[3].set(f-b,l-i,o-k,d-m);c[4].set(f-e,l-j,o-n,d-q);c[5].set(f+e,l+j,o+n,d+q);for(a=0;a<6;a++){b=c[a];b.divideScalar(Math.sqrt(b.x*b.x+b.y*b.y+b.z*b.z))}}; THREE.Frustum.prototype.contains=function(a){for(var b=this.planes,c=a.matrixWorld,d=c.elements,c=-a.geometry.boundingSphere.radius*c.getMaxScaleOnAxis(),e=0;e<6;e++){a=b[e].x*d[12]+b[e].y*d[13]+b[e].z*d[14]+b[e].w;if(a<=c)return false}return true};THREE.Frustum.__v1=new THREE.Vector3; THREE.Ray=function(a,b,c,d){this.origin=a||new THREE.Vector3;this.direction=b||new THREE.Vector3;this.near=c||0;this.far=d||Infinity;var e=new THREE.Vector3,f=new THREE.Vector3,g=new THREE.Vector3,i=new THREE.Vector3,j=new THREE.Vector3,l=new THREE.Vector3,h=new THREE.Vector3,k=new THREE.Vector3,n=new THREE.Vector3,o=function(a,b){return a.distance-b.distance},p=new THREE.Vector3,m=new THREE.Vector3,q=new THREE.Vector3,u,r,w,A=function(a,b,c){p.sub(c,a);u=p.dot(b);r=m.add(a,q.copy(b).multiplyScalar(u)); return w=c.distanceTo(r)},v,D,y,H,t,z,C,I,P=function(a,b,c,d){p.sub(d,b);m.sub(c,b);q.sub(a,b);v=p.dot(p);D=p.dot(m);y=p.dot(q);H=m.dot(m);t=m.dot(q);z=1/(v*H-D*D);C=(H*y-D*t)*z;I=(v*t-D*y)*z;return C>=0&&I>=0&&C+I<1},N=1.0E-4;this.setPrecision=function(a){N=a};this.intersectObject=function(a){var b,c=[];if(a instanceof THREE.Particle){w=A(this.origin,this.direction,a.matrixWorld.getPosition());if(w>a.scale.x)return[];b={distance:w,point:a.position,face:null,object:a};c.push(b)}else if(a instanceof THREE.Mesh){var d=THREE.Frustum.__v1.set(a.matrixWorld.getColumnX().length(),a.matrixWorld.getColumnY().length(),a.matrixWorld.getColumnZ().length()),d=a.geometry.boundingSphere.radius*Math.max(d.x,Math.max(d.y,d.z));w=A(this.origin,this.direction,a.matrixWorld.getPosition());if(w>d)return c;var m,p,x,S=a.geometry,F=S.vertices,q;a.matrixRotationWorld.extractRotation(a.matrixWorld);d=0;for(m=S.faces.length;d0:p<0))){n.add(j,l.multiplyScalar(x));w=j.distanceTo(n);if(!(wthis.far))if(b instanceof THREE.Face3){e=q.multiplyVector3(e.copy(F[b.a]));f=q.multiplyVector3(f.copy(F[b.b]));g=q.multiplyVector3(g.copy(F[b.c]));if(P(n,e,f,g)){b={distance:w,point:n.clone(),face:b,object:a};c.push(b)}}else if(b instanceof THREE.Face4){e=q.multiplyVector3(e.copy(F[b.a])); f=q.multiplyVector3(f.copy(F[b.b]));g=q.multiplyVector3(g.copy(F[b.c]));i=q.multiplyVector3(i.copy(F[b.d]));if(P(n,e,f,i)||P(n,f,g,i)){b={distance:w,point:n.clone(),face:b,object:a};c.push(b)}}}}}}c.sort(o);return c};this.intersectObjects=function(a){for(var b=[],c=0,d=a.length;cf?d:f;e=e>g? e:g}a()};this.add3Points=function(f,g,h,k,n,o){if(i){i=false;b=fh?f>n?f:n:h>n?h:n;e=g>k?g>o?g:o:k>o?k:o}else{b=fh?f>n?f>d?f:d:n>d?n:d:h>n?h>d?h:d:n>d?n:d;e=g>k?g>o?g>e?g:e:o>e?o:e:k>o?k>e?k:e:o>e?o:e}a()};this.addRectangle=function(f){if(i){i=false;b=f.getLeft();c=f.getTop();d=f.getRight();e=f.getBottom()}else{b=bf.getRight()?d:f.getRight();e=e>f.getBottom()?e:f.getBottom()}a()};this.inflate=function(f){b=b-f;c=c-f;d=d+f;e=e+f;a()};this.minSelf=function(f){b=b>f.getLeft()?b:f.getLeft();c=c>f.getTop()?c:f.getTop();d=da.getRight()||ea.getBottom()?false:true};this.empty=function(){i=true;e=d=c=b=0;a()};this.isEmpty=function(){return i}}; THREE.Math={clamp:function(a,b,c){return ac?c:a},clampBottom:function(a,b){return a0?1:0}};THREE.Matrix3=function(){this.elements=new Float32Array(9)}; THREE.Matrix3.prototype={constructor:THREE.Matrix3,getInverse:function(a){var b=a.elements,a=b[10]*b[5]-b[6]*b[9],c=-b[10]*b[1]+b[2]*b[9],d=b[6]*b[1]-b[2]*b[5],e=-b[10]*b[4]+b[6]*b[8],f=b[10]*b[0]-b[2]*b[8],g=-b[6]*b[0]+b[2]*b[4],i=b[9]*b[4]-b[5]*b[8],j=-b[9]*b[0]+b[1]*b[8],l=b[5]*b[0]-b[1]*b[4],b=b[0]*a+b[1]*e+b[2]*i;b===0&&console.warn("Matrix3.getInverse(): determinant == 0");var b=1/b,h=this.elements;h[0]=b*a;h[1]=b*c;h[2]=b*d;h[3]=b*e;h[4]=b*f;h[5]=b*g;h[6]=b*i;h[7]=b*j;h[8]=b*l;return this}, 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,e,f,g,i,j,l,h,k,n,o,p,m){this.elements=new Float32Array(16);this.set(a!==void 0?a:1,b||0,c||0,d||0,e||0,f!==void 0?f:1,g||0,i||0,j||0,l||0,h!==void 0?h:1,k||0,n||0,o||0,p||0,m!==void 0?m:1)}; THREE.Matrix4.prototype={constructor:THREE.Matrix4,set:function(a,b,c,d,e,f,g,i,j,l,h,k,n,o,p,m){var q=this.elements;q[0]=a;q[4]=b;q[8]=c;q[12]=d;q[1]=e;q[5]=f;q[9]=g;q[13]=i;q[2]=j;q[6]=l;q[10]=h;q[14]=k;q[3]=n;q[7]=o;q[11]=p;q[15]=m;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, e=THREE.Matrix4.__v1,f=THREE.Matrix4.__v2,g=THREE.Matrix4.__v3;g.sub(a,b).normalize();if(g.length()===0)g.z=1;e.cross(c,g).normalize();if(e.length()===0){g.x=g.x+1.0E-4;e.cross(c,g).normalize()}f.cross(g,e);d[0]=e.x;d[4]=f.x;d[8]=g.x;d[1]=e.y;d[5]=f.y;d[9]=g.y;d[2]=e.z;d[6]=f.z;d[10]=g.z;return this},multiply:function(a,b){var c=a.elements,d=b.elements,e=this.elements,f=c[0],g=c[4],i=c[8],j=c[12],l=c[1],h=c[5],k=c[9],n=c[13],o=c[2],p=c[6],m=c[10],q=c[14],u=c[3],r=c[7],w=c[11],c=c[15],A=d[0],v=d[4], D=d[8],y=d[12],H=d[1],t=d[5],z=d[9],C=d[13],I=d[2],P=d[6],N=d[10],s=d[14],E=d[3],G=d[7],J=d[11],d=d[15];e[0]=f*A+g*H+i*I+j*E;e[4]=f*v+g*t+i*P+j*G;e[8]=f*D+g*z+i*N+j*J;e[12]=f*y+g*C+i*s+j*d;e[1]=l*A+h*H+k*I+n*E;e[5]=l*v+h*t+k*P+n*G;e[9]=l*D+h*z+k*N+n*J;e[13]=l*y+h*C+k*s+n*d;e[2]=o*A+p*H+m*I+q*E;e[6]=o*v+p*t+m*P+q*G;e[10]=o*D+p*z+m*N+q*J;e[14]=o*y+p*C+m*s+q*d;e[3]=u*A+r*H+w*I+c*E;e[7]=u*v+r*t+w*P+c*G;e[11]=u*D+r*z+w*N+c*J;e[15]=u*y+r*C+w*s+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]=b[0]*a;b[4]=b[4]*a;b[8]=b[8]*a;b[12]=b[12]*a;b[1]=b[1]*a;b[5]=b[5]*a;b[9]=b[9]*a;b[13]=b[13]*a;b[2]=b[2]*a;b[6]=b[6]*a;b[10]=b[10]*a;b[14]=b[14]*a;b[3]=b[3]*a;b[7]=b[7]*a;b[11]=b[11]*a;b[15]= b[15]*a;return this},multiplyVector3:function(a){var b=this.elements,c=a.x,d=a.y,e=a.z,f=1/(b[3]*c+b[7]*d+b[11]*e+b[15]);a.x=(b[0]*c+b[4]*d+b[8]*e+b[12])*f;a.y=(b[1]*c+b[5]*d+b[9]*e+b[13])*f;a.z=(b[2]*c+b[6]*d+b[10]*e+b[14])*f;return a},multiplyVector4:function(a){var b=this.elements,c=a.x,d=a.y,e=a.z,f=a.w;a.x=b[0]*c+b[4]*d+b[8]*e+b[12]*f;a.y=b[1]*c+b[5]*d+b[9]*e+b[13]*f;a.z=b[2]*c+b[6]*d+b[10]*e+b[14]*f;a.w=b[3]*c+b[7]*d+b[11]*e+b[15]*f;return a},rotateAxis:function(a){var b=this.elements,c=a.x, d=a.y,e=a.z;a.x=c*b[0]+d*b[4]+e*b[8];a.y=c*b[1]+d*b[5]+e*b[9];a.z=c*b[2]+d*b[6]+e*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=this.elements,b=a[0],c=a[4],d=a[8],e=a[12],f=a[1],g=a[5],i=a[9],j=a[13],l=a[2],h=a[6],k=a[10],n=a[14],o=a[3],p=a[7], m=a[11],a=a[15];return e*i*h*o-d*j*h*o-e*g*k*o+c*j*k*o+d*g*n*o-c*i*n*o-e*i*l*p+d*j*l*p+e*f*k*p-b*j*k*p-d*f*n*p+b*i*n*p+e*g*l*m-c*j*l*m-e*f*h*m+b*j*h*m+c*f*n*m-b*g*n*m-d*g*l*a+c*i*l*a+d*f*h*a-b*i*h*a-c*f*k*a+b*g*k*a},transpose:function(){var a=this.elements,b;b=a[1];a[1]=a[4];a[4]=b;b=a[2];a[2]=a[8];a[8]=b;b=a[6];a[6]=a[9];a[9]=b;b=a[3];a[3]=a[12];a[12]=b;b=a[7];a[7]=a[13];a[13]=b;b=a[11];a[11]=a[14];a[14]=b;return this},flattenToArray:function(a){var b=this.elements;a[0]=b[0];a[1]=b[1];a[2]=b[2]; a[3]=b[3];a[4]=b[4];a[5]=b[5];a[6]=b[6];a[7]=b[7];a[8]=b[8];a[9]=b[9];a[10]=b[10];a[11]=b[11];a[12]=b[12];a[13]=b[13];a[14]=b[14];a[15]=b[15];return a},flattenToArrayOffset:function(a,b){var c=this.elements;a[b]=c[0];a[b+1]=c[1];a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4];a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];a[b+9]=c[9];a[b+10]=c[10];a[b+11]=c[11];a[b+12]=c[12];a[b+13]=c[13];a[b+14]=c[14];a[b+15]=c[15];return a},getPosition:function(){var a=this.elements;return THREE.Matrix4.__v1.set(a[12],a[13], a[14])},setPosition:function(a){var b=this.elements;b[12]=a.x;b[13]=a.y;b[14]=a.z;return this},getColumnX:function(){var a=this.elements;return THREE.Matrix4.__v1.set(a[0],a[1],a[2])},getColumnY:function(){var a=this.elements;return THREE.Matrix4.__v1.set(a[4],a[5],a[6])},getColumnZ:function(){var a=this.elements;return THREE.Matrix4.__v1.set(a[8],a[9],a[10])},getInverse:function(a){var b=this.elements,c=a.elements,d=c[0],e=c[4],f=c[8],g=c[12],i=c[1],j=c[5],l=c[9],h=c[13],k=c[2],n=c[6],o=c[10],p= c[14],m=c[3],q=c[7],u=c[11],c=c[15];b[0]=l*p*q-h*o*q+h*n*u-j*p*u-l*n*c+j*o*c;b[4]=g*o*q-f*p*q-g*n*u+e*p*u+f*n*c-e*o*c;b[8]=f*h*q-g*l*q+g*j*u-e*h*u-f*j*c+e*l*c;b[12]=g*l*n-f*h*n-g*j*o+e*h*o+f*j*p-e*l*p;b[1]=h*o*m-l*p*m-h*k*u+i*p*u+l*k*c-i*o*c;b[5]=f*p*m-g*o*m+g*k*u-d*p*u-f*k*c+d*o*c;b[9]=g*l*m-f*h*m-g*i*u+d*h*u+f*i*c-d*l*c;b[13]=f*h*k-g*l*k+g*i*o-d*h*o-f*i*p+d*l*p;b[2]=j*p*m-h*n*m+h*k*q-i*p*q-j*k*c+i*n*c;b[6]=g*n*m-e*p*m-g*k*q+d*p*q+e*k*c-d*n*c;b[10]=e*h*m-g*j*m+g*i*q-d*h*q-e*i*c+d*j*c;b[14]=g*j*k- e*h*k-g*i*n+d*h*n+e*i*p-d*j*p;b[3]=l*n*m-j*o*m-l*k*q+i*o*q+j*k*u-i*n*u;b[7]=e*o*m-f*n*m+f*k*q-d*o*q-e*k*u+d*n*u;b[11]=f*j*m-e*l*m-f*i*q+d*l*q+e*i*u-d*j*u;b[15]=e*l*k-f*j*k+f*i*n-d*l*n-e*i*o+d*j*o;this.multiplyScalar(1/a.determinant());return this},setRotationFromEuler:function(a,b){var c=this.elements,d=a.x,e=a.y,f=a.z,g=Math.cos(d),d=Math.sin(d),i=Math.cos(e),e=Math.sin(e),j=Math.cos(f),f=Math.sin(f);switch(b){case "YXZ":var l=i*j,h=i*f,k=e*j,n=e*f;c[0]=l+n*d;c[4]=k*d-h;c[8]=g*e;c[1]=g*f;c[5]=g* j;c[9]=-d;c[2]=h*d-k;c[6]=n+l*d;c[10]=g*i;break;case "ZXY":l=i*j;h=i*f;k=e*j;n=e*f;c[0]=l-n*d;c[4]=-g*f;c[8]=k+h*d;c[1]=h+k*d;c[5]=g*j;c[9]=n-l*d;c[2]=-g*e;c[6]=d;c[10]=g*i;break;case "ZYX":l=g*j;h=g*f;k=d*j;n=d*f;c[0]=i*j;c[4]=k*e-h;c[8]=l*e+n;c[1]=i*f;c[5]=n*e+l;c[9]=h*e-k;c[2]=-e;c[6]=d*i;c[10]=g*i;break;case "YZX":l=g*i;h=g*e;k=d*i;n=d*e;c[0]=i*j;c[4]=n-l*f;c[8]=k*f+h;c[1]=f;c[5]=g*j;c[9]=-d*j;c[2]=-e*j;c[6]=h*f+k;c[10]=l-n*f;break;case "XZY":l=g*i;h=g*e;k=d*i;n=d*e;c[0]=i*j;c[4]=-f;c[8]=e*j; c[1]=l*f+n;c[5]=g*j;c[9]=h*f-k;c[2]=k*f-h;c[6]=d*j;c[10]=n*f+l;break;default:l=g*j;h=g*f;k=d*j;n=d*f;c[0]=i*j;c[4]=-i*f;c[8]=e;c[1]=h+k*e;c[5]=l-n*e;c[9]=-d*i;c[2]=n-l*e;c[6]=k+h*e;c[10]=g*i}return this},setRotationFromQuaternion:function(a){var b=this.elements,c=a.x,d=a.y,e=a.z,f=a.w,g=c+c,i=d+d,j=e+e,a=c*g,l=c*i,c=c*j,h=d*i,d=d*j,e=e*j,g=f*g,i=f*i,f=f*j;b[0]=1-(h+e);b[4]=l-f;b[8]=c+i;b[1]=l+f;b[5]=1-(a+e);b[9]=d-g;b[2]=c-i;b[6]=d+g;b[10]=1-(a+h);return this},compose:function(a,b,c){var d=this.elements, e=THREE.Matrix4.__m1,f=THREE.Matrix4.__m2;e.identity();e.setRotationFromQuaternion(b);f.makeScale(c.x,c.y,c.z);this.multiply(e,f);d[12]=a.x;d[13]=a.y;d[14]=a.z;return this},decompose:function(a,b,c){var d=this.elements,e=THREE.Matrix4.__v1,f=THREE.Matrix4.__v2,g=THREE.Matrix4.__v3;e.set(d[0],d[1],d[2]);f.set(d[4],d[5],d[6]);g.set(d[8],d[9],d[10]);a=a instanceof THREE.Vector3?a:new THREE.Vector3;b=b instanceof THREE.Quaternion?b:new THREE.Quaternion;c=c instanceof THREE.Vector3?c:new THREE.Vector3; c.x=e.length();c.y=f.length();c.z=g.length();a.x=d[12];a.y=d[13];a.z=d[14];d=THREE.Matrix4.__m1;d.copy(this);d.elements[0]=d.elements[0]/c.x;d.elements[1]=d.elements[1]/c.x;d.elements[2]=d.elements[2]/c.x;d.elements[4]=d.elements[4]/c.y;d.elements[5]=d.elements[5]/c.y;d.elements[6]=d.elements[6]/c.y;d.elements[8]=d.elements[8]/c.z;d.elements[9]=d.elements[9]/c.z;d.elements[10]=d.elements[10]/c.z;b.setFromRotationMatrix(d);return[a,b,c]},extractPosition:function(a){var b=this.elements,a=a.elements; b[12]=a[12];b[13]=a[13];b[14]=a[14];return this},extractRotation:function(a){var b=this.elements,a=a.elements,c=THREE.Matrix4.__v1,d=1/c.set(a[0],a[1],a[2]).length(),e=1/c.set(a[4],a[5],a[6]).length(),c=1/c.set(a[8],a[9],a[10]).length();b[0]=a[0]*d;b[1]=a[1]*d;b[2]=a[2]*d;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[8]=a[8]*c;b[9]=a[9]*c;b[10]=a[10]*c;return this},translate:function(a){var b=this.elements,c=a.x,d=a.y,a=a.z;b[12]=b[0]*c+b[4]*d+b[8]*a+b[12];b[13]=b[1]*c+b[5]*d+b[9]*a+b[13];b[14]=b[2]*c+b[6]* d+b[10]*a+b[14];b[15]=b[3]*c+b[7]*d+b[11]*a+b[15];return this},rotateX:function(a){var b=this.elements,c=b[4],d=b[5],e=b[6],f=b[7],g=b[8],i=b[9],j=b[10],l=b[11],h=Math.cos(a),a=Math.sin(a);b[4]=h*c+a*g;b[5]=h*d+a*i;b[6]=h*e+a*j;b[7]=h*f+a*l;b[8]=h*g-a*c;b[9]=h*i-a*d;b[10]=h*j-a*e;b[11]=h*l-a*f;return this},rotateY:function(a){var b=this.elements,c=b[0],d=b[1],e=b[2],f=b[3],g=b[8],i=b[9],j=b[10],l=b[11],h=Math.cos(a),a=Math.sin(a);b[0]=h*c-a*g;b[1]=h*d-a*i;b[2]=h*e-a*j;b[3]=h*f-a*l;b[8]=h*g+a*c;b[9]= h*i+a*d;b[10]=h*j+a*e;b[11]=h*l+a*f;return this},rotateZ:function(a){var b=this.elements,c=b[0],d=b[1],e=b[2],f=b[3],g=b[4],i=b[5],j=b[6],l=b[7],h=Math.cos(a),a=Math.sin(a);b[0]=h*c+a*g;b[1]=h*d+a*i;b[2]=h*e+a*j;b[3]=h*f+a*l;b[4]=h*g-a*c;b[5]=h*i-a*d;b[6]=h*j-a*e;b[7]=h*l-a*f;return this},rotateByAxis:function(a,b){var c=this.elements;if(a.x===1&&a.y===0&&a.z===0)return this.rotateX(b);if(a.x===0&&a.y===1&&a.z===0)return this.rotateY(b);if(a.x===0&&a.y===0&&a.z===1)return this.rotateZ(b);var d=a.x, e=a.y,f=a.z,g=Math.sqrt(d*d+e*e+f*f),d=d/g,e=e/g,f=f/g,g=d*d,i=e*e,j=f*f,l=Math.cos(b),h=Math.sin(b),k=1-l,n=d*e*k,o=d*f*k,k=e*f*k,d=d*h,p=e*h,h=f*h,f=g+(1-g)*l,g=n+h,e=o-p,n=n-h,i=i+(1-i)*l,h=k+d,o=o+p,k=k-d,j=j+(1-j)*l,l=c[0],d=c[1],p=c[2],m=c[3],q=c[4],u=c[5],r=c[6],w=c[7],A=c[8],v=c[9],D=c[10],y=c[11];c[0]=f*l+g*q+e*A;c[1]=f*d+g*u+e*v;c[2]=f*p+g*r+e*D;c[3]=f*m+g*w+e*y;c[4]=n*l+i*q+h*A;c[5]=n*d+i*u+h*v;c[6]=n*p+i*r+h*D;c[7]=n*m+i*w+h*y;c[8]=o*l+k*q+j*A;c[9]=o*d+k*u+j*v;c[10]=o*p+k*r+j*D;c[11]= o*m+k*w+j*y;return this},scale:function(a){var b=this.elements,c=a.x,d=a.y,a=a.z;b[0]=b[0]*c;b[4]=b[4]*d;b[8]=b[8]*a;b[1]=b[1]*c;b[5]=b[5]*d;b[9]=b[9]*a;b[2]=b[2]*c;b[6]=b[6]*d;b[10]=b[10]*a;b[3]=b[3]*c;b[7]=b[7]*d;b[11]=b[11]*a;return this},getMaxScaleOnAxis:function(){var a=this.elements;return Math.sqrt(Math.max(a[0]*a[0]+a[1]*a[1]+a[2]*a[2],Math.max(a[4]*a[4]+a[5]*a[5]+a[6]*a[6],a[8]*a[8]+a[9]*a[9]+a[10]*a[10])))},makeTranslation:function(a,b,c){this.set(1,0,0,a,0,1,0,b,0,0,1,c,0,0,0,1);return this}, makeRotationX:function(a){var b=Math.cos(a),a=Math.sin(a);this.set(1,0,0,0,0,b,-a,0,0,a,b,0,0,0,0,1);return this},makeRotationY:function(a){var b=Math.cos(a),a=Math.sin(a);this.set(b,0,a,0,0,1,0,0,-a,0,b,0,0,0,0,1);return this},makeRotationZ:function(a){var b=Math.cos(a),a=Math.sin(a);this.set(b,-a,0,0,a,b,0,0,0,0,1,0,0,0,0,1);return this},makeRotationAxis:function(a,b){var c=Math.cos(b),d=Math.sin(b),e=1-c,f=a.x,g=a.y,i=a.z,j=e*f,l=e*g;this.set(j*f+c,j*g-d*i,j*i+d*g,0,j*g+d*i,l*g+c,l*i-d*f,0,j*i- d*g,l*i+d*f,e*i*i+c,0,0,0,0,1);return this},makeScale:function(a,b,c){this.set(a,0,0,0,0,b,0,0,0,0,c,0,0,0,0,1);return this},makeFrustum:function(a,b,c,d,e,f){var g=this.elements;g[0]=2*e/(b-a);g[4]=0;g[8]=(b+a)/(b-a);g[12]=0;g[1]=0;g[5]=2*e/(d-c);g[9]=(d+c)/(d-c);g[13]=0;g[2]=0;g[6]=0;g[10]=-(f+e)/(f-e);g[14]=-2*f*e/(f-e);g[3]=0;g[7]=0;g[11]=-1;g[15]=0;return this},makePerspective:function(a,b,c,d){var a=c*Math.tan(a*Math.PI/360),e=-a;return this.makeFrustum(e*b,a*b,e,a,c,d)},makeOrthographic:function(a, b,c,d,e,f){var g=this.elements,i=b-a,j=c-d,l=f-e;g[0]=2/i;g[4]=0;g[8]=0;g[12]=-((b+a)/i);g[1]=0;g[5]=2/j;g[9]=0;g[13]=-((c+d)/j);g[2]=0;g[6]=0;g[10]=-2/l;g[14]=-((f+e)/l);g[3]=0;g[7]=0;g[11]=0;g[15]=1;return this},clone:function(){var a=this.elements;return new THREE.Matrix4(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])}};THREE.Matrix4.__v1=new THREE.Vector3;THREE.Matrix4.__v2=new THREE.Vector3;THREE.Matrix4.__v3=new THREE.Vector3;THREE.Matrix4.__m1=new THREE.Matrix4; THREE.Matrix4.__m2=new THREE.Matrix4; THREE.Object3D=function(){this.id=THREE.Object3DCount++;this.name="";this.parent=void 0;this.children=[];this.up=new THREE.Vector3(0,1,0);this.position=new THREE.Vector3;this.rotation=new THREE.Vector3;this.eulerOrder="XYZ";this.scale=new THREE.Vector3(1,1,1);this.flipSided=this.doubleSided=false;this.renderDepth=null;this.rotationAutoUpdate=true;this.matrix=new THREE.Matrix4;this.matrixWorld=new THREE.Matrix4;this.matrixRotationWorld=new THREE.Matrix4;this.matrixWorldNeedsUpdate=this.matrixAutoUpdate= true;this.quaternion=new THREE.Quaternion;this.useQuaternion=false;this.boundRadius=0;this.boundRadiusScale=1;this.visible=true;this.receiveShadow=this.castShadow=false;this.frustumCulled=true;this._vector=new THREE.Vector3}; THREE.Object3D.prototype={constructor:THREE.Object3D,applyMatrix:function(a){this.matrix.multiply(a,this.matrix);this.scale.getScaleFromMatrix(this.matrix);this.rotation.setEulerFromRotationMatrix((new THREE.Matrix4).extractRotation(this.matrix),this.eulerOrder);this.position.getPositionFromMatrix(this.matrix)},translate:function(a,b){this.matrix.rotateAxis(b);this.position.addSelf(b.multiplyScalar(a))},translateX:function(a){this.translate(a,this._vector.set(1,0,0))},translateY:function(a){this.translate(a, this._vector.set(0,1,0))},translateZ:function(a){this.translate(a,this._vector.set(0,0,1))},lookAt:function(a){this.matrix.lookAt(a,this.position,this.up);this.rotationAutoUpdate&&this.rotation.setEulerFromRotationMatrix(this.matrix,this.eulerOrder)},add:function(a){if(a===this)console.warn("THREE.Object3D.add: An object can't be added as a child of itself.");else if(a instanceof THREE.Object3D){a.parent!==void 0&&a.parent.remove(a);a.parent=this;this.children.push(a);for(var b=this;b.parent!==void 0;)b= b.parent;b!==void 0&&b instanceof THREE.Scene&&b.__addObject(a)}},remove:function(a){var b=this.children.indexOf(a);if(b!==-1){a.parent=void 0;this.children.splice(b,1);for(b=this;b.parent!==void 0;)b=b.parent;b!==void 0&&b instanceof THREE.Scene&&b.__removeObject(a)}},getChildByName:function(a,b){var c,d,e;c=0;for(d=this.children.length;c=0&&e>=0&&g>=0&&i>=0)return true;if(f<0&&e<0||g<0&&i<0)return false;f<0?c=Math.max(c,f/(f-e)):e<0&&(d=Math.min(d,f/(f-e)));g<0?c=Math.max(c,g/(g-i)):i<0&&(d=Math.min(d,g/(g-i)));if(dg&&i.positionScreen.z0)){U=l[j-2];C.copy(F.positionScreen);I.copy(U.positionScreen);if(d(C,I)){C.multiplyScalar(1/C.w);I.multiplyScalar(1/I.w);M=u[q]=u[q]||new THREE.RenderableLine;q++;m=M;m.v1.positionScreen.copy(C);m.v2.positionScreen.copy(I);m.z=Math.max(C.z,I.z);m.material=B.material;v.elements.push(m)}}}}}a= 0;for(Q=v.sprites.length;a0&&y.z<1){g=A[w]=A[w]||new THREE.RenderableParticle;w++;r=g;r.x=y.x/y.w;r.y=y.y/y.w;r.z=y.z;r.rotation=B.rotation.z;r.scale.x=B.scale.x*Math.abs(r.x-(y.x+f.projectionMatrix.elements[0])/(y.w+f.projectionMatrix.elements[12]));r.scale.y=B.scale.y*Math.abs(r.y-(y.y+f.projectionMatrix.elements[5])/(y.w+f.projectionMatrix.elements[13])); r.material=B.material;v.elements.push(r)}}}e&&v.elements.sort(c);return v}};THREE.Quaternion=function(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=d!==void 0?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=b||"XYZ",d=Math.cos(a.x/2),e=Math.cos(a.y/2),f=Math.cos(a.z/2),g=Math.sin(a.x/2),i=Math.sin(a.y/2),j=Math.sin(a.z/2);switch(c){case "YXZ":this.x=g*e*f+d*i*j;this.y=d*i*f-g*e*j;this.z=d*e*j-g*i*f;this.w=d*e*f+g*i*j;break;case "ZXY":this.x=g*e*f-d*i*j;this.y=d*i*f+g*e* j;this.z=d*e*j+g*i*f;this.w=d*e*f-g*i*j;break;case "ZYX":this.x=g*e*f-d*i*j;this.y=d*i*f+g*e*j;this.z=d*e*j-g*i*f;this.w=d*e*f+g*i*j;break;case "YZX":this.x=g*e*f+d*i*j;this.y=d*i*f+g*e*j;this.z=d*e*j-g*i*f;this.w=d*e*f-g*i*j;break;case "XZY":this.x=g*e*f-d*i*j;this.y=d*i*f-g*e*j;this.z=d*e*j+g*i*f;this.w=d*e*f+g*i*j;break;default:this.x=g*e*f+d*i*j;this.y=d*i*f-g*e*j;this.z=d*e*j+g*i*f;this.w=d*e*f-g*i*j}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);return this},setFromRotationMatrix:function(a){var b=a.elements,c=b[0],a=b[4],d=b[8],e=b[1],f=b[5],g=b[9],i=b[2],j=b[6],b=b[10],l=c+f+b;if(l>0){c=0.5/Math.sqrt(l+1);this.w=0.25/c;this.x=(j-g)*c;this.y=(d-i)*c;this.z=(e-a)*c}else if(c>f&&c>b){c=2*Math.sqrt(1+c-f-b);this.w=(j-g)/c;this.x=0.25*c;this.y=(a+e)/c;this.z=(d+i)/c}else if(f>b){c=2*Math.sqrt(1+f-c-b);this.w=(d-i)/c;this.x=(a+e)/c;this.y=0.25*c;this.z=(g+j)/c}else{c=2*Math.sqrt(1+b-c-f);this.w=(e-a)/c;this.x= (d+i)/c;this.y=(g+j)/c;this.z=0.25*c}return this},calculateW:function(){this.w=-Math.sqrt(Math.abs(1-this.x*this.x-this.y*this.y-this.z*this.z));return this},inverse:function(){this.x=this.x*-1;this.y=this.y*-1;this.z=this.z*-1;return this},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},normalize:function(){var a=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);if(a===0)this.w=this.z=this.y=this.x=0;else{a=1/a;this.x=this.x*a;this.y= this.y*a;this.z=this.z*a;this.w=this.w*a}return this},multiply:function(a,b){this.x=a.x*b.w+a.y*b.z-a.z*b.y+a.w*b.x;this.y=-a.x*b.z+a.y*b.w+a.z*b.x+a.w*b.y;this.z=a.x*b.y-a.y*b.x+a.z*b.w+a.w*b.z;this.w=-a.x*b.x-a.y*b.y-a.z*b.z+a.w*b.w;return this},multiplySelf:function(a){var b=this.x,c=this.y,d=this.z,e=this.w,f=a.x,g=a.y,i=a.z,a=a.w;this.x=b*a+e*f+c*i-d*g;this.y=c*a+e*g+d*f-b*i;this.z=d*a+e*i+b*g-c*f;this.w=e*a-b*f-c*g-d*i;return this},multiplyVector3:function(a,b){b||(b=a);var c=a.x,d=a.y,e=a.z, f=this.x,g=this.y,i=this.z,j=this.w,l=j*c+g*e-i*d,h=j*d+i*c-f*e,k=j*e+f*d-g*c,c=-f*c-g*d-i*e;b.x=l*j+c*-f+h*-i-k*-g;b.y=h*j+c*-g+k*-f-l*-i;b.z=k*j+c*-i+l*-g-h*-f;return b},slerpSelf:function(a,b){var c=this.x,d=this.y,e=this.z,f=this.w,g=f*a.w+c*a.x+d*a.y+e*a.z;if(g<0){this.w=-a.w;this.x=-a.x;this.y=-a.y;this.z=-a.z;g=-g}else this.copy(a);if(g>=1){this.w=f;this.x=c;this.y=d;this.z=e;return this}var i=Math.acos(g),j=Math.sqrt(1-g*g);if(Math.abs(j)<0.0010){this.w=0.5*(f+this.w);this.x=0.5*(c+this.x); this.y=0.5*(d+this.y);this.z=0.5*(e+this.z);return this}g=Math.sin((1-b)*i)/j;i=Math.sin(b*i)/j;this.w=f*g+this.w*i;this.x=c*g+this.x*i;this.y=d*g+this.y*i;this.z=e*g+this.z*i;return this},clone:function(){return new THREE.Quaternion(this.x,this.y,this.z,this.w)}}; THREE.Quaternion.slerp=function(a,b,c,d){var e=a.w*b.w+a.x*b.x+a.y*b.y+a.z*b.z;if(e<0){c.w=-b.w;c.x=-b.x;c.y=-b.y;c.z=-b.z;e=-e}else c.copy(b);if(Math.abs(e)>=1){c.w=a.w;c.x=a.x;c.y=a.y;c.z=a.z;return c}var b=Math.acos(e),f=Math.sqrt(1-e*e);if(Math.abs(f)<0.0010){c.w=0.5*(a.w+c.w);c.x=0.5*(a.x+c.x);c.y=0.5*(a.y+c.y);c.z=0.5*(a.z+c.z);return c}e=Math.sin((1-d)*b)/f;d=Math.sin(d*b)/f;c.w=a.w*e+c.w*d;c.x=a.x*e+c.x*d;c.y=a.y*e+c.y*d;c.z=a.z*e+c.z*d;return c};THREE.Vertex=function(){console.warn("THREE.Vertex has been DEPRECATED. Use THREE.Vector3 instead.")}; THREE.Face3=function(a,b,c,d,e,f){this.a=a;this.b=b;this.c=c;this.normal=d instanceof THREE.Vector3?d:new THREE.Vector3;this.vertexNormals=d instanceof Array?d:[];this.color=e instanceof THREE.Color?e:new THREE.Color;this.vertexColors=e instanceof Array?e:[];this.vertexTangents=[];this.materialIndex=f;this.centroid=new THREE.Vector3}; THREE.Face3.prototype={constructor:THREE.Face3,clone:function(){var a=new THREE.Face3(this.a,this.b,this.c);a.normal.copy(this.normal);a.color.copy(this.color);a.centroid.copy(this.centroid);a.materialIndex=this.materialIndex;var b,c;b=0;for(c=this.vertexNormals.length;b0){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,e=this.vertices.length;dc.x)c.x= a.x;if(a.yc.y)c.y=a.y;if(a.zc.z)c.z=a.z}}else{this.boundingBox.min.set(0,0,0);this.boundingBox.max.set(0,0,0)}},computeBoundingSphere:function(){if(!this.boundingSphere)this.boundingSphere={radius:0};for(var a,b=0,c=0,d=this.vertices.length;cb&&(b=a)}this.boundingSphere.radius=b},mergeVertices:function(){var a={},b=[],c=[],d,e=Math.pow(10,4),f,g,i;f=0;for(g=this.vertices.length;f0;a--)if(d.indexOf(e["abcd"[a]])!=a){d.splice(a,1);this.faces[f]=new THREE.Face3(d[0],d[1],d[2]);e=0;for(d=this.faceVertexUvs.length;e1&&(I=new THREE.MeshFaceMaterial); a=new THREE.Mesh(C,I);a.name=n;if(r){a.matrixAutoUpdate=false;a.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])}else{a.position.set(v[0],v[1],v[2]);if(y){a.quaternion.set(y[0],y[1],y[2],y[3]);a.useQuaternion=true}else a.rotation.set(D[0],D[1],D[2]);a.scale.set(H[0],H[1],H[2])}a.visible=u.visible;a.doubleSided=u.doubleSided;a.castShadow=u.castShadow;a.receiveShadow=u.receiveShadow;x.scene.add(a);x.objects[n]=a}}else{v=u.position;D=u.rotation;y=u.quaternion; H=u.scale;y=0;a=new THREE.Object3D;a.name=n;a.position.set(v[0],v[1],v[2]);if(y){a.quaternion.set(y[0],y[1],y[2],y[3]);a.useQuaternion=true}else a.rotation.set(D[0],D[1],D[2]);a.scale.set(H[0],H[1],H[2]);a.visible=u.visible!==void 0?u.visible:false;x.scene.add(a);x.objects[n]=a;x.empties[n]=a}}}function f(a){return function(b){x.geometries[a]=b;e();G=G-1;j.onLoadComplete();i()}}function g(a){return function(b){x.geometries[a]=b}}function i(){j.callbackProgress({totalModels:Q,totalTextures:O,loadedModels:Q- G,loadedTextures:O-J},x);j.onLoadProgress();G==0&&J==0&&b(x)}var j=this,l=THREE.Loader.prototype.extractUrlBase(c),h,k,n,o,p,m,q,u,r,w,A,v,D,y,H,t,z,C,I,P,N,s,E,G,J,Q,O,x;s=a;c=new THREE.BinaryLoader;E=new THREE.JSONLoader;J=G=0;x={scene:new THREE.Scene,geometries:{},materials:{},textures:{},objects:{},cameras:{},lights:{},fogs:{},empties:{}};if(s.transform){a=s.transform.position;w=s.transform.rotation;t=s.transform.scale;a&&x.scene.position.set(a[0],a[1],a[2]);w&&x.scene.rotation.set(w[0],w[1], w[2]);t&&x.scene.scale.set(t[0],t[1],t[2]);if(a||w||t){x.scene.updateMatrix();x.scene.updateMatrixWorld()}}a=function(){J=J-1;i();j.onLoadComplete()};for(p in s.cameras){t=s.cameras[p];t.type=="perspective"?P=new THREE.PerspectiveCamera(t.fov,t.aspect,t.near,t.far):t.type=="ortho"&&(P=new THREE.OrthographicCamera(t.left,t.right,t.top,t.bottom,t.near,t.far));v=t.position;w=t.target;t=t.up;P.position.set(v[0],v[1],v[2]);P.target=new THREE.Vector3(w[0],w[1],w[2]);t&&P.up.set(t[0],t[1],t[2]);x.cameras[p]= P}for(o in s.lights){w=s.lights[o];p=w.color!==void 0?w.color:16777215;P=w.intensity!==void 0?w.intensity:1;if(w.type=="directional"){v=w.direction;A=new THREE.DirectionalLight(p,P);A.position.set(v[0],v[1],v[2]);A.position.normalize()}else if(w.type=="point"){v=w.position;A=w.distance;A=new THREE.PointLight(p,P,A);A.position.set(v[0],v[1],v[2])}else w.type=="ambient"&&(A=new THREE.AmbientLight(p));x.scene.add(A);x.lights[o]=A}for(m in s.fogs){o=s.fogs[m];o.type=="linear"?N=new THREE.Fog(0,o.near, o.far):o.type=="exp2"&&(N=new THREE.FogExp2(0,o.density));t=o.color;N.color.setRGB(t[0],t[1],t[2]);x.fogs[m]=N}if(x.cameras&&s.defaults.camera)x.currentCamera=x.cameras[s.defaults.camera];if(x.fogs&&s.defaults.fog)x.scene.fog=x.fogs[s.defaults.fog];t=s.defaults.bgcolor;x.bgColor=new THREE.Color;x.bgColor.setRGB(t[0],t[1],t[2]);x.bgColorAlpha=s.defaults.bgalpha;for(h in s.geometries){m=s.geometries[h];if(m.type=="bin_mesh"||m.type=="ascii_mesh"){G=G+1;j.onLoadStart()}}Q=G;for(h in s.geometries){m= s.geometries[h];if(m.type=="cube"){C=new THREE.CubeGeometry(m.width,m.height,m.depth,m.segmentsWidth,m.segmentsHeight,m.segmentsDepth,null,m.flipped,m.sides);x.geometries[h]=C}else if(m.type=="plane"){C=new THREE.PlaneGeometry(m.width,m.height,m.segmentsWidth,m.segmentsHeight);x.geometries[h]=C}else if(m.type=="sphere"){C=new THREE.SphereGeometry(m.radius,m.segmentsWidth,m.segmentsHeight);x.geometries[h]=C}else if(m.type=="cylinder"){C=new THREE.CylinderGeometry(m.topRad,m.botRad,m.height,m.radSegs, m.heightSegs);x.geometries[h]=C}else if(m.type=="torus"){C=new THREE.TorusGeometry(m.radius,m.tube,m.segmentsR,m.segmentsT);x.geometries[h]=C}else if(m.type=="icosahedron"){C=new THREE.IcosahedronGeometry(m.radius,m.subdivisions);x.geometries[h]=C}else if(m.type=="bin_mesh")c.load(d(m.url,s.urlBaseType),f(h));else if(m.type=="ascii_mesh")E.load(d(m.url,s.urlBaseType),f(h));else if(m.type=="embedded_mesh"){m=s.embeds[m.id];m.metadata=s.metadata;m&&E.createModel(m,g(h),"")}}for(q in s.textures){h=s.textures[q]; if(h.url instanceof Array){J=J+h.url.length;for(m=0;m0){c(THREE.NormalBlending);b(1);e("rgba("+Math.floor(q.r* 255)+","+Math.floor(q.g*255)+","+Math.floor(q.b*255)+","+u+")");m.fillRect(Math.floor($.getX()),Math.floor($.getY()),Math.floor($.getWidth()),Math.floor($.getHeight()))}$.empty()}};this.render=function(a,h){function k(a){var b,c,d,e;Y.setRGB(0,0,0);ma.setRGB(0,0,0);na.setRGB(0,0,0);b=0;for(c=a.length;b>1;k=l.height>>1;g=f.scale.x*o;j=f.scale.y*p;h=g*n;i=j*k;Z.set(a.x-h,a.y-i,a.x+h,a.y+i);if(la.intersects(Z)){m.save();m.translate(a.x,a.y);m.rotate(-f.rotation);m.scale(g,-j);m.translate(-n,-k);m.drawImage(l,0,0);m.restore()}}}else if(g instanceof THREE.ParticleCanvasMaterial){h=f.scale.x*o;i=f.scale.y*p;Z.set(a.x-h,a.y-i, a.x+h,a.y+i);if(la.intersects(Z)){d(g.color.getContextStyle());e(g.color.getContextStyle());m.save();m.translate(a.x,a.y);m.rotate(-f.rotation);m.scale(h,i);g.program(m);m.restore()}}}function r(a,e,f,g){b(g.opacity);c(g.blending);m.beginPath();m.moveTo(a.positionScreen.x,a.positionScreen.y);m.lineTo(e.positionScreen.x,e.positionScreen.y);m.closePath();if(g instanceof THREE.LineBasicMaterial){a=g.linewidth;if(D!=a)m.lineWidth=D=a;a=g.linecap;if(y!=a)m.lineCap=y=a;a=g.linejoin;if(H!=a)m.lineJoin=H= a;d(g.color.getContextStyle());m.stroke();Z.inflate(g.linewidth*2)}}function u(a,d,e,g,i,l,m,k){f.info.render.vertices=f.info.render.vertices+3;f.info.render.faces++;b(k.opacity);c(k.blending);s=a.positionScreen.x;E=a.positionScreen.y;G=d.positionScreen.x;J=d.positionScreen.y;Q=e.positionScreen.x;O=e.positionScreen.y;w(s,E,G,J,Q,O);if(k instanceof THREE.MeshBasicMaterial)if(k.map){if(k.map.mapping instanceof THREE.UVMapping){ka=m.uvs[0];Fa(s,E,G,J,Q,O,ka[g].u,ka[g].v,ka[i].u,ka[i].v,ka[l].u,ka[l].v, k.map)}}else if(k.envMap){if(k.envMap.mapping instanceof THREE.SphericalReflectionMapping){a=h.matrixWorldInverse;V.copy(m.vertexNormalsWorld[g]);za=(V.x*a.elements[0]+V.y*a.elements[4]+V.z*a.elements[8])*0.5+0.5;Aa=-(V.x*a.elements[1]+V.y*a.elements[5]+V.z*a.elements[9])*0.5+0.5;V.copy(m.vertexNormalsWorld[i]);Ba=(V.x*a.elements[0]+V.y*a.elements[4]+V.z*a.elements[8])*0.5+0.5;Ca=-(V.x*a.elements[1]+V.y*a.elements[5]+V.z*a.elements[9])*0.5+0.5;V.copy(m.vertexNormalsWorld[l]);Da=(V.x*a.elements[0]+ V.y*a.elements[4]+V.z*a.elements[8])*0.5+0.5;Ea=-(V.x*a.elements[1]+V.y*a.elements[5]+V.z*a.elements[9])*0.5+0.5;Fa(s,E,G,J,Q,O,za,Aa,Ba,Ca,Da,Ea,k.envMap)}}else k.wireframe?ha(k.color,k.wireframeLinewidth,k.wireframeLinecap,k.wireframeLinejoin):ga(k.color);else if(k instanceof THREE.MeshLambertMaterial)if(xa)if(!k.wireframe&&k.shading==THREE.SmoothShading&&m.vertexNormalsWorld.length==3){L.r=K.r=M.r=Y.r;L.g=K.g=M.g=Y.g;L.b=K.b=M.b=Y.b;n(j,m.v1.positionWorld,m.vertexNormalsWorld[0],L);n(j,m.v2.positionWorld, m.vertexNormalsWorld[1],K);n(j,m.v3.positionWorld,m.vertexNormalsWorld[2],M);L.r=Math.max(0,Math.min(k.color.r*L.r,1));L.g=Math.max(0,Math.min(k.color.g*L.g,1));L.b=Math.max(0,Math.min(k.color.b*L.b,1));K.r=Math.max(0,Math.min(k.color.r*K.r,1));K.g=Math.max(0,Math.min(k.color.g*K.g,1));K.b=Math.max(0,Math.min(k.color.b*K.b,1));M.r=Math.max(0,Math.min(k.color.r*M.r,1));M.g=Math.max(0,Math.min(k.color.g*M.g,1));M.b=Math.max(0,Math.min(k.color.b*M.b,1));R.r=(K.r+M.r)*0.5;R.g=(K.g+M.g)*0.5;R.b=(K.b+M.b)* 0.5;ca=va(L,K,M,R);pa(s,E,G,J,Q,O,0,0,1,0,0,1,ca)}else{B.r=Y.r;B.g=Y.g;B.b=Y.b;n(j,m.centroidWorld,m.normalWorld,B);B.r=Math.max(0,Math.min(k.color.r*B.r,1));B.g=Math.max(0,Math.min(k.color.g*B.g,1));B.b=Math.max(0,Math.min(k.color.b*B.b,1));k.wireframe?ha(B,k.wireframeLinewidth,k.wireframeLinecap,k.wireframeLinejoin):ga(B)}else k.wireframe?ha(k.color,k.wireframeLinewidth,k.wireframeLinecap,k.wireframeLinejoin):ga(k.color);else if(k instanceof THREE.MeshDepthMaterial){ea=h.near;fa=h.far;L.r=L.g=L.b= 1-oa(a.positionScreen.z,ea,fa);K.r=K.g=K.b=1-oa(d.positionScreen.z,ea,fa);M.r=M.g=M.b=1-oa(e.positionScreen.z,ea,fa);R.r=(K.r+M.r)*0.5;R.g=(K.g+M.g)*0.5;R.b=(K.b+M.b)*0.5;ca=va(L,K,M,R);pa(s,E,G,J,Q,O,0,0,1,0,0,1,ca)}else if(k instanceof THREE.MeshNormalMaterial){B.r=qa(m.normalWorld.x);B.g=qa(m.normalWorld.y);B.b=qa(m.normalWorld.z);k.wireframe?ha(B,k.wireframeLinewidth,k.wireframeLinecap,k.wireframeLinejoin):ga(B)}}function v(a,d,e,g,i,l,m,k,o){f.info.render.vertices=f.info.render.vertices+4;f.info.render.faces++; b(k.opacity);c(k.blending);if(k.map||k.envMap){u(a,d,g,0,1,3,m,k,o);u(i,e,l,1,2,3,m,k,o)}else{s=a.positionScreen.x;E=a.positionScreen.y;G=d.positionScreen.x;J=d.positionScreen.y;Q=e.positionScreen.x;O=e.positionScreen.y;x=g.positionScreen.x;S=g.positionScreen.y;F=i.positionScreen.x;U=i.positionScreen.y;T=l.positionScreen.x;W=l.positionScreen.y;if(k instanceof THREE.MeshBasicMaterial){A(s,E,G,J,Q,O,x,S);k.wireframe?ha(k.color,k.wireframeLinewidth,k.wireframeLinecap,k.wireframeLinejoin):ga(k.color)}else if(k instanceof THREE.MeshLambertMaterial)if(xa)if(!k.wireframe&&k.shading==THREE.SmoothShading&&m.vertexNormalsWorld.length==4){L.r=K.r=M.r=R.r=Y.r;L.g=K.g=M.g=R.g=Y.g;L.b=K.b=M.b=R.b=Y.b;n(j,m.v1.positionWorld,m.vertexNormalsWorld[0],L);n(j,m.v2.positionWorld,m.vertexNormalsWorld[1],K);n(j,m.v4.positionWorld,m.vertexNormalsWorld[3],M);n(j,m.v3.positionWorld,m.vertexNormalsWorld[2],R);L.r=Math.max(0,Math.min(k.color.r*L.r,1));L.g=Math.max(0,Math.min(k.color.g*L.g,1));L.b=Math.max(0,Math.min(k.color.b*L.b,1));K.r= Math.max(0,Math.min(k.color.r*K.r,1));K.g=Math.max(0,Math.min(k.color.g*K.g,1));K.b=Math.max(0,Math.min(k.color.b*K.b,1));M.r=Math.max(0,Math.min(k.color.r*M.r,1));M.g=Math.max(0,Math.min(k.color.g*M.g,1));M.b=Math.max(0,Math.min(k.color.b*M.b,1));R.r=Math.max(0,Math.min(k.color.r*R.r,1));R.g=Math.max(0,Math.min(k.color.g*R.g,1));R.b=Math.max(0,Math.min(k.color.b*R.b,1));ca=va(L,K,M,R);w(s,E,G,J,x,S);pa(s,E,G,J,x,S,0,0,1,0,0,1,ca);w(F,U,Q,O,T,W);pa(F,U,Q,O,T,W,1,0,1,1,0,1,ca)}else{B.r=Y.r;B.g=Y.g; B.b=Y.b;n(j,m.centroidWorld,m.normalWorld,B);B.r=Math.max(0,Math.min(k.color.r*B.r,1));B.g=Math.max(0,Math.min(k.color.g*B.g,1));B.b=Math.max(0,Math.min(k.color.b*B.b,1));A(s,E,G,J,Q,O,x,S);k.wireframe?ha(B,k.wireframeLinewidth,k.wireframeLinecap,k.wireframeLinejoin):ga(B)}else{A(s,E,G,J,Q,O,x,S);k.wireframe?ha(k.color,k.wireframeLinewidth,k.wireframeLinecap,k.wireframeLinejoin):ga(k.color)}else if(k instanceof THREE.MeshNormalMaterial){B.r=qa(m.normalWorld.x);B.g=qa(m.normalWorld.y);B.b=qa(m.normalWorld.z); A(s,E,G,J,Q,O,x,S);k.wireframe?ha(B,k.wireframeLinewidth,k.wireframeLinecap,k.wireframeLinejoin):ga(B)}else if(k instanceof THREE.MeshDepthMaterial){ea=h.near;fa=h.far;L.r=L.g=L.b=1-oa(a.positionScreen.z,ea,fa);K.r=K.g=K.b=1-oa(d.positionScreen.z,ea,fa);M.r=M.g=M.b=1-oa(g.positionScreen.z,ea,fa);R.r=R.g=R.b=1-oa(e.positionScreen.z,ea,fa);ca=va(L,K,M,R);w(s,E,G,J,x,S);pa(s,E,G,J,x,S,0,0,1,0,0,1,ca);w(F,U,Q,O,T,W);pa(F,U,Q,O,T,W,1,0,1,1,0,1,ca)}}}function w(a,b,c,d,e,f){m.beginPath();m.moveTo(a,b); m.lineTo(c,d);m.lineTo(e,f);m.lineTo(a,b)}function A(a,b,c,d,e,f,g,h){m.beginPath();m.moveTo(a,b);m.lineTo(c,d);m.lineTo(e,f);m.lineTo(g,h);m.lineTo(a,b)}function ha(a,b,c,e){if(D!=b)m.lineWidth=D=b;if(y!=c)m.lineCap=y=c;if(H!=e)m.lineJoin=H=e;d(a.getContextStyle());m.stroke();Z.inflate(b*2)}function ga(a){e(a.getContextStyle());m.fill()}function Fa(a,b,c,d,f,g,h,i,j,k,l,n,o){if(!(o.image===void 0||o.image.width===0)){if(o.needsUpdate===true||ja[o.id]===void 0){var p=o.wrapS==THREE.RepeatWrapping, q=o.wrapT==THREE.RepeatWrapping;ja[o.id]=m.createPattern(o.image,p&&q?"repeat":p&&!q?"repeat-x":!p&&q?"repeat-y":"no-repeat");o.needsUpdate=false}e(ja[o.id]);var p=o.offset.x/o.repeat.x,q=o.offset.y/o.repeat.y,r=o.image.width*o.repeat.x,s=o.image.height*o.repeat.y,h=(h+p)*r,i=(i+q)*s,c=c-a,d=d-b,f=f-a,g=g-b,j=(j+p)*r-h,k=(k+q)*s-i,l=(l+p)*r-h,n=(n+q)*s-i,p=j*n-l*k;if(p==0){if(da[o.id]===void 0){b=document.createElement("canvas");b.width=o.image.width;b.height=o.image.height;b=b.getContext("2d");b.drawImage(o.image, 0,0);da[o.id]=b.getImageData(0,0,o.image.width,o.image.height).data}b=da[o.id];h=(Math.floor(h)+Math.floor(i)*o.image.width)*4;B.setRGB(b[h]/255,b[h+1]/255,b[h+2]/255);ga(B)}else{p=1/p;o=(n*c-k*f)*p;k=(n*d-k*g)*p;c=(j*f-l*c)*p;d=(j*g-l*d)*p;a=a-o*h-c*i;h=b-k*h-d*i;m.save();m.transform(o,k,c,d,a,h);m.fill();m.restore()}}}function pa(a,b,c,d,e,f,g,h,i,j,k,l,o){var n,p;n=o.width-1;p=o.height-1;g=g*n;h=h*p;c=c-a;d=d-b;e=e-a;f=f-b;i=i*n-g;j=j*p-h;k=k*n-g;l=l*p-h;p=1/(i*l-k*j);n=(l*c-j*e)*p;j=(l*d-j*f)* p;c=(i*e-k*c)*p;d=(i*f-k*d)*p;a=a-n*g-c*h;b=b-j*g-d*h;m.save();m.transform(n,j,c,d,a,b);m.clip();m.drawImage(o,0,0);m.restore()}function va(a,b,c,d){var e=~~(a.r*255),f=~~(a.g*255),a=~~(a.b*255),g=~~(b.r*255),h=~~(b.g*255),b=~~(b.b*255),i=~~(c.r*255),j=~~(c.g*255),c=~~(c.b*255),k=~~(d.r*255),l=~~(d.g*255),d=~~(d.b*255);aa[0]=e<0?0:e>255?255:e;aa[1]=f<0?0:f>255?255:f;aa[2]=a<0?0:a>255?255:a;aa[4]=g<0?0:g>255?255:g;aa[5]=h<0?0:h>255?255:h;aa[6]=b<0?0:b>255?255:b;aa[8]=i<0?0:i>255?255:i;aa[9]=j<0?0: j>255?255:j;aa[10]=c<0?0:c>255?255:c;aa[12]=k<0?0:k>255?255:k;aa[13]=l<0?0:l>255?255:l;aa[14]=d<0?0:d>255?255:d;sa.putImageData(ya,0,0);ua.drawImage(ra,0,0);return ta}function oa(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}function qa(a){a=(a+1)*0.5;return a<0?0:a>1?1:a}function ia(a,b){var c=b.x-a.x,d=b.y-a.y,e=c*c+d*d;if(e!=0){e=1/Math.sqrt(e);c=c*e;d=d*e;b.x=b.x+c;b.y=b.y+d;a.x=a.x-c;a.y=a.y-d}}var wa,Ga,X,ba;this.autoClear?this.clear():m.setTransform(1,0,0,-1,o,p);f.info.render.vertices=0;f.info.render.faces= 0;g=l.projectScene(a,h,this.sortElements);i=g.elements;j=g.lights;(xa=j.length>0)&&k(j);wa=0;for(Ga=i.length;wa