Template:Vilnius-Lithuania-OG/three.js

// three.js - http://github.com/mrdoob/three.js 'use strict';var THREE=THREE||{REVISION:"55dev"};self.console=self.console||{info:function(){},log:function(){},debug:function(){},warn:function(){},error:function(){}};self.Int32Array=self.Int32Array||Array;self.Float32Array=self.Float32Array||Array;String.prototype.startsWith=String.prototype.startsWith||function(a){return this.slice(0,a.length)===a};String.prototype.endsWith=String.prototype.endsWith||function(a){a=String(a);var b=this.lastIndexOf(a);return(-1<b&&b)===this.length-a.length}; String.prototype.trim=String.prototype.trim||function(){return this.replace(/^\s+|\s+$/g,"")}; (function(){for(var a=0,b=["ms","moz","webkit","o"],c=0;c<b.length&&!window.requestAnimationFrame;++c)window.requestAnimationFrame=window[b[c]+"RequestAnimationFrame"],window.cancelAnimationFrame=window[b[c]+"CancelAnimationFrame"]||window[b[c]+"CancelRequestAnimationFrame"];void 0===window.requestAnimationFrame&&(window.requestAnimationFrame=function(b){var c=Date.now(),f=Math.max(0,16-(c-a)),g=window.setTimeout(function(){b(c+f)},f);a=c+f;return g});window.cancelAnimationFrame=window.cancelAnimationFrame|| function(a){window.clearTimeout(a)}})();THREE.CullFaceNone=0;THREE.CullFaceBack=1;THREE.CullFaceFront=2;THREE.CullFaceFrontBack=3;THREE.FrontFaceDirectionCW=0;THREE.FrontFaceDirectionCCW=1;THREE.BasicShadowMap=0;THREE.PCFShadowMap=1;THREE.PCFSoftShadowMap=2;THREE.FrontSide=0;THREE.BackSide=1;THREE.DoubleSide=2;THREE.NoShading=0;THREE.FlatShading=1;THREE.SmoothShading=2;THREE.NoColors=0;THREE.FaceColors=1;THREE.VertexColors=2;THREE.NoBlending=0;THREE.NormalBlending=1;THREE.AdditiveBlending=2; THREE.SubtractiveBlending=3;THREE.MultiplyBlending=4;THREE.CustomBlending=5;THREE.AddEquation=100;THREE.SubtractEquation=101;THREE.ReverseSubtractEquation=102;THREE.ZeroFactor=200;THREE.OneFactor=201;THREE.SrcColorFactor=202;THREE.OneMinusSrcColorFactor=203;THREE.SrcAlphaFactor=204;THREE.OneMinusSrcAlphaFactor=205;THREE.DstAlphaFactor=206;THREE.OneMinusDstAlphaFactor=207;THREE.DstColorFactor=208;THREE.OneMinusDstColorFactor=209;THREE.SrcAlphaSaturateFactor=210;THREE.MultiplyOperation=0; THREE.MixOperation=1;THREE.AddOperation=2;THREE.UVMapping=function(){};THREE.CubeReflectionMapping=function(){};THREE.CubeRefractionMapping=function(){};THREE.SphericalReflectionMapping=function(){};THREE.SphericalRefractionMapping=function(){};THREE.RepeatWrapping=1E3;THREE.ClampToEdgeWrapping=1001;THREE.MirroredRepeatWrapping=1002;THREE.NearestFilter=1003;THREE.NearestMipMapNearestFilter=1004;THREE.NearestMipMapLinearFilter=1005;THREE.LinearFilter=1006;THREE.LinearMipMapNearestFilter=1007; THREE.LinearMipMapLinearFilter=1008;THREE.UnsignedByteType=1009;THREE.ByteType=1010;THREE.ShortType=1011;THREE.UnsignedShortType=1012;THREE.IntType=1013;THREE.UnsignedIntType=1014;THREE.FloatType=1015;THREE.UnsignedShort4444Type=1016;THREE.UnsignedShort5551Type=1017;THREE.UnsignedShort565Type=1018;THREE.AlphaFormat=1019;THREE.RGBFormat=1020;THREE.RGBAFormat=1021;THREE.LuminanceFormat=1022;THREE.LuminanceAlphaFormat=1023;THREE.RGB_S3TC_DXT1_Format=2001;THREE.RGBA_S3TC_DXT1_Format=2002; THREE.RGBA_S3TC_DXT3_Format=2003;THREE.RGBA_S3TC_DXT5_Format=2004;THREE.Color=function(a){void 0!==a&&this.set(a);return this}; THREE.Color.prototype={constructor:THREE.Color,r:1,g:1,b:1,copy:function(a){this.r=a.r;this.g=a.g;this.b=a.b;return this},copyGammaToLinear:function(a){this.r=a.r*a.r;this.g=a.g*a.g;this.b=a.b*a.b;return this},copyLinearToGamma:function(a){this.r=Math.sqrt(a.r);this.g=Math.sqrt(a.g);this.b=Math.sqrt(a.b);return this},convertGammaToLinear:function(){var a=this.r,b=this.g,c=this.b;this.r=a*a;this.g=b*b;this.b=c*c;return this},convertLinearToGamma:function(){this.r=Math.sqrt(this.r);this.g=Math.sqrt(this.g); this.b=Math.sqrt(this.b);return this},set:function(a){switch(typeof a){case "number":this.setHex(a);break;case "string":this.setStyle(a)}},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSV:function(a,b,c){var d,e,f;0===c?this.r=this.g=this.b=0:(d=Math.floor(6*a),e=6*a-d,a=c*(1-b),f=c*(1-b*e),b=c*(1-b*(1-e)),0===d?(this.r=c,this.g=b,this.b=a):1===d?(this.r=f,this.g=c,this.b=a):2===d?(this.r=a,this.g=c,this.b=b):3===d?(this.r=a,this.g=f,this.b=c):4===d?(this.r=b,this.g=a,this.b= c):5===d&&(this.r=c,this.g=a,this.b=f));return this},getHex:function(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0},setHex:function(a){a=Math.floor(a);this.r=(a>>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},getHexString:function(){return("000000"+this.getHex().toString(16)).slice(-6)},getStyle:function(){return"rgb("+(255*this.r|0)+","+(255*this.g|0)+","+(255*this.b|0)+")"},setStyle:function(a){if(/^rgb\((\d+),(\d+),(\d+)\)$/i.test(a))return a=/^rgb\((\d+),(\d+),(\d+)\)$/i.exec(a), this.r=Math.min(255,parseInt(a[1],10))/255,this.g=Math.min(255,parseInt(a[2],10))/255,this.b=Math.min(255,parseInt(a[3],10))/255,this;if(/^rgb\((\d+)\%,(\d+)\%,(\d+)\%\)$/i.test(a))return a=/^rgb\((\d+)\%,(\d+)\%,(\d+)\%\)$/i.exec(a),this.r=Math.min(100,parseInt(a[1],10))/100,this.g=Math.min(100,parseInt(a[2],10))/100,this.b=Math.min(100,parseInt(a[3],10))/100,this;if(/^\#([0-9a-f]{6})$/i.test(a))return a=/^\#([0-9a-f]{6})$/i.exec(a),this.setHex(parseInt(a[1],16)),this;if(/^\#([0-9a-f])([0-9a-f])([0-9a-f])$/i.test(a))return a= /^\#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(a),this.setHex(parseInt(a[1]+a[1]+a[2]+a[2]+a[3]+a[3],16)),this;if(/^(\w+)$/i.test(a))return this.setHex(THREE.ColorKeywords[a]),this},getHSV:function(a){var b=this.r,c=this.g,d=this.b,e=Math.max(Math.max(b,c),d),f=Math.min(Math.min(b,c),d);if(f===e)f=b=0;else{var g=e-f,f=g/e,b=(b===e?(c-d)/g:c===e?2+(d-b)/g:4+(b-c)/g)/6;0>b&&(b+=1);1<b&&(b-=1)}void 0===a&&(a={h:0,s:0,v:0});a.h=b;a.s=f;a.v=e;return a},lerpSelf:function(a,b){this.r+=(a.r-this.r)*b;this.g+= (a.g-this.g)*b;this.b+=(a.b-this.b)*b;return this},clone:function(){return(new THREE.Color).setRGB(this.r,this.g,this.b)}}; THREE.ColorKeywords={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643, darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055, grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184, lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130, palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888, tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};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},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;default:throw Error("index is out of range: "+a);}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+a);}},copy:function(a){this.x=a.x;this.y=a.y;return this},addScalar:function(a){this.x+= a;this.y+=a;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+=a.x;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-=a.x;this.y-=a.y;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;return this},divideScalar:function(a){0!==a?(this.x/=a,this.y/=a):this.set(0,0);return this},minSelf:function(a){this.x>a.x&&(this.x=a.x);this.y>a.y&&(this.y=a.y);return this},maxSelf:function(a){this.x< a.x&&(this.x=a.x);this.y<a.y&&(this.y=a.y);return this},clampSelf:function(a,b){this.x<a.x?this.x=a.x:this.x>b.x&&(this.x=b.x);this.y<a.y?this.y=a.y:this.y>b.y&&(this.y=b.y);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.x*this.x+this.y*this.y)},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){var b=this.length();0!==b&&a!==b&&this.multiplyScalar(a/b);return this},lerpSelf:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;return this},equals:function(a){return a.x===this.x&&a.y===this.y},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},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;default:throw Error("index is out of range: "+a);}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+ a);}},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+=a.x;this.y+=a.y;this.z+=a.z;return this},addScalar:function(a){this.x+=a;this.y+=a;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-=a.x;this.y-=a.y;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*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;return this},divideSelf:function(a){this.x/=a.x;this.y/=a.y;this.z/=a.z;return this},divideScalar:function(a){0!==a?(this.x/=a,this.y/=a,this.z/=a):this.z=this.y=this.x=0;return this},minSelf:function(a){this.x>a.x&&(this.x=a.x);this.y>a.y&&(this.y=a.y);this.z>a.z&&(this.z=a.z);return this},maxSelf:function(a){this.x<a.x&&(this.x=a.x);this.y<a.y&&(this.y=a.y);this.z<a.z&& (this.z=a.z);return this},clampSelf:function(a,b){this.x<a.x?this.x=a.x:this.x>b.x&&(this.x=b.x);this.y<a.y?this.y=a.y:this.y>b.y&&(this.y=b.y);this.z<a.z?this.z=a.z:this.z>b.z&&(this.z=b.z);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.x*this.x+this.y*this.y+this.z*this.z)},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){var b=this.length();0!==b&&a!==b&&this.multiplyScalar(a/b);return this},lerpSelf:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;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},angleTo:function(a){return Math.acos(this.dot(a)/this.length()/a.length())},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x,c=this.y-a.y;a=this.z-a.z;return b*b+c*c+a*a},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],h=d[1], j=d[5],l=d[9],m=d[2],q=d[6],d=d[10];void 0===b||"XYZ"===b?(this.y=Math.asin(c(g)),0.99999>Math.abs(g)?(this.x=Math.atan2(-l,d),this.z=Math.atan2(-f,e)):(this.x=Math.atan2(q,j),this.z=0)):"YXZ"===b?(this.x=Math.asin(-c(l)),0.99999>Math.abs(l)?(this.y=Math.atan2(g,d),this.z=Math.atan2(h,j)):(this.y=Math.atan2(-m,e),this.z=0)):"ZXY"===b?(this.x=Math.asin(c(q)),0.99999>Math.abs(q)?(this.y=Math.atan2(-m,d),this.z=Math.atan2(-f,j)):(this.y=0,this.z=Math.atan2(h,e))):"ZYX"===b?(this.y=Math.asin(-c(m)),0.99999> Math.abs(m)?(this.x=Math.atan2(q,d),this.z=Math.atan2(h,e)):(this.x=0,this.z=Math.atan2(-f,j))):"YZX"===b?(this.z=Math.asin(c(h)),0.99999>Math.abs(h)?(this.x=Math.atan2(-l,j),this.y=Math.atan2(-m,e)):(this.x=0,this.y=Math.atan2(g,d))):"XZY"===b&&(this.z=Math.asin(-c(f)),0.99999>Math.abs(f)?(this.x=Math.atan2(q,j),this.y=Math.atan2(g,e)):(this.x=Math.atan2(-l,d),this.y=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;void 0===b||"XYZ"===b?(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)):"YXZ"===b?(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)):"ZXY"===b?(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)):"ZYX"===b?(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)):"YZX"===b?(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)))):"XZY"===b&&(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))));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;return this},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z},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=void 0!==d?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},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setW:function(a){this.w=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;case 3:this.w=b;break;default:throw Error("index is out of range: "+a);}},getComponent:function(a){switch(a){case 0:return this.x; case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+a);}},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=void 0!==a.w?a.w:1;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;this.w+=a;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+=a.x;this.y+=a.y;this.z+=a.z;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-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;this.w*=a;return this},divideScalar:function(a){0!==a?(this.x/=a,this.y/=a,this.z/=a,this.w/=a):(this.z=this.y=this.x=0,this.w=1);return this},minSelf:function(a){this.x>a.x&&(this.x=a.x);this.y>a.y&&(this.y=a.y);this.z>a.z&&(this.z=a.z);this.w>a.w&&(this.w=a.w);return this},maxSelf:function(a){this.x<a.x&&(this.x=a.x);this.y< a.y&&(this.y=a.y);this.z<a.z&&(this.z=a.z);this.w<a.w&&(this.w=a.w);return this},clampSelf:function(a,b){this.x<a.x?this.x=a.x:this.x>b.x&&(this.x=b.x);this.y<a.y?this.y=a.y:this.y>b.y&&(this.y=b.y);this.z<a.z?this.z=a.z:this.z>b.z&&(this.z=b.z);this.w<a.w?this.w=a.w:this.w>b.w&&(this.w=b.w);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.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}, length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){var b=this.length();0!==b&&a!==b&&this.multiplyScalar(a/b);return this},lerpSelf:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this},equals:function(a){return a.x=== this.x&&a.y===this.y&&a.z===this.z&&a.w===this.w},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);1E-4>b?(this.x=1,this.z=this.y=0):(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;var e=a[0];d=a[4];var f=a[8],g=a[1],h=a[5],j=a[9];c=a[2];b=a[6];var l=a[10];if(0.01>Math.abs(d-g)&&0.01>Math.abs(f-c)&&0.01>Math.abs(j- b)){if(0.1>Math.abs(d+g)&&0.1>Math.abs(f+c)&&0.1>Math.abs(j+b)&&0.1>Math.abs(e+h+l-3))return this.set(1,0,0,0),this;a=Math.PI;e=(e+1)/2;h=(h+1)/2;l=(l+1)/2;d=(d+g)/4;f=(f+c)/4;j=(j+b)/4;e>h&&e>l?0.01>e?(b=0,d=c=0.707106781):(b=Math.sqrt(e),c=d/b,d=f/b):h>l?0.01>h?(b=0.707106781,c=0,d=0.707106781):(c=Math.sqrt(h),b=d/c,d=j/c):0.01>l?(c=b=0.707106781,d=0):(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));0.001>Math.abs(a)&&(a=1);this.x=(b-j)/ a;this.y=(f-c)/a;this.z=(g-d)/a;this.w=Math.acos((e+h+l-1)/2);return this}};THREE.Box2=function(a,b){this.min=void 0!==a?a.clone():new THREE.Vector2(Infinity,Infinity);this.max=void 0!==b?b.clone():new THREE.Vector2(-Infinity,-Infinity)}; THREE.Box2.prototype={constructor:THREE.Box2,set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromPoints:function(a){if(0<a.length){var b=a[0];this.min.copy(b);this.max.copy(b);for(var c=1,d=a.length;c<d;c++)b=a[c],b.x<this.min.x?this.min.x=b.x:b.x>this.max.x&&(this.max.x=b.x),b.y<this.min.y?this.min.y=b.y:b.y>this.max.y&&(this.max.y=b.y)}else this.makeEmpty();return this},setFromCenterAndSize:function(a,b){var c=THREE.Box2.__v1.copy(b).multiplyScalar(0.5);this.min.copy(a).subSelf(c); this.max.copy(a).addSelf(c);return this},copy:function(a){this.min.copy(a.min);this.max.copy(a.max);return this},makeEmpty:function(){this.min.x=this.min.y=Infinity;this.max.x=this.max.y=-Infinity;return this},empty:function(){return this.max.x<this.min.x||this.max.y<this.min.y},center:function(a){return(a||new THREE.Vector2).add(this.min,this.max).multiplyScalar(0.5)},size:function(a){return(a||new THREE.Vector2).sub(this.max,this.min)},expandByPoint:function(a){this.min.minSelf(a);this.max.maxSelf(a); return this},expandByVector:function(a){this.min.subSelf(a);this.max.addSelf(a);return this},expandByScalar:function(a){this.min.addScalar(-a);this.max.addScalar(a);return this},containsPoint:function(a){return this.min.x<=a.x&&a.x<=this.max.x&&this.min.y<=a.y&&a.y<=this.max.y?!0:!1},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y?!0:!1},getParameter:function(a){return new THREE.Vector2((a.x-this.min.x)/(this.max.x-this.min.x),(a.y- this.min.y)/(this.max.y-this.min.y))},isIntersectionBox:function(a){return a.max.x<this.min.x||a.min.x>this.max.x||a.max.y<this.min.y||a.min.y>this.max.y?!1:!0},clampPoint:function(a,b){return(b||new THREE.Vector2).copy(a).clampSelf(this.min,this.max)},distanceToPoint:function(a){return THREE.Box2.__v1.copy(a).clampSelf(this.min,this.max).subSelf(a).length()},intersect:function(a){this.min.maxSelf(a.min);this.max.minSelf(a.max);return this},union:function(a){this.min.minSelf(a.min);this.max.maxSelf(a.max); return this},translate:function(a){this.min.addSelf(a);this.max.addSelf(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)},clone:function(){return(new THREE.Box2).copy(this)}};THREE.Box2.__v1=new THREE.Vector2;THREE.Box3=function(a,b){this.min=void 0!==a?a.clone():new THREE.Vector3(Infinity,Infinity,Infinity);this.max=void 0!==b?b.clone():new THREE.Vector3(-Infinity,-Infinity,-Infinity)}; THREE.Box3.prototype={constructor:THREE.Box3,set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromPoints:function(a){if(0<a.length){var b=a[0];this.min.copy(b);this.max.copy(b);for(var c=1,d=a.length;c<d;c++)b=a[c],b.x<this.min.x?this.min.x=b.x:b.x>this.max.x&&(this.max.x=b.x),b.y<this.min.y?this.min.y=b.y:b.y>this.max.y&&(this.max.y=b.y),b.z<this.min.z?this.min.z=b.z:b.z>this.max.z&&(this.max.z=b.z)}else this.makeEmpty();return this},setFromCenterAndSize:function(a,b){var c=THREE.Box3.__v1.copy(b).multiplyScalar(0.5); this.min.copy(a).subSelf(c);this.max.copy(a).addSelf(c);return this},copy:function(a){this.min.copy(a.min);this.max.copy(a.max);return this},makeEmpty:function(){this.min.x=this.min.y=this.min.z=Infinity;this.max.x=this.max.y=this.max.z=-Infinity;return this},empty:function(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z},center:function(a){return(a||new THREE.Vector3).add(this.min,this.max).multiplyScalar(0.5)},size:function(a){return(a||new THREE.Vector3).sub(this.max, this.min)},expandByPoint:function(a){this.min.minSelf(a);this.max.maxSelf(a);return this},expandByVector:function(a){this.min.subSelf(a);this.max.addSelf(a);return this},expandByScalar:function(a){this.min.addScalar(-a);this.max.addScalar(a);return this},containsPoint:function(a){return this.min.x<=a.x&&a.x<=this.max.x&&this.min.y<=a.y&&a.y<=this.max.y&&this.min.z<=a.z&&a.z<=this.max.z?!0:!1},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y&& this.min.z<=a.min.z&&a.max.z<=this.max.z?!0:!1},getParameter:function(a){return new THREE.Vector3((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y),(a.z-this.min.z)/(this.max.z-this.min.z))},isIntersectionBox:function(a){return a.max.x<this.min.x||a.min.x>this.max.x||a.max.y<this.min.y||a.min.y>this.max.y||a.max.z<this.min.z||a.min.z>this.max.z?!1:!0},clampPoint:function(a,b){b||new THREE.Vector3;return(new THREE.Vector3).copy(a).clampSelf(this.min,this.max)},distanceToPoint:function(a){return THREE.Box3.__v1.copy(a).clampSelf(this.min, this.max).subSelf(a).length()},getBoundingSphere:function(a){a=a||new THREE.Sphere;a.center=this.center();a.radius=0.5*this.size(THREE.Box3.__v0).length();return a},intersect:function(a){this.min.maxSelf(a.min);this.max.minSelf(a.max);return this},union:function(a){this.min.minSelf(a.min);this.max.maxSelf(a.max);return this},transform:function(a){a=[a.multiplyVector3(THREE.Box3.__v0.set(this.min.x,this.min.y,this.min.z)),a.multiplyVector3(THREE.Box3.__v1.set(this.min.x,this.min.y,this.max.z)),a.multiplyVector3(THREE.Box3.__v2.set(this.min.x, this.max.y,this.min.z)),a.multiplyVector3(THREE.Box3.__v3.set(this.min.x,this.max.y,this.max.z)),a.multiplyVector3(THREE.Box3.__v4.set(this.max.x,this.min.y,this.min.z)),a.multiplyVector3(THREE.Box3.__v5.set(this.max.x,this.min.y,this.max.z)),a.multiplyVector3(THREE.Box3.__v6.set(this.max.x,this.max.y,this.min.z)),a.multiplyVector3(THREE.Box3.__v7.set(this.max.x,this.max.y,this.max.z))];this.makeEmpty();this.setFromPoints(a);return this},translate:function(a){this.min.addSelf(a);this.max.addSelf(a); return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)},clone:function(){return(new THREE.Box3).copy(this)}};THREE.Box3.__v0=new THREE.Vector3;THREE.Box3.__v1=new THREE.Vector3;THREE.Box3.__v2=new THREE.Vector3;THREE.Box3.__v3=new THREE.Vector3;THREE.Box3.__v4=new THREE.Vector3;THREE.Box3.__v5=new THREE.Vector3;THREE.Box3.__v6=new THREE.Vector3;THREE.Box3.__v7=new THREE.Vector3;THREE.Matrix3=function(a,b,c,d,e,f,g,h,j){this.elements=new Float32Array(9);this.set(void 0!==a?a:1,b||0,c||0,d||0,void 0!==e?e:1,f||0,g||0,h||0,void 0!==j?j:1)}; THREE.Matrix3.prototype={constructor:THREE.Matrix3,set:function(a,b,c,d,e,f,g,h,j){var l=this.elements;l[0]=a;l[3]=b;l[6]=c;l[1]=d;l[4]=e;l[7]=f;l[2]=g;l[5]=h;l[8]=j;return this},identity:function(){this.set(1,0,0,0,1,0,0,0,1);return this},copy:function(a){a=a.elements;this.set(a[0],a[3],a[6],a[1],a[4],a[7],a[2],a[5],a[8]);return this},multiplyVector3:function(a){var b=this.elements,c=a.x,d=a.y,e=a.z;a.x=b[0]*c+b[3]*d+b[6]*e;a.y=b[1]*c+b[4]*d+b[7]*e;a.z=b[2]*c+b[5]*d+b[8]*e;return a},multiplyVector3Array:function(a){for(var b= THREE.Matrix3.__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},multiplyScalar:function(a){var b=this.elements;b[0]*=a;b[3]*=a;b[6]*=a;b[1]*=a;b[4]*=a;b[7]*=a;b[2]*=a;b[5]*=a;b[8]*=a;return this},determinant:function(){var a=this.elements,b=a[0],c=a[1],d=a[2],e=a[3],f=a[4],g=a[5],h=a[6],j=a[7],a=a[8];return b*f*a-b*g*j-c*e*a+c*g*h+d*e*j-d*f*h},getInverse:function(a,b){var c=a.elements,d=this.elements;d[0]=c[10]*c[5]-c[6]*c[9]; d[1]=-c[10]*c[1]+c[2]*c[9];d[2]=c[6]*c[1]-c[2]*c[5];d[3]=-c[10]*c[4]+c[6]*c[8];d[4]=c[10]*c[0]-c[2]*c[8];d[5]=-c[6]*c[0]+c[2]*c[4];d[6]=c[9]*c[4]-c[5]*c[8];d[7]=-c[9]*c[0]+c[1]*c[8];d[8]=c[5]*c[0]-c[1]*c[4];c=c[0]*d[0]+c[1]*d[3]+c[2]*d[6];if(0===c){if(b)throw Error("Matrix3.getInverse(): can't invert matrix, determinant is 0");console.warn("Matrix3.getInverse(): can't invert matrix, determinant is 0");this.identity();return this}this.multiplyScalar(1/c);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.elements;a[0]=b[0];a[1]=b[3];a[2]=b[6];a[3]=b[1];a[4]=b[4];a[5]=b[7];a[6]=b[2];a[7]=b[5];a[8]=b[8];return this},clone:function(){var a=this.elements;return new THREE.Matrix3(a[0],a[3],a[6],a[1],a[4],a[7],a[2],a[5],a[8])}};THREE.Matrix3.__v1=new THREE.Vector3;THREE.Matrix4=function(a,b,c,d,e,f,g,h,j,l,m,q,p,t,r,n){this.elements=new Float32Array(16);this.set(void 0!==a?a:1,b||0,c||0,d||0,e||0,void 0!==f?f:1,g||0,h||0,j||0,l||0,void 0!==m?m:1,q||0,p||0,t||0,r||0,void 0!==n?n:1)}; THREE.Matrix4.prototype={constructor:THREE.Matrix4,set:function(a,b,c,d,e,f,g,h,j,l,m,q,p,t,r,n){var s=this.elements;s[0]=a;s[4]=b;s[8]=c;s[12]=d;s[1]=e;s[5]=f;s[9]=g;s[13]=h;s[2]=j;s[6]=l;s[10]=m;s[14]=q;s[3]=p;s[7]=t;s[11]=r;s[15]=n;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},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),h=Math.cos(e),e=Math.sin(e),j=Math.cos(f),f=Math.sin(f);if(void 0===b||"XYZ"===b){var l=g*j,m=g*f,q=d*j,p=d*f;c[0]=h*j;c[4]=-h*f;c[8]=e;c[1]=m+q*e;c[5]=l-p*e;c[9]=-d*h;c[2]=p-l*e;c[6]=q+m*e;c[10]=g*h}else"YXZ"===b?(l=h*j,m=h*f,q=e*j,p=e*f,c[0]=l+p*d,c[4]=q*d-m,c[8]=g*e,c[1]=g*f,c[5]=g*j,c[9]=-d,c[2]=m*d-q,c[6]=p+l*d,c[10]=g*h):"ZXY"===b?(l=h*j,m=h*f,q=e*j,p=e*f,c[0]=l-p*d,c[4]=-g*f,c[8]=q+m*d,c[1]=m+q*d,c[5]=g*j,c[9]=p-l*d,c[2]=-g*e,c[6]= d,c[10]=g*h):"ZYX"===b?(l=g*j,m=g*f,q=d*j,p=d*f,c[0]=h*j,c[4]=q*e-m,c[8]=l*e+p,c[1]=h*f,c[5]=p*e+l,c[9]=m*e-q,c[2]=-e,c[6]=d*h,c[10]=g*h):"YZX"===b?(l=g*h,m=g*e,q=d*h,p=d*e,c[0]=h*j,c[4]=p-l*f,c[8]=q*f+m,c[1]=f,c[5]=g*j,c[9]=-d*j,c[2]=-e*j,c[6]=m*f+q,c[10]=l-p*f):"XZY"===b&&(l=g*h,m=g*e,q=d*h,p=d*e,c[0]=h*j,c[4]=-f,c[8]=e*j,c[1]=l*f+p,c[5]=g*j,c[9]=m*f-q,c[2]=q*f-m,c[6]=d*j,c[10]=p*f+l);return this},setRotationFromQuaternion:function(a){var b=this.elements,c=a.x,d=a.y,e=a.z,f=a.w,g=c+c,h=d+d,j=e+ e;a=c*g;var l=c*h,c=c*j,m=d*h,d=d*j,e=e*j,g=f*g,h=f*h,f=f*j;b[0]=1-(m+e);b[4]=l-f;b[8]=c+h;b[1]=l+f;b[5]=1-(a+e);b[9]=d-g;b[2]=c-h;b[6]=d+g;b[10]=1-(a+m);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();0===g.length()&&(g.z=1);e.cross(c,g).normalize();0===e.length()&&(g.x+=1E-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],h=c[8],j=c[12],l=c[1],m=c[5],q=c[9],p=c[13],t=c[2],r=c[6],n=c[10],s=c[14],x=c[3],v=c[7],A=c[11],c=c[15],u=d[0],L=d[4],H=d[8],C=d[12],z=d[1],E=d[5],D=d[9],J=d[13],X=d[2],G=d[6],S=d[10],B=d[14],K=d[3],N=d[7],W=d[11],d=d[15];e[0]=f*u+g*z+h*X+j*K;e[4]=f*L+g*E+h*G+j*N;e[8]=f*H+g*D+h*S+j*W;e[12]=f*C+g*J+h*B+j*d;e[1]=l*u+m*z+q*X+p*K;e[5]=l*L+m*E+q*G+p*N;e[9]=l*H+m*D+q*S+p*W;e[13]=l*C+m*J+q*B+p*d;e[2]=t*u+r*z+n*X+s*K;e[6]= t*L+r*E+n*G+s*N;e[10]=t*H+r*D+n*S+s*W;e[14]=t*C+r*J+n*B+s*d;e[3]=x*u+v*z+A*X+c*K;e[7]=x*L+v*E+A*G+c*N;e[11]=x*H+v*D+A*S+c*W;e[15]=x*C+v*J+A*B+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,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},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,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],h=a[9],j=a[13],l=a[2],m=a[6],q=a[10],p=a[14];return a[3]*(+e*h*m-d*j*m-e*g*q+c*j*q+d*g*p-c*h*p)+a[7]*(+b*h*p-b*j*q+e*f*q-d*f*p+d*j*l-e*h*l)+a[11]*(+b*j*m-b*g*p-e*f*m+c*f*p+e*g*l-c*j*l)+a[15]*(-d*g*l-b*h*m+b*g*q+d*f*m-c*f*q+c*h*l)},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,b){var c=this.elements,d=a.elements,e=d[0],f=d[4],g=d[8],h=d[12],j=d[1],l=d[5],m=d[9],q=d[13],p=d[2],t=d[6],r=d[10],n=d[14],s=d[3],x=d[7],v=d[11],A=d[15];c[0]=m*n*x-q*r*x+q*t*v-l*n*v-m*t*A+l*r*A;c[4]=h*r*x-g*n*x-h*t*v+f*n*v+g*t*A-f*r*A;c[8]=g*q*x-h*m*x+h*l*v-f*q*v-g*l*A+f*m*A;c[12]=h*m*t-g*q*t-h*l*r+f*q*r+g*l*n-f*m*n;c[1]=q*r*s-m*n*s-q*p*v+j*n*v+m*p*A-j*r*A;c[5]=g*n*s-h*r*s+ h*p*v-e*n*v-g*p*A+e*r*A;c[9]=h*m*s-g*q*s-h*j*v+e*q*v+g*j*A-e*m*A;c[13]=g*q*p-h*m*p+h*j*r-e*q*r-g*j*n+e*m*n;c[2]=l*n*s-q*t*s+q*p*x-j*n*x-l*p*A+j*t*A;c[6]=h*t*s-f*n*s-h*p*x+e*n*x+f*p*A-e*t*A;c[10]=f*q*s-h*l*s+h*j*x-e*q*x-f*j*A+e*l*A;c[14]=h*l*p-f*q*p-h*j*t+e*q*t+f*j*n-e*l*n;c[3]=m*t*s-l*r*s-m*p*x+j*r*x+l*p*v-j*t*v;c[7]=f*r*s-g*t*s+g*p*x-e*r*x-f*p*v+e*t*v;c[11]=g*l*s-f*m*s-g*j*x+e*m*x+f*j*v-e*l*v;c[15]=f*m*p-g*l*p+g*j*t-e*m*t-f*j*r+e*l*r;c=d[0]*c[0]+d[1]*c[4]+d[2]*c[8]+d[3]*c[12];if(0==c){if(b)throw Error("Matrix4.getInverse(): can't invert matrix, determinant is 0"); console.warn("Matrix4.getInverse(): can't invert matrix, determinant is 0");this.identity();return this}this.multiplyScalar(1/c);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);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]/=c.x;d.elements[1]/=c.x;d.elements[2]/=c.x;d.elements[4]/=c.y;d.elements[5]/=c.y;d.elements[6]/=c.y;d.elements[8]/=c.z;d.elements[9]/=c.z;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;var 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],h=b[9],j=b[10],l=b[11],m=Math.cos(a);a=Math.sin(a);b[4]=m*c+a*g;b[5]=m*d+a*h;b[6]=m*e+a*j;b[7]=m*f+a*l;b[8]=m*g-a*c;b[9]=m*h-a*d;b[10]=m*j-a*e;b[11]=m*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],h=b[9],j=b[10],l=b[11],m=Math.cos(a);a=Math.sin(a);b[0]=m*c-a*g;b[1]=m*d-a*h;b[2]=m*e- a*j;b[3]=m*f-a*l;b[8]=m*g+a*c;b[9]=m*h+a*d;b[10]=m*j+a*e;b[11]=m*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],h=b[5],j=b[6],l=b[7],m=Math.cos(a);a=Math.sin(a);b[0]=m*c+a*g;b[1]=m*d+a*h;b[2]=m*e+a*j;b[3]=m*f+a*l;b[4]=m*g-a*c;b[5]=m*h-a*d;b[6]=m*j-a*e;b[7]=m*l-a*f;return this},rotateByAxis:function(a,b){var c=this.elements;if(1===a.x&&0===a.y&&0===a.z)return this.rotateX(b);if(0===a.x&&1===a.y&&0===a.z)return this.rotateY(b);if(0===a.x&&0===a.y&&1=== a.z)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,h=e*e,j=f*f,l=Math.cos(b),m=Math.sin(b),q=1-l,p=d*e*q,t=d*f*q,q=e*f*q,d=d*m,r=e*m,m=f*m,f=g+(1-g)*l,g=p+m,e=t-r,p=p-m,h=h+(1-h)*l,m=q+d,t=t+r,q=q-d,j=j+(1-j)*l,l=c[0],d=c[1],r=c[2],n=c[3],s=c[4],x=c[5],v=c[6],A=c[7],u=c[8],L=c[9],H=c[10],C=c[11];c[0]=f*l+g*s+e*u;c[1]=f*d+g*x+e*L;c[2]=f*r+g*v+e*H;c[3]=f*n+g*A+e*C;c[4]=p*l+h*s+m*u;c[5]=p*d+h*x+m*L;c[6]=p*r+h*v+m*H;c[7]=p*n+h*A+m*C;c[8]=t*l+q*s+j*u;c[9]= t*d+q*x+j*L;c[10]=t*r+q*v+j*H;c[11]=t*n+q*A+j*C;return this},scale:function(a){var b=this.elements,c=a.x,d=a.y;a=a.z;b[0]*=c;b[4]*=d;b[8]*=a;b[1]*=c;b[5]*=d;b[9]*=a;b[2]*=c;b[6]*=d;b[10]*=a;b[3]*=c;b[7]*=d;b[11]*=a;return this},getMaxScaleOnAxis:function(){var a=this.elements;return Math.sqrt(Math.max(a[0]*a[0]+a[1]*a[1]+a[2]*a[2],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){this.set(1,0,0,a.x,0,1,0,a.y,0,0,1,a.z,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,h=a.z,j=e*f,l=e*g;this.set(j*f+c,j*g-d*h,j*h+d*g,0,j*g+d*h,l*g+c,l*h-d*f,0,j*h-d*g,l*h+d*f,e*h*h+c,0,0,0,0,1); return this},makeScale:function(a){this.set(a.x,0,0,0,0,a.y,0,0,0,0,a.z,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){a=c*Math.tan(THREE.Math.degToRad(0.5*a));var 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,h=b-a,j=c-d,l=f-e;g[0]=2/h;g[4]=0;g[8]=0;g[12]=-((b+a)/h);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.Ray=function(a,b){this.origin=void 0!==a?a.clone():new THREE.Vector3;this.direction=void 0!==b?b.clone():new THREE.Vector3}; THREE.Ray.prototype={constructor:THREE.Ray,set:function(a,b){this.origin.copy(a);this.direction.copy(b);return this},copy:function(a){this.origin.copy(a.origin);this.direction.copy(a.direction);return this},at:function(a,b){return(b||new THREE.Vector3).copy(this.direction).multiplyScalar(a).addSelf(this.origin)},recastSelf:function(a){this.origin.copy(this.at(a,THREE.Ray.__v1));return this},closestPointToPoint:function(a,b){var c=b||new THREE.Vector3;c.sub(a,this.origin);var d=c.dot(this.direction); return c.copy(this.direction).multiplyScalar(d).addSelf(this.origin)},distanceToPoint:function(a){var b=THREE.Ray.__v1.sub(a,this.origin).dot(this.direction);THREE.Ray.__v1.copy(this.direction).multiplyScalar(b).addSelf(this.origin);return THREE.Ray.__v1.distanceTo(a)},isIntersectionSphere:function(a){return this.distanceToPoint(a.center)<=a.radius},isIntersectionPlane:function(a){return 0!=a.normal.dot(this.direction)||0==a.distanceToPoint(this.origin)?!0:!1},distanceToPlane:function(a){var b=a.normal.dot(this.direction); if(0==b){if(0==a.distanceToPoint(this.origin))return 0}else return-(this.origin.dot(a.normal)+a.constant)/b},intersectPlane:function(a,b){var c=this.distanceToPlane(a);return void 0===c?void 0:this.at(c,b)},transform:function(a){this.direction=a.multiplyVector3(this.direction.addSelf(this.origin));this.origin=a.multiplyVector3(this.origin);this.direction.subSelf(this.origin);return this},equals:function(a){return a.origin.equals(this.origin)&&a.direction.equals(this.direction)},clone:function(){return(new THREE.Ray).copy(this)}}; THREE.Ray.__v1=new THREE.Vector3;THREE.Ray.__v2=new THREE.Vector3;THREE.Frustum=function(){this.planes=[new THREE.Plane,new THREE.Plane,new THREE.Plane,new THREE.Plane,new THREE.Plane,new THREE.Plane]}; THREE.Frustum.prototype.setFromMatrix=function(a){var b=this.planes,c=a.elements;a=c[0];var d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],j=c[6],l=c[7],m=c[8],q=c[9],p=c[10],t=c[11],r=c[12],n=c[13],s=c[14],c=c[15];b[0].setComponents(f-a,l-g,t-m,c-r);b[1].setComponents(f+a,l+g,t+m,c+r);b[2].setComponents(f+d,l+h,t+q,c+n);b[3].setComponents(f-d,l-h,t-q,c-n);b[4].setComponents(f-e,l-j,t-p,c-s);b[5].setComponents(f+e,l+j,t+p,c+s);for(a=0;6>a;a++)b[a].normalize()}; THREE.Frustum.prototype.contains=function(a){var b=this.planes,c=a.matrixWorld,d=c.getPosition();a=-a.geometry.boundingSphere.radius*c.getMaxScaleOnAxis();for(var e=c=0;6>e;e++)if(c=b[e].distanceToPoint(d),c<=a)return!1;return!0};THREE.Frustum.__v1=new THREE.Vector3;THREE.Plane=function(a,b){this.normal=void 0!==a?a.clone():new THREE.Vector3(1,0,0);this.constant=void 0!==b?b:0}; THREE.Plane.prototype={constructor:THREE.Plane,set:function(a,b){this.normal.copy(a);this.constant=b;return this},setComponents:function(a,b,c,d){this.normal.set(a,b,c);this.constant=d;return this},setFromNormalAndCoplanarPoint:function(a,b){this.normal.copy(a).normalize();this.constant=-b.dot(this.normal);return this},setFromCoplanarPoints:function(a,b,c){b=THREE.Plane.__v1.sub(c,b).crossSelf(THREE.Plane.__v2.sub(a,b)).normalize();this.setFromNormalAndCoplanarPoint(b,a);return this},copy:function(a){this.normal.copy(a.normal); this.constant=a.constant;return this},normalize:function(){var a=1/this.normal.length();this.normal.multiplyScalar(a);this.constant*=a;return this},distanceToPoint:function(a){return this.normal.dot(a)+this.constant},distanceToSphere:function(a){return this.distanceToPoint(a.center)-a.radius},projectPoint:function(a,b){return this.orthoPoint(a,b).subSelf(a).negate()},orthoPoint:function(a,b){var c=this.distanceToPoint(a);return(b||new THREE.Vector3).copy(this.normal).multiplyScalar(c)},isIntersectionLine:function(a, b){var c=this.distanceToPoint(a),d=this.distanceToPoint(b);return 0>c&&0<d||0>d&&0<c},intersectLine:function(a,b,c){c=c||new THREE.Vector3;b=THREE.Plane.__v1.sub(b,a);var d=this.normal.dot(b);if(0==d){if(0==this.distanceToPoint(a))return c.copy(a)}else return d=-(a.dot(this.normal)+this.constant)/d,0>d||1<d?void 0:c.copy(b).multiplyScalar(d).addSelf(a)},coplanarPoint:function(a){return(a||new THREE.Vector3).copy(this.normal).multiplyScalar(-this.constant)},transform:function(a,b){var c=THREE.Plane.__v1, d=THREE.Plane.__v2;b=b||(new THREE.Matrix3).getInverse(a).transpose();c=b.multiplyVector3(c.copy(this.normal));d=this.coplanarPoint(d);d=a.multiplyVector3(d);this.setFromNormalAndCoplanarPoint(c,d);return this},translate:function(a){this.constant-=a.dot(this.normal);return this},equals:function(a){return a.normal.equals(this.normal)&&a.constant==this.constant},clone:function(){return(new THREE.Plane).copy(this)}};THREE.Plane.__vZero=new THREE.Vector3(0,0,0);THREE.Plane.__v1=new THREE.Vector3; THREE.Plane.__v2=new THREE.Vector3;THREE.Sphere=function(a,b){this.center=void 0===a?new THREE.Vector3:a.clone();this.radius=void 0===b?0:b}; THREE.Sphere.prototype={constructor:THREE.Sphere,set:function(a,b){this.center.copy(a);this.radius=b;return this},setFromCenterAndPoints:function(a,b){for(var c=0,d=0,e=b.length;d<e;d++)var f=a.distanceToSquared(b[d]),c=Math.max(c,f);this.center=a;this.radius=Math.sqrt(c);return this},copy:function(a){this.center.copy(a.center);this.radius=a.radius;return this},empty:function(){return 0>=this.radius},containsPoint:function(a){return a.distanceToSquared(this.center)<=this.radius*this.radius},distanceToPoint:function(a){return a.distanceTo(this.center)- this.radius},clampPoint:function(a,b){var c=this.center.distanceToSquared(a),d=b||new THREE.Vector3;d.copy(a);c>this.radius*this.radius&&(d.subSelf(this.center).normalize(),d.multiplyScalar(this.radius).addSelf(this.center));return d},getBoundingBox:function(a){a=a||new THREE.Box3;a.set(this.center,this.center);a.expandByScalar(this.radius);return a},transform:function(a){this.center=a.multiplyVector3(this.center);this.radius*=a.getMaxScaleOnAxis();return this},translate:function(a){this.center.addSelf(a); return this},equals:function(a){return a.center.equals(this.center)&&a.radius===this.radius},clone:function(){return(new THREE.Sphere).copy(this)}};THREE.Math={clamp:function(a,b,c){return a<b?b:a>c?c:a},clampBottom:function(a,b){return a<b?b:a},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},random16:function(){return(65280*Math.random()+255*Math.random())/65535},randInt:function(a,b){return a+Math.floor(Math.random()*(b-a+1))},randFloat:function(a,b){return a+Math.random()*(b-a)},randFloatSpread:function(a){return a*(0.5-Math.random())},sign:function(a){return 0>a?-1:0<a?1:0},degToRad:function(a){return a*THREE.Math.__d2r},radToDeg:function(a){return a* THREE.Math.__r2d}};THREE.Math.__d2r=Math.PI/180;THREE.Math.__r2d=180/Math.PI;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),e=Math.cos(a.z/2),f=Math.sin(a.x/2),g=Math.sin(a.y/2),h=Math.sin(a.z/2);void 0===b||"XYZ"===b?(this.x=f*d*e+c*g*h,this.y=c*g*e-f*d*h,this.z=c*d*h+f*g*e,this.w=c*d*e-f*g*h):"YXZ"===b?(this.x=f*d*e+c*g*h,this.y=c*g*e-f*d*h,this.z=c*d* h-f*g*e,this.w=c*d*e+f*g*h):"ZXY"===b?(this.x=f*d*e-c*g*h,this.y=c*g*e+f*d*h,this.z=c*d*h+f*g*e,this.w=c*d*e-f*g*h):"ZYX"===b?(this.x=f*d*e-c*g*h,this.y=c*g*e+f*d*h,this.z=c*d*h-f*g*e,this.w=c*d*e+f*g*h):"YZX"===b?(this.x=f*d*e+c*g*h,this.y=c*g*e+f*d*h,this.z=c*d*h-f*g*e,this.w=c*d*e-f*g*h):"XZY"===b&&(this.x=f*d*e-c*g*h,this.y=c*g*e-f*d*h,this.z=c*d*h+f*g*e,this.w=c*d*e+f*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); return this},setFromRotationMatrix:function(a){var b=a.elements,c=b[0];a=b[4];var d=b[8],e=b[1],f=b[5],g=b[9],h=b[2],j=b[6],b=b[10],l=c+f+b;0<l?(c=0.5/Math.sqrt(l+1),this.w=0.25/c,this.x=(j-g)*c,this.y=(d-h)*c,this.z=(e-a)*c):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+h)/c):f>b?(c=2*Math.sqrt(1+f-c-b),this.w=(d-h)/c,this.x=(a+e)/c,this.y=0.25*c,this.z=(g+j)/c):(c=2*Math.sqrt(1+b-c-f),this.w=(e-a)/c,this.x=(d+h)/c,this.y=(g+j)/c,this.z=0.25*c);return this}, inverse:function(){this.conjugate().normalize();return this},conjugate:function(){this.x*=-1;this.y*=-1;this.z*=-1;return this},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},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=this.length();0===a?(this.z=this.y=this.x=0,this.w=1):(a=1/a,this.x*=a,this.y*=a,this.z*=a,this.w*=a);return this},multiply:function(a,b){this.copy(a);return this.multiplySelf(b)}, multiplySelf:function(a){var b=this.x,c=this.y,d=this.z,e=this.w,f=a.x,g=a.y,h=a.z;a=a.w;this.x=b*a+e*f+c*h-d*g;this.y=c*a+e*g+d*f-b*h;this.z=d*a+e*h+b*g-c*f;this.w=e*a-b*f-c*g-d*h;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,h=this.z,j=this.w,l=j*c+g*e-h*d,m=j*d+h*c-f*e,q=j*e+f*d-g*c,c=-f*c-g*d-h*e;b.x=l*j+c*-f+m*-h-q*-g;b.y=m*j+c*-g+q*-f-l*-h;b.z=q*j+c*-h+l*-g-m*-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;0>g?(this.w=-a.w,this.x=-a.x,this.y=-a.y,this.z=-a.z,g=-g):this.copy(a);if(1<=g)return this.w=f,this.x=c,this.y=d,this.z=e,this;var h=Math.acos(g),j=Math.sqrt(1-g*g);if(0.001>Math.abs(j))return 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),this;g=Math.sin((1-b)*h)/j;h=Math.sin(b*h)/j;this.w=f*g+this.w*h;this.x=c*g+this.x*h;this.y=d*g+this.y*h;this.z=e*g+this.z*h;return this},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z&& a.w===this.w},clone:function(){return new THREE.Quaternion(this.x,this.y,this.z,this.w)}};THREE.Quaternion.slerp=function(a,b,c,d){return c.copy(a).slerpSelf(b,d)};THREE.Spline=function(a){function b(a,b,c,d,e,f,g){a=0.5*(c-a);d=0.5*(d-b);return(2*(b-c)+a+d)*g+(-3*(b-c)-2*a-d)*f+a*e+b}this.points=a;var c=[],d={x:0,y:0,z:0},e,f,g,h,j,l,m,q,p;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){e=(this.points.length-1)*a;f=Math.floor(e);g=e-f;c[0]=0===f?f:f-1;c[1]=f;c[2]=f>this.points.length-2?this.points.length-1:f+1;c[3]=f>this.points.length-3?this.points.length-1: f+2;l=this.points[c[0]];m=this.points[c[1]];q=this.points[c[2]];p=this.points[c[3]];h=g*g;j=g*h;d.x=b(l.x,m.x,q.x,p.x,g,h,j);d.y=b(l.y,m.y,q.y,p.y,g,h,j);d.z=b(l.z,m.z,q.z,p.z,g,h,j);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,e=b=b=0,f=new THREE.Vector3,g=new THREE.Vector3,h=[],j=0;h[0]=0;a||(a=100);c=this.points.length*a;f.copy(this.points[0]);for(a=1;a<c;a++)b= a/c,d=this.getPoint(b),g.copy(d),j+=g.distanceTo(f),f.copy(d),b*=this.points.length-1,b=Math.floor(b),b!=e&&(h[b]=j,e=b);h[h.length]=j;return{chunks:h,total:j}};this.reparametrizeByArcLength=function(a){var b,c,d,e,f,g,h=[],j=new THREE.Vector3,l=this.getLength();h.push(j.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);e=(b-1)/(this.points.length-1);f=b/(this.points.length-1);for(c=1;c<g-1;c++)d=e+c*(1/g)*(f-e),d=this.getPoint(d), h.push(j.copy(d).clone());h.push(j.copy(this.points[b]).clone())}this.points=h}};THREE.Triangle=function(a,b,c){this.a=new THREE.Vector3;this.b=new THREE.Vector3;this.c=new THREE.Vector3;void 0!==a&&(void 0!==b&&void 0!==c)&&(this.a.copy(a),this.b.copy(b),this.c.copy(c))};THREE.Triangle.normal=function(a,b,c,d){d=d||new THREE.Vector3;d.sub(c,b);THREE.Triangle.__v0.sub(a,b);d.crossSelf(THREE.Triangle.__v0);a=d.lengthSq();return 0<a?d.multiplyScalar(1/Math.sqrt(a)):d.set(0,0,0)}; THREE.Triangle.barycoordFromPoint=function(a,b,c,d,e){THREE.Triangle.__v0.sub(d,b);THREE.Triangle.__v1.sub(c,b);THREE.Triangle.__v2.sub(a,b);a=THREE.Triangle.__v0.dot(THREE.Triangle.__v0);b=THREE.Triangle.__v0.dot(THREE.Triangle.__v1);c=THREE.Triangle.__v0.dot(THREE.Triangle.__v2);var f=THREE.Triangle.__v1.dot(THREE.Triangle.__v1);d=THREE.Triangle.__v1.dot(THREE.Triangle.__v2);var g=a*f-b*b;e=e||new THREE.Vector3;if(0==g)return e.set(-2,-1,-1);g=1/g;f=(f*c-b*d)*g;a=(a*d-b*c)*g;return e.set(1-f-a, a,f)};THREE.Triangle.containsPoint=function(a,b,c,d){a=THREE.Triangle.barycoordFromPoint(a,b,c,d,THREE.Triangle.__v3);return 0<=a.x&&0<=a.y&&1>=a.x+a.y}; THREE.Triangle.prototype={constructor:THREE.Triangle,set:function(a,b,c){this.a.copy(a);this.b.copy(b);this.c.copy(c);return this},setFromPointsAndIndices:function(a,b,c,d){this.a.copy(a[b]);this.b.copy(a[c]);this.c.copy(a[d]);return this},copy:function(a){this.a.copy(a.a);this.b.copy(a.b);this.c.copy(a.c);return this},area:function(){THREE.Triangle.__v0.sub(this.c,this.b);THREE.Triangle.__v1.sub(this.a,this.b);return 0.5*THREE.Triangle.__v0.crossSelf(THREE.Triangle.__v1).length()},midpoint:function(a){return(a|| new THREE.Vector3).add(this.a,this.b).addSelf(this.c).multiplyScalar(1/3)},normal:function(a){return THREE.Triangle.normal(this.a,this.b,this.c,a)},plane:function(a){return(a||new THREE.Plane).setFromCoplanarPoints(this.a,this.b,this.c)},barycoordFromPoint:function(a,b){return THREE.Triangle.barycoordFromPoint(a,this.a,this.b,this.c,b)},containsPoint:function(a){return THREE.Triangle.containsPoint(a,this.a,this.b,this.c)},equals:function(a){return a.a.equals(this.a)&&a.b.equals(this.b)&&a.c.equals(this.c)}, clone:function(){return(new THREE.Triangle).copy(this)}};THREE.Triangle.__v0=new THREE.Vector3;THREE.Triangle.__v1=new THREE.Vector3;THREE.Triangle.__v2=new THREE.Vector3;THREE.Triangle.__v3=new THREE.Vector3;THREE.Vertex=function(a){console.warn("THREE.Vertex has been DEPRECATED. Use THREE.Vector3 instead.");return a};THREE.UV=function(a,b){console.warn("THREE.UV has been DEPRECATED. Use THREE.Vector2 instead.");return new THREE.Vector2(a,b)};THREE.Clock=function(a){this.autoStart=void 0!==a?a:!0;this.elapsedTime=this.oldTime=this.startTime=0;this.running=!1};THREE.Clock.prototype.start=function(){this.oldTime=this.startTime=Date.now();this.running=!0};THREE.Clock.prototype.stop=function(){this.getElapsedTime();this.running=!1};THREE.Clock.prototype.getElapsedTime=function(){this.getDelta();return this.elapsedTime}; THREE.Clock.prototype.getDelta=function(){var a=0;this.autoStart&&!this.running&&this.start();if(this.running){var b=Date.now(),a=0.001*(b-this.oldTime);this.oldTime=b;this.elapsedTime+=a}return a};THREE.EventDispatcher=function(){var a={};this.addEventListener=function(b,c){void 0===a[b]&&(a[b]=[]);-1===a[b].indexOf(c)&&a[b].push(c)};this.removeEventListener=function(b,c){var d=a[b].indexOf(c);-1!==d&&a[b].splice(d,1)};this.dispatchEvent=function(b){var c=a[b.type];if(void 0!==c){b.target=this;for(var d=0,e=c.length;d<e;d++)c[d].call(this,b)}}};(function(a){a.Raycaster=function(b,c,d,e){this.ray=new a.Ray(b,c);0<this.ray.direction.length()&&this.ray.direction.normalize();this.near=d||0;this.far=e||Infinity};var b=new a.Sphere,c=new a.Ray,d=new a.Plane,e=new a.Vector3,f=new a.Matrix4,g=function(a,b){return a.distance-b.distance};new a.Vector3;new a.Vector3;new a.Vector3;var h=function(g,h,j){if(g instanceof a.Particle){h=h.ray.distanceToPoint(g.matrixWorld.getPosition());if(h>g.scale.x)return j;j.push({distance:h,point:g.position,face:null, object:g})}else if(g instanceof a.Mesh){b.set(g.matrixWorld.getPosition(),g.geometry.boundingSphere.radius*g.matrixWorld.getMaxScaleOnAxis());if(!h.ray.isIntersectionSphere(b))return j;var p=g.geometry,t=p.vertices,r=g.material instanceof a.MeshFaceMaterial,n=!0===r?g.material.materials:null,s=g.material.side,x,v,A,u=h.precision;g.matrixRotationWorld.extractRotation(g.matrixWorld);f.getInverse(g.matrixWorld);c.copy(h.ray).transform(f);for(var L=0,H=p.faces.length;L<H;L++){var C=p.faces[L],s=!0=== r?n[C.materialIndex]:g.material;if(void 0!==s){d.setFromNormalAndCoplanarPoint(C.normal,t[C.a]);var z=c.distanceToPlane(d);if(!(Math.abs(z)<u)&&!(0>z)){s=s.side;if(s!==a.DoubleSide&&(x=c.direction.dot(d.normal),!(s===a.FrontSide?0>x:0<x)))continue;if(!(z<h.near||z>h.far)){e=c.at(z,e);if(C instanceof a.Face3){if(s=t[C.a],x=t[C.b],v=t[C.c],!a.Triangle.containsPoint(e,s,x,v))continue}else if(C instanceof a.Face4){if(s=t[C.a],x=t[C.b],v=t[C.c],A=t[C.d],!a.Triangle.containsPoint(e,s,x,A)&&!a.Triangle.containsPoint(e, x,v,A))continue}else throw Error("face type not supported");j.push({distance:z,point:h.ray.at(z),face:C,faceIndex:L,object:g})}}}}}},j=function(a,b,c){a=a.getDescendants();for(var d=0,e=a.length;d<e;d++)h(a[d],b,c)};a.Raycaster.prototype.precision=1E-4;a.Raycaster.prototype.set=function(a,b){this.ray.set(a,b);0<this.ray.direction.length()&&this.ray.direction.normalize()};a.Raycaster.prototype.intersectObject=function(a,b){var c=[];!0===b&&j(a,this,c);h(a,this,c);c.sort(g);return c};a.Raycaster.prototype.intersectObjects= function(a,b){for(var c=[],d=0,e=a.length;d<e;d++)h(a[d],this,c),!0===b&&j(a[d],this,c);c.sort(g);return c}})(THREE);THREE.Object3D=function(){this.id=THREE.Object3DIdCount++;this.name="";this.properties={};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=THREE.Object3D.defaultEulerOrder;this.scale=new THREE.Vector3(1,1,1);this.renderDepth=null;this.rotationAutoUpdate=!0;this.matrix=new THREE.Matrix4;this.matrixWorld=new THREE.Matrix4;this.matrixRotationWorld=new THREE.Matrix4;this.matrixWorldNeedsUpdate=this.matrixAutoUpdate= !0;this.quaternion=new THREE.Quaternion;this.useQuaternion=!1;this.visible=!0;this.receiveShadow=this.castShadow=!1;this.frustumCulled=!0;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);a=(new THREE.Matrix4).extractRotation(this.matrix);this.rotation.setEulerFromRotationMatrix(a,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))},localToWorld:function(a){return this.matrixWorld.multiplyVector3(a)},worldToLocal:function(a){return THREE.Object3D.__m1.getInverse(this.matrixWorld).multiplyVector3(a)},lookAt:function(a){this.matrix.lookAt(a,this.position,this.up);this.rotationAutoUpdate&&(!1===this.useQuaternion?this.rotation.setEulerFromRotationMatrix(this.matrix,this.eulerOrder):this.quaternion.copy(this.matrix.decompose()[1]))},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){void 0!==a.parent&&a.parent.remove(a);a.parent=this;this.children.push(a);for(var b=this;void 0!==b.parent;)b=b.parent;void 0!==b&&b instanceof THREE.Scene&&b.__addObject(a)}},remove:function(a){var b=this.children.indexOf(a);if(-1!==b){a.parent=void 0;this.children.splice(b,1);for(b=this;void 0!==b.parent;)b=b.parent;void 0!==b&&b instanceof THREE.Scene&&b.__removeObject(a)}}, traverse:function(a){a(this);for(var b=0,c=this.children.length;b<c;b++)this.children[b].traverse(a)},getChildByName:function(a,b){for(var c=0,d=this.children.length;c<d;c++){var e=this.children[c];if(e.name===a||!0===b&&(e=e.getChildByName(a,b),void 0!==e))return e}},getDescendants:function(a){void 0===a&&(a=[]);Array.prototype.push.apply(a,this.children);for(var b=0,c=this.children.length;b<c;b++)this.children[b].getDescendants(a);return a},updateMatrix:function(){this.matrix.setPosition(this.position); !1===this.useQuaternion?this.matrix.setRotationFromEuler(this.rotation,this.eulerOrder):this.matrix.setRotationFromQuaternion(this.quaternion);(1!==this.scale.x||1!==this.scale.y||1!==this.scale.z)&&this.matrix.scale(this.scale);this.matrixWorldNeedsUpdate=!0},updateMatrixWorld:function(a){!0===this.matrixAutoUpdate&&this.updateMatrix();if(!0===this.matrixWorldNeedsUpdate||!0===a)void 0===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiply(this.parent.matrixWorld,this.matrix), this.matrixWorldNeedsUpdate=!1,a=!0;for(var b=0,c=this.children.length;b<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.visible=this.visible;a.castShadow=this.castShadow;a.receiveShadow=this.receiveShadow;a.frustumCulled=this.frustumCulled;for(var b=0;b<this.children.length;b++)a.add(this.children[b].clone());return a}};THREE.Object3D.__m1=new THREE.Matrix4;THREE.Object3D.defaultEulerOrder="XYZ";THREE.Object3DIdCount=0;THREE.Projector=function(){function a(){if(f===h){var a=new THREE.RenderableObject;g.push(a);h++;f++;return a}return g[f++]}function b(){if(l===q){var a=new THREE.RenderableVertex;m.push(a);q++;l++;return a}return m[l++]}function c(a,b){return b.z-a.z}function d(a,b){var c=0,d=1,e=a.z+a.w,f=b.z+b.w,g=-a.z+a.w,h=-b.z+b.w;if(0<=e&&0<=f&&0<=g&&0<=h)return!0;if(0>e&&0>f||0>g&&0>h)return!1;0>e?c=Math.max(c,e/(e-f)):0>f&&(d=Math.min(d,e/(e-f)));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 e,f,g=[],h=0,j,l,m=[],q=0,p,t,r=[],n=0,s,x=[],v=0,A,u,L=[],H=0,C,z,E=[],D=0,J={objects:[],sprites:[],lights:[],elements:[]},X=new THREE.Vector3,G=new THREE.Vector4,S=new THREE.Matrix4,B=new THREE.Matrix4,K,N=new THREE.Matrix4,W=new THREE.Matrix3,T=new THREE.Matrix3,da=new THREE.Vector3,la=new THREE.Frustum,M=new THREE.Vector4,ja=new THREE.Vector4;this.projectVector=function(a,b){b.matrixWorldInverse.getInverse(b.matrixWorld);B.multiply(b.projectionMatrix, b.matrixWorldInverse);B.multiplyVector3(a);return a};this.unprojectVector=function(a,b){b.projectionMatrixInverse.getInverse(b.projectionMatrix);B.multiply(b.matrixWorld,b.projectionMatrixInverse);B.multiplyVector3(a);return a};this.pickingRay=function(a,b){a.z=-1;var c=new THREE.Vector3(a.x,a.y,1);this.unprojectVector(a,b);this.unprojectVector(c,b);c.subSelf(a).normalize();return new THREE.Raycaster(a,c)};this.projectScene=function(g,h,q,I){var ia=h.near,oa=h.far,ka=!1,ua,V,aa,wa,Na,Ba,za,sa,Ea, ub,Fa,jb,qb;z=u=s=t=0;J.elements.length=0;g.updateMatrixWorld();void 0===h.parent&&h.updateMatrixWorld();S.getInverse(h.matrixWorld);B.multiply(h.projectionMatrix,S);T.getInverse(S);T.transpose();la.setFromMatrix(B);f=0;J.objects.length=0;J.sprites.length=0;J.lights.length=0;var kb=function(b){for(var c=0,d=b.children.length;c<d;c++){var f=b.children[c];if(!1!==f.visible){if(f instanceof THREE.Light)J.lights.push(f);else if(f instanceof THREE.Mesh||f instanceof THREE.Line){if(!1===f.frustumCulled|| !0===la.contains(f))e=a(),e.object=f,null!==f.renderDepth?e.z=f.renderDepth:(X.copy(f.matrixWorld.getPosition()),B.multiplyVector3(X),e.z=X.z),J.objects.push(e)}else f instanceof THREE.Sprite||f instanceof THREE.Particle?(e=a(),e.object=f,null!==f.renderDepth?e.z=f.renderDepth:(X.copy(f.matrixWorld.getPosition()),B.multiplyVector3(X),e.z=X.z),J.sprites.push(e)):(e=a(),e.object=f,null!==f.renderDepth?e.z=f.renderDepth:(X.copy(f.matrixWorld.getPosition()),B.multiplyVector3(X),e.z=X.z),J.objects.push(e)); kb(f)}}};kb(g);!0===q&&J.objects.sort(c);g=0;for(q=J.objects.length;g<q;g++)if(sa=J.objects[g].object,K=sa.matrixWorld,l=0,sa instanceof THREE.Mesh){Ea=sa.geometry;aa=Ea.vertices;ub=Ea.faces;Ea=Ea.faceVertexUvs;W.getInverse(K);W.transpose();jb=sa.material instanceof THREE.MeshFaceMaterial;qb=!0===jb?sa.material:null;ua=0;for(V=aa.length;ua<V;ua++)j=b(),j.positionWorld.copy(aa[ua]),K.multiplyVector3(j.positionWorld),j.positionScreen.copy(j.positionWorld),B.multiplyVector4(j.positionScreen),j.positionScreen.x/= j.positionScreen.w,j.positionScreen.y/=j.positionScreen.w,j.visible=j.positionScreen.z>ia&&j.positionScreen.z<oa;aa=0;for(ua=ub.length;aa<ua;aa++){V=ub[aa];var Pb=!0===jb?qb.materials[V.materialIndex]:sa.material;if(void 0!==Pb){Ba=Pb.side;if(V instanceof THREE.Face3)if(wa=m[V.a],Na=m[V.b],za=m[V.c],!0===wa.visible&&!0===Na.visible&&!0===za.visible)if(ka=0>(za.positionScreen.x-wa.positionScreen.x)*(Na.positionScreen.y-wa.positionScreen.y)-(za.positionScreen.y-wa.positionScreen.y)*(Na.positionScreen.x- wa.positionScreen.x),Ba===THREE.DoubleSide||ka===(Ba===THREE.FrontSide))t===n?(Fa=new THREE.RenderableFace3,r.push(Fa),n++,t++,p=Fa):p=r[t++],p.v1.copy(wa),p.v2.copy(Na),p.v3.copy(za);else continue;else continue;else if(V instanceof THREE.Face4)if(wa=m[V.a],Na=m[V.b],za=m[V.c],Fa=m[V.d],!0===wa.visible&&!0===Na.visible&&!0===za.visible&&!0===Fa.visible)if(ka=0>(Fa.positionScreen.x-wa.positionScreen.x)*(Na.positionScreen.y-wa.positionScreen.y)-(Fa.positionScreen.y-wa.positionScreen.y)*(Na.positionScreen.x- wa.positionScreen.x)||0>(Na.positionScreen.x-za.positionScreen.x)*(Fa.positionScreen.y-za.positionScreen.y)-(Na.positionScreen.y-za.positionScreen.y)*(Fa.positionScreen.x-za.positionScreen.x),Ba===THREE.DoubleSide||ka===(Ba===THREE.FrontSide)){if(s===v){var ob=new THREE.RenderableFace4;x.push(ob);v++;s++;p=ob}else p=x[s++];p.v1.copy(wa);p.v2.copy(Na);p.v3.copy(za);p.v4.copy(Fa)}else continue;else continue;p.normalModel.copy(V.normal);!1===ka&&(Ba===THREE.BackSide||Ba===THREE.DoubleSide)&&p.normalModel.negate(); W.multiplyVector3(p.normalModel);p.normalModel.normalize();p.normalModelView.copy(p.normalModel);T.multiplyVector3(p.normalModelView);p.centroidModel.copy(V.centroid);K.multiplyVector3(p.centroidModel);za=V.vertexNormals;wa=0;for(Na=za.length;wa<Na;wa++)Fa=p.vertexNormalsModel[wa],Fa.copy(za[wa]),!1===ka&&(Ba===THREE.BackSide||Ba===THREE.DoubleSide)&&Fa.negate(),W.multiplyVector3(Fa),Fa.normalize(),ob=p.vertexNormalsModelView[wa],ob.copy(Fa),T.multiplyVector3(ob);p.vertexNormalsLength=za.length;Ba= 0;for(wa=Ea.length;Ba<wa;Ba++)if(Fa=Ea[Ba][aa],void 0!==Fa){Na=0;for(za=Fa.length;Na<za;Na++)p.uvs[Ba][Na]=Fa[Na]}p.color=V.color;p.material=Pb;da.copy(p.centroidModel);B.multiplyVector3(da);p.z=da.z;J.elements.push(p)}}}else if(sa instanceof THREE.Line){N.multiply(B,K);aa=sa.geometry.vertices;wa=b();wa.positionScreen.copy(aa[0]);N.multiplyVector4(wa.positionScreen);ub=sa.type===THREE.LinePieces?2:1;ua=1;for(V=aa.length;ua<V;ua++)wa=b(),wa.positionScreen.copy(aa[ua]),N.multiplyVector4(wa.positionScreen), 0<(ua+1)%ub||(Na=m[l-2],M.copy(wa.positionScreen),ja.copy(Na.positionScreen),!0===d(M,ja)&&(M.multiplyScalar(1/M.w),ja.multiplyScalar(1/ja.w),u===H?(Ea=new THREE.RenderableLine,L.push(Ea),H++,u++,A=Ea):A=L[u++],A.v1.positionScreen.copy(M),A.v2.positionScreen.copy(ja),A.z=Math.max(M.z,ja.z),A.material=sa.material,J.elements.push(A)))}g=0;for(q=J.sprites.length;g<q;g++)sa=J.sprites[g].object,K=sa.matrixWorld,sa instanceof THREE.Particle&&(G.set(K.elements[12],K.elements[13],K.elements[14],1),B.multiplyVector4(G), G.z/=G.w,0<G.z&&1>G.z&&(z===D?(ia=new THREE.RenderableParticle,E.push(ia),D++,z++,C=ia):C=E[z++],C.object=sa,C.x=G.x/G.w,C.y=G.y/G.w,C.z=G.z,C.rotation=sa.rotation.z,C.scale.x=sa.scale.x*Math.abs(C.x-(G.x+h.projectionMatrix.elements[0])/(G.w+h.projectionMatrix.elements[12])),C.scale.y=sa.scale.y*Math.abs(C.y-(G.y+h.projectionMatrix.elements[5])/(G.w+h.projectionMatrix.elements[13])),C.material=sa.material,J.elements.push(C)));!0===I&&J.elements.sort(c);return J}};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=void 0!==f?f:0;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;b<c;b++)a.vertexNormals[b]=this.vertexNormals[b].clone();b=0;for(c=this.vertexColors.length;b<c;b++)a.vertexColors[b]=this.vertexColors[b].clone();b=0;for(c=this.vertexTangents.length;b<c;b++)a.vertexTangents[b]=this.vertexTangents[b].clone(); return a}};THREE.Face4=function(a,b,c,d,e,f,g){this.a=a;this.b=b;this.c=c;this.d=d;this.normal=e instanceof THREE.Vector3?e:new THREE.Vector3;this.vertexNormals=e instanceof Array?e:[];this.color=f instanceof THREE.Color?f:new THREE.Color;this.vertexColors=f instanceof Array?f:[];this.vertexTangents=[];this.materialIndex=void 0!==g?g:0;this.centroid=new THREE.Vector3}; THREE.Face4.prototype={constructor:THREE.Face4,clone:function(){var a=new THREE.Face4(this.a,this.b,this.c,this.d);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;b<c;b++)a.vertexNormals[b]=this.vertexNormals[b].clone();b=0;for(c=this.vertexColors.length;b<c;b++)a.vertexColors[b]=this.vertexColors[b].clone();b=0;for(c=this.vertexTangents.length;b<c;b++)a.vertexTangents[b]=this.vertexTangents[b].clone(); return a}};THREE.Geometry=function(){THREE.EventDispatcher.call(this);this.id=THREE.GeometryIdCount++;this.name="";this.vertices=[];this.colors=[];this.normals=[];this.faces=[];this.faceUvs=[[]];this.faceVertexUvs=[[]];this.morphTargets=[];this.morphColors=[];this.morphNormals=[];this.skinWeights=[];this.skinIndices=[];this.lineDistances=[];this.boundingSphere=this.boundingBox=null;this.hasTangents=!1;this.dynamic=!0;this.buffersNeedUpdate=this.lineDistancesNeedUpdate=this.colorsNeedUpdate=this.tangentsNeedUpdate= this.normalsNeedUpdate=this.uvsNeedUpdate=this.elementsNeedUpdate=this.verticesNeedUpdate=!1}; THREE.Geometry.prototype={constructor:THREE.Geometry,applyMatrix:function(a){var b=new THREE.Matrix3;b.getInverse(a).transpose();for(var c=0,d=this.vertices.length;c<d;c++)a.multiplyVector3(this.vertices[c]);c=0;for(d=this.faces.length;c<d;c++){var e=this.faces[c];b.multiplyVector3(e.normal).normalize();for(var f=0,g=e.vertexNormals.length;f<g;f++)b.multiplyVector3(e.vertexNormals[f]).normalize();a.multiplyVector3(e.centroid)}},computeCentroids:function(){var a,b,c;a=0;for(b=this.faces.length;a<b;a++)c= this.faces[a],c.centroid.set(0,0,0),c instanceof THREE.Face3?(c.centroid.addSelf(this.vertices[c.a]),c.centroid.addSelf(this.vertices[c.b]),c.centroid.addSelf(this.vertices[c.c]),c.centroid.divideScalar(3)):c instanceof THREE.Face4&&(c.centroid.addSelf(this.vertices[c.a]),c.centroid.addSelf(this.vertices[c.b]),c.centroid.addSelf(this.vertices[c.c]),c.centroid.addSelf(this.vertices[c.d]),c.centroid.divideScalar(4))},computeFaceNormals:function(){var a,b,c,d,e,f,g=new THREE.Vector3,h=new THREE.Vector3; a=0;for(b=this.faces.length;a<b;a++)c=this.faces[a],d=this.vertices[c.a],e=this.vertices[c.b],f=this.vertices[c.c],g.sub(f,e),h.sub(d,e),g.crossSelf(h),g.normalize(),c.normal.copy(g)},computeVertexNormals:function(a){var b,c,d,e;if(void 0===this.__tmpVertices){e=this.__tmpVertices=Array(this.vertices.length);b=0;for(c=this.vertices.length;b<c;b++)e[b]=new THREE.Vector3;b=0;for(c=this.faces.length;b<c;b++)d=this.faces[b],d instanceof THREE.Face3?d.vertexNormals=[new THREE.Vector3,new THREE.Vector3, new THREE.Vector3]:d instanceof THREE.Face4&&(d.vertexNormals=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3])}else{e=this.__tmpVertices;b=0;for(c=this.vertices.length;b<c;b++)e[b].set(0,0,0)}if(a){var f,g,h,j=new THREE.Vector3,l=new THREE.Vector3,m=new THREE.Vector3,q=new THREE.Vector3,p=new THREE.Vector3;b=0;for(c=this.faces.length;b<c;b++)d=this.faces[b],d instanceof THREE.Face3?(a=this.vertices[d.a],f=this.vertices[d.b],g=this.vertices[d.c],j.sub(g,f),l.sub(a,f),j.crossSelf(l), e[d.a].addSelf(j),e[d.b].addSelf(j),e[d.c].addSelf(j)):d instanceof THREE.Face4&&(a=this.vertices[d.a],f=this.vertices[d.b],g=this.vertices[d.c],h=this.vertices[d.d],m.sub(h,f),l.sub(a,f),m.crossSelf(l),e[d.a].addSelf(m),e[d.b].addSelf(m),e[d.d].addSelf(m),q.sub(h,g),p.sub(f,g),q.crossSelf(p),e[d.b].addSelf(q),e[d.c].addSelf(q),e[d.d].addSelf(q))}else{b=0;for(c=this.faces.length;b<c;b++)d=this.faces[b],d instanceof THREE.Face3?(e[d.a].addSelf(d.normal),e[d.b].addSelf(d.normal),e[d.c].addSelf(d.normal)): d instanceof THREE.Face4&&(e[d.a].addSelf(d.normal),e[d.b].addSelf(d.normal),e[d.c].addSelf(d.normal),e[d.d].addSelf(d.normal))}b=0;for(c=this.vertices.length;b<c;b++)e[b].normalize();b=0;for(c=this.faces.length;b<c;b++)d=this.faces[b],d instanceof THREE.Face3?(d.vertexNormals[0].copy(e[d.a]),d.vertexNormals[1].copy(e[d.b]),d.vertexNormals[2].copy(e[d.c])):d instanceof THREE.Face4&&(d.vertexNormals[0].copy(e[d.a]),d.vertexNormals[1].copy(e[d.b]),d.vertexNormals[2].copy(e[d.c]),d.vertexNormals[3].copy(e[d.d]))}, computeMorphNormals:function(){var a,b,c,d,e;c=0;for(d=this.faces.length;c<d;c++){e=this.faces[c];e.__originalFaceNormal?e.__originalFaceNormal.copy(e.normal):e.__originalFaceNormal=e.normal.clone();e.__originalVertexNormals||(e.__originalVertexNormals=[]);a=0;for(b=e.vertexNormals.length;a<b;a++)e.__originalVertexNormals[a]?e.__originalVertexNormals[a].copy(e.vertexNormals[a]):e.__originalVertexNormals[a]=e.vertexNormals[a].clone()}var f=new THREE.Geometry;f.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,j,l;c=0;for(d=this.faces.length;c<d;c++)e=this.faces[c],j=new THREE.Vector3,l=e 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(j),h.push(l)}g=this.morphNormals[a];f.vertices= this.morphTargets[a].vertices;f.computeFaceNormals();f.computeVertexNormals();c=0;for(d=this.faces.length;c<d;c++)e=this.faces[c],j=g.faceNormals[c],l=g.vertexNormals[c],j.copy(e.normal),e instanceof THREE.Face3?(l.a.copy(e.vertexNormals[0]),l.b.copy(e.vertexNormals[1]),l.c.copy(e.vertexNormals[2])):(l.a.copy(e.vertexNormals[0]),l.b.copy(e.vertexNormals[1]),l.c.copy(e.vertexNormals[2]),l.d.copy(e.vertexNormals[3]))}c=0;for(d=this.faces.length;c<d;c++)e=this.faces[c],e.normal=e.__originalFaceNormal, e.vertexNormals=e.__originalVertexNormals},computeTangents:function(){function a(a,b,c,d,e,f,z){h=a.vertices[b];j=a.vertices[c];l=a.vertices[d];m=g[e];q=g[f];p=g[z];t=j.x-h.x;r=l.x-h.x;n=j.y-h.y;s=l.y-h.y;x=j.z-h.z;v=l.z-h.z;A=q.x-m.x;u=p.x-m.x;L=q.y-m.y;H=p.y-m.y;C=1/(A*H-u*L);J.set((H*t-L*r)*C,(H*n-L*s)*C,(H*x-L*v)*C);X.set((A*r-u*t)*C,(A*s-u*n)*C,(A*v-u*x)*C);E[b].addSelf(J);E[c].addSelf(J);E[d].addSelf(J);D[b].addSelf(X);D[c].addSelf(X);D[d].addSelf(X)}var b,c,d,e,f,g,h,j,l,m,q,p,t,r,n,s,x,v, A,u,L,H,C,z,E=[],D=[],J=new THREE.Vector3,X=new THREE.Vector3,G=new THREE.Vector3,S=new THREE.Vector3,B=new THREE.Vector3;b=0;for(c=this.vertices.length;b<c;b++)E[b]=new THREE.Vector3,D[b]=new THREE.Vector3;b=0;for(c=this.faces.length;b<c;b++)f=this.faces[b],g=this.faceVertexUvs[0][b],f instanceof THREE.Face3?a(this,f.a,f.b,f.c,0,1,2):f instanceof THREE.Face4&&(a(this,f.a,f.b,f.d,0,1,3),a(this,f.b,f.c,f.d,1,2,3));var K=["a","b","c","d"];b=0;for(c=this.faces.length;b<c;b++){f=this.faces[b];for(d=0;d< f.vertexNormals.length;d++)B.copy(f.vertexNormals[d]),e=f[K[d]],z=E[e],G.copy(z),G.subSelf(B.multiplyScalar(B.dot(z))).normalize(),S.cross(f.vertexNormals[d],z),e=S.dot(D[e]),e=0>e?-1:1,f.vertexTangents[d]=new THREE.Vector4(G.x,G.y,G.z,e)}this.hasTangents=!0},computeLineDistances:function(){for(var a=0,b=this.vertices,c=0,d=b.length;c<d;c++)0<c&&(a+=b[c].distanceTo(b[c-1])),this.lineDistances[c]=a},computeBoundingBox:function(){null===this.boundingBox&&(this.boundingBox=new THREE.Box3);this.boundingBox.setFromPoints(this.vertices)}, computeBoundingSphere:function(){null===this.boundingSphere&&(this.boundingSphere=new THREE.Sphere);this.boundingSphere.setFromCenterAndPoints(this.boundingSphere.center,this.vertices)},mergeVertices:function(){var a={},b=[],c=[],d,e=Math.pow(10,4),f,g,h,j;f=0;for(g=this.vertices.length;f<g;f++)d=this.vertices[f],d=[Math.round(d.x*e),Math.round(d.y*e),Math.round(d.z*e)].join("_"),void 0===a[d]?(a[d]=f,b.push(this.vertices[f]),c[f]=b.length-1):c[f]=c[a[d]];f=0;for(g=this.faces.length;f<g;f++)if(a= this.faces[f],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(e=3;0<e;e--)if(d.indexOf(a["abcd"[e]])!==e){d.splice(e,1);this.faces[f]=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++)(j=this.faceVertexUvs[d][f])&&j.splice(e,1);this.faces[f].vertexColors=a.vertexColors;break}}c=this.vertices.length-b.length;this.vertices=b;return c}, clone:function(){for(var a=new THREE.Geometry,b=this.vertices,c=0,d=b.length;c<d;c++)a.vertices.push(b[c].clone());b=this.faces;c=0;for(d=b.length;c<d;c++)a.faces.push(b[c].clone());b=this.faceVertexUvs[0];c=0;for(d=b.length;c<d;c++){for(var e=b[c],f=[],g=0,h=e.length;g<h;g++)f.push(new THREE.Vector2(e[g].x,e[g].y));a.faceVertexUvs[0].push(f)}return a},dispose:function(){this.dispatchEvent({type:"dispose"})}};THREE.GeometryIdCount=0;THREE.BufferGeometry=function(){THREE.EventDispatcher.call(this);this.id=THREE.GeometryIdCount++;this.attributes={};this.dynamic=!1;this.offsets=[];this.boundingSphere=this.boundingBox=null;this.hasTangents=!1;this.morphTargets=[]}; THREE.BufferGeometry.prototype={constructor:THREE.BufferGeometry,applyMatrix:function(a){var b,c;this.attributes.position&&(b=this.attributes.position.array);this.attributes.normal&&(c=this.attributes.normal.array);void 0!==b&&(a.multiplyVector3Array(b),this.verticesNeedUpdate=!0);void 0!==c&&(b=new THREE.Matrix3,b.getInverse(a).transpose(),b.multiplyVector3Array(c),this.normalizeNormals(),this.normalsNeedUpdate=!0)},computeBoundingBox:function(){null===this.boundingBox&&(this.boundingBox=new THREE.Box3); var a=this.attributes.position.array;if(a){var b=this.boundingBox,c,d,e;3<=a.length&&(b.min.x=b.max.x=a[0],b.min.y=b.max.y=a[1],b.min.z=b.max.z=a[2]);for(var f=3,g=a.length;f<g;f+=3)c=a[f],d=a[f+1],e=a[f+2],c<b.min.x?b.min.x=c:c>b.max.x&&(b.max.x=c),d<b.min.y?b.min.y=d:d>b.max.y&&(b.max.y=d),e<b.min.z?b.min.z=e:e>b.max.z&&(b.max.z=e)}if(void 0===a||0===a.length)this.boundingBox.min.set(0,0,0),this.boundingBox.max.set(0,0,0)},computeBoundingSphere:function(){null===this.boundingSphere&&(this.boundingSphere= new THREE.Sphere);var a=this.attributes.position.array;if(a){for(var b,c=0,d,e,f=0,g=a.length;f<g;f+=3)b=a[f],d=a[f+1],e=a[f+2],b=b*b+d*d+e*e,b>c&&(c=b);this.boundingSphere.radius=Math.sqrt(c)}},computeVertexNormals:function(){if(this.attributes.position){var a,b,c,d;a=this.attributes.position.array.length;if(void 0===this.attributes.normal)this.attributes.normal={itemSize:3,array:new Float32Array(a),numItems:a};else{a=0;for(b=this.attributes.normal.array.length;a<b;a++)this.attributes.normal.array[a]= 0}var e=this.attributes.position.array,f=this.attributes.normal.array,g,h,j,l,m,q,p=new THREE.Vector3,t=new THREE.Vector3,r=new THREE.Vector3,n=new THREE.Vector3,s=new THREE.Vector3;if(this.attributes.index){var x=this.attributes.index.array,v=this.offsets;c=0;for(d=v.length;c<d;++c){b=v[c].start;g=v[c].count;var A=v[c].index;a=b;for(b+=g;a<b;a+=3)g=A+x[a],h=A+x[a+1],j=A+x[a+2],l=e[3*g],m=e[3*g+1],q=e[3*g+2],p.set(l,m,q),l=e[3*h],m=e[3*h+1],q=e[3*h+2],t.set(l,m,q),l=e[3*j],m=e[3*j+1],q=e[3*j+2],r.set(l, m,q),n.sub(r,t),s.sub(p,t),n.crossSelf(s),f[3*g]+=n.x,f[3*g+1]+=n.y,f[3*g+2]+=n.z,f[3*h]+=n.x,f[3*h+1]+=n.y,f[3*h+2]+=n.z,f[3*j]+=n.x,f[3*j+1]+=n.y,f[3*j+2]+=n.z}}else{a=0;for(b=e.length;a<b;a+=9)l=e[a],m=e[a+1],q=e[a+2],p.set(l,m,q),l=e[a+3],m=e[a+4],q=e[a+5],t.set(l,m,q),l=e[a+6],m=e[a+7],q=e[a+8],r.set(l,m,q),n.sub(r,t),s.sub(p,t),n.crossSelf(s),f[a]=n.x,f[a+1]=n.y,f[a+2]=n.z,f[a+3]=n.x,f[a+4]=n.y,f[a+5]=n.z,f[a+6]=n.x,f[a+7]=n.y,f[a+8]=n.z}this.normalizeNormals();this.normalsNeedUpdate=!0}},normalizeNormals:function(){for(var a= this.attributes.normal.array,b,c,d,e=0,f=a.length;e<f;e+=3)b=a[e],c=a[e+1],d=a[e+2],b=1/Math.sqrt(b*b+c*c+d*d),a[e]*=b,a[e+1]*=b,a[e+2]*=b},computeTangents:function(){function a(a){da.x=d[3*a];da.y=d[3*a+1];da.z=d[3*a+2];la.copy(da);ja=j[a];W.copy(ja);W.subSelf(da.multiplyScalar(da.dot(ja))).normalize();T.cross(la,ja);ib=T.dot(l[a]);M=0>ib?-1:1;h[4*a]=W.x;h[4*a+1]=W.y;h[4*a+2]=W.z;h[4*a+3]=M}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,e=this.attributes.uv.array,f=c.length/3;if(void 0===this.attributes.tangent){var g=4*f;this.attributes.tangent={itemSize:4,array:new Float32Array(g),numItems:g}}for(var h=this.attributes.tangent.array,j=[],l=[],g=0;g<f;g++)j[g]=new THREE.Vector3,l[g]=new THREE.Vector3; var m,q,p,t,r,n,s,x,v,A,u,L,H,C,z,f=new THREE.Vector3,g=new THREE.Vector3,E,D,J,X,G,S,B,K=this.offsets;J=0;for(X=K.length;J<X;++J){D=K[J].start;G=K[J].count;var N=K[J].index;E=D;for(D+=G;E<D;E+=3)G=N+b[E],S=N+b[E+1],B=N+b[E+2],m=c[3*G],q=c[3*G+1],p=c[3*G+2],t=c[3*S],r=c[3*S+1],n=c[3*S+2],s=c[3*B],x=c[3*B+1],v=c[3*B+2],A=e[2*G],u=e[2*G+1],L=e[2*S],H=e[2*S+1],C=e[2*B],z=e[2*B+1],t-=m,m=s-m,r-=q,q=x-q,n-=p,p=v-p,L-=A,A=C-A,H-=u,u=z-u,z=1/(L*u-A*H),f.set((u*t-H*m)*z,(u*r-H*q)*z,(u*n-H*p)*z),g.set((L* m-A*t)*z,(L*q-A*r)*z,(L*p-A*n)*z),j[G].addSelf(f),j[S].addSelf(f),j[B].addSelf(f),l[G].addSelf(g),l[S].addSelf(g),l[B].addSelf(g)}var W=new THREE.Vector3,T=new THREE.Vector3,da=new THREE.Vector3,la=new THREE.Vector3,M,ja,ib;J=0;for(X=K.length;J<X;++J){D=K[J].start;G=K[J].count;N=K[J].index;E=D;for(D+=G;E<D;E+=3)G=N+b[E],S=N+b[E+1],B=N+b[E+2],a(G),a(S),a(B)}this.tangentsNeedUpdate=this.hasTangents=!0}},dispose:function(){this.dispatchEvent({type:"dispose"})}};THREE.Camera=function(){THREE.Object3D.call(this);this.matrixWorldInverse=new THREE.Matrix4;this.projectionMatrix=new THREE.Matrix4;this.projectionMatrixInverse=new THREE.Matrix4};THREE.Camera.prototype=Object.create(THREE.Object3D.prototype);THREE.Camera.prototype.lookAt=function(a){this.matrix.lookAt(this.position,a,this.up);!0===this.rotationAutoUpdate&&(!1===this.useQuaternion?this.rotation.setEulerFromRotationMatrix(this.matrix,this.eulerOrder):this.quaternion.copy(this.matrix.decompose()[1]))};THREE.OrthographicCamera=function(a,b,c,d,e,f){THREE.Camera.call(this);this.left=a;this.right=b;this.top=c;this.bottom=d;this.near=void 0!==e?e:0.1;this.far=void 0!==f?f:2E3;this.updateProjectionMatrix()};THREE.OrthographicCamera.prototype=Object.create(THREE.Camera.prototype);THREE.OrthographicCamera.prototype.updateProjectionMatrix=function(){this.projectionMatrix.makeOrthographic(this.left,this.right,this.top,this.bottom,this.near,this.far)};THREE.PerspectiveCamera=function(a,b,c,d){THREE.Camera.call(this);this.fov=void 0!==a?a:50;this.aspect=void 0!==b?b:1;this.near=void 0!==c?c:0.1;this.far=void 0!==d?d:2E3;this.updateProjectionMatrix()};THREE.PerspectiveCamera.prototype=Object.create(THREE.Camera.prototype);THREE.PerspectiveCamera.prototype.setLens=function(a,b){void 0===b&&(b=24);this.fov=2*THREE.Math.radToDeg(Math.atan(b/(2*a)));this.updateProjectionMatrix()}; THREE.PerspectiveCamera.prototype.setViewOffset=function(a,b,c,d,e,f){this.fullWidth=a;this.fullHeight=b;this.x=c;this.y=d;this.width=e;this.height=f;this.updateProjectionMatrix()}; THREE.PerspectiveCamera.prototype.updateProjectionMatrix=function(){if(this.fullWidth){var a=this.fullWidth/this.fullHeight,b=Math.tan(THREE.Math.degToRad(0.5*this.fov))*this.near,c=-b,d=a*c,a=Math.abs(a*b-d),c=Math.abs(b-c);this.projectionMatrix.makeFrustum(d+this.x*a/this.fullWidth,d+(this.x+this.width)*a/this.fullWidth,b-(this.y+this.height)*c/this.fullHeight,b-this.y*c/this.fullHeight,this.near,this.far)}else this.projectionMatrix.makePerspective(this.fov,this.aspect,this.near,this.far)};THREE.Light=function(a){THREE.Object3D.call(this);this.color=new THREE.Color(a)};THREE.Light.prototype=Object.create(THREE.Object3D.prototype);THREE.AmbientLight=function(a){THREE.Light.call(this,a)};THREE.AmbientLight.prototype=Object.create(THREE.Light.prototype);THREE.AreaLight=function(a,b){THREE.Light.call(this,a);this.normal=new THREE.Vector3(0,-1,0);this.right=new THREE.Vector3(1,0,0);this.intensity=void 0!==b?b:1;this.height=this.width=1;this.constantAttenuation=1.5;this.linearAttenuation=0.5;this.quadraticAttenuation=0.1;this.texture=null};THREE.AreaLight.prototype=Object.create(THREE.Light.prototype);THREE.DayLight=function(a,b,c,d,e){THREE.Light.call(this,a);this.skyColor=new THREE.Color(b);this.groundColor=new THREE.Color(c);this.position=new THREE.Vector3(0,100,0);this.hemiPosition=new THREE.Vector3(0,100,0);this.target=new THREE.Object3D;this.sunIntensity=d!==d?d:1;this.hemiIntensity=e!==e?e:1;this.castShadow=!1;this.shadowCameraNear=50;this.shadowCameraFar=5E3;this.shadowCameraLeft=-500;this.shadowCameraTop=this.shadowCameraRight=500;this.shadowCameraBottom=-500;this.shadowCameraVisible= !1;this.shadowBias=0;this.shadowDarkness=0.5;this.shadowMapHeight=this.shadowMapWidth=512;this.shadowCascade=!1;this.shadowCascadeOffset=new THREE.Vector3(0,0,-1E3);this.shadowCascadeCount=2;this.shadowCascadeBias=[0,0,0];this.shadowCascadeWidth=[512,512,512];this.shadowCascadeHeight=[512,512,512];this.shadowCascadeNearZ=[-1,0.99,0.998];this.shadowCascadeFarZ=[0.99,0.998,1];this.shadowCascadeArray=[]};THREE.DayLight.prototype=Object.create(THREE.Light.prototype);THREE.DirectionalLight=function(a,b){THREE.Light.call(this,a);this.position=new THREE.Vector3(0,1,0);this.target=new THREE.Object3D;this.intensity=void 0!==b?b:1;this.onlyShadow=this.castShadow=!1;this.shadowCameraNear=50;this.shadowCameraFar=5E3;this.shadowCameraLeft=-500;this.shadowCameraTop=this.shadowCameraRight=500;this.shadowCameraBottom=-500;this.shadowCameraVisible=!1;this.shadowBias=0;this.shadowDarkness=0.5;this.shadowMapHeight=this.shadowMapWidth=512;this.shadowCascade=!1;this.shadowCascadeOffset= new THREE.Vector3(0,0,-1E3);this.shadowCascadeCount=2;this.shadowCascadeBias=[0,0,0];this.shadowCascadeWidth=[512,512,512];this.shadowCascadeHeight=[512,512,512];this.shadowCascadeNearZ=[-1,0.99,0.998];this.shadowCascadeFarZ=[0.99,0.998,1];this.shadowCascadeArray=[];this.shadowMatrix=this.shadowCamera=this.shadowMapSize=this.shadowMap=null};THREE.DirectionalLight.prototype=Object.create(THREE.Light.prototype);THREE.HemisphereLight=function(a,b,c){THREE.Light.call(this,a);this.groundColor=new THREE.Color(b);this.position=new THREE.Vector3(0,100,0);this.intensity=void 0!==c?c:1};THREE.HemisphereLight.prototype=Object.create(THREE.Light.prototype);THREE.PointLight=function(a,b,c){THREE.Light.call(this,a);this.position=new THREE.Vector3(0,0,0);this.intensity=void 0!==b?b:1;this.distance=void 0!==c?c:0;this.onlyShadow=this.castShadow=!1;this.shadowCameraNear=50;this.shadowCameraFar=5E3;this.shadowCameraVisible=!1;this.shadowBias=0;this.shadowDarkness=0.5;this.shadowMapHeight=this.shadowMapWidth=512};THREE.PointLight.prototype=Object.create(THREE.Light.prototype);THREE.SpotLight=function(a,b,c,d,e){THREE.Light.call(this,a);this.position=new THREE.Vector3(0,1,0);this.target=new THREE.Object3D;this.intensity=void 0!==b?b:1;this.distance=void 0!==c?c:0;this.angle=void 0!==d?d:Math.PI/2;this.exponent=void 0!==e?e:10;this.onlyShadow=this.castShadow=!1;this.shadowCameraNear=50;this.shadowCameraFar=5E3;this.shadowCameraFov=50;this.shadowCameraVisible=!1;this.shadowBias=0;this.shadowDarkness=0.5;this.shadowMapHeight=this.shadowMapWidth=512;this.shadowMatrix=this.shadowCamera= this.shadowMapSize=this.shadowMap=null};THREE.SpotLight.prototype=Object.create(THREE.Light.prototype);THREE.Loader=function(a){this.statusDomElement=(this.showStatus=a)?THREE.Loader.prototype.addStatusElement():null;this.onLoadStart=function(){};this.onLoadProgress=function(){};this.onLoadComplete=function(){}}; THREE.Loader.prototype={constructor:THREE.Loader,crossOrigin:"anonymous",addStatusElement:function(){var a=document.createElement("div");a.style.position="absolute";a.style.right="0px";a.style.top="0px";a.style.fontSize="0.8em";a.style.textAlign="left";a.style.background="rgba(0,0,0,0.25)";a.style.color="#fff";a.style.width="120px";a.style.padding="0.5em 0.5em 0.5em 0.5em";a.style.zIndex=1E3;a.innerHTML="Loading ...";return a},updateProgress:function(a){var b="Loaded ",b=a.total?b+((100*a.loaded/ a.total).toFixed(0)+"%"):b+((a.loaded/1E3).toFixed(2)+" KB");this.statusDomElement.innerHTML=b},extractUrlBase:function(a){a=a.split("/");a.pop();return(1>a.length?".":a.join("/"))+"/"},initMaterials:function(a,b){for(var c=[],d=0;d<a.length;++d)c[d]=THREE.Loader.prototype.createMaterial(a[d],b);return c},needsTangents:function(a){for(var b=0,c=a.length;b<c;b++)if(a[b]instanceof THREE.ShaderMaterial)return!0;return!1},createMaterial:function(a,b){function c(a){a=Math.log(a)/Math.LN2;return Math.floor(a)== a}function d(a){a=Math.log(a)/Math.LN2;return Math.pow(2,Math.round(a))}function e(a,e,f,h,j,l,s){var x=f.toLowerCase().endsWith(".dds"),v=b+"/"+f;if(x){var A=THREE.ImageUtils.loadCompressedTexture(v);a[e]=A}else A=document.createElement("canvas"),a[e]=new THREE.Texture(A);a[e].sourceFile=f;h&&(a[e].repeat.set(h[0],h[1]),1!==h[0]&&(a[e].wrapS=THREE.RepeatWrapping),1!==h[1]&&(a[e].wrapT=THREE.RepeatWrapping));j&&a[e].offset.set(j[0],j[1]);l&&(f={repeat:THREE.RepeatWrapping,mirror:THREE.MirroredRepeatWrapping}, void 0!==f[l[0]]&&(a[e].wrapS=f[l[0]]),void 0!==f[l[1]]&&(a[e].wrapT=f[l[1]]));s&&(a[e].anisotropy=s);if(!x){var u=a[e];a=new Image;a.onload=function(){if(!c(this.width)||!c(this.height)){var a=d(this.width),b=d(this.height);u.image.width=a;u.image.height=b;u.image.getContext("2d").drawImage(this,0,0,a,b)}else u.image=this;u.needsUpdate=!0};a.crossOrigin=g.crossOrigin;a.src=v}}function f(a){return(255*a[0]<<16)+(255*a[1]<<8)+255*a[2]}var g=this,h="MeshLambertMaterial",j={color:15658734,opacity:1, map:null,lightMap:null,normalMap:null,bumpMap:null,wireframe:!1};if(a.shading){var l=a.shading.toLowerCase();"phong"===l?h="MeshPhongMaterial":"basic"===l&&(h="MeshBasicMaterial")}void 0!==a.blending&&void 0!==THREE[a.blending]&&(j.blending=THREE[a.blending]);if(void 0!==a.transparent||1>a.opacity)j.transparent=a.transparent;void 0!==a.depthTest&&(j.depthTest=a.depthTest);void 0!==a.depthWrite&&(j.depthWrite=a.depthWrite);void 0!==a.visible&&(j.visible=a.visible);void 0!==a.flipSided&&(j.side=THREE.BackSide); void 0!==a.doubleSided&&(j.side=THREE.DoubleSide);void 0!==a.wireframe&&(j.wireframe=a.wireframe);void 0!==a.vertexColors&&("face"===a.vertexColors?j.vertexColors=THREE.FaceColors:a.vertexColors&&(j.vertexColors=THREE.VertexColors));a.colorDiffuse?j.color=f(a.colorDiffuse):a.DbgColor&&(j.color=a.DbgColor);a.colorSpecular&&(j.specular=f(a.colorSpecular));a.colorAmbient&&(j.ambient=f(a.colorAmbient));a.transparency&&(j.opacity=a.transparency);a.specularCoef&&(j.shininess=a.specularCoef);a.mapDiffuse&& b&&e(j,"map",a.mapDiffuse,a.mapDiffuseRepeat,a.mapDiffuseOffset,a.mapDiffuseWrap,a.mapDiffuseAnisotropy);a.mapLight&&b&&e(j,"lightMap",a.mapLight,a.mapLightRepeat,a.mapLightOffset,a.mapLightWrap,a.mapLightAnisotropy);a.mapBump&&b&&e(j,"bumpMap",a.mapBump,a.mapBumpRepeat,a.mapBumpOffset,a.mapBumpWrap,a.mapBumpAnisotropy);a.mapNormal&&b&&e(j,"normalMap",a.mapNormal,a.mapNormalRepeat,a.mapNormalOffset,a.mapNormalWrap,a.mapNormalAnisotropy);a.mapSpecular&&b&&e(j,"specularMap",a.mapSpecular,a.mapSpecularRepeat, a.mapSpecularOffset,a.mapSpecularWrap,a.mapSpecularAnisotropy);a.mapBumpScale&&(j.bumpScale=a.mapBumpScale);a.mapNormal?(h=THREE.ShaderUtils.lib.normal,l=THREE.UniformsUtils.clone(h.uniforms),l.tNormal.value=j.normalMap,a.mapNormalFactor&&l.uNormalScale.value.set(a.mapNormalFactor,a.mapNormalFactor),j.map&&(l.tDiffuse.value=j.map,l.enableDiffuse.value=!0),j.specularMap&&(l.tSpecular.value=j.specularMap,l.enableSpecular.value=!0),j.lightMap&&(l.tAO.value=j.lightMap,l.enableAO.value=!0),l.uDiffuseColor.value.setHex(j.color), l.uSpecularColor.value.setHex(j.specular),l.uAmbientColor.value.setHex(j.ambient),l.uShininess.value=j.shininess,void 0!==j.opacity&&(l.uOpacity.value=j.opacity),h=new THREE.ShaderMaterial({fragmentShader:h.fragmentShader,vertexShader:h.vertexShader,uniforms:l,lights:!0,fog:!0}),j.transparent&&(h.transparent=!0)):h=new THREE[h](j);void 0!==a.DbgName&&(h.name=a.DbgName);return h}};THREE.BinaryLoader=function(a){THREE.Loader.call(this,a)};THREE.BinaryLoader.prototype=Object.create(THREE.Loader.prototype);THREE.BinaryLoader.prototype.load=function(a,b,c,d){c=c&&"string"===typeof c?c:this.extractUrlBase(a);d=d&&"string"===typeof d?d:this.extractUrlBase(a);var e=this.showProgress?THREE.Loader.prototype.updateProgress:null;this.onLoadStart();this.loadAjaxJSON(this,a,b,c,d,e)}; THREE.BinaryLoader.prototype.loadAjaxJSON=function(a,b,c,d,e,f){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,e,d,f)}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,e){var f=new XMLHttpRequest,g=c+"/"+a.buffers,h=0;f.onreadystatechange=function(){if(4==f.readyState)if(200==f.status||0==f.status){var c=f.response;void 0===c&&(c=(new Uint8Array(f.responseBody)).buffer);THREE.BinaryLoader.prototype.createBinModel(c,b,d,a.materials)}else console.error("THREE.BinaryLoader: Couldn't load ["+g+"] ["+f.status+"]");else 3==f.readyState?e&&(0==h&&(h=f.getResponseHeader("Content-Length")),e({total:h,loaded:f.responseText.length})): 2==f.readyState&&(h=f.getResponseHeader("Content-Length"))};f.open("GET",g,!0);f.responseType="arraybuffer";f.send(null)}; THREE.BinaryLoader.prototype.createBinModel=function(a,b,c,d){var e=function(){var b,c,d,e,l,m,q,p,t,r,n,s,x,v,A,u;function L(a){return a%4?4-a%4:0}function H(a,b){return(new Uint8Array(a,b,1))[0]}function C(a,b){return(new Uint32Array(a,b,1))[0]}function z(b,c){var d,e,f,g,h,j,l,m=new Uint32Array(a,c,3*b);for(d=0;d<b;d++)e=m[3*d],f=m[3*d+1],g=m[3*d+2],h=N[2*e],e=N[2*e+1],j=N[2*f],l=N[2*f+1],f=N[2*g],g=N[2*g+1],S.faceVertexUvs[0].push([new THREE.Vector2(h,e),new THREE.Vector2(j,l),new THREE.Vector2(f, g)])}function E(b,c){var d,e,f,g,h,j,l,m,p,q=new Uint32Array(a,c,4*b);for(d=0;d<b;d++)e=q[4*d],f=q[4*d+1],g=q[4*d+2],h=q[4*d+3],j=N[2*e],e=N[2*e+1],l=N[2*f],m=N[2*f+1],f=N[2*g],p=N[2*g+1],g=N[2*h],h=N[2*h+1],S.faceVertexUvs[0].push([new THREE.Vector2(j,e),new THREE.Vector2(l,m),new THREE.Vector2(f,p),new THREE.Vector2(g,h)])}function D(b,c,d){var e,f,g,h;c=new Uint32Array(a,c,3*b);var j=new Uint16Array(a,d,b);for(d=0;d<b;d++)e=c[3*d],f=c[3*d+1],g=c[3*d+2],h=j[d],S.faces.push(new THREE.Face3(e,f,g, null,null,h))}function J(b,c,d){var e,f,g,h,j;c=new Uint32Array(a,c,4*b);var l=new Uint16Array(a,d,b);for(d=0;d<b;d++)e=c[4*d],f=c[4*d+1],g=c[4*d+2],h=c[4*d+3],j=l[d],S.faces.push(new THREE.Face4(e,f,g,h,null,null,j))}function X(b,c,d,e){var f,g,h,j,l,m,p;c=new Uint32Array(a,c,3*b);d=new Uint32Array(a,d,3*b);var q=new Uint16Array(a,e,b);for(e=0;e<b;e++){f=c[3*e];g=c[3*e+1];h=c[3*e+2];l=d[3*e];m=d[3*e+1];p=d[3*e+2];j=q[e];var r=K[3*m],n=K[3*m+1];m=K[3*m+2];var t=K[3*p],s=K[3*p+1];p=K[3*p+2];S.faces.push(new THREE.Face3(f, g,h,[new THREE.Vector3(K[3*l],K[3*l+1],K[3*l+2]),new THREE.Vector3(r,n,m),new THREE.Vector3(t,s,p)],null,j))}}function G(b,c,d,e){var f,g,h,j,l,m,p,q,r;c=new Uint32Array(a,c,4*b);d=new Uint32Array(a,d,4*b);var n=new Uint16Array(a,e,b);for(e=0;e<b;e++){f=c[4*e];g=c[4*e+1];h=c[4*e+2];j=c[4*e+3];m=d[4*e];p=d[4*e+1];q=d[4*e+2];r=d[4*e+3];l=n[e];var t=K[3*p],s=K[3*p+1];p=K[3*p+2];var u=K[3*q],x=K[3*q+1];q=K[3*q+2];var v=K[3*r],A=K[3*r+1];r=K[3*r+2];S.faces.push(new THREE.Face4(f,g,h,j,[new THREE.Vector3(K[3* m],K[3*m+1],K[3*m+2]),new THREE.Vector3(t,s,p),new THREE.Vector3(u,x,q),new THREE.Vector3(v,A,r)],null,l))}}var S=this,B=0,K=[],N=[],W,T,da;THREE.Geometry.call(this);u=a;T=B;v=new Uint8Array(u,T,12);r="";for(x=0;12>x;x++)r+=String.fromCharCode(v[T+x]);b=H(u,T+12);H(u,T+13);H(u,T+14);H(u,T+15);c=H(u,T+16);d=H(u,T+17);e=H(u,T+18);l=H(u,T+19);m=C(u,T+20);q=C(u,T+20+4);p=C(u,T+20+8);t=C(u,T+20+12);r=C(u,T+20+16);n=C(u,T+20+20);s=C(u,T+20+24);x=C(u,T+20+28);v=C(u,T+20+32);A=C(u,T+20+36);u=C(u,T+20+40); B+=b;T=3*c+l;da=4*c+l;W=t*T;b=r*(T+3*d);c=n*(T+3*e);l=s*(T+3*d+3*e);T=x*da;d=v*(da+4*d);e=A*(da+4*e);da=B;var B=new Float32Array(a,B,3*m),la,M,ja,ib;for(la=0;la<m;la++)M=B[3*la],ja=B[3*la+1],ib=B[3*la+2],S.vertices.push(new THREE.Vector3(M,ja,ib));m=B=da+3*m*Float32Array.BYTES_PER_ELEMENT;if(q){B=new Int8Array(a,B,3*q);for(da=0;da<q;da++)la=B[3*da],M=B[3*da+1],ja=B[3*da+2],K.push(la/127,M/127,ja/127)}B=m+3*q*Int8Array.BYTES_PER_ELEMENT;q=B+=L(3*q);if(p){m=new Float32Array(a,B,2*p);for(B=0;B<p;B++)da= m[2*B],la=m[2*B+1],N.push(da,la)}p=B=q+2*p*Float32Array.BYTES_PER_ELEMENT;W=p+W+L(2*t);q=W+b+L(2*r);b=q+c+L(2*n);c=b+l+L(2*s);T=c+T+L(2*x);l=T+d+L(2*v);d=l+e+L(2*A);n&&(e=q+3*n*Uint32Array.BYTES_PER_ELEMENT,D(n,q,e+3*n*Uint32Array.BYTES_PER_ELEMENT),z(n,e));s&&(n=b+3*s*Uint32Array.BYTES_PER_ELEMENT,e=n+3*s*Uint32Array.BYTES_PER_ELEMENT,X(s,b,n,e+3*s*Uint32Array.BYTES_PER_ELEMENT),z(s,e));A&&(s=l+4*A*Uint32Array.BYTES_PER_ELEMENT,J(A,l,s+4*A*Uint32Array.BYTES_PER_ELEMENT),E(A,s));u&&(A=d+4*u*Uint32Array.BYTES_PER_ELEMENT, s=A+4*u*Uint32Array.BYTES_PER_ELEMENT,G(u,d,A,s+4*u*Uint32Array.BYTES_PER_ELEMENT),E(u,s));t&&D(t,p,p+3*t*Uint32Array.BYTES_PER_ELEMENT);r&&(t=W+3*r*Uint32Array.BYTES_PER_ELEMENT,X(r,W,t,t+3*r*Uint32Array.BYTES_PER_ELEMENT));x&&J(x,c,c+4*x*Uint32Array.BYTES_PER_ELEMENT);v&&(r=T+4*v*Uint32Array.BYTES_PER_ELEMENT,G(v,T,r,r+4*v*Uint32Array.BYTES_PER_ELEMENT));this.computeCentroids();this.computeFaceNormals()};e.prototype=Object.create(THREE.Geometry.prototype);e=new e(c);c=this.initMaterials(d,c);this.needsTangents(c)&& e.computeTangents();b(e,c)};THREE.ImageLoader=function(){THREE.EventDispatcher.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);this.withCredentials=!1};THREE.JSONLoader.prototype=Object.create(THREE.Loader.prototype);THREE.JSONLoader.prototype.load=function(a,b,c){c=c&&"string"===typeof c?c:this.extractUrlBase(a);this.onLoadStart();this.loadAjaxJSON(this,a,b,c)}; THREE.JSONLoader.prototype.loadAjaxJSON=function(a,b,c,d,e){var f=new XMLHttpRequest,g=0;f.withCredentials=this.withCredentials;f.onreadystatechange=function(){if(f.readyState===f.DONE)if(200===f.status||0===f.status){if(f.responseText){var h=JSON.parse(f.responseText);a.createModel(h,c,d)}else console.warn("THREE.JSONLoader: ["+b+"] seems to be unreachable or file there is empty");a.onLoadComplete()}else console.error("THREE.JSONLoader: Couldn't load ["+b+"] ["+f.status+"]");else f.readyState=== f.LOADING?e&&(0===g&&(g=f.getResponseHeader("Content-Length")),e({total:g,loaded:f.responseText.length})):f.readyState===f.HEADERS_RECEIVED&&(g=f.getResponseHeader("Content-Length"))};f.open("GET",b,!0);f.send(null)}; THREE.JSONLoader.prototype.createModel=function(a,b,c){var d=new THREE.Geometry,e=void 0!==a.scale?1/a.scale:1,f,g,h,j,l,m,q,p,t,r,n,s,x,v,A,u=a.faces;r=a.vertices;var L=a.normals,H=a.colors,C=0;for(f=0;f<a.uvs.length;f++)a.uvs[f].length&&C++;for(f=0;f<C;f++)d.faceUvs[f]=[],d.faceVertexUvs[f]=[];j=0;for(l=r.length;j<l;)m=new THREE.Vector3,m.x=r[j++]*e,m.y=r[j++]*e,m.z=r[j++]*e,d.vertices.push(m);j=0;for(l=u.length;j<l;){r=u[j++];m=r&1;h=r&2;f=r&4;g=r&8;p=r&16;q=r&32;n=r&64;r&=128;m?(s=new THREE.Face4, s.a=u[j++],s.b=u[j++],s.c=u[j++],s.d=u[j++],m=4):(s=new THREE.Face3,s.a=u[j++],s.b=u[j++],s.c=u[j++],m=3);h&&(h=u[j++],s.materialIndex=h);h=d.faces.length;if(f)for(f=0;f<C;f++)x=a.uvs[f],t=u[j++],A=x[2*t],t=x[2*t+1],d.faceUvs[f][h]=new THREE.Vector2(A,t);if(g)for(f=0;f<C;f++){x=a.uvs[f];v=[];for(g=0;g<m;g++)t=u[j++],A=x[2*t],t=x[2*t+1],v[g]=new THREE.Vector2(A,t);d.faceVertexUvs[f][h]=v}p&&(p=3*u[j++],g=new THREE.Vector3,g.x=L[p++],g.y=L[p++],g.z=L[p],s.normal=g);if(q)for(f=0;f<m;f++)p=3*u[j++],g= new THREE.Vector3,g.x=L[p++],g.y=L[p++],g.z=L[p],s.vertexNormals.push(g);n&&(q=u[j++],q=new THREE.Color(H[q]),s.color=q);if(r)for(f=0;f<m;f++)q=u[j++],q=new THREE.Color(H[q]),s.vertexColors.push(q);d.faces.push(s)}if(a.skinWeights){j=0;for(l=a.skinWeights.length;j<l;j+=2)u=a.skinWeights[j],L=a.skinWeights[j+1],d.skinWeights.push(new THREE.Vector4(u,L,0,0))}if(a.skinIndices){j=0;for(l=a.skinIndices.length;j<l;j+=2)u=a.skinIndices[j],L=a.skinIndices[j+1],d.skinIndices.push(new THREE.Vector4(u,L,0,0))}d.bones= a.bones;d.animation=a.animation;if(void 0!==a.morphTargets){j=0;for(l=a.morphTargets.length;j<l;j++){d.morphTargets[j]={};d.morphTargets[j].name=a.morphTargets[j].name;d.morphTargets[j].vertices=[];H=d.morphTargets[j].vertices;C=a.morphTargets[j].vertices;u=0;for(L=C.length;u<L;u+=3)r=new THREE.Vector3,r.x=C[u]*e,r.y=C[u+1]*e,r.z=C[u+2]*e,H.push(r)}}if(void 0!==a.morphColors){j=0;for(l=a.morphColors.length;j<l;j++){d.morphColors[j]={};d.morphColors[j].name=a.morphColors[j].name;d.morphColors[j].colors= [];L=d.morphColors[j].colors;H=a.morphColors[j].colors;e=0;for(u=H.length;e<u;e+=3)C=new THREE.Color(16755200),C.setRGB(H[e],H[e+1],H[e+2]),L.push(C)}}d.computeCentroids();d.computeFaceNormals();a=this.initMaterials(a.materials,c);this.needsTangents(a)&&d.computeTangents();b(d,a)};THREE.LoadingMonitor=function(){THREE.EventDispatcher.call(this);var a=this,b=0,c=0,d=function(){b++;a.dispatchEvent({type:"progress",loaded:b,total:c});b===c&&a.dispatchEvent({type:"load"})};this.add=function(a){c++;a.addEventListener("load",d,!1)}};THREE.SceneLoader=function(){this.onLoadStart=function(){};this.onLoadProgress=function(){};this.onLoadComplete=function(){};this.callbackSync=function(){};this.callbackProgress=function(){};this.geometryHandlerMap={};this.hierarchyHandlerMap={};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 e=JSON.parse(d.responseText);c.parse(e,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.addHierarchyHandler=function(a,b){this.hierarchyHandlerMap[a]={loaderClass:b}}; THREE.SceneLoader.prototype.parse=function(a,b,c){function d(a,b){return"relativeToHTML"==b?a:q+"/"+a}function e(){f(z.scene,D.objects)}function f(a,b){var c,e,g,j,l,q;for(q in b)if(void 0===z.objects[q]){var n=b[q],s=null;if(n.type&&n.type in m.hierarchyHandlerMap){if(void 0===n.loading){c={type:1,url:1,material:1,position:1,rotation:1,scale:1,visible:1,children:1,properties:1,skin:1,morph:1,mirroredLoop:1,duration:1};e={};for(var u in n)u in c||(e[u]=n[u]);t=z.materials[n.material];n.loading=!0; c=m.hierarchyHandlerMap[n.type].loaderObject;c.options?c.load(d(n.url,D.urlBaseType),h(q,a,t,n)):c.load(d(n.url,D.urlBaseType),h(q,a,t,n),e)}}else if(void 0!==n.geometry){if(p=z.geometries[n.geometry]){s=!1;t=z.materials[n.material];s=t instanceof THREE.ShaderMaterial;e=n.position;g=n.rotation;j=n.scale;c=n.matrix;l=n.quaternion;n.material||(t=new THREE.MeshFaceMaterial(z.face_materials[n.geometry]));t instanceof THREE.MeshFaceMaterial&&0===t.materials.length&&(t=new THREE.MeshFaceMaterial(z.face_materials[n.geometry])); if(t instanceof THREE.MeshFaceMaterial)for(var B=0;B<t.materials.length;B++)s=s||t.materials[B]instanceof THREE.ShaderMaterial;s&&p.computeTangents();n.skin?s=new THREE.SkinnedMesh(p,t):n.morph?(s=new THREE.MorphAnimMesh(p,t),void 0!==n.duration&&(s.duration=n.duration),void 0!==n.time&&(s.time=n.time),void 0!==n.mirroredLoop&&(s.mirroredLoop=n.mirroredLoop),t.morphNormals&&p.computeMorphNormals()):s=new THREE.Mesh(p,t);s.name=q;c?(s.matrixAutoUpdate=!1,s.matrix.set(c[0],c[1],c[2],c[3],c[4],c[5], c[6],c[7],c[8],c[9],c[10],c[11],c[12],c[13],c[14],c[15])):(s.position.set(e[0],e[1],e[2]),l?(s.quaternion.set(l[0],l[1],l[2],l[3]),s.useQuaternion=!0):s.rotation.set(g[0],g[1],g[2]),s.scale.set(j[0],j[1],j[2]));s.visible=n.visible;s.castShadow=n.castShadow;s.receiveShadow=n.receiveShadow;a.add(s);z.objects[q]=s}}else"DirectionalLight"===n.type||"PointLight"===n.type||"AmbientLight"===n.type?(v=void 0!==n.color?n.color:16777215,A=void 0!==n.intensity?n.intensity:1,"DirectionalLight"===n.type?(e=n.direction, x=new THREE.DirectionalLight(v,A),x.position.set(e[0],e[1],e[2]),n.target&&(E.push({object:x,targetName:n.target}),x.target=null)):"PointLight"===n.type?(e=n.position,c=n.distance,x=new THREE.PointLight(v,A,c),x.position.set(e[0],e[1],e[2])):"AmbientLight"===n.type&&(x=new THREE.AmbientLight(v)),a.add(x),x.name=q,z.lights[q]=x,z.objects[q]=x):"PerspectiveCamera"===n.type||"OrthographicCamera"===n.type?("PerspectiveCamera"===n.type?r=new THREE.PerspectiveCamera(n.fov,n.aspect,n.near,n.far):"OrthographicCamera"=== n.type&&(r=new THREE.OrthographicCamera(n.left,n.right,n.top,n.bottom,n.near,n.far)),e=n.position,r.position.set(e[0],e[1],e[2]),a.add(r),r.name=q,z.cameras[q]=r,z.objects[q]=r):(e=n.position,g=n.rotation,j=n.scale,l=n.quaternion,s=new THREE.Object3D,s.name=q,s.position.set(e[0],e[1],e[2]),l?(s.quaternion.set(l[0],l[1],l[2],l[3]),s.useQuaternion=!0):s.rotation.set(g[0],g[1],g[2]),s.scale.set(j[0],j[1],j[2]),s.visible=void 0!==n.visible?n.visible:!1,a.add(s),z.objects[q]=s,z.empties[q]=s);if(s){if(void 0!== n.properties)for(var C in n.properties)s.properties[C]=n.properties[C];void 0!==n.children&&f(s,n.children)}}}function g(a){return function(b,c){z.geometries[a]=b;z.face_materials[a]=c;e();u-=1;m.onLoadComplete();l()}}function h(a,b,c,d){return function(f){f=f.content?f.content:f.dae?f.scene:f;var g=d.position,h=d.rotation,j=d.quaternion,p=d.scale;f.position.set(g[0],g[1],g[2]);j?(f.quaternion.set(j[0],j[1],j[2],j[3]),f.useQuaternion=!0):f.rotation.set(h[0],h[1],h[2]);f.scale.set(p[0],p[1],p[2]); c&&f.traverse(function(a){a.material=c});var q=void 0!==d.visible?d.visible:!0;f.traverse(function(a){a.visible=q});b.add(f);f.name=a;z.objects[a]=f;e();u-=1;m.onLoadComplete();l()}}function j(a){return function(b,c){z.geometries[a]=b;z.face_materials[a]=c}}function l(){m.callbackProgress({totalModels:H,totalTextures:C,loadedModels:H-u,loadedTextures:C-L},z);m.onLoadProgress();if(0===u&&0===L){for(var a=0;a<E.length;a++){var c=E[a],d=z.objects[c.targetName];d?c.object.target=d:(c.object.target=new THREE.Object3D, z.scene.add(c.object.target));c.object.target.properties.targetInverse=c.object}b(z)}}var m=this,q=THREE.Loader.prototype.extractUrlBase(c),p,t,r,n,s,x,v,A,u,L,H,C,z,E=[],D=a,J;for(J in this.geometryHandlerMap)a=this.geometryHandlerMap[J].loaderClass,this.geometryHandlerMap[J].loaderObject=new a;for(J in this.hierarchyHandlerMap)a=this.hierarchyHandlerMap[J].loaderClass,this.hierarchyHandlerMap[J].loaderObject=new a;L=u=0;z={scene:new THREE.Scene,geometries:{},face_materials:{},materials:{},textures:{}, objects:{},cameras:{},lights:{},fogs:{},empties:{}};if(D.transform&&(J=D.transform.position,a=D.transform.rotation,c=D.transform.scale,J&&z.scene.position.set(J[0],J[1],J[2]),a&&z.scene.rotation.set(a[0],a[1],a[2]),c&&z.scene.scale.set(c[0],c[1],c[2]),J||a||c))z.scene.updateMatrix(),z.scene.updateMatrixWorld();J=function(a){return function(){L-=a;l();m.onLoadComplete()}};for(var X in D.fogs)a=D.fogs[X],"linear"===a.type?n=new THREE.Fog(0,a.near,a.far):"exp2"===a.type&&(n=new THREE.FogExp2(0,a.density)), a=a.color,n.color.setRGB(a[0],a[1],a[2]),z.fogs[X]=n;for(var G in D.geometries)n=D.geometries[G],n.type in this.geometryHandlerMap&&(u+=1,m.onLoadStart());for(var S in D.objects)n=D.objects[S],n.type&&n.type in this.hierarchyHandlerMap&&(u+=1,m.onLoadStart());H=u;for(G in D.geometries)if(n=D.geometries[G],"cube"===n.type)p=new THREE.CubeGeometry(n.width,n.height,n.depth,n.widthSegments,n.heightSegments,n.depthSegments),z.geometries[G]=p;else if("plane"===n.type)p=new THREE.PlaneGeometry(n.width,n.height, n.widthSegments,n.heightSegments),z.geometries[G]=p;else if("sphere"===n.type)p=new THREE.SphereGeometry(n.radius,n.widthSegments,n.heightSegments),z.geometries[G]=p;else if("cylinder"===n.type)p=new THREE.CylinderGeometry(n.topRad,n.botRad,n.height,n.radSegs,n.heightSegs),z.geometries[G]=p;else if("torus"===n.type)p=new THREE.TorusGeometry(n.radius,n.tube,n.segmentsR,n.segmentsT),z.geometries[G]=p;else if("icosahedron"===n.type)p=new THREE.IcosahedronGeometry(n.radius,n.subdivisions),z.geometries[G]= p;else if(n.type in this.geometryHandlerMap){S={};for(s in n)"type"!==s&&"url"!==s&&(S[s]=n[s]);this.geometryHandlerMap[n.type].loaderObject.load(d(n.url,D.urlBaseType),g(G),S)}else"embedded"===n.type&&(S=D.embeds[n.id],S.metadata=D.metadata,S&&this.geometryHandlerMap.ascii.loaderObject.createModel(S,j(G),""));for(var B in D.textures)if(G=D.textures[B],G.url instanceof Array){L+=G.url.length;for(s=0;s<G.url.length;s++)m.onLoadStart()}else L+=1,m.onLoadStart();C=L;for(B in D.textures){G=D.textures[B]; void 0!==G.mapping&&void 0!==THREE[G.mapping]&&(G.mapping=new THREE[G.mapping]);if(G.url instanceof Array){S=G.url.length;n=[];for(s=0;s<S;s++)n[s]=d(G.url[s],D.urlBaseType);s=(s=n[0].endsWith(".dds"))?THREE.ImageUtils.loadCompressedTextureCube(n,G.mapping,J(S)):THREE.ImageUtils.loadTextureCube(n,G.mapping,J(S))}else s=G.url.toLowerCase().endsWith(".dds"),S=d(G.url,D.urlBaseType),n=J(1),s=s?THREE.ImageUtils.loadCompressedTexture(S,G.mapping,n):THREE.ImageUtils.loadTexture(S,G.mapping,n),void 0!== THREE[G.minFilter]&&(s.minFilter=THREE[G.minFilter]),void 0!==THREE[G.magFilter]&&(s.magFilter=THREE[G.magFilter]),G.anisotropy&&(s.anisotropy=G.anisotropy),G.repeat&&(s.repeat.set(G.repeat[0],G.repeat[1]),1!==G.repeat[0]&&(s.wrapS=THREE.RepeatWrapping),1!==G.repeat[1]&&(s.wrapT=THREE.RepeatWrapping)),G.offset&&s.offset.set(G.offset[0],G.offset[1]),G.wrap&&(S={repeat:THREE.RepeatWrapping,mirror:THREE.MirroredRepeatWrapping},void 0!==S[G.wrap[0]]&&(s.wrapS=S[G.wrap[0]]),void 0!==S[G.wrap[1]]&&(s.wrapT= S[G.wrap[1]]));z.textures[B]=s}var K,N;for(K in D.materials){B=D.materials[K];for(N in B.parameters)"envMap"===N||"map"===N||"lightMap"===N||"bumpMap"===N?B.parameters[N]=z.textures[B.parameters[N]]:"shading"===N?B.parameters[N]="flat"===B.parameters[N]?THREE.FlatShading:THREE.SmoothShading:"side"===N?B.parameters[N]="double"==B.parameters[N]?THREE.DoubleSide:"back"==B.parameters[N]?THREE.BackSide:THREE.FrontSide:"blending"===N?B.parameters[N]=B.parameters[N]in THREE?THREE[B.parameters[N]]:THREE.NormalBlending: "combine"===N?B.parameters[N]=B.parameters[N]in THREE?THREE[B.parameters[N]]:THREE.MultiplyOperation:"vertexColors"===N?"face"==B.parameters[N]?B.parameters[N]=THREE.FaceColors:B.parameters[N]&&(B.parameters[N]=THREE.VertexColors):"wrapRGB"===N&&(J=B.parameters[N],B.parameters[N]=new THREE.Vector3(J[0],J[1],J[2]));void 0!==B.parameters.opacity&&1>B.parameters.opacity&&(B.parameters.transparent=!0);B.parameters.normalMap?(J=THREE.ShaderUtils.lib.normal,G=THREE.UniformsUtils.clone(J.uniforms),s=B.parameters.color, S=B.parameters.specular,n=B.parameters.ambient,X=B.parameters.shininess,G.tNormal.value=z.textures[B.parameters.normalMap],B.parameters.normalScale&&G.uNormalScale.value.set(B.parameters.normalScale[0],B.parameters.normalScale[1]),B.parameters.map&&(G.tDiffuse.value=B.parameters.map,G.enableDiffuse.value=!0),B.parameters.envMap&&(G.tCube.value=B.parameters.envMap,G.enableReflection.value=!0,G.uReflectivity.value=B.parameters.reflectivity),B.parameters.lightMap&&(G.tAO.value=B.parameters.lightMap, G.enableAO.value=!0),B.parameters.specularMap&&(G.tSpecular.value=z.textures[B.parameters.specularMap],G.enableSpecular.value=!0),B.parameters.displacementMap&&(G.tDisplacement.value=z.textures[B.parameters.displacementMap],G.enableDisplacement.value=!0,G.uDisplacementBias.value=B.parameters.displacementBias,G.uDisplacementScale.value=B.parameters.displacementScale),G.uDiffuseColor.value.setHex(s),G.uSpecularColor.value.setHex(S),G.uAmbientColor.value.setHex(n),G.uShininess.value=X,B.parameters.opacity&& (G.uOpacity.value=B.parameters.opacity),t=new THREE.ShaderMaterial({fragmentShader:J.fragmentShader,vertexShader:J.vertexShader,uniforms:G,lights:!0,fog:!0})):t=new THREE[B.type](B.parameters);z.materials[K]=t}for(K in D.materials)if(B=D.materials[K],B.parameters.materials){N=[];for(s=0;s<B.parameters.materials.length;s++)N.push(z.materials[B.parameters.materials[s]]);z.materials[K].materials=N}e();z.cameras&&D.defaults.camera&&(z.currentCamera=z.cameras[D.defaults.camera]);z.fogs&&D.defaults.fog&& (z.scene.fog=z.fogs[D.defaults.fog]);a=D.defaults.bgcolor;z.bgColor=new THREE.Color;z.bgColor.setRGB(a[0],a[1],a[2]);z.bgColorAlpha=D.defaults.bgalpha;m.callbackSync(z);l()};THREE.TextureLoader=function(){THREE.EventDispatcher.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(){THREE.EventDispatcher.call(this);this.id=THREE.MaterialIdCount++;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?d.set(c):d instanceof THREE.Vector3&&c instanceof THREE.Vector3?d.copy(c):this[b]=c}}}; THREE.Material.prototype.clone=function(a){void 0===a&&(a=new THREE.Material);a.name=this.name;a.side=this.side;a.opacity=this.opacity;a.transparent=this.transparent;a.blending=this.blending;a.blendSrc=this.blendSrc;a.blendDst=this.blendDst;a.blendEquation=this.blendEquation;a.depthTest=this.depthTest;a.depthWrite=this.depthWrite;a.polygonOffset=this.polygonOffset;a.polygonOffsetFactor=this.polygonOffsetFactor;a.polygonOffsetUnits=this.polygonOffsetUnits;a.alphaTest=this.alphaTest;a.overdraw=this.overdraw; a.visible=this.visible;return a};THREE.Material.prototype.dispose=function(){this.dispatchEvent({type:"dispose"})};THREE.MaterialIdCount=0;THREE.LineBasicMaterial=function(a){THREE.Material.call(this);this.color=new THREE.Color(16777215);this.linewidth=1;this.linejoin=this.linecap="round";this.vertexColors=!1;this.fog=!0;this.setValues(a)};THREE.LineBasicMaterial.prototype=Object.create(THREE.Material.prototype); THREE.LineBasicMaterial.prototype.clone=function(){var a=new THREE.LineBasicMaterial;THREE.Material.prototype.clone.call(this,a);a.color.copy(this.color);a.linewidth=this.linewidth;a.linecap=this.linecap;a.linejoin=this.linejoin;a.vertexColors=this.vertexColors;a.fog=this.fog;return a};THREE.LineDashedMaterial=function(a){THREE.Material.call(this);this.color=new THREE.Color(16777215);this.scale=this.linewidth=1;this.dashSize=3;this.gapSize=1;this.vertexColors=!1;this.fog=!0;this.setValues(a)};THREE.LineDashedMaterial.prototype=Object.create(THREE.Material.prototype); THREE.LineDashedMaterial.prototype.clone=function(){var a=new THREE.LineDashedMaterial;THREE.Material.prototype.clone.call(this,a);a.color.copy(this.color);a.linewidth=this.linewidth;a.scale=this.scale;a.dashSize=this.dashSize;a.gapSize=this.gapSize;a.vertexColors=this.vertexColors;a.fog=this.fog;return a};THREE.MeshBasicMaterial=function(a){THREE.Material.call(this);this.color=new THREE.Color(16777215);this.envMap=this.specularMap=this.lightMap=this.map=null;this.combine=THREE.MultiplyOperation;this.reflectivity=1;this.refractionRatio=0.98;this.fog=!0;this.shading=THREE.SmoothShading;this.wireframe=!1;this.wireframeLinewidth=1;this.wireframeLinejoin=this.wireframeLinecap="round";this.vertexColors=THREE.NoColors;this.morphTargets=this.skinning=!1;this.setValues(a)}; THREE.MeshBasicMaterial.prototype=Object.create(THREE.Material.prototype); THREE.MeshBasicMaterial.prototype.clone=function(){var a=new THREE.MeshBasicMaterial;THREE.Material.prototype.clone.call(this,a);a.color.copy(this.color);a.map=this.map;a.lightMap=this.lightMap;a.specularMap=this.specularMap;a.envMap=this.envMap;a.combine=this.combine;a.reflectivity=this.reflectivity;a.refractionRatio=this.refractionRatio;a.fog=this.fog;a.shading=this.shading;a.wireframe=this.wireframe;a.wireframeLinewidth=this.wireframeLinewidth;a.wireframeLinecap=this.wireframeLinecap;a.wireframeLinejoin= this.wireframeLinejoin;a.vertexColors=this.vertexColors;a.skinning=this.skinning;a.morphTargets=this.morphTargets;return a};THREE.MeshLambertMaterial=function(a){THREE.Material.call(this);this.color=new THREE.Color(16777215);this.ambient=new THREE.Color(16777215);this.emissive=new THREE.Color(0);this.wrapAround=!1;this.wrapRGB=new THREE.Vector3(1,1,1);this.envMap=this.specularMap=this.lightMap=this.map=null;this.combine=THREE.MultiplyOperation;this.reflectivity=1;this.refractionRatio=0.98;this.fog=!0;this.shading=THREE.SmoothShading;this.wireframe=!1;this.wireframeLinewidth=1;this.wireframeLinejoin=this.wireframeLinecap= "round";this.vertexColors=THREE.NoColors;this.morphNormals=this.morphTargets=this.skinning=!1;this.setValues(a)};THREE.MeshLambertMaterial.prototype=Object.create(THREE.Material.prototype); THREE.MeshLambertMaterial.prototype.clone=function(){var a=new THREE.MeshLambertMaterial;THREE.Material.prototype.clone.call(this,a);a.color.copy(this.color);a.ambient.copy(this.ambient);a.emissive.copy(this.emissive);a.wrapAround=this.wrapAround;a.wrapRGB.copy(this.wrapRGB);a.map=this.map;a.lightMap=this.lightMap;a.specularMap=this.specularMap;a.envMap=this.envMap;a.combine=this.combine;a.reflectivity=this.reflectivity;a.refractionRatio=this.refractionRatio;a.fog=this.fog;a.shading=this.shading; a.wireframe=this.wireframe;a.wireframeLinewidth=this.wireframeLinewidth;a.wireframeLinecap=this.wireframeLinecap;a.wireframeLinejoin=this.wireframeLinejoin;a.vertexColors=this.vertexColors;a.skinning=this.skinning;a.morphTargets=this.morphTargets;a.morphNormals=this.morphNormals;return a};THREE.MeshPhongMaterial=function(a){THREE.Material.call(this);this.color=new THREE.Color(16777215);this.ambient=new THREE.Color(16777215);this.emissive=new THREE.Color(0);this.specular=new THREE.Color(1118481);this.shininess=30;this.metal=!1;this.perPixel=!0;this.wrapAround=!1;this.wrapRGB=new THREE.Vector3(1,1,1);this.bumpMap=this.lightMap=this.map=null;this.bumpScale=1;this.normalMap=null;this.normalScale=new THREE.Vector2(1,1);this.envMap=this.specularMap=null;this.combine=THREE.MultiplyOperation; this.reflectivity=1;this.refractionRatio=0.98;this.fog=!0;this.shading=THREE.SmoothShading;this.wireframe=!1;this.wireframeLinewidth=1;this.wireframeLinejoin=this.wireframeLinecap="round";this.vertexColors=THREE.NoColors;this.morphNormals=this.morphTargets=this.skinning=!1;this.setValues(a)};THREE.MeshPhongMaterial.prototype=Object.create(THREE.Material.prototype); THREE.MeshPhongMaterial.prototype.clone=function(){var a=new THREE.MeshPhongMaterial;THREE.Material.prototype.clone.call(this,a);a.color.copy(this.color);a.ambient.copy(this.ambient);a.emissive.copy(this.emissive);a.specular.copy(this.specular);a.shininess=this.shininess;a.metal=this.metal;a.perPixel=this.perPixel;a.wrapAround=this.wrapAround;a.wrapRGB.copy(this.wrapRGB);a.map=this.map;a.lightMap=this.lightMap;a.bumpMap=this.bumpMap;a.bumpScale=this.bumpScale;a.normalMap=this.normalMap;a.normalScale.copy(this.normalScale); a.specularMap=this.specularMap;a.envMap=this.envMap;a.combine=this.combine;a.reflectivity=this.reflectivity;a.refractionRatio=this.refractionRatio;a.fog=this.fog;a.shading=this.shading;a.wireframe=this.wireframe;a.wireframeLinewidth=this.wireframeLinewidth;a.wireframeLinecap=this.wireframeLinecap;a.wireframeLinejoin=this.wireframeLinejoin;a.vertexColors=this.vertexColors;a.skinning=this.skinning;a.morphTargets=this.morphTargets;a.morphNormals=this.morphNormals;return a};THREE.MeshDepthMaterial=function(a){THREE.Material.call(this);this.wireframe=!1;this.wireframeLinewidth=1;this.setValues(a)};THREE.MeshDepthMaterial.prototype=Object.create(THREE.Material.prototype);THREE.MeshDepthMaterial.prototype.clone=function(){var a=new THREE.LineBasicMaterial;THREE.Material.prototype.clone.call(this,a);a.wireframe=this.wireframe;a.wireframeLinewidth=this.wireframeLinewidth;return a};THREE.MeshNormalMaterial=function(a){THREE.Material.call(this,a);this.shading=THREE.FlatShading;this.wireframe=!1;this.wireframeLinewidth=1;this.setValues(a)};THREE.MeshNormalMaterial.prototype=Object.create(THREE.Material.prototype);THREE.MeshNormalMaterial.prototype.clone=function(){var a=new THREE.MeshNormalMaterial;THREE.Material.prototype.clone.call(this,a);a.shading=this.shading;a.wireframe=this.wireframe;a.wireframeLinewidth=this.wireframeLinewidth;return a};THREE.MeshFaceMaterial=function(a){this.materials=a instanceof Array?a:[]};THREE.MeshFaceMaterial.prototype.clone=function(){return new THREE.MeshFaceMaterial(this.materials.slice(0))};THREE.ParticleBasicMaterial=function(a){THREE.Material.call(this);this.color=new THREE.Color(16777215);this.map=null;this.size=1;this.sizeAttenuation=!0;this.vertexColors=!1;this.fog=!0;this.setValues(a)};THREE.ParticleBasicMaterial.prototype=Object.create(THREE.Material.prototype); THREE.ParticleBasicMaterial.prototype.clone=function(){var a=new THREE.ParticleBasicMaterial;THREE.Material.prototype.clone.call(this,a);a.color.copy(this.color);a.map=this.map;a.size=this.size;a.sizeAttenuation=this.sizeAttenuation;a.vertexColors=this.vertexColors;a.fog=this.fog;return a};THREE.ParticleCanvasMaterial=function(a){THREE.Material.call(this);this.color=new THREE.Color(16777215);this.program=function(){};this.setValues(a)};THREE.ParticleCanvasMaterial.prototype=Object.create(THREE.Material.prototype);THREE.ParticleCanvasMaterial.prototype.clone=function(){var a=new THREE.ParticleCanvasMaterial;THREE.Material.prototype.clone.call(this,a);a.color.copy(this.color);a.program=this.program;return a};THREE.ParticleDOMMaterial=function(a){this.element=a};THREE.ParticleDOMMaterial.prototype.clone=function(){return new THREE.ParticleDOMMaterial(this.element)};THREE.ShaderMaterial=function(a){THREE.Material.call(this);this.vertexShader=this.fragmentShader="void main() {}";this.uniforms={};this.defines={};this.attributes=null;this.shading=THREE.SmoothShading;this.wireframe=!1;this.wireframeLinewidth=1;this.lights=this.fog=!1;this.vertexColors=THREE.NoColors;this.morphNormals=this.morphTargets=this.skinning=!1;this.setValues(a)};THREE.ShaderMaterial.prototype=Object.create(THREE.Material.prototype); THREE.ShaderMaterial.prototype.clone=function(){var a=new THREE.ShaderMaterial;THREE.Material.prototype.clone.call(this,a);a.fragmentShader=this.fragmentShader;a.vertexShader=this.vertexShader;a.uniforms=THREE.UniformsUtils.clone(this.uniforms);a.attributes=this.attributes;a.defines=this.defines;a.shading=this.shading;a.wireframe=this.wireframe;a.wireframeLinewidth=this.wireframeLinewidth;a.fog=this.fog;a.lights=this.lights;a.vertexColors=this.vertexColors;a.skinning=this.skinning;a.morphTargets= this.morphTargets;a.morphNormals=this.morphNormals;return a};THREE.SpriteMaterial=function(a){THREE.Material.call(this);this.color=new THREE.Color(16777215);this.map=new THREE.Texture;this.useScreenCoordinates=!0;this.depthTest=!this.useScreenCoordinates;this.sizeAttenuation=!this.useScreenCoordinates;this.scaleByViewport=!this.sizeAttenuation;this.alignment=THREE.SpriteAlignment.center.clone();this.fog=!1;this.uvOffset=new THREE.Vector2(0,0);this.uvScale=new THREE.Vector2(1,1);this.setValues(a);a=a||{};void 0===a.depthTest&&(this.depthTest=!this.useScreenCoordinates); void 0===a.sizeAttenuation&&(this.sizeAttenuation=!this.useScreenCoordinates);void 0===a.scaleByViewport&&(this.scaleByViewport=!this.sizeAttenuation)};THREE.SpriteMaterial.prototype=Object.create(THREE.Material.prototype); THREE.SpriteMaterial.prototype.clone=function(){var a=new THREE.SpriteMaterial;THREE.Material.prototype.clone.call(this,a);a.color.copy(this.color);a.map=this.map;a.useScreenCoordinates=this.useScreenCoordinates;a.sizeAttenuation=this.sizeAttenuation;a.scaleByViewport=this.scaleByViewport;a.alignment.copy(this.alignment);a.uvOffset.copy(this.uvOffset);a.uvScale.copy(this.uvScale);a.fog=this.fog;return a};THREE.SpriteAlignment={};THREE.SpriteAlignment.topLeft=new THREE.Vector2(1,-1); THREE.SpriteAlignment.topCenter=new THREE.Vector2(0,-1);THREE.SpriteAlignment.topRight=new THREE.Vector2(-1,-1);THREE.SpriteAlignment.centerLeft=new THREE.Vector2(1,0);THREE.SpriteAlignment.center=new THREE.Vector2(0,0);THREE.SpriteAlignment.centerRight=new THREE.Vector2(-1,0);THREE.SpriteAlignment.bottomLeft=new THREE.Vector2(1,1);THREE.SpriteAlignment.bottomCenter=new THREE.Vector2(0,1);THREE.SpriteAlignment.bottomRight=new THREE.Vector2(-1,1);THREE.Texture=function(a,b,c,d,e,f,g,h,j){THREE.EventDispatcher.call(this);this.id=THREE.TextureIdCount++;this.name="";this.image=a;this.mipmaps=[];this.mapping=void 0!==b?b:new THREE.UVMapping;this.wrapS=void 0!==c?c:THREE.ClampToEdgeWrapping;this.wrapT=void 0!==d?d:THREE.ClampToEdgeWrapping;this.magFilter=void 0!==e?e:THREE.LinearFilter;this.minFilter=void 0!==f?f:THREE.LinearMipMapLinearFilter;this.anisotropy=void 0!==j?j:1;this.format=void 0!==g?g:THREE.RGBAFormat;this.type=void 0!==h?h:THREE.UnsignedByteType; this.offset=new THREE.Vector2(0,0);this.repeat=new THREE.Vector2(1,1);this.generateMipmaps=!0;this.premultiplyAlpha=!1;this.flipY=!0;this.unpackAlignment=4;this.needsUpdate=!1;this.onUpdate=null}; THREE.Texture.prototype={constructor:THREE.Texture,clone:function(a){void 0===a&&(a=new THREE.Texture);a.image=this.image;a.mipmaps=this.mipmaps.slice(0);a.mapping=this.mapping;a.wrapS=this.wrapS;a.wrapT=this.wrapT;a.magFilter=this.magFilter;a.minFilter=this.minFilter;a.anisotropy=this.anisotropy;a.format=this.format;a.type=this.type;a.offset.copy(this.offset);a.repeat.copy(this.repeat);a.generateMipmaps=this.generateMipmaps;a.premultiplyAlpha=this.premultiplyAlpha;a.flipY=this.flipY;a.unpackAlignment= this.unpackAlignment;return a},dispose:function(){this.dispatchEvent({type:"dispose"})}};THREE.TextureIdCount=0;THREE.CompressedTexture=function(a,b,c,d,e,f,g,h,j,l,m){THREE.Texture.call(this,null,f,g,h,j,l,d,e,m);this.image={width:b,height:c};this.mipmaps=a;this.generateMipmaps=!1};THREE.CompressedTexture.prototype=Object.create(THREE.Texture.prototype);THREE.CompressedTexture.prototype.clone=function(){var a=new THREE.CompressedTexture;THREE.Texture.prototype.clone.call(this,a);return a};THREE.DataTexture=function(a,b,c,d,e,f,g,h,j,l,m){THREE.Texture.call(this,null,f,g,h,j,l,d,e,m);this.image={data:a,width:b,height:c}};THREE.DataTexture.prototype=Object.create(THREE.Texture.prototype);THREE.DataTexture.prototype.clone=function(){var a=new THREE.DataTexture;THREE.Texture.prototype.clone.call(this,a);return a};THREE.Particle=function(a){THREE.Object3D.call(this);this.material=a};THREE.Particle.prototype=Object.create(THREE.Object3D.prototype);THREE.Particle.prototype.clone=function(a){void 0===a&&(a=new THREE.Particle(this.material));THREE.Object3D.prototype.clone.call(this,a);return a};THREE.ParticleSystem=function(a,b){THREE.Object3D.call(this);this.geometry=a;this.material=void 0!==b?b:new THREE.ParticleBasicMaterial({color:16777215*Math.random()});this.sortParticles=!1;this.geometry&&null===this.geometry.boundingSphere&&this.geometry.computeBoundingSphere();this.frustumCulled=!1};THREE.ParticleSystem.prototype=Object.create(THREE.Object3D.prototype); THREE.ParticleSystem.prototype.clone=function(a){void 0===a&&(a=new THREE.ParticleSystem(this.geometry,this.material));a.sortParticles=this.sortParticles;THREE.Object3D.prototype.clone.call(this,a);return a};THREE.Line=function(a,b,c){THREE.Object3D.call(this);this.geometry=a;this.material=void 0!==b?b:new THREE.LineBasicMaterial({color:16777215*Math.random()});this.type=void 0!==c?c:THREE.LineStrip;this.geometry&&(this.geometry.boundingSphere||this.geometry.computeBoundingSphere())};THREE.LineStrip=0;THREE.LinePieces=1;THREE.Line.prototype=Object.create(THREE.Object3D.prototype); THREE.Line.prototype.clone=function(a){void 0===a&&(a=new THREE.Line(this.geometry,this.material,this.type));THREE.Object3D.prototype.clone.call(this,a);return a};THREE.Mesh=function(a,b){THREE.Object3D.call(this);this.geometry=a;this.material=void 0!==b?b:new THREE.MeshBasicMaterial({color:16777215*Math.random(),wireframe:!0});if(this.geometry&&(null===this.geometry.boundingSphere&&this.geometry.computeBoundingSphere(),this.geometry.morphTargets.length)){this.morphTargetBase=-1;this.morphTargetForcedOrder=[];this.morphTargetInfluences=[];this.morphTargetDictionary={};for(var c=0;c<this.geometry.morphTargets.length;c++)this.morphTargetInfluences.push(0),this.morphTargetDictionary[this.geometry.morphTargets[c].name]= c}};THREE.Mesh.prototype=Object.create(THREE.Object3D.prototype);THREE.Mesh.prototype.getMorphTargetIndexByName=function(a){if(void 0!==this.morphTargetDictionary[a])return this.morphTargetDictionary[a];console.log("THREE.Mesh.getMorphTargetIndexByName: morph target "+a+" does not exist. Returning 0.");return 0};THREE.Mesh.prototype.clone=function(a){void 0===a&&(a=new THREE.Mesh(this.geometry,this.material));THREE.Object3D.prototype.clone.call(this,a);return a};THREE.Bone=function(a){THREE.Object3D.call(this);this.skin=a;this.skinMatrix=new THREE.Matrix4};THREE.Bone.prototype=Object.create(THREE.Object3D.prototype);THREE.Bone.prototype.update=function(a,b){this.matrixAutoUpdate&&(b|=this.updateMatrix());if(b||this.matrixWorldNeedsUpdate)a?this.skinMatrix.multiply(a,this.matrix):this.skinMatrix.copy(this.matrix),this.matrixWorldNeedsUpdate=!1,b=!0;var c,d=this.children.length;for(c=0;c<d;c++)this.children[c].update(this.skinMatrix,b)};THREE.SkinnedMesh=function(a,b,c){THREE.Mesh.call(this,a,b);this.useVertexTexture=void 0!==c?c:!0;this.identityMatrix=new THREE.Matrix4;this.bones=[];this.boneMatrices=[];var d,e,f;if(this.geometry&&void 0!==this.geometry.bones){for(a=0;a<this.geometry.bones.length;a++)c=this.geometry.bones[a],d=c.pos,e=c.rotq,f=c.scl,b=this.addBone(),b.name=c.name,b.position.set(d[0],d[1],d[2]),b.quaternion.set(e[0],e[1],e[2],e[3]),b.useQuaternion=!0,void 0!==f?b.scale.set(f[0],f[1],f[2]):b.scale.set(1,1,1);for(a= 0;a<this.bones.length;a++)c=this.geometry.bones[a],b=this.bones[a],-1===c.parent?this.add(b):this.bones[c.parent].add(b);a=this.bones.length;this.useVertexTexture?(this.boneTextureHeight=this.boneTextureWidth=a=256<a?64:64<a?32:16<a?16:8,this.boneMatrices=new Float32Array(4*this.boneTextureWidth*this.boneTextureHeight),this.boneTexture=new THREE.DataTexture(this.boneMatrices,this.boneTextureWidth,this.boneTextureHeight,THREE.RGBAFormat,THREE.FloatType),this.boneTexture.minFilter=THREE.NearestFilter, this.boneTexture.magFilter=THREE.NearestFilter,this.boneTexture.generateMipmaps=!1,this.boneTexture.flipY=!1):this.boneMatrices=new Float32Array(16*a);this.pose()}};THREE.SkinnedMesh.prototype=Object.create(THREE.Mesh.prototype);THREE.SkinnedMesh.prototype.addBone=function(a){void 0===a&&(a=new THREE.Bone(this));this.bones.push(a);return a}; THREE.SkinnedMesh.prototype.updateMatrixWorld=function(a){this.matrixAutoUpdate&&this.updateMatrix();if(this.matrixWorldNeedsUpdate||a)this.parent?this.matrixWorld.multiply(this.parent.matrixWorld,this.matrix):this.matrixWorld.copy(this.matrix),this.matrixWorldNeedsUpdate=!1;a=0;for(var b=this.children.length;a<b;a++){var c=this.children[a];c instanceof THREE.Bone?c.update(this.identityMatrix,!1):c.updateMatrixWorld(!0)}if(void 0==this.boneInverses){this.boneInverses=[];a=0;for(b=this.bones.length;a< b;a++)c=new THREE.Matrix4,c.getInverse(this.bones[a].skinMatrix),this.boneInverses.push(c)}a=0;for(b=this.bones.length;a<b;a++)THREE.SkinnedMesh.offsetMatrix.multiply(this.bones[a].skinMatrix,this.boneInverses[a]),THREE.SkinnedMesh.offsetMatrix.flattenToArrayOffset(this.boneMatrices,16*a);this.useVertexTexture&&(this.boneTexture.needsUpdate=!0)}; THREE.SkinnedMesh.prototype.pose=function(){this.updateMatrixWorld(!0);for(var a=0;a<this.geometry.skinIndices.length;a++){var b=this.geometry.skinWeights[a],c=1/b.lengthManhattan();Infinity!==c?b.multiplyScalar(c):b.set(1)}};THREE.SkinnedMesh.prototype.clone=function(a){void 0===a&&(a=new THREE.SkinnedMesh(this.geometry,this.material,this.useVertexTexture));THREE.Mesh.prototype.clone.call(this,a);return a};THREE.SkinnedMesh.offsetMatrix=new THREE.Matrix4;THREE.MorphAnimMesh=function(a,b){THREE.Mesh.call(this,a,b);this.duration=1E3;this.mirroredLoop=!1;this.currentKeyframe=this.lastKeyframe=this.time=0;this.direction=1;this.directionBackwards=!1;this.setFrameRange(0,this.geometry.morphTargets.length-1)};THREE.MorphAnimMesh.prototype=Object.create(THREE.Mesh.prototype);THREE.MorphAnimMesh.prototype.setFrameRange=function(a,b){this.startKeyframe=a;this.endKeyframe=b;this.length=this.endKeyframe-this.startKeyframe+1}; THREE.MorphAnimMesh.prototype.setDirectionForward=function(){this.direction=1;this.directionBackwards=!1};THREE.MorphAnimMesh.prototype.setDirectionBackward=function(){this.direction=-1;this.directionBackwards=!0}; THREE.MorphAnimMesh.prototype.parseAnimations=function(){var a=this.geometry;a.animations||(a.animations={});for(var b,c=a.animations,d=/([a-z]+)(\d+)/,e=0,f=a.morphTargets.length;e<f;e++){var g=a.morphTargets[e].name.match(d);if(g&&1<g.length){g=g[1];c[g]||(c[g]={start:Infinity,end:-Infinity});var h=c[g];e<h.start&&(h.start=e);e>h.end&&(h.end=e);b||(b=g)}}a.firstAnimation=b}; THREE.MorphAnimMesh.prototype.setAnimationLabel=function(a,b,c){this.geometry.animations||(this.geometry.animations={});this.geometry.animations[a]={start:b,end:c}};THREE.MorphAnimMesh.prototype.playAnimation=function(a,b){var c=this.geometry.animations[a];c?(this.setFrameRange(c.start,c.end),this.duration=1E3*((c.end-c.start)/b),this.time=0):console.warn("animation["+a+"] undefined")}; THREE.MorphAnimMesh.prototype.updateAnimation=function(a){var b=this.duration/this.length;this.time+=this.direction*a;if(this.mirroredLoop){if(this.time>this.duration||0>this.time)this.direction*=-1,this.time>this.duration&&(this.time=this.duration,this.directionBackwards=!0),0>this.time&&(this.time=0,this.directionBackwards=!1)}else this.time%=this.duration,0>this.time&&(this.time+=this.duration);a=this.startKeyframe+THREE.Math.clamp(Math.floor(this.time/b),0,this.length-1);a!==this.currentKeyframe&& (this.morphTargetInfluences[this.lastKeyframe]=0,this.morphTargetInfluences[this.currentKeyframe]=1,this.morphTargetInfluences[a]=0,this.lastKeyframe=this.currentKeyframe,this.currentKeyframe=a);b=this.time%b/b;this.directionBackwards&&(b=1-b);this.morphTargetInfluences[this.currentKeyframe]=b;this.morphTargetInfluences[this.lastKeyframe]=1-b}; THREE.MorphAnimMesh.prototype.clone=function(a){void 0===a&&(a=new THREE.MorphAnimMesh(this.geometry,this.material));a.duration=this.duration;a.mirroredLoop=this.mirroredLoop;a.time=this.time;a.lastKeyframe=this.lastKeyframe;a.currentKeyframe=this.currentKeyframe;a.direction=this.direction;a.directionBackwards=this.directionBackwards;THREE.Mesh.prototype.clone.call(this,a);return a};THREE.Ribbon=function(a,b){THREE.Object3D.call(this);this.geometry=a;this.material=b};THREE.Ribbon.prototype=Object.create(THREE.Object3D.prototype);THREE.Ribbon.prototype.clone=function(a){void 0===a&&(a=new THREE.Ribbon(this.geometry,this.material));THREE.Object3D.prototype.clone.call(this,a);return a};THREE.LOD=function(){THREE.Object3D.call(this);this.LODs=[]};THREE.LOD.prototype=Object.create(THREE.Object3D.prototype);THREE.LOD.prototype.addLevel=function(a,b){void 0===b&&(b=0);b=Math.abs(b);for(var c=0;c<this.LODs.length&&!(b<this.LODs[c].visibleAtDistance);c++);this.LODs.splice(c,0,{visibleAtDistance:b,object3D:a});this.add(a)}; THREE.LOD.prototype.update=function(a){if(1<this.LODs.length){a.matrixWorldInverse.getInverse(a.matrixWorld);a=a.matrixWorldInverse;a=-(a.elements[2]*this.matrixWorld.elements[12]+a.elements[6]*this.matrixWorld.elements[13]+a.elements[10]*this.matrixWorld.elements[14]+a.elements[14]);this.LODs[0].object3D.visible=!0;for(var b=1;b<this.LODs.length;b++)if(a>=this.LODs[b].visibleAtDistance)this.LODs[b-1].object3D.visible=!1,this.LODs[b].object3D.visible=!0;else break;for(;b<this.LODs.length;b++)this.LODs[b].object3D.visible= !1}};THREE.LOD.prototype.clone=function(){};THREE.Sprite=function(a){THREE.Object3D.call(this);this.material=void 0!==a?a:new THREE.SpriteMaterial;this.rotation3d=this.rotation;this.rotation=0};THREE.Sprite.prototype=Object.create(THREE.Object3D.prototype);THREE.Sprite.prototype.updateMatrix=function(){this.matrix.setPosition(this.position);this.rotation3d.set(0,0,this.rotation);this.matrix.setRotationFromEuler(this.rotation3d);(1!==this.scale.x||1!==this.scale.y)&&this.matrix.scale(this.scale);this.matrixWorldNeedsUpdate=!0}; THREE.Sprite.prototype.clone=function(a){void 0===a&&(a=new THREE.Sprite(this.material));THREE.Object3D.prototype.clone.call(this,a);return a};THREE.Scene=function(){THREE.Object3D.call(this);this.overrideMaterial=this.fog=null;this.matrixAutoUpdate=!1;this.__objects=[];this.__lights=[];this.__objectsAdded=[];this.__objectsRemoved=[]};THREE.Scene.prototype=Object.create(THREE.Object3D.prototype); THREE.Scene.prototype.__addObject=function(a){if(a instanceof THREE.Light)-1===this.__lights.indexOf(a)&&this.__lights.push(a),a.target&&void 0===a.target.parent&&this.add(a.target);else if(!(a instanceof THREE.Camera||a instanceof THREE.Bone)&&-1===this.__objects.indexOf(a)){this.__objects.push(a);this.__objectsAdded.push(a);var b=this.__objectsRemoved.indexOf(a);-1!==b&&this.__objectsRemoved.splice(b,1)}for(b=0;b<a.children.length;b++)this.__addObject(a.children[b])}; 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.name="";this.color=new THREE.Color(a);this.near=void 0!==b?b:1;this.far=void 0!==c?c:1E3};THREE.Fog.prototype.clone=function(){return new THREE.Fog(this.color.getHex(),this.near,this.far)};THREE.FogExp2=function(a,b){this.name="";this.color=new THREE.Color(a);this.density=void 0!==b?b:2.5E-4};THREE.FogExp2.prototype.clone=function(){return new THREE.FogExp2(this.color.getHex(),this.density)};THREE.CanvasRenderer=function(a){function b(a){v!==a&&(v=n.globalAlpha=a)}function c(a){A!==a&&(a===THREE.NormalBlending?n.globalCompositeOperation="source-over":a===THREE.AdditiveBlending?n.globalCompositeOperation="lighter":a===THREE.SubtractiveBlending&&(n.globalCompositeOperation="darker"),A=a)}function d(a){u!==a&&(u=n.strokeStyle=a)}function e(a){L!==a&&(L=n.fillStyle=a)}console.log("THREE.CanvasRenderer",THREE.REVISION);a=a||{};var f=this,g,h,j,l=new THREE.Projector,m=void 0!==a.canvas?a.canvas: document.createElement("canvas"),q,p,t,r,n=m.getContext("2d"),s=new THREE.Color(0),x=0,v=1,A=0,u=null,L=null,H=null,C=null,z=null,E,D,J,X,G=new THREE.RenderableVertex,S=new THREE.RenderableVertex,B,K,N,W,T,da,la,M,ja,ib,ha,Ka,I=new THREE.Color,ia=new THREE.Color,oa=new THREE.Color,ka=new THREE.Color,ua=new THREE.Color,V=new THREE.Color,aa=new THREE.Color,wa={},Na={},Ba,za,sa,Ea,ub,Fa,jb,qb,kb,Pb,ob=new THREE.Box2,Aa=new THREE.Box2,Ga=new THREE.Box2,bc=!1,ta=new THREE.Color,cb=new THREE.Color,Db=new THREE.Color, db=new THREE.Vector3,Jb,pb,ec,xb,mc,Tb,Oa=16;Jb=document.createElement("canvas");Jb.width=Jb.height=2;pb=Jb.getContext("2d");pb.fillStyle="rgba(0,0,0,1)";pb.fillRect(0,0,2,2);ec=pb.getImageData(0,0,2,2);xb=ec.data;mc=document.createElement("canvas");mc.width=mc.height=Oa;Tb=mc.getContext("2d");Tb.translate(-Oa/2,-Oa/2);Tb.scale(Oa,Oa);Oa--;this.domElement=m;this.devicePixelRatio=void 0!==a.devicePixelRatio?a.devicePixelRatio:void 0!==window.devicePixelRatio?window.devicePixelRatio:1;this.sortElements= this.sortObjects=this.autoClear=!0;this.info={render:{vertices:0,faces:0}};this.setSize=function(a,b){q=a*this.devicePixelRatio;p=b*this.devicePixelRatio;t=Math.floor(q/2);r=Math.floor(p/2);m.width=q;m.height=p;m.style.width=a+"px";m.style.height=b+"px";ob.min.set(-t,-r);ob.max.set(t,r);Aa.min.set(-t,-r);Aa.max.set(t,r);v=1;A=0;z=C=H=L=u=null};this.setClearColor=function(a,b){s.copy(a);x=void 0!==b?b:1;Aa.min.set(-t,-r);Aa.max.set(t,r)};this.setClearColorHex=function(a,b){s.setHex(a);x=void 0!==b? b:1;Aa.min.set(-t,-r);Aa.max.set(t,r)};this.getMaxAnisotropy=function(){return 0};this.clear=function(){n.setTransform(1,0,0,-1,t,r);!1===Aa.empty()&&(Aa.intersect(ob),Aa.expandByScalar(2),1>x&&n.clearRect(Aa.min.x|0,Aa.min.y|0,Aa.max.x-Aa.min.x|0,Aa.max.y-Aa.min.y|0),0<x&&(c(THREE.NormalBlending),b(1),e("rgba("+Math.floor(255*s.r)+","+Math.floor(255*s.g)+","+Math.floor(255*s.b)+","+x+")"),n.fillRect(Aa.min.x|0,Aa.min.y|0,Aa.max.x-Aa.min.x|0,Aa.max.y-Aa.min.y|0)),Aa.makeEmpty())};this.render=function(a, m){function p(a,b,c){for(var d=0,e=j.length;d<e;d++){var f=j[d],g=f.color;if(f instanceof THREE.DirectionalLight){var k=f.matrixWorld.getPosition().normalize(),h=b.dot(k);0>=h||(h*=f.intensity,c.r+=g.r*h,c.g+=g.g*h,c.b+=g.b*h)}else f instanceof THREE.PointLight&&(k=f.matrixWorld.getPosition(),h=b.dot(db.sub(k,a).normalize()),0>=h||(h*=0==f.distance?1:1-Math.min(a.distanceTo(k)/f.distance,1),0!=h&&(h*=f.intensity,c.r+=g.r*h,c.g+=g.g*h,c.b+=g.b*h)))}}function q(a,d,e,g,h,j,l,n){f.info.render.vertices+= 3;f.info.render.faces++;b(n.opacity);c(n.blending);B=a.positionScreen.x;K=a.positionScreen.y;N=d.positionScreen.x;W=d.positionScreen.y;T=e.positionScreen.x;da=e.positionScreen.y;s(B,K,N,W,T,da);(n instanceof THREE.MeshLambertMaterial||n instanceof THREE.MeshPhongMaterial)&&null===n.map&&null===n.map?(V.copy(n.color),aa.copy(n.emissive),n.vertexColors===THREE.FaceColors&&(V.r*=l.color.r,V.g*=l.color.g,V.b*=l.color.b),!0===bc?!1===n.wireframe&&n.shading==THREE.SmoothShading&&3==l.vertexNormalsLength? (ia.r=oa.r=ka.r=ta.r,ia.g=oa.g=ka.g=ta.g,ia.b=oa.b=ka.b=ta.b,p(l.v1.positionWorld,l.vertexNormalsModel[0],ia),p(l.v2.positionWorld,l.vertexNormalsModel[1],oa),p(l.v3.positionWorld,l.vertexNormalsModel[2],ka),ia.r=ia.r*V.r+aa.r,ia.g=ia.g*V.g+aa.g,ia.b=ia.b*V.b+aa.b,oa.r=oa.r*V.r+aa.r,oa.g=oa.g*V.g+aa.g,oa.b=oa.b*V.b+aa.b,ka.r=ka.r*V.r+aa.r,ka.g=ka.g*V.g+aa.g,ka.b=ka.b*V.b+aa.b,ua.r=0.5*(oa.r+ka.r),ua.g=0.5*(oa.g+ka.g),ua.b=0.5*(oa.b+ka.b),sa=L(ia,oa,ka,ua),A(B,K,N,W,T,da,0,0,1,0,0,1,sa)):(I.r=ta.r, I.g=ta.g,I.b=ta.b,p(l.centroidModel,l.normalModel,I),I.r=I.r*V.r+aa.r,I.g=I.g*V.g+aa.g,I.b=I.b*V.b+aa.b,!0===n.wireframe?k(I,n.wireframeLinewidth,n.wireframeLinecap,n.wireframeLinejoin):x(I)):!0===n.wireframe?k(n.color,n.wireframeLinewidth,n.wireframeLinecap,n.wireframeLinejoin):x(n.color)):n instanceof THREE.MeshBasicMaterial||n instanceof THREE.MeshLambertMaterial||n instanceof THREE.MeshPhongMaterial?null!==n.map?n.map.mapping instanceof THREE.UVMapping&&(Ea=l.uvs[0],v(B,K,N,W,T,da,Ea[g].x,Ea[g].y, Ea[h].x,Ea[h].y,Ea[j].x,Ea[j].y,n.map)):null!==n.envMap?n.envMap.mapping instanceof THREE.SphericalReflectionMapping&&(db.copy(l.vertexNormalsModelView[g]),ub=0.5*db.x+0.5,Fa=0.5*db.y+0.5,db.copy(l.vertexNormalsModelView[h]),jb=0.5*db.x+0.5,qb=0.5*db.y+0.5,db.copy(l.vertexNormalsModelView[j]),kb=0.5*db.x+0.5,Pb=0.5*db.y+0.5,v(B,K,N,W,T,da,ub,Fa,jb,qb,kb,Pb,n.envMap)):(I.copy(n.color),n.vertexColors===THREE.FaceColors&&(I.r*=l.color.r,I.g*=l.color.g,I.b*=l.color.b),!0===n.wireframe?k(I,n.wireframeLinewidth, n.wireframeLinecap,n.wireframeLinejoin):x(I)):n instanceof THREE.MeshDepthMaterial?(Ba=m.near,za=m.far,ia.r=ia.g=ia.b=1-Ya(a.positionScreen.z,Ba,za),oa.r=oa.g=oa.b=1-Ya(d.positionScreen.z,Ba,za),ka.r=ka.g=ka.b=1-Ya(e.positionScreen.z,Ba,za),ua.r=0.5*(oa.r+ka.r),ua.g=0.5*(oa.g+ka.g),ua.b=0.5*(oa.b+ka.b),sa=L(ia,oa,ka,ua),A(B,K,N,W,T,da,0,0,1,0,0,1,sa)):n instanceof THREE.MeshNormalMaterial&&(I.r=0.5*l.normalModelView.x+0.5,I.g=0.5*l.normalModelView.y+0.5,I.b=0.5*l.normalModelView.z+0.5,!0===n.wireframe? k(I,n.wireframeLinewidth,n.wireframeLinecap,n.wireframeLinejoin):x(I))}function s(a,b,c,d,e,f){n.beginPath();n.moveTo(a,b);n.lineTo(c,d);n.lineTo(e,f);n.closePath()}function u(a,b,c,d,e,f,g,k){n.beginPath();n.moveTo(a,b);n.lineTo(c,d);n.lineTo(e,f);n.lineTo(g,k);n.closePath()}function k(a,b,c,e){H!==b&&(H=n.lineWidth=b);C!==c&&(C=n.lineCap=c);z!==e&&(z=n.lineJoin=e);d(a.getStyle());n.stroke();Ga.expandByScalar(2*b)}function x(a){e(a.getStyle());n.fill()}function v(a,b,c,d,f,g,k,h,j,l,Jc,m,p){if(!(p instanceof THREE.DataTexture||void 0===p.image||0==p.image.width)){if(!0===p.needsUpdate){var q=p.wrapS==THREE.RepeatWrapping,r=p.wrapT==THREE.RepeatWrapping;wa[p.id]=n.createPattern(p.image,!0===q&&!0===r?"repeat":!0===q&&!1===r?"repeat-x":!1===q&&!0===r?"repeat-y":"no-repeat");p.needsUpdate=!1}void 0===wa[p.id]?e("rgba(0,0,0,1)"):e(wa[p.id]);var q=p.offset.x/p.repeat.x,r=p.offset.y/p.repeat.y,t=p.image.width*p.repeat.x,s=p.image.height*p.repeat.y;k=(k+q)*t;h=(1-h+r)*s;c-=a;d-=b;f-=a;g-=b;j=(j+q)*t-k;l=(1- l+r)*s-h;Jc=(Jc+q)*t-k;m=(1-m+r)*s-h;q=j*m-Jc*l;0===q?(void 0===Na[p.id]&&(b=document.createElement("canvas"),b.width=p.image.width,b.height=p.image.height,b=b.getContext("2d"),b.drawImage(p.image,0,0),Na[p.id]=b.getImageData(0,0,p.image.width,p.image.height).data),b=Na[p.id],k=4*(Math.floor(k)+Math.floor(h)*p.image.width),I.setRGB(b[k]/255,b[k+1]/255,b[k+2]/255),x(I)):(q=1/q,p=(m*c-l*f)*q,l=(m*d-l*g)*q,c=(j*f-Jc*c)*q,d=(j*g-Jc*d)*q,a=a-p*k-c*h,k=b-l*k-d*h,n.save(),n.transform(p,l,c,d,a,k),n.fill(), n.restore())}}function A(a,b,c,d,e,f,g,k,h,j,l,m,p){var q,r;q=p.width-1;r=p.height-1;g*=q;k*=r;c-=a;d-=b;e-=a;f-=b;h=h*q-g;j=j*r-k;l=l*q-g;m=m*r-k;r=1/(h*m-l*j);q=(m*c-j*e)*r;j=(m*d-j*f)*r;c=(h*e-l*c)*r;d=(h*f-l*d)*r;a=a-q*g-c*k;b=b-j*g-d*k;n.save();n.transform(q,j,c,d,a,b);n.clip();n.drawImage(p,0,0);n.restore()}function L(a,b,c,d){xb[0]=255*a.r|0;xb[1]=255*a.g|0;xb[2]=255*a.b|0;xb[4]=255*b.r|0;xb[5]=255*b.g|0;xb[6]=255*b.b|0;xb[8]=255*c.r|0;xb[9]=255*c.g|0;xb[10]=255*c.b|0;xb[12]=255*d.r|0;xb[13]= 255*d.g|0;xb[14]=255*d.b|0;pb.putImageData(ec,0,0);Tb.drawImage(Jb,0,0);return mc}function Ya(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}function Oa(a,b){var c=b.x-a.x,d=b.y-a.y,e=c*c+d*d;0!==e&&(e=1/Math.sqrt(e),c*=e,d*=e,b.x+=c,b.y+=d,a.x-=c,a.y-=d)}if(!1===m instanceof THREE.Camera)console.error("THREE.CanvasRenderer.render: camera is not an instance of THREE.Camera.");else{!0===this.autoClear&&this.clear();n.setTransform(1,0,0,-1,t,r);f.info.render.vertices=0;f.info.render.faces=0;g=l.projectScene(a, m,this.sortObjects,this.sortElements);h=g.elements;j=g.lights;bc=0<j.length;if(!0===bc){ta.setRGB(0,0,0);cb.setRGB(0,0,0);Db.setRGB(0,0,0);for(var vb=0,wc=j.length;vb<wc;vb++){var Y=j[vb],ga=Y.color;Y instanceof THREE.AmbientLight?(ta.r+=ga.r,ta.g+=ga.g,ta.b+=ga.b):Y instanceof THREE.DirectionalLight?(cb.r+=ga.r,cb.g+=ga.g,cb.b+=ga.b):Y instanceof THREE.PointLight&&(Db.r+=ga.r,Db.g+=ga.g,Db.b+=ga.b)}}vb=0;for(wc=h.length;vb<wc;vb++){var $=h[vb],Y=$.material;if(!(void 0===Y||!1===Y.visible)){Ga.makeEmpty(); if($ instanceof THREE.RenderableParticle){E=$;E.x*=t;E.y*=r;var ga=E,eb=$;b(Y.opacity);c(Y.blending);var rb=void 0,Za=void 0,fb=void 0,$a=void 0,Rb=$=void 0,qc=void 0;Y instanceof THREE.ParticleBasicMaterial?null===Y.map?(fb=eb.object.scale.x,$a=eb.object.scale.y,fb*=eb.scale.x*t,$a*=eb.scale.y*r,Ga.min.set(ga.x-fb,ga.y-$a),Ga.max.set(ga.x+fb,ga.y+$a),!1!==ob.isIntersectionBox(Ga)&&(e(Y.color.getStyle()),n.save(),n.translate(ga.x,ga.y),n.rotate(-eb.rotation),n.scale(fb,$a),n.fillRect(-1,-1,2,2),n.restore())): ($=Y.map.image,Rb=$.width>>1,qc=$.height>>1,fb=eb.scale.x*t,$a=eb.scale.y*r,rb=fb*Rb,Za=$a*qc,Ga.min.set(ga.x-rb,ga.y-Za),Ga.max.set(ga.x+rb,ga.y+Za),!1!==ob.isIntersectionBox(Ga)&&(n.save(),n.translate(ga.x,ga.y),n.rotate(-eb.rotation),n.scale(fb,-$a),n.translate(-Rb,-qc),n.drawImage($,0,0),n.restore())):Y instanceof THREE.ParticleCanvasMaterial&&(rb=eb.scale.x*t,Za=eb.scale.y*r,Ga.min.set(ga.x-rb,ga.y-Za),Ga.max.set(ga.x+rb,ga.y+Za),!1!==ob.isIntersectionBox(Ga)&&(d(Y.color.getStyle()),e(Y.color.getStyle()), n.save(),n.translate(ga.x,ga.y),n.rotate(-eb.rotation),n.scale(rb,Za),Y.program(n),n.restore()))}else $ instanceof THREE.RenderableLine?(E=$.v1,D=$.v2,E.positionScreen.x*=t,E.positionScreen.y*=r,D.positionScreen.x*=t,D.positionScreen.y*=r,Ga.setFromPoints([E.positionScreen,D.positionScreen]),!0===ob.isIntersectionBox(Ga)&&(ga=E,eb=D,b(Y.opacity),c(Y.blending),n.beginPath(),n.moveTo(ga.positionScreen.x,ga.positionScreen.y),n.lineTo(eb.positionScreen.x,eb.positionScreen.y),Y instanceof THREE.LineBasicMaterial&& (ga=Y.linewidth,H!==ga&&(H=n.lineWidth=ga),ga=Y.linecap,C!==ga&&(C=n.lineCap=ga),ga=Y.linejoin,z!==ga&&(z=n.lineJoin=ga),d(Y.color.getStyle()),n.stroke(),Ga.expandByScalar(2*Y.linewidth)))):$ instanceof THREE.RenderableFace3?(E=$.v1,D=$.v2,J=$.v3,E.positionScreen.x*=t,E.positionScreen.y*=r,D.positionScreen.x*=t,D.positionScreen.y*=r,J.positionScreen.x*=t,J.positionScreen.y*=r,!0===Y.overdraw&&(Oa(E.positionScreen,D.positionScreen),Oa(D.positionScreen,J.positionScreen),Oa(J.positionScreen,E.positionScreen)), Ga.setFromPoints([E.positionScreen,D.positionScreen,J.positionScreen]),!0===ob.isIntersectionBox(Ga)&&q(E,D,J,0,1,2,$,Y,a)):$ instanceof THREE.RenderableFace4&&(E=$.v1,D=$.v2,J=$.v3,X=$.v4,E.positionScreen.x*=t,E.positionScreen.y*=r,D.positionScreen.x*=t,D.positionScreen.y*=r,J.positionScreen.x*=t,J.positionScreen.y*=r,X.positionScreen.x*=t,X.positionScreen.y*=r,G.positionScreen.copy(D.positionScreen),S.positionScreen.copy(X.positionScreen),!0===Y.overdraw&&(Oa(E.positionScreen,D.positionScreen), Oa(D.positionScreen,X.positionScreen),Oa(X.positionScreen,E.positionScreen),Oa(J.positionScreen,G.positionScreen),Oa(J.positionScreen,S.positionScreen)),Ga.setFromPoints([E.positionScreen,D.positionScreen,J.positionScreen,X.positionScreen]),!0===ob.isIntersectionBox(Ga)&&(ga=E,eb=D,rb=J,Za=X,fb=G,$a=S,Rb=a,f.info.render.vertices+=4,f.info.render.faces++,b(Y.opacity),c(Y.blending),void 0!==Y.map&&null!==Y.map||void 0!==Y.envMap&&null!==Y.envMap?(q(ga,eb,Za,0,1,3,$,Y,Rb),q(fb,rb,$a,1,2,3,$,Y,Rb)):(B= ga.positionScreen.x,K=ga.positionScreen.y,N=eb.positionScreen.x,W=eb.positionScreen.y,T=rb.positionScreen.x,da=rb.positionScreen.y,la=Za.positionScreen.x,M=Za.positionScreen.y,ja=fb.positionScreen.x,ib=fb.positionScreen.y,ha=$a.positionScreen.x,Ka=$a.positionScreen.y,Y instanceof THREE.MeshLambertMaterial||Y instanceof THREE.MeshPhongMaterial?(V.copy(Y.color),aa.copy(Y.emissive),Y.vertexColors===THREE.FaceColors&&(V.r*=$.color.r,V.g*=$.color.g,V.b*=$.color.b),!0===bc?!1===Y.wireframe&&Y.shading== THREE.SmoothShading&&4==$.vertexNormalsLength?(ia.r=oa.r=ka.r=ua.r=ta.r,ia.g=oa.g=ka.g=ua.g=ta.g,ia.b=oa.b=ka.b=ua.b=ta.b,p($.v1.positionWorld,$.vertexNormalsModel[0],ia),p($.v2.positionWorld,$.vertexNormalsModel[1],oa),p($.v4.positionWorld,$.vertexNormalsModel[3],ka),p($.v3.positionWorld,$.vertexNormalsModel[2],ua),ia.r=ia.r*V.r+aa.r,ia.g=ia.g*V.g+aa.g,ia.b=ia.b*V.b+aa.b,oa.r=oa.r*V.r+aa.r,oa.g=oa.g*V.g+aa.g,oa.b=oa.b*V.b+aa.b,ka.r=ka.r*V.r+aa.r,ka.g=ka.g*V.g+aa.g,ka.b=ka.b*V.b+aa.b,ua.r=ua.r*V.r+ aa.r,ua.g=ua.g*V.g+aa.g,ua.b=ua.b*V.b+aa.b,sa=L(ia,oa,ka,ua),s(B,K,N,W,la,M),A(B,K,N,W,la,M,0,0,1,0,0,1,sa),s(ja,ib,T,da,ha,Ka),A(ja,ib,T,da,ha,Ka,1,0,1,1,0,1,sa)):(I.r=ta.r,I.g=ta.g,I.b=ta.b,p($.centroidModel,$.normalModel,I),I.r=I.r*V.r+aa.r,I.g=I.g*V.g+aa.g,I.b=I.b*V.b+aa.b,u(B,K,N,W,T,da,la,M),!0===Y.wireframe?k(I,Y.wireframeLinewidth,Y.wireframeLinecap,Y.wireframeLinejoin):x(I)):(I.r=V.r+aa.r,I.g=V.g+aa.g,I.b=V.b+aa.b,u(B,K,N,W,T,da,la,M),!0===Y.wireframe?k(I,Y.wireframeLinewidth,Y.wireframeLinecap, Y.wireframeLinejoin):x(I))):Y instanceof THREE.MeshBasicMaterial?(I.copy(Y.color),Y.vertexColors===THREE.FaceColors&&(I.r*=$.color.r,I.g*=$.color.g,I.b*=$.color.b),u(B,K,N,W,T,da,la,M),!0===Y.wireframe?k(I,Y.wireframeLinewidth,Y.wireframeLinecap,Y.wireframeLinejoin):x(I)):Y instanceof THREE.MeshNormalMaterial?(I.r=0.5*$.normalModelView.x+0.5,I.g=0.5*$.normalModelView.y+0.5,I.b=0.5*$.normalModelView.z+0.5,u(B,K,N,W,T,da,la,M),!0===Y.wireframe?k(I,Y.wireframeLinewidth,Y.wireframeLinecap,Y.wireframeLinejoin): x(I)):Y instanceof THREE.MeshDepthMaterial&&(Ba=m.near,za=m.far,ia.r=ia.g=ia.b=1-Ya(ga.positionScreen.z,Ba,za),oa.r=oa.g=oa.b=1-Ya(eb.positionScreen.z,Ba,za),ka.r=ka.g=ka.b=1-Ya(Za.positionScreen.z,Ba,za),ua.r=ua.g=ua.b=1-Ya(rb.positionScreen.z,Ba,za),sa=L(ia,oa,ka,ua),s(B,K,N,W,la,M),A(B,K,N,W,la,M,0,0,1,0,0,1,sa),s(ja,ib,T,da,ha,Ka),A(ja,ib,T,da,ha,Ka,1,0,1,1,0,1,sa)))));Aa.union(Ga)}}n.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 if ( combine == 2 ) {\ngl_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 worldPosition = modelMatrix * skinned;\n#endif\n#if defined( USE_MORPHTARGETS ) && ! defined( USE_SKINNING )\nvec4 worldPosition = modelMatrix * vec4( morphed, 1.0 );\n#endif\n#if ! defined( USE_MORPHTARGETS ) && ! defined( USE_SKINNING )\nvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\n#endif\n#endif", envmap_vertex:"#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP )\nvec3 worldNormal = mat3( modelMatrix[ 0 ].xyz, modelMatrix[ 1 ].xyz, modelMatrix[ 2 ].xyz ) * objectNormal;\nworldNormal = normalize( worldNormal );\nvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\nif ( useRefract ) {\nvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n} else {\nvReflect = reflect( cameraToVertex, worldNormal );\n}\n#endif",map_particle_pars_fragment:"#ifdef USE_MAP\nuniform sampler2D map;\n#endif", map_particle_fragment:"#ifdef USE_MAP\ngl_FragColor = gl_FragColor * texture2D( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) );\n#endif",map_pars_vertex:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP )\nvarying vec2 vUv;\nuniform vec4 offsetRepeat;\n#endif",map_pars_fragment:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP )\nvarying vec2 vUv;\n#endif\n#ifdef USE_MAP\nuniform sampler2D map;\n#endif", map_vertex:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP )\nvUv = uv * offsetRepeat.zw + offsetRepeat.xy;\n#endif",map_fragment:"#ifdef USE_MAP\nvec4 texelColor = texture2D( map, vUv );\n#ifdef GAMMA_INPUT\ntexelColor.xyz *= texelColor.xyz;\n#endif\ngl_FragColor = gl_FragColor * texelColor;\n#endif",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\nvarying vec2 vUv2;\nuniform sampler2D lightMap;\n#endif",lightmap_pars_vertex:"#ifdef USE_LIGHTMAP\nvarying vec2 vUv2;\n#endif", lightmap_fragment:"#ifdef USE_LIGHTMAP\ngl_FragColor = gl_FragColor * texture2D( lightMap, vUv2 );\n#endif",lightmap_vertex:"#ifdef USE_LIGHTMAP\nvUv2 = uv2;\n#endif",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\nuniform sampler2D bumpMap;\nuniform float bumpScale;\nvec2 dHdxy_fwd() {\nvec2 dSTdx = dFdx( vUv );\nvec2 dSTdy = dFdy( vUv );\nfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\nfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\nfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\nreturn vec2( dBx, dBy );\n}\nvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\nvec3 vSigmaX = dFdx( surf_pos );\nvec3 vSigmaY = dFdy( surf_pos );\nvec3 vN = surf_norm;\nvec3 R1 = cross( vSigmaY, vN );\nvec3 R2 = cross( vN, vSigmaX );\nfloat fDet = dot( vSigmaX, R1 );\nvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\nreturn normalize( abs( fDet ) * surf_norm - vGrad );\n}\n#endif", normalmap_pars_fragment:"#ifdef USE_NORMALMAP\nuniform sampler2D normalMap;\nuniform vec2 normalScale;\nvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\nvec3 q0 = dFdx( eye_pos.xyz );\nvec3 q1 = dFdy( eye_pos.xyz );\nvec2 st0 = dFdx( vUv.st );\nvec2 st1 = dFdy( vUv.st );\nvec3 S = normalize( q0 * st1.t - q1 * st0.t );\nvec3 T = normalize( -q0 * st1.s + q1 * st0.s );\nvec3 N = normalize( surf_norm );\nvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\nmapN.xy = normalScale * mapN.xy;\nmat3 tsn = mat3( S, T, N );\nreturn normalize( tsn * mapN );\n}\n#endif", specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\nuniform sampler2D specularMap;\n#endif",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\nvec4 texelSpecular = texture2D( specularMap, vUv );\nspecularStrength = texelSpecular.r;\n#else\nspecularStrength = 1.0;\n#endif",area_lights_utils:"#if MAX_AREA_LIGHTS > 0\nvec3 projectOnPlane( vec3 point, vec3 planeCenter, vec3 planeNorm ) {\nreturn point - dot( point - planeCenter, planeNorm ) * planeNorm;\n}\nbool sideOfPlane( vec3 point, vec3 planeCenter, vec3 planeNorm ) {\nreturn ( dot( point - planeCenter, planeNorm ) >= 0.0 );\n}\nvec3 linePlaneIntersect( vec3 lp, vec3 lv, vec3 pc, vec3 pn ) {\nreturn lp + lv * ( dot( pn, pc - lp ) / dot( pn, lv ) );\n}\nfloat calculateAttenuation( float dist, float constantAttenuation, float linearAttenuation, float quadraticAttenuation ) {\nreturn ( 1.0 / ( constantAttenuation + linearAttenuation * dist + quadraticAttenuation * dist * dist ) );\n}\n#endif", lights_lambert_pars_vertex:"uniform vec3 ambient;\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 ambientLightColor;\n#if MAX_DIR_LIGHTS > 0\nuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\nuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n#endif\n#if MAX_HEMI_LIGHTS > 0\nuniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];\nuniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];\nuniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];\n#endif\n#if MAX_POINT_LIGHTS > 0\nuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\nuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\n#endif\n#if MAX_SPOT_LIGHTS > 0\nuniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];\nuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\nuniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];\nuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\nuniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];\nuniform float spotLightExponent[ MAX_SPOT_LIGHTS ];\n#endif\n#if MAX_AREA_LIGHTS > 0\nuniform vec3 areaLightColor[ MAX_AREA_LIGHTS ];\nuniform vec3 areaLightPosition[ MAX_AREA_LIGHTS ];\nuniform vec3 areaLightNormal[ MAX_AREA_LIGHTS ];\nuniform vec3 areaLightRight[ MAX_AREA_LIGHTS ];\nuniform vec3 areaLightUp[ MAX_AREA_LIGHTS ];\nuniform vec3 areaLightSize[ MAX_AREA_LIGHTS ];\nuniform vec3 areaLightAttenuation[ MAX_AREA_LIGHTS ];\n#ifdef AREA_TEXTURE\nuniform sampler2D areaLightTexture[ MAX_AREA_LIGHTS ];\n#endif\n#endif\n#ifdef WRAP_AROUND\nuniform vec3 wrapRGB;\n#endif", lights_lambert_vertex:"vLightFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\nvLightBack = vec3( 0.0 );\n#endif\ntransformedNormal = normalize( transformedNormal );\n#if MAX_DIR_LIGHTS > 0\nfor( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\nvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\nvec3 dirVector = normalize( lDirection.xyz );\nfloat dotProduct = dot( transformedNormal, dirVector );\nvec3 directionalLightWeighting = vec3( max( dotProduct, 0.0 ) );\n#ifdef DOUBLE_SIDED\nvec3 directionalLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\n#ifdef WRAP_AROUND\nvec3 directionalLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\n#endif\n#endif\n#ifdef WRAP_AROUND\nvec3 directionalLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\ndirectionalLightWeighting = mix( directionalLightWeighting, directionalLightWeightingHalf, wrapRGB );\n#ifdef DOUBLE_SIDED\ndirectionalLightWeightingBack = mix( directionalLightWeightingBack, directionalLightWeightingHalfBack, wrapRGB );\n#endif\n#endif\nvLightFront += directionalLightColor[ i ] * directionalLightWeighting;\n#ifdef DOUBLE_SIDED\nvLightBack += directionalLightColor[ i ] * directionalLightWeightingBack;\n#endif\n}\n#endif\n#if MAX_POINT_LIGHTS > 0\nfor( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz - mvPosition.xyz;\nfloat lDistance = 1.0;\nif ( pointLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\nlVector = normalize( lVector );\nfloat dotProduct = dot( transformedNormal, lVector );\nvec3 pointLightWeighting = vec3( max( dotProduct, 0.0 ) );\n#ifdef DOUBLE_SIDED\nvec3 pointLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\n#ifdef WRAP_AROUND\nvec3 pointLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\n#endif\n#endif\n#ifdef WRAP_AROUND\nvec3 pointLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\npointLightWeighting = mix( pointLightWeighting, pointLightWeightingHalf, wrapRGB );\n#ifdef DOUBLE_SIDED\npointLightWeightingBack = mix( pointLightWeightingBack, pointLightWeightingHalfBack, wrapRGB );\n#endif\n#endif\nvLightFront += pointLightColor[ i ] * pointLightWeighting * lDistance;\n#ifdef DOUBLE_SIDED\nvLightBack += pointLightColor[ i ] * pointLightWeightingBack * lDistance;\n#endif\n}\n#endif\n#if MAX_SPOT_LIGHTS > 0\nfor( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\nvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz - mvPosition.xyz;\nfloat spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - worldPosition.xyz ) );\nif ( spotEffect > spotLightAngleCos[ i ] ) {\nspotEffect = max( pow( spotEffect, spotLightExponent[ i ] ), 0.0 );\nfloat lDistance = 1.0;\nif ( spotLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / spotLightDistance[ i ] ), 1.0 );\nlVector = normalize( lVector );\nfloat dotProduct = dot( transformedNormal, lVector );\nvec3 spotLightWeighting = vec3( max( dotProduct, 0.0 ) );\n#ifdef DOUBLE_SIDED\nvec3 spotLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\n#ifdef WRAP_AROUND\nvec3 spotLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\n#endif\n#endif\n#ifdef WRAP_AROUND\nvec3 spotLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\nspotLightWeighting = mix( spotLightWeighting, spotLightWeightingHalf, wrapRGB );\n#ifdef DOUBLE_SIDED\nspotLightWeightingBack = mix( spotLightWeightingBack, spotLightWeightingHalfBack, wrapRGB );\n#endif\n#endif\nvLightFront += spotLightColor[ i ] * spotLightWeighting * lDistance * spotEffect;\n#ifdef DOUBLE_SIDED\nvLightBack += spotLightColor[ i ] * spotLightWeightingBack * lDistance * spotEffect;\n#endif\n}\n}\n#endif\n#if MAX_HEMI_LIGHTS > 0\nfor( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {\nvec4 lDirection = viewMatrix * vec4( hemisphereLightDirection[ i ], 0.0 );\nvec3 lVector = normalize( lDirection.xyz );\nfloat dotProduct = dot( transformedNormal, lVector );\nfloat hemiDiffuseWeight = 0.5 * dotProduct + 0.5;\nvLightFront += mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );\n#ifdef DOUBLE_SIDED\nfloat hemiDiffuseWeightBack = -0.5 * dotProduct + 0.5;\nvLightBack += mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeightBack );\n#endif\n}\n#endif\n#if MAX_AREA_LIGHTS > 0\nfor( int i = 0; i < MAX_AREA_LIGHTS; i ++ ) {\nfloat w = areaLightSize[ i ].x;\nfloat h = areaLightSize[ i ].y;\nvec3 vertexPosition = mvPosition.xyz;\nvec3 proj = projectOnPlane( vertexPosition, areaLightPosition[ i ], areaLightNormal[ i ] );\nvec3 dir = proj - areaLightPosition[ i ];\nvec2 diagonal = vec2( dot( dir, areaLightRight[ i ] ), dot( dir, areaLightUp[ i ] ) );\nvec2 nearest2D = vec2( clamp( diagonal.x, -w, w ), clamp( diagonal.y, -h, h ) );\nvec3 nearestPointInside = areaLightPosition[ i ] + ( areaLightRight[ i ] * nearest2D.x + areaLightUp[ i ] * nearest2D.y );\nvec3 lightDir = normalize( nearestPointInside - vertexPosition );\nfloat NdotL = max( dot( areaLightNormal[ i ], -lightDir ), 0.0 );\nfloat NdotL2 = max( dot( normal, lightDir ), 0.0 );\nvec3 areaDiffuseWeight = vec3( sqrt( NdotL * NdotL2 ) );\nfloat dist = distance( vertexPosition, nearestPointInside );\nfloat attenuation = calculateAttenuation( dist, areaLightAttenuation[ i ].x, areaLightAttenuation[ i ].y, areaLightAttenuation[ i ].z );\nvec3 areaDiffuseTerm = areaDiffuseWeight * areaLightColor[ i ] * attenuation;\nvec3 textureTerm = vec3( 1.0 );\n#ifdef AREA_TEXTURE\nif ( areaLightSize[ i ].z > 0.0 ) {\nfloat d = distance( vertexPosition, nearestPointInside );\nvec2 co = ( diagonal.xy + vec2( w, h ) ) / ( 2.0 * vec2( w, h ) );\nco.y = 1.0 - co.y;\nvec3 ve = vertexPosition - areaLightPosition[ i ];\nvec4 diff = vec4( 0.0 );\nif ( dot( ve, areaLightNormal[ i ] ) < 0.0 ) {\ndiff = vec4( 0.0 );\n} else {\nfloat lod = max( pow( d, 0.1 ), 0.0 ) * 5.0;\nvec4 t00 = texture2DLod( areaLightTexture[ i ], co, lod );\nvec4 t01 = texture2DLod( areaLightTexture[ i ], co, lod + 1.0 );\ndiff = mix( t00, t01, 0.5 );\n}\ntextureTerm = diff.xyz;\nareaDiffuseTerm *= textureTerm;\n}\n#endif\nvLightFront += areaDiffuseTerm;\n#ifdef DOUBLE_SIDED\nfloat NdotL2Back = max( dot( -normal, lightDir ), 0.0 );\nvec3 areaDiffuseWeightBack = vec3( sqrt( NdotL * NdotL2Back ) );\nvLightBack += areaDiffuseWeightBack * areaLightColor[ i ] * attenuation * textureTerm;\n#endif\n}\n#endif\nvLightFront = vLightFront * diffuse + ambient * ambientLightColor + emissive;\n#ifdef DOUBLE_SIDED\nvLightBack = vLightBack * diffuse + ambient * ambientLightColor + emissive;\n#endif", lights_phong_pars_vertex:"#ifndef PHONG_PER_PIXEL\n#if MAX_POINT_LIGHTS > 0\nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\nuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\nvarying vec4 vPointLight[ MAX_POINT_LIGHTS ];\n#endif\n#if MAX_SPOT_LIGHTS > 0\nuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\nuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\nvarying vec4 vSpotLight[ MAX_SPOT_LIGHTS ];\n#endif\n#endif\n#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP )\nvarying vec3 vWorldPosition;\n#endif", lights_phong_vertex:"#ifndef PHONG_PER_PIXEL\n#if MAX_POINT_LIGHTS > 0\nfor( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz - mvPosition.xyz;\nfloat lDistance = 1.0;\nif ( pointLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\nvPointLight[ i ] = vec4( lVector, lDistance );\n}\n#endif\n#if MAX_SPOT_LIGHTS > 0\nfor( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\nvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz - mvPosition.xyz;\nfloat lDistance = 1.0;\nif ( spotLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / spotLightDistance[ i ] ), 1.0 );\nvSpotLight[ i ] = vec4( lVector, lDistance );\n}\n#endif\n#endif\n#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP )\nvWorldPosition = worldPosition.xyz;\n#endif", lights_phong_pars_fragment:"uniform vec3 ambientLightColor;\n#if MAX_DIR_LIGHTS > 0\nuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\nuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n#endif\n#if MAX_HEMI_LIGHTS > 0\nuniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];\nuniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];\nuniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];\n#endif\n#if MAX_POINT_LIGHTS > 0\nuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\n#ifdef PHONG_PER_PIXEL\nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\nuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\n#else\nvarying vec4 vPointLight[ MAX_POINT_LIGHTS ];\n#endif\n#endif\n#if MAX_SPOT_LIGHTS > 0\nuniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];\nuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\nuniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];\nuniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];\nuniform float spotLightExponent[ MAX_SPOT_LIGHTS ];\n#ifdef PHONG_PER_PIXEL\nuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\n#else\nvarying vec4 vSpotLight[ MAX_SPOT_LIGHTS ];\n#endif\n#endif\n#if MAX_AREA_LIGHTS > 0\nuniform vec3 areaLightColor[ MAX_AREA_LIGHTS ];\nuniform vec3 areaLightPosition[ MAX_AREA_LIGHTS ];\nuniform vec3 areaLightNormal[ MAX_AREA_LIGHTS ];\nuniform vec3 areaLightRight[ MAX_AREA_LIGHTS ];\nuniform vec3 areaLightUp[ MAX_AREA_LIGHTS ];\nuniform vec3 areaLightSize[ MAX_AREA_LIGHTS ];\nuniform vec3 areaLightAttenuation[ MAX_AREA_LIGHTS ];\n#ifdef AREA_TEXTURE\nuniform sampler2D areaLightTexture[ MAX_AREA_LIGHTS ];\n#endif\n#endif\n#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP )\nvarying vec3 vWorldPosition;\n#endif\n#ifdef WRAP_AROUND\nuniform vec3 wrapRGB;\n#endif\nvarying vec3 vViewPosition;\nvarying vec3 vNormal;", lights_phong_fragment:"vec3 normal = normalize( vNormal );\nvec3 viewPosition = normalize( vViewPosition );\n#ifdef DOUBLE_SIDED\nnormal = normal * ( -1.0 + 2.0 * float( gl_FrontFacing ) );\n#endif\n#ifdef USE_NORMALMAP\nnormal = perturbNormal2Arb( -viewPosition, normal );\n#elif defined( USE_BUMPMAP )\nnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif\n#if MAX_POINT_LIGHTS > 0\nvec3 pointDiffuse = vec3( 0.0 );\nvec3 pointSpecular = vec3( 0.0 );\nfor ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\n#ifdef PHONG_PER_PIXEL\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz + vViewPosition.xyz;\nfloat lDistance = 1.0;\nif ( pointLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\nlVector = normalize( lVector );\n#else\nvec3 lVector = normalize( vPointLight[ i ].xyz );\nfloat lDistance = vPointLight[ i ].w;\n#endif\nfloat dotProduct = dot( normal, lVector );\n#ifdef WRAP_AROUND\nfloat pointDiffuseWeightFull = max( dotProduct, 0.0 );\nfloat pointDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\nvec3 pointDiffuseWeight = mix( vec3 ( pointDiffuseWeightFull ), vec3( pointDiffuseWeightHalf ), wrapRGB );\n#else\nfloat pointDiffuseWeight = max( dotProduct, 0.0 );\n#endif\npointDiffuse += diffuse * pointLightColor[ i ] * pointDiffuseWeight * lDistance;\nvec3 pointHalfVector = normalize( lVector + viewPosition );\nfloat pointDotNormalHalf = max( dot( normal, pointHalfVector ), 0.0 );\nfloat pointSpecularWeight = specularStrength * max( pow( pointDotNormalHalf, shininess ), 0.0 );\n#ifdef PHYSICALLY_BASED_SHADING\nfloat specularNormalization = ( shininess + 2.0001 ) / 8.0;\nvec3 schlick = specular + vec3( 1.0 - specular ) * pow( 1.0 - dot( lVector, pointHalfVector ), 5.0 );\npointSpecular += schlick * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * lDistance * specularNormalization;\n#else\npointSpecular += specular * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * lDistance;\n#endif\n}\n#endif\n#if MAX_SPOT_LIGHTS > 0\nvec3 spotDiffuse = vec3( 0.0 );\nvec3 spotSpecular = vec3( 0.0 );\nfor ( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\n#ifdef PHONG_PER_PIXEL\nvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz + vViewPosition.xyz;\nfloat lDistance = 1.0;\nif ( spotLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / spotLightDistance[ i ] ), 1.0 );\nlVector = normalize( lVector );\n#else\nvec3 lVector = normalize( vSpotLight[ i ].xyz );\nfloat lDistance = vSpotLight[ i ].w;\n#endif\nfloat spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - vWorldPosition ) );\nif ( spotEffect > spotLightAngleCos[ i ] ) {\nspotEffect = max( pow( spotEffect, spotLightExponent[ i ] ), 0.0 );\nfloat dotProduct = dot( normal, lVector );\n#ifdef WRAP_AROUND\nfloat spotDiffuseWeightFull = max( dotProduct, 0.0 );\nfloat spotDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\nvec3 spotDiffuseWeight = mix( vec3 ( spotDiffuseWeightFull ), vec3( spotDiffuseWeightHalf ), wrapRGB );\n#else\nfloat spotDiffuseWeight = max( dotProduct, 0.0 );\n#endif\nspotDiffuse += diffuse * spotLightColor[ i ] * spotDiffuseWeight * lDistance * spotEffect;\nvec3 spotHalfVector = normalize( lVector + viewPosition );\nfloat spotDotNormalHalf = max( dot( normal, spotHalfVector ), 0.0 );\nfloat spotSpecularWeight = specularStrength * max( pow( spotDotNormalHalf, shininess ), 0.0 );\n#ifdef PHYSICALLY_BASED_SHADING\nfloat specularNormalization = ( shininess + 2.0001 ) / 8.0;\nvec3 schlick = specular + vec3( 1.0 - specular ) * pow( 1.0 - dot( lVector, spotHalfVector ), 5.0 );\nspotSpecular += schlick * spotLightColor[ i ] * spotSpecularWeight * spotDiffuseWeight * lDistance * specularNormalization * spotEffect;\n#else\nspotSpecular += specular * spotLightColor[ i ] * spotSpecularWeight * spotDiffuseWeight * lDistance * spotEffect;\n#endif\n}\n}\n#endif\n#if MAX_DIR_LIGHTS > 0\nvec3 dirDiffuse = vec3( 0.0 );\nvec3 dirSpecular = vec3( 0.0 );\nfor( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\nvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\nvec3 dirVector = normalize( lDirection.xyz );\nfloat dotProduct = dot( normal, dirVector );\n#ifdef WRAP_AROUND\nfloat dirDiffuseWeightFull = max( dotProduct, 0.0 );\nfloat dirDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\nvec3 dirDiffuseWeight = mix( vec3( dirDiffuseWeightFull ), vec3( dirDiffuseWeightHalf ), wrapRGB );\n#else\nfloat dirDiffuseWeight = max( dotProduct, 0.0 );\n#endif\ndirDiffuse += diffuse * directionalLightColor[ i ] * dirDiffuseWeight;\nvec3 dirHalfVector = normalize( dirVector + viewPosition );\nfloat dirDotNormalHalf = max( dot( normal, dirHalfVector ), 0.0 );\nfloat dirSpecularWeight = specularStrength * max( pow( dirDotNormalHalf, shininess ), 0.0 );\n#ifdef PHYSICALLY_BASED_SHADING\nfloat specularNormalization = ( shininess + 2.0001 ) / 8.0;\nvec3 schlick = specular + vec3( 1.0 - specular ) * pow( 1.0 - dot( dirVector, dirHalfVector ), 5.0 );\ndirSpecular += schlick * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight * specularNormalization;\n#else\ndirSpecular += specular * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight;\n#endif\n}\n#endif\n#if MAX_HEMI_LIGHTS > 0\nvec3 hemiDiffuse = vec3( 0.0 );\nvec3 hemiSpecular = vec3( 0.0 );\nfor( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {\nvec4 lDirection = viewMatrix * vec4( hemisphereLightDirection[ i ], 0.0 );\nvec3 lVector = normalize( lDirection.xyz );\nfloat dotProduct = dot( normal, lVector );\nfloat hemiDiffuseWeight = 0.5 * dotProduct + 0.5;\nvec3 hemiColor = mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );\nhemiDiffuse += diffuse * hemiColor;\nvec3 hemiHalfVectorSky = normalize( lVector + viewPosition );\nfloat hemiDotNormalHalfSky = 0.5 * dot( normal, hemiHalfVectorSky ) + 0.5;\nfloat hemiSpecularWeightSky = specularStrength * max( pow( hemiDotNormalHalfSky, shininess ), 0.0 );\nvec3 lVectorGround = -lVector;\nvec3 hemiHalfVectorGround = normalize( lVectorGround + viewPosition );\nfloat hemiDotNormalHalfGround = 0.5 * dot( normal, hemiHalfVectorGround ) + 0.5;\nfloat hemiSpecularWeightGround = specularStrength * max( pow( hemiDotNormalHalfGround, shininess ), 0.0 );\n#ifdef PHYSICALLY_BASED_SHADING\nfloat dotProductGround = dot( normal, lVectorGround );\nfloat specularNormalization = ( shininess + 2.0001 ) / 8.0;\nvec3 schlickSky = specular + vec3( 1.0 - specular ) * pow( 1.0 - dot( lVector, hemiHalfVectorSky ), 5.0 );\nvec3 schlickGround = specular + vec3( 1.0 - specular ) * pow( 1.0 - dot( lVectorGround, hemiHalfVectorGround ), 5.0 );\nhemiSpecular += hemiColor * specularNormalization * ( schlickSky * hemiSpecularWeightSky * max( dotProduct, 0.0 ) + schlickGround * hemiSpecularWeightGround * max( dotProductGround, 0.0 ) );\n#else\nhemiSpecular += specular * hemiColor * ( hemiSpecularWeightSky + hemiSpecularWeightGround ) * hemiDiffuseWeight;\n#endif\n}\n#endif\n#if MAX_AREA_LIGHTS > 0\nvec3 areaDiffuse = vec3( 0.0 );\nvec3 areaSpecular = vec3( 0.0 );\nfor( int i = 0; i < MAX_AREA_LIGHTS; i ++ ) {\nfloat w = areaLightSize[ i ].x;\nfloat h = areaLightSize[ i ].y;\nvec3 vertexPosition = -vViewPosition.xyz;\nvec3 proj = projectOnPlane( vertexPosition, areaLightPosition[ i ], areaLightNormal[ i ] );\nvec3 dir = proj - areaLightPosition[ i ];\nvec2 diagonal = vec2( dot( dir, areaLightRight[ i ] ), dot( dir, areaLightUp[ i ] ) );\nvec2 nearest2D = vec2( clamp( diagonal.x, -w, w ), clamp( diagonal.y, -h, h ) );\nvec3 nearestPointInside = areaLightPosition[ i ] + ( areaLightRight[ i ] * nearest2D.x + areaLightUp[ i ] * nearest2D.y );\nvec3 lightDir = normalize( nearestPointInside - vertexPosition );\nfloat NdotL = max( dot( areaLightNormal[ i ], -lightDir ), 0.0 );\nfloat NdotL2 = max( dot( normal, lightDir ), 0.0 );\nvec3 areaDiffuseWeight = vec3( sqrt( NdotL * NdotL2 ) );\nfloat dist = distance( vertexPosition, nearestPointInside );\nfloat attenuation = calculateAttenuation( dist, areaLightAttenuation[ i ].x, areaLightAttenuation[ i ].y, areaLightAttenuation[ i ].z );\nvec3 areaDiffuseTerm = diffuse * areaDiffuseWeight * areaLightColor[ i ] * attenuation;\n#ifdef AREA_TEXTURE\nif ( areaLightSize[ i ].z > 0.0 ) {\nfloat d = distance( vertexPosition, nearestPointInside );\nvec2 co = ( diagonal.xy + vec2( w, h ) ) / ( 2.0 * vec2( w, h ) );\nco.y = 1.0 - co.y;\nvec3 ve = vertexPosition - areaLightPosition[ i ];\nvec4 diff = vec4( 0.0 );\nif ( dot( ve, areaLightNormal[ i ] ) < 0.0 ) {\ndiff = vec4( 0.0 );\n} else {\nfloat lod = max( pow( d, 0.1 ), 0.0 ) * 5.0;\nvec4 t00 = texture2D( areaLightTexture[ i ], co, lod );\nvec4 t01 = texture2D( areaLightTexture[ i ], co, lod + 1.0 );\ndiff = mix( t00, t01, 0.5 );\n}\nareaDiffuseTerm *= diff.xyz;\n}\n#endif\nareaDiffuse += areaDiffuseTerm;\nvec3 R = reflect( normalize( -vertexPosition ), normal );\nvec3 E = linePlaneIntersect( vertexPosition, R, areaLightPosition[ i ], areaLightNormal[ i ] );\nfloat specAngle = dot( R, areaLightNormal[ i ] );\nif ( dot( vertexPosition - areaLightPosition[ i ], areaLightNormal[ i ] ) >= 0.0 && specAngle > 0.0 ) {\nvec3 dirSpec = E - areaLightPosition[ i ];\nvec2 dirSpec2D = vec2( dot( dirSpec, areaLightRight[ i ] ), dot( dirSpec, areaLightUp[ i ] ) );\nvec2 nearestSpec2D = vec2( clamp( dirSpec2D.x, -w, w ), clamp( dirSpec2D.y, -h, h ) );\nfloat specFactor = 1.0 - clamp( length( nearestSpec2D - dirSpec2D ) * 0.05 * shininess, 0.0, 1.0 );\nvec3 areaSpecularWeight = specFactor * specAngle * areaDiffuseWeight;\nvec3 areaSpecularTerm = specular * areaSpecularWeight * areaLightColor[ i ] * attenuation;\n#ifdef AREA_TEXTURE\nif ( areaLightSize[ i ].z > 0.0 ) {\nfloat hard = 16.0;\nfloat gloss = 16.0;\nvec3 specPlane = areaLightPosition[ i ] + ( areaLightRight[ i ] * dirSpec2D.x + areaLightUp[ i ] * dirSpec2D.y );\nfloat dist = max( distance( vertexPosition, specPlane ), 0.0 );\nfloat d = ( ( 1.0 / hard ) / 2.0 ) * ( dist / gloss );\nw = max( w, 0.0 );\nh = max( h, 0.0 );\nvec2 co = dirSpec2D / ( d + 1.0 );\nco /= 2.0 * vec2( w, h );\nco = co + vec2( 0.5 );\nco.y = 1.0 - co.y;\nfloat lod = ( 2.0 / hard * max( dist, 0.0 ) );\nvec4 t00 = texture2D( areaLightTexture[ i ], co, lod );\nvec4 t01 = texture2D( areaLightTexture[ i ], co, lod + 1.0 );\nvec4 spec = mix( t00, t01, 0.5 );\nareaSpecularTerm *= spec.xyz;\n}\n#endif\nareaSpecular += areaSpecularTerm;\n}\n}\n#endif\nvec3 totalDiffuse = vec3( 0.0 );\nvec3 totalSpecular = vec3( 0.0 );\n#if MAX_DIR_LIGHTS > 0\ntotalDiffuse += dirDiffuse;\ntotalSpecular += dirSpecular;\n#endif\n#if MAX_HEMI_LIGHTS > 0\ntotalDiffuse += hemiDiffuse;\ntotalSpecular += hemiSpecular;\n#endif\n#if MAX_POINT_LIGHTS > 0\ntotalDiffuse += pointDiffuse;\ntotalSpecular += pointSpecular;\n#endif\n#if MAX_SPOT_LIGHTS > 0\ntotalDiffuse += spotDiffuse;\ntotalSpecular += spotSpecular;\n#endif\n#if MAX_AREA_LIGHTS > 0\ntotalDiffuse += areaDiffuse;\ntotalSpecular += areaSpecular;\n#endif\n#ifdef METAL\ngl_FragColor.xyz = gl_FragColor.xyz * ( emissive + totalDiffuse + ambientLightColor * ambient + totalSpecular );\n#else\ngl_FragColor.xyz = gl_FragColor.xyz * ( emissive + totalDiffuse + ambientLightColor * ambient ) + totalSpecular;\n#endif", color_pars_fragment:"#ifdef USE_COLOR\nvarying vec3 vColor;\n#endif",color_fragment:"#ifdef USE_COLOR\ngl_FragColor = gl_FragColor * vec4( vColor, opacity );\n#endif",color_pars_vertex:"#ifdef USE_COLOR\nvarying vec3 vColor;\n#endif",color_vertex:"#ifdef USE_COLOR\n#ifdef GAMMA_INPUT\nvColor = color * color;\n#else\nvColor = color;\n#endif\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n#ifdef BONE_TEXTURE\nuniform sampler2D boneTexture;\nmat4 getBoneMatrix( const in float i ) {\nfloat j = i * 4.0;\nfloat x = mod( j, N_BONE_PIXEL_X );\nfloat y = floor( j / N_BONE_PIXEL_X );\nconst float dx = 1.0 / N_BONE_PIXEL_X;\nconst float dy = 1.0 / N_BONE_PIXEL_Y;\ny = dy * ( y + 0.5 );\nvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\nvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\nvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\nvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\nmat4 bone = mat4( v1, v2, v3, v4 );\nreturn bone;\n}\n#else\nuniform mat4 boneGlobalMatrices[ MAX_BONES ];\nmat4 getBoneMatrix( const in float i ) {\nmat4 bone = boneGlobalMatrices[ int(i) ];\nreturn bone;\n}\n#endif\n#endif", skinbase_vertex:"#ifdef USE_SKINNING\nmat4 boneMatX = getBoneMatrix( skinIndex.x );\nmat4 boneMatY = getBoneMatrix( skinIndex.y );\n#endif",skinning_vertex:"#ifdef USE_SKINNING\n#ifdef USE_MORPHTARGETS\nvec4 skinVertex = vec4( morphed, 1.0 );\n#else\nvec4 skinVertex = vec4( position, 1.0 );\n#endif\nvec4 skinned = boneMatX * skinVertex * skinWeight.x;\nskinned \t += boneMatY * skinVertex * skinWeight.y;\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n#ifndef USE_MORPHNORMALS\nuniform float morphTargetInfluences[ 8 ];\n#else\nuniform float morphTargetInfluences[ 4 ];\n#endif\n#endif", morphtarget_vertex:"#ifdef USE_MORPHTARGETS\nvec3 morphed = vec3( 0.0 );\nmorphed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\nmorphed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\nmorphed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\nmorphed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\n#ifndef USE_MORPHNORMALS\nmorphed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\nmorphed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\nmorphed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\nmorphed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\n#endif\nmorphed += position;\n#endif", default_vertex:"vec4 mvPosition;\n#ifdef USE_SKINNING\nmvPosition = modelViewMatrix * skinned;\n#endif\n#if !defined( USE_SKINNING ) && defined( USE_MORPHTARGETS )\nmvPosition = modelViewMatrix * vec4( morphed, 1.0 );\n#endif\n#if !defined( USE_SKINNING ) && ! defined( USE_MORPHTARGETS )\nmvPosition = modelViewMatrix * vec4( position, 1.0 );\n#endif\ngl_Position = projectionMatrix * mvPosition;",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\nvec3 morphedNormal = vec3( 0.0 );\nmorphedNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\nmorphedNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\nmorphedNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\nmorphedNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\nmorphedNormal += normal;\n#endif", skinnormal_vertex:"#ifdef USE_SKINNING\nmat4 skinMatrix = skinWeight.x * boneMatX;\nskinMatrix \t+= skinWeight.y * boneMatY;\n#ifdef USE_MORPHNORMALS\nvec4 skinnedNormal = skinMatrix * vec4( morphedNormal, 0.0 );\n#else\nvec4 skinnedNormal = skinMatrix * vec4( normal, 0.0 );\n#endif\n#endif",defaultnormal_vertex:"vec3 objectNormal;\n#ifdef USE_SKINNING\nobjectNormal = skinnedNormal.xyz;\n#endif\n#if !defined( USE_SKINNING ) && defined( USE_MORPHNORMALS )\nobjectNormal = morphedNormal;\n#endif\n#if !defined( USE_SKINNING ) && ! defined( USE_MORPHNORMALS )\nobjectNormal = normal;\n#endif\n#ifdef FLIP_SIDED\nobjectNormal = -objectNormal;\n#endif\nvec3 transformedNormal = normalMatrix * objectNormal;", shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\nuniform sampler2D shadowMap[ MAX_SHADOWS ];\nuniform vec2 shadowMapSize[ MAX_SHADOWS ];\nuniform float shadowDarkness[ MAX_SHADOWS ];\nuniform float shadowBias[ MAX_SHADOWS ];\nvarying vec4 vShadowCoord[ MAX_SHADOWS ];\nfloat unpackDepth( const in vec4 rgba_depth ) {\nconst vec4 bit_shift = vec4( 1.0 / ( 256.0 * 256.0 * 256.0 ), 1.0 / ( 256.0 * 256.0 ), 1.0 / 256.0, 1.0 );\nfloat depth = dot( rgba_depth, bit_shift );\nreturn depth;\n}\n#endif",shadowmap_fragment:"#ifdef USE_SHADOWMAP\n#ifdef SHADOWMAP_DEBUG\nvec3 frustumColors[3];\nfrustumColors[0] = vec3( 1.0, 0.5, 0.0 );\nfrustumColors[1] = vec3( 0.0, 1.0, 0.8 );\nfrustumColors[2] = vec3( 0.0, 0.5, 1.0 );\n#endif\n#ifdef SHADOWMAP_CASCADE\nint inFrustumCount = 0;\n#endif\nfloat fDepth;\nvec3 shadowColor = vec3( 1.0 );\nfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\nvec3 shadowCoord = vShadowCoord[ i ].xyz / vShadowCoord[ i ].w;\nbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\nbool inFrustum = all( inFrustumVec );\n#ifdef SHADOWMAP_CASCADE\ninFrustumCount += int( inFrustum );\nbvec3 frustumTestVec = bvec3( inFrustum, inFrustumCount == 1, shadowCoord.z <= 1.0 );\n#else\nbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n#endif\nbool frustumTest = all( frustumTestVec );\nif ( frustumTest ) {\nshadowCoord.z += shadowBias[ i ];\n#if defined( SHADOWMAP_TYPE_PCF )\nfloat shadow = 0.0;\nconst float shadowDelta = 1.0 / 9.0;\nfloat xPixelOffset = 1.0 / shadowMapSize[ i ].x;\nfloat yPixelOffset = 1.0 / shadowMapSize[ i ].y;\nfloat dx0 = -1.25 * xPixelOffset;\nfloat dy0 = -1.25 * yPixelOffset;\nfloat dx1 = 1.25 * xPixelOffset;\nfloat dy1 = 1.25 * yPixelOffset;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy0 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy0 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy0 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, 0.0 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, 0.0 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy1 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy1 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy1 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nshadowColor = shadowColor * vec3( ( 1.0 - shadowDarkness[ i ] * shadow ) );\n#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\nfloat shadow = 0.0;\nfloat xPixelOffset = 1.0 / shadowMapSize[ i ].x;\nfloat yPixelOffset = 1.0 / shadowMapSize[ i ].y;\nfloat dx0 = -1.0 * xPixelOffset;\nfloat dy0 = -1.0 * yPixelOffset;\nfloat dx1 = 1.0 * xPixelOffset;\nfloat dy1 = 1.0 * yPixelOffset;\nmat3 shadowKernel;\nmat3 depthKernel;\ndepthKernel[0][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy0 ) ) );\nif ( depthKernel[0][0] < shadowCoord.z ) shadowKernel[0][0] = 0.25;\nelse shadowKernel[0][0] = 0.0;\ndepthKernel[0][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, 0.0 ) ) );\nif ( depthKernel[0][1] < shadowCoord.z ) shadowKernel[0][1] = 0.25;\nelse shadowKernel[0][1] = 0.0;\ndepthKernel[0][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy1 ) ) );\nif ( depthKernel[0][2] < shadowCoord.z ) shadowKernel[0][2] = 0.25;\nelse shadowKernel[0][2] = 0.0;\ndepthKernel[1][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy0 ) ) );\nif ( depthKernel[1][0] < shadowCoord.z ) shadowKernel[1][0] = 0.25;\nelse shadowKernel[1][0] = 0.0;\ndepthKernel[1][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy ) );\nif ( depthKernel[1][1] < shadowCoord.z ) shadowKernel[1][1] = 0.25;\nelse shadowKernel[1][1] = 0.0;\ndepthKernel[1][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy1 ) ) );\nif ( depthKernel[1][2] < shadowCoord.z ) shadowKernel[1][2] = 0.25;\nelse shadowKernel[1][2] = 0.0;\ndepthKernel[2][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy0 ) ) );\nif ( depthKernel[2][0] < shadowCoord.z ) shadowKernel[2][0] = 0.25;\nelse shadowKernel[2][0] = 0.0;\ndepthKernel[2][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, 0.0 ) ) );\nif ( depthKernel[2][1] < shadowCoord.z ) shadowKernel[2][1] = 0.25;\nelse shadowKernel[2][1] = 0.0;\ndepthKernel[2][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy1 ) ) );\nif ( depthKernel[2][2] < shadowCoord.z ) shadowKernel[2][2] = 0.25;\nelse shadowKernel[2][2] = 0.0;\nvec2 fractionalCoord = 1.0 - fract( shadowCoord.xy * shadowMapSize[i].xy );\nshadowKernel[0] = mix( shadowKernel[1], shadowKernel[0], fractionalCoord.x );\nshadowKernel[1] = mix( shadowKernel[2], shadowKernel[1], fractionalCoord.x );\nvec4 shadowValues;\nshadowValues.x = mix( shadowKernel[0][1], shadowKernel[0][0], fractionalCoord.y );\nshadowValues.y = mix( shadowKernel[0][2], shadowKernel[0][1], fractionalCoord.y );\nshadowValues.z = mix( shadowKernel[1][1], shadowKernel[1][0], fractionalCoord.y );\nshadowValues.w = mix( shadowKernel[1][2], shadowKernel[1][1], fractionalCoord.y );\nshadow = dot( shadowValues, vec4( 1.0 ) );\nshadowColor = shadowColor * vec3( ( 1.0 - shadowDarkness[ i ] * shadow ) );\n#else\nvec4 rgbaDepth = texture2D( shadowMap[ i ], shadowCoord.xy );\nfloat fDepth = unpackDepth( rgbaDepth );\nif ( fDepth < shadowCoord.z )\nshadowColor = shadowColor * vec3( 1.0 - shadowDarkness[ i ] );\n#endif\n}\n#ifdef SHADOWMAP_DEBUG\n#ifdef SHADOWMAP_CASCADE\nif ( inFrustum && inFrustumCount == 1 ) gl_FragColor.xyz *= frustumColors[ i ];\n#else\nif ( inFrustum ) gl_FragColor.xyz *= frustumColors[ i ];\n#endif\n#endif\n}\n#ifdef GAMMA_OUTPUT\nshadowColor *= shadowColor;\n#endif\ngl_FragColor.xyz = gl_FragColor.xyz * shadowColor;\n#endif", shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\nvarying vec4 vShadowCoord[ MAX_SHADOWS ];\nuniform mat4 shadowMatrix[ MAX_SHADOWS ];\n#endif",shadowmap_vertex:"#ifdef USE_SHADOWMAP\nfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\nvShadowCoord[ i ] = shadowMatrix[ i ] * worldPosition;\n}\n#endif",alphatest_fragment:"#ifdef ALPHATEST\nif ( gl_FragColor.a < ALPHATEST ) discard;\n#endif",linear_to_gamma_fragment:"#ifdef GAMMA_OUTPUT\ngl_FragColor.xyz = sqrt( gl_FragColor.xyz );\n#endif"}; THREE.UniformsUtils={merge:function(a){var b,c,d,e={};for(b=0;b<a.length;b++)for(c in d=this.clone(a[b]),d)e[c]=d[c];return e},clone:function(a){var b,c,d,e={};for(b in a)for(c in e[b]={},a[b])d=a[b][c],e[b][c]=d instanceof THREE.Color||d instanceof THREE.Vector2||d instanceof THREE.Vector3||d instanceof THREE.Vector4||d instanceof THREE.Matrix4||d instanceof THREE.Texture?d.clone():d instanceof Array?d.slice():d;return e}}; THREE.UniformsLib={common:{diffuse:{type:"c",value:new THREE.Color(15658734)},opacity:{type:"f",value:1},map:{type:"t",value:null},offsetRepeat:{type:"v4",value:new THREE.Vector4(0,0,1,1)},lightMap:{type:"t",value:null},specularMap:{type:"t",value:null},envMap:{type:"t",value:null},flipEnvMap:{type:"f",value:-1},useRefract:{type:"i",value:0},reflectivity:{type:"f",value:1},refractionRatio:{type:"f",value:0.98},combine:{type:"i",value:0},morphTargetInfluences:{type:"f",value:0}},bump:{bumpMap:{type:"t", value:null},bumpScale:{type:"f",value:1}},normalmap:{normalMap:{type:"t",value:null},normalScale:{type:"v2",value:new THREE.Vector2(1,1)}},fog:{fogDensity:{type:"f",value:2.5E-4},fogNear:{type:"f",value:1},fogFar:{type:"f",value:2E3},fogColor:{type:"c",value:new THREE.Color(16777215)}},lights:{ambientLightColor:{type:"fv",value:[]},directionalLightDirection:{type:"fv",value:[]},directionalLightColor:{type:"fv",value:[]},hemisphereLightDirection:{type:"fv",value:[]},hemisphereLightSkyColor:{type:"fv", value:[]},hemisphereLightGroundColor:{type:"fv",value:[]},pointLightColor:{type:"fv",value:[]},pointLightPosition:{type:"fv",value:[]},pointLightDistance:{type:"fv1",value:[]},spotLightColor:{type:"fv",value:[]},spotLightPosition:{type:"fv",value:[]},spotLightDirection:{type:"fv",value:[]},spotLightDistance:{type:"fv1",value:[]},spotLightAngleCos:{type:"fv1",value:[]},spotLightExponent:{type:"fv1",value:[]},areaLightColor:{type:"fv",value:[]},areaLightPosition:{type:"fv",value:[]},areaLightNormal:{type:"fv", value:[]},areaLightRight:{type:"fv",value:[]},areaLightUp:{type:"fv",value:[]},areaLightSize:{type:"fv",value:[]},areaLightAttenuation:{type:"fv",value:[]},areaLightTexture:{type:"tv",value:[]}},particle:{psColor:{type:"c",value:new THREE.Color(15658734)},opacity:{type:"f",value:1},size:{type:"f",value:1},scale:{type:"f",value:1},map:{type:"t",value:null},fogDensity:{type:"f",value:2.5E-4},fogNear:{type:"f",value:1},fogFar:{type:"f",value:2E3},fogColor:{type:"c",value:new THREE.Color(16777215)}}, shadowmap:{shadowMap:{type:"tv",value:[]},shadowMapSize:{type:"v2v",value:[]},shadowBias:{type:"fv1",value:[]},shadowDarkness:{type:"fv1",value:[]},shadowMatrix:{type:"m4v",value:[]}}}; THREE.ShaderLib={depth:{uniforms:{mNear:{type:"f",value:1},mFar:{type:"f",value:2E3},opacity:{type:"f",value:1}},vertexShader:"void main() {\ngl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",fragmentShader:"uniform float mNear;\nuniform float mFar;\nuniform float opacity;\nvoid main() {\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\nfloat color = 1.0 - smoothstep( mNear, mFar, depth );\ngl_FragColor = vec4( vec3( color ), opacity );\n}"},normal:{uniforms:{opacity:{type:"f", value:1}},vertexShader:"varying vec3 vNormal;\nvoid main() {\nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\nvNormal = normalize( normalMatrix * normal );\ngl_Position = projectionMatrix * mvPosition;\n}",fragmentShader:"uniform float opacity;\nvarying vec3 vNormal;\nvoid main() {\ngl_FragColor = vec4( 0.5 * normalize( vNormal ) + 0.5, opacity );\n}"},basic:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.common,THREE.UniformsLib.fog,THREE.UniformsLib.shadowmap]),vertexShader:[THREE.ShaderChunk.map_pars_vertex, THREE.ShaderChunk.lightmap_pars_vertex,THREE.ShaderChunk.envmap_pars_vertex,THREE.ShaderChunk.color_pars_vertex,THREE.ShaderChunk.morphtarget_pars_vertex,THREE.ShaderChunk.skinning_pars_vertex,THREE.ShaderChunk.shadowmap_pars_vertex,"void main() {",THREE.ShaderChunk.map_vertex,THREE.ShaderChunk.lightmap_vertex,THREE.ShaderChunk.color_vertex,THREE.ShaderChunk.skinbase_vertex,"#ifdef USE_ENVMAP",THREE.ShaderChunk.morphnormal_vertex,THREE.ShaderChunk.skinnormal_vertex,THREE.ShaderChunk.defaultnormal_vertex, "#endif",THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.skinning_vertex,THREE.ShaderChunk.default_vertex,THREE.ShaderChunk.worldpos_vertex,THREE.ShaderChunk.envmap_vertex,THREE.ShaderChunk.shadowmap_vertex,"}"].join("\n"),fragmentShader:["uniform vec3 diffuse;\nuniform float opacity;",THREE.ShaderChunk.color_pars_fragment,THREE.ShaderChunk.map_pars_fragment,THREE.ShaderChunk.lightmap_pars_fragment,THREE.ShaderChunk.envmap_pars_fragment,THREE.ShaderChunk.fog_pars_fragment,THREE.ShaderChunk.shadowmap_pars_fragment, THREE.ShaderChunk.specularmap_pars_fragment,"void main() {\ngl_FragColor = vec4( diffuse, opacity );",THREE.ShaderChunk.map_fragment,THREE.ShaderChunk.alphatest_fragment,THREE.ShaderChunk.specularmap_fragment,THREE.ShaderChunk.lightmap_fragment,THREE.ShaderChunk.color_fragment,THREE.ShaderChunk.envmap_fragment,THREE.ShaderChunk.shadowmap_fragment,THREE.ShaderChunk.linear_to_gamma_fragment,THREE.ShaderChunk.fog_fragment,"}"].join("\n")},lambert:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.common, THREE.UniformsLib.fog,THREE.UniformsLib.lights,THREE.UniformsLib.shadowmap,{ambient:{type:"c",value:new THREE.Color(16777215)},emissive:{type:"c",value:new THREE.Color(0)},wrapRGB:{type:"v3",value:new THREE.Vector3(1,1,1)}}]),vertexShader:["#define LAMBERT\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\nvarying vec3 vLightBack;\n#endif",THREE.ShaderChunk.map_pars_vertex,THREE.ShaderChunk.lightmap_pars_vertex,THREE.ShaderChunk.envmap_pars_vertex,THREE.ShaderChunk.area_lights_utils,THREE.ShaderChunk.lights_lambert_pars_vertex, THREE.ShaderChunk.color_pars_vertex,THREE.ShaderChunk.morphtarget_pars_vertex,THREE.ShaderChunk.skinning_pars_vertex,THREE.ShaderChunk.shadowmap_pars_vertex,"void main() {",THREE.ShaderChunk.map_vertex,THREE.ShaderChunk.lightmap_vertex,THREE.ShaderChunk.color_vertex,THREE.ShaderChunk.morphnormal_vertex,THREE.ShaderChunk.skinbase_vertex,THREE.ShaderChunk.skinnormal_vertex,THREE.ShaderChunk.defaultnormal_vertex,THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.skinning_vertex,THREE.ShaderChunk.default_vertex, THREE.ShaderChunk.worldpos_vertex,THREE.ShaderChunk.envmap_vertex,THREE.ShaderChunk.lights_lambert_vertex,THREE.ShaderChunk.shadowmap_vertex,"}"].join("\n"),fragmentShader:["uniform float opacity;\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\nvarying vec3 vLightBack;\n#endif",THREE.ShaderChunk.color_pars_fragment,THREE.ShaderChunk.map_pars_fragment,THREE.ShaderChunk.lightmap_pars_fragment,THREE.ShaderChunk.envmap_pars_fragment,THREE.ShaderChunk.fog_pars_fragment,THREE.ShaderChunk.shadowmap_pars_fragment, THREE.ShaderChunk.specularmap_pars_fragment,"void main() {\ngl_FragColor = vec4( vec3 ( 1.0 ), opacity );",THREE.ShaderChunk.map_fragment,THREE.ShaderChunk.alphatest_fragment,THREE.ShaderChunk.specularmap_fragment,"#ifdef DOUBLE_SIDED\nif ( gl_FrontFacing )\ngl_FragColor.xyz *= vLightFront;\nelse\ngl_FragColor.xyz *= vLightBack;\n#else\ngl_FragColor.xyz *= vLightFront;\n#endif",THREE.ShaderChunk.lightmap_fragment,THREE.ShaderChunk.color_fragment,THREE.ShaderChunk.envmap_fragment,THREE.ShaderChunk.shadowmap_fragment, THREE.ShaderChunk.linear_to_gamma_fragment,THREE.ShaderChunk.fog_fragment,"}"].join("\n")},phong:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.common,THREE.UniformsLib.bump,THREE.UniformsLib.normalmap,THREE.UniformsLib.fog,THREE.UniformsLib.lights,THREE.UniformsLib.shadowmap,{ambient:{type:"c",value:new THREE.Color(16777215)},emissive:{type:"c",value:new THREE.Color(0)},specular:{type:"c",value:new THREE.Color(1118481)},shininess:{type:"f",value:30},wrapRGB:{type:"v3",value:new THREE.Vector3(1, 1,1)}}]),vertexShader:["#define PHONG\nvarying vec3 vViewPosition;\nvarying vec3 vNormal;",THREE.ShaderChunk.map_pars_vertex,THREE.ShaderChunk.lightmap_pars_vertex,THREE.ShaderChunk.envmap_pars_vertex,THREE.ShaderChunk.lights_phong_pars_vertex,THREE.ShaderChunk.color_pars_vertex,THREE.ShaderChunk.morphtarget_pars_vertex,THREE.ShaderChunk.skinning_pars_vertex,THREE.ShaderChunk.shadowmap_pars_vertex,"void main() {",THREE.ShaderChunk.map_vertex,THREE.ShaderChunk.lightmap_vertex,THREE.ShaderChunk.color_vertex, THREE.ShaderChunk.morphnormal_vertex,THREE.ShaderChunk.skinbase_vertex,THREE.ShaderChunk.skinnormal_vertex,THREE.ShaderChunk.defaultnormal_vertex,"vNormal = normalize( transformedNormal );",THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.skinning_vertex,THREE.ShaderChunk.default_vertex,"vViewPosition = -mvPosition.xyz;",THREE.ShaderChunk.worldpos_vertex,THREE.ShaderChunk.envmap_vertex,THREE.ShaderChunk.lights_phong_vertex,THREE.ShaderChunk.shadowmap_vertex,"}"].join("\n"),fragmentShader:["uniform vec3 diffuse;\nuniform float opacity;\nuniform vec3 ambient;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;", THREE.ShaderChunk.color_pars_fragment,THREE.ShaderChunk.map_pars_fragment,THREE.ShaderChunk.lightmap_pars_fragment,THREE.ShaderChunk.envmap_pars_fragment,THREE.ShaderChunk.fog_pars_fragment,THREE.ShaderChunk.area_lights_utils,THREE.ShaderChunk.lights_phong_pars_fragment,THREE.ShaderChunk.shadowmap_pars_fragment,THREE.ShaderChunk.bumpmap_pars_fragment,THREE.ShaderChunk.normalmap_pars_fragment,THREE.ShaderChunk.specularmap_pars_fragment,"void main() {\ngl_FragColor = vec4( vec3 ( 1.0 ), opacity );", THREE.ShaderChunk.map_fragment,THREE.ShaderChunk.alphatest_fragment,THREE.ShaderChunk.specularmap_fragment,THREE.ShaderChunk.lights_phong_fragment,THREE.ShaderChunk.lightmap_fragment,THREE.ShaderChunk.color_fragment,THREE.ShaderChunk.envmap_fragment,THREE.ShaderChunk.shadowmap_fragment,THREE.ShaderChunk.linear_to_gamma_fragment,THREE.ShaderChunk.fog_fragment,"}"].join("\n")},particle_basic:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.particle,THREE.UniformsLib.shadowmap]),vertexShader:["uniform float size;\nuniform float scale;", THREE.ShaderChunk.color_pars_vertex,THREE.ShaderChunk.shadowmap_pars_vertex,"void main() {",THREE.ShaderChunk.color_vertex,"vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n#ifdef USE_SIZEATTENUATION\ngl_PointSize = size * ( scale / length( mvPosition.xyz ) );\n#else\ngl_PointSize = size;\n#endif\ngl_Position = projectionMatrix * mvPosition;",THREE.ShaderChunk.worldpos_vertex,THREE.ShaderChunk.shadowmap_vertex,"}"].join("\n"),fragmentShader:["uniform vec3 psColor;\nuniform float opacity;", THREE.ShaderChunk.color_pars_fragment,THREE.ShaderChunk.map_particle_pars_fragment,THREE.ShaderChunk.fog_pars_fragment,THREE.ShaderChunk.shadowmap_pars_fragment,"void main() {\ngl_FragColor = vec4( psColor, opacity );",THREE.ShaderChunk.map_particle_fragment,THREE.ShaderChunk.alphatest_fragment,THREE.ShaderChunk.color_fragment,THREE.ShaderChunk.shadowmap_fragment,THREE.ShaderChunk.fog_fragment,"}"].join("\n")},dashed:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.common,THREE.UniformsLib.fog, {scale:{type:"f",value:1},dashSize:{type:"f",value:1},totalSize:{type:"f",value:2}}]),vertexShader:["uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;",THREE.ShaderChunk.color_pars_vertex,"void main() {",THREE.ShaderChunk.color_vertex,"vLineDistance = scale * lineDistance;\nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\ngl_Position = projectionMatrix * mvPosition;\n}"].join("\n"),fragmentShader:["uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;", THREE.ShaderChunk.color_pars_fragment,THREE.ShaderChunk.fog_pars_fragment,"void main() {\nif ( mod( vLineDistance, totalSize ) > dashSize ) {\ndiscard;\n}\ngl_FragColor = vec4( diffuse, opacity );",THREE.ShaderChunk.color_fragment,THREE.ShaderChunk.fog_fragment,"}"].join("\n")},depthRGBA:{uniforms:{},vertexShader:[THREE.ShaderChunk.morphtarget_pars_vertex,THREE.ShaderChunk.skinning_pars_vertex,"void main() {",THREE.ShaderChunk.skinbase_vertex,THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.skinning_vertex, THREE.ShaderChunk.default_vertex,"}"].join("\n"),fragmentShader:"vec4 pack_depth( const in float depth ) {\nconst vec4 bit_shift = vec4( 256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0, 1.0 );\nconst vec4 bit_mask = vec4( 0.0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0 );\nvec4 res = fract( depth * bit_shift );\nres -= res.xxyz * bit_mask;\nreturn res;\n}\nvoid main() {\ngl_FragData[ 0 ] = pack_depth( gl_FragCoord.z );\n}"}};THREE.WebGLRenderer=function(a){function b(a){if(a.__webglCustomAttributesList)for(var b in a.__webglCustomAttributesList)k.deleteBuffer(a.__webglCustomAttributesList[b].buffer)}function c(a,b){var c=a.vertices.length,d=b.material;if(d.attributes){void 0===a.__webglCustomAttributesList&&(a.__webglCustomAttributesList=[]);for(var e in d.attributes){var f=d.attributes[e];if(!f.__webglInitialized||f.createUniqueBuffers){f.__webglInitialized=!0;var g=1;"v2"===f.type?g=2:"v3"===f.type?g=3:"v4"===f.type? g=4:"c"===f.type&&(g=3);f.size=g;f.array=new Float32Array(c*g);f.buffer=k.createBuffer();f.buffer.belongsToAttribute=e;f.needsUpdate=!0}a.__webglCustomAttributesList.push(f)}}}function d(a,b){var c=b.geometry,d=a.faces3,h=a.faces4,j=3*d.length+4*h.length,l=1*d.length+2*h.length,h=3*d.length+4*h.length,d=e(b,a),m=g(d),p=f(d),n=d.vertexColors?d.vertexColors:!1;a.__vertexArray=new Float32Array(3*j);p&&(a.__normalArray=new Float32Array(3*j));c.hasTangents&&(a.__tangentArray=new Float32Array(4*j));n&& (a.__colorArray=new Float32Array(3*j));if(m){if(0<c.faceUvs.length||0<c.faceVertexUvs.length)a.__uvArray=new Float32Array(2*j);if(1<c.faceUvs.length||1<c.faceVertexUvs.length)a.__uv2Array=new Float32Array(2*j)}b.geometry.skinWeights.length&&b.geometry.skinIndices.length&&(a.__skinIndexArray=new Float32Array(4*j),a.__skinWeightArray=new Float32Array(4*j));a.__faceArray=new Uint16Array(3*l);a.__lineArray=new Uint16Array(2*h);if(a.numMorphTargets){a.__morphTargetsArrays=[];c=0;for(m=a.numMorphTargets;c< m;c++)a.__morphTargetsArrays.push(new Float32Array(3*j))}if(a.numMorphNormals){a.__morphNormalsArrays=[];c=0;for(m=a.numMorphNormals;c<m;c++)a.__morphNormalsArrays.push(new Float32Array(3*j))}a.__webglFaceCount=3*l;a.__webglLineCount=2*h;if(d.attributes){void 0===a.__webglCustomAttributesList&&(a.__webglCustomAttributesList=[]);for(var q in d.attributes){var l=d.attributes[q],c={},r;for(r in l)c[r]=l[r];if(!c.__webglInitialized||c.createUniqueBuffers)c.__webglInitialized=!0,h=1,"v2"===c.type?h=2: "v3"===c.type?h=3:"v4"===c.type?h=4:"c"===c.type&&(h=3),c.size=h,c.array=new Float32Array(j*h),c.buffer=k.createBuffer(),c.buffer.belongsToAttribute=q,l.needsUpdate=!0,c.__original=l;a.__webglCustomAttributesList.push(c)}}a.__inittedArrays=!0}function e(a,b){return a.material instanceof THREE.MeshFaceMaterial?a.material.materials[b.materialIndex]:a.material}function f(a){return a instanceof THREE.MeshBasicMaterial&&!a.envMap||a instanceof THREE.MeshDepthMaterial?!1:a&&void 0!==a.shading&&a.shading=== THREE.SmoothShading?THREE.SmoothShading:THREE.FlatShading}function g(a){return a.map||a.lightMap||a.bumpMap||a.normalMap||a.specularMap||a instanceof THREE.ShaderMaterial?!0:!1}function h(a){var b,c,d;for(b in a.attributes)d="index"===b?k.ELEMENT_ARRAY_BUFFER:k.ARRAY_BUFFER,c=a.attributes[b],c.buffer=k.createBuffer(),k.bindBuffer(d,c.buffer),k.bufferData(d,c.array,k.STATIC_DRAW)}function j(a,b,c){var d=a.attributes,e=d.index,f=d.position,g=d.normal,h=d.uv,j=d.color,d=d.tangent;a.elementsNeedUpdate&& void 0!==e&&(k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,e.buffer),k.bufferData(k.ELEMENT_ARRAY_BUFFER,e.array,b));a.verticesNeedUpdate&&void 0!==f&&(k.bindBuffer(k.ARRAY_BUFFER,f.buffer),k.bufferData(k.ARRAY_BUFFER,f.array,b));a.normalsNeedUpdate&&void 0!==g&&(k.bindBuffer(k.ARRAY_BUFFER,g.buffer),k.bufferData(k.ARRAY_BUFFER,g.array,b));a.uvsNeedUpdate&&void 0!==h&&(k.bindBuffer(k.ARRAY_BUFFER,h.buffer),k.bufferData(k.ARRAY_BUFFER,h.array,b));a.colorsNeedUpdate&&void 0!==j&&(k.bindBuffer(k.ARRAY_BUFFER, j.buffer),k.bufferData(k.ARRAY_BUFFER,j.array,b));a.tangentsNeedUpdate&&void 0!==d&&(k.bindBuffer(k.ARRAY_BUFFER,d.buffer),k.bufferData(k.ARRAY_BUFFER,d.array,b));if(c)for(var l in a.attributes)delete a.attributes[l].array}function l(a){pb[a]||(k.enableVertexAttribArray(a),pb[a]=!0)}function m(){for(var a in pb)pb[a]&&(k.disableVertexAttribArray(a),pb[a]=!1)}function q(a,b){return a.z!==b.z?b.z-a.z:b.id-a.id}function p(a,b){return b[0]-a[0]}function t(a,b,c){if(a.length)for(var d=0,e=a.length;d<e;d++)wa= ka=null,V=aa=sa=za=kb=qb=Ea=-1,fc=!0,a[d].render(b,c,db,Jb),wa=ka=null,V=aa=sa=za=kb=qb=Ea=-1,fc=!0}function r(a,b,c,d,e,f,g,h){var k,j,l,m;b?(j=a.length-1,m=b=-1):(j=0,b=a.length,m=1);for(var p=j;p!==b;p+=m)if(k=a[p],k.render){j=k.object;l=k.buffer;if(h)k=h;else{k=k[c];if(!k)continue;g&&I.setBlending(k.blending,k.blendEquation,k.blendSrc,k.blendDst);I.setDepthTest(k.depthTest);I.setDepthWrite(k.depthWrite);D(k.polygonOffset,k.polygonOffsetFactor,k.polygonOffsetUnits)}I.setMaterialFaces(k);l instanceof THREE.BufferGeometry?I.renderBufferDirect(d,e,f,k,l,j):I.renderBuffer(d,e,f,k,l,j)}}function n(a,b,c,d,e,f,g){for(var k,h,j=0,l=a.length;j<l;j++)if(k=a[j],h=k.object,h.visible){if(g)k=g;else{k=k[b];if(!k)continue;f&&I.setBlending(k.blending,k.blendEquation,k.blendSrc,k.blendDst);I.setDepthTest(k.depthTest);I.setDepthWrite(k.depthWrite);D(k.polygonOffset,k.polygonOffsetFactor,k.polygonOffsetUnits)}I.renderImmediateObject(c,d,e,k,h)}}function s(a,b,c){a.push({buffer:b,object:c,opaque:null,transparent:null})} function x(a){for(var b in a.attributes)if(a.attributes[b].needsUpdate)return!0;return!1}function v(a){for(var b in a.attributes)a.attributes[b].needsUpdate=!1}function A(a,b){for(var c=a.length-1;0<=c;c--)a[c].object===b&&a.splice(c,1)}function u(a,b){for(var c=a.length-1;0<=c;c--)a[c]===b&&a.splice(c,1)}function L(a,b,c,d,e){Ba=0;d.needsUpdate&&(d.program&&Ic(d),I.initMaterial(d,b,c,e),d.needsUpdate=!1);d.morphTargets&&!e.__webglMorphTargetInfluences&&(e.__webglMorphTargetInfluences=new Float32Array(I.maxMorphTargets)); var f=!1,g=d.program,h=g.uniforms,j=d.uniforms;g!==ka&&(k.useProgram(g),ka=g,f=!0);d.id!==V&&(V=d.id,f=!0);if(f||a!==wa)k.uniformMatrix4fv(h.projectionMatrix,!1,a.projectionMatrix.elements),a!==wa&&(wa=a);if(d.skinning)if(eb&&e.useVertexTexture){if(null!==h.boneTexture){var l=H();k.uniform1i(h.boneTexture,l);I.setTexture(e.boneTexture,l)}}else null!==h.boneGlobalMatrices&&k.uniformMatrix4fv(h.boneGlobalMatrices,!1,e.boneMatrices);if(f){c&&d.fog&&(j.fogColor.value=c.color,c instanceof THREE.Fog?(j.fogNear.value= c.near,j.fogFar.value=c.far):c instanceof THREE.FogExp2&&(j.fogDensity.value=c.density));if(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d.lights){if(fc){var m,p,n,q=0,r=0,t=0,s,u,x,v,A,B,C,D=Hc,J=D.directional.colors,L=D.directional.positions,N=D.point.colors,M=D.point.positions,T=D.point.distances,aa=D.spot.colors,S=D.spot.positions,ia=D.spot.distances,oa=D.spot.directions,X=D.spot.anglesCos,ua=D.spot.exponents,da=D.hemi.skyColors,ga=D.hemi.groundColors,$=D.hemi.positions, ja=D.area.colors,Z=D.area.positions,Na=D.area.normals,sa=D.area.rights,za=D.area.ups,la=D.area.sizes,Fa=D.area.attenuations,xa=D.area.textures,ha=0,Ea=0,Aa=0,Ga=0,ta=0,ob=0,xb=0,ib=0,F=0,U=0,Ka=0,O=0,Ya=0,rc=0,Ha=0;m=0;for(p=b.length;m<p;m++)n=b[m],n.onlyShadow||(s=n.color,v=n.intensity,C=n.distance,n instanceof THREE.AmbientLight?n.visible&&(I.gammaInput?(q+=s.r*s.r,r+=s.g*s.g,t+=s.b*s.b):(q+=s.r,r+=s.g,t+=s.b)):n instanceof THREE.DirectionalLight?(ob+=1,n.visible&&(lb.copy(n.matrixWorld.getPosition()), lb.subSelf(n.target.matrixWorld.getPosition()),lb.normalize(),0===lb.x&&0===lb.y&&0===lb.z||(Ka=3*ha,L[Ka]=lb.x,L[Ka+1]=lb.y,L[Ka+2]=lb.z,I.gammaInput?z(J,Ka,s,v*v):E(J,Ka,s,v),ha+=1))):n instanceof THREE.PointLight?(xb+=1,n.visible&&(O=3*Ea,I.gammaInput?z(N,O,s,v*v):E(N,O,s,v),B=n.matrixWorld.getPosition(),M[O]=B.x,M[O+1]=B.y,M[O+2]=B.z,T[Ea]=C,Ea+=1)):n instanceof THREE.SpotLight?(ib+=1,n.visible&&(Ya=3*Aa,I.gammaInput?z(aa,Ya,s,v*v):E(aa,Ya,s,v),B=n.matrixWorld.getPosition(),S[Ya]=B.x,S[Ya+1]= B.y,S[Ya+2]=B.z,ia[Aa]=C,lb.copy(B),lb.subSelf(n.target.matrixWorld.getPosition()),lb.normalize(),oa[Ya]=lb.x,oa[Ya+1]=lb.y,oa[Ya+2]=lb.z,X[Aa]=Math.cos(n.angle),ua[Aa]=n.exponent,Aa+=1)):n instanceof THREE.HemisphereLight?(F+=1,n.visible&&(lb.copy(n.matrixWorld.getPosition()),lb.normalize(),0===lb.x&&0===lb.y&&0===lb.z||(rc=3*Ga,$[rc]=lb.x,$[rc+1]=lb.y,$[rc+2]=lb.z,u=n.color,x=n.groundColor,I.gammaInput?(A=v*v,z(da,rc,u,A),z(ga,rc,x,A)):(E(da,rc,u,v),E(ga,rc,x,v)),Ga+=1))):n instanceof THREE.AreaLight&& (U+=1,n.visible&&(Ha=3*ta,I.gammaInput?z(ja,Ha,s,v*v):E(ja,Ha,s,v),Oa.copy(n.matrixWorld.getPosition()),a.matrixWorldInverse.multiplyVector3(Oa),Z[Ha]=Oa.x,Z[Ha+1]=Oa.y,Z[Ha+2]=Oa.z,Vb.copy(n.normal),n.matrixWorld.rotateAxis(Vb),a.matrixWorldInverse.rotateAxis(Vb),Na[Ha]=Vb.x,Na[Ha+1]=Vb.y,Na[Ha+2]=Vb.z,Wb.copy(n.right),n.matrixWorld.rotateAxis(Wb),a.matrixWorldInverse.rotateAxis(Wb),sa[Ha]=Wb.x,sa[Ha+1]=Wb.y,sa[Ha+2]=Wb.z,nc.cross(Wb,Vb),nc.normalize(),za[Ha]=nc.x,za[Ha+1]=nc.y,za[Ha+2]=nc.z,xa[ta]= n.texture,la[Ha]=n.width,la[Ha+1]=n.height,la[Ha+2]=n.texture?1:0,Fa[Ha]=n.constantAttenuation,Fa[Ha+1]=n.linearAttenuation,Fa[Ha+2]=n.quadraticAttenuation,ta+=1)));m=3*ha;for(p=Math.max(J.length,3*ob);m<p;m++)J[m]=0;m=3*Ea;for(p=Math.max(N.length,3*xb);m<p;m++)N[m]=0;m=3*Aa;for(p=Math.max(aa.length,3*ib);m<p;m++)aa[m]=0;m=3*Ga;for(p=Math.max(da.length,3*F);m<p;m++)da[m]=0;m=3*Ga;for(p=Math.max(ga.length,3*F);m<p;m++)ga[m]=0;m=3*ta;for(p=Math.max(ja.length,3*U);m<p;m++)ja[m]=0;D.directional.length= ha;D.point.length=Ea;D.spot.length=Aa;D.hemi.length=Ga;D.area.length=ta;D.ambient[0]=q;D.ambient[1]=r;D.ambient[2]=t;fc=!1}var ab=Hc;j.ambientLightColor.value=ab.ambient;j.directionalLightColor.value=ab.directional.colors;j.directionalLightDirection.value=ab.directional.positions;j.pointLightColor.value=ab.point.colors;j.pointLightPosition.value=ab.point.positions;j.pointLightDistance.value=ab.point.distances;j.spotLightColor.value=ab.spot.colors;j.spotLightPosition.value=ab.spot.positions;j.spotLightDistance.value= ab.spot.distances;j.spotLightDirection.value=ab.spot.directions;j.spotLightAngleCos.value=ab.spot.anglesCos;j.spotLightExponent.value=ab.spot.exponents;j.hemisphereLightSkyColor.value=ab.hemi.skyColors;j.hemisphereLightGroundColor.value=ab.hemi.groundColors;j.hemisphereLightDirection.value=ab.hemi.positions;j.areaLightColor.value=ab.area.colors;j.areaLightPosition.value=ab.area.positions;j.areaLightNormal.value=ab.area.normals;j.areaLightRight.value=ab.area.rights;j.areaLightUp.value=ab.area.ups; j.areaLightSize.value=ab.area.sizes;j.areaLightAttenuation.value=ab.area.attenuations;j.areaLightTexture.value=ab.area.textures}if(d instanceof THREE.MeshBasicMaterial||d instanceof THREE.MeshLambertMaterial||d instanceof THREE.MeshPhongMaterial){j.opacity.value=d.opacity;I.gammaInput?j.diffuse.value.copyGammaToLinear(d.color):j.diffuse.value=d.color;j.map.value=d.map;j.lightMap.value=d.lightMap;j.specularMap.value=d.specularMap;d.bumpMap&&(j.bumpMap.value=d.bumpMap,j.bumpScale.value=d.bumpScale); d.normalMap&&(j.normalMap.value=d.normalMap,j.normalScale.value.copy(d.normalScale));var xc;d.map?xc=d.map:d.specularMap?xc=d.specularMap:d.normalMap?xc=d.normalMap:d.bumpMap&&(xc=d.bumpMap);if(void 0!==xc){var fb=xc.offset,$a=xc.repeat;j.offsetRepeat.value.set(fb.x,fb.y,$a.x,$a.y)}j.envMap.value=d.envMap;j.flipEnvMap.value=d.envMap instanceof THREE.WebGLRenderTargetCube?1:-1;j.reflectivity.value=d.reflectivity;j.refractionRatio.value=d.refractionRatio;j.combine.value=d.combine;j.useRefract.value= d.envMap&&d.envMap.mapping instanceof THREE.CubeRefractionMapping}d instanceof THREE.LineBasicMaterial?(j.diffuse.value=d.color,j.opacity.value=d.opacity):d instanceof THREE.LineDashedMaterial?(j.diffuse.value=d.color,j.opacity.value=d.opacity,j.dashSize.value=d.dashSize,j.totalSize.value=d.dashSize+d.gapSize,j.scale.value=d.scale):d instanceof THREE.ParticleBasicMaterial?(j.psColor.value=d.color,j.opacity.value=d.opacity,j.size.value=d.size,j.scale.value=W.height/2,j.map.value=d.map):d instanceof THREE.MeshPhongMaterial?(j.shininess.value=d.shininess,I.gammaInput?(j.ambient.value.copyGammaToLinear(d.ambient),j.emissive.value.copyGammaToLinear(d.emissive),j.specular.value.copyGammaToLinear(d.specular)):(j.ambient.value=d.ambient,j.emissive.value=d.emissive,j.specular.value=d.specular),d.wrapAround&&j.wrapRGB.value.copy(d.wrapRGB)):d instanceof THREE.MeshLambertMaterial?(I.gammaInput?(j.ambient.value.copyGammaToLinear(d.ambient),j.emissive.value.copyGammaToLinear(d.emissive)):(j.ambient.value= d.ambient,j.emissive.value=d.emissive),d.wrapAround&&j.wrapRGB.value.copy(d.wrapRGB)):d instanceof THREE.MeshDepthMaterial?(j.mNear.value=a.near,j.mFar.value=a.far,j.opacity.value=d.opacity):d instanceof THREE.MeshNormalMaterial&&(j.opacity.value=d.opacity);if(e.receiveShadow&&!d._shadowPass&&j.shadowMatrix)for(var P=0,Q=0,R=b.length;Q<R;Q++){var ma=b[Q];if(ma.castShadow&&(ma instanceof THREE.SpotLight||ma instanceof THREE.DirectionalLight&&!ma.shadowCascade))j.shadowMap.value[P]=ma.shadowMap,j.shadowMapSize.value[P]= ma.shadowMapSize,j.shadowMatrix.value[P]=ma.shadowMatrix,j.shadowDarkness.value[P]=ma.shadowDarkness,j.shadowBias.value[P]=ma.shadowBias,P++}var ub=d.uniformsList,pa,na,sb,Ta,yb,Gb,ya,wb,Kc,rb,Hb;Kc=0;for(rb=ub.length;Kc<rb;Kc++)if(Ta=g.uniforms[ub[Kc][1]])if(pa=ub[Kc][0],sb=pa.type,na=pa.value,"i"===sb)k.uniform1i(Ta,na);else if("f"===sb)k.uniform1f(Ta,na);else if("v2"===sb)k.uniform2f(Ta,na.x,na.y);else if("v3"===sb)k.uniform3f(Ta,na.x,na.y,na.z);else if("v4"===sb)k.uniform4f(Ta,na.x,na.y,na.z, na.w);else if("c"===sb)k.uniform3f(Ta,na.r,na.g,na.b);else if("iv1"===sb)k.uniform1iv(Ta,na);else if("iv"===sb)k.uniform3iv(Ta,na);else if("fv1"===sb)k.uniform1fv(Ta,na);else if("fv"===sb)k.uniform3fv(Ta,na);else if("v2v"===sb){void 0===pa._array&&(pa._array=new Float32Array(2*na.length));ya=0;for(wb=na.length;ya<wb;ya++)Hb=2*ya,pa._array[Hb]=na[ya].x,pa._array[Hb+1]=na[ya].y;k.uniform2fv(Ta,pa._array)}else if("v3v"===sb){void 0===pa._array&&(pa._array=new Float32Array(3*na.length));ya=0;for(wb=na.length;ya< wb;ya++)Hb=3*ya,pa._array[Hb]=na[ya].x,pa._array[Hb+1]=na[ya].y,pa._array[Hb+2]=na[ya].z;k.uniform3fv(Ta,pa._array)}else if("v4v"===sb){void 0===pa._array&&(pa._array=new Float32Array(4*na.length));ya=0;for(wb=na.length;ya<wb;ya++)Hb=4*ya,pa._array[Hb]=na[ya].x,pa._array[Hb+1]=na[ya].y,pa._array[Hb+2]=na[ya].z,pa._array[Hb+3]=na[ya].w;k.uniform4fv(Ta,pa._array)}else if("m4"===sb)void 0===pa._array&&(pa._array=new Float32Array(16)),na.flattenToArray(pa._array),k.uniformMatrix4fv(Ta,!1,pa._array);else if("m4v"=== sb){void 0===pa._array&&(pa._array=new Float32Array(16*na.length));ya=0;for(wb=na.length;ya<wb;ya++)na[ya].flattenToArrayOffset(pa._array,16*ya);k.uniformMatrix4fv(Ta,!1,pa._array)}else if("t"===sb){if(yb=na,Gb=H(),k.uniform1i(Ta,Gb),yb)if(yb.image instanceof Array&&6===yb.image.length){var bb=yb,Za=Gb;if(6===bb.image.length)if(bb.needsUpdate){bb.image.__webglTextureCube||(bb.image.__webglTextureCube=k.createTexture(),I.info.memory.textures++);k.activeTexture(k.TEXTURE0+Za);k.bindTexture(k.TEXTURE_CUBE_MAP, bb.image.__webglTextureCube);k.pixelStorei(k.UNPACK_FLIP_Y_WEBGL,bb.flipY);for(var db=bb instanceof THREE.CompressedTexture,qb=[],tb=0;6>tb;tb++)if(I.autoScaleCubemaps&&!db){var Gd=qb,Hd=tb,kb;var ra=bb.image[tb],cb=Y;if(ra.width<=cb&&ra.height<=cb)kb=ra;else{var Db=Math.max(ra.width,ra.height),pb=Math.floor(ra.width*cb/Db),Tb=Math.floor(ra.height*cb/Db),gb=document.createElement("canvas");gb.width=pb;gb.height=Tb;gb.getContext("2d").drawImage(ra,0,0,ra.width,ra.height,0,0,pb,Tb);kb=gb}Gd[Hd]=kb}else qb[tb]= bb.image[tb];var jb=qb[0],mb=0===(jb.width&jb.width-1)&&0===(jb.height&jb.height-1),hb=K(bb.format),vb=K(bb.type);G(k.TEXTURE_CUBE_MAP,bb,mb);for(tb=0;6>tb;tb++)if(db)for(var Ub,Pa=qb[tb].mipmaps,Qa=0,cc=Pa.length;Qa<cc;Qa++)Ub=Pa[Qa],k.compressedTexImage2D(k.TEXTURE_CUBE_MAP_POSITIVE_X+tb,Qa,hb,Ub.width,Ub.height,0,Ub.data);else k.texImage2D(k.TEXTURE_CUBE_MAP_POSITIVE_X+tb,0,hb,hb,vb,qb[tb]);bb.generateMipmaps&&mb&&k.generateMipmap(k.TEXTURE_CUBE_MAP);bb.needsUpdate=!1;if(bb.onUpdate)bb.onUpdate()}else k.activeTexture(k.TEXTURE0+ Za),k.bindTexture(k.TEXTURE_CUBE_MAP,bb.image.__webglTextureCube)}else if(yb instanceof THREE.WebGLRenderTargetCube){var dc=yb;k.activeTexture(k.TEXTURE0+Gb);k.bindTexture(k.TEXTURE_CUBE_MAP,dc.__webglTexture)}else I.setTexture(yb,Gb)}else if("tv"===sb){void 0===pa._array&&(pa._array=[]);ya=0;for(wb=pa.value.length;ya<wb;ya++)pa._array[ya]=H();k.uniform1iv(Ta,pa._array);ya=0;for(wb=pa.value.length;ya<wb;ya++)yb=pa.value[ya],Gb=pa._array[ya],yb&&I.setTexture(yb,Gb)}if((d instanceof THREE.ShaderMaterial|| d instanceof THREE.MeshPhongMaterial||d.envMap)&&null!==h.cameraPosition){var Kb=a.matrixWorld.getPosition();k.uniform3f(h.cameraPosition,Kb.x,Kb.y,Kb.z)}(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d instanceof THREE.ShaderMaterial||d.skinning)&&null!==h.viewMatrix&&k.uniformMatrix4fv(h.viewMatrix,!1,a.matrixWorldInverse.elements)}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 H(){var a=Ba;a>=vb&&console.warn("WebGLRenderer: trying to use "+a+" texture units while this GPU supports only "+vb);Ba+=1;return a}function C(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 E(a,b,c,d){a[b]=c.r*d;a[b+1]=c.g*d; a[b+2]=c.b*d}function D(a,b,c){Pb!==a&&(a?k.enable(k.POLYGON_OFFSET_FILL):k.disable(k.POLYGON_OFFSET_FILL),Pb=a);if(a&&(ob!==b||Aa!==c))k.polygonOffset(b,c),ob=b,Aa=c}function J(a){a=a.split("\n");for(var b=0,c=a.length;b<c;b++)a[b]=b+1+": "+a[b];return a.join("\n")}function X(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 G(a,b,c){c?(k.texParameteri(a,k.TEXTURE_WRAP_S,K(b.wrapS)),k.texParameteri(a,k.TEXTURE_WRAP_T,K(b.wrapT)),k.texParameteri(a,k.TEXTURE_MAG_FILTER,K(b.magFilter)),k.texParameteri(a,k.TEXTURE_MIN_FILTER,K(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,B(b.magFilter)),k.texParameteri(a,k.TEXTURE_MIN_FILTER,B(b.minFilter)));if(gc&&b.type!==THREE.FloatType&& (1<b.anisotropy||b.__oldAnisotropy))k.texParameterf(a,gc.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(b.anisotropy,ga)),b.__oldAnisotropy=b.anisotropy}function S(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 B(a){return a===THREE.NearestFilter||a===THREE.NearestMipMapNearestFilter||a===THREE.NearestMipMapLinearFilter?k.NEAREST:k.LINEAR}function K(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!==Ya){if(a===THREE.RGB_S3TC_DXT1_Format)return Ya.COMPRESSED_RGB_S3TC_DXT1_EXT;if(a===THREE.RGBA_S3TC_DXT1_Format)return Ya.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(a===THREE.RGBA_S3TC_DXT3_Format)return Ya.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(a===THREE.RGBA_S3TC_DXT5_Format)return Ya.COMPRESSED_RGBA_S3TC_DXT5_EXT}return 0}function N(a, b){var c=k.createFramebuffer(),d=k.createTexture();k.bindTexture(k.TEXTURE_2D,d);k.texImage2D(k.TEXTURE_2D,0,a,2,2,0,a,b,null);k.bindFramebuffer(k.FRAMEBUFFER,c);k.framebufferTexture2D(k.FRAMEBUFFER,k.COLOR_ATTACHMENT0,k.TEXTURE_2D,d,0);c=k.checkFramebufferStatus(k.FRAMEBUFFER);k.bindFramebuffer(k.FRAMEBUFFER,null);k.bindTexture(k.TEXTURE_2D,null);return c===k.FRAMEBUFFER_COMPLETE}console.log("THREE.WebGLRenderer",THREE.REVISION);a=a||{};var W=void 0!==a.canvas?a.canvas:document.createElement("canvas"), T=void 0!==a.precision?a.precision:"highp",da=void 0!==a.alpha?a.alpha:!0,la=void 0!==a.premultipliedAlpha?a.premultipliedAlpha:!0,M=void 0!==a.antialias?a.antialias:!1,ja=void 0!==a.stencil?a.stencil:!0,ib=void 0!==a.preserveDrawingBuffer?a.preserveDrawingBuffer:!1,ha=void 0!==a.clearColor?new THREE.Color(a.clearColor):new THREE.Color(0),Ka=void 0!==a.clearAlpha?a.clearAlpha:0;this.domElement=W;this.context=null;this.devicePixelRatio=void 0!==a.devicePixelRatio?a.devicePixelRatio:void 0!==window.devicePixelRatio? window.devicePixelRatio:1;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.shadowMapAutoUpdate=!0;this.shadowMapType=THREE.PCFShadowMap;this.shadowMapCullFace=THREE.CullFaceFront;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 I=this,ia=[],oa=0,ka=null,ua=null,V=-1,aa=null,wa=null,Na=0,Ba=0,za=-1,sa=-1,Ea=-1,ub=-1,Fa=-1,jb=-1,qb=-1,kb=-1,Pb=null,ob=null,Aa=null,Ga=null,bc=0,ta=0,cb=0,Db=0,db=0,Jb=0,pb={},ec=new THREE.Frustum,xb=new THREE.Matrix4,mc=new THREE.Matrix4,Tb=new THREE.Vector3,Oa=new THREE.Vector3,lb=new THREE.Vector3,Vb=new THREE.Vector3,Wb=new THREE.Vector3,nc=new THREE.Vector3, fc=!0,Hc={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]},spot:{length:0,colors:[],positions:[],distances:[],directions:[],anglesCos:[],exponents:[]},hemi:{length:0,skyColors:[],groundColors:[],positions:[]},area:{length:0,colors:[],positions:[],normals:[],rights:[],ups:[],sizes:[],attenuations:[],textures:[]}},k,Qb,Gc,Fc,gc,Ya;try{if(!(k=W.getContext("experimental-webgl",{alpha:da,premultipliedAlpha:la,antialias:M,stencil:ja,preserveDrawingBuffer:ib})))throw"Error creating WebGL context."; }catch(pd){console.error(pd)}Qb=k.getExtension("OES_texture_float");Gc=k.getExtension("OES_texture_float_linear");Fc=k.getExtension("OES_standard_derivatives");gc=k.getExtension("EXT_texture_filter_anisotropic")||k.getExtension("MOZ_EXT_texture_filter_anisotropic")||k.getExtension("WEBKIT_EXT_texture_filter_anisotropic");Ya=k.getExtension("WEBGL_compressed_texture_s3tc")||k.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||k.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");Qb||console.log("THREE.WebGLRenderer: Float textures not supported."); Gc||console.log("THREE.WebGLRenderer: Linear filtering for float textures not supported.");Fc||console.log("THREE.WebGLRenderer: Standard derivatives not supported.");gc||console.log("THREE.WebGLRenderer: Anisotropic texture filtering not supported.");Ya||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(ha.r,ha.g,ha.b,Ka);this.context=k;var vb=k.getParameter(k.MAX_TEXTURE_IMAGE_UNITS),wc=k.getParameter(k.MAX_VERTEX_TEXTURE_IMAGE_UNITS);k.getParameter(k.MAX_TEXTURE_SIZE);var Y=k.getParameter(k.MAX_CUBE_MAP_TEXTURE_SIZE),ga=gc?k.getParameter(gc.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0,$=0<wc,eb=$&&Qb;Ya&&k.getParameter(k.COMPRESSED_TEXTURE_FORMATS);var rb=k.getShaderPrecisionFormat(k.VERTEX_SHADER,k.HIGH_FLOAT),Za=k.getShaderPrecisionFormat(k.VERTEX_SHADER, k.MEDIUM_FLOAT);k.getShaderPrecisionFormat(k.VERTEX_SHADER,k.LOW_FLOAT);var fb=k.getShaderPrecisionFormat(k.FRAGMENT_SHADER,k.HIGH_FLOAT),$a=k.getShaderPrecisionFormat(k.FRAGMENT_SHADER,k.MEDIUM_FLOAT);k.getShaderPrecisionFormat(k.FRAGMENT_SHADER,k.LOW_FLOAT);k.getShaderPrecisionFormat(k.VERTEX_SHADER,k.HIGH_INT);k.getShaderPrecisionFormat(k.VERTEX_SHADER,k.MEDIUM_INT);k.getShaderPrecisionFormat(k.VERTEX_SHADER,k.LOW_INT);k.getShaderPrecisionFormat(k.FRAGMENT_SHADER,k.HIGH_INT);k.getShaderPrecisionFormat(k.FRAGMENT_SHADER, k.MEDIUM_INT);k.getShaderPrecisionFormat(k.FRAGMENT_SHADER,k.LOW_INT);var Rb=Qb&&N(k.RGB,k.FLOAT),qc=Qb&&N(k.RGBA,k.FLOAT),ld=Qb&&N(k.LUMINANCE,k.FLOAT),md=Qb&&N(k.ALPHA,k.FLOAT),nd=Qb&&N(k.LUMINANCE_ALPHA,k.FLOAT),od=0<rb.precision&&0<fb.precision,Sc=0<Za.precision&&0<$a.precision;"highp"===T&&!od&&(Sc?(T="mediump",console.warn("WebGLRenderer: highp not supported, using mediump")):(T="lowp",console.warn("WebGLRenderer: highp and mediump not supported, using lowp")));"mediump"===T&&!Sc&&(T="lowp", console.warn("WebGLRenderer: mediump not supported, using lowp"));this.getContext=function(){return k};this.supportsVertexTextures=function(){return $};this.supportsLuminanceFloatRenderTarget=function(){return ld};this.supportsAlphaFloatRenderTarget=function(){return md};this.supportsLuminanceAlphaFloatRenderTarget=function(){return nd};this.supportsRGBFloatRenderTarget=function(){return Rb};this.supportsRGBAFloatRenderTarget=function(){return qc};this.getMaxAnisotropy=function(){return ga};this.getPrecision= function(){return T};this.setSize=function(a,b){W.width=a*this.devicePixelRatio;W.height=b*this.devicePixelRatio;W.style.width=a+"px";W.style.height=b+"px";this.setViewport(0,0,W.width,W.height)};this.setViewport=function(a,b,c,d){bc=void 0!==a?a:0;ta=void 0!==b?b:0;cb=void 0!==c?c:W.width;Db=void 0!==d?d:W.height;k.viewport(bc,ta,cb,Db)};this.setScissor=function(a,b,c,d){k.scissor(a,b,c,d)};this.enableScissorTest=function(a){a?k.enable(k.SCISSOR_TEST):k.disable(k.SCISSOR_TEST)};this.setClearColorHex= function(a,b){ha.setHex(a);Ka=b;k.clearColor(ha.r,ha.g,ha.b,Ka)};this.setClearColor=function(a,b){ha.copy(a);Ka=b;k.clearColor(ha.r,ha.g,ha.b,Ka)};this.getClearColor=function(){return ha};this.getClearAlpha=function(){return Ka};this.clear=function(a,b,c){var d=0;if(void 0===a||a)d|=k.COLOR_BUFFER_BIT;if(void 0===b||b)d|=k.DEPTH_BUFFER_BIT;if(void 0===c||c)d|=k.STENCIL_BUFFER_BIT;k.clear(d)};this.clearTarget=function(a,b,c,d){this.setRenderTarget(a);this.clear(b,c,d)};this.addPostPlugin=function(a){a.init(this); this.renderPluginsPost.push(a)};this.addPrePlugin=function(a){a.init(this);this.renderPluginsPre.push(a)};this.updateShadowMap=function(a,b){ka=null;V=aa=kb=qb=Ea=-1;fc=!0;sa=za=-1;this.shadowMapPlugin.update(a,b)};var xd=function(a){a=a.target;a.removeEventListener("dispose",xd);a.__webglInit=void 0;void 0!==a.__webglVertexBuffer&&k.deleteBuffer(a.__webglVertexBuffer);void 0!==a.__webglNormalBuffer&&k.deleteBuffer(a.__webglNormalBuffer);void 0!==a.__webglTangentBuffer&&k.deleteBuffer(a.__webglTangentBuffer); void 0!==a.__webglColorBuffer&&k.deleteBuffer(a.__webglColorBuffer);void 0!==a.__webglUVBuffer&&k.deleteBuffer(a.__webglUVBuffer);void 0!==a.__webglUV2Buffer&&k.deleteBuffer(a.__webglUV2Buffer);void 0!==a.__webglSkinIndicesBuffer&&k.deleteBuffer(a.__webglSkinIndicesBuffer);void 0!==a.__webglSkinWeightsBuffer&&k.deleteBuffer(a.__webglSkinWeightsBuffer);void 0!==a.__webglFaceBuffer&&k.deleteBuffer(a.__webglFaceBuffer);void 0!==a.__webglLineBuffer&&k.deleteBuffer(a.__webglLineBuffer);void 0!==a.__webglLineDistanceBuffer&& k.deleteBuffer(a.__webglLineDistanceBuffer);if(void 0!==a.geometryGroups)for(var c in a.geometryGroups){var d=a.geometryGroups[c];if(void 0!==d.numMorphTargets)for(var e=0,f=d.numMorphTargets;e<f;e++)k.deleteBuffer(d.__webglMorphTargetsBuffers[e]);if(void 0!==d.numMorphNormals){e=0;for(f=d.numMorphNormals;e<f;e++)k.deleteBuffer(d.__webglMorphNormalsBuffers[e])}b(d)}b(a);I.info.memory.geometries--},Tc=function(a){a=a.target;a.removeEventListener("dispose",Tc);a.image&&a.image.__webglTextureCube?k.deleteTexture(a.image.__webglTextureCube): a.__webglInit&&(a.__webglInit=!1,k.deleteTexture(a.__webglTexture));I.info.memory.textures--},Uc=function(a){a=a.target;a.removeEventListener("dispose",Uc);if(a&&a.__webglTexture)if(k.deleteTexture(a.__webglTexture),a instanceof THREE.WebGLRenderTargetCube)for(var b=0;6>b;b++)k.deleteFramebuffer(a.__webglFramebuffer[b]),k.deleteRenderbuffer(a.__webglRenderbuffer[b]);else k.deleteFramebuffer(a.__webglFramebuffer),k.deleteRenderbuffer(a.__webglRenderbuffer);I.info.memory.textures--},Vc=function(a){a= a.target;a.removeEventListener("dispose",Vc);Ic(a)},Ic=function(a){var b=a.program;if(void 0!==b){a.program=void 0;var c,d,e=!1;a=0;for(c=ia.length;a<c;a++)if(d=ia[a],d.program===b){d.usedTimes--;0===d.usedTimes&&(e=!0);break}if(!0===e){e=[];a=0;for(c=ia.length;a<c;a++)d=ia[a],d.program!==b&&e.push(d);ia=e;k.deleteProgram(b);I.info.memory.programs--}}};this.renderBufferImmediate=function(a,b,c){a.hasPositions&&!a.__webglVertexBuffer&&(a.__webglVertexBuffer=k.createBuffer());a.hasNormals&&!a.__webglNormalBuffer&& (a.__webglNormalBuffer=k.createBuffer());a.hasUvs&&!a.__webglUvBuffer&&(a.__webglUvBuffer=k.createBuffer());a.hasColors&&!a.__webglColorBuffer&&(a.__webglColorBuffer=k.createBuffer());a.hasPositions&&(k.bindBuffer(k.ARRAY_BUFFER,a.__webglVertexBuffer),k.bufferData(k.ARRAY_BUFFER,a.positionArray,k.DYNAMIC_DRAW),k.enableVertexAttribArray(b.attributes.position),k.vertexAttribPointer(b.attributes.position,3,k.FLOAT,!1,0,0));if(a.hasNormals){k.bindBuffer(k.ARRAY_BUFFER,a.__webglNormalBuffer);if(c.shading=== THREE.FlatShading){var d,e,f,g,h,j,l,m,n,p,q,r=3*a.count;for(q=0;q<r;q+=9)p=a.normalArray,d=p[q],e=p[q+1],f=p[q+2],g=p[q+3],j=p[q+4],m=p[q+5],h=p[q+6],l=p[q+7],n=p[q+8],d=(d+g+h)/3,e=(e+j+l)/3,f=(f+m+n)/3,p[q]=d,p[q+1]=e,p[q+2]=f,p[q+3]=d,p[q+4]=e,p[q+5]=f,p[q+6]=d,p[q+7]=e,p[q+8]=f}k.bufferData(k.ARRAY_BUFFER,a.normalArray,k.DYNAMIC_DRAW);k.enableVertexAttribArray(b.attributes.normal);k.vertexAttribPointer(b.attributes.normal,3,k.FLOAT,!1,0,0)}a.hasUvs&&c.map&&(k.bindBuffer(k.ARRAY_BUFFER,a.__webglUvBuffer), k.bufferData(k.ARRAY_BUFFER,a.uvArray,k.DYNAMIC_DRAW),k.enableVertexAttribArray(b.attributes.uv),k.vertexAttribPointer(b.attributes.uv,2,k.FLOAT,!1,0,0));a.hasColors&&c.vertexColors!==THREE.NoColors&&(k.bindBuffer(k.ARRAY_BUFFER,a.__webglColorBuffer),k.bufferData(k.ARRAY_BUFFER,a.colorArray,k.DYNAMIC_DRAW),k.enableVertexAttribArray(b.attributes.color),k.vertexAttribPointer(b.attributes.color,3,k.FLOAT,!1,0,0));k.drawArrays(k.TRIANGLES,0,a.count);a.count=0};this.renderBufferDirect=function(a,b,c,d, e,f){if(!1!==d.visible)if(c=L(a,b,c,d,f),a=c.attributes,b=!1,d=16777215*e.id+2*c.id+(d.wireframe?1:0),d!==aa&&(aa=d,b=!0),b&&m(),f instanceof THREE.Mesh)if(f=e.attributes.index){d=e.offsets;1<d.length&&(b=!0);c=0;for(var g=d.length;c<g;c++){var h=d[c].index;if(b){var j=e.attributes.position,p=j.itemSize;k.bindBuffer(k.ARRAY_BUFFER,j.buffer);l(a.position);k.vertexAttribPointer(a.position,p,k.FLOAT,!1,0,4*h*p);p=e.attributes.normal;if(0<=a.normal&&p){var n=p.itemSize;k.bindBuffer(k.ARRAY_BUFFER,p.buffer); l(a.normal);k.vertexAttribPointer(a.normal,n,k.FLOAT,!1,0,4*h*n)}p=e.attributes.uv;0<=a.uv&&p&&(n=p.itemSize,k.bindBuffer(k.ARRAY_BUFFER,p.buffer),l(a.uv),k.vertexAttribPointer(a.uv,n,k.FLOAT,!1,0,4*h*n));p=e.attributes.color;0<=a.color&&p&&(n=p.itemSize,k.bindBuffer(k.ARRAY_BUFFER,p.buffer),l(a.color),k.vertexAttribPointer(a.color,n,k.FLOAT,!1,0,4*h*n));p=e.attributes.tangent;0<=a.tangent&&p&&(n=p.itemSize,k.bindBuffer(k.ARRAY_BUFFER,p.buffer),l(a.tangent),k.vertexAttribPointer(a.tangent,n,k.FLOAT, !1,0,4*h*n));k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,f.buffer)}k.drawElements(k.TRIANGLES,d[c].count,k.UNSIGNED_SHORT,2*d[c].start);I.info.render.calls++;I.info.render.vertices+=d[c].count;I.info.render.faces+=d[c].count/3}}else b&&(j=e.attributes.position,p=j.itemSize,k.bindBuffer(k.ARRAY_BUFFER,j.buffer),l(a.position),k.vertexAttribPointer(a.position,p,k.FLOAT,!1,0,0),p=e.attributes.normal,0<=a.normal&&p&&(n=p.itemSize,k.bindBuffer(k.ARRAY_BUFFER,p.buffer),l(a.normal),k.vertexAttribPointer(a.normal, n,k.FLOAT,!1,0,0)),p=e.attributes.uv,0<=a.uv&&p&&(n=p.itemSize,k.bindBuffer(k.ARRAY_BUFFER,p.buffer),l(a.uv),k.vertexAttribPointer(a.uv,n,k.FLOAT,!1,0,0)),p=e.attributes.color,0<=a.color&&p&&(n=p.itemSize,k.bindBuffer(k.ARRAY_BUFFER,p.buffer),l(a.color),k.vertexAttribPointer(a.color,n,k.FLOAT,!1,0,0)),p=e.attributes.tangent,0<=a.tangent&&p&&(n=p.itemSize,k.bindBuffer(k.ARRAY_BUFFER,p.buffer),l(a.tangent),k.vertexAttribPointer(a.tangent,n,k.FLOAT,!1,0,0))),k.drawArrays(k.TRIANGLES,0,j.numItems/3), I.info.render.calls++,I.info.render.vertices+=j.numItems/3,I.info.render.faces+=j.numItems/3/3;else f instanceof THREE.ParticleSystem&&b&&(j=e.attributes.position,p=j.itemSize,k.bindBuffer(k.ARRAY_BUFFER,j.buffer),l(a.position),k.vertexAttribPointer(a.position,p,k.FLOAT,!1,0,0),p=e.attributes.color,0<=a.color&&p&&(n=p.itemSize,k.bindBuffer(k.ARRAY_BUFFER,p.buffer),l(a.color),k.vertexAttribPointer(a.color,n,k.FLOAT,!1,0,0)),k.drawArrays(k.POINTS,0,j.numItems/3),I.info.render.calls++,I.info.render.points+= j.numItems/3)};this.renderBuffer=function(a,b,c,d,e,f){if(!1!==d.visible){var g,h;c=L(a,b,c,d,f);b=c.attributes;a=!1;c=16777215*e.id+2*c.id+(d.wireframe?1:0);c!==aa&&(aa=c,a=!0);a&&m();if(!d.morphTargets&&0<=b.position)a&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglVertexBuffer),l(b.position),k.vertexAttribPointer(b.position,3,k.FLOAT,!1,0,0));else if(f.morphTargetBase){c=d.program.attributes;-1!==f.morphTargetBase&&0<=c.position?(k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[f.morphTargetBase]), l(c.position),k.vertexAttribPointer(c.position,3,k.FLOAT,!1,0,0)):0<=c.position&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglVertexBuffer),l(c.position),k.vertexAttribPointer(c.position,3,k.FLOAT,!1,0,0));if(f.morphTargetForcedOrder.length){var j=0;h=f.morphTargetForcedOrder;for(g=f.morphTargetInfluences;j<d.numSupportedMorphTargets&&j<h.length;)0<=c["morphTarget"+j]&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[h[j]]),l(c["morphTarget"+j]),k.vertexAttribPointer(c["morphTarget"+j],3,k.FLOAT, !1,0,0)),0<=c["morphNormal"+j]&&d.morphNormals&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphNormalsBuffers[h[j]]),l(c["morphNormal"+j]),k.vertexAttribPointer(c["morphNormal"+j],3,k.FLOAT,!1,0,0)),f.__webglMorphTargetInfluences[j]=g[h[j]],j++}else{h=[];g=f.morphTargetInfluences;var n,q=g.length;for(n=0;n<q;n++)j=g[n],0<j&&h.push([j,n]);h.length>d.numSupportedMorphTargets?(h.sort(p),h.length=d.numSupportedMorphTargets):h.length>d.numSupportedMorphNormals?h.sort(p):0===h.length&&h.push([0,0]);for(j=0;j< d.numSupportedMorphTargets;)h[j]?(n=h[j][1],0<=c["morphTarget"+j]&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[n]),l(c["morphTarget"+j]),k.vertexAttribPointer(c["morphTarget"+j],3,k.FLOAT,!1,0,0)),0<=c["morphNormal"+j]&&d.morphNormals&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphNormalsBuffers[n]),l(c["morphNormal"+j]),k.vertexAttribPointer(c["morphNormal"+j],3,k.FLOAT,!1,0,0)),f.__webglMorphTargetInfluences[j]=g[n]):f.__webglMorphTargetInfluences[j]=0,j++}null!==d.program.uniforms.morphTargetInfluences&& k.uniform1fv(d.program.uniforms.morphTargetInfluences,f.__webglMorphTargetInfluences)}if(a){if(e.__webglCustomAttributesList){g=0;for(h=e.__webglCustomAttributesList.length;g<h;g++)c=e.__webglCustomAttributesList[g],0<=b[c.buffer.belongsToAttribute]&&(k.bindBuffer(k.ARRAY_BUFFER,c.buffer),l(b[c.buffer.belongsToAttribute]),k.vertexAttribPointer(b[c.buffer.belongsToAttribute],c.size,k.FLOAT,!1,0,0))}0<=b.color&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglColorBuffer),l(b.color),k.vertexAttribPointer(b.color, 3,k.FLOAT,!1,0,0));0<=b.normal&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglNormalBuffer),l(b.normal),k.vertexAttribPointer(b.normal,3,k.FLOAT,!1,0,0));0<=b.tangent&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglTangentBuffer),l(b.tangent),k.vertexAttribPointer(b.tangent,4,k.FLOAT,!1,0,0));0<=b.uv&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglUVBuffer),l(b.uv),k.vertexAttribPointer(b.uv,2,k.FLOAT,!1,0,0));0<=b.uv2&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglUV2Buffer),l(b.uv2),k.vertexAttribPointer(b.uv2,2,k.FLOAT,!1,0,0)); d.skinning&&(0<=b.skinIndex&&0<=b.skinWeight)&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglSkinIndicesBuffer),l(b.skinIndex),k.vertexAttribPointer(b.skinIndex,4,k.FLOAT,!1,0,0),k.bindBuffer(k.ARRAY_BUFFER,e.__webglSkinWeightsBuffer),l(b.skinWeight),k.vertexAttribPointer(b.skinWeight,4,k.FLOAT,!1,0,0));0<=b.lineDistance&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglLineDistanceBuffer),l(b.lineDistance),k.vertexAttribPointer(b.lineDistance,1,k.FLOAT,!1,0,0))}f instanceof THREE.Mesh?(d.wireframe?(d=d.wireframeLinewidth, d!==Ga&&(k.lineWidth(d),Ga=d),a&&k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,e.__webglLineBuffer),k.drawElements(k.LINES,e.__webglLineCount,k.UNSIGNED_SHORT,0)):(a&&k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,e.__webglFaceBuffer),k.drawElements(k.TRIANGLES,e.__webglFaceCount,k.UNSIGNED_SHORT,0)),I.info.render.calls++,I.info.render.vertices+=e.__webglFaceCount,I.info.render.faces+=e.__webglFaceCount/3):f instanceof THREE.Line?(f=f.type===THREE.LineStrip?k.LINE_STRIP:k.LINES,d=d.linewidth,d!==Ga&&(k.lineWidth(d),Ga= d),k.drawArrays(f,0,e.__webglLineCount),I.info.render.calls++):f instanceof THREE.ParticleSystem?(k.drawArrays(k.POINTS,0,e.__webglParticleCount),I.info.render.calls++,I.info.render.points+=e.__webglParticleCount):f instanceof THREE.Ribbon&&(k.drawArrays(k.TRIANGLE_STRIP,0,e.__webglVertexCount),I.info.render.calls++)}};this.render=function(a,b,c,d){if(!1===b instanceof THREE.Camera)console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");else{var e,f,g,j,h=a.__lights, l=a.fog;V=-1;fc=!0;this.autoUpdateScene&&a.updateMatrixWorld();void 0===b.parent&&b.updateMatrixWorld();b.matrixWorldInverse.getInverse(b.matrixWorld);xb.multiply(b.projectionMatrix,b.matrixWorldInverse);ec.setFromMatrix(xb);this.autoUpdateObjects&&this.initWebGLObjects(a);t(this.renderPluginsPre,a,b);I.info.render.calls=0;I.info.render.vertices=0;I.info.render.faces=0;I.info.render.points=0;this.setRenderTarget(c);(this.autoClear||d)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil); j=a.__webglObjects;d=0;for(e=j.length;d<e;d++)if(f=j[d],g=f.object,f.render=!1,g.visible&&(!(g instanceof THREE.Mesh||g instanceof THREE.ParticleSystem)||!g.frustumCulled||ec.contains(g))){C(g,b);var p=f,m=p.buffer,s=void 0,u=s=void 0,u=p.object.material;if(u instanceof THREE.MeshFaceMaterial)s=m.materialIndex,s=u.materials[s],s.transparent?(p.transparent=s,p.opaque=null):(p.opaque=s,p.transparent=null);else if(s=u)s.transparent?(p.transparent=s,p.opaque=null):(p.opaque=s,p.transparent=null);f.render= !0;!0===this.sortObjects&&(null!==g.renderDepth?f.z=g.renderDepth:(Tb.copy(g.matrixWorld.getPosition()),xb.multiplyVector3(Tb),f.z=Tb.z),f.id=g.id)}this.sortObjects&&j.sort(q);j=a.__webglObjectsImmediate;d=0;for(e=j.length;d<e;d++)f=j[d],g=f.object,g.visible&&(C(g,b),g=f.object.material,g.transparent?(f.transparent=g,f.opaque=null):(f.opaque=g,f.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),D(d.polygonOffset,d.polygonOffsetFactor,d.polygonOffsetUnits),r(a.__webglObjects,!1,"",b,h,l,!0,d),n(a.__webglObjectsImmediate,"",b,h,l,!1,d)):(d=null,this.setBlending(THREE.NoBlending),r(a.__webglObjects,!0,"opaque",b,h,l,!1,d),n(a.__webglObjectsImmediate,"opaque",b,h,l,!1,d),r(a.__webglObjects,!1,"transparent",b,h,l,!0,d),n(a.__webglObjectsImmediate,"transparent",b,h,l,!0,d));t(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,e){var f=L(a,b,c,d,e);aa=-1;I.setMaterialFaces(d);e.immediateRenderCallback?e.immediateRenderCallback(f, k,ec):e.render(function(a){I.renderBufferImmediate(a,f,d)})};this.initWebGLObjects=function(a){a.__webglObjects||(a.__webglObjects=[],a.__webglObjectsImmediate=[],a.__webglSprites=[],a.__webglFlares=[]);for(;a.__objectsAdded.length;){var b=a.__objectsAdded[0],l=a,n=void 0,m=void 0,q=void 0,r=void 0;if(!b.__webglInit)if(b.__webglInit=!0,b._modelViewMatrix=new THREE.Matrix4,b._normalMatrix=new THREE.Matrix3,void 0!==b.geometry&&void 0===b.geometry.__webglInit&&(b.geometry.__webglInit=!0,b.geometry.addEventListener("dispose", xd)),b instanceof THREE.Mesh)if(m=b.geometry,q=b.material,m instanceof THREE.Geometry){if(void 0===m.geometryGroups){var t=m,z=void 0,B=void 0,D=void 0,C=void 0,G=void 0,E=void 0,H={},J=t.morphTargets.length,K=t.morphNormals.length,L=q instanceof THREE.MeshFaceMaterial;t.geometryGroups={};z=0;for(B=t.faces.length;z<B;z++)D=t.faces[z],C=L?D.materialIndex:0,void 0===H[C]&&(H[C]={hash:C,counter:0}),E=H[C].hash+"_"+H[C].counter,void 0===t.geometryGroups[E]&&(t.geometryGroups[E]={faces3:[],faces4:[],materialIndex:C, vertices:0,numMorphTargets:J,numMorphNormals:K}),G=D instanceof THREE.Face3?3:4,65535<t.geometryGroups[E].vertices+G&&(H[C].counter+=1,E=H[C].hash+"_"+H[C].counter,void 0===t.geometryGroups[E]&&(t.geometryGroups[E]={faces3:[],faces4:[],materialIndex:C,vertices:0,numMorphTargets:J,numMorphNormals:K})),D instanceof THREE.Face3?t.geometryGroups[E].faces3.push(z):t.geometryGroups[E].faces4.push(z),t.geometryGroups[E].vertices+=G;t.geometryGroupsList=[];var N=void 0;for(N in t.geometryGroups)t.geometryGroups[N].id= Na++,t.geometryGroupsList.push(t.geometryGroups[N])}for(n in m.geometryGroups)if(r=m.geometryGroups[n],!r.__webglVertexBuffer){var M=r;M.__webglVertexBuffer=k.createBuffer();M.__webglNormalBuffer=k.createBuffer();M.__webglTangentBuffer=k.createBuffer();M.__webglColorBuffer=k.createBuffer();M.__webglUVBuffer=k.createBuffer();M.__webglUV2Buffer=k.createBuffer();M.__webglSkinIndicesBuffer=k.createBuffer();M.__webglSkinWeightsBuffer=k.createBuffer();M.__webglFaceBuffer=k.createBuffer();M.__webglLineBuffer= k.createBuffer();var V=void 0,aa=void 0;if(M.numMorphTargets){M.__webglMorphTargetsBuffers=[];V=0;for(aa=M.numMorphTargets;V<aa;V++)M.__webglMorphTargetsBuffers.push(k.createBuffer())}if(M.numMorphNormals){M.__webglMorphNormalsBuffers=[];V=0;for(aa=M.numMorphNormals;V<aa;V++)M.__webglMorphNormalsBuffers.push(k.createBuffer())}I.info.memory.geometries++;d(r,b);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&&h(m);else if(b instanceof THREE.Ribbon){if(m=b.geometry,!m.__webglVertexBuffer){var T=m;T.__webglVertexBuffer=k.createBuffer();T.__webglColorBuffer=k.createBuffer();T.__webglNormalBuffer=k.createBuffer();I.info.memory.geometries++;var S=m,W=b,ia=S.vertices.length;S.__vertexArray=new Float32Array(3*ia);S.__colorArray=new Float32Array(3*ia);S.__normalArray=new Float32Array(3*ia);S.__webglVertexCount=ia;c(S,W);m.verticesNeedUpdate=!0; m.colorsNeedUpdate=!0;m.normalsNeedUpdate=!0}}else if(b instanceof THREE.Line){if(m=b.geometry,!m.__webglVertexBuffer){var oa=m;oa.__webglVertexBuffer=k.createBuffer();oa.__webglColorBuffer=k.createBuffer();oa.__webglLineDistanceBuffer=k.createBuffer();I.info.memory.geometries++;var X=m,ka=b,Y=X.vertices.length;X.__vertexArray=new Float32Array(3*Y);X.__colorArray=new Float32Array(3*Y);X.__lineDistanceArray=new Float32Array(1*Y);X.__webglLineCount=Y;c(X,ka);m.verticesNeedUpdate=!0;m.colorsNeedUpdate= !0;m.lineDistancesNeedUpdate=!0}}else if(b instanceof THREE.ParticleSystem&&(m=b.geometry,!m.__webglVertexBuffer))if(m instanceof THREE.Geometry){var ua=m;ua.__webglVertexBuffer=k.createBuffer();ua.__webglColorBuffer=k.createBuffer();I.info.memory.geometries++;var da=m,wa=b,ga=da.vertices.length;da.__vertexArray=new Float32Array(3*ga);da.__colorArray=new Float32Array(3*ga);da.__sortArray=[];da.__webglParticleCount=ga;c(da,wa);m.verticesNeedUpdate=!0;m.colorsNeedUpdate=!0}else m instanceof THREE.BufferGeometry&& h(m);if(!b.__webglActive){if(b instanceof THREE.Mesh)if(m=b.geometry,m instanceof THREE.BufferGeometry)s(l.__webglObjects,m,b);else for(n in m.geometryGroups)r=m.geometryGroups[n],s(l.__webglObjects,r,b);else b instanceof THREE.Ribbon||b instanceof THREE.Line||b instanceof THREE.ParticleSystem?(m=b.geometry,s(l.__webglObjects,m,b)):b instanceof THREE.ImmediateRenderObject||b.immediateRenderCallback?l.__webglObjectsImmediate.push({object:b,opaque:null,transparent:null}):b instanceof THREE.Sprite?l.__webglSprites.push(b): b instanceof THREE.LensFlare&&l.__webglFlares.push(b);b.__webglActive=!0}a.__objectsAdded.splice(0,1)}for(;a.__objectsRemoved.length;){var $=a.__objectsRemoved[0],ja=a;$ instanceof THREE.Mesh||$ instanceof THREE.ParticleSystem||$ instanceof THREE.Ribbon||$ instanceof THREE.Line?A(ja.__webglObjects,$):$ instanceof THREE.Sprite?u(ja.__webglSprites,$):$ instanceof THREE.LensFlare?u(ja.__webglFlares,$):($ instanceof THREE.ImmediateRenderObject||$.immediateRenderCallback)&&A(ja.__webglObjectsImmediate, $);$.__webglActive=!1;a.__objectsRemoved.splice(0,1)}for(var sa=0,za=a.__webglObjects.length;sa<za;sa++){var la=a.__webglObjects[sa].object,Z=la.geometry,Aa=void 0,Ba=void 0,ha=void 0;if(la instanceof THREE.Mesh)if(Z instanceof THREE.BufferGeometry)(Z.verticesNeedUpdate||Z.elementsNeedUpdate||Z.uvsNeedUpdate||Z.normalsNeedUpdate||Z.colorsNeedUpdate||Z.tangentsNeedUpdate)&&j(Z,k.DYNAMIC_DRAW,!Z.dynamic),Z.verticesNeedUpdate=!1,Z.elementsNeedUpdate=!1,Z.uvsNeedUpdate=!1,Z.normalsNeedUpdate=!1,Z.colorsNeedUpdate= !1,Z.tangentsNeedUpdate=!1;else{for(var Ea=0,Fa=Z.geometryGroupsList.length;Ea<Fa;Ea++)if(Aa=Z.geometryGroupsList[Ea],ha=e(la,Aa),Z.buffersNeedUpdate&&d(Aa,la),Ba=ha.attributes&&x(ha),Z.verticesNeedUpdate||Z.morphTargetsNeedUpdate||Z.elementsNeedUpdate||Z.uvsNeedUpdate||Z.normalsNeedUpdate||Z.colorsNeedUpdate||Z.tangentsNeedUpdate||Ba){var xa=Aa,Ga=la,ta=k.DYNAMIC_DRAW,Ya=!Z.dynamic,Ka=ha;if(xa.__inittedArrays){var lb=f(Ka),eb=Ka.vertexColors?Ka.vertexColors:!1,ob=g(Ka),ib=lb===THREE.SmoothShading, F=void 0,U=void 0,Oa=void 0,O=void 0,ub=void 0,fb=void 0,Ha=void 0,ab=void 0,$a=void 0,qb=void 0,rb=void 0,P=void 0,Q=void 0,R=void 0,ma=void 0,Za=void 0,pa=void 0,na=void 0,sb=void 0,Ta=void 0,yb=void 0,Gb=void 0,ya=void 0,wb=void 0,cb=void 0,db=void 0,Hb=void 0,bb=void 0,jb=void 0,kb=void 0,Db=void 0,tb=void 0,pb=void 0,vb=void 0,Pb=void 0,ra=void 0,bc=void 0,Jb=void 0,Qb=void 0,Rb=void 0,gb=void 0,ec=void 0,mb=void 0,hb=void 0,sc=void 0,Ub=void 0,Pa=0,Qa=0,cc=0,dc=0,Kb=0,Eb=0,La=0,Ib=0,nb=0,ca= 0,qa=0,y=0,Ia=void 0,zb=xa.__vertexArray,Vb=xa.__uvArray,Wb=xa.__uv2Array,Xb=xa.__normalArray,Ua=xa.__tangentArray,Ab=xa.__colorArray,Va=xa.__skinIndexArray,Wa=xa.__skinWeightArray,fc=xa.__morphTargetsArrays,gc=xa.__morphNormalsArrays,nc=xa.__webglCustomAttributesList,w=void 0,hc=xa.__faceArray,Sb=xa.__lineArray,Lb=Ga.geometry,wc=Lb.elementsNeedUpdate,qc=Lb.uvsNeedUpdate,Sc=Lb.normalsNeedUpdate,Tc=Lb.tangentsNeedUpdate,Uc=Lb.colorsNeedUpdate,Vc=Lb.morphTargetsNeedUpdate,yc=Lb.vertices,Ca=xa.faces3, Da=xa.faces4,Fb=Lb.faces,qd=Lb.faceVertexUvs[0],rd=Lb.faceVertexUvs[1],zc=Lb.skinIndices,tc=Lb.skinWeights,uc=Lb.morphTargets,Wc=Lb.morphNormals;if(Lb.verticesNeedUpdate){F=0;for(U=Ca.length;F<U;F++)O=Fb[Ca[F]],P=yc[O.a],Q=yc[O.b],R=yc[O.c],zb[Qa]=P.x,zb[Qa+1]=P.y,zb[Qa+2]=P.z,zb[Qa+3]=Q.x,zb[Qa+4]=Q.y,zb[Qa+5]=Q.z,zb[Qa+6]=R.x,zb[Qa+7]=R.y,zb[Qa+8]=R.z,Qa+=9;F=0;for(U=Da.length;F<U;F++)O=Fb[Da[F]],P=yc[O.a],Q=yc[O.b],R=yc[O.c],ma=yc[O.d],zb[Qa]=P.x,zb[Qa+1]=P.y,zb[Qa+2]=P.z,zb[Qa+3]=Q.x,zb[Qa+4]= Q.y,zb[Qa+5]=Q.z,zb[Qa+6]=R.x,zb[Qa+7]=R.y,zb[Qa+8]=R.z,zb[Qa+9]=ma.x,zb[Qa+10]=ma.y,zb[Qa+11]=ma.z,Qa+=12;k.bindBuffer(k.ARRAY_BUFFER,xa.__webglVertexBuffer);k.bufferData(k.ARRAY_BUFFER,zb,ta)}if(Vc){gb=0;for(ec=uc.length;gb<ec;gb++){F=qa=0;for(U=Ca.length;F<U;F++)sc=Ca[F],O=Fb[sc],P=uc[gb].vertices[O.a],Q=uc[gb].vertices[O.b],R=uc[gb].vertices[O.c],mb=fc[gb],mb[qa]=P.x,mb[qa+1]=P.y,mb[qa+2]=P.z,mb[qa+3]=Q.x,mb[qa+4]=Q.y,mb[qa+5]=Q.z,mb[qa+6]=R.x,mb[qa+7]=R.y,mb[qa+8]=R.z,Ka.morphNormals&&(ib?(Ub= Wc[gb].vertexNormals[sc],Ta=Ub.a,yb=Ub.b,Gb=Ub.c):Gb=yb=Ta=Wc[gb].faceNormals[sc],hb=gc[gb],hb[qa]=Ta.x,hb[qa+1]=Ta.y,hb[qa+2]=Ta.z,hb[qa+3]=yb.x,hb[qa+4]=yb.y,hb[qa+5]=yb.z,hb[qa+6]=Gb.x,hb[qa+7]=Gb.y,hb[qa+8]=Gb.z),qa+=9;F=0;for(U=Da.length;F<U;F++)sc=Da[F],O=Fb[sc],P=uc[gb].vertices[O.a],Q=uc[gb].vertices[O.b],R=uc[gb].vertices[O.c],ma=uc[gb].vertices[O.d],mb=fc[gb],mb[qa]=P.x,mb[qa+1]=P.y,mb[qa+2]=P.z,mb[qa+3]=Q.x,mb[qa+4]=Q.y,mb[qa+5]=Q.z,mb[qa+6]=R.x,mb[qa+7]=R.y,mb[qa+8]=R.z,mb[qa+9]=ma.x, mb[qa+10]=ma.y,mb[qa+11]=ma.z,Ka.morphNormals&&(ib?(Ub=Wc[gb].vertexNormals[sc],Ta=Ub.a,yb=Ub.b,Gb=Ub.c,ya=Ub.d):ya=Gb=yb=Ta=Wc[gb].faceNormals[sc],hb=gc[gb],hb[qa]=Ta.x,hb[qa+1]=Ta.y,hb[qa+2]=Ta.z,hb[qa+3]=yb.x,hb[qa+4]=yb.y,hb[qa+5]=yb.z,hb[qa+6]=Gb.x,hb[qa+7]=Gb.y,hb[qa+8]=Gb.z,hb[qa+9]=ya.x,hb[qa+10]=ya.y,hb[qa+11]=ya.z),qa+=12;k.bindBuffer(k.ARRAY_BUFFER,xa.__webglMorphTargetsBuffers[gb]);k.bufferData(k.ARRAY_BUFFER,fc[gb],ta);Ka.morphNormals&&(k.bindBuffer(k.ARRAY_BUFFER,xa.__webglMorphNormalsBuffers[gb]), k.bufferData(k.ARRAY_BUFFER,gc[gb],ta))}}if(tc.length){F=0;for(U=Ca.length;F<U;F++)O=Fb[Ca[F]],bb=tc[O.a],jb=tc[O.b],kb=tc[O.c],Wa[ca]=bb.x,Wa[ca+1]=bb.y,Wa[ca+2]=bb.z,Wa[ca+3]=bb.w,Wa[ca+4]=jb.x,Wa[ca+5]=jb.y,Wa[ca+6]=jb.z,Wa[ca+7]=jb.w,Wa[ca+8]=kb.x,Wa[ca+9]=kb.y,Wa[ca+10]=kb.z,Wa[ca+11]=kb.w,tb=zc[O.a],pb=zc[O.b],vb=zc[O.c],Va[ca]=tb.x,Va[ca+1]=tb.y,Va[ca+2]=tb.z,Va[ca+3]=tb.w,Va[ca+4]=pb.x,Va[ca+5]=pb.y,Va[ca+6]=pb.z,Va[ca+7]=pb.w,Va[ca+8]=vb.x,Va[ca+9]=vb.y,Va[ca+10]=vb.z,Va[ca+11]=vb.w,ca+= 12;F=0;for(U=Da.length;F<U;F++)O=Fb[Da[F]],bb=tc[O.a],jb=tc[O.b],kb=tc[O.c],Db=tc[O.d],Wa[ca]=bb.x,Wa[ca+1]=bb.y,Wa[ca+2]=bb.z,Wa[ca+3]=bb.w,Wa[ca+4]=jb.x,Wa[ca+5]=jb.y,Wa[ca+6]=jb.z,Wa[ca+7]=jb.w,Wa[ca+8]=kb.x,Wa[ca+9]=kb.y,Wa[ca+10]=kb.z,Wa[ca+11]=kb.w,Wa[ca+12]=Db.x,Wa[ca+13]=Db.y,Wa[ca+14]=Db.z,Wa[ca+15]=Db.w,tb=zc[O.a],pb=zc[O.b],vb=zc[O.c],Pb=zc[O.d],Va[ca]=tb.x,Va[ca+1]=tb.y,Va[ca+2]=tb.z,Va[ca+3]=tb.w,Va[ca+4]=pb.x,Va[ca+5]=pb.y,Va[ca+6]=pb.z,Va[ca+7]=pb.w,Va[ca+8]=vb.x,Va[ca+9]=vb.y,Va[ca+ 10]=vb.z,Va[ca+11]=vb.w,Va[ca+12]=Pb.x,Va[ca+13]=Pb.y,Va[ca+14]=Pb.z,Va[ca+15]=Pb.w,ca+=16;0<ca&&(k.bindBuffer(k.ARRAY_BUFFER,xa.__webglSkinIndicesBuffer),k.bufferData(k.ARRAY_BUFFER,Va,ta),k.bindBuffer(k.ARRAY_BUFFER,xa.__webglSkinWeightsBuffer),k.bufferData(k.ARRAY_BUFFER,Wa,ta))}if(Uc&&eb){F=0;for(U=Ca.length;F<U;F++)O=Fb[Ca[F]],Ha=O.vertexColors,ab=O.color,3===Ha.length&&eb===THREE.VertexColors?(wb=Ha[0],cb=Ha[1],db=Ha[2]):db=cb=wb=ab,Ab[nb]=wb.r,Ab[nb+1]=wb.g,Ab[nb+2]=wb.b,Ab[nb+3]=cb.r,Ab[nb+ 4]=cb.g,Ab[nb+5]=cb.b,Ab[nb+6]=db.r,Ab[nb+7]=db.g,Ab[nb+8]=db.b,nb+=9;F=0;for(U=Da.length;F<U;F++)O=Fb[Da[F]],Ha=O.vertexColors,ab=O.color,4===Ha.length&&eb===THREE.VertexColors?(wb=Ha[0],cb=Ha[1],db=Ha[2],Hb=Ha[3]):Hb=db=cb=wb=ab,Ab[nb]=wb.r,Ab[nb+1]=wb.g,Ab[nb+2]=wb.b,Ab[nb+3]=cb.r,Ab[nb+4]=cb.g,Ab[nb+5]=cb.b,Ab[nb+6]=db.r,Ab[nb+7]=db.g,Ab[nb+8]=db.b,Ab[nb+9]=Hb.r,Ab[nb+10]=Hb.g,Ab[nb+11]=Hb.b,nb+=12;0<nb&&(k.bindBuffer(k.ARRAY_BUFFER,xa.__webglColorBuffer),k.bufferData(k.ARRAY_BUFFER,Ab,ta))}if(Tc&& Lb.hasTangents){F=0;for(U=Ca.length;F<U;F++)O=Fb[Ca[F]],$a=O.vertexTangents,Za=$a[0],pa=$a[1],na=$a[2],Ua[La]=Za.x,Ua[La+1]=Za.y,Ua[La+2]=Za.z,Ua[La+3]=Za.w,Ua[La+4]=pa.x,Ua[La+5]=pa.y,Ua[La+6]=pa.z,Ua[La+7]=pa.w,Ua[La+8]=na.x,Ua[La+9]=na.y,Ua[La+10]=na.z,Ua[La+11]=na.w,La+=12;F=0;for(U=Da.length;F<U;F++)O=Fb[Da[F]],$a=O.vertexTangents,Za=$a[0],pa=$a[1],na=$a[2],sb=$a[3],Ua[La]=Za.x,Ua[La+1]=Za.y,Ua[La+2]=Za.z,Ua[La+3]=Za.w,Ua[La+4]=pa.x,Ua[La+5]=pa.y,Ua[La+6]=pa.z,Ua[La+7]=pa.w,Ua[La+8]=na.x,Ua[La+ 9]=na.y,Ua[La+10]=na.z,Ua[La+11]=na.w,Ua[La+12]=sb.x,Ua[La+13]=sb.y,Ua[La+14]=sb.z,Ua[La+15]=sb.w,La+=16;k.bindBuffer(k.ARRAY_BUFFER,xa.__webglTangentBuffer);k.bufferData(k.ARRAY_BUFFER,Ua,ta)}if(Sc&&lb){F=0;for(U=Ca.length;F<U;F++)if(O=Fb[Ca[F]],ub=O.vertexNormals,fb=O.normal,3===ub.length&&ib)for(ra=0;3>ra;ra++)Jb=ub[ra],Xb[Eb]=Jb.x,Xb[Eb+1]=Jb.y,Xb[Eb+2]=Jb.z,Eb+=3;else for(ra=0;3>ra;ra++)Xb[Eb]=fb.x,Xb[Eb+1]=fb.y,Xb[Eb+2]=fb.z,Eb+=3;F=0;for(U=Da.length;F<U;F++)if(O=Fb[Da[F]],ub=O.vertexNormals, fb=O.normal,4===ub.length&&ib)for(ra=0;4>ra;ra++)Jb=ub[ra],Xb[Eb]=Jb.x,Xb[Eb+1]=Jb.y,Xb[Eb+2]=Jb.z,Eb+=3;else for(ra=0;4>ra;ra++)Xb[Eb]=fb.x,Xb[Eb+1]=fb.y,Xb[Eb+2]=fb.z,Eb+=3;k.bindBuffer(k.ARRAY_BUFFER,xa.__webglNormalBuffer);k.bufferData(k.ARRAY_BUFFER,Xb,ta)}if(qc&&qd&&ob){F=0;for(U=Ca.length;F<U;F++)if(Oa=Ca[F],qb=qd[Oa],void 0!==qb)for(ra=0;3>ra;ra++)Qb=qb[ra],Vb[cc]=Qb.x,Vb[cc+1]=Qb.y,cc+=2;F=0;for(U=Da.length;F<U;F++)if(Oa=Da[F],qb=qd[Oa],void 0!==qb)for(ra=0;4>ra;ra++)Qb=qb[ra],Vb[cc]=Qb.x, Vb[cc+1]=Qb.y,cc+=2;0<cc&&(k.bindBuffer(k.ARRAY_BUFFER,xa.__webglUVBuffer),k.bufferData(k.ARRAY_BUFFER,Vb,ta))}if(qc&&rd&&ob){F=0;for(U=Ca.length;F<U;F++)if(Oa=Ca[F],rb=rd[Oa],void 0!==rb)for(ra=0;3>ra;ra++)Rb=rb[ra],Wb[dc]=Rb.x,Wb[dc+1]=Rb.y,dc+=2;F=0;for(U=Da.length;F<U;F++)if(Oa=Da[F],rb=rd[Oa],void 0!==rb)for(ra=0;4>ra;ra++)Rb=rb[ra],Wb[dc]=Rb.x,Wb[dc+1]=Rb.y,dc+=2;0<dc&&(k.bindBuffer(k.ARRAY_BUFFER,xa.__webglUV2Buffer),k.bufferData(k.ARRAY_BUFFER,Wb,ta))}if(wc){F=0;for(U=Ca.length;F<U;F++)hc[Kb]= Pa,hc[Kb+1]=Pa+1,hc[Kb+2]=Pa+2,Kb+=3,Sb[Ib]=Pa,Sb[Ib+1]=Pa+1,Sb[Ib+2]=Pa,Sb[Ib+3]=Pa+2,Sb[Ib+4]=Pa+1,Sb[Ib+5]=Pa+2,Ib+=6,Pa+=3;F=0;for(U=Da.length;F<U;F++)hc[Kb]=Pa,hc[Kb+1]=Pa+1,hc[Kb+2]=Pa+3,hc[Kb+3]=Pa+1,hc[Kb+4]=Pa+2,hc[Kb+5]=Pa+3,Kb+=6,Sb[Ib]=Pa,Sb[Ib+1]=Pa+1,Sb[Ib+2]=Pa,Sb[Ib+3]=Pa+3,Sb[Ib+4]=Pa+1,Sb[Ib+5]=Pa+2,Sb[Ib+6]=Pa+2,Sb[Ib+7]=Pa+3,Ib+=8,Pa+=4;k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,xa.__webglFaceBuffer);k.bufferData(k.ELEMENT_ARRAY_BUFFER,hc,ta);k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,xa.__webglLineBuffer); k.bufferData(k.ELEMENT_ARRAY_BUFFER,Sb,ta)}if(nc){ra=0;for(bc=nc.length;ra<bc;ra++)if(w=nc[ra],w.__original.needsUpdate){y=0;if(1===w.size)if(void 0===w.boundTo||"vertices"===w.boundTo){F=0;for(U=Ca.length;F<U;F++)O=Fb[Ca[F]],w.array[y]=w.value[O.a],w.array[y+1]=w.value[O.b],w.array[y+2]=w.value[O.c],y+=3;F=0;for(U=Da.length;F<U;F++)O=Fb[Da[F]],w.array[y]=w.value[O.a],w.array[y+1]=w.value[O.b],w.array[y+2]=w.value[O.c],w.array[y+3]=w.value[O.d],y+=4}else{if("faces"===w.boundTo){F=0;for(U=Ca.length;F< U;F++)Ia=w.value[Ca[F]],w.array[y]=Ia,w.array[y+1]=Ia,w.array[y+2]=Ia,y+=3;F=0;for(U=Da.length;F<U;F++)Ia=w.value[Da[F]],w.array[y]=Ia,w.array[y+1]=Ia,w.array[y+2]=Ia,w.array[y+3]=Ia,y+=4}}else if(2===w.size)if(void 0===w.boundTo||"vertices"===w.boundTo){F=0;for(U=Ca.length;F<U;F++)O=Fb[Ca[F]],P=w.value[O.a],Q=w.value[O.b],R=w.value[O.c],w.array[y]=P.x,w.array[y+1]=P.y,w.array[y+2]=Q.x,w.array[y+3]=Q.y,w.array[y+4]=R.x,w.array[y+5]=R.y,y+=6;F=0;for(U=Da.length;F<U;F++)O=Fb[Da[F]],P=w.value[O.a],Q= w.value[O.b],R=w.value[O.c],ma=w.value[O.d],w.array[y]=P.x,w.array[y+1]=P.y,w.array[y+2]=Q.x,w.array[y+3]=Q.y,w.array[y+4]=R.x,w.array[y+5]=R.y,w.array[y+6]=ma.x,w.array[y+7]=ma.y,y+=8}else{if("faces"===w.boundTo){F=0;for(U=Ca.length;F<U;F++)R=Q=P=Ia=w.value[Ca[F]],w.array[y]=P.x,w.array[y+1]=P.y,w.array[y+2]=Q.x,w.array[y+3]=Q.y,w.array[y+4]=R.x,w.array[y+5]=R.y,y+=6;F=0;for(U=Da.length;F<U;F++)ma=R=Q=P=Ia=w.value[Da[F]],w.array[y]=P.x,w.array[y+1]=P.y,w.array[y+2]=Q.x,w.array[y+3]=Q.y,w.array[y+ 4]=R.x,w.array[y+5]=R.y,w.array[y+6]=ma.x,w.array[y+7]=ma.y,y+=8}}else if(3===w.size){var ba;ba="c"===w.type?["r","g","b"]:["x","y","z"];if(void 0===w.boundTo||"vertices"===w.boundTo){F=0;for(U=Ca.length;F<U;F++)O=Fb[Ca[F]],P=w.value[O.a],Q=w.value[O.b],R=w.value[O.c],w.array[y]=P[ba[0]],w.array[y+1]=P[ba[1]],w.array[y+2]=P[ba[2]],w.array[y+3]=Q[ba[0]],w.array[y+4]=Q[ba[1]],w.array[y+5]=Q[ba[2]],w.array[y+6]=R[ba[0]],w.array[y+7]=R[ba[1]],w.array[y+8]=R[ba[2]],y+=9;F=0;for(U=Da.length;F<U;F++)O=Fb[Da[F]], P=w.value[O.a],Q=w.value[O.b],R=w.value[O.c],ma=w.value[O.d],w.array[y]=P[ba[0]],w.array[y+1]=P[ba[1]],w.array[y+2]=P[ba[2]],w.array[y+3]=Q[ba[0]],w.array[y+4]=Q[ba[1]],w.array[y+5]=Q[ba[2]],w.array[y+6]=R[ba[0]],w.array[y+7]=R[ba[1]],w.array[y+8]=R[ba[2]],w.array[y+9]=ma[ba[0]],w.array[y+10]=ma[ba[1]],w.array[y+11]=ma[ba[2]],y+=12}else if("faces"===w.boundTo){F=0;for(U=Ca.length;F<U;F++)R=Q=P=Ia=w.value[Ca[F]],w.array[y]=P[ba[0]],w.array[y+1]=P[ba[1]],w.array[y+2]=P[ba[2]],w.array[y+3]=Q[ba[0]], w.array[y+4]=Q[ba[1]],w.array[y+5]=Q[ba[2]],w.array[y+6]=R[ba[0]],w.array[y+7]=R[ba[1]],w.array[y+8]=R[ba[2]],y+=9;F=0;for(U=Da.length;F<U;F++)ma=R=Q=P=Ia=w.value[Da[F]],w.array[y]=P[ba[0]],w.array[y+1]=P[ba[1]],w.array[y+2]=P[ba[2]],w.array[y+3]=Q[ba[0]],w.array[y+4]=Q[ba[1]],w.array[y+5]=Q[ba[2]],w.array[y+6]=R[ba[0]],w.array[y+7]=R[ba[1]],w.array[y+8]=R[ba[2]],w.array[y+9]=ma[ba[0]],w.array[y+10]=ma[ba[1]],w.array[y+11]=ma[ba[2]],y+=12}else if("faceVertices"===w.boundTo){F=0;for(U=Ca.length;F< U;F++)Ia=w.value[Ca[F]],P=Ia[0],Q=Ia[1],R=Ia[2],w.array[y]=P[ba[0]],w.array[y+1]=P[ba[1]],w.array[y+2]=P[ba[2]],w.array[y+3]=Q[ba[0]],w.array[y+4]=Q[ba[1]],w.array[y+5]=Q[ba[2]],w.array[y+6]=R[ba[0]],w.array[y+7]=R[ba[1]],w.array[y+8]=R[ba[2]],y+=9;F=0;for(U=Da.length;F<U;F++)Ia=w.value[Da[F]],P=Ia[0],Q=Ia[1],R=Ia[2],ma=Ia[3],w.array[y]=P[ba[0]],w.array[y+1]=P[ba[1]],w.array[y+2]=P[ba[2]],w.array[y+3]=Q[ba[0]],w.array[y+4]=Q[ba[1]],w.array[y+5]=Q[ba[2]],w.array[y+6]=R[ba[0]],w.array[y+7]=R[ba[1]], w.array[y+8]=R[ba[2]],w.array[y+9]=ma[ba[0]],w.array[y+10]=ma[ba[1]],w.array[y+11]=ma[ba[2]],y+=12}}else if(4===w.size)if(void 0===w.boundTo||"vertices"===w.boundTo){F=0;for(U=Ca.length;F<U;F++)O=Fb[Ca[F]],P=w.value[O.a],Q=w.value[O.b],R=w.value[O.c],w.array[y]=P.x,w.array[y+1]=P.y,w.array[y+2]=P.z,w.array[y+3]=P.w,w.array[y+4]=Q.x,w.array[y+5]=Q.y,w.array[y+6]=Q.z,w.array[y+7]=Q.w,w.array[y+8]=R.x,w.array[y+9]=R.y,w.array[y+10]=R.z,w.array[y+11]=R.w,y+=12;F=0;for(U=Da.length;F<U;F++)O=Fb[Da[F]], P=w.value[O.a],Q=w.value[O.b],R=w.value[O.c],ma=w.value[O.d],w.array[y]=P.x,w.array[y+1]=P.y,w.array[y+2]=P.z,w.array[y+3]=P.w,w.array[y+4]=Q.x,w.array[y+5]=Q.y,w.array[y+6]=Q.z,w.array[y+7]=Q.w,w.array[y+8]=R.x,w.array[y+9]=R.y,w.array[y+10]=R.z,w.array[y+11]=R.w,w.array[y+12]=ma.x,w.array[y+13]=ma.y,w.array[y+14]=ma.z,w.array[y+15]=ma.w,y+=16}else if("faces"===w.boundTo){F=0;for(U=Ca.length;F<U;F++)R=Q=P=Ia=w.value[Ca[F]],w.array[y]=P.x,w.array[y+1]=P.y,w.array[y+2]=P.z,w.array[y+3]=P.w,w.array[y+ 4]=Q.x,w.array[y+5]=Q.y,w.array[y+6]=Q.z,w.array[y+7]=Q.w,w.array[y+8]=R.x,w.array[y+9]=R.y,w.array[y+10]=R.z,w.array[y+11]=R.w,y+=12;F=0;for(U=Da.length;F<U;F++)ma=R=Q=P=Ia=w.value[Da[F]],w.array[y]=P.x,w.array[y+1]=P.y,w.array[y+2]=P.z,w.array[y+3]=P.w,w.array[y+4]=Q.x,w.array[y+5]=Q.y,w.array[y+6]=Q.z,w.array[y+7]=Q.w,w.array[y+8]=R.x,w.array[y+9]=R.y,w.array[y+10]=R.z,w.array[y+11]=R.w,w.array[y+12]=ma.x,w.array[y+13]=ma.y,w.array[y+14]=ma.z,w.array[y+15]=ma.w,y+=16}else if("faceVertices"===w.boundTo){F= 0;for(U=Ca.length;F<U;F++)Ia=w.value[Ca[F]],P=Ia[0],Q=Ia[1],R=Ia[2],w.array[y]=P.x,w.array[y+1]=P.y,w.array[y+2]=P.z,w.array[y+3]=P.w,w.array[y+4]=Q.x,w.array[y+5]=Q.y,w.array[y+6]=Q.z,w.array[y+7]=Q.w,w.array[y+8]=R.x,w.array[y+9]=R.y,w.array[y+10]=R.z,w.array[y+11]=R.w,y+=12;F=0;for(U=Da.length;F<U;F++)Ia=w.value[Da[F]],P=Ia[0],Q=Ia[1],R=Ia[2],ma=Ia[3],w.array[y]=P.x,w.array[y+1]=P.y,w.array[y+2]=P.z,w.array[y+3]=P.w,w.array[y+4]=Q.x,w.array[y+5]=Q.y,w.array[y+6]=Q.z,w.array[y+7]=Q.w,w.array[y+ 8]=R.x,w.array[y+9]=R.y,w.array[y+10]=R.z,w.array[y+11]=R.w,w.array[y+12]=ma.x,w.array[y+13]=ma.y,w.array[y+14]=ma.z,w.array[y+15]=ma.w,y+=16}k.bindBuffer(k.ARRAY_BUFFER,w.buffer);k.bufferData(k.ARRAY_BUFFER,w.array,ta)}}Ya&&(delete xa.__inittedArrays,delete xa.__colorArray,delete xa.__normalArray,delete xa.__tangentArray,delete xa.__uvArray,delete xa.__uv2Array,delete xa.__faceArray,delete xa.__vertexArray,delete xa.__lineArray,delete xa.__skinIndexArray,delete xa.__skinWeightArray)}}Z.verticesNeedUpdate= !1;Z.morphTargetsNeedUpdate=!1;Z.elementsNeedUpdate=!1;Z.uvsNeedUpdate=!1;Z.normalsNeedUpdate=!1;Z.colorsNeedUpdate=!1;Z.tangentsNeedUpdate=!1;Z.buffersNeedUpdate=!1;ha.attributes&&v(ha)}else if(la instanceof THREE.Ribbon){ha=e(la,Z);Ba=ha.attributes&&x(ha);if(Z.verticesNeedUpdate||Z.colorsNeedUpdate||Z.normalsNeedUpdate||Ba){var Yb=Z,Xc=k.DYNAMIC_DRAW,Lc=void 0,Mc=void 0,Nc=void 0,Yc=void 0,Ja=void 0,Zc=void 0,$c=void 0,ad=void 0,Fc=void 0,Bb=void 0,Cc=void 0,Ra=void 0,Mb=void 0,Gc=Yb.vertices,Hc= Yb.colors,Ic=Yb.normals,ld=Gc.length,md=Hc.length,nd=Ic.length,bd=Yb.__vertexArray,cd=Yb.__colorArray,dd=Yb.__normalArray,od=Yb.colorsNeedUpdate,pd=Yb.normalsNeedUpdate,sd=Yb.__webglCustomAttributesList;if(Yb.verticesNeedUpdate){for(Lc=0;Lc<ld;Lc++)Yc=Gc[Lc],Ja=3*Lc,bd[Ja]=Yc.x,bd[Ja+1]=Yc.y,bd[Ja+2]=Yc.z;k.bindBuffer(k.ARRAY_BUFFER,Yb.__webglVertexBuffer);k.bufferData(k.ARRAY_BUFFER,bd,Xc)}if(od){for(Mc=0;Mc<md;Mc++)Zc=Hc[Mc],Ja=3*Mc,cd[Ja]=Zc.r,cd[Ja+1]=Zc.g,cd[Ja+2]=Zc.b;k.bindBuffer(k.ARRAY_BUFFER, Yb.__webglColorBuffer);k.bufferData(k.ARRAY_BUFFER,cd,Xc)}if(pd){for(Nc=0;Nc<nd;Nc++)$c=Ic[Nc],Ja=3*Nc,dd[Ja]=$c.x,dd[Ja+1]=$c.y,dd[Ja+2]=$c.z;k.bindBuffer(k.ARRAY_BUFFER,Yb.__webglNormalBuffer);k.bufferData(k.ARRAY_BUFFER,dd,Xc)}if(sd){ad=0;for(Fc=sd.length;ad<Fc;ad++)if(Ra=sd[ad],Ra.needsUpdate&&(void 0===Ra.boundTo||"vertices"===Ra.boundTo)){Ja=0;Cc=Ra.value.length;if(1===Ra.size)for(Bb=0;Bb<Cc;Bb++)Ra.array[Bb]=Ra.value[Bb];else if(2===Ra.size)for(Bb=0;Bb<Cc;Bb++)Mb=Ra.value[Bb],Ra.array[Ja]= Mb.x,Ra.array[Ja+1]=Mb.y,Ja+=2;else if(3===Ra.size)if("c"===Ra.type)for(Bb=0;Bb<Cc;Bb++)Mb=Ra.value[Bb],Ra.array[Ja]=Mb.r,Ra.array[Ja+1]=Mb.g,Ra.array[Ja+2]=Mb.b,Ja+=3;else for(Bb=0;Bb<Cc;Bb++)Mb=Ra.value[Bb],Ra.array[Ja]=Mb.x,Ra.array[Ja+1]=Mb.y,Ra.array[Ja+2]=Mb.z,Ja+=3;else if(4===Ra.size)for(Bb=0;Bb<Cc;Bb++)Mb=Ra.value[Bb],Ra.array[Ja]=Mb.x,Ra.array[Ja+1]=Mb.y,Ra.array[Ja+2]=Mb.z,Ra.array[Ja+3]=Mb.w,Ja+=4;k.bindBuffer(k.ARRAY_BUFFER,Ra.buffer);k.bufferData(k.ARRAY_BUFFER,Ra.array,Xc)}}}Z.verticesNeedUpdate= !1;Z.colorsNeedUpdate=!1;Z.normalsNeedUpdate=!1;ha.attributes&&v(ha)}else if(la instanceof THREE.Line){ha=e(la,Z);Ba=ha.attributes&&x(ha);if(Z.verticesNeedUpdate||Z.colorsNeedUpdate||Z.lineDistancesNeedUpdate||Ba){var Zb=Z,ed=k.DYNAMIC_DRAW,Oc=void 0,Pc=void 0,Qc=void 0,fd=void 0,Xa=void 0,gd=void 0,yd=Zb.vertices,zd=Zb.colors,Ad=Zb.lineDistances,Id=yd.length,Jd=zd.length,Kd=Ad.length,hd=Zb.__vertexArray,id=Zb.__colorArray,Bd=Zb.__lineDistanceArray,Ld=Zb.colorsNeedUpdate,Md=Zb.lineDistancesNeedUpdate, td=Zb.__webglCustomAttributesList,jd=void 0,Cd=void 0,Cb=void 0,Dc=void 0,Nb=void 0,Sa=void 0;if(Zb.verticesNeedUpdate){for(Oc=0;Oc<Id;Oc++)fd=yd[Oc],Xa=3*Oc,hd[Xa]=fd.x,hd[Xa+1]=fd.y,hd[Xa+2]=fd.z;k.bindBuffer(k.ARRAY_BUFFER,Zb.__webglVertexBuffer);k.bufferData(k.ARRAY_BUFFER,hd,ed)}if(Ld){for(Pc=0;Pc<Jd;Pc++)gd=zd[Pc],Xa=3*Pc,id[Xa]=gd.r,id[Xa+1]=gd.g,id[Xa+2]=gd.b;k.bindBuffer(k.ARRAY_BUFFER,Zb.__webglColorBuffer);k.bufferData(k.ARRAY_BUFFER,id,ed)}if(Md){for(Qc=0;Qc<Kd;Qc++)Bd[Qc]=Ad[Qc];k.bindBuffer(k.ARRAY_BUFFER, Zb.__webglLineDistanceBuffer);k.bufferData(k.ARRAY_BUFFER,Bd,ed)}if(td){jd=0;for(Cd=td.length;jd<Cd;jd++)if(Sa=td[jd],Sa.needsUpdate&&(void 0===Sa.boundTo||"vertices"===Sa.boundTo)){Xa=0;Dc=Sa.value.length;if(1===Sa.size)for(Cb=0;Cb<Dc;Cb++)Sa.array[Cb]=Sa.value[Cb];else if(2===Sa.size)for(Cb=0;Cb<Dc;Cb++)Nb=Sa.value[Cb],Sa.array[Xa]=Nb.x,Sa.array[Xa+1]=Nb.y,Xa+=2;else if(3===Sa.size)if("c"===Sa.type)for(Cb=0;Cb<Dc;Cb++)Nb=Sa.value[Cb],Sa.array[Xa]=Nb.r,Sa.array[Xa+1]=Nb.g,Sa.array[Xa+2]=Nb.b,Xa+= 3;else for(Cb=0;Cb<Dc;Cb++)Nb=Sa.value[Cb],Sa.array[Xa]=Nb.x,Sa.array[Xa+1]=Nb.y,Sa.array[Xa+2]=Nb.z,Xa+=3;else if(4===Sa.size)for(Cb=0;Cb<Dc;Cb++)Nb=Sa.value[Cb],Sa.array[Xa]=Nb.x,Sa.array[Xa+1]=Nb.y,Sa.array[Xa+2]=Nb.z,Sa.array[Xa+3]=Nb.w,Xa+=4;k.bindBuffer(k.ARRAY_BUFFER,Sa.buffer);k.bufferData(k.ARRAY_BUFFER,Sa.array,ed)}}}Z.verticesNeedUpdate=!1;Z.colorsNeedUpdate=!1;Z.lineDistancesNeedUpdate=!1;ha.attributes&&v(ha)}else if(la instanceof THREE.ParticleSystem)if(Z instanceof THREE.BufferGeometry)(Z.verticesNeedUpdate|| Z.colorsNeedUpdate)&&j(Z,k.DYNAMIC_DRAW,!Z.dynamic),Z.verticesNeedUpdate=!1,Z.colorsNeedUpdate=!1;else{ha=e(la,Z);Ba=ha.attributes&&x(ha);if(Z.verticesNeedUpdate||Z.colorsNeedUpdate||la.sortParticles||Ba){var ic=Z,ud=k.DYNAMIC_DRAW,Rc=la,Ob=void 0,jc=void 0,kc=void 0,fa=void 0,lc=void 0,vc=void 0,kd=ic.vertices,vd=kd.length,wd=ic.colors,Dd=wd.length,Ac=ic.__vertexArray,Bc=ic.__colorArray,oc=ic.__sortArray,Ed=ic.verticesNeedUpdate,Fd=ic.colorsNeedUpdate,pc=ic.__webglCustomAttributesList,$b=void 0, Ec=void 0,va=void 0,ac=void 0,Ma=void 0,ea=void 0;if(Rc.sortParticles){mc.copy(xb);mc.multiplySelf(Rc.matrixWorld);for(Ob=0;Ob<vd;Ob++)kc=kd[Ob],Tb.copy(kc),mc.multiplyVector3(Tb),oc[Ob]=[Tb.z,Ob];oc.sort(p);for(Ob=0;Ob<vd;Ob++)kc=kd[oc[Ob][1]],fa=3*Ob,Ac[fa]=kc.x,Ac[fa+1]=kc.y,Ac[fa+2]=kc.z;for(jc=0;jc<Dd;jc++)fa=3*jc,vc=wd[oc[jc][1]],Bc[fa]=vc.r,Bc[fa+1]=vc.g,Bc[fa+2]=vc.b;if(pc){$b=0;for(Ec=pc.length;$b<Ec;$b++)if(ea=pc[$b],void 0===ea.boundTo||"vertices"===ea.boundTo)if(fa=0,ac=ea.value.length, 1===ea.size)for(va=0;va<ac;va++)lc=oc[va][1],ea.array[va]=ea.value[lc];else if(2===ea.size)for(va=0;va<ac;va++)lc=oc[va][1],Ma=ea.value[lc],ea.array[fa]=Ma.x,ea.array[fa+1]=Ma.y,fa+=2;else if(3===ea.size)if("c"===ea.type)for(va=0;va<ac;va++)lc=oc[va][1],Ma=ea.value[lc],ea.array[fa]=Ma.r,ea.array[fa+1]=Ma.g,ea.array[fa+2]=Ma.b,fa+=3;else for(va=0;va<ac;va++)lc=oc[va][1],Ma=ea.value[lc],ea.array[fa]=Ma.x,ea.array[fa+1]=Ma.y,ea.array[fa+2]=Ma.z,fa+=3;else if(4===ea.size)for(va=0;va<ac;va++)lc=oc[va][1], Ma=ea.value[lc],ea.array[fa]=Ma.x,ea.array[fa+1]=Ma.y,ea.array[fa+2]=Ma.z,ea.array[fa+3]=Ma.w,fa+=4}}else{if(Ed)for(Ob=0;Ob<vd;Ob++)kc=kd[Ob],fa=3*Ob,Ac[fa]=kc.x,Ac[fa+1]=kc.y,Ac[fa+2]=kc.z;if(Fd)for(jc=0;jc<Dd;jc++)vc=wd[jc],fa=3*jc,Bc[fa]=vc.r,Bc[fa+1]=vc.g,Bc[fa+2]=vc.b;if(pc){$b=0;for(Ec=pc.length;$b<Ec;$b++)if(ea=pc[$b],ea.needsUpdate&&(void 0===ea.boundTo||"vertices"===ea.boundTo))if(ac=ea.value.length,fa=0,1===ea.size)for(va=0;va<ac;va++)ea.array[va]=ea.value[va];else if(2===ea.size)for(va= 0;va<ac;va++)Ma=ea.value[va],ea.array[fa]=Ma.x,ea.array[fa+1]=Ma.y,fa+=2;else if(3===ea.size)if("c"===ea.type)for(va=0;va<ac;va++)Ma=ea.value[va],ea.array[fa]=Ma.r,ea.array[fa+1]=Ma.g,ea.array[fa+2]=Ma.b,fa+=3;else for(va=0;va<ac;va++)Ma=ea.value[va],ea.array[fa]=Ma.x,ea.array[fa+1]=Ma.y,ea.array[fa+2]=Ma.z,fa+=3;else if(4===ea.size)for(va=0;va<ac;va++)Ma=ea.value[va],ea.array[fa]=Ma.x,ea.array[fa+1]=Ma.y,ea.array[fa+2]=Ma.z,ea.array[fa+3]=Ma.w,fa+=4}}if(Ed||Rc.sortParticles)k.bindBuffer(k.ARRAY_BUFFER, ic.__webglVertexBuffer),k.bufferData(k.ARRAY_BUFFER,Ac,ud);if(Fd||Rc.sortParticles)k.bindBuffer(k.ARRAY_BUFFER,ic.__webglColorBuffer),k.bufferData(k.ARRAY_BUFFER,Bc,ud);if(pc){$b=0;for(Ec=pc.length;$b<Ec;$b++)if(ea=pc[$b],ea.needsUpdate||Rc.sortParticles)k.bindBuffer(k.ARRAY_BUFFER,ea.buffer),k.bufferData(k.ARRAY_BUFFER,ea.array,ud)}}Z.verticesNeedUpdate=!1;Z.colorsNeedUpdate=!1;ha.attributes&&v(ha)}}};this.initMaterial=function(a,b,c,d){var e,f,g,j,h,l;a.addEventListener("dispose",Vc);var m,p,n, q,r;a instanceof THREE.MeshDepthMaterial?r="depth":a instanceof THREE.MeshNormalMaterial?r="normal":a instanceof THREE.MeshBasicMaterial?r="basic":a instanceof THREE.MeshLambertMaterial?r="lambert":a instanceof THREE.MeshPhongMaterial?r="phong":a instanceof THREE.LineBasicMaterial?r="basic":a instanceof THREE.LineDashedMaterial?r="dashed":a instanceof THREE.ParticleBasicMaterial&&(r="particle_basic");if(r){var t=THREE.ShaderLib[r];a.uniforms=THREE.UniformsUtils.clone(t.uniforms);a.vertexShader=t.vertexShader; a.fragmentShader=t.fragmentShader}var s,u,x;e=h=f=g=u=x=t=0;for(j=b.length;e<j;e++)s=b[e],s.onlyShadow||(s instanceof THREE.DirectionalLight&&h++,s instanceof THREE.PointLight&&f++,s instanceof THREE.SpotLight&&g++,s instanceof THREE.HemisphereLight&&u++,s instanceof THREE.AreaLight&&(x++,s.texture&&t++));e=h;j=u;h=x;l=t;t=s=0;for(x=b.length;t<x;t++)u=b[t],u.castShadow&&(u instanceof THREE.SpotLight&&s++,u instanceof THREE.DirectionalLight&&!u.shadowCascade&&s++);q=s;eb&&d&&d.useVertexTexture?n=1024: (b=k.getParameter(k.MAX_VERTEX_UNIFORM_VECTORS),b=Math.floor((b-20)/4),void 0!==d&&d instanceof THREE.SkinnedMesh&&(b=Math.min(d.bones.length,b),b<d.bones.length&&console.warn("WebGLRenderer: too many bones - "+d.bones.length+", this GPU supports just "+b+" (try OpenGL instead of ANGLE)")),n=b);a:{u=a.fragmentShader;x=a.vertexShader;t=a.uniforms;b=a.attributes;s=a.defines;c={map:!!a.map,envMap:!!a.envMap,lightMap:!!a.lightMap,bumpMap:!!a.bumpMap,normalMap:!!a.normalMap,specularMap:!!a.specularMap, vertexColors:a.vertexColors,fog:c,useFog:a.fog,fogExp:c instanceof THREE.FogExp2,sizeAttenuation:a.sizeAttenuation,skinning:a.skinning,maxBones:n,useVertexTexture:eb&&d&&d.useVertexTexture,boneTextureWidth:d&&d.boneTextureWidth,boneTextureHeight:d&&d.boneTextureHeight,morphTargets:a.morphTargets,morphNormals:a.morphNormals,maxMorphTargets:this.maxMorphTargets,maxMorphNormals:this.maxMorphNormals,maxDirLights:e,maxPointLights:f,maxSpotLights:g,maxHemiLights:j,maxAreaLights:h,areaTextures:0<l,maxShadows:q, shadowMapEnabled:this.shadowMapEnabled&&d.receiveShadow,shadowMapType:this.shadowMapType,shadowMapDebug:this.shadowMapDebug,shadowMapCascade:this.shadowMapCascade,alphaTest:a.alphaTest,metal:a.metal,perPixel:a.perPixel,wrapAround:a.wrapAround,doubleSided:a.side===THREE.DoubleSide,flipSided:a.side===THREE.BackSide};var v,A,z;d=[];r?d.push(r):(d.push(u),d.push(x));for(A in s)d.push(A),d.push(s[A]);for(v in c)d.push(v),d.push(c[v]);r=d.join();v=0;for(A=ia.length;v<A;v++)if(d=ia[v],d.code===r){d.usedTimes++; p=d.program;break a}v="SHADOWMAP_TYPE_BASIC";c.shadowMapType===THREE.PCFShadowMap?v="SHADOWMAP_TYPE_PCF":c.shadowMapType===THREE.PCFSoftShadowMap&&(v="SHADOWMAP_TYPE_PCF_SOFT");A=[];for(z in s)d=s[z],!1!==d&&(d="#define "+z+" "+d,A.push(d));d=A.join("\n");z=k.createProgram();A=["precision "+T+" float;",d,$?"#define VERTEX_TEXTURES":"",I.gammaInput?"#define GAMMA_INPUT":"",I.gammaOutput?"#define GAMMA_OUTPUT":"",I.physicallyBasedShading?"#define PHYSICALLY_BASED_SHADING":"","#define MAX_DIR_LIGHTS "+ c.maxDirLights,"#define MAX_POINT_LIGHTS "+c.maxPointLights,"#define MAX_SPOT_LIGHTS "+c.maxSpotLights,"#define MAX_HEMI_LIGHTS "+c.maxHemiLights,"#define MAX_AREA_LIGHTS "+c.maxAreaLights,c.areaTextures?"#define AREA_TEXTURE":"","#define MAX_SHADOWS "+c.maxShadows,"#define MAX_BONES "+c.maxBones,c.alphaTest?"#define ALPHATEST "+c.alphaTest:"",c.map?"#define USE_MAP":"",c.envMap?"#define USE_ENVMAP":"",c.lightMap?"#define USE_LIGHTMAP":"",c.bumpMap?"#define USE_BUMPMAP":"",c.normalMap?"#define USE_NORMALMAP": "",c.specularMap?"#define USE_SPECULARMAP":"",c.vertexColors?"#define USE_COLOR":"",c.skinning?"#define USE_SKINNING":"",c.useVertexTexture?"#define BONE_TEXTURE":"",c.boneTextureWidth?"#define N_BONE_PIXEL_X "+c.boneTextureWidth.toFixed(1):"",c.boneTextureHeight?"#define N_BONE_PIXEL_Y "+c.boneTextureHeight.toFixed(1):"",c.morphTargets?"#define USE_MORPHTARGETS":"",c.morphNormals?"#define USE_MORPHNORMALS":"",c.perPixel?"#define PHONG_PER_PIXEL":"",c.wrapAround?"#define WRAP_AROUND":"",c.doubleSided? "#define DOUBLE_SIDED":"",c.flipSided?"#define FLIP_SIDED":"",c.shadowMapEnabled?"#define USE_SHADOWMAP":"",c.shadowMapEnabled?"#define "+v:"",c.shadowMapDebug?"#define SHADOWMAP_DEBUG":"",c.shadowMapCascade?"#define SHADOWMAP_CASCADE":"",c.sizeAttenuation?"#define USE_SIZEATTENUATION":"","uniform mat4 modelMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 cameraPosition;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec2 uv;\nattribute vec2 uv2;\n#ifdef USE_COLOR\nattribute vec3 color;\n#endif\n#ifdef USE_MORPHTARGETS\nattribute vec3 morphTarget0;\nattribute vec3 morphTarget1;\nattribute vec3 morphTarget2;\nattribute vec3 morphTarget3;\n#ifdef USE_MORPHNORMALS\nattribute vec3 morphNormal0;\nattribute vec3 morphNormal1;\nattribute vec3 morphNormal2;\nattribute vec3 morphNormal3;\n#else\nattribute vec3 morphTarget4;\nattribute vec3 morphTarget5;\nattribute vec3 morphTarget6;\nattribute vec3 morphTarget7;\n#endif\n#endif\n#ifdef USE_SKINNING\nattribute vec4 skinIndex;\nattribute vec4 skinWeight;\n#endif\n"].join("\n"); v=["precision "+T+" float;",c.bumpMap||c.normalMap?"#extension GL_OES_standard_derivatives : enable":"",d,"#define MAX_DIR_LIGHTS "+c.maxDirLights,"#define MAX_POINT_LIGHTS "+c.maxPointLights,"#define MAX_SPOT_LIGHTS "+c.maxSpotLights,"#define MAX_HEMI_LIGHTS "+c.maxHemiLights,"#define MAX_AREA_LIGHTS "+c.maxAreaLights,c.areaTextures?"#define AREA_TEXTURE":"","#define MAX_SHADOWS "+c.maxShadows,c.alphaTest?"#define ALPHATEST "+c.alphaTest:"",I.gammaInput?"#define GAMMA_INPUT":"",I.gammaOutput?"#define GAMMA_OUTPUT": "",I.physicallyBasedShading?"#define PHYSICALLY_BASED_SHADING":"",c.useFog&&c.fog?"#define USE_FOG":"",c.useFog&&c.fogExp?"#define FOG_EXP2":"",c.map?"#define USE_MAP":"",c.envMap?"#define USE_ENVMAP":"",c.lightMap?"#define USE_LIGHTMAP":"",c.bumpMap?"#define USE_BUMPMAP":"",c.normalMap?"#define USE_NORMALMAP":"",c.specularMap?"#define USE_SPECULARMAP":"",c.vertexColors?"#define USE_COLOR":"",c.metal?"#define METAL":"",c.perPixel?"#define PHONG_PER_PIXEL":"",c.wrapAround?"#define WRAP_AROUND":"", c.doubleSided?"#define DOUBLE_SIDED":"",c.flipSided?"#define FLIP_SIDED":"",c.shadowMapEnabled?"#define USE_SHADOWMAP":"",c.shadowMapEnabled?"#define "+v:"",c.shadowMapDebug?"#define SHADOWMAP_DEBUG":"",c.shadowMapCascade?"#define SHADOWMAP_CASCADE":"","uniform mat4 viewMatrix;\nuniform vec3 cameraPosition;\n"].join("\n");v=X("fragment",v+u);A=X("vertex",A+x);k.attachShader(z,A);k.attachShader(z,v);k.linkProgram(z);k.getProgramParameter(z,k.LINK_STATUS)||console.error("Could not initialise shader\nVALIDATE_STATUS: "+ k.getProgramParameter(z,k.VALIDATE_STATUS)+", gl error ["+k.getError()+"]");k.deleteShader(v);k.deleteShader(A);z.uniforms={};z.attributes={};var B;v="viewMatrix modelViewMatrix projectionMatrix normalMatrix modelMatrix cameraPosition morphTargetInfluences".split(" ");c.useVertexTexture?v.push("boneTexture"):v.push("boneGlobalMatrices");for(B in t)v.push(B);B=v;v=0;for(A=B.length;v<A;v++)d=B[v],z.uniforms[d]=k.getUniformLocation(z,d);v="position normal uv uv2 tangent color skinIndex skinWeight lineDistance".split(" "); for(B=0;B<c.maxMorphTargets;B++)v.push("morphTarget"+B);for(B=0;B<c.maxMorphNormals;B++)v.push("morphNormal"+B);for(p in b)v.push(p);p=v;B=0;for(v=p.length;B<v;B++)b=p[B],z.attributes[b]=k.getAttribLocation(z,b);z.id=oa++;ia.push({program:z,code:r,usedTimes:1});I.info.memory.programs=ia.length;p=z}a.program=p;B=a.program.attributes;if(a.morphTargets){a.numSupportedMorphTargets=0;v="morphTarget";for(p=0;p<this.maxMorphTargets;p++)z=v+p,0<=B[z]&&a.numSupportedMorphTargets++}if(a.morphNormals){a.numSupportedMorphNormals= 0;v="morphNormal";for(p=0;p<this.maxMorphNormals;p++)z=v+p,0<=B[z]&&a.numSupportedMorphNormals++}a.uniformsList=[];for(m in a.uniforms)a.uniformsList.push([a.uniforms[m],m])};this.setFaceCulling=function(a,b){a===THREE.CullFaceNone?k.disable(k.CULL_FACE):(b===THREE.FrontFaceDirectionCW?k.frontFace(k.CW):k.frontFace(k.CCW),a===THREE.CullFaceBack?k.cullFace(k.BACK):a===THREE.CullFaceFront?k.cullFace(k.FRONT):k.cullFace(k.FRONT_AND_BACK),k.enable(k.CULL_FACE))};this.setMaterialFaces=function(a){var b= a.side===THREE.DoubleSide;a=a.side===THREE.BackSide;za!==b&&(b?k.disable(k.CULL_FACE):k.enable(k.CULL_FACE),za=b);sa!==a&&(a?k.frontFace(k.CW):k.frontFace(k.CCW),sa=a)};this.setDepthTest=function(a){qb!==a&&(a?k.enable(k.DEPTH_TEST):k.disable(k.DEPTH_TEST),qb=a)};this.setDepthWrite=function(a){kb!==a&&(k.depthMask(a),kb=a)};this.setBlending=function(a,b,c,d){a!==Ea&&(a===THREE.NoBlending?k.disable(k.BLEND):a===THREE.AdditiveBlending?(k.enable(k.BLEND),k.blendEquation(k.FUNC_ADD),k.blendFunc(k.SRC_ALPHA, k.ONE)):a===THREE.SubtractiveBlending?(k.enable(k.BLEND),k.blendEquation(k.FUNC_ADD),k.blendFunc(k.ZERO,k.ONE_MINUS_SRC_COLOR)):a===THREE.MultiplyBlending?(k.enable(k.BLEND),k.blendEquation(k.FUNC_ADD),k.blendFunc(k.ZERO,k.SRC_COLOR)):a===THREE.CustomBlending?k.enable(k.BLEND):(k.enable(k.BLEND),k.blendEquationSeparate(k.FUNC_ADD,k.FUNC_ADD),k.blendFuncSeparate(k.SRC_ALPHA,k.ONE_MINUS_SRC_ALPHA,k.ONE,k.ONE_MINUS_SRC_ALPHA)),Ea=a);if(a===THREE.CustomBlending){if(b!==ub&&(k.blendEquation(K(b)),ub=b), c!==Fa||d!==jb)k.blendFunc(K(c),K(d)),Fa=c,jb=d}else jb=Fa=ub=null};this.setTexture=function(a,b){if(a.needsUpdate){a.__webglInit||(a.__webglInit=!0,a.addEventListener("dispose",Tc),a.__webglTexture=k.createTexture(),I.info.memory.textures++);k.activeTexture(k.TEXTURE0+b);k.bindTexture(k.TEXTURE_2D,a.__webglTexture);k.pixelStorei(k.UNPACK_FLIP_Y_WEBGL,a.flipY);k.pixelStorei(k.UNPACK_PREMULTIPLY_ALPHA_WEBGL,a.premultiplyAlpha);k.pixelStorei(k.UNPACK_ALIGNMENT,a.unpackAlignment);var c=a.image,d=0=== (c.width&c.width-1)&&0===(c.height&c.height-1),e=K(a.format),f=K(a.type);G(k.TEXTURE_2D,a,d);var g=a.mipmaps;if(a instanceof THREE.DataTexture)if(0<g.length&&d){for(var j=0,h=g.length;j<h;j++)c=g[j],k.texImage2D(k.TEXTURE_2D,j,e,c.width,c.height,0,e,f,c.data);a.generateMipmaps=!1}else k.texImage2D(k.TEXTURE_2D,0,e,c.width,c.height,0,e,f,c.data);else if(a instanceof THREE.CompressedTexture){j=0;for(h=g.length;j<h;j++)c=g[j],k.compressedTexImage2D(k.TEXTURE_2D,j,e,c.width,c.height,0,c.data)}else if(0< g.length&&d){j=0;for(h=g.length;j<h;j++)c=g[j],k.texImage2D(k.TEXTURE_2D,j,e,e,f,c);a.generateMipmaps=!1}else k.texImage2D(k.TEXTURE_2D,0,e,e,f,a.image);a.generateMipmaps&&d&&k.generateMipmap(k.TEXTURE_2D);a.needsUpdate=!1;if(a.onUpdate)a.onUpdate()}else k.activeTexture(k.TEXTURE0+b),k.bindTexture(k.TEXTURE_2D,a.__webglTexture)};this.setRenderTarget=function(a){var b=a instanceof THREE.WebGLRenderTargetCube;if(a&&!a.__webglFramebuffer){void 0===a.depthBuffer&&(a.depthBuffer=!0);void 0===a.stencilBuffer&& (a.stencilBuffer=!0);a.addEventListener("dispose",Uc);a.__webglTexture=k.createTexture();I.info.memory.textures++;var c=0===(a.width&a.width-1)&&0===(a.height&a.height-1),d=K(a.format),e=K(a.type);if(b){a.__webglFramebuffer=[];a.__webglRenderbuffer=[];k.bindTexture(k.TEXTURE_CUBE_MAP,a.__webglTexture);G(k.TEXTURE_CUBE_MAP,a,c);for(var f=0;6>f;f++){a.__webglFramebuffer[f]=k.createFramebuffer();a.__webglRenderbuffer[f]=k.createRenderbuffer();k.texImage2D(k.TEXTURE_CUBE_MAP_POSITIVE_X+f,0,d,a.width, a.height,0,d,e,null);var g=a,j=k.TEXTURE_CUBE_MAP_POSITIVE_X+f;k.bindFramebuffer(k.FRAMEBUFFER,a.__webglFramebuffer[f]);k.framebufferTexture2D(k.FRAMEBUFFER,k.COLOR_ATTACHMENT0,j,g.__webglTexture,0);S(a.__webglRenderbuffer[f],a)}c&&k.generateMipmap(k.TEXTURE_CUBE_MAP)}else a.__webglFramebuffer=k.createFramebuffer(),a.__webglRenderbuffer=a.shareDepthFrom?a.shareDepthFrom.__webglRenderbuffer:k.createRenderbuffer(),k.bindTexture(k.TEXTURE_2D,a.__webglTexture),G(k.TEXTURE_2D,a,c),k.texImage2D(k.TEXTURE_2D, 0,d,a.width,a.height,0,d,e,null),d=k.TEXTURE_2D,k.bindFramebuffer(k.FRAMEBUFFER,a.__webglFramebuffer),k.framebufferTexture2D(k.FRAMEBUFFER,k.COLOR_ATTACHMENT0,d,a.__webglTexture,0),a.shareDepthFrom?a.depthBuffer&&!a.stencilBuffer?k.framebufferRenderbuffer(k.FRAMEBUFFER,k.DEPTH_ATTACHMENT,k.RENDERBUFFER,a.__webglRenderbuffer):a.depthBuffer&&a.stencilBuffer&&k.framebufferRenderbuffer(k.FRAMEBUFFER,k.DEPTH_STENCIL_ATTACHMENT,k.RENDERBUFFER,a.__webglRenderbuffer):S(a.__webglRenderbuffer,a),c&&k.generateMipmap(k.TEXTURE_2D); b?k.bindTexture(k.TEXTURE_CUBE_MAP,null):k.bindTexture(k.TEXTURE_2D,null);k.bindRenderbuffer(k.RENDERBUFFER,null);k.bindFramebuffer(k.FRAMEBUFFER,null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,c=a.width,a=a.height,e=d=0):(b=null,c=cb,a=Db,d=bc,e=ta);b!==ua&&(k.bindFramebuffer(k.FRAMEBUFFER,b),k.viewport(d,e,c,a),ua=b);db=c;Jb=a};this.shadowMapPlugin=new THREE.ShadowMapPlugin;this.addPrePlugin(this.shadowMapPlugin);this.addPostPlugin(new THREE.SpritePlugin);this.addPostPlugin(new THREE.LensFlarePlugin)};THREE.WebGLRenderTarget=function(a,b,c){THREE.EventDispatcher.call(this);this.width=a;this.height=b;c=c||{};this.wrapS=void 0!==c.wrapS?c.wrapS:THREE.ClampToEdgeWrapping;this.wrapT=void 0!==c.wrapT?c.wrapT:THREE.ClampToEdgeWrapping;this.magFilter=void 0!==c.magFilter?c.magFilter:THREE.LinearFilter;this.minFilter=void 0!==c.minFilter?c.minFilter:THREE.LinearMipMapLinearFilter;this.anisotropy=void 0!==c.anisotropy?c.anisotropy:1;this.offset=new THREE.Vector2(0,0);this.repeat=new THREE.Vector2(1,1); this.format=void 0!==c.format?c.format:THREE.RGBAFormat;this.type=void 0!==c.type?c.type:THREE.UnsignedByteType;this.depthBuffer=void 0!==c.depthBuffer?c.depthBuffer:!0;this.stencilBuffer=void 0!==c.stencilBuffer?c.stencilBuffer:!0;this.generateMipmaps=!0;this.shareDepthFrom=null}; THREE.WebGLRenderTarget.prototype.clone=function(){var a=new THREE.WebGLRenderTarget(this.width,this.height);a.wrapS=this.wrapS;a.wrapT=this.wrapT;a.magFilter=this.magFilter;a.minFilter=this.minFilter;a.anisotropy=this.anisotropy;a.offset.copy(this.offset);a.repeat.copy(this.repeat);a.format=this.format;a.type=this.type;a.depthBuffer=this.depthBuffer;a.stencilBuffer=this.stencilBuffer;a.generateMipmaps=this.generateMipmaps;a.shareDepthFrom=this.shareDepthFrom;return a}; THREE.WebGLRenderTarget.prototype.dispose=function(){this.dispatchEvent({type:"dispose"})};THREE.WebGLRenderTargetCube=function(a,b,c){THREE.WebGLRenderTarget.call(this,a,b,c);this.activeCubeFace=0};THREE.WebGLRenderTargetCube.prototype=Object.create(THREE.WebGLRenderTarget.prototype);THREE.RenderableVertex=function(){this.positionWorld=new THREE.Vector3;this.positionScreen=new THREE.Vector4;this.visible=!0};THREE.RenderableVertex.prototype.copy=function(a){this.positionWorld.copy(a.positionWorld);this.positionScreen.copy(a.positionScreen)};THREE.RenderableFace3=function(){this.v1=new THREE.RenderableVertex;this.v2=new THREE.RenderableVertex;this.v3=new THREE.RenderableVertex;this.centroidModel=new THREE.Vector3;this.normalModel=new THREE.Vector3;this.normalModelView=new THREE.Vector3;this.vertexNormalsLength=0;this.vertexNormalsModel=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];this.vertexNormalsModelView=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];this.material=this.color=null;this.uvs=[[]];this.z=null};THREE.RenderableFace4=function(){this.v1=new THREE.RenderableVertex;this.v2=new THREE.RenderableVertex;this.v3=new THREE.RenderableVertex;this.v4=new THREE.RenderableVertex;this.centroidModel=new THREE.Vector3;this.normalModel=new THREE.Vector3;this.normalModelView=new THREE.Vector3;this.vertexNormalsLength=0;this.vertexNormalsModel=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];this.vertexNormalsModelView=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3]; this.material=this.color=null;this.uvs=[[]];this.z=null};THREE.RenderableObject=function(){this.z=this.object=null};THREE.RenderableParticle=function(){this.rotation=this.z=this.y=this.x=this.object=null;this.scale=new THREE.Vector2;this.material=null};THREE.RenderableLine=function(){this.z=null;this.v1=new THREE.RenderableVertex;this.v2=new THREE.RenderableVertex;this.material=null};THREE.ColorUtils={adjustHSV:function(a,b,c,d){var e=THREE.ColorUtils.__hsv;a.getHSV(e);e.h=THREE.Math.clamp(e.h+b,0,1);e.s=THREE.Math.clamp(e.s+c,0,1);e.v=THREE.Math.clamp(e.v+d,0,1);a.setHSV(e.h,e.s,e.v)}};THREE.ColorUtils.__hsv={h:0,s:0,v:0};THREE.GeometryUtils={merge:function(a,b){var c,d,e=a.vertices.length,f=b instanceof THREE.Mesh?b.geometry:b,g=a.vertices,h=f.vertices,j=a.faces,l=f.faces,m=a.faceVertexUvs[0],f=f.faceVertexUvs[0];b instanceof THREE.Mesh&&(b.matrixAutoUpdate&&b.updateMatrix(),c=b.matrix,d=new THREE.Matrix4,d.extractRotation(c,b.scale));for(var q=0,p=h.length;q<p;q++){var t=h[q].clone();c&&c.multiplyVector3(t);g.push(t)}q=0;for(p=l.length;q<p;q++){var t=l[q],r,n,s=t.vertexNormals,x=t.vertexColors;t instanceof THREE.Face3? r=new THREE.Face3(t.a+e,t.b+e,t.c+e):t instanceof THREE.Face4&&(r=new THREE.Face4(t.a+e,t.b+e,t.c+e,t.d+e));r.normal.copy(t.normal);d&&d.multiplyVector3(r.normal);g=0;for(h=s.length;g<h;g++)n=s[g].clone(),d&&d.multiplyVector3(n),r.vertexNormals.push(n);r.color.copy(t.color);g=0;for(h=x.length;g<h;g++)n=x[g],r.vertexColors.push(n.clone());r.materialIndex=t.materialIndex;r.centroid.copy(t.centroid);c&&c.multiplyVector3(r.centroid);j.push(r)}q=0;for(p=f.length;q<p;q++){c=f[q];d=[];g=0;for(h=c.length;g< h;g++)d.push(new THREE.Vector2(c[g].x,c[g].y));m.push(d)}},removeMaterials:function(a,b){for(var c={},d=0,e=b.length;d<e;d++)c[b[d]]=!0;for(var f,g=[],d=0,e=a.faces.length;d<e;d++)f=a.faces[d],f.materialIndex in c||g.push(f);a.faces=g},randomPointInTriangle:function(a,b,c){var d,e,f,g=new THREE.Vector3,h=THREE.GeometryUtils.__v1;d=THREE.GeometryUtils.random();e=THREE.GeometryUtils.random();1<d+e&&(d=1-d,e=1-e);f=1-d-e;g.copy(a);g.multiplyScalar(d);h.copy(b);h.multiplyScalar(e);g.addSelf(h);h.copy(c); h.multiplyScalar(f);g.addSelf(h);return g},randomPointInFace:function(a,b,c){var d,e,f;if(a instanceof THREE.Face3)return d=b.vertices[a.a],e=b.vertices[a.b],f=b.vertices[a.c],THREE.GeometryUtils.randomPointInTriangle(d,e,f);if(a instanceof THREE.Face4){d=b.vertices[a.a];e=b.vertices[a.b];f=b.vertices[a.c];b=b.vertices[a.d];var g;c?a._area1&&a._area2?(c=a._area1,g=a._area2):(c=THREE.GeometryUtils.triangleArea(d,e,b),g=THREE.GeometryUtils.triangleArea(e,f,b),a._area1=c,a._area2=g):(c=THREE.GeometryUtils.triangleArea(d, e,b),g=THREE.GeometryUtils.triangleArea(e,f,b));return THREE.GeometryUtils.random()*(c+g)<c?THREE.GeometryUtils.randomPointInTriangle(d,e,b):THREE.GeometryUtils.randomPointInTriangle(e,f,b)}},randomPointsInGeometry:function(a,b){function c(a){function b(c,d){if(d<c)return c;var e=c+Math.floor((d-c)/2);return l[e]>a?b(c,e-1):l[e]<a?b(e+1,d):e}return b(0,l.length-1)}var d,e,f=a.faces,g=a.vertices,h=f.length,j=0,l=[],m,q,p,t;for(e=0;e<h;e++)d=f[e],d instanceof THREE.Face3?(m=g[d.a],q=g[d.b],p=g[d.c], d._area=THREE.GeometryUtils.triangleArea(m,q,p)):d instanceof THREE.Face4&&(m=g[d.a],q=g[d.b],p=g[d.c],t=g[d.d],d._area1=THREE.GeometryUtils.triangleArea(m,q,t),d._area2=THREE.GeometryUtils.triangleArea(q,p,t),d._area=d._area1+d._area2),j+=d._area,l[e]=j;d=[];for(e=0;e<b;e++)g=THREE.GeometryUtils.random()*j,g=c(g),d[e]=THREE.GeometryUtils.randomPointInFace(f[g],a,!0);return d},triangleArea:function(a,b,c){var d=THREE.GeometryUtils.__v1,e=THREE.GeometryUtils.__v2;d.sub(b,a);e.sub(c,a);d.crossSelf(e); return 0.5*d.length()},center:function(a){a.computeBoundingBox();var b=a.boundingBox,c=new THREE.Vector3;c.add(b.min,b.max);c.multiplyScalar(-0.5);a.applyMatrix((new THREE.Matrix4).makeTranslation(c));a.computeBoundingBox();return c},normalizeUVs:function(a){a=a.faceVertexUvs[0];for(var b=0,c=a.length;b<c;b++)for(var d=a[b],e=0,f=d.length;e<f;e++)1!==d[e].x&&(d[e].x-=Math.floor(d[e].x)),1!==d[e].y&&(d[e].y-=Math.floor(d[e].y))},flipV:function(a){a=a.faceVertexUvs[0];for(var b=0,c=a.length;b<c;b++)for(var d= a[b],e=0,f=d.length;e<f;e++)d[e].y=1-d[e].y},triangulateQuads:function(a){var b,c,d,e,f=[],g=[],h=[];b=0;for(c=a.faceUvs.length;b<c;b++)g[b]=[];b=0;for(c=a.faceVertexUvs.length;b<c;b++)h[b]=[];b=0;for(c=a.faces.length;b<c;b++)if(d=a.faces[b],d instanceof THREE.Face4){e=d.a;var j=d.b,l=d.c,m=d.d,q=new THREE.Face3,p=new THREE.Face3;q.color.copy(d.color);p.color.copy(d.color);q.materialIndex=d.materialIndex;p.materialIndex=d.materialIndex;q.a=e;q.b=j;q.c=m;p.a=j;p.b=l;p.c=m;4===d.vertexColors.length&& (q.vertexColors[0]=d.vertexColors[0].clone(),q.vertexColors[1]=d.vertexColors[1].clone(),q.vertexColors[2]=d.vertexColors[3].clone(),p.vertexColors[0]=d.vertexColors[1].clone(),p.vertexColors[1]=d.vertexColors[2].clone(),p.vertexColors[2]=d.vertexColors[3].clone());f.push(q,p);d=0;for(e=a.faceVertexUvs.length;d<e;d++)a.faceVertexUvs[d].length&&(q=a.faceVertexUvs[d][b],j=q[1],l=q[2],m=q[3],q=[q[0].clone(),j.clone(),m.clone()],j=[j.clone(),l.clone(),m.clone()],h[d].push(q,j));d=0;for(e=a.faceUvs.length;d< e;d++)a.faceUvs[d].length&&(j=a.faceUvs[d][b],g[d].push(j,j))}else{f.push(d);d=0;for(e=a.faceUvs.length;d<e;d++)g[d].push(a.faceUvs[d][b]);d=0;for(e=a.faceVertexUvs.length;d<e;d++)h[d].push(a.faceVertexUvs[d][b])}a.faces=f;a.faceUvs=g;a.faceVertexUvs=h;a.computeCentroids();a.computeFaceNormals();a.computeVertexNormals();a.hasTangents&&a.computeTangents()},explode:function(a){for(var b=[],c=0,d=a.faces.length;c<d;c++){var e=b.length,f=a.faces[c];if(f instanceof THREE.Face4){var g=f.a,h=f.b,j=f.c,g= a.vertices[g],h=a.vertices[h],j=a.vertices[j],l=a.vertices[f.d];b.push(g.clone());b.push(h.clone());b.push(j.clone());b.push(l.clone());f.a=e;f.b=e+1;f.c=e+2;f.d=e+3}else g=f.a,h=f.b,j=f.c,g=a.vertices[g],h=a.vertices[h],j=a.vertices[j],b.push(g.clone()),b.push(h.clone()),b.push(j.clone()),f.a=e,f.b=e+1,f.c=e+2}a.vertices=b;delete a.__tmpVertices},tessellate:function(a,b){var c,d,e,f,g,h,j,l,m,q,p,t,r,n,s,x,v,A,u,L=[],H=[];c=0;for(d=a.faceVertexUvs.length;c<d;c++)H[c]=[];c=0;for(d=a.faces.length;c< d;c++)if(e=a.faces[c],e instanceof THREE.Face3)if(f=e.a,g=e.b,h=e.c,l=a.vertices[f],m=a.vertices[g],q=a.vertices[h],t=l.distanceTo(m),r=m.distanceTo(q),p=l.distanceTo(q),t>b||r>b||p>b){j=a.vertices.length;A=e.clone();u=e.clone();t>=r&&t>=p?(l=l.clone(),l.lerpSelf(m,0.5),A.a=f,A.b=j,A.c=h,u.a=j,u.b=g,u.c=h,3===e.vertexNormals.length&&(f=e.vertexNormals[0].clone(),f.lerpSelf(e.vertexNormals[1],0.5),A.vertexNormals[1].copy(f),u.vertexNormals[0].copy(f)),3===e.vertexColors.length&&(f=e.vertexColors[0].clone(), f.lerpSelf(e.vertexColors[1],0.5),A.vertexColors[1].copy(f),u.vertexColors[0].copy(f)),e=0):r>=t&&r>=p?(l=m.clone(),l.lerpSelf(q,0.5),A.a=f,A.b=g,A.c=j,u.a=j,u.b=h,u.c=f,3===e.vertexNormals.length&&(f=e.vertexNormals[1].clone(),f.lerpSelf(e.vertexNormals[2],0.5),A.vertexNormals[2].copy(f),u.vertexNormals[0].copy(f),u.vertexNormals[1].copy(e.vertexNormals[2]),u.vertexNormals[2].copy(e.vertexNormals[0])),3===e.vertexColors.length&&(f=e.vertexColors[1].clone(),f.lerpSelf(e.vertexColors[2],0.5),A.vertexColors[2].copy(f), u.vertexColors[0].copy(f),u.vertexColors[1].copy(e.vertexColors[2]),u.vertexColors[2].copy(e.vertexColors[0])),e=1):(l=l.clone(),l.lerpSelf(q,0.5),A.a=f,A.b=g,A.c=j,u.a=j,u.b=g,u.c=h,3===e.vertexNormals.length&&(f=e.vertexNormals[0].clone(),f.lerpSelf(e.vertexNormals[2],0.5),A.vertexNormals[2].copy(f),u.vertexNormals[0].copy(f)),3===e.vertexColors.length&&(f=e.vertexColors[0].clone(),f.lerpSelf(e.vertexColors[2],0.5),A.vertexColors[2].copy(f),u.vertexColors[0].copy(f)),e=2);L.push(A,u);a.vertices.push(l); f=0;for(g=a.faceVertexUvs.length;f<g;f++)a.faceVertexUvs[f].length&&(l=a.faceVertexUvs[f][c],u=l[0],h=l[1],A=l[2],0===e?(m=u.clone(),m.lerpSelf(h,0.5),l=[u.clone(),m.clone(),A.clone()],h=[m.clone(),h.clone(),A.clone()]):1===e?(m=h.clone(),m.lerpSelf(A,0.5),l=[u.clone(),h.clone(),m.clone()],h=[m.clone(),A.clone(),u.clone()]):(m=u.clone(),m.lerpSelf(A,0.5),l=[u.clone(),h.clone(),m.clone()],h=[m.clone(),h.clone(),A.clone()]),H[f].push(l,h))}else{L.push(e);f=0;for(g=a.faceVertexUvs.length;f<g;f++)H[f].push(a.faceVertexUvs[f][c])}else if(f= e.a,g=e.b,h=e.c,j=e.d,l=a.vertices[f],m=a.vertices[g],q=a.vertices[h],p=a.vertices[j],t=l.distanceTo(m),r=m.distanceTo(q),n=q.distanceTo(p),s=l.distanceTo(p),t>b||r>b||n>b||s>b){x=a.vertices.length;v=a.vertices.length+1;A=e.clone();u=e.clone();t>=r&&t>=n&&t>=s||n>=r&&n>=t&&n>=s?(t=l.clone(),t.lerpSelf(m,0.5),m=q.clone(),m.lerpSelf(p,0.5),A.a=f,A.b=x,A.c=v,A.d=j,u.a=x,u.b=g,u.c=h,u.d=v,4===e.vertexNormals.length&&(f=e.vertexNormals[0].clone(),f.lerpSelf(e.vertexNormals[1],0.5),g=e.vertexNormals[2].clone(), g.lerpSelf(e.vertexNormals[3],0.5),A.vertexNormals[1].copy(f),A.vertexNormals[2].copy(g),u.vertexNormals[0].copy(f),u.vertexNormals[3].copy(g)),4===e.vertexColors.length&&(f=e.vertexColors[0].clone(),f.lerpSelf(e.vertexColors[1],0.5),g=e.vertexColors[2].clone(),g.lerpSelf(e.vertexColors[3],0.5),A.vertexColors[1].copy(f),A.vertexColors[2].copy(g),u.vertexColors[0].copy(f),u.vertexColors[3].copy(g)),e=0):(t=m.clone(),t.lerpSelf(q,0.5),m=p.clone(),m.lerpSelf(l,0.5),A.a=f,A.b=g,A.c=x,A.d=v,u.a=v,u.b= x,u.c=h,u.d=j,4===e.vertexNormals.length&&(f=e.vertexNormals[1].clone(),f.lerpSelf(e.vertexNormals[2],0.5),g=e.vertexNormals[3].clone(),g.lerpSelf(e.vertexNormals[0],0.5),A.vertexNormals[2].copy(f),A.vertexNormals[3].copy(g),u.vertexNormals[0].copy(g),u.vertexNormals[1].copy(f)),4===e.vertexColors.length&&(f=e.vertexColors[1].clone(),f.lerpSelf(e.vertexColors[2],0.5),g=e.vertexColors[3].clone(),g.lerpSelf(e.vertexColors[0],0.5),A.vertexColors[2].copy(f),A.vertexColors[3].copy(g),u.vertexColors[0].copy(g), u.vertexColors[1].copy(f)),e=1);L.push(A,u);a.vertices.push(t,m);f=0;for(g=a.faceVertexUvs.length;f<g;f++)a.faceVertexUvs[f].length&&(l=a.faceVertexUvs[f][c],u=l[0],h=l[1],A=l[2],l=l[3],0===e?(m=u.clone(),m.lerpSelf(h,0.5),q=A.clone(),q.lerpSelf(l,0.5),u=[u.clone(),m.clone(),q.clone(),l.clone()],h=[m.clone(),h.clone(),A.clone(),q.clone()]):(m=h.clone(),m.lerpSelf(A,0.5),q=l.clone(),q.lerpSelf(u,0.5),u=[u.clone(),h.clone(),m.clone(),q.clone()],h=[q.clone(),m.clone(),A.clone(),l.clone()]),H[f].push(u, h))}else{L.push(e);f=0;for(g=a.faceVertexUvs.length;f<g;f++)H[f].push(a.faceVertexUvs[f][c])}a.faces=L;a.faceVertexUvs=H},setMaterialIndex:function(a,b,c,d){a=a.faces;d=d||a.length-1;for(c=c||0;c<=d;c++)a[c].materialIndex=b}};THREE.GeometryUtils.random=THREE.Math.random16;THREE.GeometryUtils.__v1=new THREE.Vector3;THREE.GeometryUtils.__v2=new THREE.Vector3;THREE.ImageUtils={crossOrigin:"anonymous",loadTexture:function(a,b,c,d){var e=new Image,f=new THREE.Texture(e,b);b=new THREE.ImageLoader;b.addEventListener("load",function(a){f.image=a.content;f.needsUpdate=!0;c&&c(f)});b.addEventListener("error",function(a){d&&d(a.message)});b.crossOrigin=this.crossOrigin;b.load(a,e);f.sourceFile=a;return f},loadCompressedTexture:function(a,b,c,d){var e=new THREE.CompressedTexture;e.mapping=b;var f=new XMLHttpRequest;f.onload=function(){var a=THREE.ImageUtils.parseDDS(f.response, !0);e.format=a.format;e.mipmaps=a.mipmaps;e.image.width=a.width;e.image.height=a.height;e.generateMipmaps=!1;e.needsUpdate=!0;c&&c(e)};f.onerror=d;f.open("GET",a,!0);f.responseType="arraybuffer";f.send(null);return e},loadTextureCube:function(a,b,c,d){var e=[];e.loadCount=0;var f=new THREE.Texture;f.image=e;void 0!==b&&(f.mapping=b);f.flipY=!1;b=0;for(var g=a.length;b<g;++b){var h=new Image;e[b]=h;h.onload=function(){e.loadCount+=1;6===e.loadCount&&(f.needsUpdate=!0,c&&c(f))};h.onerror=d;h.crossOrigin= this.crossOrigin;h.src=a[b]}return f},loadCompressedTextureCube:function(a,b,c,d){var e=[];e.loadCount=0;var f=new THREE.CompressedTexture;f.image=e;void 0!==b&&(f.mapping=b);f.flipY=!1;f.generateMipmaps=!1;b=function(a,b){return function(){var d=THREE.ImageUtils.parseDDS(a.response,!0);b.format=d.format;b.mipmaps=d.mipmaps;b.width=d.width;b.height=d.height;e.loadCount+=1;6===e.loadCount&&(f.format=d.format,f.needsUpdate=!0,c&&c(f))}};if(a instanceof Array)for(var g=0,h=a.length;g<h;++g){var j={}; e[g]=j;var l=new XMLHttpRequest;l.onload=b(l,j);l.onerror=d;j=a[g];l.open("GET",j,!0);l.responseType="arraybuffer";l.send(null)}else l=new XMLHttpRequest,l.onload=function(){var a=THREE.ImageUtils.parseDDS(l.response,!0);if(a.isCubemap){for(var b=a.mipmaps.length/a.mipmapCount,d=0;d<b;d++){e[d]={mipmaps:[]};for(var g=0;g<a.mipmapCount;g++)e[d].mipmaps.push(a.mipmaps[d*a.mipmapCount+g]),e[d].format=a.format,e[d].width=a.width,e[d].height=a.height}f.format=a.format;f.needsUpdate=!0;c&&c(f)}},l.onerror= d,l.open("GET",a,!0),l.responseType="arraybuffer",l.send(null);return f},parseDDS:function(a,b){function c(a){return a.charCodeAt(0)+(a.charCodeAt(1)<<8)+(a.charCodeAt(2)<<16)+(a.charCodeAt(3)<<24)}var d={mipmaps:[],width:0,height:0,format:null,mipmapCount:1},e=c("DXT1"),f=c("DXT3"),g=c("DXT5"),h=new Int32Array(a,0,31);if(542327876!==h[0])return console.error("ImageUtils.parseDDS(): Invalid magic number in DDS header"),d;if(!h[20]&4)return console.error("ImageUtils.parseDDS(): Unsupported format, must contain a FourCC code"), d;var j=h[21];switch(j){case e:e=8;d.format=THREE.RGB_S3TC_DXT1_Format;break;case f:e=16;d.format=THREE.RGBA_S3TC_DXT3_Format;break;case g:e=16;d.format=THREE.RGBA_S3TC_DXT5_Format;break;default:return console.error("ImageUtils.parseDDS(): Unsupported FourCC code: ",String.fromCharCode(j&255,j>>8&255,j>>16&255,j>>24&255)),d}d.mipmapCount=1;h[2]&131072&&!1!==b&&(d.mipmapCount=Math.max(1,h[7]));d.isCubemap=h[28]&512?!0:!1;d.width=h[4];d.height=h[3];for(var h=h[1]+4,f=d.width,g=d.height,j=d.isCubemap? 6:1,l=0;l<j;l++){for(var m=0;m<d.mipmapCount;m++){var q=Math.max(4,f)/4*Math.max(4,g)/4*e,p={data:new Uint8Array(a,h,q),width:f,height:g};d.mipmaps.push(p);h+=q;f=Math.max(0.5*f,1);g=Math.max(0.5*g,1)}f=d.width;g=d.height}return d},getNormalMap:function(a,b){var c=function(a){var b=Math.sqrt(a[0]*a[0]+a[1]*a[1]+a[2]*a[2]);return[a[0]/b,a[1]/b,a[2]/b]};b|=1;var d=a.width,e=a.height,f=document.createElement("canvas");f.width=d;f.height=e;var g=f.getContext("2d");g.drawImage(a,0,0);for(var h=g.getImageData(0, 0,d,e).data,j=g.createImageData(d,e),l=j.data,m=0;m<d;m++)for(var q=0;q<e;q++){var p=0>q-1?0:q-1,t=q+1>e-1?e-1:q+1,r=0>m-1?0:m-1,n=m+1>d-1?d-1:m+1,s=[],x=[0,0,h[4*(q*d+m)]/255*b];s.push([-1,0,h[4*(q*d+r)]/255*b]);s.push([-1,-1,h[4*(p*d+r)]/255*b]);s.push([0,-1,h[4*(p*d+m)]/255*b]);s.push([1,-1,h[4*(p*d+n)]/255*b]);s.push([1,0,h[4*(q*d+n)]/255*b]);s.push([1,1,h[4*(t*d+n)]/255*b]);s.push([0,1,h[4*(t*d+m)]/255*b]);s.push([-1,1,h[4*(t*d+r)]/255*b]);p=[];r=s.length;for(t=0;t<r;t++){var n=s[t],v=s[(t+1)% r],n=[n[0]-x[0],n[1]-x[1],n[2]-x[2]],v=[v[0]-x[0],v[1]-x[1],v[2]-x[2]];p.push(c([n[1]*v[2]-n[2]*v[1],n[2]*v[0]-n[0]*v[2],n[0]*v[1]-n[1]*v[0]]))}s=[0,0,0];for(t=0;t<p.length;t++)s[0]+=p[t][0],s[1]+=p[t][1],s[2]+=p[t][2];s[0]/=p.length;s[1]/=p.length;s[2]/=p.length;x=4*(q*d+m);l[x]=255*((s[0]+1)/2)|0;l[x+1]=255*((s[1]+1)/2)|0;l[x+2]=255*s[2]|0;l[x+3]=255}g.putImageData(j,0,0);return f},generateDataTexture:function(a,b,c){var d=a*b,e=new Uint8Array(3*d),f=Math.floor(255*c.r),g=Math.floor(255*c.g);c= Math.floor(255*c.b);for(var h=0;h<d;h++)e[3*h]=f,e[3*h+1]=g,e[3*h+2]=c;a=new THREE.DataTexture(e,a,b,THREE.RGBFormat);a.needsUpdate=!0;return a}};THREE.SceneUtils={createMultiMaterialObject:function(a,b){for(var c=new THREE.Object3D,d=0,e=b.length;d<e;d++)c.add(new THREE.Mesh(a,b[d]));return c},detach:function(a,b,c){a.applyMatrix(b.matrixWorld);b.remove(a);c.add(a)},attach:function(a,b,c){var d=new THREE.Matrix4;d.getInverse(c.matrixWorld);a.applyMatrix(d);b.remove(a);c.add(a)}};THREE.ShaderUtils={lib:{fresnel:{uniforms:{mRefractionRatio:{type:"f",value:1.02},mFresnelBias:{type:"f",value:0.1},mFresnelPower:{type:"f",value:2},mFresnelScale:{type:"f",value:1},tCube:{type:"t",value:null}},fragmentShader:"uniform samplerCube tCube;\nvarying vec3 vReflect;\nvarying vec3 vRefract[3];\nvarying float vReflectionFactor;\nvoid main() {\nvec4 reflectedColor = textureCube( tCube, vec3( -vReflect.x, vReflect.yz ) );\nvec4 refractedColor = vec4( 1.0 );\nrefractedColor.r = textureCube( tCube, vec3( -vRefract[0].x, vRefract[0].yz ) ).r;\nrefractedColor.g = textureCube( tCube, vec3( -vRefract[1].x, vRefract[1].yz ) ).g;\nrefractedColor.b = textureCube( tCube, vec3( -vRefract[2].x, vRefract[2].yz ) ).b;\ngl_FragColor = mix( refractedColor, reflectedColor, clamp( vReflectionFactor, 0.0, 1.0 ) );\n}", vertexShader:"uniform float mRefractionRatio;\nuniform float mFresnelBias;\nuniform float mFresnelScale;\nuniform float mFresnelPower;\nvarying vec3 vReflect;\nvarying vec3 vRefract[3];\nvarying float vReflectionFactor;\nvoid main() {\nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\nvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\nvec3 worldNormal = normalize( mat3( modelMatrix[0].xyz, modelMatrix[1].xyz, modelMatrix[2].xyz ) * normal );\nvec3 I = worldPosition.xyz - cameraPosition;\nvReflect = reflect( I, worldNormal );\nvRefract[0] = refract( normalize( I ), worldNormal, mRefractionRatio );\nvRefract[1] = refract( normalize( I ), worldNormal, mRefractionRatio * 0.99 );\nvRefract[2] = refract( normalize( I ), worldNormal, mRefractionRatio * 0.98 );\nvReflectionFactor = mFresnelBias + mFresnelScale * pow( 1.0 + dot( normalize( I ), worldNormal ), mFresnelPower );\ngl_Position = projectionMatrix * mvPosition;\n}"}, normal:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.fog,THREE.UniformsLib.lights,THREE.UniformsLib.shadowmap,{enableAO:{type:"i",value:0},enableDiffuse:{type:"i",value:0},enableSpecular:{type:"i",value:0},enableReflection:{type:"i",value:0},enableDisplacement:{type:"i",value:0},tDisplacement:{type:"t",value:null},tDiffuse:{type:"t",value:null},tCube:{type:"t",value:null},tNormal:{type:"t",value:null},tSpecular:{type:"t",value:null},tAO:{type:"t",value:null},uNormalScale:{type:"v2",value:new THREE.Vector2(1, 1)},uDisplacementBias:{type:"f",value:0},uDisplacementScale:{type:"f",value:1},uDiffuseColor:{type:"c",value:new THREE.Color(16777215)},uSpecularColor:{type:"c",value:new THREE.Color(1118481)},uAmbientColor:{type:"c",value:new THREE.Color(16777215)},uShininess:{type:"f",value:30},uOpacity:{type:"f",value:1},useRefract:{type:"i",value:0},uRefractionRatio:{type:"f",value:0.98},uReflectivity:{type:"f",value:0.5},uOffset:{type:"v2",value:new THREE.Vector2(0,0)},uRepeat:{type:"v2",value:new THREE.Vector2(1, 1)},wrapRGB:{type:"v3",value:new THREE.Vector3(1,1,1)}}]),fragmentShader:["uniform vec3 uAmbientColor;\nuniform vec3 uDiffuseColor;\nuniform vec3 uSpecularColor;\nuniform float uShininess;\nuniform float uOpacity;\nuniform bool enableDiffuse;\nuniform bool enableSpecular;\nuniform bool enableAO;\nuniform bool enableReflection;\nuniform sampler2D tDiffuse;\nuniform sampler2D tNormal;\nuniform sampler2D tSpecular;\nuniform sampler2D tAO;\nuniform samplerCube tCube;\nuniform vec2 uNormalScale;\nuniform bool useRefract;\nuniform float uRefractionRatio;\nuniform float uReflectivity;\nvarying vec3 vTangent;\nvarying vec3 vBinormal;\nvarying vec3 vNormal;\nvarying vec2 vUv;\nuniform vec3 ambientLightColor;\n#if MAX_DIR_LIGHTS > 0\nuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\nuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n#endif\n#if MAX_HEMI_LIGHTS > 0\nuniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];\nuniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];\nuniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];\n#endif\n#if MAX_POINT_LIGHTS > 0\nuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\nuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\n#endif\n#if MAX_SPOT_LIGHTS > 0\nuniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];\nuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\nuniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];\nuniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];\nuniform float spotLightExponent[ MAX_SPOT_LIGHTS ];\nuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\n#endif\n#if MAX_AREA_LIGHTS > 0\nuniform vec3 areaLightColor[ MAX_AREA_LIGHTS ];\nuniform vec3 areaLightPosition[ MAX_AREA_LIGHTS ];\nuniform vec3 areaLightNormal[ MAX_AREA_LIGHTS ];\nuniform vec3 areaLightRight[ MAX_AREA_LIGHTS ];\nuniform vec3 areaLightUp[ MAX_AREA_LIGHTS ];\nuniform vec3 areaLightSize[ MAX_AREA_LIGHTS ];\nuniform vec3 areaLightAttenuation[ MAX_AREA_LIGHTS ];\n#ifdef AREA_TEXTURE\nuniform sampler2D areaLightTexture[ MAX_AREA_LIGHTS ];\n#endif\n#endif\n#ifdef WRAP_AROUND\nuniform vec3 wrapRGB;\n#endif\nvarying vec3 vWorldPosition;\nvarying vec3 vViewPosition;", THREE.ShaderChunk.shadowmap_pars_fragment,THREE.ShaderChunk.fog_pars_fragment,THREE.ShaderChunk.area_lights_utils,"void main() {\ngl_FragColor = vec4( vec3( 1.0 ), uOpacity );\nvec3 specularTex = vec3( 1.0 );\nvec3 normalTex = texture2D( tNormal, vUv ).xyz * 2.0 - 1.0;\nnormalTex.xy *= uNormalScale;\nnormalTex = normalize( normalTex );\nif( enableDiffuse ) {\n#ifdef GAMMA_INPUT\nvec4 texelColor = texture2D( tDiffuse, vUv );\ntexelColor.xyz *= texelColor.xyz;\ngl_FragColor = gl_FragColor * texelColor;\n#else\ngl_FragColor = gl_FragColor * texture2D( tDiffuse, vUv );\n#endif\n}\nif( enableAO ) {\n#ifdef GAMMA_INPUT\nvec4 aoColor = texture2D( tAO, vUv );\naoColor.xyz *= aoColor.xyz;\ngl_FragColor.xyz = gl_FragColor.xyz * aoColor.xyz;\n#else\ngl_FragColor.xyz = gl_FragColor.xyz * texture2D( tAO, vUv ).xyz;\n#endif\n}\nif( enableSpecular )\nspecularTex = texture2D( tSpecular, vUv ).xyz;\nmat3 tsb = mat3( normalize( vTangent ), normalize( vBinormal ), normalize( vNormal ) );\nvec3 finalNormal = tsb * normalTex;\n#ifdef FLIP_SIDED\nfinalNormal = -finalNormal;\n#endif\nvec3 normal = normalize( finalNormal );\nvec3 viewPosition = normalize( vViewPosition );\n#if MAX_POINT_LIGHTS > 0\nvec3 pointDiffuse = vec3( 0.0 );\nvec3 pointSpecular = vec3( 0.0 );\nfor ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 pointVector = lPosition.xyz + vViewPosition.xyz;\nfloat pointDistance = 1.0;\nif ( pointLightDistance[ i ] > 0.0 )\npointDistance = 1.0 - min( ( length( pointVector ) / pointLightDistance[ i ] ), 1.0 );\npointVector = normalize( pointVector );\n#ifdef WRAP_AROUND\nfloat pointDiffuseWeightFull = max( dot( normal, pointVector ), 0.0 );\nfloat pointDiffuseWeightHalf = max( 0.5 * dot( normal, pointVector ) + 0.5, 0.0 );\nvec3 pointDiffuseWeight = mix( vec3 ( pointDiffuseWeightFull ), vec3( pointDiffuseWeightHalf ), wrapRGB );\n#else\nfloat pointDiffuseWeight = max( dot( normal, pointVector ), 0.0 );\n#endif\npointDiffuse += pointDistance * pointLightColor[ i ] * uDiffuseColor * pointDiffuseWeight;\nvec3 pointHalfVector = normalize( pointVector + viewPosition );\nfloat pointDotNormalHalf = max( dot( normal, pointHalfVector ), 0.0 );\nfloat pointSpecularWeight = specularTex.r * max( pow( pointDotNormalHalf, uShininess ), 0.0 );\n#ifdef PHYSICALLY_BASED_SHADING\nfloat specularNormalization = ( uShininess + 2.0001 ) / 8.0;\nvec3 schlick = uSpecularColor + vec3( 1.0 - uSpecularColor ) * pow( 1.0 - dot( pointVector, pointHalfVector ), 5.0 );\npointSpecular += schlick * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * pointDistance * specularNormalization;\n#else\npointSpecular += pointDistance * pointLightColor[ i ] * uSpecularColor * pointSpecularWeight * pointDiffuseWeight;\n#endif\n}\n#endif\n#if MAX_SPOT_LIGHTS > 0\nvec3 spotDiffuse = vec3( 0.0 );\nvec3 spotSpecular = vec3( 0.0 );\nfor ( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\nvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\nvec3 spotVector = lPosition.xyz + vViewPosition.xyz;\nfloat spotDistance = 1.0;\nif ( spotLightDistance[ i ] > 0.0 )\nspotDistance = 1.0 - min( ( length( spotVector ) / spotLightDistance[ i ] ), 1.0 );\nspotVector = normalize( spotVector );\nfloat spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - vWorldPosition ) );\nif ( spotEffect > spotLightAngleCos[ i ] ) {\nspotEffect = max( pow( spotEffect, spotLightExponent[ i ] ), 0.0 );\n#ifdef WRAP_AROUND\nfloat spotDiffuseWeightFull = max( dot( normal, spotVector ), 0.0 );\nfloat spotDiffuseWeightHalf = max( 0.5 * dot( normal, spotVector ) + 0.5, 0.0 );\nvec3 spotDiffuseWeight = mix( vec3 ( spotDiffuseWeightFull ), vec3( spotDiffuseWeightHalf ), wrapRGB );\n#else\nfloat spotDiffuseWeight = max( dot( normal, spotVector ), 0.0 );\n#endif\nspotDiffuse += spotDistance * spotLightColor[ i ] * uDiffuseColor * spotDiffuseWeight * spotEffect;\nvec3 spotHalfVector = normalize( spotVector + viewPosition );\nfloat spotDotNormalHalf = max( dot( normal, spotHalfVector ), 0.0 );\nfloat spotSpecularWeight = specularTex.r * max( pow( spotDotNormalHalf, uShininess ), 0.0 );\n#ifdef PHYSICALLY_BASED_SHADING\nfloat specularNormalization = ( uShininess + 2.0001 ) / 8.0;\nvec3 schlick = uSpecularColor + vec3( 1.0 - uSpecularColor ) * pow( 1.0 - dot( spotVector, spotHalfVector ), 5.0 );\nspotSpecular += schlick * spotLightColor[ i ] * spotSpecularWeight * spotDiffuseWeight * spotDistance * specularNormalization * spotEffect;\n#else\nspotSpecular += spotDistance * spotLightColor[ i ] * uSpecularColor * spotSpecularWeight * spotDiffuseWeight * spotEffect;\n#endif\n}\n}\n#endif\n#if MAX_DIR_LIGHTS > 0\nvec3 dirDiffuse = vec3( 0.0 );\nvec3 dirSpecular = vec3( 0.0 );\nfor( int i = 0; i < MAX_DIR_LIGHTS; i++ ) {\nvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\nvec3 dirVector = normalize( lDirection.xyz );\n#ifdef WRAP_AROUND\nfloat directionalLightWeightingFull = max( dot( normal, dirVector ), 0.0 );\nfloat directionalLightWeightingHalf = max( 0.5 * dot( normal, dirVector ) + 0.5, 0.0 );\nvec3 dirDiffuseWeight = mix( vec3( directionalLightWeightingFull ), vec3( directionalLightWeightingHalf ), wrapRGB );\n#else\nfloat dirDiffuseWeight = max( dot( normal, dirVector ), 0.0 );\n#endif\ndirDiffuse += directionalLightColor[ i ] * uDiffuseColor * dirDiffuseWeight;\nvec3 dirHalfVector = normalize( dirVector + viewPosition );\nfloat dirDotNormalHalf = max( dot( normal, dirHalfVector ), 0.0 );\nfloat dirSpecularWeight = specularTex.r * max( pow( dirDotNormalHalf, uShininess ), 0.0 );\n#ifdef PHYSICALLY_BASED_SHADING\nfloat specularNormalization = ( uShininess + 2.0001 ) / 8.0;\nvec3 schlick = uSpecularColor + vec3( 1.0 - uSpecularColor ) * pow( 1.0 - dot( dirVector, dirHalfVector ), 5.0 );\ndirSpecular += schlick * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight * specularNormalization;\n#else\ndirSpecular += directionalLightColor[ i ] * uSpecularColor * dirSpecularWeight * dirDiffuseWeight;\n#endif\n}\n#endif\n#if MAX_HEMI_LIGHTS > 0\nvec3 hemiDiffuse = vec3( 0.0 );\nvec3 hemiSpecular = vec3( 0.0 );\nfor( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {\nvec4 lDirection = viewMatrix * vec4( hemisphereLightDirection[ i ], 0.0 );\nvec3 lVector = normalize( lDirection.xyz );\nfloat dotProduct = dot( normal, lVector );\nfloat hemiDiffuseWeight = 0.5 * dotProduct + 0.5;\nvec3 hemiColor = mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );\nhemiDiffuse += uDiffuseColor * hemiColor;\nvec3 hemiHalfVectorSky = normalize( lVector + viewPosition );\nfloat hemiDotNormalHalfSky = 0.5 * dot( normal, hemiHalfVectorSky ) + 0.5;\nfloat hemiSpecularWeightSky = specularTex.r * max( pow( hemiDotNormalHalfSky, uShininess ), 0.0 );\nvec3 lVectorGround = -lVector;\nvec3 hemiHalfVectorGround = normalize( lVectorGround + viewPosition );\nfloat hemiDotNormalHalfGround = 0.5 * dot( normal, hemiHalfVectorGround ) + 0.5;\nfloat hemiSpecularWeightGround = specularTex.r * max( pow( hemiDotNormalHalfGround, uShininess ), 0.0 );\n#ifdef PHYSICALLY_BASED_SHADING\nfloat dotProductGround = dot( normal, lVectorGround );\nfloat specularNormalization = ( uShininess + 2.0001 ) / 8.0;\nvec3 schlickSky = uSpecularColor + vec3( 1.0 - uSpecularColor ) * pow( 1.0 - dot( lVector, hemiHalfVectorSky ), 5.0 );\nvec3 schlickGround = uSpecularColor + vec3( 1.0 - uSpecularColor ) * pow( 1.0 - dot( lVectorGround, hemiHalfVectorGround ), 5.0 );\nhemiSpecular += hemiColor * specularNormalization * ( schlickSky * hemiSpecularWeightSky * max( dotProduct, 0.0 ) + schlickGround * hemiSpecularWeightGround * max( dotProductGround, 0.0 ) );\n#else\nhemiSpecular += uSpecularColor * hemiColor * ( hemiSpecularWeightSky + hemiSpecularWeightGround ) * hemiDiffuseWeight;\n#endif\n}\n#endif\n#if MAX_AREA_LIGHTS > 0\nvec3 areaDiffuse = vec3( 0.0 );\nvec3 areaSpecular = vec3( 0.0 );\nfor( int i = 0; i < MAX_AREA_LIGHTS; i ++ ) {\nfloat w = areaLightSize[ i ].x;\nfloat h = areaLightSize[ i ].y;\nvec3 vertexPosition = -vViewPosition.xyz;\nvec3 proj = projectOnPlane( vertexPosition, areaLightPosition[ i ], areaLightNormal[ i ] );\nvec3 dir = proj - areaLightPosition[ i ];\nvec2 diagonal = vec2( dot( dir, areaLightRight[ i ] ), dot( dir, areaLightUp[ i ] ) );\nvec2 nearest2D = vec2( clamp( diagonal.x, -w, w ), clamp( diagonal.y, -h, h ) );\nvec3 nearestPointInside = areaLightPosition[ i ] + ( areaLightRight[ i ] * nearest2D.x + areaLightUp[ i ] * nearest2D.y );\nvec3 lightDir = normalize( nearestPointInside - vertexPosition );\nfloat NdotL = max( dot( areaLightNormal[ i ], -lightDir ), 0.0 );\nfloat NdotL2 = max( dot( normal, lightDir ), 0.0 );\nvec3 areaDiffuseWeight = vec3( sqrt( NdotL * NdotL2 ) );\nfloat dist = distance( vertexPosition, nearestPointInside );\nfloat attenuation = calculateAttenuation( dist, areaLightAttenuation[ i ].x, areaLightAttenuation[ i ].y, areaLightAttenuation[ i ].z );\nvec3 areaDiffuseTerm = uDiffuseColor * areaDiffuseWeight * areaLightColor[ i ] * attenuation;\n#ifdef AREA_TEXTURE\nif ( areaLightSize[ i ].z > 0.0 ) {\nfloat d = distance( vertexPosition, nearestPointInside );\nvec2 co = ( diagonal.xy + vec2( w, h ) ) / ( 2.0 * vec2( w, h ) );\nco.y = 1.0 - co.y;\nvec3 ve = vertexPosition - areaLightPosition[ i ];\nvec4 diff = vec4( 0.0 );\nif ( dot( ve, areaLightNormal[ i ] ) < 0.0 ) {\ndiff = vec4( 0.0 );\n} else {\nfloat lod = max( pow( d, 0.1 ), 0.0 ) * 5.0;\nvec4 t00 = texture2D( areaLightTexture[ i ], co, lod );\nvec4 t01 = texture2D( areaLightTexture[ i ], co, lod + 1.0 );\ndiff = mix( t00, t01, 0.5 );\n}\nareaDiffuseTerm *= diff.xyz;\n}\n#endif\nareaDiffuse += areaDiffuseTerm;\nvec3 R = reflect( normalize( -vertexPosition ), normal );\nvec3 E = linePlaneIntersect( vertexPosition, R, areaLightPosition[ i ], areaLightNormal[ i ] );\nfloat specAngle = dot( R, areaLightNormal[ i ] );\nif ( dot( vertexPosition - areaLightPosition[ i ], areaLightNormal[ i ] ) >= 0.0 && specAngle > 0.0 ) {\nvec3 dirSpec = E - areaLightPosition[ i ];\nvec2 dirSpec2D = vec2( dot( dirSpec, areaLightRight[ i ] ), dot( dirSpec, areaLightUp[ i ] ) );\nvec2 nearestSpec2D = vec2( clamp( dirSpec2D.x, -w, w ), clamp( dirSpec2D.y, -h, h ) );\nfloat specFactor = 1.0 - clamp( length( nearestSpec2D - dirSpec2D ) * 0.05 * uShininess, 0.0, 1.0 );\nvec3 areaSpecularWeight = specFactor * specAngle * areaDiffuseWeight;\nvec3 areaSpecularTerm = uSpecularColor * areaSpecularWeight * areaLightColor[ i ] * attenuation;\n#ifdef AREA_TEXTURE\nif ( areaLightSize[ i ].z > 0.0 ) {\nfloat hard = 16.0;\nfloat gloss = 16.0;\nvec3 specPlane = areaLightPosition[ i ] + ( areaLightRight[ i ] * dirSpec2D.x + areaLightUp[ i ] * dirSpec2D.y );\nfloat dist = max( distance( vertexPosition, specPlane ), 0.0 );\nfloat d = ( ( 1.0 / hard ) / 2.0 ) * ( dist / gloss );\nw = max( w, 0.0 );\nh = max( h, 0.0 );\nvec2 co = dirSpec2D / ( d + 1.0 );\nco /= 2.0 * vec2( w, h );\nco = co + vec2( 0.5 );\nco.y = 1.0 - co.y;\nfloat lod = ( 2.0 / hard * max( dist, 0.0 ) );\nvec4 t00 = texture2D( areaLightTexture[ i ], co, lod );\nvec4 t01 = texture2D( areaLightTexture[ i ], co, lod + 1.0 );\nvec4 spec = mix( t00, t01, 0.5 );\nareaSpecularTerm *= spec.xyz;\n}\n#endif\nareaSpecular += areaSpecularTerm;\n}\n}\n#endif\nvec3 totalDiffuse = vec3( 0.0 );\nvec3 totalSpecular = vec3( 0.0 );\n#if MAX_DIR_LIGHTS > 0\ntotalDiffuse += dirDiffuse;\ntotalSpecular += dirSpecular;\n#endif\n#if MAX_HEMI_LIGHTS > 0\ntotalDiffuse += hemiDiffuse;\ntotalSpecular += hemiSpecular;\n#endif\n#if MAX_POINT_LIGHTS > 0\ntotalDiffuse += pointDiffuse;\ntotalSpecular += pointSpecular;\n#endif\n#if MAX_SPOT_LIGHTS > 0\ntotalDiffuse += spotDiffuse;\ntotalSpecular += spotSpecular;\n#endif\n#if MAX_AREA_LIGHTS > 0\ntotalDiffuse += areaDiffuse;\ntotalSpecular += areaSpecular;\n#endif\n#ifdef METAL\ngl_FragColor.xyz = gl_FragColor.xyz * ( totalDiffuse + ambientLightColor * uAmbientColor + totalSpecular );\n#else\ngl_FragColor.xyz = gl_FragColor.xyz * ( totalDiffuse + ambientLightColor * uAmbientColor ) + totalSpecular;\n#endif\nif ( enableReflection ) {\nvec3 vReflect;\nvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\nif ( useRefract ) {\nvReflect = refract( cameraToVertex, normal, uRefractionRatio );\n} else {\nvReflect = reflect( cameraToVertex, normal );\n}\nvec4 cubeColor = textureCube( tCube, vec3( -vReflect.x, vReflect.yz ) );\n#ifdef GAMMA_INPUT\ncubeColor.xyz *= cubeColor.xyz;\n#endif\ngl_FragColor.xyz = mix( gl_FragColor.xyz, cubeColor.xyz, specularTex.r * uReflectivity );\n}", THREE.ShaderChunk.shadowmap_fragment,THREE.ShaderChunk.linear_to_gamma_fragment,THREE.ShaderChunk.fog_fragment,"}"].join("\n"),vertexShader:["attribute vec4 tangent;\nuniform vec2 uOffset;\nuniform vec2 uRepeat;\nuniform bool enableDisplacement;\n#ifdef VERTEX_TEXTURES\nuniform sampler2D tDisplacement;\nuniform float uDisplacementScale;\nuniform float uDisplacementBias;\n#endif\nvarying vec3 vTangent;\nvarying vec3 vBinormal;\nvarying vec3 vNormal;\nvarying vec2 vUv;\nvarying vec3 vWorldPosition;\nvarying vec3 vViewPosition;", THREE.ShaderChunk.skinning_pars_vertex,THREE.ShaderChunk.shadowmap_pars_vertex,"void main() {",THREE.ShaderChunk.skinbase_vertex,THREE.ShaderChunk.skinnormal_vertex,"#ifdef USE_SKINNING\nvNormal = normalize( normalMatrix * skinnedNormal.xyz );\nvec4 skinnedTangent = skinMatrix * vec4( tangent.xyz, 0.0 );\nvTangent = normalize( normalMatrix * skinnedTangent.xyz );\n#else\nvNormal = normalize( normalMatrix * normal );\nvTangent = normalize( normalMatrix * tangent.xyz );\n#endif\nvBinormal = normalize( cross( vNormal, vTangent ) * tangent.w );\nvUv = uv * uRepeat + uOffset;\nvec3 displacedPosition;\n#ifdef VERTEX_TEXTURES\nif ( enableDisplacement ) {\nvec3 dv = texture2D( tDisplacement, uv ).xyz;\nfloat df = uDisplacementScale * dv.x + uDisplacementBias;\ndisplacedPosition = position + normalize( normal ) * df;\n} else {\n#ifdef USE_SKINNING\nvec4 skinVertex = vec4( position, 1.0 );\nvec4 skinned = boneMatX * skinVertex * skinWeight.x;\nskinned \t += boneMatY * skinVertex * skinWeight.y;\ndisplacedPosition = skinned.xyz;\n#else\ndisplacedPosition = position;\n#endif\n}\n#else\n#ifdef USE_SKINNING\nvec4 skinVertex = vec4( position, 1.0 );\nvec4 skinned = boneMatX * skinVertex * skinWeight.x;\nskinned \t += boneMatY * skinVertex * skinWeight.y;\ndisplacedPosition = skinned.xyz;\n#else\ndisplacedPosition = position;\n#endif\n#endif\nvec4 mvPosition = modelViewMatrix * vec4( displacedPosition, 1.0 );\nvec4 worldPosition = modelMatrix * vec4( displacedPosition, 1.0 );\ngl_Position = projectionMatrix * mvPosition;\nvWorldPosition = worldPosition.xyz;\nvViewPosition = -mvPosition.xyz;\n#ifdef USE_SHADOWMAP\nfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\nvShadowCoord[ i ] = shadowMatrix[ i ] * worldPosition;\n}\n#endif\n}"].join("\n")}, cube:{uniforms:{tCube:{type:"t",value:null},tFlip:{type:"f",value:-1}},vertexShader:"varying vec3 vWorldPosition;\nvoid main() {\nvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\nvWorldPosition = worldPosition.xyz;\ngl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",fragmentShader:"uniform samplerCube tCube;\nuniform float tFlip;\nvarying vec3 vWorldPosition;\nvoid main() {\ngl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );\n}"}}};THREE.FontUtils={faces:{},face:"helvetiker",weight:"normal",style:"normal",size:150,divisions:10,getFace:function(){return this.faces[this.face][this.weight][this.style]},loadFace:function(a){var b=a.familyName.toLowerCase();this.faces[b]=this.faces[b]||{};this.faces[b][a.cssFontWeight]=this.faces[b][a.cssFontWeight]||{};this.faces[b][a.cssFontWeight][a.cssFontStyle]=a;return this.faces[b][a.cssFontWeight][a.cssFontStyle]=a},drawText:function(a){var b=this.getFace(),c=this.size/b.resolution,d=0,e= String(a).split(""),f=e.length,g=[];for(a=0;a<f;a++){var h=new THREE.Path,h=this.extractGlyphPoints(e[a],b,c,d,h),d=d+h.offset;g.push(h.path)}return{paths:g,offset:d/2}},extractGlyphPoints:function(a,b,c,d,e){var f=[],g,h,j,l,m,q,p,t,r,n,s,x=b.glyphs[a]||b.glyphs["?"];if(x){if(x.o){b=x._cachedOutline||(x._cachedOutline=x.o.split(" "));l=b.length;for(a=0;a<l;)switch(j=b[a++],j){case "m":j=b[a++]*c+d;m=b[a++]*c;e.moveTo(j,m);break;case "l":j=b[a++]*c+d;m=b[a++]*c;e.lineTo(j,m);break;case "q":j=b[a++]* c+d;m=b[a++]*c;t=b[a++]*c+d;r=b[a++]*c;e.quadraticCurveTo(t,r,j,m);if(g=f[f.length-1]){q=g.x;p=g.y;g=1;for(h=this.divisions;g<=h;g++){var v=g/h;THREE.Shape.Utils.b2(v,q,t,j);THREE.Shape.Utils.b2(v,p,r,m)}}break;case "b":if(j=b[a++]*c+d,m=b[a++]*c,t=b[a++]*c+d,r=b[a++]*-c,n=b[a++]*c+d,s=b[a++]*-c,e.bezierCurveTo(j,m,t,r,n,s),g=f[f.length-1]){q=g.x;p=g.y;g=1;for(h=this.divisions;g<=h;g++)v=g/h,THREE.Shape.Utils.b3(v,q,t,n,j),THREE.Shape.Utils.b3(v,p,r,s,m)}}}return{offset:x.ha*c,path:e}}}}; THREE.FontUtils.generateShapes=function(a,b){b=b||{};var c=void 0!==b.curveSegments?b.curveSegments:4,d=void 0!==b.font?b.font:"helvetiker",e=void 0!==b.weight?b.weight:"normal",f=void 0!==b.style?b.style:"normal";THREE.FontUtils.size=void 0!==b.size?b.size:100;THREE.FontUtils.divisions=c;THREE.FontUtils.face=d;THREE.FontUtils.weight=e;THREE.FontUtils.style=f;c=THREE.FontUtils.drawText(a).paths;d=[];e=0;for(f=c.length;e<f;e++)Array.prototype.push.apply(d,c[e].toShapes());return d}; (function(a){var b=function(a){for(var b=a.length,e=0,f=b-1,g=0;g<b;f=g++)e+=a[f].x*a[g].y-a[g].x*a[f].y;return 0.5*e};a.Triangulate=function(a,d){var e=a.length;if(3>e)return null;var f=[],g=[],h=[],j,l,m;if(0<b(a))for(l=0;l<e;l++)g[l]=l;else for(l=0;l<e;l++)g[l]=e-1-l;var q=2*e;for(l=e-1;2<e;){if(0>=q--){console.log("Warning, unable to triangulate polygon!");break}j=l;e<=j&&(j=0);l=j+1;e<=l&&(l=0);m=l+1;e<=m&&(m=0);var p;a:{var t=p=void 0,r=void 0,n=void 0,s=void 0,x=void 0,v=void 0,A=void 0,u= void 0,t=a[g[j]].x,r=a[g[j]].y,n=a[g[l]].x,s=a[g[l]].y,x=a[g[m]].x,v=a[g[m]].y;if(1E-10>(n-t)*(v-r)-(s-r)*(x-t))p=!1;else{var L=void 0,H=void 0,C=void 0,z=void 0,E=void 0,D=void 0,J=void 0,X=void 0,G=void 0,S=void 0,G=X=J=u=A=void 0,L=x-n,H=v-s,C=t-x,z=r-v,E=n-t,D=s-r;for(p=0;p<e;p++)if(!(p===j||p===l||p===m))if(A=a[g[p]].x,u=a[g[p]].y,J=A-t,X=u-r,G=A-n,S=u-s,A-=x,u-=v,G=L*S-H*G,J=E*X-D*J,X=C*u-z*A,0<=G&&0<=X&&0<=J){p=!1;break a}p=!0}}if(p){f.push([a[g[j]],a[g[l]],a[g[m]]]);h.push([g[j],g[l],g[m]]); j=l;for(m=l+1;m<e;j++,m++)g[j]=g[m];e--;q=2*e}}return d?h:f};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=!1;var b=[],c,d=this.getPoint(0),e,f=0;b.push(0);for(e=1;e<=a;e++)c=this.getPoint(e/a),f+=c.distanceTo(d),b.push(f),d=c;return this.cacheArcLengths=b}; THREE.Curve.prototype.updateArcLengths=function(){this.needsUpdate=!0;this.getLengths()};THREE.Curve.prototype.getUtoTmapping=function(a,b){var c=this.getLengths(),d=0,e=c.length,f;f=b?b:a*c[e-1];for(var g=0,h=e-1,j;g<=h;)if(d=Math.floor(g+(h-g)/2),j=c[d]-f,0>j)g=d+1;else if(0<j)h=d-1;else{h=d;break}d=h;if(c[d]==f)return d/(e-1);g=c[d];return c=(d+(f-g)/(c[d+1]-g))/(e-1)};THREE.Curve.prototype.getTangent=function(a){var b=a-1E-4;a+=1E-4;0>b&&(b=0);1<a&&(a=1);b=this.getPoint(b);return this.getPoint(a).clone().subSelf(b).normalize()}; THREE.Curve.prototype.getTangentAt=function(a){a=this.getUtoTmapping(a);return this.getTangent(a)};THREE.LineCurve=function(a,b){this.v1=a;this.v2=b};THREE.LineCurve.prototype=Object.create(THREE.Curve.prototype);THREE.LineCurve.prototype.getPoint=function(a){var b=this.v2.clone().subSelf(this.v1);b.multiplyScalar(a).addSelf(this.v1);return b};THREE.LineCurve.prototype.getPointAt=function(a){return this.getPoint(a)};THREE.LineCurve.prototype.getTangent=function(){return this.v2.clone().subSelf(this.v1).normalize()}; THREE.QuadraticBezierCurve=function(a,b,c){this.v0=a;this.v1=b;this.v2=c};THREE.QuadraticBezierCurve.prototype=Object.create(THREE.Curve.prototype);THREE.QuadraticBezierCurve.prototype.getPoint=function(a){var b;b=THREE.Shape.Utils.b2(a,this.v0.x,this.v1.x,this.v2.x);a=THREE.Shape.Utils.b2(a,this.v0.y,this.v1.y,this.v2.y);return new THREE.Vector2(b,a)}; THREE.QuadraticBezierCurve.prototype.getTangent=function(a){var b;b=THREE.Curve.Utils.tangentQuadraticBezier(a,this.v0.x,this.v1.x,this.v2.x);a=THREE.Curve.Utils.tangentQuadraticBezier(a,this.v0.y,this.v1.y,this.v2.y);b=new THREE.Vector2(b,a);b.normalize();return b};THREE.CubicBezierCurve=function(a,b,c,d){this.v0=a;this.v1=b;this.v2=c;this.v3=d};THREE.CubicBezierCurve.prototype=Object.create(THREE.Curve.prototype); THREE.CubicBezierCurve.prototype.getPoint=function(a){var b;b=THREE.Shape.Utils.b3(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x);a=THREE.Shape.Utils.b3(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y);return new THREE.Vector2(b,a)};THREE.CubicBezierCurve.prototype.getTangent=function(a){var b;b=THREE.Curve.Utils.tangentCubicBezier(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x);a=THREE.Curve.Utils.tangentCubicBezier(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y);b=new THREE.Vector2(b,a);b.normalize();return b}; THREE.SplineCurve=function(a){this.points=void 0==a?[]:a};THREE.SplineCurve.prototype=Object.create(THREE.Curve.prototype);THREE.SplineCurve.prototype.getPoint=function(a){var b=new THREE.Vector2,c=[],d=this.points,e;e=(d.length-1)*a;a=Math.floor(e);e-=a;c[0]=0==a?a:a-1;c[1]=a;c[2]=a>d.length-2?d.length-1:a+1;c[3]=a>d.length-3?d.length-1:a+2;b.x=THREE.Curve.Utils.interpolate(d[c[0]].x,d[c[1]].x,d[c[2]].x,d[c[3]].x,e);b.y=THREE.Curve.Utils.interpolate(d[c[0]].y,d[c[1]].y,d[c[2]].y,d[c[3]].y,e);return b}; THREE.EllipseCurve=function(a,b,c,d,e,f,g){this.aX=a;this.aY=b;this.xRadius=c;this.yRadius=d;this.aStartAngle=e;this.aEndAngle=f;this.aClockwise=g};THREE.EllipseCurve.prototype=Object.create(THREE.Curve.prototype);THREE.EllipseCurve.prototype.getPoint=function(a){var b=this.aEndAngle-this.aStartAngle;this.aClockwise||(a=1-a);b=this.aStartAngle+a*b;a=this.aX+this.xRadius*Math.cos(b);b=this.aY+this.yRadius*Math.sin(b);return new THREE.Vector2(a,b)}; THREE.ArcCurve=function(a,b,c,d,e,f){THREE.EllipseCurve.call(this,a,b,c,c,d,e,f)};THREE.ArcCurve.prototype=Object.create(THREE.EllipseCurve.prototype); THREE.Curve.Utils={tangentQuadraticBezier:function(a,b,c,d){return 2*(1-a)*(c-b)+2*a*(d-c)},tangentCubicBezier:function(a,b,c,d,e){return-3*b*(1-a)*(1-a)+3*c*(1-a)*(1-a)-6*a*c*(1-a)+6*a*d*(1-a)-3*a*a*d+3*a*a*e},tangentSpline:function(a){return 6*a*a-6*a+(3*a*a-4*a+1)+(-6*a*a+6*a)+(3*a*a-2*a)},interpolate:function(a,b,c,d,e){a=0.5*(c-a);d=0.5*(d-b);var f=e*e;return(2*b-2*c+a+d)*e*f+(-3*b+3*c-2*a-d)*f+a*e+b}}; THREE.Curve.create=function(a,b){a.prototype=Object.create(THREE.Curve.prototype);a.prototype.getPoint=b;return a};THREE.LineCurve3=THREE.Curve.create(function(a,b){this.v1=a;this.v2=b},function(a){var b=new THREE.Vector3;b.sub(this.v2,this.v1);b.multiplyScalar(a);b.addSelf(this.v1);return b}); THREE.QuadraticBezierCurve3=THREE.Curve.create(function(a,b,c){this.v0=a;this.v1=b;this.v2=c},function(a){var b,c;b=THREE.Shape.Utils.b2(a,this.v0.x,this.v1.x,this.v2.x);c=THREE.Shape.Utils.b2(a,this.v0.y,this.v1.y,this.v2.y);a=THREE.Shape.Utils.b2(a,this.v0.z,this.v1.z,this.v2.z);return new THREE.Vector3(b,c,a)}); THREE.CubicBezierCurve3=THREE.Curve.create(function(a,b,c,d){this.v0=a;this.v1=b;this.v2=c;this.v3=d},function(a){var b,c;b=THREE.Shape.Utils.b3(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x);c=THREE.Shape.Utils.b3(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y);a=THREE.Shape.Utils.b3(a,this.v0.z,this.v1.z,this.v2.z,this.v3.z);return new THREE.Vector3(b,c,a)}); THREE.SplineCurve3=THREE.Curve.create(function(a){this.points=void 0==a?[]:a},function(a){var b=new THREE.Vector3,c=[],d=this.points,e;a*=d.length-1;e=Math.floor(a);a-=e;c[0]=0==e?e:e-1;c[1]=e;c[2]=e>d.length-2?d.length-1:e+1;c[3]=e>d.length-3?d.length-1:e+2;e=d[c[0]];var f=d[c[1]],g=d[c[2]],c=d[c[3]];b.x=THREE.Curve.Utils.interpolate(e.x,f.x,g.x,c.x,a);b.y=THREE.Curve.Utils.interpolate(e.y,f.y,g.y,c.y,a);b.z=THREE.Curve.Utils.interpolate(e.z,f.z,g.z,c.z,a);return b}); THREE.ClosedSplineCurve3=THREE.Curve.create(function(a){this.points=void 0==a?[]:a},function(a){var b=new THREE.Vector3,c=[],d=this.points,e;e=(d.length-0)*a;a=Math.floor(e);e-=a;a+=0<a?0:(Math.floor(Math.abs(a)/d.length)+1)*d.length;c[0]=(a-1)%d.length;c[1]=a%d.length;c[2]=(a+1)%d.length;c[3]=(a+2)%d.length;b.x=THREE.Curve.Utils.interpolate(d[c[0]].x,d[c[1]].x,d[c[2]].x,d[c[3]].x,e);b.y=THREE.Curve.Utils.interpolate(d[c[0]].y,d[c[1]].y,d[c[2]].y,d[c[3]].y,e);b.z=THREE.Curve.Utils.interpolate(d[c[0]].z, d[c[1]].z,d[c[2]].z,d[c[3]].z,e);return b});THREE.CurvePath=function(){this.curves=[];this.bends=[];this.autoClose=!1};THREE.CurvePath.prototype=Object.create(THREE.Curve.prototype);THREE.CurvePath.prototype.add=function(a){this.curves.push(a)};THREE.CurvePath.prototype.checkConnection=function(){};THREE.CurvePath.prototype.closePath=function(){var a=this.curves[0].getPoint(0),b=this.curves[this.curves.length-1].getPoint(1);a.equals(b)||this.curves.push(new THREE.LineCurve(b,a))}; THREE.CurvePath.prototype.getPoint=function(a){var b=a*this.getLength(),c=this.getCurveLengths();for(a=0;a<c.length;){if(c[a]>=b)return b=c[a]-b,a=this.curves[a],b=1-b/a.getLength(),a.getPointAt(b);a++}return null};THREE.CurvePath.prototype.getLength=function(){var a=this.getCurveLengths();return a[a.length-1]}; THREE.CurvePath.prototype.getCurveLengths=function(){if(this.cacheLengths&&this.cacheLengths.length==this.curves.length)return this.cacheLengths;var a=[],b=0,c,d=this.curves.length;for(c=0;c<d;c++)b+=this.curves[c].getLength(),a.push(b);return this.cacheLengths=a}; THREE.CurvePath.prototype.getBoundingBox=function(){var a=this.getPoints(),b,c,d,e,f,g;b=c=Number.NEGATIVE_INFINITY;e=f=Number.POSITIVE_INFINITY;var h,j,l,m,q=a[0]instanceof THREE.Vector3;m=q?new THREE.Vector3:new THREE.Vector2;j=0;for(l=a.length;j<l;j++)h=a[j],h.x>b?b=h.x:h.x<e&&(e=h.x),h.y>c?c=h.y:h.y<f&&(f=h.y),q&&(h.z>d?d=h.z:h.z<g&&(g=h.z)),m.addSelf(h);a={minX:e,minY:f,maxX:b,maxY:c,centroid:m.divideScalar(l)};q&&(a.maxZ=d,a.minZ=g);return a}; THREE.CurvePath.prototype.createPointsGeometry=function(a){a=this.getPoints(a,!0);return this.createGeometry(a)};THREE.CurvePath.prototype.createSpacedPointsGeometry=function(a){a=this.getSpacedPoints(a,!0);return this.createGeometry(a)};THREE.CurvePath.prototype.createGeometry=function(a){for(var b=new THREE.Geometry,c=0;c<a.length;c++)b.vertices.push(new THREE.Vector3(a[c].x,a[c].y,a[c].z||0));return b};THREE.CurvePath.prototype.addWrapPath=function(a){this.bends.push(a)}; THREE.CurvePath.prototype.getTransformedPoints=function(a,b){var c=this.getPoints(a),d,e;b||(b=this.bends);d=0;for(e=b.length;d<e;d++)c=this.getWrapPoints(c,b[d]);return c};THREE.CurvePath.prototype.getTransformedSpacedPoints=function(a,b){var c=this.getSpacedPoints(a),d,e;b||(b=this.bends);d=0;for(e=b.length;d<e;d++)c=this.getWrapPoints(c,b[d]);return c}; THREE.CurvePath.prototype.getWrapPoints=function(a,b){var c=this.getBoundingBox(),d,e,f,g,h,j;d=0;for(e=a.length;d<e;d++)f=a[d],g=f.x,h=f.y,j=g/c.maxX,j=b.getUtoTmapping(j,g),g=b.getPoint(j),h=b.getNormalVector(j).multiplyScalar(h),f.x=g.x+h.x,f.y=g.y+h.y;return a};THREE.Gyroscope=function(){THREE.Object3D.call(this)};THREE.Gyroscope.prototype=Object.create(THREE.Object3D.prototype); THREE.Gyroscope.prototype.updateMatrixWorld=function(a){this.matrixAutoUpdate&&this.updateMatrix();if(this.matrixWorldNeedsUpdate||a)this.parent?(this.matrixWorld.multiply(this.parent.matrixWorld,this.matrix),this.matrixWorld.decompose(this.translationWorld,this.rotationWorld,this.scaleWorld),this.matrix.decompose(this.translationObject,this.rotationObject,this.scaleObject),this.matrixWorld.compose(this.translationWorld,this.rotationObject,this.scaleWorld)):this.matrixWorld.copy(this.matrix),this.matrixWorldNeedsUpdate= !1,a=!0;for(var b=0,c=this.children.length;b<c;b++)this.children[b].updateMatrixWorld(a)};THREE.Gyroscope.prototype.translationWorld=new THREE.Vector3;THREE.Gyroscope.prototype.translationObject=new THREE.Vector3;THREE.Gyroscope.prototype.rotationWorld=new THREE.Quaternion;THREE.Gyroscope.prototype.rotationObject=new THREE.Quaternion;THREE.Gyroscope.prototype.scaleWorld=new THREE.Vector3;THREE.Gyroscope.prototype.scaleObject=new THREE.Vector3;THREE.Path=function(a){THREE.CurvePath.call(this);this.actions=[];a&&this.fromPoints(a)};THREE.Path.prototype=Object.create(THREE.CurvePath.prototype);THREE.PathActions={MOVE_TO:"moveTo",LINE_TO:"lineTo",QUADRATIC_CURVE_TO:"quadraticCurveTo",BEZIER_CURVE_TO:"bezierCurveTo",CSPLINE_THRU:"splineThru",ARC:"arc",ELLIPSE:"ellipse"};THREE.Path.prototype.fromPoints=function(a){this.moveTo(a[0].x,a[0].y);for(var b=1,c=a.length;b<c;b++)this.lineTo(a[b].x,a[b].y)}; THREE.Path.prototype.moveTo=function(a,b){var c=Array.prototype.slice.call(arguments);this.actions.push({action:THREE.PathActions.MOVE_TO,args:c})};THREE.Path.prototype.lineTo=function(a,b){var c=Array.prototype.slice.call(arguments),d=this.actions[this.actions.length-1].args,d=new THREE.LineCurve(new THREE.Vector2(d[d.length-2],d[d.length-1]),new THREE.Vector2(a,b));this.curves.push(d);this.actions.push({action:THREE.PathActions.LINE_TO,args:c})}; THREE.Path.prototype.quadraticCurveTo=function(a,b,c,d){var e=Array.prototype.slice.call(arguments),f=this.actions[this.actions.length-1].args,f=new THREE.QuadraticBezierCurve(new THREE.Vector2(f[f.length-2],f[f.length-1]),new THREE.Vector2(a,b),new THREE.Vector2(c,d));this.curves.push(f);this.actions.push({action:THREE.PathActions.QUADRATIC_CURVE_TO,args:e})}; THREE.Path.prototype.bezierCurveTo=function(a,b,c,d,e,f){var g=Array.prototype.slice.call(arguments),h=this.actions[this.actions.length-1].args,h=new THREE.CubicBezierCurve(new THREE.Vector2(h[h.length-2],h[h.length-1]),new THREE.Vector2(a,b),new THREE.Vector2(c,d),new THREE.Vector2(e,f));this.curves.push(h);this.actions.push({action:THREE.PathActions.BEZIER_CURVE_TO,args:g})}; THREE.Path.prototype.splineThru=function(a){var b=Array.prototype.slice.call(arguments),c=this.actions[this.actions.length-1].args,c=[new THREE.Vector2(c[c.length-2],c[c.length-1])];Array.prototype.push.apply(c,a);c=new THREE.SplineCurve(c);this.curves.push(c);this.actions.push({action:THREE.PathActions.CSPLINE_THRU,args:b})};THREE.Path.prototype.arc=function(a,b,c,d,e,f){var g=this.actions[this.actions.length-1].args;this.absarc(a+g[g.length-2],b+g[g.length-1],c,d,e,f)}; THREE.Path.prototype.absarc=function(a,b,c,d,e,f){this.absellipse(a,b,c,c,d,e,f)};THREE.Path.prototype.ellipse=function(a,b,c,d,e,f,g){var h=this.actions[this.actions.length-1].args;this.absellipse(a+h[h.length-2],b+h[h.length-1],c,d,e,f,g)};THREE.Path.prototype.absellipse=function(a,b,c,d,e,f,g){var h=Array.prototype.slice.call(arguments),j=new THREE.EllipseCurve(a,b,c,d,e,f,g);this.curves.push(j);j=j.getPoint(g?1:0);h.push(j.x);h.push(j.y);this.actions.push({action:THREE.PathActions.ELLIPSE,args:h})}; THREE.Path.prototype.getSpacedPoints=function(a){a||(a=40);for(var b=[],c=0;c<a;c++)b.push(this.getPoint(c/a));return b}; THREE.Path.prototype.getPoints=function(a,b){if(this.useSpacedPoints)return console.log("tata"),this.getSpacedPoints(a,b);a=a||12;var c=[],d,e,f,g,h,j,l,m,q,p,t,r,n;d=0;for(e=this.actions.length;d<e;d++)switch(f=this.actions[d],g=f.action,f=f.args,g){case THREE.PathActions.MOVE_TO:c.push(new THREE.Vector2(f[0],f[1]));break;case THREE.PathActions.LINE_TO:c.push(new THREE.Vector2(f[0],f[1]));break;case THREE.PathActions.QUADRATIC_CURVE_TO:h=f[2];j=f[3];q=f[0];p=f[1];0<c.length?(g=c[c.length-1],t=g.x, r=g.y):(g=this.actions[d-1].args,t=g[g.length-2],r=g[g.length-1]);for(f=1;f<=a;f++)n=f/a,g=THREE.Shape.Utils.b2(n,t,q,h),n=THREE.Shape.Utils.b2(n,r,p,j),c.push(new THREE.Vector2(g,n));break;case THREE.PathActions.BEZIER_CURVE_TO:h=f[4];j=f[5];q=f[0];p=f[1];l=f[2];m=f[3];0<c.length?(g=c[c.length-1],t=g.x,r=g.y):(g=this.actions[d-1].args,t=g[g.length-2],r=g[g.length-1]);for(f=1;f<=a;f++)n=f/a,g=THREE.Shape.Utils.b3(n,t,q,l,h),n=THREE.Shape.Utils.b3(n,r,p,m,j),c.push(new THREE.Vector2(g,n));break;case THREE.PathActions.CSPLINE_THRU:g= this.actions[d-1].args;n=[new THREE.Vector2(g[g.length-2],g[g.length-1])];g=a*f[0].length;n=n.concat(f[0]);n=new THREE.SplineCurve(n);for(f=1;f<=g;f++)c.push(n.getPointAt(f/g));break;case THREE.PathActions.ARC:h=f[0];j=f[1];p=f[2];l=f[3];g=f[4];q=!!f[5];t=g-l;r=2*a;for(f=1;f<=r;f++)n=f/r,q||(n=1-n),n=l+n*t,g=h+p*Math.cos(n),n=j+p*Math.sin(n),c.push(new THREE.Vector2(g,n));break;case THREE.PathActions.ELLIPSE:h=f[0];j=f[1];p=f[2];m=f[3];l=f[4];g=f[5];q=!!f[6];t=g-l;r=2*a;for(f=1;f<=r;f++)n=f/r,q|| (n=1-n),n=l+n*t,g=h+p*Math.cos(n),n=j+m*Math.sin(n),c.push(new THREE.Vector2(g,n))}d=c[c.length-1];1E-10>Math.abs(d.x-c[0].x)&&1E-10>Math.abs(d.y-c[0].y)&&c.splice(c.length-1,1);b&&c.push(c[0]);return c}; THREE.Path.prototype.toShapes=function(){var a,b,c,d,e=[],f=new THREE.Path;a=0;for(b=this.actions.length;a<b;a++)c=this.actions[a],d=c.args,c=c.action,c==THREE.PathActions.MOVE_TO&&0!=f.actions.length&&(e.push(f),f=new THREE.Path),f[c].apply(f,d);0!=f.actions.length&&e.push(f);if(0==e.length)return[];var g;d=[];a=!THREE.Shape.Utils.isClockWise(e[0].getPoints());if(1==e.length)return f=e[0],g=new THREE.Shape,g.actions=f.actions,g.curves=f.curves,d.push(g),d;if(a){g=new THREE.Shape;a=0;for(b=e.length;a< b;a++)f=e[a],THREE.Shape.Utils.isClockWise(f.getPoints())?(g.actions=f.actions,g.curves=f.curves,d.push(g),g=new THREE.Shape):g.holes.push(f)}else{a=0;for(b=e.length;a<b;a++)f=e[a],THREE.Shape.Utils.isClockWise(f.getPoints())?(g&&d.push(g),g=new THREE.Shape,g.actions=f.actions,g.curves=f.curves):g.holes.push(f);d.push(g)}return d};THREE.Shape=function(){THREE.Path.apply(this,arguments);this.holes=[]};THREE.Shape.prototype=Object.create(THREE.Path.prototype);THREE.Shape.prototype.extrude=function(a){return new THREE.ExtrudeGeometry(this,a)};THREE.Shape.prototype.makeGeometry=function(a){return new THREE.ShapeGeometry(this,a)};THREE.Shape.prototype.getPointsHoles=function(a){var b,c=this.holes.length,d=[];for(b=0;b<c;b++)d[b]=this.holes[b].getTransformedPoints(a,this.bends);return d}; THREE.Shape.prototype.getSpacedPointsHoles=function(a){var b,c=this.holes.length,d=[];for(b=0;b<c;b++)d[b]=this.holes[b].getTransformedSpacedPoints(a,this.bends);return d};THREE.Shape.prototype.extractAllPoints=function(a){return{shape:this.getTransformedPoints(a),holes:this.getPointsHoles(a)}};THREE.Shape.prototype.extractPoints=function(a){return this.useSpacedPoints?this.extractAllSpacedPoints(a):this.extractAllPoints(a)}; THREE.Shape.prototype.extractAllSpacedPoints=function(a){return{shape:this.getTransformedSpacedPoints(a),holes:this.getSpacedPointsHoles(a)}}; THREE.Shape.Utils={removeHoles:function(a,b){var c=a.concat(),d=c.concat(),e,f,g,h,j,l,m,q,p,t,r=[];for(j=0;j<b.length;j++){l=b[j];Array.prototype.push.apply(d,l);f=Number.POSITIVE_INFINITY;for(e=0;e<l.length;e++){p=l[e];t=[];for(q=0;q<c.length;q++)m=c[q],m=p.distanceToSquared(m),t.push(m),m<f&&(f=m,g=e,h=q)}e=0<=h-1?h-1:c.length-1;f=0<=g-1?g-1:l.length-1;var n=[l[g],c[h],c[e]];q=THREE.FontUtils.Triangulate.area(n);var s=[l[g],l[f],c[h]];p=THREE.FontUtils.Triangulate.area(s);t=h;m=g;h+=1;g+=-1;0> h&&(h+=c.length);h%=c.length;0>g&&(g+=l.length);g%=l.length;e=0<=h-1?h-1:c.length-1;f=0<=g-1?g-1:l.length-1;n=[l[g],c[h],c[e]];n=THREE.FontUtils.Triangulate.area(n);s=[l[g],l[f],c[h]];s=THREE.FontUtils.Triangulate.area(s);q+p>n+s&&(h=t,g=m,0>h&&(h+=c.length),h%=c.length,0>g&&(g+=l.length),g%=l.length,e=0<=h-1?h-1:c.length-1,f=0<=g-1?g-1:l.length-1);q=c.slice(0,h);p=c.slice(h);t=l.slice(g);m=l.slice(0,g);f=[l[g],l[f],c[h]];r.push([l[g],c[h],c[e]]);r.push(f);c=q.concat(t).concat(m).concat(p)}return{shape:c, isolatedPts:r,allpoints:d}},triangulateShape:function(a,b){var c=THREE.Shape.Utils.removeHoles(a,b),d=c.allpoints,e=c.isolatedPts,c=THREE.FontUtils.Triangulate(c.shape,!1),f,g,h,j,l={};f=0;for(g=d.length;f<g;f++)j=d[f].x+":"+d[f].y,void 0!==l[j]&&console.log("Duplicate point",j),l[j]=f;f=0;for(g=c.length;f<g;f++){h=c[f];for(d=0;3>d;d++)j=h[d].x+":"+h[d].y,j=l[j],void 0!==j&&(h[d]=j)}f=0;for(g=e.length;f<g;f++){h=e[f];for(d=0;3>d;d++)j=h[d].x+":"+h[d].y,j=l[j],void 0!==j&&(h[d]=j)}return c.concat(e)}, isClockWise:function(a){return 0>THREE.FontUtils.Triangulate.area(a)},b2p0:function(a,b){var c=1-a;return c*c*b},b2p1:function(a,b){return 2*(1-a)*a*b},b2p2:function(a,b){return a*a*b},b2:function(a,b,c,d){return this.b2p0(a,b)+this.b2p1(a,c)+this.b2p2(a,d)},b3p0:function(a,b){var c=1-a;return c*c*c*b},b3p1:function(a,b){var c=1-a;return 3*c*c*a*b},b3p2:function(a,b){return 3*(1-a)*a*a*b},b3p3:function(a,b){return a*a*a*b},b3:function(a,b,c,d,e){return this.b3p0(a,b)+this.b3p1(a,c)+this.b3p2(a,d)+ this.b3p3(a,e)}};THREE.AnimationHandler=function(){var a=[],b={},c={update:function(b){for(var c=0;c<a.length;c++)a[c].update(b)},addToUpdate:function(b){-1===a.indexOf(b)&&a.push(b)},removeFromUpdate:function(b){b=a.indexOf(b);-1!==b&&a.splice(b,1)},add:function(a){void 0!==b[a.name]&&console.log("THREE.AnimationHandler.add: Warning! "+a.name+" already exists in library. Overwriting.");b[a.name]=a;if(!0!==a.initialized){for(var c=0;c<a.hierarchy.length;c++){for(var d=0;d<a.hierarchy[c].keys.length;d++)if(0>a.hierarchy[c].keys[d].time&& (a.hierarchy[c].keys[d].time=0),void 0!==a.hierarchy[c].keys[d].rot&&!(a.hierarchy[c].keys[d].rot instanceof THREE.Quaternion)){var h=a.hierarchy[c].keys[d].rot;a.hierarchy[c].keys[d].rot=new THREE.Quaternion(h[0],h[1],h[2],h[3])}if(a.hierarchy[c].keys.length&&void 0!==a.hierarchy[c].keys[0].morphTargets){h={};for(d=0;d<a.hierarchy[c].keys.length;d++)for(var j=0;j<a.hierarchy[c].keys[d].morphTargets.length;j++){var l=a.hierarchy[c].keys[d].morphTargets[j];h[l]=-1}a.hierarchy[c].usedMorphTargets=h; for(d=0;d<a.hierarchy[c].keys.length;d++){var m={};for(l in h){for(j=0;j<a.hierarchy[c].keys[d].morphTargets.length;j++)if(a.hierarchy[c].keys[d].morphTargets[j]===l){m[l]=a.hierarchy[c].keys[d].morphTargetsInfluences[j];break}j===a.hierarchy[c].keys[d].morphTargets.length&&(m[l]=0)}a.hierarchy[c].keys[d].morphTargetsInfluences=m}}for(d=1;d<a.hierarchy[c].keys.length;d++)a.hierarchy[c].keys[d].time===a.hierarchy[c].keys[d-1].time&&(a.hierarchy[c].keys.splice(d,1),d--);for(d=0;d<a.hierarchy[c].keys.length;d++)a.hierarchy[c].keys[d].index= d}d=parseInt(a.length*a.fps,10);a.JIT={};a.JIT.hierarchy=[];for(c=0;c<a.hierarchy.length;c++)a.JIT.hierarchy.push(Array(d));a.initialized=!0}},get:function(a){if("string"===typeof a){if(b[a])return b[a];console.log("THREE.AnimationHandler.get: Couldn't find animation "+a);return null}},parse:function(a){var b=[];if(a instanceof THREE.SkinnedMesh)for(var c=0;c<a.bones.length;c++)b.push(a.bones[c]);else d(a,b);return b}},d=function(a,b){b.push(a);for(var c=0;c<a.children.length;c++)d(a.children[c], b)};c.LINEAR=0;c.CATMULLROM=1;c.CATMULLROM_FORWARD=2;return c}();THREE.Animation=function(a,b,c){this.root=a;this.data=THREE.AnimationHandler.get(b);this.hierarchy=THREE.AnimationHandler.parse(a);this.currentTime=0;this.timeScale=1;this.isPlaying=!1;this.loop=this.isPaused=!0;this.interpolationType=void 0!==c?c:THREE.AnimationHandler.LINEAR;this.points=[];this.target=new THREE.Vector3}; THREE.Animation.prototype.play=function(a,b){if(!1===this.isPlaying){this.isPlaying=!0;this.loop=void 0!==a?a:!0;this.currentTime=void 0!==b?b:0;var c,d=this.hierarchy.length,e;for(c=0;c<d;c++){e=this.hierarchy[c];this.interpolationType!==THREE.AnimationHandler.CATMULLROM_FORWARD&&(e.useQuaternion=!0);e.matrixAutoUpdate=!0;void 0===e.animationCache&&(e.animationCache={},e.animationCache.prevKey={pos:0,rot:0,scl:0},e.animationCache.nextKey={pos:0,rot:0,scl:0},e.animationCache.originalMatrix=e instanceof THREE.Bone?e.skinMatrix:e.matrix);var f=e.animationCache.prevKey;e=e.animationCache.nextKey;f.pos=this.data.hierarchy[c].keys[0];f.rot=this.data.hierarchy[c].keys[0];f.scl=this.data.hierarchy[c].keys[0];e.pos=this.getNextKeyWith("pos",c,1);e.rot=this.getNextKeyWith("rot",c,1);e.scl=this.getNextKeyWith("scl",c,1)}this.update(0)}this.isPaused=!1;THREE.AnimationHandler.addToUpdate(this)}; THREE.Animation.prototype.pause=function(){!0===this.isPaused?THREE.AnimationHandler.addToUpdate(this):THREE.AnimationHandler.removeFromUpdate(this);this.isPaused=!this.isPaused};THREE.Animation.prototype.stop=function(){this.isPaused=this.isPlaying=!1;THREE.AnimationHandler.removeFromUpdate(this)}; THREE.Animation.prototype.update=function(a){if(!1!==this.isPlaying){var b=["pos","rot","scl"],c,d,e,f,g,h,j,l,m;m=this.currentTime+=a*this.timeScale;l=this.currentTime%=this.data.length;parseInt(Math.min(l*this.data.fps,this.data.length*this.data.fps),10);for(var q=0,p=this.hierarchy.length;q<p;q++){a=this.hierarchy[q];j=a.animationCache;for(var t=0;3>t;t++){c=b[t];g=j.prevKey[c];h=j.nextKey[c];if(h.time<=m){if(l<m)if(this.loop){g=this.data.hierarchy[q].keys[0];for(h=this.getNextKeyWith(c,q,1);h.time< l;)g=h,h=this.getNextKeyWith(c,q,h.index+1)}else{this.stop();return}else{do g=h,h=this.getNextKeyWith(c,q,h.index+1);while(h.time<l)}j.prevKey[c]=g;j.nextKey[c]=h}a.matrixAutoUpdate=!0;a.matrixWorldNeedsUpdate=!0;d=(l-g.time)/(h.time-g.time);e=g[c];f=h[c];if(0>d||1<d)console.log("THREE.Animation.update: Warning! Scale out of bounds:"+d+" on bone "+q),d=0>d?0:1;if("pos"===c)if(c=a.position,this.interpolationType===THREE.AnimationHandler.LINEAR)c.x=e[0]+(f[0]-e[0])*d,c.y=e[1]+(f[1]-e[1])*d,c.z=e[2]+ (f[2]-e[2])*d;else{if(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD)this.points[0]=this.getPrevKeyWith("pos",q,g.index-1).pos,this.points[1]=e,this.points[2]=f,this.points[3]=this.getNextKeyWith("pos",q,h.index+1).pos,d=0.33*d+0.33,e=this.interpolateCatmullRom(this.points,d),c.x=e[0],c.y=e[1],c.z=e[2],this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD&&(d=this.interpolateCatmullRom(this.points,1.01*d), this.target.set(d[0],d[1],d[2]),this.target.subSelf(c),this.target.y=0,this.target.normalize(),d=Math.atan2(this.target.x,this.target.z),a.rotation.set(0,d,0))}else"rot"===c?THREE.Quaternion.slerp(e,f,a.quaternion,d):"scl"===c&&(c=a.scale,c.x=e[0]+(f[0]-e[0])*d,c.y=e[1]+(f[1]-e[1])*d,c.z=e[2]+(f[2]-e[2])*d)}}}}; THREE.Animation.prototype.interpolateCatmullRom=function(a,b){var c=[],d=[],e,f,g,h,j,l;e=(a.length-1)*b;f=Math.floor(e);e-=f;c[0]=0===f?f:f-1;c[1]=f;c[2]=f>a.length-2?f:f+1;c[3]=f>a.length-3?f:f+2;f=a[c[0]];h=a[c[1]];j=a[c[2]];l=a[c[3]];c=e*e;g=e*c;d[0]=this.interpolate(f[0],h[0],j[0],l[0],e,c,g);d[1]=this.interpolate(f[1],h[1],j[1],l[1],e,c,g);d[2]=this.interpolate(f[2],h[2],j[2],l[2],e,c,g);return d}; THREE.Animation.prototype.interpolate=function(a,b,c,d,e,f,g){a=0.5*(c-a);d=0.5*(d-b);return(2*(b-c)+a+d)*g+(-3*(b-c)-2*a-d)*f+a*e+b};THREE.Animation.prototype.getNextKeyWith=function(a,b,c){var d=this.data.hierarchy[b].keys;for(c=this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD?c<d.length-1?c:d.length-1:c%d.length;c<d.length;c++)if(void 0!==d[c][a])return d[c];return this.data.hierarchy[b].keys[0]}; THREE.Animation.prototype.getPrevKeyWith=function(a,b,c){var d=this.data.hierarchy[b].keys;for(c=this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD?0<c?c:0:0<=c?c:c+d.length;0<=c;c--)if(void 0!==d[c][a])return d[c];return this.data.hierarchy[b].keys[d.length-1]};THREE.KeyFrameAnimation=function(a,b,c){this.root=a;this.data=THREE.AnimationHandler.get(b);this.hierarchy=THREE.AnimationHandler.parse(a);this.currentTime=0;this.timeScale=0.001;this.isPlaying=!1;this.loop=this.isPaused=!0;this.JITCompile=void 0!==c?c:!0;a=0;for(b=this.hierarchy.length;a<b;a++){c=this.data.hierarchy[a].sids;var d=this.hierarchy[a];if(this.data.hierarchy[a].keys.length&&c){for(var e=0;e<c.length;e++){var f=c[e],g=this.getNextKeyWith(f,a,0);g&&g.apply(f)}d.matrixAutoUpdate=!1;this.data.hierarchy[a].node.updateMatrix(); d.matrixWorldNeedsUpdate=!0}}}; THREE.KeyFrameAnimation.prototype.play=function(a,b){if(!this.isPlaying){this.isPlaying=!0;this.loop=void 0!==a?a:!0;this.currentTime=void 0!==b?b:0;this.startTimeMs=b;this.startTime=1E7;this.endTime=-this.startTime;var c,d=this.hierarchy.length,e,f;for(c=0;c<d;c++)e=this.hierarchy[c],f=this.data.hierarchy[c],e.useQuaternion=!0,void 0===f.animationCache&&(f.animationCache={},f.animationCache.prevKey=null,f.animationCache.nextKey=null,f.animationCache.originalMatrix=e instanceof THREE.Bone?e.skinMatrix: e.matrix),e=this.data.hierarchy[c].keys,e.length&&(f.animationCache.prevKey=e[0],f.animationCache.nextKey=e[1],this.startTime=Math.min(e[0].time,this.startTime),this.endTime=Math.max(e[e.length-1].time,this.endTime));this.update(0)}this.isPaused=!1;THREE.AnimationHandler.addToUpdate(this)};THREE.KeyFrameAnimation.prototype.pause=function(){this.isPaused?THREE.AnimationHandler.addToUpdate(this):THREE.AnimationHandler.removeFromUpdate(this);this.isPaused=!this.isPaused}; THREE.KeyFrameAnimation.prototype.stop=function(){this.isPaused=this.isPlaying=!1;THREE.AnimationHandler.removeFromUpdate(this);for(var a=0;a<this.data.hierarchy.length;a++){var b=this.hierarchy[a],c=this.data.hierarchy[a];if(void 0!==c.animationCache){var d=c.animationCache.originalMatrix;b instanceof THREE.Bone?(d.copy(b.skinMatrix),b.skinMatrix=d):(d.copy(b.matrix),b.matrix=d);delete c.animationCache}}}; THREE.KeyFrameAnimation.prototype.update=function(a){if(this.isPlaying){var b,c,d,e,f=this.data.JIT.hierarchy,g,h,j;h=this.currentTime+=a*this.timeScale;g=this.currentTime%=this.data.length;g<this.startTimeMs&&(g=this.currentTime=this.startTimeMs+g);e=parseInt(Math.min(g*this.data.fps,this.data.length*this.data.fps),10);if((j=g<h)&&!this.loop){a=0;for(var l=this.hierarchy.length;a<l;a++){var m=this.data.hierarchy[a].keys,f=this.data.hierarchy[a].sids;d=m.length-1;e=this.hierarchy[a];if(m.length){for(m= 0;m<f.length;m++)g=f[m],(h=this.getPrevKeyWith(g,a,d))&&h.apply(g);this.data.hierarchy[a].node.updateMatrix();e.matrixWorldNeedsUpdate=!0}}this.stop()}else if(!(g<this.startTime)){a=0;for(l=this.hierarchy.length;a<l;a++){d=this.hierarchy[a];b=this.data.hierarchy[a];var m=b.keys,q=b.animationCache;if(this.JITCompile&&void 0!==f[a][e])d instanceof THREE.Bone?(d.skinMatrix=f[a][e],d.matrixWorldNeedsUpdate=!1):(d.matrix=f[a][e],d.matrixWorldNeedsUpdate=!0);else if(m.length){this.JITCompile&&q&&(d instanceof THREE.Bone?d.skinMatrix=q.originalMatrix:d.matrix=q.originalMatrix);b=q.prevKey;c=q.nextKey;if(b&&c){if(c.time<=h){if(j&&this.loop){b=m[0];for(c=m[1];c.time<g;)b=c,c=m[b.index+1]}else if(!j)for(var p=m.length-1;c.time<g&&c.index!==p;)b=c,c=m[b.index+1];q.prevKey=b;q.nextKey=c}c.time>=g?b.interpolate(c,g):b.interpolate(c,c.time)}this.data.hierarchy[a].node.updateMatrix();d.matrixWorldNeedsUpdate=!0}}if(this.JITCompile&&void 0===f[0][e]){this.hierarchy[0].updateMatrixWorld(!0);for(a=0;a<this.hierarchy.length;a++)f[a][e]= this.hierarchy[a]instanceof THREE.Bone?this.hierarchy[a].skinMatrix.clone():this.hierarchy[a].matrix.clone()}}}};THREE.KeyFrameAnimation.prototype.getNextKeyWith=function(a,b,c){b=this.data.hierarchy[b].keys;for(c%=b.length;c<b.length;c++)if(b[c].hasTarget(a))return b[c];return b[0]};THREE.KeyFrameAnimation.prototype.getPrevKeyWith=function(a,b,c){b=this.data.hierarchy[b].keys;for(c=0<=c?c:c+b.length;0<=c;c--)if(b[c].hasTarget(a))return b[c];return b[b.length-1]};THREE.CubeCamera=function(a,b,c){THREE.Object3D.call(this);var d=new THREE.PerspectiveCamera(90,1,a,b);d.up.set(0,-1,0);d.lookAt(new THREE.Vector3(1,0,0));this.add(d);var e=new THREE.PerspectiveCamera(90,1,a,b);e.up.set(0,-1,0);e.lookAt(new THREE.Vector3(-1,0,0));this.add(e);var f=new THREE.PerspectiveCamera(90,1,a,b);f.up.set(0,0,1);f.lookAt(new THREE.Vector3(0,1,0));this.add(f);var g=new THREE.PerspectiveCamera(90,1,a,b);g.up.set(0,0,-1);g.lookAt(new THREE.Vector3(0,-1,0));this.add(g);var h=new THREE.PerspectiveCamera(90, 1,a,b);h.up.set(0,-1,0);h.lookAt(new THREE.Vector3(0,0,1));this.add(h);var j=new THREE.PerspectiveCamera(90,1,a,b);j.up.set(0,-1,0);j.lookAt(new THREE.Vector3(0,0,-1));this.add(j);this.renderTarget=new THREE.WebGLRenderTargetCube(c,c,{format:THREE.RGBFormat,magFilter:THREE.LinearFilter,minFilter:THREE.LinearFilter});this.updateCubeMap=function(a,b){var c=this.renderTarget,p=c.generateMipmaps;c.generateMipmaps=!1;c.activeCubeFace=0;a.render(b,d,c);c.activeCubeFace=1;a.render(b,e,c);c.activeCubeFace= 2;a.render(b,f,c);c.activeCubeFace=3;a.render(b,g,c);c.activeCubeFace=4;a.render(b,h,c);c.generateMipmaps=p;c.activeCubeFace=5;a.render(b,j,c)}};THREE.CubeCamera.prototype=Object.create(THREE.Object3D.prototype);THREE.CombinedCamera=function(a,b,c,d,e,f,g){THREE.Camera.call(this);this.fov=c;this.left=-a/2;this.right=a/2;this.top=b/2;this.bottom=-b/2;this.cameraO=new THREE.OrthographicCamera(a/-2,a/2,b/2,b/-2,f,g);this.cameraP=new THREE.PerspectiveCamera(c,a/b,d,e);this.zoom=1;this.toPerspective()};THREE.CombinedCamera.prototype=Object.create(THREE.Camera.prototype); THREE.CombinedCamera.prototype.toPerspective=function(){this.near=this.cameraP.near;this.far=this.cameraP.far;this.cameraP.fov=this.fov/this.zoom;this.cameraP.updateProjectionMatrix();this.projectionMatrix=this.cameraP.projectionMatrix;this.inPerspectiveMode=!0;this.inOrthographicMode=!1}; THREE.CombinedCamera.prototype.toOrthographic=function(){var a=this.cameraP.aspect,b=(this.cameraP.near+this.cameraP.far)/2,b=Math.tan(this.fov/2)*b,a=2*b*a/2,b=b/this.zoom,a=a/this.zoom;this.cameraO.left=-a;this.cameraO.right=a;this.cameraO.top=b;this.cameraO.bottom=-b;this.cameraO.updateProjectionMatrix();this.near=this.cameraO.near;this.far=this.cameraO.far;this.projectionMatrix=this.cameraO.projectionMatrix;this.inPerspectiveMode=!1;this.inOrthographicMode=!0}; THREE.CombinedCamera.prototype.setSize=function(a,b){this.cameraP.aspect=a/b;this.left=-a/2;this.right=a/2;this.top=b/2;this.bottom=-b/2};THREE.CombinedCamera.prototype.setFov=function(a){this.fov=a;this.inPerspectiveMode?this.toPerspective():this.toOrthographic()};THREE.CombinedCamera.prototype.updateProjectionMatrix=function(){this.inPerspectiveMode?this.toPerspective():(this.toPerspective(),this.toOrthographic())}; THREE.CombinedCamera.prototype.setLens=function(a,b){void 0===b&&(b=24);var c=2*THREE.Math.radToDeg(Math.atan(b/(2*a)));this.setFov(c);return c};THREE.CombinedCamera.prototype.setZoom=function(a){this.zoom=a;this.inPerspectiveMode?this.toPerspective():this.toOrthographic()};THREE.CombinedCamera.prototype.toFrontView=function(){this.rotation.x=0;this.rotation.y=0;this.rotation.z=0;this.rotationAutoUpdate=!1}; THREE.CombinedCamera.prototype.toBackView=function(){this.rotation.x=0;this.rotation.y=Math.PI;this.rotation.z=0;this.rotationAutoUpdate=!1};THREE.CombinedCamera.prototype.toLeftView=function(){this.rotation.x=0;this.rotation.y=-Math.PI/2;this.rotation.z=0;this.rotationAutoUpdate=!1};THREE.CombinedCamera.prototype.toRightView=function(){this.rotation.x=0;this.rotation.y=Math.PI/2;this.rotation.z=0;this.rotationAutoUpdate=!1}; THREE.CombinedCamera.prototype.toTopView=function(){this.rotation.x=-Math.PI/2;this.rotation.y=0;this.rotation.z=0;this.rotationAutoUpdate=!1};THREE.CombinedCamera.prototype.toBottomView=function(){this.rotation.x=Math.PI/2;this.rotation.y=0;this.rotation.z=0;this.rotationAutoUpdate=!1};THREE.AsteriskGeometry=function(a,b){THREE.Geometry.call(this);for(var c=0.707*a,d=0.707*b,c=[[a,0,0],[b,0,0],[-a,0,0],[-b,0,0],[0,a,0],[0,b,0],[0,-a,0],[0,-b,0],[0,0,a],[0,0,b],[0,0,-a],[0,0,-b],[c,c,0],[d,d,0],[-c,-c,0],[-d,-d,0],[c,-c,0],[d,-d,0],[-c,c,0],[-d,d,0],[c,0,c],[d,0,d],[-c,0,-c],[-d,0,-d],[c,0,-c],[d,0,-d],[-c,0,c],[-d,0,d],[0,c,c],[0,d,d],[0,-c,-c],[0,-d,-d],[0,c,-c],[0,d,-d],[0,-c,c],[0,-d,d]],d=0,e=c.length;d<e;d++)this.vertices.push(new THREE.Vector3(c[d][0],c[d][1],c[d][2]))}; THREE.AsteriskGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.CircleGeometry=function(a,b,c,d){THREE.Geometry.call(this);a=a||50;c=void 0!==c?c:0;d=void 0!==d?d:2*Math.PI;b=void 0!==b?Math.max(3,b):8;var e,f=[];e=new THREE.Vector3;var g=new THREE.Vector2(0.5,0.5);this.vertices.push(e);f.push(g);for(e=0;e<=b;e++){var h=new THREE.Vector3;h.x=a*Math.cos(c+e/b*d);h.y=a*Math.sin(c+e/b*d);this.vertices.push(h);f.push(new THREE.Vector2((h.x/a+1)/2,-(h.y/a+1)/2+1))}c=new THREE.Vector3(0,0,-1);for(e=1;e<=b;e++)this.faces.push(new THREE.Face3(e,e+1,0,[c,c,c])), this.faceVertexUvs[0].push([f[e],f[e+1],g]);this.computeCentroids();this.computeFaceNormals();this.boundingSphere=new THREE.Sphere(new THREE.Vector3,a)};THREE.CircleGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.CubeGeometry=function(a,b,c,d,e,f){function g(a,b,c,d,e,f,g,n){var s,x=h.widthSegments,v=h.heightSegments,A=e/2,u=f/2,L=h.vertices.length;if("x"===a&&"y"===b||"y"===a&&"x"===b)s="z";else if("x"===a&&"z"===b||"z"===a&&"x"===b)s="y",v=h.depthSegments;else if("z"===a&&"y"===b||"y"===a&&"z"===b)s="x",x=h.depthSegments;var H=x+1,C=v+1,z=e/x,E=f/v,D=new THREE.Vector3;D[s]=0<g?1:-1;for(e=0;e<C;e++)for(f=0;f<H;f++){var J=new THREE.Vector3;J[a]=(f*z-A)*c;J[b]=(e*E-u)*d;J[s]=g;h.vertices.push(J)}for(e= 0;e<v;e++)for(f=0;f<x;f++)a=new THREE.Face4(f+H*e+L,f+H*(e+1)+L,f+1+H*(e+1)+L,f+1+H*e+L),a.normal.copy(D),a.vertexNormals.push(D.clone(),D.clone(),D.clone(),D.clone()),a.materialIndex=n,h.faces.push(a),h.faceVertexUvs[0].push([new THREE.Vector2(f/x,1-e/v),new THREE.Vector2(f/x,1-(e+1)/v),new THREE.Vector2((f+1)/x,1-(e+1)/v),new THREE.Vector2((f+1)/x,1-e/v)])}THREE.Geometry.call(this);var h=this;this.width=a;this.height=b;this.depth=c;this.widthSegments=d||1;this.heightSegments=e||1;this.depthSegments= f||1;a=this.width/2;b=this.height/2;c=this.depth/2;g("z","y",-1,-1,this.depth,this.height,a,0);g("z","y",1,-1,this.depth,this.height,-a,1);g("x","z",1,1,this.width,this.depth,b,2);g("x","z",1,-1,this.width,this.depth,-b,3);g("x","y",1,-1,this.width,this.height,c,4);g("x","y",-1,-1,this.width,this.height,-c,5);this.computeCentroids();this.mergeVertices()};THREE.CubeGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.CylinderGeometry=function(a,b,c,d,e,f){THREE.Geometry.call(this);a=void 0!==a?a:20;b=void 0!==b?b:20;c=void 0!==c?c:100;var g=c/2;d=d||8;e=e||1;var h,j,l=[],m=[];for(j=0;j<=e;j++){var q=[],p=[],t=j/e,r=t*(b-a)+a;for(h=0;h<=d;h++){var n=h/d,s=new THREE.Vector3;s.x=r*Math.sin(2*n*Math.PI);s.y=-t*c+g;s.z=r*Math.cos(2*n*Math.PI);this.vertices.push(s);q.push(this.vertices.length-1);p.push(new THREE.Vector2(n,1-t))}l.push(q);m.push(p)}c=(b-a)/c;for(h=0;h<d;h++){0!==a?(q=this.vertices[l[0][h]].clone(), p=this.vertices[l[0][h+1]].clone()):(q=this.vertices[l[1][h]].clone(),p=this.vertices[l[1][h+1]].clone());q.setY(Math.sqrt(q.x*q.x+q.z*q.z)*c).normalize();p.setY(Math.sqrt(p.x*p.x+p.z*p.z)*c).normalize();for(j=0;j<e;j++){var t=l[j][h],r=l[j+1][h],n=l[j+1][h+1],s=l[j][h+1],x=q.clone(),v=q.clone(),A=p.clone(),u=p.clone(),L=m[j][h].clone(),H=m[j+1][h].clone(),C=m[j+1][h+1].clone(),z=m[j][h+1].clone();this.faces.push(new THREE.Face4(t,r,n,s,[x,v,A,u]));this.faceVertexUvs[0].push([L,H,C,z])}}if(!f&&0< a){this.vertices.push(new THREE.Vector3(0,g,0));for(h=0;h<d;h++)t=l[0][h],r=l[0][h+1],n=this.vertices.length-1,x=new THREE.Vector3(0,1,0),v=new THREE.Vector3(0,1,0),A=new THREE.Vector3(0,1,0),L=m[0][h].clone(),H=m[0][h+1].clone(),C=new THREE.Vector2(H.u,0),this.faces.push(new THREE.Face3(t,r,n,[x,v,A])),this.faceVertexUvs[0].push([L,H,C])}if(!f&&0<b){this.vertices.push(new THREE.Vector3(0,-g,0));for(h=0;h<d;h++)t=l[j][h+1],r=l[j][h],n=this.vertices.length-1,x=new THREE.Vector3(0,-1,0),v=new THREE.Vector3(0, -1,0),A=new THREE.Vector3(0,-1,0),L=m[j][h+1].clone(),H=m[j][h].clone(),C=new THREE.Vector2(H.u,1),this.faces.push(new THREE.Face3(t,r,n,[x,v,A])),this.faceVertexUvs[0].push([L,H,C])}this.computeCentroids();this.computeFaceNormals()};THREE.CylinderGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ExtrudeGeometry=function(a,b){"undefined"!==typeof a&&(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)}; THREE.ExtrudeGeometry.prototype.addShape=function(a,b){function c(a,b,c){b||console.log("die");return b.clone().multiplyScalar(c).addSelf(a)}function d(a,b,c){var d=THREE.ExtrudeGeometry.__v1,e=THREE.ExtrudeGeometry.__v2,f=THREE.ExtrudeGeometry.__v3,g=THREE.ExtrudeGeometry.__v4,j=THREE.ExtrudeGeometry.__v5,h=THREE.ExtrudeGeometry.__v6;d.set(a.x-b.x,a.y-b.y);e.set(a.x-c.x,a.y-c.y);d=d.normalize();e=e.normalize();f.set(-d.y,d.x);g.set(e.y,-e.x);j.copy(a).addSelf(f);h.copy(a).addSelf(g);if(j.equals(h))return g.clone(); j.copy(b).addSelf(f);h.copy(c).addSelf(g);f=d.dot(g);g=h.subSelf(j).dot(g);0===f&&(console.log("Either infinite or no solutions!"),0===g?console.log("Its finite solutions."):console.log("Too bad, no solutions."));g/=f;return 0>g?(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+=2*Math.PI),c=(b+a)/2,a=-Math.cos(c),c=-Math.sin(c),new THREE.Vector2(a,c)):d.multiplyScalar(g).addSelf(j).subSelf(a).clone()}function e(c,d){var e,f;for(M=c.length;0<=--M;){e=M;f=M-1;0>f&&(f=c.length-1); for(var g=0,j=t+2*m,g=0;g<j;g++){var h=T*g,l=T*(g+1),p=d+e+h,h=d+f+h,n=d+f+l,l=d+e+l,q=c,r=g,s=j,u=e,x=f,p=p+X,h=h+X,n=n+X,l=l+X;J.faces.push(new THREE.Face4(p,h,n,l,null,null,v));p=A.generateSideWallUV(J,a,q,b,p,h,n,l,r,s,u,x);J.faceVertexUvs[0].push(p)}}}function f(a,b,c){J.vertices.push(new THREE.Vector3(a,b,c))}function g(c,d,e,f){c+=X;d+=X;e+=X;J.faces.push(new THREE.Face3(c,d,e,null,null,x));c=f?A.generateBottomUV(J,a,b,c,d,e):A.generateTopUV(J,a,b,c,d,e);J.faceVertexUvs[0].push(c)}var h=void 0!== b.amount?b.amount:100,j=void 0!==b.bevelThickness?b.bevelThickness:6,l=void 0!==b.bevelSize?b.bevelSize:j-2,m=void 0!==b.bevelSegments?b.bevelSegments:3,q=void 0!==b.bevelEnabled?b.bevelEnabled:!0,p=void 0!==b.curveSegments?b.curveSegments:12,t=void 0!==b.steps?b.steps:1,r=b.extrudePath,n,s=!1,x=b.material,v=b.extrudeMaterial,A=void 0!==b.UVGenerator?b.UVGenerator:THREE.ExtrudeGeometry.WorldUVGenerator,u,L,H,C;r&&(n=r.getSpacedPoints(t),s=!0,q=!1,u=void 0!==b.frames?b.frames:new THREE.TubeGeometry.FrenetFrames(r, t,!1),L=new THREE.Vector3,H=new THREE.Vector3,C=new THREE.Vector3);q||(l=j=m=0);var z,E,D,J=this,X=this.vertices.length,p=a.extractPoints(p),G=p.shape,p=p.holes;if(r=!THREE.Shape.Utils.isClockWise(G)){G=G.reverse();E=0;for(D=p.length;E<D;E++)z=p[E],THREE.Shape.Utils.isClockWise(z)&&(p[E]=z.reverse());r=!1}var S=THREE.Shape.Utils.triangulateShape(G,p),r=G;E=0;for(D=p.length;E<D;E++)z=p[E],G=G.concat(z);var B,K,N,W,T=G.length,da=S.length,la=[],M=0,ja=r.length;B=ja-1;for(K=M+1;M<ja;M++,B++,K++)B===ja&& (B=0),K===ja&&(K=0),la[M]=d(r[M],r[B],r[K]);var ib=[],ha,Ka=la.concat();E=0;for(D=p.length;E<D;E++){z=p[E];ha=[];M=0;ja=z.length;B=ja-1;for(K=M+1;M<ja;M++,B++,K++)B===ja&&(B=0),K===ja&&(K=0),ha[M]=d(z[M],z[B],z[K]);ib.push(ha);Ka=Ka.concat(ha)}for(B=0;B<m;B++){z=B/m;N=j*(1-z);K=l*Math.sin(z*Math.PI/2);M=0;for(ja=r.length;M<ja;M++)W=c(r[M],la[M],K),f(W.x,W.y,-N);E=0;for(D=p.length;E<D;E++){z=p[E];ha=ib[E];M=0;for(ja=z.length;M<ja;M++)W=c(z[M],ha[M],K),f(W.x,W.y,-N)}}K=l;for(M=0;M<T;M++)W=q?c(G[M], Ka[M],K):G[M],s?(H.copy(u.normals[0]).multiplyScalar(W.x),L.copy(u.binormals[0]).multiplyScalar(W.y),C.copy(n[0]).addSelf(H).addSelf(L),f(C.x,C.y,C.z)):f(W.x,W.y,0);for(z=1;z<=t;z++)for(M=0;M<T;M++)W=q?c(G[M],Ka[M],K):G[M],s?(H.copy(u.normals[z]).multiplyScalar(W.x),L.copy(u.binormals[z]).multiplyScalar(W.y),C.copy(n[z]).addSelf(H).addSelf(L),f(C.x,C.y,C.z)):f(W.x,W.y,h/t*z);for(B=m-1;0<=B;B--){z=B/m;N=j*(1-z);K=l*Math.sin(z*Math.PI/2);M=0;for(ja=r.length;M<ja;M++)W=c(r[M],la[M],K),f(W.x,W.y,h+N); E=0;for(D=p.length;E<D;E++){z=p[E];ha=ib[E];M=0;for(ja=z.length;M<ja;M++)W=c(z[M],ha[M],K),s?f(W.x,W.y+n[t-1].y,n[t-1].x+N):f(W.x,W.y,h+N)}}if(q){j=0*T;for(M=0;M<da;M++)h=S[M],g(h[2]+j,h[1]+j,h[0]+j,!0);j=T*(t+2*m);for(M=0;M<da;M++)h=S[M],g(h[0]+j,h[1]+j,h[2]+j,!1)}else{for(M=0;M<da;M++)h=S[M],g(h[2],h[1],h[0],!0);for(M=0;M<da;M++)h=S[M],g(h[0]+T*t,h[1]+T*t,h[2]+T*t,!1)}h=0;e(r,h);h+=r.length;E=0;for(D=p.length;E<D;E++)z=p[E],e(z,h),h+=z.length}; THREE.ExtrudeGeometry.WorldUVGenerator={generateTopUV:function(a,b,c,d,e,f){b=a.vertices[e].x;e=a.vertices[e].y;c=a.vertices[f].x;f=a.vertices[f].y;return[new THREE.Vector2(a.vertices[d].x,a.vertices[d].y),new THREE.Vector2(b,e),new THREE.Vector2(c,f)]},generateBottomUV:function(a,b,c,d,e,f){return this.generateTopUV(a,b,c,d,e,f)},generateSideWallUV:function(a,b,c,d,e,f,g,h){b=a.vertices[e].x;c=a.vertices[e].y;e=a.vertices[e].z;d=a.vertices[f].x;var j=a.vertices[f].y;f=a.vertices[f].z;var l=a.vertices[g].x, m=a.vertices[g].y;g=a.vertices[g].z;var q=a.vertices[h].x,p=a.vertices[h].y;a=a.vertices[h].z;return 0.01>Math.abs(c-j)?[new THREE.Vector2(b,1-e),new THREE.Vector2(d,1-f),new THREE.Vector2(l,1-g),new THREE.Vector2(q,1-a)]:[new THREE.Vector2(c,1-e),new THREE.Vector2(j,1-f),new THREE.Vector2(m,1-g),new THREE.Vector2(p,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);!1===a instanceof Array&&(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}; THREE.ShapeGeometry.prototype.addShape=function(a,b){void 0===b&&(b={});var c=b.material,d=void 0===b.UVGenerator?THREE.ExtrudeGeometry.WorldUVGenerator:b.UVGenerator,e,f,g,h=this.vertices.length;e=a.extractPoints(void 0!==b.curveSegments?b.curveSegments:12);var j=e.shape,l=e.holes;if(!THREE.Shape.Utils.isClockWise(j)){j=j.reverse();e=0;for(f=l.length;e<f;e++)g=l[e],THREE.Shape.Utils.isClockWise(g)&&(l[e]=g.reverse())}var m=THREE.Shape.Utils.triangulateShape(j,l);e=0;for(f=l.length;e<f;e++)g=l[e], j=j.concat(g);l=j.length;f=m.length;for(e=0;e<l;e++)g=j[e],this.vertices.push(new THREE.Vector3(g.x,g.y,0));for(e=0;e<f;e++)l=m[e],j=l[0]+h,g=l[1]+h,l=l[2]+h,this.faces.push(new THREE.Face3(j,g,l,null,null,c)),this.faceVertexUvs[0].push(d.generateBottomUV(this,a,b,j,g,l))};THREE.LatheGeometry=function(a,b,c){THREE.Geometry.call(this);b=b||12;c=c||2*Math.PI;for(var d=[],e=(new THREE.Matrix4).makeRotationZ(c/b),f=0;f<a.length;f++)d[f]=a[f].clone(),this.vertices.push(d[f]);var g=b+1;for(c=0;c<g;c++)for(f=0;f<d.length;f++)d[f]=e.multiplyVector3(d[f].clone()),this.vertices.push(d[f]);for(c=0;c<b;c++){d=0;for(e=a.length;d<e-1;d++)this.faces.push(new THREE.Face4(c*e+d,(c+1)%g*e+d,(c+1)%g*e+(d+1)%e,c*e+(d+1)%e)),this.faceVertexUvs[0].push([new THREE.Vector2(1-c/b,d/e),new THREE.Vector2(1- (c+1)/b,d/e),new THREE.Vector2(1-(c+1)/b,(d+1)/e),new THREE.Vector2(1-c/b,(d+1)/e)])}this.computeCentroids();this.computeFaceNormals();this.computeVertexNormals()};THREE.LatheGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.PlaneGeometry=function(a,b,c,d){THREE.Geometry.call(this);this.width=a;this.height=b;this.widthSegments=c||1;this.heightSegments=d||1;c=a/2;var e=b/2;d=this.widthSegments;var f=this.heightSegments,g=d+1,h=f+1,j=this.width/d,l=this.height/f,m=new THREE.Vector3(0,0,1);for(a=0;a<h;a++)for(b=0;b<g;b++)this.vertices.push(new THREE.Vector3(b*j-c,-(a*l-e),0));for(a=0;a<f;a++)for(b=0;b<d;b++)c=new THREE.Face4(b+g*a,b+g*(a+1),b+1+g*(a+1),b+1+g*a),c.normal.copy(m),c.vertexNormals.push(m.clone(),m.clone(), m.clone(),m.clone()),this.faces.push(c),this.faceVertexUvs[0].push([new THREE.Vector2(b/d,1-a/f),new THREE.Vector2(b/d,1-(a+1)/f),new THREE.Vector2((b+1)/d,1-(a+1)/f),new THREE.Vector2((b+1)/d,1-a/f)]);this.computeCentroids()};THREE.PlaneGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.SphereGeometry=function(a,b,c,d,e,f,g){THREE.Geometry.call(this);this.radius=a||50;this.widthSegments=Math.max(3,Math.floor(b)||8);this.heightSegments=Math.max(2,Math.floor(c)||6);d=void 0!==d?d:0;e=void 0!==e?e:2*Math.PI;f=void 0!==f?f:0;g=void 0!==g?g:Math.PI;var h=[],j=[];for(c=0;c<=this.heightSegments;c++){var l=[],m=[];for(b=0;b<=this.widthSegments;b++){var q=b/this.widthSegments,p=c/this.heightSegments,t=new THREE.Vector3;t.x=-this.radius*Math.cos(d+q*e)*Math.sin(f+p*g);t.y=this.radius* Math.cos(f+p*g);t.z=this.radius*Math.sin(d+q*e)*Math.sin(f+p*g);this.vertices.push(t);l.push(this.vertices.length-1);m.push(new THREE.Vector2(q,1-p))}h.push(l);j.push(m)}for(c=0;c<this.heightSegments;c++)for(b=0;b<this.widthSegments;b++){d=h[c][b+1];e=h[c][b];f=h[c+1][b];g=h[c+1][b+1];var l=this.vertices[d].clone().normalize(),m=this.vertices[e].clone().normalize(),q=this.vertices[f].clone().normalize(),p=this.vertices[g].clone().normalize(),t=j[c][b+1].clone(),r=j[c][b].clone(),n=j[c+1][b].clone(), s=j[c+1][b+1].clone();Math.abs(this.vertices[d].y)===this.radius?(this.faces.push(new THREE.Face3(d,f,g,[l,q,p])),this.faceVertexUvs[0].push([t,n,s])):Math.abs(this.vertices[f].y)===this.radius?(this.faces.push(new THREE.Face3(d,e,f,[l,m,q])),this.faceVertexUvs[0].push([t,r,n])):(this.faces.push(new THREE.Face4(d,e,f,g,[l,m,q,p])),this.faceVertexUvs[0].push([t,r,n,s]))}this.computeCentroids();this.computeFaceNormals();this.boundingSphere=new THREE.Sphere(new THREE.Vector3,a)}; THREE.SphereGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.TextGeometry=function(a,b){var c=THREE.FontUtils.generateShapes(a,b);b.amount=void 0!==b.height?b.height:50;void 0===b.bevelThickness&&(b.bevelThickness=10);void 0===b.bevelSize&&(b.bevelSize=8);void 0===b.bevelEnabled&&(b.bevelEnabled=!1);THREE.ExtrudeGeometry.call(this,c,b)};THREE.TextGeometry.prototype=Object.create(THREE.ExtrudeGeometry.prototype);THREE.TorusGeometry=function(a,b,c,d,e){THREE.Geometry.call(this);this.radius=a||100;this.tube=b||40;this.radialSegments=c||8;this.tubularSegments=d||6;this.arc=e||2*Math.PI;e=new THREE.Vector3;a=[];b=[];for(c=0;c<=this.radialSegments;c++)for(d=0;d<=this.tubularSegments;d++){var f=d/this.tubularSegments*this.arc,g=2*c/this.radialSegments*Math.PI;e.x=this.radius*Math.cos(f);e.y=this.radius*Math.sin(f);var h=new THREE.Vector3;h.x=(this.radius+this.tube*Math.cos(g))*Math.cos(f);h.y=(this.radius+this.tube* Math.cos(g))*Math.sin(f);h.z=this.tube*Math.sin(g);this.vertices.push(h);a.push(new THREE.Vector2(d/this.tubularSegments,c/this.radialSegments));b.push(h.clone().subSelf(e).normalize())}for(c=1;c<=this.radialSegments;c++)for(d=1;d<=this.tubularSegments;d++){e=(this.tubularSegments+1)*c+d-1;var f=(this.tubularSegments+1)*(c-1)+d-1,g=(this.tubularSegments+1)*(c-1)+d,h=(this.tubularSegments+1)*c+d,j=new THREE.Face4(e,f,g,h,[b[e],b[f],b[g],b[h]]);j.normal.addSelf(b[e]);j.normal.addSelf(b[f]);j.normal.addSelf(b[g]); j.normal.addSelf(b[h]);j.normal.normalize();this.faces.push(j);this.faceVertexUvs[0].push([a[e].clone(),a[f].clone(),a[g].clone(),a[h].clone()])}this.computeCentroids()};THREE.TorusGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.TorusKnotGeometry=function(a,b,c,d,e,f,g){function h(a,b,c,d,e,f){var g=Math.cos(a);Math.cos(b);b=Math.sin(a);a*=c/d;c=Math.cos(a);g*=0.5*e*(2+c);b=0.5*e*(2+c)*b;e=0.5*f*e*Math.sin(a);return new THREE.Vector3(g,b,e)}THREE.Geometry.call(this);this.radius=a||100;this.tube=b||40;this.radialSegments=c||64;this.tubularSegments=d||8;this.p=e||2;this.q=f||3;this.heightScale=g||1;this.grid=Array(this.radialSegments);c=new THREE.Vector3;d=new THREE.Vector3;e=new THREE.Vector3;for(a=0;a<this.radialSegments;++a){this.grid[a]= Array(this.tubularSegments);for(b=0;b<this.tubularSegments;++b){var j=2*(a/this.radialSegments)*this.p*Math.PI;g=2*(b/this.tubularSegments)*Math.PI;f=h(j,g,this.q,this.p,this.radius,this.heightScale);j=h(j+0.01,g,this.q,this.p,this.radius,this.heightScale);c.sub(j,f);d.add(j,f);e.cross(c,d);d.cross(e,c);e.normalize();d.normalize();j=-this.tube*Math.cos(g);g=this.tube*Math.sin(g);f.x+=j*d.x+g*e.x;f.y+=j*d.y+g*e.y;f.z+=j*d.z+g*e.z;this.grid[a][b]=this.vertices.push(new THREE.Vector3(f.x,f.y,f.z))-1}}for(a= 0;a<this.radialSegments;++a)for(b=0;b<this.tubularSegments;++b){e=(a+1)%this.radialSegments;f=(b+1)%this.tubularSegments;c=this.grid[a][b];d=this.grid[e][b];e=this.grid[e][f];f=this.grid[a][f];g=new THREE.Vector2(a/this.radialSegments,b/this.tubularSegments);var j=new THREE.Vector2((a+1)/this.radialSegments,b/this.tubularSegments),l=new THREE.Vector2((a+1)/this.radialSegments,(b+1)/this.tubularSegments),m=new THREE.Vector2(a/this.radialSegments,(b+1)/this.tubularSegments);this.faces.push(new THREE.Face4(c, d,e,f));this.faceVertexUvs[0].push([g,j,l,m])}this.computeCentroids();this.computeFaceNormals();this.computeVertexNormals()};THREE.TorusKnotGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.TubeGeometry=function(a,b,c,d,e,f){THREE.Geometry.call(this);this.path=a;this.segments=b||64;this.radius=c||1;this.radiusSegments=d||8;this.closed=e||!1;f&&(this.debug=new THREE.Object3D);this.grid=[];var g,h;e=this.segments+1;var j,l,m;f=new THREE.Vector3;var q,p,t;b=new THREE.TubeGeometry.FrenetFrames(this.path,this.segments,this.closed);q=b.tangents;p=b.normals;t=b.binormals;this.tangents=q;this.normals=p;this.binormals=t;for(b=0;b<e;b++){this.grid[b]=[];d=b/(e-1);m=a.getPointAt(d);d=q[b]; g=p[b];h=t[b];this.debug&&(this.debug.add(new THREE.ArrowHelper(d,m,c,255)),this.debug.add(new THREE.ArrowHelper(g,m,c,16711680)),this.debug.add(new THREE.ArrowHelper(h,m,c,65280)));for(d=0;d<this.radiusSegments;d++)j=2*(d/this.radiusSegments)*Math.PI,l=-this.radius*Math.cos(j),j=this.radius*Math.sin(j),f.copy(m),f.x+=l*g.x+j*h.x,f.y+=l*g.y+j*h.y,f.z+=l*g.z+j*h.z,this.grid[b][d]=this.vertices.push(new THREE.Vector3(f.x,f.y,f.z))-1}for(b=0;b<this.segments;b++)for(d=0;d<this.radiusSegments;d++)e=this.closed? (b+1)%this.segments:b+1,f=(d+1)%this.radiusSegments,a=this.grid[b][d],c=this.grid[e][d],e=this.grid[e][f],f=this.grid[b][f],q=new THREE.Vector2(b/this.segments,d/this.radiusSegments),p=new THREE.Vector2((b+1)/this.segments,d/this.radiusSegments),t=new THREE.Vector2((b+1)/this.segments,(d+1)/this.radiusSegments),g=new THREE.Vector2(b/this.segments,(d+1)/this.radiusSegments),this.faces.push(new THREE.Face4(a,c,e,f)),this.faceVertexUvs[0].push([q,p,t,g]);this.computeCentroids();this.computeFaceNormals(); this.computeVertexNormals()};THREE.TubeGeometry.prototype=Object.create(THREE.Geometry.prototype); THREE.TubeGeometry.FrenetFrames=function(a,b,c){new THREE.Vector3;var d=new THREE.Vector3;new THREE.Vector3;var e=[],f=[],g=[],h=new THREE.Vector3,j=new THREE.Matrix4;b+=1;var l,m,q;this.tangents=e;this.normals=f;this.binormals=g;for(l=0;l<b;l++)m=l/(b-1),e[l]=a.getTangentAt(m),e[l].normalize();f[0]=new THREE.Vector3;g[0]=new THREE.Vector3;a=Number.MAX_VALUE;l=Math.abs(e[0].x);m=Math.abs(e[0].y);q=Math.abs(e[0].z);l<=a&&(a=l,d.set(1,0,0));m<=a&&(a=m,d.set(0,1,0));q<=a&&d.set(0,0,1);h.cross(e[0],d).normalize(); f[0].cross(e[0],h);g[0].cross(e[0],f[0]);for(l=1;l<b;l++)f[l]=f[l-1].clone(),g[l]=g[l-1].clone(),h.cross(e[l-1],e[l]),1E-4<h.length()&&(h.normalize(),d=Math.acos(e[l-1].dot(e[l])),j.makeRotationAxis(h,d).multiplyVector3(f[l])),g[l].cross(e[l],f[l]);if(c){d=Math.acos(f[0].dot(f[b-1]));d/=b-1;0<e[0].dot(h.cross(f[0],f[b-1]))&&(d=-d);for(l=1;l<b;l++)j.makeRotationAxis(e[l],d*l).multiplyVector3(f[l]),g[l].cross(e[l],f[l])}};THREE.PolyhedronGeometry=function(a,b,c,d){function e(a){var b=a.normalize().clone();b.index=j.vertices.push(b)-1;var c=Math.atan2(a.z,-a.x)/2/Math.PI+0.5;a=Math.atan2(-a.y,Math.sqrt(a.x*a.x+a.z*a.z))/Math.PI+0.5;b.uv=new THREE.Vector2(c,1-a);return b}function f(a,b,c,d){1>d?(d=new THREE.Face3(a.index,b.index,c.index,[a.clone(),b.clone(),c.clone()]),d.centroid.addSelf(a).addSelf(b).addSelf(c).divideScalar(3),d.normal=d.centroid.clone().normalize(),j.faces.push(d),d=Math.atan2(d.centroid.z,-d.centroid.x), j.faceVertexUvs[0].push([h(a.uv,a,d),h(b.uv,b,d),h(c.uv,c,d)])):(d-=1,f(a,g(a,b),g(a,c),d),f(g(a,b),b,g(b,c),d),f(g(a,c),g(b,c),c,d),f(g(a,b),g(b,c),g(a,c),d))}function g(a,b){q[a.index]||(q[a.index]=[]);q[b.index]||(q[b.index]=[]);var c=q[a.index][b.index];void 0===c&&(q[a.index][b.index]=q[b.index][a.index]=c=e((new THREE.Vector3).add(a,b).divideScalar(2)));return c}function h(a,b,c){0>c&&1===a.x&&(a=new THREE.Vector2(a.x-1,a.y));0===b.x&&0===b.z&&(a=new THREE.Vector2(c/2/Math.PI+0.5,a.y));return a} THREE.Geometry.call(this);c=c||1;d=d||0;for(var j=this,l=0,m=a.length;l<m;l++)e(new THREE.Vector3(a[l][0],a[l][1],a[l][2]));var q=[];a=this.vertices;l=0;for(m=b.length;l<m;l++)f(a[b[l][0]],a[b[l][1]],a[b[l][2]],d);this.mergeVertices();l=0;for(m=this.vertices.length;l<m;l++)this.vertices[l].multiplyScalar(c);this.computeCentroids();this.boundingSphere=new THREE.Sphere(new THREE.Vector3,c)};THREE.PolyhedronGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.IcosahedronGeometry=function(a,b){var c=(1+Math.sqrt(5))/2;THREE.PolyhedronGeometry.call(this,[[-1,c,0],[1,c,0],[-1,-c,0],[1,-c,0],[0,-1,c],[0,1,c],[0,-1,-c],[0,1,-c],[c,0,-1],[c,0,1],[-c,0,-1],[-c,0,1]],[[0,11,5],[0,5,1],[0,1,7],[0,7,10],[0,10,11],[1,5,9],[5,11,4],[11,10,2],[10,7,6],[7,1,8],[3,9,4],[3,4,2],[3,2,6],[3,6,8],[3,8,9],[4,9,5],[2,4,11],[6,2,10],[8,6,7],[9,8,1]],a,b)};THREE.IcosahedronGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.OctahedronGeometry=function(a,b){THREE.PolyhedronGeometry.call(this,[[1,0,0],[-1,0,0],[0,1,0],[0,-1,0],[0,0,1],[0,0,-1]],[[0,2,4],[0,4,3],[0,3,5],[0,5,2],[1,2,5],[1,5,3],[1,3,4],[1,4,2]],a,b)};THREE.OctahedronGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.TetrahedronGeometry=function(a,b){THREE.PolyhedronGeometry.call(this,[[1,1,1],[-1,-1,1],[-1,1,-1],[1,-1,-1]],[[2,1,0],[0,3,2],[1,3,0],[2,3,1]],a,b)};THREE.TetrahedronGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ParametricGeometry=function(a,b,c,d){THREE.Geometry.call(this);var e=this.vertices,f=this.faces,g=this.faceVertexUvs[0];d=void 0===d?!1:d;var h,j,l,m,q=b+1;for(h=0;h<=c;h++){m=h/c;for(j=0;j<=b;j++)l=j/b,l=a(l,m),e.push(l)}var p,t,r,n;for(h=0;h<c;h++)for(j=0;j<b;j++)a=h*q+j,e=h*q+j+1,m=(h+1)*q+j,l=(h+1)*q+j+1,p=new THREE.Vector2(j/b,h/c),t=new THREE.Vector2((j+1)/b,h/c),r=new THREE.Vector2(j/b,(h+1)/c),n=new THREE.Vector2((j+1)/b,(h+1)/c),d?(f.push(new THREE.Face3(a,e,m)),f.push(new THREE.Face3(e, l,m)),g.push([p,t,r]),g.push([t,n,r])):(f.push(new THREE.Face4(a,e,l,m)),g.push([p,t,n,r]));this.computeCentroids();this.computeFaceNormals();this.computeVertexNormals()};THREE.ParametricGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ConvexGeometry=function(a){function b(a){var b=a.length();return new THREE.Vector2(a.x/b,a.y/b)}THREE.Geometry.call(this);for(var c=[[0,1,2],[0,2,1]],d=3;d<a.length;d++){var e=d,f=a[e].clone(),g=f.length();f.x+=g*2E-6*(Math.random()-0.5);f.y+=g*2E-6*(Math.random()-0.5);f.z+=g*2E-6*(Math.random()-0.5);for(var g=[],h=0;h<c.length;){var j=c[h],l=f,m=a[j[0]],q;q=m;var p=a[j[1]],t=a[j[2]],r=new THREE.Vector3,n=new THREE.Vector3;r.sub(t,p);n.sub(q,p);r.crossSelf(n);r.normalize();q=r;m=q.dot(m);if(q.dot(l)>= m){for(l=0;3>l;l++){m=[j[l],j[(l+1)%3]];q=!0;for(p=0;p<g.length;p++)if(g[p][0]===m[1]&&g[p][1]===m[0]){g[p]=g[g.length-1];g.pop();q=!1;break}q&&g.push(m)}c[h]=c[c.length-1];c.pop()}else h++}for(p=0;p<g.length;p++)c.push([g[p][0],g[p][1],e])}e=0;f=Array(a.length);for(d=0;d<c.length;d++){g=c[d];for(h=0;3>h;h++)void 0===f[g[h]]&&(f[g[h]]=e++,this.vertices.push(a[g[h]])),g[h]=f[g[h]]}for(d=0;d<c.length;d++)this.faces.push(new THREE.Face3(c[d][0],c[d][1],c[d][2]));for(d=0;d<this.faces.length;d++)g=this.faces[d], this.faceVertexUvs[0].push([b(this.vertices[g.a]),b(this.vertices[g.b]),b(this.vertices[g.c])]);this.computeCentroids();this.computeFaceNormals();this.computeVertexNormals()};THREE.ConvexGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.AxisHelper=function(a){var b=new THREE.Geometry;b.vertices.push(new THREE.Vector3,new THREE.Vector3(a||1,0,0),new THREE.Vector3,new THREE.Vector3(0,a||1,0),new THREE.Vector3,new THREE.Vector3(0,0,a||1));b.colors.push(new THREE.Color(16711680),new THREE.Color(16755200),new THREE.Color(65280),new THREE.Color(11206400),new THREE.Color(255),new THREE.Color(43775));a=new THREE.LineBasicMaterial({vertexColors:THREE.VertexColors});THREE.Line.call(this,b,a,THREE.LinePieces)}; THREE.AxisHelper.prototype=Object.create(THREE.Line.prototype);THREE.ArrowHelper=function(a,b,c,d){THREE.Object3D.call(this);void 0===d&&(d=16776960);void 0===c&&(c=20);var e=new THREE.Geometry;e.vertices.push(new THREE.Vector3(0,0,0));e.vertices.push(new THREE.Vector3(0,1,0));this.line=new THREE.Line(e,new THREE.LineBasicMaterial({color:d}));this.add(this.line);e=new THREE.CylinderGeometry(0,0.05,0.25,5,1);this.cone=new THREE.Mesh(e,new THREE.MeshBasicMaterial({color:d}));this.cone.position.set(0,1,0);this.add(this.cone);b instanceof THREE.Vector3&&(this.position= b);this.setDirection(a);this.setLength(c)};THREE.ArrowHelper.prototype=Object.create(THREE.Object3D.prototype);THREE.ArrowHelper.prototype.setDirection=function(a){var b=(new THREE.Vector3(0,1,0)).crossSelf(a);a=Math.acos((new THREE.Vector3(0,1,0)).dot(a.clone().normalize()));this.matrix=(new THREE.Matrix4).makeRotationAxis(b.normalize(),a);this.rotation.setEulerFromRotationMatrix(this.matrix,this.eulerOrder)};THREE.ArrowHelper.prototype.setLength=function(a){this.scale.set(a,a,a)}; THREE.ArrowHelper.prototype.setColor=function(a){this.line.material.color.setHex(a);this.cone.material.color.setHex(a)};THREE.CameraHelper=function(a){function b(a,b,d){c(a,d);c(b,d)}function c(a,b){d.geometry.vertices.push(new THREE.Vector3);d.geometry.colors.push(new THREE.Color(b));void 0===d.pointMap[a]&&(d.pointMap[a]=[]);d.pointMap[a].push(d.geometry.vertices.length-1)}THREE.Line.call(this);var d=this;this.geometry=new THREE.Geometry;this.material=new THREE.LineBasicMaterial({color:16777215,vertexColors:THREE.FaceColors});this.type=THREE.LinePieces;this.matrixWorld=a.matrixWorld;this.matrixAutoUpdate=!1;this.pointMap= {};b("n1","n2",16755200);b("n2","n4",16755200);b("n4","n3",16755200);b("n3","n1",16755200);b("f1","f2",16755200);b("f2","f4",16755200);b("f4","f3",16755200);b("f3","f1",16755200);b("n1","f1",16755200);b("n2","f2",16755200);b("n3","f3",16755200);b("n4","f4",16755200);b("p","n1",16711680);b("p","n2",16711680);b("p","n3",16711680);b("p","n4",16711680);b("u1","u2",43775);b("u2","u3",43775);b("u3","u1",43775);b("c","t",16777215);b("p","c",3355443);b("cn1","cn2",3355443);b("cn3","cn4",3355443);b("cf1", "cf2",3355443);b("cf3","cf4",3355443);this.camera=a;this.update(a)};THREE.CameraHelper.prototype=Object.create(THREE.Line.prototype); THREE.CameraHelper.prototype.update=function(){function a(a,d,e,f){THREE.CameraHelper.__v.set(d,e,f);THREE.CameraHelper.__projector.unprojectVector(THREE.CameraHelper.__v,THREE.CameraHelper.__c);a=b.pointMap[a];if(void 0!==a){d=0;for(e=a.length;d<e;d++)b.geometry.vertices[a[d]].copy(THREE.CameraHelper.__v)}}var b=this;THREE.CameraHelper.__c.projectionMatrix.copy(this.camera.projectionMatrix);a("c",0,0,-1);a("t",0,0,1);a("n1",-1,-1,-1);a("n2",1,-1,-1);a("n3",-1,1,-1);a("n4",1,1,-1);a("f1",-1,-1,1); a("f2",1,-1,1);a("f3",-1,1,1);a("f4",1,1,1);a("u1",0.7,1.1,-1);a("u2",-0.7,1.1,-1);a("u3",0,2,-1);a("cf1",-1,0,1);a("cf2",1,0,1);a("cf3",0,-1,1);a("cf4",0,1,1);a("cn1",-1,0,-1);a("cn2",1,0,-1);a("cn3",0,-1,-1);a("cn4",0,1,-1);this.geometry.verticesNeedUpdate=!0};THREE.CameraHelper.__projector=new THREE.Projector;THREE.CameraHelper.__v=new THREE.Vector3;THREE.CameraHelper.__c=new THREE.Camera;THREE.DirectionalLightHelper=function(a,b,c){THREE.Object3D.call(this);this.light=a;this.position=a.position;this.direction=new THREE.Vector3;this.direction.sub(a.target.position,a.position);this.color=a.color.clone();var d=THREE.Math.clamp(a.intensity,0,1);this.color.r*=d;this.color.g*=d;this.color.b*=d;var d=this.color.getHex(),e=new THREE.SphereGeometry(b,16,8),f=new THREE.AsteriskGeometry(1.25*b,2.25*b),g=new THREE.MeshBasicMaterial({color:d,fog:!1}),h=new THREE.LineBasicMaterial({color:d,fog:!1}); this.lightArrow=new THREE.ArrowHelper(this.direction,null,c,d);this.lightSphere=new THREE.Mesh(e,g);this.lightArrow.cone.material.fog=!1;this.lightArrow.line.material.fog=!1;this.lightRays=new THREE.Line(f,h,THREE.LinePieces);this.add(this.lightArrow);this.add(this.lightSphere);this.add(this.lightRays);this.lightSphere.properties.isGizmo=!0;this.lightSphere.properties.gizmoSubject=a;this.lightSphere.properties.gizmoRoot=this;this.targetSphere=null;a.target.properties.targetInverse&&(b=new THREE.SphereGeometry(b, 8,4),c=new THREE.MeshBasicMaterial({color:d,wireframe:!0,fog:!1}),this.targetSphere=new THREE.Mesh(b,c),this.targetSphere.position=a.target.position,this.targetSphere.properties.isGizmo=!0,this.targetSphere.properties.gizmoSubject=a.target,this.targetSphere.properties.gizmoRoot=this.targetSphere,a=new THREE.LineDashedMaterial({color:d,dashSize:4,gapSize:4,opacity:0.75,transparent:!0,fog:!1}),d=new THREE.Geometry,d.vertices.push(this.position.clone()),d.vertices.push(this.targetSphere.position.clone()), d.computeLineDistances(),this.targetLine=new THREE.Line(d,a),this.targetLine.properties.isGizmo=!0);this.properties.isGizmo=!0};THREE.DirectionalLightHelper.prototype=Object.create(THREE.Object3D.prototype); THREE.DirectionalLightHelper.prototype.update=function(){this.direction.sub(this.light.target.position,this.light.position);this.lightArrow.setDirection(this.direction);this.color.copy(this.light.color);var a=THREE.Math.clamp(this.light.intensity,0,1);this.color.r*=a;this.color.g*=a;this.color.b*=a;this.lightArrow.setColor(this.color.getHex());this.lightSphere.material.color.copy(this.color);this.lightRays.material.color.copy(this.color);this.targetSphere.material.color.copy(this.color);this.targetLine.material.color.copy(this.color); this.targetLine.geometry.vertices[0].copy(this.light.position);this.targetLine.geometry.vertices[1].copy(this.light.target.position);this.targetLine.geometry.computeLineDistances();this.targetLine.geometry.verticesNeedUpdate=!0};THREE.HemisphereLightHelper=function(a,b,c){THREE.Object3D.call(this);this.light=a;this.position=a.position;var d=THREE.Math.clamp(a.intensity,0,1);this.color=a.color.clone();this.color.r*=d;this.color.g*=d;this.color.b*=d;var e=this.color.getHex();this.groundColor=a.groundColor.clone();this.groundColor.r*=d;this.groundColor.g*=d;this.groundColor.b*=d;for(var d=this.groundColor.getHex(),f=new THREE.SphereGeometry(b,16,8,0,2*Math.PI,0,0.5*Math.PI),g=new THREE.SphereGeometry(b,16,8,0,2*Math.PI,0.5* Math.PI,Math.PI),h=new THREE.MeshBasicMaterial({color:e,fog:!1}),j=new THREE.MeshBasicMaterial({color:d,fog:!1}),l=0,m=f.faces.length;l<m;l++)f.faces[l].materialIndex=0;l=0;for(m=g.faces.length;l<m;l++)g.faces[l].materialIndex=1;THREE.GeometryUtils.merge(f,g);this.lightSphere=new THREE.Mesh(f,new THREE.MeshFaceMaterial([h,j]));this.lightArrow=new THREE.ArrowHelper(new THREE.Vector3(0,1,0),new THREE.Vector3(0,1.1*(b+c),0),c,e);this.lightArrow.rotation.x=Math.PI;this.lightArrowGround=new THREE.ArrowHelper(new THREE.Vector3(0, 1,0),new THREE.Vector3(0,-1.1*(b+c),0),c,d);b=new THREE.Object3D;b.rotation.x=0.5*-Math.PI;b.add(this.lightSphere);b.add(this.lightArrow);b.add(this.lightArrowGround);this.add(b);this.lightSphere.properties.isGizmo=!0;this.lightSphere.properties.gizmoSubject=a;this.lightSphere.properties.gizmoRoot=this;this.properties.isGizmo=!0;this.target=new THREE.Vector3;this.lookAt(this.target)};THREE.HemisphereLightHelper.prototype=Object.create(THREE.Object3D.prototype); THREE.HemisphereLightHelper.prototype.update=function(){var a=THREE.Math.clamp(this.light.intensity,0,1);this.color.copy(this.light.color);this.groundColor.copy(this.light.groundColor);this.color.r*=a;this.color.g*=a;this.color.b*=a;this.groundColor.r*=a;this.groundColor.g*=a;this.groundColor.b*=a;this.lightSphere.material.materials[0].color.copy(this.color);this.lightSphere.material.materials[1].color.copy(this.groundColor);this.lightArrow.setColor(this.color.getHex());this.lightArrowGround.setColor(this.groundColor.getHex()); this.lookAt(this.target)};THREE.PointLightHelper=function(a,b){THREE.Object3D.call(this);this.light=a;this.position=a.position;this.color=a.color.clone();var c=THREE.Math.clamp(a.intensity,0,1);this.color.r*=c;this.color.g*=c;this.color.b*=c;var d=this.color.getHex(),c=new THREE.SphereGeometry(b,16,8),e=new THREE.AsteriskGeometry(1.25*b,2.25*b),f=new THREE.IcosahedronGeometry(1,2),g=new THREE.MeshBasicMaterial({color:d,fog:!1}),h=new THREE.LineBasicMaterial({color:d,fog:!1}),d=new THREE.MeshBasicMaterial({color:d,fog:!1,wireframe:!0, opacity:0.1,transparent:!0});this.lightSphere=new THREE.Mesh(c,g);this.lightRays=new THREE.Line(e,h,THREE.LinePieces);this.lightDistance=new THREE.Mesh(f,d);c=a.distance;0===c?this.lightDistance.visible=!1:this.lightDistance.scale.set(c,c,c);this.add(this.lightSphere);this.add(this.lightRays);this.add(this.lightDistance);this.lightSphere.properties.isGizmo=!0;this.lightSphere.properties.gizmoSubject=a;this.lightSphere.properties.gizmoRoot=this;this.properties.isGizmo=!0}; THREE.PointLightHelper.prototype=Object.create(THREE.Object3D.prototype); THREE.PointLightHelper.prototype.update=function(){this.color.copy(this.light.color);var a=THREE.Math.clamp(this.light.intensity,0,1);this.color.r*=a;this.color.g*=a;this.color.b*=a;this.lightSphere.material.color.copy(this.color);this.lightRays.material.color.copy(this.color);this.lightDistance.material.color.copy(this.color);a=this.light.distance;0===a?this.lightDistance.visible=!1:(this.lightDistance.visible=!0,this.lightDistance.scale.set(a,a,a))};THREE.SpotLightHelper=function(a,b,c){THREE.Object3D.call(this);this.light=a;this.position=a.position;this.direction=new THREE.Vector3;this.direction.sub(a.target.position,a.position);this.color=a.color.clone();var d=THREE.Math.clamp(a.intensity,0,1);this.color.r*=d;this.color.g*=d;this.color.b*=d;var d=this.color.getHex(),e=new THREE.SphereGeometry(b,16,8),f=new THREE.AsteriskGeometry(1.25*b,2.25*b),g=new THREE.CylinderGeometry(1E-4,1,1,8,1,!0),h=new THREE.Matrix4;h.rotateX(-Math.PI/2);h.translate(new THREE.Vector3(0, -0.5,0));g.applyMatrix(h);var j=new THREE.MeshBasicMaterial({color:d,fog:!1}),h=new THREE.LineBasicMaterial({color:d,fog:!1}),l=new THREE.MeshBasicMaterial({color:d,fog:!1,wireframe:!0,opacity:0.3,transparent:!0});this.lightArrow=new THREE.ArrowHelper(this.direction,null,c,d);this.lightSphere=new THREE.Mesh(e,j);this.lightCone=new THREE.Mesh(g,l);c=a.distance?a.distance:1E4;e=2*c*Math.tan(0.5*a.angle);this.lightCone.scale.set(e,e,c);this.lightArrow.cone.material.fog=!1;this.lightArrow.line.material.fog= !1;this.lightRays=new THREE.Line(f,h,THREE.LinePieces);this.gyroscope=new THREE.Gyroscope;this.gyroscope.add(this.lightArrow);this.gyroscope.add(this.lightSphere);this.gyroscope.add(this.lightRays);this.add(this.gyroscope);this.add(this.lightCone);this.lookAt(a.target.position);this.lightSphere.properties.isGizmo=!0;this.lightSphere.properties.gizmoSubject=a;this.lightSphere.properties.gizmoRoot=this;this.targetSphere=null;a.target.properties.targetInverse&&(b=new THREE.SphereGeometry(b,8,4),f=new THREE.MeshBasicMaterial({color:d, wireframe:!0,fog:!1}),this.targetSphere=new THREE.Mesh(b,f),this.targetSphere.position=a.target.position,this.targetSphere.properties.isGizmo=!0,this.targetSphere.properties.gizmoSubject=a.target,this.targetSphere.properties.gizmoRoot=this.targetSphere,a=new THREE.LineDashedMaterial({color:d,dashSize:4,gapSize:4,opacity:0.75,transparent:!0,fog:!1}),d=new THREE.Geometry,d.vertices.push(this.position.clone()),d.vertices.push(this.targetSphere.position.clone()),d.computeLineDistances(),this.targetLine= new THREE.Line(d,a),this.targetLine.properties.isGizmo=!0);this.properties.isGizmo=!0};THREE.SpotLightHelper.prototype=Object.create(THREE.Object3D.prototype); THREE.SpotLightHelper.prototype.update=function(){this.direction.sub(this.light.target.position,this.light.position);this.lightArrow.setDirection(this.direction);this.lookAt(this.light.target.position);var a=this.light.distance?this.light.distance:1E4,b=2*a*Math.tan(0.5*this.light.angle);this.lightCone.scale.set(b,b,a);this.color.copy(this.light.color);a=THREE.Math.clamp(this.light.intensity,0,1);this.color.r*=a;this.color.g*=a;this.color.b*=a;this.lightArrow.setColor(this.color.getHex());this.lightSphere.material.color.copy(this.color); this.lightRays.material.color.copy(this.color);this.lightCone.material.color.copy(this.color);this.targetSphere.material.color.copy(this.color);this.targetLine.material.color.copy(this.color);this.targetLine.geometry.vertices[0].copy(this.light.position);this.targetLine.geometry.vertices[1].copy(this.light.target.position);this.targetLine.geometry.computeLineDistances();this.targetLine.geometry.verticesNeedUpdate=!0};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,e){THREE.Object3D.call(this);this.lensFlares=[];this.positionScreen=new THREE.Vector3;this.customUpdateCallback=void 0;void 0!==a&&this.add(a,b,c,d,e)};THREE.LensFlare.prototype=Object.create(THREE.Object3D.prototype); THREE.LensFlare.prototype.add=function(a,b,c,d,e,f){void 0===b&&(b=-1);void 0===c&&(c=0);void 0===f&&(f=1);void 0===e&&(e=new THREE.Color(16777215));void 0===d&&(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:f,color:e,blending:d})}; THREE.LensFlare.prototype.updateLensFlares=function(){var a,b=this.lensFlares.length,c,d=2*-this.positionScreen.x,e=2*-this.positionScreen.y;for(a=0;a<b;a++)c=this.lensFlares[a],c.x=this.positionScreen.x+d*c.distance,c.y=this.positionScreen.y+e*c.distance,c.wantedRotation=0.25*c.x*Math.PI,c.rotation+=0.25*(c.wantedRotation-c.rotation)};THREE.MorphBlendMesh=function(a,b){THREE.Mesh.call(this,a,b);this.animationsMap={};this.animationsList=[];var c=this.geometry.morphTargets.length;this.createAnimation("__default",0,c-1,c/1);this.setAnimationWeight("__default",1)};THREE.MorphBlendMesh.prototype=Object.create(THREE.Mesh.prototype); THREE.MorphBlendMesh.prototype.createAnimation=function(a,b,c,d){b={startFrame:b,endFrame:c,length:c-b+1,fps:d,duration:(c-b)/d,lastFrame:0,currentFrame:0,active:!1,time:0,direction:1,weight:1,directionBackwards:!1,mirroredLoop:!1};this.animationsMap[a]=b;this.animationsList.push(b)}; THREE.MorphBlendMesh.prototype.autoCreateAnimations=function(a){for(var b=/([a-z]+)(\d+)/,c,d={},e=this.geometry,f=0,g=e.morphTargets.length;f<g;f++){var h=e.morphTargets[f].name.match(b);if(h&&1<h.length){var j=h[1];d[j]||(d[j]={start:Infinity,end:-Infinity});h=d[j];f<h.start&&(h.start=f);f>h.end&&(h.end=f);c||(c=j)}}for(j in d)h=d[j],this.createAnimation(j,h.start,h.end,a);this.firstAnimation=c}; THREE.MorphBlendMesh.prototype.setAnimationDirectionForward=function(a){if(a=this.animationsMap[a])a.direction=1,a.directionBackwards=!1};THREE.MorphBlendMesh.prototype.setAnimationDirectionBackward=function(a){if(a=this.animationsMap[a])a.direction=-1,a.directionBackwards=!0};THREE.MorphBlendMesh.prototype.setAnimationFPS=function(a,b){var c=this.animationsMap[a];c&&(c.fps=b,c.duration=(c.end-c.start)/c.fps)}; THREE.MorphBlendMesh.prototype.setAnimationDuration=function(a,b){var c=this.animationsMap[a];c&&(c.duration=b,c.fps=(c.end-c.start)/c.duration)};THREE.MorphBlendMesh.prototype.setAnimationWeight=function(a,b){var c=this.animationsMap[a];c&&(c.weight=b)};THREE.MorphBlendMesh.prototype.setAnimationTime=function(a,b){var c=this.animationsMap[a];c&&(c.time=b)};THREE.MorphBlendMesh.prototype.getAnimationTime=function(a){var b=0;if(a=this.animationsMap[a])b=a.time;return b}; THREE.MorphBlendMesh.prototype.getAnimationDuration=function(a){var b=-1;if(a=this.animationsMap[a])b=a.duration;return b};THREE.MorphBlendMesh.prototype.playAnimation=function(a){var b=this.animationsMap[a];b?(b.time=0,b.active=!0):console.warn("animation["+a+"] undefined")};THREE.MorphBlendMesh.prototype.stopAnimation=function(a){if(a=this.animationsMap[a])a.active=!1}; THREE.MorphBlendMesh.prototype.update=function(a){for(var b=0,c=this.animationsList.length;b<c;b++){var d=this.animationsList[b];if(d.active){var e=d.duration/d.length;d.time+=d.direction*a;if(d.mirroredLoop){if(d.time>d.duration||0>d.time)d.direction*=-1,d.time>d.duration&&(d.time=d.duration,d.directionBackwards=!0),0>d.time&&(d.time=0,d.directionBackwards=!1)}else d.time%=d.duration,0>d.time&&(d.time+=d.duration);var f=d.startFrame+THREE.Math.clamp(Math.floor(d.time/e),0,d.length-1),g=d.weight; f!==d.currentFrame&&(this.morphTargetInfluences[d.lastFrame]=0,this.morphTargetInfluences[d.currentFrame]=1*g,this.morphTargetInfluences[f]=0,d.lastFrame=d.currentFrame,d.currentFrame=f);e=d.time%e/e;d.directionBackwards&&(e=1-e);this.morphTargetInfluences[d.currentFrame]=e*g;this.morphTargetInfluences[d.lastFrame]=(1-e)*g}}};THREE.LensFlarePlugin=function(){function a(a,c){var d=b.createProgram(),e=b.createShader(b.FRAGMENT_SHADER),f=b.createShader(b.VERTEX_SHADER),g="precision "+c+" float;\n";b.shaderSource(e,g+a.fragmentShader);b.shaderSource(f,g+a.vertexShader);b.compileShader(e);b.compileShader(f);b.attachShader(d,e);b.attachShader(d,f);b.linkProgram(d);return d}var b,c,d,e,f,g,h,j,l,m,q,p,t;this.init=function(r){b=r.context;c=r;d=r.getPrecision();e=new Float32Array(16);f=new Uint16Array(6);r=0;e[r++]=-1;e[r++]=-1; e[r++]=0;e[r++]=0;e[r++]=1;e[r++]=-1;e[r++]=1;e[r++]=0;e[r++]=1;e[r++]=1;e[r++]=1;e[r++]=1;e[r++]=-1;e[r++]=1;e[r++]=0;e[r++]=1;r=0;f[r++]=0;f[r++]=1;f[r++]=2;f[r++]=0;f[r++]=2;f[r++]=3;g=b.createBuffer();h=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,g);b.bufferData(b.ARRAY_BUFFER,e,b.STATIC_DRAW);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,h);b.bufferData(b.ELEMENT_ARRAY_BUFFER,f,b.STATIC_DRAW);j=b.createTexture();l=b.createTexture();b.bindTexture(b.TEXTURE_2D,j);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,l);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);0>=b.getParameter(b.MAX_VERTEX_TEXTURE_IMAGE_UNITS)?(m=!1,q=a(THREE.ShaderFlares.lensFlare,d)):(m=!0,q=a(THREE.ShaderFlares.lensFlareVertexTexture,d));p={};t={};p.vertex=b.getAttribLocation(q,"position");p.uv=b.getAttribLocation(q,"uv");t.renderType=b.getUniformLocation(q,"renderType");t.map=b.getUniformLocation(q,"map");t.occlusionMap=b.getUniformLocation(q,"occlusionMap");t.opacity= b.getUniformLocation(q,"opacity");t.color=b.getUniformLocation(q,"color");t.scale=b.getUniformLocation(q,"scale");t.rotation=b.getUniformLocation(q,"rotation");t.screenPosition=b.getUniformLocation(q,"screenPosition")};this.render=function(a,d,e,f){a=a.__webglFlares;var v=a.length;if(v){var A=new THREE.Vector3,u=f/e,L=0.5*e,H=0.5*f,C=16/f,z=new THREE.Vector2(C*u,C),E=new THREE.Vector3(1,1,0),D=new THREE.Vector2(1,1),J=t,C=p;b.useProgram(q);b.enableVertexAttribArray(p.vertex);b.enableVertexAttribArray(p.uv); b.uniform1i(J.occlusionMap,0);b.uniform1i(J.map,1);b.bindBuffer(b.ARRAY_BUFFER,g);b.vertexAttribPointer(C.vertex,2,b.FLOAT,!1,16,0);b.vertexAttribPointer(C.uv,2,b.FLOAT,!1,16,8);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,h);b.disable(b.CULL_FACE);b.depthMask(!1);var X,G,S,B,K;for(X=0;X<v;X++)if(C=16/f,z.set(C*u,C),B=a[X],A.set(B.matrixWorld.elements[12],B.matrixWorld.elements[13],B.matrixWorld.elements[14]),d.matrixWorldInverse.multiplyVector3(A),d.projectionMatrix.multiplyVector3(A),E.copy(A),D.x=E.x*L+ L,D.y=E.y*H+H,m||0<D.x&&D.x<e&&0<D.y&&D.y<f){b.activeTexture(b.TEXTURE1);b.bindTexture(b.TEXTURE_2D,j);b.copyTexImage2D(b.TEXTURE_2D,0,b.RGB,D.x-8,D.y-8,16,16,0);b.uniform1i(J.renderType,0);b.uniform2f(J.scale,z.x,z.y);b.uniform3f(J.screenPosition,E.x,E.y,E.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,l);b.copyTexImage2D(b.TEXTURE_2D,0,b.RGBA,D.x-8,D.y-8,16,16,0);b.uniform1i(J.renderType,1);b.disable(b.DEPTH_TEST); b.activeTexture(b.TEXTURE1);b.bindTexture(b.TEXTURE_2D,j);b.drawElements(b.TRIANGLES,6,b.UNSIGNED_SHORT,0);B.positionScreen.copy(E);B.customUpdateCallback?B.customUpdateCallback(B):B.updateLensFlares();b.uniform1i(J.renderType,2);b.enable(b.BLEND);G=0;for(S=B.lensFlares.length;G<S;G++)K=B.lensFlares[G],0.001<K.opacity&&0.001<K.scale&&(E.x=K.x,E.y=K.y,E.z=K.z,C=K.size*K.scale/f,z.x=C*u,z.y=C,b.uniform3f(J.screenPosition,E.x,E.y,E.z),b.uniform2f(J.scale,z.x,z.y),b.uniform1f(J.rotation,K.rotation),b.uniform1f(J.opacity, K.opacity),b.uniform3f(J.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(!0)}}};THREE.ShadowMapPlugin=function(){var a,b,c,d,e,f,g=new THREE.Frustum,h=new THREE.Matrix4,j=new THREE.Vector3,l=new THREE.Vector3;this.init=function(g){a=g.context;b=g;g=THREE.ShaderLib.depthRGBA;var 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:!0});e=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader, vertexShader:g.vertexShader,uniforms:h,skinning:!0});f=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader,vertexShader:g.vertexShader,uniforms:h,morphTargets:!0,skinning:!0});c._shadowPass=!0;d._shadowPass=!0;e._shadowPass=!0;f._shadowPass=!0};this.render=function(a,c){b.shadowMapEnabled&&b.shadowMapAutoUpdate&&this.update(a,c)};this.update=function(m,q){var p,t,r,n,s,x,v,A,u,L=[];n=0;a.clearColor(1,1,1,1);a.disable(a.BLEND);a.enable(a.CULL_FACE);a.frontFace(a.CCW);b.shadowMapCullFace===THREE.CullFaceFront? a.cullFace(a.FRONT):a.cullFace(a.BACK);b.setDepthTest(!0);p=0;for(t=m.__lights.length;p<t;p++)if(r=m.__lights[p],r.castShadow)if(r instanceof THREE.DirectionalLight&&r.shadowCascade)for(s=0;s<r.shadowCascadeCount;s++){var H;if(r.shadowCascadeArray[s])H=r.shadowCascadeArray[s];else{u=r;v=s;H=new THREE.DirectionalLight;H.isVirtual=!0;H.onlyShadow=!0;H.castShadow=!0;H.shadowCameraNear=u.shadowCameraNear;H.shadowCameraFar=u.shadowCameraFar;H.shadowCameraLeft=u.shadowCameraLeft;H.shadowCameraRight=u.shadowCameraRight; H.shadowCameraBottom=u.shadowCameraBottom;H.shadowCameraTop=u.shadowCameraTop;H.shadowCameraVisible=u.shadowCameraVisible;H.shadowDarkness=u.shadowDarkness;H.shadowBias=u.shadowCascadeBias[v];H.shadowMapWidth=u.shadowCascadeWidth[v];H.shadowMapHeight=u.shadowCascadeHeight[v];H.pointsWorld=[];H.pointsFrustum=[];A=H.pointsWorld;x=H.pointsFrustum;for(var C=0;8>C;C++)A[C]=new THREE.Vector3,x[C]=new THREE.Vector3;A=u.shadowCascadeNearZ[v];u=u.shadowCascadeFarZ[v];x[0].set(-1,-1,A);x[1].set(1,-1,A);x[2].set(-1, 1,A);x[3].set(1,1,A);x[4].set(-1,-1,u);x[5].set(1,-1,u);x[6].set(-1,1,u);x[7].set(1,1,u);H.originalCamera=q;x=new THREE.Gyroscope;x.position=r.shadowCascadeOffset;x.add(H);x.add(H.target);q.add(x);r.shadowCascadeArray[s]=H;console.log("Created virtualLight",H)}v=r;A=s;u=v.shadowCascadeArray[A];u.position.copy(v.position);u.target.position.copy(v.target.position);u.lookAt(u.target);u.shadowCameraVisible=v.shadowCameraVisible;u.shadowDarkness=v.shadowDarkness;u.shadowBias=v.shadowCascadeBias[A];x=v.shadowCascadeNearZ[A]; v=v.shadowCascadeFarZ[A];u=u.pointsFrustum;u[0].z=x;u[1].z=x;u[2].z=x;u[3].z=x;u[4].z=v;u[5].z=v;u[6].z=v;u[7].z=v;L[n]=H;n++}else L[n]=r,n++;p=0;for(t=L.length;p<t;p++){r=L[p];r.shadowMap||(s=THREE.LinearFilter,b.shadowMapType===THREE.PCFSoftShadowMap&&(s=THREE.NearestFilter),r.shadowMap=new THREE.WebGLRenderTarget(r.shadowMapWidth,r.shadowMapHeight,{minFilter:s,magFilter:s,format:THREE.RGBAFormat}),r.shadowMapSize=new THREE.Vector2(r.shadowMapWidth,r.shadowMapHeight),r.shadowMatrix=new THREE.Matrix4); if(!r.shadowCamera){if(r instanceof THREE.SpotLight)r.shadowCamera=new THREE.PerspectiveCamera(r.shadowCameraFov,r.shadowMapWidth/r.shadowMapHeight,r.shadowCameraNear,r.shadowCameraFar);else if(r instanceof THREE.DirectionalLight)r.shadowCamera=new THREE.OrthographicCamera(r.shadowCameraLeft,r.shadowCameraRight,r.shadowCameraTop,r.shadowCameraBottom,r.shadowCameraNear,r.shadowCameraFar);else{console.error("Unsupported light type for shadow");continue}m.add(r.shadowCamera);b.autoUpdateScene&&m.updateMatrixWorld()}r.shadowCameraVisible&& !r.cameraHelper&&(r.cameraHelper=new THREE.CameraHelper(r.shadowCamera),r.shadowCamera.add(r.cameraHelper));n=r.shadowMap;x=r.shadowMatrix;s=r.shadowCamera;s.position.copy(r.matrixWorld.getPosition());s.lookAt(r.target.matrixWorld.getPosition());s.updateMatrixWorld();s.matrixWorldInverse.getInverse(s.matrixWorld);if(r.isVirtual&&H.originalCamera==q){u=q;v=r.shadowCamera;A=r.pointsFrustum;C=r.pointsWorld;j.set(Infinity,Infinity,Infinity);l.set(-Infinity,-Infinity,-Infinity);for(var z=0;8>z;z++){var E= C[z];E.copy(A[z]);THREE.ShadowMapPlugin.__projector.unprojectVector(E,u);v.matrixWorldInverse.multiplyVector3(E);E.x<j.x&&(j.x=E.x);E.x>l.x&&(l.x=E.x);E.y<j.y&&(j.y=E.y);E.y>l.y&&(l.y=E.y);E.z<j.z&&(j.z=E.z);E.z>l.z&&(l.z=E.z)}v.left=j.x;v.right=l.x;v.top=l.y;v.bottom=j.y;v.updateProjectionMatrix()}r.cameraHelper&&(r.cameraHelper.visible=r.shadowCameraVisible);r.shadowCameraVisible&&r.cameraHelper.update();x.set(0.5,0,0,0.5,0,0.5,0,0.5,0,0,0.5,0.5,0,0,0,1);x.multiplySelf(s.projectionMatrix);x.multiplySelf(s.matrixWorldInverse); h.multiply(s.projectionMatrix,s.matrixWorldInverse);g.setFromMatrix(h);b.setRenderTarget(n);b.clear();u=m.__webglObjects;r=0;for(n=u.length;r<n;r++)if(v=u[r],x=v.object,v.render=!1,x.visible&&x.castShadow&&(!(x instanceof THREE.Mesh||x instanceof THREE.ParticleSystem)||!x.frustumCulled||g.contains(x)))x._modelViewMatrix.multiply(s.matrixWorldInverse,x.matrixWorld),v.render=!0;r=0;for(n=u.length;r<n;r++)v=u[r],v.render&&(x=v.object,v=v.buffer,C=x.material instanceof THREE.MeshFaceMaterial?x.material.materials[0]: x.material,A=0<x.geometry.morphTargets.length&&C.morphTargets,C=x instanceof THREE.SkinnedMesh&&C.skinning,A=x.customDepthMaterial?x.customDepthMaterial:C?A?f:e:A?d:c,v instanceof THREE.BufferGeometry?b.renderBufferDirect(s,m.__lights,null,A,v,x):b.renderBuffer(s,m.__lights,null,A,v,x));u=m.__webglObjectsImmediate;r=0;for(n=u.length;r<n;r++)v=u[r],x=v.object,x.visible&&x.castShadow&&(x._modelViewMatrix.multiply(s.matrixWorldInverse,x.matrixWorld),b.renderImmediateObject(s,m.__lights,null,c,x))}p= b.getClearColor();t=b.getClearAlpha();a.clearColor(p.r,p.g,p.b,t);a.enable(a.BLEND);b.shadowMapCullFace===THREE.CullFaceFront&&a.cullFace(a.BACK)}};THREE.ShadowMapPlugin.__projector=new THREE.Projector;THREE.SpritePlugin=function(){function a(a,b){return a.z!==b.z?b.z-a.z:b.id-a.id}var b,c,d,e,f,g,h,j,l,m;this.init=function(a){b=a.context;c=a;d=a.getPrecision();e=new Float32Array(16);f=new Uint16Array(6);a=0;e[a++]=-1;e[a++]=-1;e[a++]=0;e[a++]=0;e[a++]=1;e[a++]=-1;e[a++]=1;e[a++]=0;e[a++]=1;e[a++]=1;e[a++]=1;e[a++]=1;e[a++]=-1;e[a++]=1;e[a++]=0;e[a++]=1;a=0;f[a++]=0;f[a++]=1;f[a++]=2;f[a++]=0;f[a++]=2;f[a++]=3;g=b.createBuffer();h=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,g);b.bufferData(b.ARRAY_BUFFER, e,b.STATIC_DRAW);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,h);b.bufferData(b.ELEMENT_ARRAY_BUFFER,f,b.STATIC_DRAW);a=THREE.ShaderSprite.sprite;var p=b.createProgram(),t=b.createShader(b.FRAGMENT_SHADER),r=b.createShader(b.VERTEX_SHADER),n="precision "+d+" float;\n";b.shaderSource(t,n+a.fragmentShader);b.shaderSource(r,n+a.vertexShader);b.compileShader(t);b.compileShader(r);b.attachShader(p,t);b.attachShader(p,r);b.linkProgram(p);j=p;l={};m={};l.position=b.getAttribLocation(j,"position");l.uv=b.getAttribLocation(j, "uv");m.uvOffset=b.getUniformLocation(j,"uvOffset");m.uvScale=b.getUniformLocation(j,"uvScale");m.rotation=b.getUniformLocation(j,"rotation");m.scale=b.getUniformLocation(j,"scale");m.alignment=b.getUniformLocation(j,"alignment");m.color=b.getUniformLocation(j,"color");m.map=b.getUniformLocation(j,"map");m.opacity=b.getUniformLocation(j,"opacity");m.useScreenCoordinates=b.getUniformLocation(j,"useScreenCoordinates");m.sizeAttenuation=b.getUniformLocation(j,"sizeAttenuation");m.screenPosition=b.getUniformLocation(j, "screenPosition");m.modelViewMatrix=b.getUniformLocation(j,"modelViewMatrix");m.projectionMatrix=b.getUniformLocation(j,"projectionMatrix");m.fogType=b.getUniformLocation(j,"fogType");m.fogDensity=b.getUniformLocation(j,"fogDensity");m.fogNear=b.getUniformLocation(j,"fogNear");m.fogFar=b.getUniformLocation(j,"fogFar");m.fogColor=b.getUniformLocation(j,"fogColor");m.alphaTest=b.getUniformLocation(j,"alphaTest")};this.render=function(d,e,f,r){var n=d.__webglSprites,s=n.length;if(s){var x=l,v=m,A=r/ f;f*=0.5;var u=0.5*r;b.useProgram(j);b.enableVertexAttribArray(x.position);b.enableVertexAttribArray(x.uv);b.disable(b.CULL_FACE);b.enable(b.BLEND);b.bindBuffer(b.ARRAY_BUFFER,g);b.vertexAttribPointer(x.position,2,b.FLOAT,!1,16,0);b.vertexAttribPointer(x.uv,2,b.FLOAT,!1,16,8);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,h);b.uniformMatrix4fv(v.projectionMatrix,!1,e.projectionMatrix.elements);b.activeTexture(b.TEXTURE0);b.uniform1i(v.map,0);var L=x=0,H=d.fog;H?(b.uniform3f(v.fogColor,H.color.r,H.color.g,H.color.b), H instanceof THREE.Fog?(b.uniform1f(v.fogNear,H.near),b.uniform1f(v.fogFar,H.far),b.uniform1i(v.fogType,1),L=x=1):H instanceof THREE.FogExp2&&(b.uniform1f(v.fogDensity,H.density),b.uniform1i(v.fogType,2),L=x=2)):(b.uniform1i(v.fogType,0),L=x=0);for(var C,z,E=[],H=0;H<s;H++)C=n[H],z=C.material,C.visible&&0!==z.opacity&&(z.useScreenCoordinates?C.z=-C.position.z:(C._modelViewMatrix.multiply(e.matrixWorldInverse,C.matrixWorld),C.z=-C._modelViewMatrix.elements[14]));n.sort(a);for(H=0;H<s;H++)C=n[H],z= C.material,C.visible&&0!==z.opacity&&(z.map&&z.map.image&&z.map.image.width)&&(b.uniform1f(v.alphaTest,z.alphaTest),!0===z.useScreenCoordinates?(b.uniform1i(v.useScreenCoordinates,1),b.uniform3f(v.screenPosition,(C.position.x*c.devicePixelRatio-f)/f,(u-C.position.y*c.devicePixelRatio)/u,Math.max(0,Math.min(1,C.position.z))),E[0]=c.devicePixelRatio,E[1]=c.devicePixelRatio):(b.uniform1i(v.useScreenCoordinates,0),b.uniform1i(v.sizeAttenuation,z.sizeAttenuation?1:0),b.uniformMatrix4fv(v.modelViewMatrix, !1,C._modelViewMatrix.elements),E[0]=1,E[1]=1),e=d.fog&&z.fog?L:0,x!==e&&(b.uniform1i(v.fogType,e),x=e),e=1/(z.scaleByViewport?r:1),E[0]*=e*A*C.scale.x,E[1]*=e*C.scale.y,b.uniform2f(v.uvScale,z.uvScale.x,z.uvScale.y),b.uniform2f(v.uvOffset,z.uvOffset.x,z.uvOffset.y),b.uniform2f(v.alignment,z.alignment.x,z.alignment.y),b.uniform1f(v.opacity,z.opacity),b.uniform3f(v.color,z.color.r,z.color.g,z.color.b),b.uniform1f(v.rotation,C.rotation),b.uniform2fv(v.scale,E),c.setBlending(z.blending,z.blendEquation, z.blendSrc,z.blendDst),c.setDepthTest(z.depthTest),c.setDepthWrite(z.depthWrite),c.setTexture(z.map,0),b.drawElements(b.TRIANGLES,6,b.UNSIGNED_SHORT,0));b.enable(b.CULL_FACE)}}};THREE.DepthPassPlugin=function(){this.enabled=!1;this.renderTarget=null;var a,b,c,d,e,f,g=new THREE.Frustum,h=new THREE.Matrix4;this.init=function(g){a=g.context;b=g;g=THREE.ShaderLib.depthRGBA;var 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:!0});e=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader, vertexShader:g.vertexShader,uniforms:h,skinning:!0});f=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader,vertexShader:g.vertexShader,uniforms:h,morphTargets:!0,skinning:!0});c._shadowPass=!0;d._shadowPass=!0;e._shadowPass=!0;f._shadowPass=!0};this.render=function(a,b){this.enabled&&this.update(a,b)};this.update=function(j,l){var m,q,p,t,r,n;a.clearColor(1,1,1,1);a.disable(a.BLEND);b.setDepthTest(!0);b.autoUpdateScene&&j.updateMatrixWorld();l.matrixWorldInverse.getInverse(l.matrixWorld);h.multiply(l.projectionMatrix, l.matrixWorldInverse);g.setFromMatrix(h);b.setRenderTarget(this.renderTarget);b.clear();n=j.__webglObjects;m=0;for(q=n.length;m<q;m++)if(p=n[m],r=p.object,p.render=!1,r.visible&&(!(r instanceof THREE.Mesh||r instanceof THREE.ParticleSystem)||!r.frustumCulled||g.contains(r)))r._modelViewMatrix.multiply(l.matrixWorldInverse,r.matrixWorld),p.render=!0;var s;m=0;for(q=n.length;m<q;m++)if(p=n[m],p.render&&(r=p.object,p=p.buffer,!(r instanceof THREE.ParticleSystem)||r.customDepthMaterial))(s=r.material instanceof THREE.MeshFaceMaterial?r.material.materials[0]:r.material)&&b.setMaterialFaces(r.material),t=0<r.geometry.morphTargets.length&&s.morphTargets,s=r instanceof THREE.SkinnedMesh&&s.skinning,t=r.customDepthMaterial?r.customDepthMaterial:s?t?f:e:t?d:c,p instanceof THREE.BufferGeometry?b.renderBufferDirect(l,j.__lights,null,t,p,r):b.renderBuffer(l,j.__lights,null,t,p,r);n=j.__webglObjectsImmediate;m=0;for(q=n.length;m<q;m++)p=n[m],r=p.object,r.visible&&(r._modelViewMatrix.multiply(l.matrixWorldInverse, r.matrixWorld),b.renderImmediateObject(l,j.__lights,null,c,r));m=b.getClearColor();q=b.getClearAlpha();a.clearColor(m.r,m.g,m.b,q);a.enable(a.BLEND)}};THREE.ShaderFlares={lensFlareVertexTexture:{vertexShader:"uniform lowp int renderType;\nuniform vec3 screenPosition;\nuniform vec2 scale;\nuniform float rotation;\nuniform sampler2D occlusionMap;\nattribute vec2 position;\nattribute vec2 uv;\nvarying vec2 vUV;\nvarying float vVisibility;\nvoid main() {\nvUV = uv;\nvec2 pos = position;\nif( renderType == 2 ) {\nvec4 visibility = texture2D( occlusionMap, vec2( 0.1, 0.1 ) ) +\ntexture2D( occlusionMap, vec2( 0.5, 0.1 ) ) +\ntexture2D( occlusionMap, vec2( 0.9, 0.1 ) ) +\ntexture2D( occlusionMap, vec2( 0.9, 0.5 ) ) +\ntexture2D( occlusionMap, vec2( 0.9, 0.9 ) ) +\ntexture2D( occlusionMap, vec2( 0.5, 0.9 ) ) +\ntexture2D( occlusionMap, vec2( 0.1, 0.9 ) ) +\ntexture2D( occlusionMap, vec2( 0.1, 0.5 ) ) +\ntexture2D( occlusionMap, vec2( 0.5, 0.5 ) );\nvVisibility = ( visibility.r / 9.0 ) *\n( 1.0 - visibility.g / 9.0 ) *\n( visibility.b / 9.0 ) *\n( 1.0 - visibility.a / 9.0 );\npos.x = cos( rotation ) * position.x - sin( rotation ) * position.y;\npos.y = sin( rotation ) * position.x + cos( rotation ) * position.y;\n}\ngl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );\n}", fragmentShader:"uniform lowp int renderType;\nuniform sampler2D map;\nuniform float opacity;\nuniform vec3 color;\nvarying vec2 vUV;\nvarying float vVisibility;\nvoid main() {\nif( renderType == 0 ) {\ngl_FragColor = vec4( 1.0, 0.0, 1.0, 0.0 );\n} else if( renderType == 1 ) {\ngl_FragColor = texture2D( map, vUV );\n} else {\nvec4 texture = texture2D( map, vUV );\ntexture.a *= opacity * vVisibility;\ngl_FragColor = texture;\ngl_FragColor.rgb *= color;\n}\n}"},lensFlare:{vertexShader:"uniform lowp int renderType;\nuniform vec3 screenPosition;\nuniform vec2 scale;\nuniform float rotation;\nattribute vec2 position;\nattribute vec2 uv;\nvarying vec2 vUV;\nvoid main() {\nvUV = uv;\nvec2 pos = position;\nif( renderType == 2 ) {\npos.x = cos( rotation ) * position.x - sin( rotation ) * position.y;\npos.y = sin( rotation ) * position.x + cos( rotation ) * position.y;\n}\ngl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );\n}", fragmentShader:"precision mediump float;\nuniform lowp int renderType;\nuniform sampler2D map;\nuniform sampler2D occlusionMap;\nuniform float opacity;\nuniform vec3 color;\nvarying vec2 vUV;\nvoid main() {\nif( renderType == 0 ) {\ngl_FragColor = vec4( texture2D( map, vUV ).rgb, 0.0 );\n} else if( renderType == 1 ) {\ngl_FragColor = texture2D( map, vUV );\n} else {\nfloat visibility = texture2D( occlusionMap, vec2( 0.5, 0.1 ) ).a +\ntexture2D( occlusionMap, vec2( 0.9, 0.5 ) ).a +\ntexture2D( occlusionMap, vec2( 0.5, 0.9 ) ).a +\ntexture2D( occlusionMap, vec2( 0.1, 0.5 ) ).a;\nvisibility = ( 1.0 - visibility / 4.0 );\nvec4 texture = texture2D( map, vUV );\ntexture.a *= opacity * visibility;\ngl_FragColor = texture;\ngl_FragColor.rgb *= color;\n}\n}"}};THREE.ShaderSprite={sprite:{vertexShader:"uniform int useScreenCoordinates;\nuniform int sizeAttenuation;\nuniform vec3 screenPosition;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform float rotation;\nuniform vec2 scale;\nuniform vec2 alignment;\nuniform vec2 uvOffset;\nuniform vec2 uvScale;\nattribute vec2 position;\nattribute vec2 uv;\nvarying vec2 vUV;\nvoid main() {\nvUV = uvOffset + uv * uvScale;\nvec2 alignedPosition = position + alignment;\nvec2 rotatedPosition;\nrotatedPosition.x = ( cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y ) * scale.x;\nrotatedPosition.y = ( sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y ) * scale.y;\nvec4 finalPosition;\nif( useScreenCoordinates != 0 ) {\nfinalPosition = vec4( screenPosition.xy + rotatedPosition, screenPosition.z, 1.0 );\n} else {\nfinalPosition = projectionMatrix * modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\nfinalPosition.xy += rotatedPosition * ( sizeAttenuation == 1 ? 1.0 : finalPosition.z );\n}\ngl_Position = finalPosition;\n}", fragmentShader:"uniform vec3 color;\nuniform sampler2D map;\nuniform float opacity;\nuniform int fogType;\nuniform vec3 fogColor;\nuniform float fogDensity;\nuniform float fogNear;\nuniform float fogFar;\nuniform float alphaTest;\nvarying vec2 vUV;\nvoid main() {\nvec4 texture = texture2D( map, vUV );\nif ( texture.a < alphaTest ) discard;\ngl_FragColor = vec4( color * texture.xyz, texture.a * opacity );\nif ( fogType > 0 ) {\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\nfloat fogFactor = 0.0;\nif ( fogType == 1 ) {\nfogFactor = smoothstep( fogNear, fogFar, depth );\n} else {\nconst float LOG2 = 1.442695;\nfloat fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n}\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n}\n}"}};