THREE.RenderableObject=function(){this.id=0,this.object=null,this.z=0,this.renderOrder=0},THREE.RenderableFace=function(){this.id=0,this.v1=new THREE.RenderableVertex,this.v2=new THREE.RenderableVertex,this.v3=new THREE.RenderableVertex,this.normalModel=new THREE.Vector3,this.vertexNormalsModel=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3],this.vertexNormalsLength=0,this.color=new THREE.Color,this.material=null,this.uvs=[new THREE.Vector2,new THREE.Vector2,new THREE.Vector2],this.z=0,this.renderOrder=0},THREE.RenderableVertex=function(){this.position=new THREE.Vector3,this.positionWorld=new THREE.Vector3,this.positionScreen=new THREE.Vector4,this.visible=!0},THREE.RenderableVertex.prototype.copy=function(e){this.positionWorld.copy(e.positionWorld),this.positionScreen.copy(e.positionScreen)},THREE.RenderableLine=function(){this.id=0,this.v1=new THREE.RenderableVertex,this.v2=new THREE.RenderableVertex,this.vertexColors=[new THREE.Color,new THREE.Color],this.material=null,this.z=0,this.renderOrder=0},THREE.RenderableSprite=function(){this.id=0,this.object=null,this.x=0,this.y=0,this.z=0,this.rotation=0,this.scale=new THREE.Vector2,this.material=null,this.renderOrder=0},THREE.Projector=function(){function e(){if(l===R){var e=new THREE.RenderableObject;return v.push(e),R++,l++,e}return v[l++]}function t(){if(p===T){var e=new THREE.RenderableVertex;return x.push(e),T++,p++,e}return x[p++]}function r(){if(d===H){var e=new THREE.RenderableFace;return S.push(e),H++,d++,e}return S[d++]}function i(){if(h===w){var e=new THREE.RenderableLine;return g.push(e),w++,h++,e}return g[h++]}function n(){if(m===M){var e=new THREE.RenderableSprite;return b.push(e),M++,m++,e}return b[m++]}function o(e,t){return e.renderOrder!==t.renderOrder?e.renderOrder-t.renderOrder:e.z!==t.z?t.z-e.z:e.id!==t.id?e.id-t.id:0}function a(e,t){var r=0,i=1,n=e.z+e.w,o=t.z+t.w,a=-e.z+e.w,s=-t.z+t.w;return n>=0&&o>=0&&a>=0&&s>=0?!0:0>n&&0>o||0>a&&0>s?!1:(0>n?r=Math.max(r,n/(n-o)):0>o&&(i=Math.min(i,n/(n-o))),0>a?r=Math.max(r,a/(a-s)):0>s&&(i=Math.min(i,a/(a-s))),r>i?!1:(e.lerp(t,r),t.lerp(e,1-i),!0))}var s,l,c,p,E,d,f,h,u,m,y,v=[],R=0,x=[],T=0,S=[],H=0,g=[],w=0,b=[],M=0,C={objects:[],lights:[],elements:[]},j=new THREE.Vector3,z=new THREE.Vector4,V=new THREE.Box3(new THREE.Vector3(-1,-1,-1),new THREE.Vector3(1,1,1)),O=new THREE.Box3,L=new Array(3),W=(new Array(4),new THREE.Matrix4),B=new THREE.Matrix4,P=new THREE.Matrix4,k=new THREE.Matrix3,N=new THREE.Frustum,A=new THREE.Vector4,D=new THREE.Vector4;this.projectVector=function(e,t){console.warn("THREE.Projector: .projectVector() is now vector.project()."),e.project(t)},this.unprojectVector=function(e,t){console.warn("THREE.Projector: .unprojectVector() is now vector.unproject()."),e.unproject(t)},this.pickingRay=function(e,t){console.error("THREE.Projector: .pickingRay() is now raycaster.setFromCamera().")};var F=function(){var e=[],n=[],o=null,a=null,s=new THREE.Matrix3,l=function(t){o=t,a=o.material,s.getNormalMatrix(o.matrixWorld),e.length=0,n.length=0},p=function(e){var t=e.position,r=e.positionWorld,i=e.positionScreen;r.copy(t).applyMatrix4(y),i.copy(r).applyMatrix4(B);var n=1/i.w;i.x*=n,i.y*=n,i.z*=n,e.visible=i.x>=-1&&i.x<=1&&i.y>=-1&&i.y<=1&&i.z>=-1&&i.z<=1},d=function(e,r,i){c=t(),c.position.set(e,r,i),p(c)},h=function(t,r,i){e.push(t,r,i)},u=function(e,t){n.push(e,t)},m=function(e,t,r){return e.visible===!0||t.visible===!0||r.visible===!0?!0:(L[0]=e.positionScreen,L[1]=t.positionScreen,L[2]=r.positionScreen,V.isIntersectionBox(O.setFromPoints(L)))},v=function(e,t,r){return(r.positionScreen.x-e.positionScreen.x)*(t.positionScreen.y-e.positionScreen.y)-(r.positionScreen.y-e.positionScreen.y)*(t.positionScreen.x-e.positionScreen.x)<0},R=function(e,t){var r=x[e],n=x[t];f=i(),f.id=o.id,f.v1.copy(r),f.v2.copy(n),f.z=(r.positionScreen.z+n.positionScreen.z)/2,f.renderOrder=o.renderOrder,f.material=o.material,C.elements.push(f)},T=function(t,i,l){var c=x[t],p=x[i],d=x[l];if(m(c,p,d)!==!1&&(a.side===THREE.DoubleSide||v(c,p,d)===!0)){E=r(),E.id=o.id,E.v1.copy(c),E.v2.copy(p),E.v3.copy(d),E.z=(c.positionScreen.z+p.positionScreen.z+d.positionScreen.z)/3,E.renderOrder=o.renderOrder,E.normalModel.fromArray(e,3*t),E.normalModel.applyMatrix3(s).normalize();for(var f=0;3>f;f++){var h=E.vertexNormalsModel[f];h.fromArray(e,3*arguments[f]),h.applyMatrix3(s).normalize();var u=E.uvs[f];u.fromArray(n,2*arguments[f])}E.vertexNormalsLength=3,E.material=o.material,C.elements.push(E)}};return{setObject:l,projectVertex:p,checkTriangleVisibility:m,checkBackfaceCulling:v,pushVertex:d,pushNormal:h,pushUv:u,pushLine:R,pushTriangle:T}},I=new F;this.projectScene=function(c,v,R,T){d=0,h=0,m=0,C.elements.length=0,c.autoUpdate===!0&&c.updateMatrixWorld(),null===v.parent&&v.updateMatrixWorld(),W.copy(v.matrixWorldInverse.getInverse(v.matrixWorld)),B.multiplyMatrices(v.projectionMatrix,W),N.setFromMatrix(B),l=0,C.objects.length=0,C.lights.length=0,c.traverseVisible(function(t){if(t instanceof THREE.Light)C.lights.push(t);else if(t instanceof THREE.Mesh||t instanceof THREE.Line||t instanceof THREE.Sprite){var r=t.material;if(r.visible===!1)return;(t.frustumCulled===!1||N.intersectsObject(t)===!0)&&(s=e(),s.id=t.id,s.object=t,j.setFromMatrixPosition(t.matrixWorld),j.applyProjection(B),s.z=j.z,s.renderOrder=t.renderOrder,C.objects.push(s))}}),R===!0&&C.objects.sort(o);for(var S=0,H=C.objects.length;H>S;S++){var g=C.objects[S].object,w=g.geometry;if(I.setObject(g),y=g.matrixWorld,p=0,g instanceof THREE.Mesh){if(w instanceof THREE.BufferGeometry){var b=w.attributes,M=w.groups;if(void 0===b.position)continue;for(var V=b.position.array,O=0,L=V.length;L>O;O+=3)I.pushVertex(V[O],V[O+1],V[O+2]);if(void 0!==b.normal)for(var F=b.normal.array,O=0,L=F.length;L>O;O+=3)I.pushNormal(F[O],F[O+1],F[O+2]);if(void 0!==b.uv)for(var G=b.uv.array,O=0,L=G.length;L>O;O+=2)I.pushUv(G[O],G[O+1]);if(null!==w.index){var U=w.index.array;if(M.length>0)for(var S=0;SO;O+=3)I.pushTriangle(U[O],U[O+1],U[O+2]);else for(var O=0,L=U.length;L>O;O+=3)I.pushTriangle(U[O],U[O+1],U[O+2])}else for(var O=0,L=V.length/3;L>O;O+=3)I.pushTriangle(O,O+1,O+2)}else if(w instanceof THREE.Geometry){var J=w.vertices,Q=w.faces,K=w.faceVertexUvs[0];k.getNormalMatrix(y);for(var X=g.material,Y=X instanceof THREE.MeshFaceMaterial,Z=Y===!0?g.material:null,$=0,_=J.length;_>$;$++){var ee=J[$];if(j.copy(ee),X.morphTargets===!0)for(var te=w.morphTargets,re=g.morphTargetInfluences,ie=0,ne=te.length;ne>ie;ie++){var oe=re[ie];if(0!==oe){var ae=te[ie],se=ae.vertices[$];j.x+=(se.x-ee.x)*oe,j.y+=(se.y-ee.y)*oe,j.z+=(se.z-ee.z)*oe}}I.pushVertex(j.x,j.y,j.z)}for(var le=0,ce=Q.length;ce>le;le++){var pe=Q[le];if(X=Y===!0?Z.materials[pe.materialIndex]:g.material,void 0!==X){var Ee=X.side,de=x[pe.a],fe=x[pe.b],he=x[pe.c];if(I.checkTriangleVisibility(de,fe,he)!==!1){var ue=I.checkBackfaceCulling(de,fe,he);if(Ee!==THREE.DoubleSide){if(Ee===THREE.FrontSide&&ue===!1)continue;if(Ee===THREE.BackSide&&ue===!0)continue}E=r(),E.id=g.id,E.v1.copy(de),E.v2.copy(fe),E.v3.copy(he),E.normalModel.copy(pe.normal),ue!==!1||Ee!==THREE.BackSide&&Ee!==THREE.DoubleSide||E.normalModel.negate(),E.normalModel.applyMatrix3(k).normalize();for(var me=pe.vertexNormals,ye=0,ve=Math.min(me.length,3);ve>ye;ye++){var Re=E.vertexNormalsModel[ye];Re.copy(me[ye]),ue!==!1||Ee!==THREE.BackSide&&Ee!==THREE.DoubleSide||Re.negate(),Re.applyMatrix3(k).normalize()}E.vertexNormalsLength=me.length;var xe=K[le];if(void 0!==xe)for(var Te=0;3>Te;Te++)E.uvs[Te].copy(xe[Te]);E.color=pe.color,E.material=X,E.z=(de.positionScreen.z+fe.positionScreen.z+he.positionScreen.z)/3,E.renderOrder=g.renderOrder,C.elements.push(E)}}}}}else if(g instanceof THREE.Line){if(w instanceof THREE.BufferGeometry){var b=w.attributes;if(void 0!==b.position){for(var V=b.position.array,O=0,L=V.length;L>O;O+=3)I.pushVertex(V[O],V[O+1],V[O+2]);if(null!==w.index)for(var U=w.index.array,O=0,L=U.length;L>O;O+=2)I.pushLine(U[O],U[O+1]);else for(var Se=g instanceof THREE.LineSegments?2:1,O=0,L=V.length/3-1;L>O;O+=Se)I.pushLine(O,O+1)}}else if(w instanceof THREE.Geometry){P.multiplyMatrices(B,y);var J=g.geometry.vertices;if(0===J.length)continue;de=t(),de.positionScreen.copy(J[0]).applyMatrix4(P);for(var Se=g instanceof THREE.LineSegments?2:1,$=1,_=J.length;_>$;$++)de=t(),de.positionScreen.copy(J[$]).applyMatrix4(P),($+1)%Se>0||(fe=x[p-2],A.copy(de.positionScreen),D.copy(fe.positionScreen),a(A,D)===!0&&(A.multiplyScalar(1/A.w),D.multiplyScalar(1/D.w),f=i(),f.id=g.id,f.v1.positionScreen.copy(A),f.v2.positionScreen.copy(D),f.z=Math.max(A.z,D.z),f.renderOrder=g.renderOrder,f.material=g.material,g.material.vertexColors===THREE.VertexColors&&(f.vertexColors[0].copy(g.geometry.colors[$]),f.vertexColors[1].copy(g.geometry.colors[$-1])),C.elements.push(f)))}}else if(g instanceof THREE.Sprite){z.set(y.elements[12],y.elements[13],y.elements[14],1),z.applyMatrix4(B);var He=1/z.w;z.z*=He,z.z>=-1&&z.z<=1&&(u=n(),u.id=g.id,u.x=z.x*He,u.y=z.y*He,u.z=z.z,u.renderOrder=g.renderOrder,u.object=g,u.rotation=g.rotation,u.scale.x=g.scale.x*Math.abs(u.x-(z.x+v.projectionMatrix.elements[0])/(z.w+v.projectionMatrix.elements[12])),u.scale.y=g.scale.y*Math.abs(u.y-(z.y+v.projectionMatrix.elements[5])/(z.w+v.projectionMatrix.elements[13])),u.material=g.material,C.elements.push(u))}}return T===!0&&C.elements.sort(o),C}},THREE.SpriteCanvasMaterial=function(e){THREE.Material.call(this),this.type="SpriteCanvasMaterial",this.color=new THREE.Color(16777215),this.program=function(e,t){},this.setValues(e)},THREE.SpriteCanvasMaterial.prototype=Object.create(THREE.Material.prototype),THREE.SpriteCanvasMaterial.prototype.constructor=THREE.SpriteCanvasMaterial,THREE.SpriteCanvasMaterial.prototype.clone=function(){var e=new THREE.SpriteCanvasMaterial;return e.copy(this),e.color.copy(this.color),e.program=this.program,e},THREE.CanvasRenderer=function(e){function t(){ye.setRGB(0,0,0),ve.setRGB(0,0,0),Re.setRGB(0,0,0);for(var e=0,t=S.length;t>e;e++){var r=S[e],i=r.color;r instanceof THREE.AmbientLight?ye.add(i):r instanceof THREE.DirectionalLight?ve.add(i):r instanceof THREE.PointLight&&Re.add(i)}}function r(e,t,r){for(var i=0,n=S.length;n>i;i++){var o=S[i];if(de.copy(o.color),o instanceof THREE.DirectionalLight){var a=xe.setFromMatrixPosition(o.matrixWorld).normalize(),s=t.dot(a);if(0>=s)continue;s*=o.intensity,r.add(de.multiplyScalar(s))}else if(o instanceof THREE.PointLight){var a=xe.setFromMatrixPosition(o.matrixWorld),s=t.dot(xe.subVectors(a,e).normalize());if(0>=s)continue;if(s*=0==o.distance?1:1-Math.min(e.distanceTo(a)/o.distance,1),0==s)continue;s*=o.intensity,r.add(de.multiplyScalar(s))}}}function i(e,t,r){d(r.opacity),f(r.blending);var i=t.scale.x*q,n=t.scale.y*J,o=.5*Math.sqrt(i*i+n*n);if(me.min.set(e.x-o,e.y-o),me.max.set(e.x+o,e.y+o),r instanceof THREE.SpriteMaterial){var a=r.map;if(null!==a){var s=fe[a.id];if((void 0===s||s.version!==a.version)&&(s=c(a),fe[a.id]=s),void 0!==s.canvas){v(s.canvas);var l=a.image,p=l.width*a.offset.x,E=l.height*a.offset.y,h=l.width*a.repeat.x,u=l.height*a.repeat.y,m=i/h,R=n/u;$.save(),$.translate(e.x,e.y),0!==r.rotation&&$.rotate(r.rotation),$.translate(-i/2,-n/2),$.scale(m,R),$.translate(-p,-E),$.fillRect(p,E,h,u),$.restore()}}else v(r.color.getStyle()),$.save(),$.translate(e.x,e.y),0!==r.rotation&&$.rotate(r.rotation),$.scale(i,-n),$.fillRect(-.5,-.5,1,1),$.restore()}else r instanceof THREE.SpriteCanvasMaterial&&(y(r.color.getStyle()),v(r.color.getStyle()),$.save(),$.translate(e.x,e.y),0!==r.rotation&&$.rotate(r.rotation),$.scale(i,n),r.program($),$.restore())}function n(e,t,r,i){if(d(i.opacity),f(i.blending),$.beginPath(),$.moveTo(e.positionScreen.x,e.positionScreen.y),$.lineTo(t.positionScreen.x,t.positionScreen.y),i instanceof THREE.LineBasicMaterial){if(h(i.linewidth),u(i.linecap),m(i.linejoin),i.vertexColors!==THREE.VertexColors)y(i.color.getStyle());else{var n=r.vertexColors[0].getStyle(),o=r.vertexColors[1].getStyle();if(n===o)y(n);else{try{var a=$.createLinearGradient(e.positionScreen.x,e.positionScreen.y,t.positionScreen.x,t.positionScreen.y);a.addColorStop(0,n),a.addColorStop(1,o)}catch(s){a=n}y(a)}}$.stroke(),me.expandByScalar(2*i.linewidth)}else i instanceof THREE.LineDashedMaterial&&(h(i.linewidth),u(i.linecap),m(i.linejoin),y(i.color.getStyle()),R([i.dashSize,i.gapSize]),$.stroke(),me.expandByScalar(2*i.linewidth),R([]))}function o(e,t,i,n,o,c,E,h){if(D.info.render.vertices+=3,D.info.render.faces++,d(h.opacity),f(h.blending),M=e.positionScreen.x,C=e.positionScreen.y,j=t.positionScreen.x,z=t.positionScreen.y,V=i.positionScreen.x,O=i.positionScreen.y,a(M,C,j,z,V,O),(h instanceof THREE.MeshLambertMaterial||h instanceof THREE.MeshPhongMaterial)&&null===h.map)pe.copy(h.color),Ee.copy(h.emissive),h.vertexColors===THREE.FaceColors&&pe.multiply(E.color),ce.copy(ye),Te.copy(e.positionWorld).add(t.positionWorld).add(i.positionWorld).divideScalar(3),r(Te,E.normalModel,ce),ce.multiply(pe).add(Ee),h.wireframe===!0?s(ce,h.wireframeLinewidth,h.wireframeLinecap,h.wireframeLinejoin):l(ce);else if(h instanceof THREE.MeshBasicMaterial||h instanceof THREE.MeshLambertMaterial||h instanceof THREE.MeshPhongMaterial)if(null!==h.map){var u=h.map.mapping;u===THREE.UVMapping&&(L=E.uvs,p(M,C,j,z,V,O,L[n].x,L[n].y,L[o].x,L[o].y,L[c].x,L[c].y,h.map))}else null!==h.envMap?h.envMap.mapping===THREE.SphericalReflectionMapping&&(Se.copy(E.vertexNormalsModel[n]).applyMatrix3(He),W=.5*Se.x+.5,B=.5*Se.y+.5,Se.copy(E.vertexNormalsModel[o]).applyMatrix3(He),P=.5*Se.x+.5,k=.5*Se.y+.5,Se.copy(E.vertexNormalsModel[c]).applyMatrix3(He),N=.5*Se.x+.5,A=.5*Se.y+.5,p(M,C,j,z,V,O,W,B,P,k,N,A,h.envMap)):(ce.copy(h.color),h.vertexColors===THREE.FaceColors&&ce.multiply(E.color),h.wireframe===!0?s(ce,h.wireframeLinewidth,h.wireframeLinecap,h.wireframeLinejoin):l(ce));else h instanceof THREE.MeshNormalMaterial?(Se.copy(E.normalModel).applyMatrix3(He),ce.setRGB(Se.x,Se.y,Se.z).multiplyScalar(.5).addScalar(.5),h.wireframe===!0?s(ce,h.wireframeLinewidth,h.wireframeLinecap,h.wireframeLinejoin):l(ce)):(ce.setRGB(1,1,1),h.wireframe===!0?s(ce,h.wireframeLinewidth,h.wireframeLinecap,h.wireframeLinejoin):l(ce))}function a(e,t,r,i,n,o){$.beginPath(),$.moveTo(e,t),$.lineTo(r,i),$.lineTo(n,o),$.closePath()}function s(e,t,r,i){h(t),u(r),m(i),y(e.getStyle()),$.stroke(),me.expandByScalar(2*t)}function l(e){v(e.getStyle()),$.fill()}function c(e){if(0===e.version||e instanceof THREE.CompressedTexture||e instanceof THREE.DataTexture)return{canvas:void 0,version:e.version};var t=e.image,r=document.createElement("canvas");r.width=t.width,r.height=t.height;var i=r.getContext("2d");i.setTransform(1,0,0,-1,0,t.height),i.drawImage(t,0,0);var n=e.wrapS===THREE.RepeatWrapping,o=e.wrapT===THREE.RepeatWrapping,a="no-repeat";return n===!0&&o===!0?a="repeat":n===!0?a="repeat-x":o===!0&&(a="repeat-y"),{canvas:$.createPattern(r,a),version:e.version}}function p(e,t,r,i,n,o,a,s,l,p,E,d,f){var h=fe[f.id];if((void 0===h||h.version!==f.version)&&(h=c(f),fe[f.id]=h),void 0===h.canvas)return v("rgba( 0, 0, 0, 1)"),void $.fill();v(h.canvas);var u,m,y,R,x,T,S,H,g=f.offset.x/f.repeat.x,w=f.offset.y/f.repeat.y,b=f.image.width*f.repeat.x,M=f.image.height*f.repeat.y;a=(a+g)*b,s=(s+w)*M,l=(l+g)*b,p=(p+w)*M,E=(E+g)*b,d=(d+w)*M,r-=e,i-=t,n-=e,o-=t,l-=a,p-=s,E-=a,d-=s,S=l*d-E*p,0!==S&&(H=1/S,u=(d*r-p*n)*H,m=(d*i-p*o)*H,y=(l*n-E*r)*H,R=(l*o-E*i)*H,x=e-u*a-y*s,T=t-m*a-R*s,$.save(),$.transform(u,m,y,R,x,T),$.fill(),$.restore())}function E(e,t,r){var i,n=t.x-e.x,o=t.y-e.y,a=n*n+o*o;0!==a&&(i=r/Math.sqrt(a),n*=i,o*=i,t.x+=n,t.y+=o,e.x-=n,e.y-=o)}function d(e){te!==e&&($.globalAlpha=e,te=e)}function f(e){re!==e&&(e===THREE.NormalBlending?$.globalCompositeOperation="source-over":e===THREE.AdditiveBlending?$.globalCompositeOperation="lighter":e===THREE.SubtractiveBlending&&($.globalCompositeOperation="darker"),re=e)}function h(e){oe!==e&&($.lineWidth=e,oe=e)}function u(e){ae!==e&&($.lineCap=e,ae=e)}function m(e){se!==e&&($.lineJoin=e,se=e)}function y(e){ie!==e&&($.strokeStyle=e,ie=e)}function v(e){ne!==e&&($.fillStyle=e,ne=e)}function R(e){le.length!==e.length&&($.setLineDash(e),le=e)}console.log("THREE.CanvasRenderer",THREE.REVISION),e=e||{};var x,T,S,H,g,w,b,M,C,j,z,V,O,L,W,B,P,k,N,A,D=this,F=new THREE.Projector,I=void 0!==e.canvas?e.canvas:document.createElement("canvas"),G=I.width,U=I.height,q=Math.floor(G/2),J=Math.floor(U/2),Q=0,K=0,X=G,Y=U,Z=1,$=I.getContext("2d",{alpha:e.alpha===!0}),_=new THREE.Color(0),ee=e.alpha===!0?0:1,te=1,re=0,ie=null,ne=null,oe=null,ae=null,se=null,le=[],ce=(new THREE.RenderableVertex,new THREE.RenderableVertex,new THREE.Color),pe=(new THREE.Color,new THREE.Color,new THREE.Color,new THREE.Color,new THREE.Color),Ee=new THREE.Color,de=new THREE.Color,fe={},he=new THREE.Box2,ue=new THREE.Box2,me=new THREE.Box2,ye=new THREE.Color,ve=new THREE.Color,Re=new THREE.Color,xe=new THREE.Vector3,Te=new THREE.Vector3,Se=new THREE.Vector3,He=new THREE.Matrix3;void 0===$.setLineDash&&($.setLineDash=function(){}),this.domElement=I,this.autoClear=!0,this.sortObjects=!0,this.sortElements=!0,this.info={render:{vertices:0,faces:0}},this.supportsVertexTextures=function(){},this.setFaceCulling=function(){},this.getContext=function(){return $},this.getContextAttributes=function(){return $.getContextAttributes()},this.getPixelRatio=function(){return Z},this.setPixelRatio=function(e){void 0!==e&&(Z=e)},this.setSize=function(e,t,r){G=e*Z,U=t*Z,I.width=G,I.height=U,q=Math.floor(G/2),J=Math.floor(U/2),r!==!1&&(I.style.width=e+"px",I.style.height=t+"px"),he.min.set(-q,-J),he.max.set(q,J),ue.min.set(-q,-J),ue.max.set(q,J),te=1,re=0,ie=null,ne=null,oe=null,ae=null,se=null,this.setViewport(0,0,e,t)},this.setViewport=function(e,t,r,i){Q=e*Z,K=t*Z,X=r*Z,Y=i*Z},this.setScissor=function(){},this.enableScissorTest=function(){},this.setClearColor=function(e,t){_.set(e),ee=void 0!==t?t:1,ue.min.set(-q,-J),ue.max.set(q,J)},this.setClearColorHex=function(e,t){console.warn("THREE.CanvasRenderer: .setClearColorHex() is being removed. Use .setClearColor() instead."),this.setClearColor(e,t)},this.getClearColor=function(){return _},this.getClearAlpha=function(){return ee},this.getMaxAnisotropy=function(){return 0},this.clear=function(){ue.empty()===!1&&(ue.intersect(he),ue.expandByScalar(2),ue.min.x=ue.min.x+q,ue.min.y=-ue.min.y+J,ue.max.x=ue.max.x+q,ue.max.y=-ue.max.y+J,1>ee&&$.clearRect(0|ue.min.x,0|ue.max.y,ue.max.x-ue.min.x|0,ue.min.y-ue.max.y|0),ee>0&&(f(THREE.NormalBlending),d(1),v("rgba("+Math.floor(255*_.r)+","+Math.floor(255*_.g)+","+Math.floor(255*_.b)+","+ee+")"),$.fillRect(0|ue.min.x,0|ue.max.y,ue.max.x-ue.min.x|0,ue.min.y-ue.max.y|0)),ue.makeEmpty())},this.clearColor=function(){},this.clearDepth=function(){},this.clearStencil=function(){},this.render=function(e,r){if(r instanceof THREE.Camera==!1)return void console.error("THREE.CanvasRenderer.render: camera is not an instance of THREE.Camera.");this.autoClear===!0&&this.clear(),D.info.render.vertices=0,D.info.render.faces=0,$.setTransform(X/G,0,0,-Y/U,Q,U-K),$.translate(q,J),x=F.projectScene(e,r,this.sortObjects,this.sortElements),T=x.elements,S=x.lights,H=r,He.getNormalMatrix(r.matrixWorldInverse),t();for(var a=0,s=T.length;s>a;a++){var l=T[a],c=l.material;if(void 0!==c&&0!==c.opacity){if(me.makeEmpty(),l instanceof THREE.RenderableSprite)g=l,g.x*=q,g.y*=J,i(g,l,c);else if(l instanceof THREE.RenderableLine)g=l.v1,w=l.v2,g.positionScreen.x*=q,g.positionScreen.y*=J,w.positionScreen.x*=q,w.positionScreen.y*=J,me.setFromPoints([g.positionScreen,w.positionScreen]),he.isIntersectionBox(me)===!0&&n(g,w,l,c);else if(l instanceof THREE.RenderableFace){if(g=l.v1,w=l.v2,b=l.v3,g.positionScreen.z<-1||g.positionScreen.z>1)continue;if(w.positionScreen.z<-1||w.positionScreen.z>1)continue;if(b.positionScreen.z<-1||b.positionScreen.z>1)continue;g.positionScreen.x*=q,g.positionScreen.y*=J,w.positionScreen.x*=q,w.positionScreen.y*=J,b.positionScreen.x*=q,b.positionScreen.y*=J,c.overdraw>0&&(E(g.positionScreen,w.positionScreen,c.overdraw),E(w.positionScreen,b.positionScreen,c.overdraw),E(b.positionScreen,g.positionScreen,c.overdraw)),me.setFromPoints([g.positionScreen,w.positionScreen,b.positionScreen]),he.isIntersectionBox(me)===!0&&o(g,w,b,0,1,2,l,c)}ue.union(me)}}$.setTransform(1,0,0,1,0,0)}},THREE.CSS3DObject=function(e){THREE.Object3D.call(this),this.element=e,this.element.style.position="absolute",this.addEventListener("removed",function(e){null!==this.element.parentNode&&this.element.parentNode.removeChild(this.element)})},THREE.CSS3DObject.prototype=Object.create(THREE.Object3D.prototype),THREE.CSS3DObject.prototype.constructor=THREE.CSS3DObject,THREE.CSS3DSprite=function(e){THREE.CSS3DObject.call(this,e)},THREE.CSS3DSprite.prototype=Object.create(THREE.CSS3DObject.prototype),THREE.CSS3DSprite.prototype.constructor=THREE.CSS3DSprite,THREE.CSS3DRenderer=function(){console.log("THREE.CSS3DRenderer",THREE.REVISION);var e,t,r,i,n=new THREE.Matrix4,o={camera:{fov:0,style:""},objects:{}},a=document.createElement("div");a.style.overflow="hidden",a.style.WebkitTransformStyle="preserve-3d",a.style.MozTransformStyle="preserve-3d",a.style.oTransformStyle="preserve-3d",a.style.transformStyle="preserve-3d",this.domElement=a;var s=document.createElement("div");s.style.WebkitTransformStyle="preserve-3d",s.style.MozTransformStyle="preserve-3d",s.style.oTransformStyle="preserve-3d",s.style.transformStyle="preserve-3d",a.appendChild(s),this.setClearColor=function(){},this.getSize=function(){return{width:e,height:t}},this.setSize=function(n,o){e=n,t=o,r=e/2,i=t/2,a.style.width=n+"px",a.style.height=o+"px",s.style.width=n+"px",s.style.height=o+"px"};var l=function(e){return Math.abs(e)l;l++)E(e.children[l],t)};this.render=function(e,n){var l=.5/Math.tan(THREE.Math.degToRad(.5*n.fov))*t;o.camera.fov!==l&&(a.style.WebkitPerspective=l+"px",a.style.MozPerspective=l+"px",a.style.oPerspective=l+"px",a.style.perspective=l+"px",o.camera.fov=l),e.updateMatrixWorld(),null===n.parent&&n.updateMatrixWorld(),n.matrixWorldInverse.getInverse(n.matrixWorld);var p="translate3d(0,0,"+l+"px)"+c(n.matrixWorldInverse)+" translate3d("+r+"px,"+i+"px, 0)";o.camera.style!==p&&(s.style.WebkitTransform=p,s.style.MozTransform=p,s.style.oTransform=p,s.style.transform=p,o.camera.style=p),E(e,n)}},THREE.SVGObject=function(e){THREE.Object3D.call(this),this.node=e},THREE.SVGObject.prototype=Object.create(THREE.Object3D.prototype),THREE.SVGObject.prototype.constructor=THREE.SVGObject,THREE.SVGRenderer=function(){function e(e){b.setRGB(0,0,0),M.setRGB(0,0,0),C.setRGB(0,0,0);for(var t=0,r=e.length;r>t;t++){var i=e[t],n=i.color;i instanceof THREE.AmbientLight?(b.r+=n.r,b.g+=n.g,b.b+=n.b):i instanceof THREE.DirectionalLight?(M.r+=n.r,M.g+=n.g,M.b+=n.b):i instanceof THREE.PointLight&&(C.r+=n.r,C.g+=n.g,C.b+=n.b)}}function t(e,t,r,i){for(var n=0,o=e.length;o>n;n++){var a=e[n],s=a.color;if(a instanceof THREE.DirectionalLight){var l=V.setFromMatrixPosition(a.matrixWorld).normalize(),c=r.dot(l);if(0>=c)continue;c*=a.intensity,i.r+=s.r*c,i.g+=s.g*c,i.b+=s.b*c}else if(a instanceof THREE.PointLight){var l=V.setFromMatrixPosition(a.matrixWorld),c=r.dot(V.subVectors(l,t).normalize());if(0>=c)continue;if(c*=0==a.distance?1:1-Math.min(t.distanceTo(l)/a.distance,1),0==c)continue;c*=a.intensity,i.r+=s.r*c,i.g+=s.g*c,i.b+=s.b*c}}}function r(e,t,r){var i=t.scale.x*f,n=t.scale.y*h;v=s(I++),v.setAttribute("x",e.x-.5*i),v.setAttribute("y",e.y-.5*n),v.setAttribute("width",i),v.setAttribute("height",n),r instanceof THREE.SpriteMaterial&&v.setAttribute("style","fill: "+r.color.getStyle()),T.appendChild(v)}function i(e,t,r,i){v=o(F++),v.setAttribute("x1",e.positionScreen.x),v.setAttribute("y1",e.positionScreen.y),v.setAttribute("x2",t.positionScreen.x),v.setAttribute("y2",t.positionScreen.y),i instanceof THREE.LineBasicMaterial&&(v.setAttribute("style","fill: none; stroke: "+i.color.getStyle()+"; stroke-width: "+i.linewidth+"; stroke-opacity: "+i.opacity+"; stroke-linecap: "+i.linecap+"; stroke-linejoin: "+i.linejoin),T.appendChild(v))}function n(e,r,i,n,o){R.info.render.vertices+=3,R.info.render.faces++,v=a(D++),v.setAttribute("d","M "+e.positionScreen.x+" "+e.positionScreen.y+" L "+r.positionScreen.x+" "+r.positionScreen.y+" L "+i.positionScreen.x+","+i.positionScreen.y+"z"),o instanceof THREE.MeshBasicMaterial?(g.copy(o.color),o.vertexColors===THREE.FaceColors&&g.multiply(n.color)):o instanceof THREE.MeshLambertMaterial||o instanceof THREE.MeshPhongMaterial?(w.copy(o.color),o.vertexColors===THREE.FaceColors&&w.multiply(n.color),g.copy(b),O.copy(e.positionWorld).add(r.positionWorld).add(i.positionWorld).divideScalar(3),t(p,O,n.normalModel,g),g.multiply(w).add(o.emissive)):o instanceof THREE.MeshNormalMaterial&&(L.copy(n.normalModel).applyMatrix3(W),g.setRGB(L.x,L.y,L.z).multiplyScalar(.5).addScalar(.5)),o.wireframe?v.setAttribute("style","fill: none; stroke: "+g.getStyle()+"; stroke-width: "+o.wireframeLinewidth+"; stroke-opacity: "+o.opacity+"; stroke-linecap: "+o.wireframeLinecap+"; stroke-linejoin: "+o.wireframeLinejoin):v.setAttribute("style","fill: "+g.getStyle()+"; fill-opacity: "+o.opacity),T.appendChild(v)}function o(e){return null==N[e]?(N[e]=document.createElementNS("http://www.w3.org/2000/svg","line"),0==G&&N[e].setAttribute("shape-rendering","crispEdges"),N[e]):N[e]}function a(e){return null==k[e]?(k[e]=document.createElementNS("http://www.w3.org/2000/svg","path"),0==G&&k[e].setAttribute("shape-rendering","crispEdges"),k[e]):k[e]}function s(e){return null==A[e]?(A[e]=document.createElementNS("http://www.w3.org/2000/svg","rect"),0==G&&A[e].setAttribute("shape-rendering","crispEdges"),A[e]):A[e]}console.log("THREE.SVGRenderer",THREE.REVISION);var l,c,p,E,d,f,h,u,m,y,v,R=this,x=new THREE.Projector,T=document.createElementNS("http://www.w3.org/2000/svg","svg"),S=new THREE.Box2,H=new THREE.Box2,g=new THREE.Color,w=new THREE.Color,b=new THREE.Color,M=new THREE.Color,C=new THREE.Color,j=new THREE.Color,z=1,V=new THREE.Vector3,O=new THREE.Vector3,L=new THREE.Vector3,W=new THREE.Matrix3,B=new THREE.Matrix4,P=new THREE.Matrix4,k=[],N=[],A=[],D=0,F=0,I=0,G=1;this.domElement=T,this.autoClear=!0,this.sortObjects=!0,this.sortElements=!0,this.info={render:{vertices:0,faces:0}},this.setQuality=function(e){switch(e){case"high":G=1;break;case"low":G=0}},this.supportsVertexTextures=function(){},this.setFaceCulling=function(){},this.setClearColor=function(e,t){j.set(e),z=void 0!==t?t:1},this.setPixelRatio=function(){},this.setSize=function(e,t){E=e,d=t,f=E/2,h=d/2,T.setAttribute("viewBox",-f+" "+-h+" "+E+" "+d),T.setAttribute("width",E),T.setAttribute("height",d),S.min.set(-f,-h),S.max.set(f,h)},this.clear=function(){for(D=0,F=0,I=0;T.childNodes.length>0;)T.removeChild(T.childNodes[0]);T.style.backgroundColor="rgba("+(255*j.r|0)+","+(255*j.g|0)+","+(255*j.b|0)+","+z+")"},this.render=function(t,o){if(o instanceof THREE.Camera==!1)return void console.error("THREE.SVGRenderer.render: camera is not an instance of THREE.Camera.");this.autoClear===!0&&this.clear(),R.info.render.vertices=0,R.info.render.faces=0,B.copy(o.matrixWorldInverse.getInverse(o.matrixWorld)),P.multiplyMatrices(o.projectionMatrix,B),l=x.projectScene(t,o,this.sortObjects,this.sortElements),c=l.elements,p=l.lights,W.getNormalMatrix(o.matrixWorldInverse),e(p);for(var a=0,s=c.length;s>a;a++){var E=c[a],d=E.material;if(void 0!==d&&0!==d.opacity)if(H.makeEmpty(),E instanceof THREE.RenderableSprite)u=E,u.x*=f,u.y*=-h,r(u,E,d);else if(E instanceof THREE.RenderableLine)u=E.v1,m=E.v2,u.positionScreen.x*=f,u.positionScreen.y*=-h,m.positionScreen.x*=f,m.positionScreen.y*=-h,H.setFromPoints([u.positionScreen,m.positionScreen]),S.isIntersectionBox(H)===!0&&i(u,m,E,d);else if(E instanceof THREE.RenderableFace){if(u=E.v1,m=E.v2,y=E.v3,u.positionScreen.z<-1||u.positionScreen.z>1)continue;if(m.positionScreen.z<-1||m.positionScreen.z>1)continue;if(y.positionScreen.z<-1||y.positionScreen.z>1)continue;u.positionScreen.x*=f,u.positionScreen.y*=-h,m.positionScreen.x*=f,m.positionScreen.y*=-h,y.positionScreen.x*=f,y.positionScreen.y*=-h,H.setFromPoints([u.positionScreen,m.positionScreen,y.positionScreen]),S.isIntersectionBox(H)===!0&&n(u,m,y,E,d)}}t.traverseVisible(function(e){if(e instanceof THREE.SVGObject){V.setFromMatrixPosition(e.matrixWorld),V.applyProjection(P);var t=V.x*f,r=-V.y*h,i=e.node;i.setAttribute("transform","translate("+t+","+r+")"),T.appendChild(i)}})}};