diff --git a/README.md b/README.md index 94de884..570e9c6 100755 --- a/README.md +++ b/README.md @@ -1,31 +1,87 @@ -WebGL Forward+ and Clustered Deferred Shading -====================== +**University of Pennsylvania, CIS 565: GPU Programming and Architecture** +# Project 5 - WebGL Forward+ and Clustered Deferred Shading -**University of Pennsylvania, CIS 565: GPU Programming and Architecture, Project 5** +* Jonas Oppenheim ([LinkedIn](https://www.linkedin.com/in/jonasoppenheim/), [GitHub](https://github.com/oppenheimj/), [personal](http://www.jonasoppenheim.com/)) +* Tested on: Windows 10, Ryzen 9 5950x, 32GB, RTX 3080 (personal machine) -* (TODO) YOUR NAME HERE -* Tested on: (TODO) **Google Chrome 222.2** on - Windows 22, i7-2222 @ 2.22GHz 22GB, GTX 222 222MB (Moore 2222 Lab) +## Live Online -### Live Online +[Link to live version](http://oppenheimj.github.io/Project5-WebGL-Forward-Plus-and-Clustered-Deferred) -[![](img/thumb.png)](http://TODO.github.io/Project5-WebGL-Forward-Plus-and-Clustered-Deferred) +## Demo Video/GIF -### Demo Video/GIF +![](img/coolgif.gif) -[![](img/video.png)](TODO) +## Introduction +The purpose of this assignment was to experiment with three different rendering techniques: Forward, Forward+, and Deferred. Forward rendering involves calling the vertex and fragment shaders for every object in the scene and iterating over all light sources to determine all of the light contributions. Forward+ rendering partitions the camera frustum into a 3D grid of mini frustums and then figures out which lights affect which mini frustums. The mini frustum data is passed to the fragment shader as a texture, which accelerates shading because each fragment "knows" exactly which lights affect it and only iterates over those lights, rather than all lights. Deferred rendering still uses the frustum grid data structure, but also adds in a compute shader which populates a gbuffer with position, normal, and color data for every fragment once and saves this information to a texture. This has the effect of separating vertex shading and fragment shading, so that vertex shading is only done once for the entire scene. -### (TODO: Your README) +By far the most challenging part about this assignment was constructing the "clusters", which is the space-partitioning data structure that is the camera's frustum sub divided. In the code, I refer to these subdivisions as "mini frustums" because they are not axis-aligned and are not rectangular. The trick is, for each `z`, compute the dimension of the near and far ends of the mini frustum using a rule introduced in the "Virtual Cameras and Spatial Transforms" lecture of CIS 560, which is that `tan(FOV/2) = (screen.height/2)/screen.z`. This means that we can use the camera's field of view and the `screen.z` for both ends of the mini frustum to obtain the dimensions of each end of the frustum. Obtaining all eight points of each mini frustum follows from this. -*DO NOT* leave the README to the last minute! It is a crucial part of the -project, and we will not be able to grade you without a good README. +``` +... +const tanFovDiv2 = Math.tan((vertFov/2) * Math.PI / 180.0); +const zDepth = fullDepth / this._zSlices; -This assignment has a considerable amount of performance analysis compared -to implementation work. Complete the implementation early to leave time! +for (let z = 0; z < this._zSlices; ++z) { + const zNear = z * zDepth; + const zFar = zNear + zDepth; + const nearScreenHeight = tanFovDiv2 * zNear * 2; + const farScreenHeight = tanFovDiv2 * zFar * 2; -### Credits + const nearScreenWidth = aspect * nearScreenHeight; + const farScreenWidth = aspect * farScreenHeight; + ... +``` +Three.js's `Frustum`, `Plane`, and `Sphere` classes came in huge here. I began by trying to compute intersections of spheres with planes and then circles with lines, and then discovered that Three's Frustum class had a built-in method for computing intersections. + +I believe I have all implementations working, but the actual framerate of the more advanced techniques is lower than the naive framerate. I tried doing clever things with the Javascript in order to make the code flow and read better, but as is often the case, the most readable code is often inefficient and the most performant code is unreadable. + +## Effects +Blinn-Phong shading was implemented with the help of shader code from assignment 4 of CIS 560: +``` +void main() { + vec4 diffuseColor = texture(u_Texture, fs_UV); + + float diffuseTerm = clamp(dot(normalize(fs_Nor), normalize(fs_LightVec)), 0, 1); + float ambientTerm = 0.2; + + float lightIntensity = diffuseTerm + ambientTerm; + + float shininessExponent = 30; + float specularIntensity = max(pow(dot(normalize((fs_CameraPos + fs_LightVec) / 2), fs_Nor), shininessExponent), 0); + + out_Col = vec3(diffuseColor.rgb * lightIntensity + specularIntensity); +} +``` +Only light modification (_pun intended_) was needed to integrate this shader with the Forward+ shader. I did have to pass in the camera position. +![](/img/blinnphong.png) + +## Optimizations +The most significant optimization came from the realization that the mini frustum data structure only needs to computed once and then can be reused every time `updateClusters()` is called. Concretly, the abstract class `BaseRenderer` is given a function `initializeMiniFrustums(camera)`, which creates an instance variable called `index2MiniFrustum` that maps a cluster index to a Three.js Frustum object. Then, every call to `updateClusters()` can iterate through this JSON object like +``` +Object.entries(this.index2MiniFrustum).forEach(([index, miniFrustum]) => { + for (let lightIndex = 0; lightIndex < NUM_LIGHTS; lightIndex++) { + ... + } +} +``` +which simply iterates over the mini frustums instead of recomputing them. The graph below shows that with 100 lights, Forward+ went from 27ms to 7ms per frame with this optimization. Absolute stonks. +![](/img/mini_frustum_comp.png) + +## Performance +My implementations of Forward+ and Deferred did not outperform Forward. I have a feeling the reason is that I was doing things in Javascript that made the code more readable but less performant. I spent a significant amount of time staring at the Chrome profiler and could not figure out how to optimize further. This plot _should_ use milliseconds per frame instead of frames per second, but for some reason, milliseconds always showed up as 0 for Forward. +![](/img/sadge.png) + + + +## Specific references: +* Three.js Frustum documentation +* CIS 560 Blinn-Phong shader from homework 4 +* CIS 560 "Virtual Cameras and Spatial Transforms" lecture slides + +## Credits * [Three.js](https://github.com/mrdoob/three.js) by [@mrdoob](https://github.com/mrdoob) and contributors * [stats.js](https://github.com/mrdoob/stats.js) by [@mrdoob](https://github.com/mrdoob) and contributors * [webgl-debug](https://github.com/KhronosGroup/WebGLDeveloperTools) by Khronos Group Inc. diff --git a/build/bundle.js b/build/bundle.js new file mode 100644 index 0000000..b6a001b --- /dev/null +++ b/build/bundle.js @@ -0,0 +1,3 @@ +/*! For license information please see bundle.js.LICENSE.txt */ +(()=>{var x={124:(x,S,w)=>{"use strict";w.r(S),w.d(S,{glTFLoader:()=>se});var U=w(685);function create(){var x=new U.WT(3);return U.WT!=Float32Array&&(x[0]=0,x[1]=0,x[2]=0),x}function fromValues(x,S,w){var G=new U.WT(3);return G[0]=x,G[1]=S,G[2]=w,G}function set(x,S,w,U){return x[0]=S,x[1]=w,x[2]=U,x}function vec3_dot(x,S){return x[0]*S[0]+x[1]*S[1]+x[2]*S[2]}function cross(x,S,w){var U=S[0],G=S[1],H=S[2],z=w[0],j=w[1],X=w[2];return x[0]=G*X-H*j,x[1]=H*z-U*X,x[2]=U*j-G*z,x}var G,H=function vec3_length(x){var S=x[0],w=x[1],U=x[2];return Math.hypot(S,w,U)};G=create();var z=w(333);function quat_create(){var x=new U.WT(4);return U.WT!=Float32Array&&(x[0]=0,x[1]=0,x[2]=0),x[3]=1,x}function slerp(x,S,w,G){var H,z,j,X,K,q=S[0],Y=S[1],Z=S[2],J=S[3],Q=w[0],ee=w[1],te=w[2],ne=w[3];return(z=q*Q+Y*ee+Z*te+J*ne)<0&&(z=-z,Q=-Q,ee=-ee,te=-te,ne=-ne),1-z>U.Ib?(H=Math.acos(z),j=Math.sin(H),X=Math.sin((1-G)*H)/j,K=Math.sin(G*H)/j):(X=1-G,K=G),x[0]=X*q+K*Q,x[1]=X*Y+K*ee,x[2]=X*Z+K*te,x[3]=X*J+K*ne,x}z.d9,z.al,z.JG;var j,X,K,q,Y,Z,J,Q=z.t8,ee=(z.IH,z.bA,z.AK,z.t7,z.kE,z.we,z.Fv),te=(z.I6,z.fS,j=create(),X=fromValues(1,0,0),K=fromValues(0,1,0),q=quat_create(),Y=quat_create(),Z=function mat3_create(){var x=new U.WT(9);return U.WT!=Float32Array&&(x[1]=0,x[2]=0,x[3]=0,x[5]=0,x[6]=0,x[7]=0),x[0]=1,x[4]=1,x[8]=1,x}(),w(975)),ne=ne||{},ie=ne.Scene=function(){this.meshes=[]},re=ne.Mesh=function(){this.meshID="",this.primitives=[]},oe=ne.Primitive=function(){this.mode=4,this.matrix=te.Ue(),this.indices=null,this.indicesComponentType=5123,this.vertexBuffer=null,this.attributes={},this.material=null,this.technique=null},ae=ne.glTFModel=function(){this.defaultScene="",this.scenes={},this.nodeMatrix={},this.json=null,this.shaders={},this.programs={},this.images={}},se=ne.glTFLoader=function(x){J=x,this._init(),this.glTF=null};se.prototype._init=function(){this._parseDone=!1,this._loadDone=!1,this._bufferRequested=0,this._bufferLoaded=0,this._buffers={},this._bufferTasks={},this._bufferViews={},this._shaderRequested=0,this._shaderLoaded=0,this._imageRequested=0,this._imageLoaded=0,this._pendingTasks=0,this._finishedPendingTasks=0,this.onload=null},se.prototype._getBufferViewData=function(x,S,w){var U=this._bufferViews[S];if(U)w(U);else{var G=x.bufferViews[S],H=this._buffers[G.buffer];if(H)this._bufferViews[S]=H.slice(G.byteOffset,G.byteOffset+G.byteLength),w(U);else{this._pendingTasks++;var z=this._bufferTasks[G.buffer];z||(this._bufferTasks[G.buffer]=[],z=this._bufferTasks[G.buffer]);var j=this;z.push((function(x){var U=j._bufferViews[S];U||(console.log("create new BufferView Data for "+S),U=j._bufferViews[S]=x.slice(G.byteOffset,G.byteOffset+G.byteLength)),j._finishedPendingTasks++,w(U)}))}}},se.prototype._checkComplete=function(){this._bufferRequested==this._bufferLoaded&&this._shaderRequested==this._shaderLoaded&&this._imageRequested==this._imageLoaded&&(this._loadDone=!0),this._loadDone&&this._parseDone&&this._pendingTasks==this._finishedPendingTasks&&this.onload(this.glTF)},se.prototype._parseGLTF=function(x){if(this.glTF.json=x,this.glTF.defaultScene=x.scene,x.scenes)for(var S in x.scenes){var w=new ie;this.glTF.scenes[S]=w;for(var U=x.scenes[S].nodes,G=U.length,H=0;H{"use strict";function colorToString(x,S){var w=x.__state.conversionName.toString(),U=Math.round(x.r),G=Math.round(x.g),H=Math.round(x.b),z=x.a,j=Math.round(x.h),X=x.s.toFixed(1),K=x.v.toFixed(1);if(S||"THREE_CHAR_HEX"===w||"SIX_CHAR_HEX"===w){for(var q=x.hex.toString(16);q.length<6;)q="0"+q;return"#"+q}return"CSS_RGB"===w?"rgb("+U+","+G+","+H+")":"CSS_RGBA"===w?"rgba("+U+","+G+","+H+","+z+")":"HEX"===w?"0x"+x.hex.toString(16):"RGB_ARRAY"===w?"["+U+","+G+","+H+"]":"RGBA_ARRAY"===w?"["+U+","+G+","+H+","+z+"]":"RGB_OBJ"===w?"{r:"+U+",g:"+G+",b:"+H+"}":"RGBA_OBJ"===w?"{r:"+U+",g:"+G+",b:"+H+",a:"+z+"}":"HSV_OBJ"===w?"{h:"+j+",s:"+X+",v:"+K+"}":"HSVA_OBJ"===w?"{h:"+j+",s:"+X+",v:"+K+",a:"+z+"}":"unknown format"}w.d(S,{BJ:()=>Ve,JG:()=>abort,nS:()=>$e,Dd:()=>ze,JQ:()=>Ne,gl:()=>De,NR:()=>He,Re:()=>makeRenderLoop});var U=Array.prototype.forEach,G=Array.prototype.slice,H={BREAK:{},extend:function extend(x){return this.each(G.call(arguments,1),(function(S){(this.isObject(S)?Object.keys(S):[]).forEach(function(w){this.isUndefined(S[w])||(x[w]=S[w])}.bind(this))}),this),x},defaults:function defaults(x){return this.each(G.call(arguments,1),(function(S){(this.isObject(S)?Object.keys(S):[]).forEach(function(w){this.isUndefined(x[w])&&(x[w]=S[w])}.bind(this))}),this),x},compose:function compose(){var x=G.call(arguments);return function(){for(var S=G.call(arguments),w=x.length-1;w>=0;w--)S=[x[w].apply(this,S)];return S[0]}},each:function each(x,S,w){if(x)if(U&&x.forEach&&x.forEach===U)x.forEach(S,w);else if(x.length===x.length+0){var G,H=void 0;for(H=0,G=x.length;H1?H.toArray(arguments):arguments[0];return H.each(z,(function(S){if(S.litmus(x))return H.each(S.conversions,(function(S,w){if(j=S.read(x),!1===X&&!1!==j)return X=j,j.conversionName=w,j.conversion=S,H.BREAK})),H.BREAK})),X},q=void 0,Y={hsv_to_rgb:function hsv_to_rgb(x,S,w){var U=Math.floor(x/60)%6,G=x/60-Math.floor(x/60),H=w*(1-S),z=w*(1-G*S),j=w*(1-(1-G)*S),X=[[w,j,H],[z,w,H],[H,w,j],[H,z,w],[j,H,w],[w,H,z]][U];return{r:255*X[0],g:255*X[1],b:255*X[2]}},rgb_to_hsv:function rgb_to_hsv(x,S,w){var U=Math.min(x,S,w),G=Math.max(x,S,w),H=G-U,z=void 0;return 0===G?{h:NaN,s:0,v:0}:(z=x===G?(S-w)/H:S===G?2+(w-x)/H:4+(x-S)/H,(z/=6)<0&&(z+=1),{h:360*z,s:H/G,v:G/255})},rgb_to_hex:function rgb_to_hex(x,S,w){var U=this.hex_with_component(0,2,x);return U=this.hex_with_component(U,1,S),U=this.hex_with_component(U,0,w)},component_from_hex:function component_from_hex(x,S){return x>>8*S&255},hex_with_component:function hex_with_component(x,S,w){return w<<(q=8*S)|x&~(255<-1?S.length-S.indexOf(".")-1:0}var le=function(x){function NumberController(x,S,w){classCallCheck(this,NumberController);var U=possibleConstructorReturn(this,(NumberController.__proto__||Object.getPrototypeOf(NumberController)).call(this,x,S)),G=w||{};return U.__min=G.min,U.__max=G.max,U.__step=G.step,H.isUndefined(U.__step)?0===U.initialValue?U.__impliedStep=1:U.__impliedStep=Math.pow(10,Math.floor(Math.log(Math.abs(U.initialValue))/Math.LN10))/10:U.__impliedStep=U.__step,U.__precision=numDecimals(U.__impliedStep),U}return inherits(NumberController,x),J(NumberController,[{key:"setValue",value:function setValue(x){var S=x;return void 0!==this.__min&&Sthis.__max&&(S=this.__max),void 0!==this.__step&&S%this.__step!=0&&(S=Math.round(S/this.__step)*this.__step),Q(NumberController.prototype.__proto__||Object.getPrototypeOf(NumberController.prototype),"setValue",this).call(this,S)}},{key:"min",value:function min(x){return this.__min=x,this}},{key:"max",value:function max(x){return this.__max=x,this}},{key:"step",value:function step(x){return this.__step=x,this.__impliedStep=x,this.__precision=numDecimals(x),this}}]),NumberController}(te);var ce=function(x){function NumberControllerBox(x,S,w){classCallCheck(this,NumberControllerBox);var U=possibleConstructorReturn(this,(NumberControllerBox.__proto__||Object.getPrototypeOf(NumberControllerBox)).call(this,x,S,w));U.__truncationSuspended=!1;var G=U,z=void 0;function onFinish(){G.__onFinishChange&&G.__onFinishChange.call(G,G.getValue())}function onMouseDrag(x){var S=z-x.clientY;G.setValue(G.getValue()+S*G.__impliedStep),z=x.clientY}function onMouseUp(){re.unbind(window,"mousemove",onMouseDrag),re.unbind(window,"mouseup",onMouseUp),onFinish()}return U.__input=document.createElement("input"),U.__input.setAttribute("type","text"),re.bind(U.__input,"change",(function onChange(){var x=parseFloat(G.__input.value);H.isNaN(x)||G.setValue(x)})),re.bind(U.__input,"blur",(function onBlur(){onFinish()})),re.bind(U.__input,"mousedown",(function onMouseDown(x){re.bind(window,"mousemove",onMouseDrag),re.bind(window,"mouseup",onMouseUp),z=x.clientY})),re.bind(U.__input,"keydown",(function(x){13===x.keyCode&&(G.__truncationSuspended=!0,this.blur(),G.__truncationSuspended=!1,onFinish())})),U.updateDisplay(),U.domElement.appendChild(U.__input),U}return inherits(NumberControllerBox,x),J(NumberControllerBox,[{key:"updateDisplay",value:function updateDisplay(){return this.__input.value=this.__truncationSuspended?this.getValue():function roundToDecimal(x,S){var w=Math.pow(10,S);return Math.round(x*w)/w}(this.getValue(),this.__precision),Q(NumberControllerBox.prototype.__proto__||Object.getPrototypeOf(NumberControllerBox.prototype),"updateDisplay",this).call(this)}}]),NumberControllerBox}(le);function map(x,S,w,U,G){return U+(x-S)/(w-S)*(G-U)}var ue=function(x){function NumberControllerSlider(x,S,w,U,G){classCallCheck(this,NumberControllerSlider);var H=possibleConstructorReturn(this,(NumberControllerSlider.__proto__||Object.getPrototypeOf(NumberControllerSlider)).call(this,x,S,{min:w,max:U,step:G})),z=H;function onMouseDrag(x){x.preventDefault();var S=z.__background.getBoundingClientRect();return z.setValue(map(x.clientX,S.left,S.right,z.__min,z.__max)),!1}function onMouseUp(){re.unbind(window,"mousemove",onMouseDrag),re.unbind(window,"mouseup",onMouseUp),z.__onFinishChange&&z.__onFinishChange.call(z,z.getValue())}function onTouchMove(x){var S=x.touches[0].clientX,w=z.__background.getBoundingClientRect();z.setValue(map(S,w.left,w.right,z.__min,z.__max))}function onTouchEnd(){re.unbind(window,"touchmove",onTouchMove),re.unbind(window,"touchend",onTouchEnd),z.__onFinishChange&&z.__onFinishChange.call(z,z.getValue())}return H.__background=document.createElement("div"),H.__foreground=document.createElement("div"),re.bind(H.__background,"mousedown",(function onMouseDown(x){document.activeElement.blur(),re.bind(window,"mousemove",onMouseDrag),re.bind(window,"mouseup",onMouseUp),onMouseDrag(x)})),re.bind(H.__background,"touchstart",(function onTouchStart(x){if(1!==x.touches.length)return;re.bind(window,"touchmove",onTouchMove),re.bind(window,"touchend",onTouchEnd),onTouchMove(x)})),re.addClass(H.__background,"slider"),re.addClass(H.__foreground,"slider-fg"),H.updateDisplay(),H.__background.appendChild(H.__foreground),H.domElement.appendChild(H.__background),H}return inherits(NumberControllerSlider,x),J(NumberControllerSlider,[{key:"updateDisplay",value:function updateDisplay(){var x=(this.getValue()-this.__min)/(this.__max-this.__min);return this.__foreground.style.width=100*x+"%",Q(NumberControllerSlider.prototype.__proto__||Object.getPrototypeOf(NumberControllerSlider.prototype),"updateDisplay",this).call(this)}}]),NumberControllerSlider}(le),he=function(x){function FunctionController(x,S,w){classCallCheck(this,FunctionController);var U=possibleConstructorReturn(this,(FunctionController.__proto__||Object.getPrototypeOf(FunctionController)).call(this,x,S)),G=U;return U.__button=document.createElement("div"),U.__button.innerHTML=void 0===w?"Fire":w,re.bind(U.__button,"click",(function(x){return x.preventDefault(),G.fire(),!1})),re.addClass(U.__button,"button"),U.domElement.appendChild(U.__button),U}return inherits(FunctionController,x),J(FunctionController,[{key:"fire",value:function fire(){this.__onChange&&this.__onChange.call(this),this.getValue().call(this.object),this.__onFinishChange&&this.__onFinishChange.call(this,this.getValue())}}]),FunctionController}(te),de=function(x){function ColorController(x,S){classCallCheck(this,ColorController);var w=possibleConstructorReturn(this,(ColorController.__proto__||Object.getPrototypeOf(ColorController)).call(this,x,S));w.__color=new ee(w.getValue()),w.__temp=new ee(0);var U=w;w.domElement=document.createElement("div"),re.makeSelectable(w.domElement,!1),w.__selector=document.createElement("div"),w.__selector.className="selector",w.__saturation_field=document.createElement("div"),w.__saturation_field.className="saturation-field",w.__field_knob=document.createElement("div"),w.__field_knob.className="field-knob",w.__field_knob_border="2px solid ",w.__hue_knob=document.createElement("div"),w.__hue_knob.className="hue-knob",w.__hue_field=document.createElement("div"),w.__hue_field.className="hue-field",w.__input=document.createElement("input"),w.__input.type="text",w.__input_textShadow="0 1px 1px ",re.bind(w.__input,"keydown",(function(x){13===x.keyCode&&onBlur.call(this)})),re.bind(w.__input,"blur",onBlur),re.bind(w.__selector,"mousedown",(function(){re.addClass(this,"drag").bind(window,"mouseup",(function(){re.removeClass(U.__selector,"drag")}))})),re.bind(w.__selector,"touchstart",(function(){re.addClass(this,"drag").bind(window,"touchend",(function(){re.removeClass(U.__selector,"drag")}))}));var G=document.createElement("div");function fieldDown(x){setSV(x),re.bind(window,"mousemove",setSV),re.bind(window,"touchmove",setSV),re.bind(window,"mouseup",fieldUpSV),re.bind(window,"touchend",fieldUpSV)}function fieldDownH(x){setH(x),re.bind(window,"mousemove",setH),re.bind(window,"touchmove",setH),re.bind(window,"mouseup",fieldUpH),re.bind(window,"touchend",fieldUpH)}function fieldUpSV(){re.unbind(window,"mousemove",setSV),re.unbind(window,"touchmove",setSV),re.unbind(window,"mouseup",fieldUpSV),re.unbind(window,"touchend",fieldUpSV),onFinish()}function fieldUpH(){re.unbind(window,"mousemove",setH),re.unbind(window,"touchmove",setH),re.unbind(window,"mouseup",fieldUpH),re.unbind(window,"touchend",fieldUpH),onFinish()}function onBlur(){var x=K(this.value);!1!==x?(U.__color.__state=x,U.setValue(U.__color.toOriginal())):this.value=U.__color.toString()}function onFinish(){U.__onFinishChange&&U.__onFinishChange.call(U,U.__color.toOriginal())}function setSV(x){-1===x.type.indexOf("touch")&&x.preventDefault();var S=U.__saturation_field.getBoundingClientRect(),w=x.touches&&x.touches[0]||x,G=w.clientX,H=w.clientY,z=(G-S.left)/(S.right-S.left),j=1-(H-S.top)/(S.bottom-S.top);return j>1?j=1:j<0&&(j=0),z>1?z=1:z<0&&(z=0),U.__color.v=j,U.__color.s=z,U.setValue(U.__color.toOriginal()),!1}function setH(x){-1===x.type.indexOf("touch")&&x.preventDefault();var S=U.__hue_field.getBoundingClientRect(),w=1-((x.touches&&x.touches[0]||x).clientY-S.top)/(S.bottom-S.top);return w>1?w=1:w<0&&(w=0),U.__color.h=360*w,U.setValue(U.__color.toOriginal()),!1}return H.extend(w.__selector.style,{width:"122px",height:"102px",padding:"3px",backgroundColor:"#222",boxShadow:"0px 1px 3px rgba(0,0,0,0.3)"}),H.extend(w.__field_knob.style,{position:"absolute",width:"12px",height:"12px",border:w.__field_knob_border+(w.__color.v<.5?"#fff":"#000"),boxShadow:"0px 1px 3px rgba(0,0,0,0.5)",borderRadius:"12px",zIndex:1}),H.extend(w.__hue_knob.style,{position:"absolute",width:"15px",height:"2px",borderRight:"4px solid #fff",zIndex:1}),H.extend(w.__saturation_field.style,{width:"100px",height:"100px",border:"1px solid #555",marginRight:"3px",display:"inline-block",cursor:"pointer"}),H.extend(G.style,{width:"100%",height:"100%",background:"none"}),linearGradient(G,"top","rgba(0,0,0,0)","#000"),H.extend(w.__hue_field.style,{width:"15px",height:"100px",border:"1px solid #555",cursor:"ns-resize",position:"absolute",top:"3px",right:"3px"}),function hueGradient(x){x.style.background="",x.style.cssText+="background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);",x.style.cssText+="background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);",x.style.cssText+="background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);",x.style.cssText+="background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);",x.style.cssText+="background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);"}(w.__hue_field),H.extend(w.__input.style,{outline:"none",textAlign:"center",color:"#fff",border:0,fontWeight:"bold",textShadow:w.__input_textShadow+"rgba(0,0,0,0.7)"}),re.bind(w.__saturation_field,"mousedown",fieldDown),re.bind(w.__saturation_field,"touchstart",fieldDown),re.bind(w.__field_knob,"mousedown",fieldDown),re.bind(w.__field_knob,"touchstart",fieldDown),re.bind(w.__hue_field,"mousedown",fieldDownH),re.bind(w.__hue_field,"touchstart",fieldDownH),w.__saturation_field.appendChild(G),w.__selector.appendChild(w.__field_knob),w.__selector.appendChild(w.__saturation_field),w.__selector.appendChild(w.__hue_field),w.__hue_field.appendChild(w.__hue_knob),w.domElement.appendChild(w.__input),w.domElement.appendChild(w.__selector),w.updateDisplay(),w}return inherits(ColorController,x),J(ColorController,[{key:"updateDisplay",value:function updateDisplay(){var x=K(this.getValue());if(!1!==x){var S=!1;H.each(ee.COMPONENTS,(function(w){if(!H.isUndefined(x[w])&&!H.isUndefined(this.__color.__state[w])&&x[w]!==this.__color.__state[w])return S=!0,{}}),this),S&&H.extend(this.__color.__state,x)}H.extend(this.__temp.__state,this.__color.__state),this.__temp.a=1;var w=this.__color.v<.5||this.__color.s>.5?255:0,U=255-w;H.extend(this.__field_knob.style,{marginLeft:100*this.__color.s-7+"px",marginTop:100*(1-this.__color.v)-7+"px",backgroundColor:this.__temp.toHexString(),border:this.__field_knob_border+"rgb("+w+","+w+","+w+")"}),this.__hue_knob.style.marginTop=100*(1-this.__color.h/360)+"px",this.__temp.s=1,this.__temp.v=1,linearGradient(this.__saturation_field,"left","#fff",this.__temp.toHexString()),this.__input.value=this.__color.toString(),H.extend(this.__input.style,{backgroundColor:this.__color.toHexString(),color:"rgb("+w+","+w+","+w+")",textShadow:this.__input_textShadow+"rgba("+U+","+U+","+U+",.7)"})}}]),ColorController}(te),pe=["-moz-","-o-","-webkit-","-ms-",""];function linearGradient(x,S,w,U){x.style.background="",H.each(pe,(function(G){x.style.cssText+="background: "+G+"linear-gradient("+S+", "+w+" 0%, "+U+" 100%); "}))}var me=function inject(x,S){var w=S||document,U=document.createElement("style");U.type="text/css",U.innerHTML=x;var G=w.getElementsByTagName("head")[0];try{G.appendChild(U)}catch(x){}},fe='
\n\n Here\'s the new load parameter for your GUI\'s constructor:\n\n \n\n
\n\n Automatically save\n values to localStorage on exit.\n\n
The values saved to localStorage will\n override those passed to dat.GUI\'s constructor. This makes it\n easier to work incrementally, but localStorage is fragile,\n and your friends may not see the same values you do.\n\n
\n\n
\n\n
',ge=function ControllerFactory(x,S){var w=x[S];return H.isArray(arguments[2])||H.isObject(arguments[2])?new ae(x,S,arguments[2]):H.isNumber(w)?H.isNumber(arguments[2])&&H.isNumber(arguments[3])?H.isNumber(arguments[4])?new ue(x,S,arguments[2],arguments[3],arguments[4]):new ue(x,S,arguments[2],arguments[3]):H.isNumber(arguments[4])?new ce(x,S,{min:arguments[2],max:arguments[3],step:arguments[4]}):new ce(x,S,{min:arguments[2],max:arguments[3]}):H.isString(w)?new se(x,S):H.isFunction(w)?new he(x,S,""):H.isBoolean(w)?new oe(x,S):null};var ve=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function dat_gui_module_requestAnimationFrame(x){setTimeout(x,1e3/60)},_e=function(){function CenteredDiv(){classCallCheck(this,CenteredDiv),this.backgroundElement=document.createElement("div"),H.extend(this.backgroundElement.style,{backgroundColor:"rgba(0,0,0,0.8)",top:0,left:0,display:"none",zIndex:"1000",opacity:0,WebkitTransition:"opacity 0.2s linear",transition:"opacity 0.2s linear"}),re.makeFullscreen(this.backgroundElement),this.backgroundElement.style.position="fixed",this.domElement=document.createElement("div"),H.extend(this.domElement.style,{position:"fixed",display:"none",zIndex:"1001",opacity:0,WebkitTransition:"-webkit-transform 0.2s ease-out, opacity 0.2s linear",transition:"transform 0.2s ease-out, opacity 0.2s linear"}),document.body.appendChild(this.backgroundElement),document.body.appendChild(this.domElement);var x=this;re.bind(this.backgroundElement,"click",(function(){x.hide()}))}return J(CenteredDiv,[{key:"show",value:function show(){var x=this;this.backgroundElement.style.display="block",this.domElement.style.display="block",this.domElement.style.opacity=0,this.domElement.style.webkitTransform="scale(1.1)",this.layout(),H.defer((function(){x.backgroundElement.style.opacity=1,x.domElement.style.opacity=1,x.domElement.style.webkitTransform="scale(1)"}))}},{key:"hide",value:function hide(){var x=this,hide=function hide(){x.domElement.style.display="none",x.backgroundElement.style.display="none",re.unbind(x.domElement,"webkitTransitionEnd",hide),re.unbind(x.domElement,"transitionend",hide),re.unbind(x.domElement,"oTransitionEnd",hide)};re.bind(this.domElement,"webkitTransitionEnd",hide),re.bind(this.domElement,"transitionend",hide),re.bind(this.domElement,"oTransitionEnd",hide),this.backgroundElement.style.opacity=0,this.domElement.style.opacity=0,this.domElement.style.webkitTransform="scale(1.1)"}},{key:"layout",value:function layout(){this.domElement.style.left=window.innerWidth/2-re.getWidth(this.domElement)/2+"px",this.domElement.style.top=window.innerHeight/2-re.getHeight(this.domElement)/2+"px"}}]),CenteredDiv}(),ye=function ___$insertStyle(x){if(x&&"undefined"!=typeof window){var S=document.createElement("style");return S.setAttribute("type","text/css"),S.innerHTML=x,document.head.appendChild(S),x}}(".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear;border:0;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button.close-top{position:relative}.dg.main .close-button.close-bottom{position:absolute}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-y:visible}.dg.a.has-save>ul.close-top{margin-top:0}.dg.a.has-save>ul.close-bottom{margin-top:27px}.dg.a.has-save>ul.closed{margin-top:0}.dg.a .save-row{top:0;z-index:1002}.dg.a .save-row.close-top{position:relative}.dg.a .save-row.close-bottom{position:fixed}.dg li{-webkit-transition:height .1s ease-out;-o-transition:height .1s ease-out;-moz-transition:height .1s ease-out;transition:height .1s ease-out;-webkit-transition:overflow .1s linear;-o-transition:overflow .1s linear;-moz-transition:overflow .1s linear;transition:overflow .1s linear}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li>*{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px;overflow:hidden}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .c{float:left;width:60%;position:relative}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:7px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .cr.color{overflow:visible}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.color{border-left:3px solid}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2FA1D6}.dg .cr.number input[type=text]{color:#2FA1D6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2FA1D6;max-width:100%}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\n");me(ye);var be="Default",xe=function(){try{return!!window.localStorage}catch(x){return!1}}(),Ee=void 0,Se=!0,Te=void 0,we=!1,Ce=[],Ae=function GUI(x){var S=this,w=x||{};this.domElement=document.createElement("div"),this.__ul=document.createElement("ul"),this.domElement.appendChild(this.__ul),re.addClass(this.domElement,"dg"),this.__folders={},this.__controllers=[],this.__rememberedObjects=[],this.__rememberedObjectIndecesToControllers=[],this.__listening=[],w=H.defaults(w,{closeOnTop:!1,autoPlace:!0,width:GUI.DEFAULT_WIDTH}),w=H.defaults(w,{resizable:w.autoPlace,hideable:w.autoPlace}),H.isUndefined(w.load)?w.load={preset:be}:w.preset&&(w.load.preset=w.preset),H.isUndefined(w.parent)&&w.hideable&&Ce.push(this),w.resizable=H.isUndefined(w.parent)&&w.resizable,w.autoPlace&&H.isUndefined(w.scrollable)&&(w.scrollable=!0);var U=xe&&"true"===localStorage.getItem(getLocalStorageHash(this,"isLocal")),G=void 0,z=void 0;if(Object.defineProperties(this,{parent:{get:function get$$1(){return w.parent}},scrollable:{get:function get$$1(){return w.scrollable}},autoPlace:{get:function get$$1(){return w.autoPlace}},closeOnTop:{get:function get$$1(){return w.closeOnTop}},preset:{get:function get$$1(){return S.parent?S.getRoot().preset:w.load.preset},set:function set$$1(x){S.parent?S.getRoot().preset=x:w.load.preset=x,function setPresetSelectIndex(x){for(var S=0;S1){var U=w.__li.nextElementSibling;return w.remove(),_add(x,w.object,w.property,{before:U,factoryArgs:[H.toArray(arguments)]})}if(H.isArray(S)||H.isObject(S)){var G=w.__li.nextElementSibling;return w.remove(),_add(x,w.object,w.property,{before:G,factoryArgs:[S]})}},name:function name(x){return w.__li.firstElementChild.firstElementChild.innerHTML=x,w},listen:function listen(){return w.__gui.listen(w),w},remove:function remove(){return w.__gui.remove(w),w}}),w instanceof ue){var U=new ce(w.object,w.property,{min:w.__min,max:w.__max,step:w.__step});H.each(["updateDisplay","onChange","onFinishChange","step","min","max"],(function(x){var S=w[x],G=U[x];w[x]=U[x]=function(){var x=Array.prototype.slice.call(arguments);return G.apply(U,x),S.apply(w,x)}})),re.addClass(S,"has-slider"),w.domElement.insertBefore(U.domElement,w.domElement.firstElementChild)}else if(w instanceof ce){var G=function r(S){if(H.isNumber(w.__min)&&H.isNumber(w.__max)){var U=w.__li.firstElementChild.firstElementChild.innerHTML,G=w.__gui.__listening.indexOf(w)>-1;w.remove();var z=_add(x,w.object,w.property,{before:w.__li.nextElementSibling,factoryArgs:[w.__min,w.__max,w.__step]});return z.name(U),G&&z.listen(),z}return S};w.min=H.compose(G,w.min),w.max=H.compose(G,w.max)}else w instanceof oe?(re.bind(S,"click",(function(){re.fakeEvent(w.__checkbox,"click")})),re.bind(w.__checkbox,"click",(function(x){x.stopPropagation()}))):w instanceof he?(re.bind(S,"click",(function(){re.fakeEvent(w.__button,"click")})),re.bind(S,"mouseover",(function(){re.addClass(w.__button,"hover")})),re.bind(S,"mouseout",(function(){re.removeClass(w.__button,"hover")}))):w instanceof de&&(re.addClass(S,"color"),w.updateDisplay=H.compose((function(x){return S.style.borderLeftColor=w.__color.toString(),x}),w.updateDisplay),w.updateDisplay());w.setValue=H.compose((function(S){return x.getRoot().__preset_select&&w.isModified()&&markPresetModified(x.getRoot(),!0),S}),w.setValue)}(x,K,G),x.__controllers.push(G),G}function getLocalStorageHash(x,S){return document.location.href+"."+S}function addPresetOption(x,S,w){var U=document.createElement("option");U.innerHTML=S,U.value=S,x.__preset_select.appendChild(U),w&&(x.__preset_select.selectedIndex=x.__preset_select.length-1)}function showHideExplain(x,S){S.style.display=x.useLocalStorage?"block":"none"}function addSaveMenu(x){var S=x.__save_row=document.createElement("li");re.addClass(x.domElement,"has-save"),x.__ul.insertBefore(S,x.__ul.firstChild),re.addClass(S,"save-row");var w=document.createElement("span");w.innerHTML=" ",re.addClass(w,"button gears");var U=document.createElement("span");U.innerHTML="Save",re.addClass(U,"button"),re.addClass(U,"save");var G=document.createElement("span");G.innerHTML="New",re.addClass(G,"button"),re.addClass(G,"save-as");var z=document.createElement("span");z.innerHTML="Revert",re.addClass(z,"button"),re.addClass(z,"revert");var j=x.__preset_select=document.createElement("select");if(x.load&&x.load.remembered?H.each(x.load.remembered,(function(S,w){addPresetOption(x,w,w===x.preset)})):addPresetOption(x,be,!1),re.bind(j,"change",(function(){for(var S=0;S0&&(x.preset=this.preset,x.remembered||(x.remembered={}),x.remembered[this.preset]=getCurrentPreset(this)),x.folders={},H.each(this.__folders,(function(S,w){x.folders[w]=S.getSaveObject()})),x},save:function save(){this.load.remembered||(this.load.remembered={}),this.load.remembered[this.preset]=getCurrentPreset(this),markPresetModified(this,!1),this.saveToLocalStorageIfPossible()},saveAs:function saveAs(x){this.load.remembered||(this.load.remembered={},this.load.remembered.Default=getCurrentPreset(this,!0)),this.load.remembered[x]=getCurrentPreset(this),this.preset=x,addPresetOption(this,x,!0),this.saveToLocalStorageIfPossible()},revert:function revert(x){H.each(this.__controllers,(function(S){this.getRoot().load.remembered?recallSavedValue(x||this.getRoot(),S):S.setValue(S.initialValue),S.__onFinishChange&&S.__onFinishChange.call(S,S.getValue())}),this),H.each(this.__folders,(function(x){x.revert(x)})),x||markPresetModified(this.getRoot(),!1)},listen:function listen(x){var S=0===this.__listening.length;this.__listening.push(x),S&&updateDisplays(this.__listening)},updateDisplay:function updateDisplay(){H.each(this.__controllers,(function(x){x.updateDisplay()})),H.each(this.__folders,(function(x){x.updateDisplay()}))}});const Me={color:{Color:ee,math:Y,interpret:K},controllers:{Controller:te,BooleanController:oe,OptionController:ae,StringController:se,NumberController:le,NumberControllerBox:ce,NumberControllerSlider:ue,FunctionController:he,ColorController:de},dom:{dom:re},gui:{GUI:Ae},GUI:Ae};w(557);var Re=w(792),Le=w.n(Re),Ie=w(212),Pe=w(581),Fe=w.n(Pe),Oe=(w(739),!1);function abort(x){throw Oe=!0,x}for(var Ne=document.getElementById("canvas"),Be=Ne.getContext("webgl"),De=Be,ke=De.getSupportedExtensions(),Ue=["OES_texture_float","OES_texture_float_linear","OES_element_index_uint","WEBGL_depth_texture","WEBGL_draw_buffers"],Ge=0;Ge{"use strict";w.r(S);var U=w(943),G=w(975),H=w(999),z=w.n(H);function compileShader(x,S){var w=U.gl.createShader(S);return U.gl.shaderSource(w,x),U.gl.compileShader(w),U.gl.getShaderParameter(w,U.gl.COMPILE_STATUS)||(console.error(x),(0,U.JG)("shader compiler error:\n"+U.gl.getShaderInfoLog(w))),w}function linkShader(x,S){var w=U.gl.createProgram();return U.gl.attachShader(w,x),U.gl.attachShader(w,S),U.gl.linkProgram(w),U.gl.getProgramParameter(w,U.gl.LINK_STATUS)||(0,U.JG)("shader linker error:\n"+U.gl.getProgramInfoLog(w)),w}function loadShaderProgram(x,S,w){return function addShaderLocations(x,S){if(S&&S.uniforms&&S.uniforms.length)for(var w=0;w miniFrustumNumLights) {\n break;\n }\n\n int lightIndex = int(ExtractFloat(u_clusterbuffer, u_clusterTextureWidth, u_clusterTextureHeight, miniFrustumIndex, i+1));\n\n Light light = UnpackLight(lightIndex);\n float lightDistance = distance(light.position, v_position);\n vec3 L = (light.position - v_position) / lightDistance;\n\n float lightIntensity = cubicGaussian(2.0 * lightDistance / light.radius);\n float lambertTerm = max(dot(L, normal), 0.0);\n\n float diffuseTerm = clamp(dot(normalize(normal), normalize(L)), 0.0, 1.0);\n\n float shininessExponent = 50.0;\n float specularIntensity = max(pow(dot(normalize((u_cameraPosition + L) / 2.0), normal), shininessExponent), 0.0);\n\n fragColor += albedo * lambertTerm * light.color * vec3(lightIntensity) + specularIntensity;\n }\n\n gl_FragColor = vec4(fragColor, 1.0);\n }\n "}({numLights:Z}),{uniforms:["u_viewProjectionMatrix","u_colmap","u_normap","u_lightbuffer","u_clusterbuffer","u_xSlices","u_ySlices","u_zSlices","u_nearClip","u_farClip","u_viewMatrix","u_clusterTextureWidth","u_clusterTextureHeight","u_cameraPosition"],attribs:["a_position","a_normal","a_uv"]}),z._projectionMatrix=G.Ue(),z._viewMatrix=G.Ue(),z._viewProjectionMatrix=G.Ue(),z.initializeMiniFrustums(H),z}return function _inheritsLoose(x,S){x.prototype=Object.create(S.prototype),x.prototype.constructor=x,_setPrototypeOf(x,S)}(ForwardPlusRenderer,x),ForwardPlusRenderer.prototype.render=function render(x,S){x.updateMatrixWorld(),G.U_(this._viewMatrix,x.matrixWorld.elements),G.JG(this._projectionMatrix,x.projectionMatrix.elements),G.Jp(this._viewProjectionMatrix,this._projectionMatrix,this._viewMatrix),this.updateClustersEfficient(S,this._viewMatrix);for(var w=0;w miniFrustumNumLights) {\n break;\n }\n\n int lightIndex = int(ExtractFloat(u_clusterbuffer, u_clusterTextureWidth, u_clusterTextureHeight, miniFrustumIndex, i+1));\n\n Light light = UnpackLight(lightIndex);\n float lightDistance = distance(light.position, v_position);\n vec3 L = (light.position - v_position) / lightDistance;\n\n float lightIntensity = cubicGaussian(2.0 * lightDistance / light.radius);\n float lambertTerm = max(dot(L, normal), 0.0);\n\n fragColor += albedo * lambertTerm * light.color * vec3(lightIntensity);\n }\n\n const vec3 ambientLight = vec3(0.025);\n fragColor += albedo * ambientLight;\n\n gl_FragColor = vec4(fragColor, 1.0);\n }\n "}({numLights:Z,numGBuffers:4}),{uniforms:["u_gbuffers[0]","u_gbuffers[1]","u_gbuffers[2]","u_gbuffers[3]","u_lightbuffer","u_clusterbuffer","u_xSlices","u_ySlices","u_zSlices","u_nearClip","u_farClip","u_viewMatrix","u_clusterTextureWidth","u_clusterTextureHeight"],attribs:["a_uv"]}),X._projectionMatrix=G.Ue(),X._viewMatrix=G.Ue(),X._viewProjectionMatrix=G.Ue(),X.initializeMiniFrustums(j),X}!function clusteredDeferred_inheritsLoose(x,S){x.prototype=Object.create(S.prototype),x.prototype.constructor=x,clusteredDeferred_setPrototypeOf(x,S)}(ClusteredDeferredRenderer,x);var S=ClusteredDeferredRenderer.prototype;return S.setupDrawBuffers=function setupDrawBuffers(x,S){this._width=x,this._height=S,this._fbo=U.gl.createFramebuffer(),this._depthTex=U.gl.createTexture(),U.gl.bindTexture(U.gl.TEXTURE_2D,this._depthTex),U.gl.texParameteri(U.gl.TEXTURE_2D,U.gl.TEXTURE_MAG_FILTER,U.gl.NEAREST),U.gl.texParameteri(U.gl.TEXTURE_2D,U.gl.TEXTURE_MIN_FILTER,U.gl.NEAREST),U.gl.texParameteri(U.gl.TEXTURE_2D,U.gl.TEXTURE_WRAP_S,U.gl.CLAMP_TO_EDGE),U.gl.texParameteri(U.gl.TEXTURE_2D,U.gl.TEXTURE_WRAP_T,U.gl.CLAMP_TO_EDGE),U.gl.texImage2D(U.gl.TEXTURE_2D,0,U.gl.DEPTH_COMPONENT,x,S,0,U.gl.DEPTH_COMPONENT,U.gl.UNSIGNED_SHORT,null),U.gl.bindTexture(U.gl.TEXTURE_2D,null),U.gl.bindFramebuffer(U.gl.FRAMEBUFFER,this._fbo),U.gl.framebufferTexture2D(U.gl.FRAMEBUFFER,U.gl.DEPTH_ATTACHMENT,U.gl.TEXTURE_2D,this._depthTex,0),this._gbuffers=new Array(4);for(var w=new Array(4),G=0;G<4;G++)w[G]=U.BJ["COLOR_ATTACHMENT"+G+"_WEBGL"],this._gbuffers[G]=U.gl.createTexture(),U.gl.bindTexture(U.gl.TEXTURE_2D,this._gbuffers[G]),U.gl.texParameteri(U.gl.TEXTURE_2D,U.gl.TEXTURE_MAG_FILTER,U.gl.NEAREST),U.gl.texParameteri(U.gl.TEXTURE_2D,U.gl.TEXTURE_MIN_FILTER,U.gl.NEAREST),U.gl.texParameteri(U.gl.TEXTURE_2D,U.gl.TEXTURE_WRAP_S,U.gl.CLAMP_TO_EDGE),U.gl.texParameteri(U.gl.TEXTURE_2D,U.gl.TEXTURE_WRAP_T,U.gl.CLAMP_TO_EDGE),U.gl.texImage2D(U.gl.TEXTURE_2D,0,U.gl.RGBA,x,S,0,U.gl.RGBA,U.gl.FLOAT,null),U.gl.bindTexture(U.gl.TEXTURE_2D,null),U.gl.framebufferTexture2D(U.gl.FRAMEBUFFER,w[G],U.gl.TEXTURE_2D,this._gbuffers[G],0);if(U.gl.checkFramebufferStatus(U.gl.FRAMEBUFFER)!=U.gl.FRAMEBUFFER_COMPLETE)throw"Framebuffer incomplete";U.BJ.drawBuffersWEBGL(w),U.gl.bindFramebuffer(U.gl.FRAMEBUFFER,null)},S.resize=function resize(x,S){this._width=x,this._height=S,U.gl.bindTexture(U.gl.TEXTURE_2D,this._depthTex),U.gl.texImage2D(U.gl.TEXTURE_2D,0,U.gl.DEPTH_COMPONENT,x,S,0,U.gl.DEPTH_COMPONENT,U.gl.UNSIGNED_SHORT,null);for(var w=0;w<4;w++)U.gl.bindTexture(U.gl.TEXTURE_2D,this._gbuffers[w]),U.gl.texImage2D(U.gl.TEXTURE_2D,0,U.gl.RGBA,x,S,0,U.gl.RGBA,U.gl.FLOAT,null);U.gl.bindTexture(U.gl.TEXTURE_2D,null)},S.render=function render(x,S){U.JQ.width==this._width&&U.JQ.height==this._height||this.resize(U.JQ.width,U.JQ.height),x.updateMatrixWorld(),G.U_(this._viewMatrix,x.matrixWorld.elements),G.JG(this._projectionMatrix,x.projectionMatrix.elements),G.Jp(this._viewProjectionMatrix,this._projectionMatrix,this._viewMatrix),U.gl.viewport(0,0,U.JQ.width,U.JQ.height),U.gl.bindFramebuffer(U.gl.FRAMEBUFFER,this._fbo),U.gl.clear(U.gl.COLOR_BUFFER_BIT|U.gl.DEPTH_BUFFER_BIT),U.gl.useProgram(this._progCopy.glShaderProgram),U.gl.uniformMatrix4fv(this._progCopy.u_viewProjectionMatrix,!1,this._viewProjectionMatrix),S.draw(this._progCopy);for(var w=0;w{"use strict";w.d(S,{Ib:()=>U,WT:()=>G});var U=1e-6,G="undefined"!=typeof Float32Array?Float32Array:Array;Math.random;Math.PI;Math.hypot||(Math.hypot=function(){for(var x=0,S=arguments.length;S--;)x+=arguments[S]*arguments[S];return Math.sqrt(x)})},975:(x,S,w)=>{"use strict";w.d(S,{Ue:()=>create,JG:()=>copy,U_:()=>invert,Jp:()=>multiply,bA:()=>scale,yl:()=>fromRotationTranslation});var U=w(685);function create(){var x=new U.WT(16);return U.WT!=Float32Array&&(x[1]=0,x[2]=0,x[3]=0,x[4]=0,x[6]=0,x[7]=0,x[8]=0,x[9]=0,x[11]=0,x[12]=0,x[13]=0,x[14]=0),x[0]=1,x[5]=1,x[10]=1,x[15]=1,x}function copy(x,S){return x[0]=S[0],x[1]=S[1],x[2]=S[2],x[3]=S[3],x[4]=S[4],x[5]=S[5],x[6]=S[6],x[7]=S[7],x[8]=S[8],x[9]=S[9],x[10]=S[10],x[11]=S[11],x[12]=S[12],x[13]=S[13],x[14]=S[14],x[15]=S[15],x}function invert(x,S){var w=S[0],U=S[1],G=S[2],H=S[3],z=S[4],j=S[5],X=S[6],K=S[7],q=S[8],Y=S[9],Z=S[10],J=S[11],Q=S[12],ee=S[13],te=S[14],ne=S[15],ie=w*j-U*z,re=w*X-G*z,oe=w*K-H*z,ae=U*X-G*j,se=U*K-H*j,le=G*K-H*X,ce=q*ee-Y*Q,ue=q*te-Z*Q,he=q*ne-J*Q,de=Y*te-Z*ee,pe=Y*ne-J*ee,me=Z*ne-J*te,fe=ie*me-re*pe+oe*de+ae*he-se*ue+le*ce;return fe?(fe=1/fe,x[0]=(j*me-X*pe+K*de)*fe,x[1]=(G*pe-U*me-H*de)*fe,x[2]=(ee*le-te*se+ne*ae)*fe,x[3]=(Z*se-Y*le-J*ae)*fe,x[4]=(X*he-z*me-K*ue)*fe,x[5]=(w*me-G*he+H*ue)*fe,x[6]=(te*oe-Q*le-ne*re)*fe,x[7]=(q*le-Z*oe+J*re)*fe,x[8]=(z*pe-j*he+K*ce)*fe,x[9]=(U*he-w*pe-H*ce)*fe,x[10]=(Q*se-ee*oe+ne*ie)*fe,x[11]=(Y*oe-q*se-J*ie)*fe,x[12]=(j*ue-z*de-X*ce)*fe,x[13]=(w*de-U*ue+G*ce)*fe,x[14]=(ee*re-Q*ae-te*ie)*fe,x[15]=(q*ae-Y*re+Z*ie)*fe,x):null}function multiply(x,S,w){var U=S[0],G=S[1],H=S[2],z=S[3],j=S[4],X=S[5],K=S[6],q=S[7],Y=S[8],Z=S[9],J=S[10],Q=S[11],ee=S[12],te=S[13],ne=S[14],ie=S[15],re=w[0],oe=w[1],ae=w[2],se=w[3];return x[0]=re*U+oe*j+ae*Y+se*ee,x[1]=re*G+oe*X+ae*Z+se*te,x[2]=re*H+oe*K+ae*J+se*ne,x[3]=re*z+oe*q+ae*Q+se*ie,re=w[4],oe=w[5],ae=w[6],se=w[7],x[4]=re*U+oe*j+ae*Y+se*ee,x[5]=re*G+oe*X+ae*Z+se*te,x[6]=re*H+oe*K+ae*J+se*ne,x[7]=re*z+oe*q+ae*Q+se*ie,re=w[8],oe=w[9],ae=w[10],se=w[11],x[8]=re*U+oe*j+ae*Y+se*ee,x[9]=re*G+oe*X+ae*Z+se*te,x[10]=re*H+oe*K+ae*J+se*ne,x[11]=re*z+oe*q+ae*Q+se*ie,re=w[12],oe=w[13],ae=w[14],se=w[15],x[12]=re*U+oe*j+ae*Y+se*ee,x[13]=re*G+oe*X+ae*Z+se*te,x[14]=re*H+oe*K+ae*J+se*ne,x[15]=re*z+oe*q+ae*Q+se*ie,x}function scale(x,S,w){var U=w[0],G=w[1],H=w[2];return x[0]=S[0]*U,x[1]=S[1]*U,x[2]=S[2]*U,x[3]=S[3]*U,x[4]=S[4]*G,x[5]=S[5]*G,x[6]=S[6]*G,x[7]=S[7]*G,x[8]=S[8]*H,x[9]=S[9]*H,x[10]=S[10]*H,x[11]=S[11]*H,x[12]=S[12],x[13]=S[13],x[14]=S[14],x[15]=S[15],x}function fromRotationTranslation(x,S,w){var U=S[0],G=S[1],H=S[2],z=S[3],j=U+U,X=G+G,K=H+H,q=U*j,Y=U*X,Z=U*K,J=G*X,Q=G*K,ee=H*K,te=z*j,ne=z*X,ie=z*K;return x[0]=1-(J+ee),x[1]=Y+ie,x[2]=Z-ne,x[3]=0,x[4]=Y-ie,x[5]=1-(q+ee),x[6]=Q+te,x[7]=0,x[8]=Z+ne,x[9]=Q-te,x[10]=1-(q+J),x[11]=0,x[12]=w[0],x[13]=w[1],x[14]=w[2],x[15]=1,x}},333:(x,S,w)=>{"use strict";w.d(S,{d9:()=>clone,al:()=>fromValues,JG:()=>copy,t8:()=>set,IH:()=>add,bA:()=>scale,kE:()=>length,we:()=>squaredLength,Fv:()=>normalize,AK:()=>dot,t7:()=>lerp,fF:()=>transformMat4,I6:()=>exactEquals,fS:()=>equals});var U=w(685);function clone(x){var S=new U.WT(4);return S[0]=x[0],S[1]=x[1],S[2]=x[2],S[3]=x[3],S}function fromValues(x,S,w,G){var H=new U.WT(4);return H[0]=x,H[1]=S,H[2]=w,H[3]=G,H}function copy(x,S){return x[0]=S[0],x[1]=S[1],x[2]=S[2],x[3]=S[3],x}function set(x,S,w,U,G){return x[0]=S,x[1]=w,x[2]=U,x[3]=G,x}function add(x,S,w){return x[0]=S[0]+w[0],x[1]=S[1]+w[1],x[2]=S[2]+w[2],x[3]=S[3]+w[3],x}function scale(x,S,w){return x[0]=S[0]*w,x[1]=S[1]*w,x[2]=S[2]*w,x[3]=S[3]*w,x}function length(x){var S=x[0],w=x[1],U=x[2],G=x[3];return Math.hypot(S,w,U,G)}function squaredLength(x){var S=x[0],w=x[1],U=x[2],G=x[3];return S*S+w*w+U*U+G*G}function normalize(x,S){var w=S[0],U=S[1],G=S[2],H=S[3],z=w*w+U*U+G*G+H*H;return z>0&&(z=1/Math.sqrt(z)),x[0]=w*z,x[1]=U*z,x[2]=G*z,x[3]=H*z,x}function dot(x,S){return x[0]*S[0]+x[1]*S[1]+x[2]*S[2]+x[3]*S[3]}function lerp(x,S,w,U){var G=S[0],H=S[1],z=S[2],j=S[3];return x[0]=G+U*(w[0]-G),x[1]=H+U*(w[1]-H),x[2]=z+U*(w[2]-z),x[3]=j+U*(w[3]-j),x}function transformMat4(x,S,w){var U=S[0],G=S[1],H=S[2],z=S[3];return x[0]=w[0]*U+w[4]*G+w[8]*H+w[12]*z,x[1]=w[1]*U+w[5]*G+w[9]*H+w[13]*z,x[2]=w[2]*U+w[6]*G+w[10]*H+w[14]*z,x[3]=w[3]*U+w[7]*G+w[11]*H+w[15]*z,x}function exactEquals(x,S){return x[0]===S[0]&&x[1]===S[1]&&x[2]===S[2]&&x[3]===S[3]}function equals(x,S){var w=x[0],G=x[1],H=x[2],z=x[3],j=S[0],X=S[1],K=S[2],q=S[3];return Math.abs(w-j)<=U.Ib*Math.max(1,Math.abs(w),Math.abs(j))&&Math.abs(G-X)<=U.Ib*Math.max(1,Math.abs(G),Math.abs(X))&&Math.abs(H-K)<=U.Ib*Math.max(1,Math.abs(H),Math.abs(K))&&Math.abs(z-q)<=U.Ib*Math.max(1,Math.abs(z),Math.abs(q))}var G;G=function create(){var x=new U.WT(4);return U.WT!=Float32Array&&(x[0]=0,x[1]=0,x[2]=0,x[3]=0),x}()},739:x=>{window,x.exports=function(x){var S={};function n(w){if(S[w])return S[w].exports;var U=S[w]={i:w,l:!1,exports:{}};return x[w].call(U.exports,U,U.exports,n),U.l=!0,U.exports}return n.m=x,n.c=S,n.d=function(x,S,w){n.o(x,S)||Object.defineProperty(x,S,{enumerable:!0,get:w})},n.r=function(x){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(x,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(x,"__esModule",{value:!0})},n.t=function(x,S){if(1&S&&(x=n(x)),8&S)return x;if(4&S&&"object"==typeof x&&x&&x.__esModule)return x;var w=Object.create(null);if(n.r(w),Object.defineProperty(w,"default",{enumerable:!0,value:x}),2&S&&"string"!=typeof x)for(var U in x)n.d(w,U,function(S){return x[S]}.bind(null,U));return w},n.n=function(x){var S=x&&x.__esModule?function(){return x.default}:function(){return x};return n.d(S,"a",S),S},n.o=function(x,S){return Object.prototype.hasOwnProperty.call(x,S)},n.p="/",n(n.s=4)}([function(x,S){x.exports=function(x){return x.webpackPolyfill||(x.deprecate=function(){},x.paths=[],x.children||(x.children=[]),Object.defineProperty(x,"loaded",{enumerable:!0,get:function(){return x.l}}),Object.defineProperty(x,"id",{enumerable:!0,get:function(){return x.i}}),x.webpackPolyfill=1),x}},function(x,S,w){"use strict";var U,r=function(){return void 0===U&&(U=Boolean(window&&document&&document.all&&!window.atob)),U},G=function(){var x={};return function(S){if(void 0===x[S]){var w=document.querySelector(S);if(window.HTMLIFrameElement&&w instanceof window.HTMLIFrameElement)try{w=w.contentDocument.head}catch(x){w=null}x[S]=w}return x[S]}}(),H=[];function a(x){for(var S=-1,w=0;w1&&c(U,"")>-1&&(w=RegExp(this.source,G.replace.call(a(this),"g","")),G.replace.call(x.slice(U.index),w,(function(){for(var x=1;xU.index&&this.lastIndex--}return U},z||(RegExp.prototype.test=function(x){var S=G.exec.call(this,x);return S&&this.global&&!S[0].length&&this.lastIndex>S.index&&this.lastIndex--,!!S}))})),ace.define("ace/lib/es5-shim",["require","exports","module"],(function(x,S,w){function i(){}Function.prototype.bind||(Function.prototype.bind=function(x){var S=this;if("function"!=typeof S)throw new TypeError("Function.prototype.bind called on incompatible "+S);var w=Y.call(arguments,1),r=function(){if(this instanceof r){var U=S.apply(this,w.concat(Y.call(arguments)));return Object(U)===U?U:this}return S.apply(x,w.concat(Y.call(arguments)))};return S.prototype&&(i.prototype=S.prototype,r.prototype=new i,i.prototype=null),r});var U,G,H,z,j,X=Function.prototype.call,K=Array.prototype,q=Object.prototype,Y=K.slice,Z=X.bind(q.toString),J=X.bind(q.hasOwnProperty);if((j=J(q,"__defineGetter__"))&&(U=X.bind(q.__defineGetter__),G=X.bind(q.__defineSetter__),H=X.bind(q.__lookupGetter__),z=X.bind(q.__lookupSetter__)),2!=[1,2].splice(0).length)if(function(){function e(x){var S=new Array(x+2);return S[0]=S[1]=0,S}var x,S=[];if(S.splice.apply(S,e(20)),S.splice.apply(S,e(26)),x=S.length,S.splice(5,0,"XXX"),S.length,x+1==S.length)return!0}()){var Q=Array.prototype.splice;Array.prototype.splice=function(x,S){return arguments.length?Q.apply(this,[void 0===x?0:x,void 0===S?this.length-x:S].concat(Y.call(arguments,2))):[]}}else Array.prototype.splice=function(x,S){var w=this.length;x>0?x>w&&(x=w):null==x?x=0:x<0&&(x=Math.max(w+x,0)),x+Sj)for(Z=K;Z--;)this[X+Z]=this[j+Z];if(H&&x===q)this.length=q,this.push.apply(this,G);else for(this.length=q+H,Z=0;Z>>0;if("[object Function]"!=Z(x))throw new TypeError;for(;++G>>0,G=Array(U),H=arguments[1];if("[object Function]"!=Z(x))throw new TypeError(x+" is not a function");for(var z=0;z>>0,H=[],z=arguments[1];if("[object Function]"!=Z(x))throw new TypeError(x+" is not a function");for(var j=0;j>>0,G=arguments[1];if("[object Function]"!=Z(x))throw new TypeError(x+" is not a function");for(var H=0;H>>0,G=arguments[1];if("[object Function]"!=Z(x))throw new TypeError(x+" is not a function");for(var H=0;H>>0;if("[object Function]"!=Z(x))throw new TypeError(x+" is not a function");if(!U&&1==arguments.length)throw new TypeError("reduce of empty array with no initial value");var G,H=0;if(arguments.length>=2)G=arguments[1];else for(;;){if(H in w){G=w[H++];break}if(++H>=U)throw new TypeError("reduce of empty array with no initial value")}for(;H>>0;if("[object Function]"!=Z(x))throw new TypeError(x+" is not a function");if(!U&&1==arguments.length)throw new TypeError("reduceRight of empty array with no initial value");var G,H=U-1;if(arguments.length>=2)G=arguments[1];else for(;;){if(H in w){G=w[H--];break}if(--H<0)throw new TypeError("reduceRight of empty array with no initial value")}do{H in this&&(G=x.call(void 0,G,w[H],H,S))}while(H--);return G}),Array.prototype.indexOf&&-1==[0,1].indexOf(1,2)||(Array.prototype.indexOf=function(x){var S=ie&&"[object String]"==Z(this)?this.split(""):F(this),w=S.length>>>0;if(!w)return-1;var U=0;for(arguments.length>1&&(U=O(arguments[1])),U=U>=0?U:Math.max(0,w+U);U>>0;if(!w)return-1;var U=w-1;for(arguments.length>1&&(U=Math.min(U,O(arguments[1]))),U=U>=0?U:w-Math.abs(U);U>=0;U--)if(U in S&&x===S[U])return U;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(x){return x.__proto__||(x.constructor?x.constructor.prototype:q)}),Object.getOwnPropertyDescriptor||(Object.getOwnPropertyDescriptor=function(x,S){if("object"!=typeof x&&"function"!=typeof x||null===x)throw new TypeError("Object.getOwnPropertyDescriptor called on a non-object: "+x);if(J(x,S)){var w;if(w={enumerable:!0,configurable:!0},j){var U=x.__proto__;x.__proto__=q;var G=H(x,S),X=z(x,S);if(x.__proto__=U,G||X)return G&&(w.get=G),X&&(w.set=X),w}return w.value=x[S],w}}),Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(x){return Object.keys(x)}),Object.create||(ee=null===Object.prototype.__proto__?function(){return{__proto__:null}}:function(){var x={};for(var S in x)x[S]=null;return x.constructor=x.hasOwnProperty=x.propertyIsEnumerable=x.isPrototypeOf=x.toLocaleString=x.toString=x.valueOf=x.__proto__=null,x},Object.create=function(x,S){var w;if(null===x)w=ee();else{if("object"!=typeof x)throw new TypeError("typeof prototype["+typeof x+"] != 'object'");var i=function(){};i.prototype=x,(w=new i).__proto__=x}return void 0!==S&&Object.defineProperties(w,S),w}),Object.defineProperty){var re=C({}),oe="undefined"==typeof document||C(document.createElement("div"));if(!re||!oe)var ae=Object.defineProperty}Object.defineProperty&&!ae||(Object.defineProperty=function(x,S,w){if("object"!=typeof x&&"function"!=typeof x||null===x)throw new TypeError("Object.defineProperty called on non-object: "+x);if("object"!=typeof w&&"function"!=typeof w||null===w)throw new TypeError("Property description must be an object: "+w);if(ae)try{return ae.call(Object,x,S,w)}catch(x){}if(J(w,"value"))if(j&&(H(x,S)||z(x,S))){var X=x.__proto__;x.__proto__=q,delete x[S],x[S]=w.value,x.__proto__=X}else x[S]=w.value;else{if(!j)throw new TypeError("getters & setters can not be defined on this javascript engine");J(w,"get")&&U(x,S,w.get),J(w,"set")&&G(x,S,w.set)}return x}),Object.defineProperties||(Object.defineProperties=function(x,S){for(var w in S)J(S,w)&&Object.defineProperty(x,w,S[w]);return x}),Object.seal||(Object.seal=function(x){return x}),Object.freeze||(Object.freeze=function(x){return x});try{Object.freeze((function(){}))}catch(x){Object.freeze=(te=Object.freeze,function(x){return"function"==typeof x?x:te(x)})}if(Object.preventExtensions||(Object.preventExtensions=function(x){return x}),Object.isSealed||(Object.isSealed=function(x){return!1}),Object.isFrozen||(Object.isFrozen=function(x){return!1}),Object.isExtensible||(Object.isExtensible=function(x){if(Object(x)===x)throw new TypeError;for(var S="";J(x,S);)S+="?";x[S]=!0;var w=J(x,S);return delete x[S],w}),!Object.keys){var se=!0,le=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],ce=le.length;for(var ue in{toString:null})se=!1;Object.keys=function(x){if("object"!=typeof x&&"function"!=typeof x||null===x)throw new TypeError("Object.keys called on a non-object");var S=[];for(var w in x)J(x,w)&&S.push(w);if(se)for(var U=0,G=ce;U0||-1)*Math.floor(Math.abs(x))),x}var F=function(x){if(null==x)throw new TypeError("can't convert "+x+" to object");return Object(x)}})),ace.define("ace/lib/fixoldbrowsers",["require","exports","module","ace/lib/regexp","ace/lib/es5-shim"],(function(x,S,w){"use strict";x("./regexp"),x("./es5-shim"),"undefined"==typeof Element||Element.prototype.remove||Object.defineProperty(Element.prototype,"remove",{enumerable:!1,writable:!0,configurable:!0,value:function(){this.parentNode&&this.parentNode.removeChild(this)}})})),ace.define("ace/lib/useragent",["require","exports","module"],(function(x,S,w){"use strict";S.OS={LINUX:"LINUX",MAC:"MAC",WINDOWS:"WINDOWS"},S.getOS=function(){return S.isMac?S.OS.MAC:S.isLinux?S.OS.LINUX:S.OS.WINDOWS};var U="object"==typeof navigator?navigator:{},G=(/mac|win|linux/i.exec(U.platform)||["other"])[0].toLowerCase(),H=U.userAgent||"",z=U.appName||"";S.isWin="win"==G,S.isMac="mac"==G,S.isLinux="linux"==G,S.isIE="Microsoft Internet Explorer"==z||z.indexOf("MSAppHost")>=0?parseFloat((H.match(/(?:MSIE |Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]):parseFloat((H.match(/(?:Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]),S.isOldIE=S.isIE&&S.isIE<9,S.isGecko=S.isMozilla=H.match(/ Gecko\/\d+/),S.isOpera="object"==typeof opera&&"[object Opera]"==Object.prototype.toString.call(window.opera),S.isWebKit=parseFloat(H.split("WebKit/")[1])||void 0,S.isChrome=parseFloat(H.split(" Chrome/")[1])||void 0,S.isEdge=parseFloat(H.split(" Edge/")[1])||void 0,S.isAIR=H.indexOf("AdobeAIR")>=0,S.isAndroid=H.indexOf("Android")>=0,S.isChromeOS=H.indexOf(" CrOS ")>=0,S.isIOS=/iPad|iPhone|iPod/.test(H)&&!window.MSStream,S.isIOS&&(S.isMac=!0),S.isMobile=S.isIOS||S.isAndroid})),ace.define("ace/lib/dom",["require","exports","module","ace/lib/useragent"],(function(x,S,w){"use strict";var U=x("./useragent");if(S.buildDom=function e(x,S,w){if("string"==typeof x&&x){var U=document.createTextNode(x);return S&&S.appendChild(U),U}if(!Array.isArray(x))return x;if("string"!=typeof x[0]||!x[0]){for(var G=[],H=0;H=1.5,"undefined"!=typeof document){var G=document.createElement("div");S.HI_DPI&&void 0!==G.style.transform&&(S.HAS_CSS_TRANSFORMS=!0),U.isEdge||void 0===G.style.animationName||(S.HAS_CSS_ANIMATION=!0),G=null}S.HAS_CSS_TRANSFORMS?S.translate=function(x,S,w){x.style.transform="translate("+Math.round(S)+"px, "+Math.round(w)+"px)"}:S.translate=function(x,S,w){x.style.top=Math.round(w)+"px",x.style.left=Math.round(S)+"px"}})),ace.define("ace/lib/oop",["require","exports","module"],(function(x,S,w){"use strict";S.inherits=function(x,S){x.super_=S,x.prototype=Object.create(S.prototype,{constructor:{value:x,enumerable:!1,writable:!0,configurable:!0}})},S.mixin=function(x,S){for(var w in S)x[w]=S[w];return x},S.implement=function(x,w){S.mixin(x,w)}})),ace.define("ace/lib/keys",["require","exports","module","ace/lib/oop"],(function(x,S,w){"use strict";var U=x("./oop"),G=function(){var x,S,w={MODIFIER_KEYS:{16:"Shift",17:"Ctrl",18:"Alt",224:"Meta",91:"MetaLeft",92:"MetaRight",93:"ContextMenu"},KEY_MODS:{ctrl:1,alt:2,option:2,shift:4,super:8,meta:8,command:8,cmd:8},FUNCTION_KEYS:{8:"Backspace",9:"Tab",13:"Return",19:"Pause",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"Print",45:"Insert",46:"Delete",96:"Numpad0",97:"Numpad1",98:"Numpad2",99:"Numpad3",100:"Numpad4",101:"Numpad5",102:"Numpad6",103:"Numpad7",104:"Numpad8",105:"Numpad9","-13":"NumpadEnter",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"Numlock",145:"Scrolllock"},PRINTABLE_KEYS:{32:" ",48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9",59:";",61:"=",65:"a",66:"b",67:"c",68:"d",69:"e",70:"f",71:"g",72:"h",73:"i",74:"j",75:"k",76:"l",77:"m",78:"n",79:"o",80:"p",81:"q",82:"r",83:"s",84:"t",85:"u",86:"v",87:"w",88:"x",89:"y",90:"z",107:"+",109:"-",110:".",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",111:"/",106:"*"}};for(S in w.FUNCTION_KEYS)x=w.FUNCTION_KEYS[S].toLowerCase(),w[x]=parseInt(S,10);for(S in w.PRINTABLE_KEYS)x=w.PRINTABLE_KEYS[S].toLowerCase(),w[x]=parseInt(S,10);return U.mixin(w,w.MODIFIER_KEYS),U.mixin(w,w.PRINTABLE_KEYS),U.mixin(w,w.FUNCTION_KEYS),w.enter=w.return,w.escape=w.esc,w.del=w.delete,w[173]="-",function(){for(var x=["cmd","ctrl","alt","shift"],S=Math.pow(2,x.length);S--;)w.KEY_MODS[S]=x.filter((function(x){return S&w.KEY_MODS[x]})).join("-")+"-"}(),w.KEY_MODS[0]="",w.KEY_MODS[-1]="input-",w}();U.mixin(S,G),S.keyCodeToString=function(x){var S=G[x];return"string"!=typeof S&&(S=String.fromCharCode(x)),S.toLowerCase()}})),ace.define("ace/lib/event",["require","exports","module","ace/lib/keys","ace/lib/useragent"],(function(x,S,w){"use strict";var U=x("./keys"),G=x("./useragent"),H=null,z=0;S.addListener=function(x,S,w){if(x.addEventListener)return x.addEventListener(S,w,!1);if(x.attachEvent){var i=function(){w.call(x,window.event)};w._wrapper=i,x.attachEvent("on"+S,i)}},S.removeListener=function(x,S,w){if(x.removeEventListener)return x.removeEventListener(S,w,!1);x.detachEvent&&x.detachEvent("on"+S,w._wrapper||w)},S.stopEvent=function(x){return S.stopPropagation(x),S.preventDefault(x),!1},S.stopPropagation=function(x){x.stopPropagation?x.stopPropagation():x.cancelBubble=!0},S.preventDefault=function(x){x.preventDefault?x.preventDefault():x.returnValue=!1},S.getButton=function(x){return"dblclick"==x.type?0:"contextmenu"==x.type||G.isMac&&x.ctrlKey&&!x.altKey&&!x.shiftKey?2:x.preventDefault?x.button:{1:0,2:2,4:1}[x.button]},S.capture=function(x,w,U){function r(x){w&&w(x),U&&U(x),S.removeListener(document,"mousemove",w,!0),S.removeListener(document,"mouseup",r,!0),S.removeListener(document,"dragstart",r,!0)}return S.addListener(document,"mousemove",w,!0),S.addListener(document,"mouseup",r,!0),S.addListener(document,"dragstart",r,!0),r},S.addMouseWheelListener=function(x,w){"onmousewheel"in x?S.addListener(x,"mousewheel",(function(x){void 0!==x.wheelDeltaX?(x.wheelX=-x.wheelDeltaX/8,x.wheelY=-x.wheelDeltaY/8):(x.wheelX=0,x.wheelY=-x.wheelDelta/8),w(x)})):"onwheel"in x?S.addListener(x,"wheel",(function(x){switch(x.deltaMode){case x.DOM_DELTA_PIXEL:x.wheelX=.35*x.deltaX||0,x.wheelY=.35*x.deltaY||0;break;case x.DOM_DELTA_LINE:case x.DOM_DELTA_PAGE:x.wheelX=5*(x.deltaX||0),x.wheelY=5*(x.deltaY||0)}w(x)})):S.addListener(x,"DOMMouseScroll",(function(x){x.axis&&x.axis==x.HORIZONTAL_AXIS?(x.wheelX=5*(x.detail||0),x.wheelY=0):(x.wheelX=0,x.wheelY=5*(x.detail||0)),w(x)}))},S.addMultiMouseDownListener=function(x,w,U,H){var z,j,X,K=0,q={2:"dblclick",3:"tripleclick",4:"quadclick"};function h(x){if(0!==S.getButton(x)?K=0:x.detail>1?++K>4&&(K=1):K=1,G.isIE){var Y=Math.abs(x.clientX-z)>5||Math.abs(x.clientY-j)>5;X&&!Y||(K=1),X&&clearTimeout(X),X=setTimeout((function(){X=null}),w[K-1]||600),1==K&&(z=x.clientX,j=x.clientY)}if(x._clicks=K,U[H]("mousedown",x),K>4)K=0;else if(K>1)return U[H](q[K],x)}function d(x){K=2,X&&clearTimeout(X),X=setTimeout((function(){X=null}),w[K-1]||600),U[H]("mousedown",x),U[H](q[K],x)}Array.isArray(x)||(x=[x]),x.forEach((function(x){S.addListener(x,"mousedown",h),G.isOldIE&&S.addListener(x,"dblclick",d)}))};var j=G.isMac&&G.isOpera&&!("KeyboardEvent"in window)?function(x){return 0|(x.metaKey?1:0)|(x.altKey?2:0)|(x.shiftKey?4:0)|(x.ctrlKey?8:0)}:function(x){return 0|(x.ctrlKey?1:0)|(x.altKey?2:0)|(x.shiftKey?4:0)|(x.metaKey?8:0)};function c(x,S,w){var X=j(S);if(!G.isMac&&H){if(S.getModifierState&&(S.getModifierState("OS")||S.getModifierState("Win"))&&(X|=8),H.altGr){if(3==(3&X))return;H.altGr=0}if(18===w||17===w){var K="location"in S?S.location:S.keyLocation;17===w&&1===K?1==H[w]&&(z=S.timeStamp):18===w&&3===X&&2===K&&S.timeStamp-z<50&&(H.altGr=!0)}}if(w in U.MODIFIER_KEYS&&(w=-1),X||13!==w||3!==(K="location"in S?S.location:S.keyLocation)||(x(S,X,-w),!S.defaultPrevented)){if(G.isChromeOS&&8&X){if(x(S,X,w),S.defaultPrevented)return;X&=-9}return!!(X||w in U.FUNCTION_KEYS||w in U.PRINTABLE_KEYS)&&x(S,X,w)}}function l(){H=Object.create(null)}if(S.getModifierString=function(x){return U.KEY_MODS[j(x)]},S.addCommandKeyListener=function(x,w){var U=S.addListener;if(G.isOldGecko||G.isOpera&&!("KeyboardEvent"in window)){var z=null;U(x,"keydown",(function(x){z=x.keyCode})),U(x,"keypress",(function(x){return c(w,x,z)}))}else{var j=null;U(x,"keydown",(function(x){H[x.keyCode]=(H[x.keyCode]||0)+1;var S=c(w,x,x.keyCode);return j=x.defaultPrevented,S})),U(x,"keypress",(function(x){j&&(x.ctrlKey||x.altKey||x.shiftKey||x.metaKey)&&(S.stopEvent(x),j=null)})),U(x,"keyup",(function(x){H[x.keyCode]=null})),H||(l(),U(window,"focus",l))}},"object"==typeof window&&window.postMessage&&!G.isOldIE){var X=1;S.nextTick=function(x,w){w=w||window;var U="zero-timeout-message-"+X++,r=function(G){G.data==U&&(S.stopPropagation(G),S.removeListener(w,"message",r),x())};S.addListener(w,"message",r),w.postMessage(U,"*")}}S.$idleBlocked=!1,S.onIdle=function(x,w){return setTimeout((function n(){S.$idleBlocked?setTimeout(n,100):x()}),w)},S.$idleBlockId=null,S.blockIdle=function(x){S.$idleBlockId&&clearTimeout(S.$idleBlockId),S.$idleBlocked=!0,S.$idleBlockId=setTimeout((function(){S.$idleBlocked=!1}),x||100)},S.nextFrame="object"==typeof window&&(window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame),S.nextFrame?S.nextFrame=S.nextFrame.bind(window):S.nextFrame=function(x){setTimeout(x,17)}})),ace.define("ace/range",["require","exports","module"],(function(x,S,w){"use strict";var i=function(x,S,w,U){this.start={row:x,column:S},this.end={row:w,column:U}};(function(){this.isEqual=function(x){return this.start.row===x.start.row&&this.end.row===x.end.row&&this.start.column===x.start.column&&this.end.column===x.end.column},this.toString=function(){return"Range: ["+this.start.row+"/"+this.start.column+"] -> ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(x,S){return 0==this.compare(x,S)},this.compareRange=function(x){var S,w=x.end,U=x.start;return 1==(S=this.compare(w.row,w.column))?1==(S=this.compare(U.row,U.column))?2:0==S?1:0:-1==S?-2:-1==(S=this.compare(U.row,U.column))?-1:1==S?42:0},this.comparePoint=function(x){return this.compare(x.row,x.column)},this.containsRange=function(x){return 0==this.comparePoint(x.start)&&0==this.comparePoint(x.end)},this.intersects=function(x){var S=this.compareRange(x);return-1==S||0==S||1==S},this.isEnd=function(x,S){return this.end.row==x&&this.end.column==S},this.isStart=function(x,S){return this.start.row==x&&this.start.column==S},this.setStart=function(x,S){"object"==typeof x?(this.start.column=x.column,this.start.row=x.row):(this.start.row=x,this.start.column=S)},this.setEnd=function(x,S){"object"==typeof x?(this.end.column=x.column,this.end.row=x.row):(this.end.row=x,this.end.column=S)},this.inside=function(x,S){return 0==this.compare(x,S)&&!this.isEnd(x,S)&&!this.isStart(x,S)},this.insideStart=function(x,S){return 0==this.compare(x,S)&&!this.isEnd(x,S)},this.insideEnd=function(x,S){return 0==this.compare(x,S)&&!this.isStart(x,S)},this.compare=function(x,S){return this.isMultiLine()||x!==this.start.row?xthis.end.row?1:this.start.row===x?S>=this.start.column?0:-1:this.end.row===x?S<=this.end.column?0:1:0:Sthis.end.column?1:0},this.compareStart=function(x,S){return this.start.row==x&&this.start.column==S?-1:this.compare(x,S)},this.compareEnd=function(x,S){return this.end.row==x&&this.end.column==S?1:this.compare(x,S)},this.compareInside=function(x,S){return this.end.row==x&&this.end.column==S?1:this.start.row==x&&this.start.column==S?-1:this.compare(x,S)},this.clipRows=function(x,S){if(this.end.row>S)var w={row:S+1,column:0};else this.end.rowS)var U={row:S+1,column:0};else this.start.row0;)1&S&&(w+=x),(S>>=1)&&(x+=x);return w};var U=/^\s\s*/,G=/\s\s*$/;S.stringTrimLeft=function(x){return x.replace(U,"")},S.stringTrimRight=function(x){return x.replace(G,"")},S.copyObject=function(x){var S={};for(var w in x)S[w]=x[w];return S},S.copyArray=function(x){for(var S=[],w=0,U=x.length;wDate.now()-50)||(U=!1)},cancel:function(){U=Date.now()}}})),ace.define("ace/keyboard/textinput",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/lib/dom","ace/lib/lang","ace/clipboard","ace/lib/keys"],(function(x,S,w){"use strict";var U=x("../lib/event"),G=x("../lib/useragent"),H=x("../lib/dom"),z=x("../lib/lang"),j=x("../clipboard"),X=G.isChrome<18,K=G.isIE,q=G.isChrome>63,Y=x("../lib/keys"),Z=Y.KEY_MODS,J=G.isIOS,Q=J?/\s/:/\n/;S.TextInput=function(x,S){var w=H.createElement("textarea");w.className="ace_text-input",w.setAttribute("wrap","off"),w.setAttribute("autocorrect","off"),w.setAttribute("autocapitalize","off"),w.setAttribute("spellcheck",!1),w.style.opacity="0",x.insertBefore(w,x.firstChild);var ee=!1,te=!1,ne=!1,ie=!1,re="";G.isMobile||(w.style.fontSize="1px");var oe=!1,ae=!1,se="",le=0,ce=0,ue=0;try{var he=document.activeElement===w}catch(x){}U.addListener(w,"blur",(function(x){ae||(S.onBlur(x),he=!1)})),U.addListener(w,"focus",(function(x){if(!ae){if(he=!0,G.isEdge)try{if(!document.hasFocus())return}catch(x){}S.onFocus(x),G.isEdge?setTimeout(de):de()}})),this.$focusScroll=!1,this.focus=function(){if(re||q||"browser"==this.$focusScroll)return w.focus({preventScroll:!0});var x=w.style.top;w.style.position="fixed",w.style.top="0px";try{var S=0!=w.getBoundingClientRect().top}catch(x){return}var U=[];if(S)for(var G=w.parentElement;G&&1==G.nodeType;)U.push(G),G.setAttribute("ace_nocontext",!0),G=!G.parentElement&&G.getRootNode?G.getRootNode().host:G.parentElement;w.focus({preventScroll:!0}),S&&U.forEach((function(x){x.removeAttribute("ace_nocontext")})),setTimeout((function(){w.style.position="","0px"==w.style.top&&(w.style.top=x)}),0)},this.blur=function(){w.blur()},this.isFocused=function(){return he},S.on("beforeEndOperation",(function(){S.curOp&&"insertstring"==S.curOp.command.name||(ne&&(se=w.value="",k()),de())}));var de=J?function(x){if(he&&(!ee||x)&&!ie){x||(x="");var U="\n ab"+x+"cde fg\n";U!=w.value&&(w.value=se=U);var G=4+(x.length||(S.selection.isEmpty()?0:1));4==le&&ce==G||w.setSelectionRange(4,G),le=4,ce=G}}:function(){if(!ne&&!ie&&(he||me)){ne=!0;var x=S.selection,U=x.getRange(),G=x.cursor.row,H=U.start.column,z=U.end.column,j=S.session.getLine(G);if(U.start.row!=G){var X=S.session.getLine(G-1);H=U.start.rowG+1?K.length:z,z+=j.length+1,j=j+"\n"+K}j.length>400&&(H<400&&z<400?j=j.slice(0,400):(j="\n",H=0,z=1));var q=j+"\n\n";if(q!=se&&(w.value=se=q,le=ce=q.length),me&&(le=w.selectionStart,ce=w.selectionEnd),ce!=z||le!=H||w.selectionEnd!=ce)try{w.setSelectionRange(H,z),le=H,ce=z}catch(x){}ne=!1}};he&&S.onFocus();var pe=null;this.setInputHandler=function(x){pe=x},this.getInputHandler=function(){return pe};var me=!1,I=function(x,U){if(me&&(me=!1),te)return de(),x&&S.onPaste(x),te=!1,"";for(var G=w.selectionStart,H=w.selectionEnd,z=le,j=se.length-ce,X=x,K=x.length-G,q=x.length-H,Y=0;z>0&&se[Y]==x[Y];)Y++,z--;for(X=X.slice(Y),Y=1;j>0&&se.length-Y>le-1&&se[se.length-Y]==x[x.length-Y];)Y++,j--;K-=Y-1,q-=Y-1;var Z=X.length-Y+1;return Z<0&&(z=-Z,Z=0),X=X.slice(0,Z),U||X||K||z||j||q?(ie=!0,X&&!z&&!j&&!K&&!q||oe?S.onTextInput(X):S.onTextInput(X,{extendLeft:z,extendRight:j,restoreStart:K,restoreEnd:q}),ie=!1,se=x,le=G,ce=H,ue=q,X):""},O=function(x){if(ne)return $();if(x&&x.inputType){if("historyUndo"==x.inputType)return S.execCommand("undo");if("historyRedo"==x.inputType)return S.execCommand("redo")}var U=w.value,G=I(U,!0);(U.length>500||Q.test(G))&&de()},F=function(x,S,w){var U=x.clipboardData||window.clipboardData;if(U&&!X){var G=K||w?"Text":"text/plain";try{return S?!1!==U.setData(G,S):U.getData(G)}catch(x){if(!w)return F(x,S,!0)}}},M=function(x,G){var H=S.getCopyText();if(!H)return U.preventDefault(x);F(x,H)?(J&&(de(H),ee=H,setTimeout((function(){ee=!1}),10)),G?S.onCut():S.onCopy(),U.preventDefault(x)):(ee=!0,w.value=H,w.select(),setTimeout((function(){ee=!1,de(),G?S.onCut():S.onCopy()})))},N=function(x){M(x,!0)},P=function(x){M(x,!1)},B=function(x){var H=F(x);j.pasteCancelled()||("string"==typeof H?(H&&S.onPaste(H,x),G.isIE&&setTimeout(de),U.preventDefault(x)):(w.value="",te=!0))};U.addCommandKeyListener(w,S.onCommandKey.bind(S)),U.addListener(w,"select",(function(x){ne||(ee?ee=!1:function(x){return 0===x.selectionStart&&x.selectionEnd>=se.length&&x.value===se&&se&&x.selectionEnd!==ce}(w)&&(S.selectAll(),de()))})),U.addListener(w,"input",O),U.addListener(w,"cut",N),U.addListener(w,"copy",P),U.addListener(w,"paste",B),"oncut"in w&&"oncopy"in w&&"onpaste"in w||U.addListener(x,"keydown",(function(x){if((!G.isMac||x.metaKey)&&x.ctrlKey)switch(x.keyCode){case 67:P(x);break;case 86:B(x);break;case 88:N(x)}}));var $=function(){if(ne&&S.onCompositionUpdate&&!S.$readOnly){if(oe)return D();if(ne.useTextareaForIME)S.onCompositionUpdate(w.value);else{var x=w.value;I(x),ne.markerRange&&(ne.context&&(ne.markerRange.start.column=ne.selectionStart=ne.context.compositionStartOffset),ne.markerRange.end.column=ne.markerRange.start.column+ce-ne.selectionStart+ue)}}},k=function(x){S.onCompositionEnd&&!S.$readOnly&&(ne=!1,S.onCompositionEnd(),S.off("mousedown",D),x&&O())};function D(){ae=!0,w.blur(),w.focus(),ae=!1}var fe,ge=z.delayedCall($,50).schedule.bind(null,null);function W(){clearTimeout(fe),fe=setTimeout((function(){re&&(w.style.cssText=re,re=""),S.renderer.$isMousePressed=!1,S.renderer.$keepTextAreaAtCursor&&S.renderer.$moveTextAreaToCursor()}),0)}U.addListener(w,"compositionstart",(function(x){if(!ne&&S.onCompositionStart&&!S.$readOnly&&(ne={},!oe)){setTimeout($,0),S.on("mousedown",D);var U=S.getSelectionRange();U.end.row=U.start.row,U.end.column=U.start.column,ne.markerRange=U,ne.selectionStart=le,S.onCompositionStart(ne),ne.useTextareaForIME?(w.value="",se="",le=0,ce=0):(w.msGetInputContext&&(ne.context=w.msGetInputContext()),w.getInputContext&&(ne.context=w.getInputContext()))}})),U.addListener(w,"compositionupdate",$),U.addListener(w,"keyup",(function(x){27==x.keyCode&&w.value.lengthce&&"\n"==se[H]?z=Y.end:Uce&&se.slice(0,H).split("\n").length>2?z=Y.down:H>ce&&" "==se[H-1]?(z=Y.right,j=Z.option):(H>ce||H==ce&&ce!=le&&U==H)&&(z=Y.right),U!==H&&(j|=Z.shift),z){if(!S.onCommandKey({},j,z)&&S.commands){z=Y.keyCodeToString(z);var X=S.commands.findKeyCommand(j,z);X&&S.execCommand(X)}le=U,ce=H,de("")}}};document.addEventListener("selectionchange",o),S.on("destroy",(function(){document.removeEventListener("selectionchange",o)}))}(0,S,w)}})),ace.define("ace/mouse/default_handlers",["require","exports","module","ace/lib/useragent"],(function(x,S,w){"use strict";var U=x("../lib/useragent");function r(x){x.$clickSelection=null;var S=x.editor;S.setDefaultHandler("mousedown",this.onMouseDown.bind(x)),S.setDefaultHandler("dblclick",this.onDoubleClick.bind(x)),S.setDefaultHandler("tripleclick",this.onTripleClick.bind(x)),S.setDefaultHandler("quadclick",this.onQuadClick.bind(x)),S.setDefaultHandler("mousewheel",this.onMouseWheel.bind(x)),["select","startSelect","selectEnd","selectAllEnd","selectByWordsEnd","selectByLinesEnd","dragWait","dragWaitEnd","focusWait"].forEach((function(S){x[S]=this[S]}),this),x.selectByLines=this.extendSelectionBy.bind(x,"getLineRange"),x.selectByWords=this.extendSelectionBy.bind(x,"getWordRange")}function o(x,S){if(x.start.row==x.end.row)var w=2*S.column-x.start.column-x.end.column;else w=x.start.row!=x.end.row-1||x.start.column||x.end.column?2*S.row-x.start.row-x.end.row:S.column-4;return w<0?{cursor:x.start,anchor:x.end}:{cursor:x.end,anchor:x.start}}(function(){this.onMouseDown=function(x){var S=x.inSelection(),w=x.getDocumentPosition();this.mousedownEvent=x;var G=this.editor,H=x.getButton();return 0!==H?((G.getSelectionRange().isEmpty()||1==H)&&G.selection.moveToPosition(w),void(2==H&&(G.textInput.onContextMenu(x.domEvent),U.isMozilla||x.preventDefault()))):(this.mousedownEvent.time=Date.now(),!S||G.isFocused()||(G.focus(),!this.$focusTimeout||this.$clickSelection||G.inMultiSelectMode)?(this.captureMouse(x),this.startSelect(w,x.domEvent._clicks>1),x.preventDefault()):(this.setState("focusWait"),void this.captureMouse(x)))},this.startSelect=function(x,S){x=x||this.editor.renderer.screenToTextCoordinates(this.x,this.y);var w=this.editor;this.mousedownEvent&&(this.mousedownEvent.getShiftKey()?w.selection.selectToPosition(x):S||w.selection.moveToPosition(x),S||this.select(),w.renderer.scroller.setCapture&&w.renderer.scroller.setCapture(),w.setStyle("ace_selecting"),this.setState("select"))},this.select=function(){var x,S=this.editor,w=S.renderer.screenToTextCoordinates(this.x,this.y);if(this.$clickSelection){var U=this.$clickSelection.comparePoint(w);if(-1==U)x=this.$clickSelection.end;else if(1==U)x=this.$clickSelection.start;else{var G=o(this.$clickSelection,w);w=G.cursor,x=G.anchor}S.selection.setSelectionAnchor(x.row,x.column)}S.selection.selectToPosition(w),S.renderer.scrollCursorIntoView()},this.extendSelectionBy=function(x){var S,w=this.editor,U=w.renderer.screenToTextCoordinates(this.x,this.y),G=w.selection[x](U.row,U.column);if(this.$clickSelection){var H=this.$clickSelection.comparePoint(G.start),z=this.$clickSelection.comparePoint(G.end);if(-1==H&&z<=0)S=this.$clickSelection.end,G.end.row==U.row&&G.end.column==U.column||(U=G.start);else if(1==z&&H>=0)S=this.$clickSelection.start,G.start.row==U.row&&G.start.column==U.column||(U=G.end);else if(-1==H&&1==z)U=G.end,S=G.start;else{var j=o(this.$clickSelection,U);U=j.cursor,S=j.anchor}w.selection.setSelectionAnchor(S.row,S.column)}w.selection.selectToPosition(U),w.renderer.scrollCursorIntoView()},this.selectEnd=this.selectAllEnd=this.selectByWordsEnd=this.selectByLinesEnd=function(){this.$clickSelection=null,this.editor.unsetStyle("ace_selecting"),this.editor.renderer.scroller.releaseCapture&&this.editor.renderer.scroller.releaseCapture()},this.focusWait=function(){var x,S,w,U,G=(x=this.mousedownEvent.x,S=this.mousedownEvent.y,w=this.x,U=this.y,Math.sqrt(Math.pow(w-x,2)+Math.pow(U-S,2))),H=Date.now();(G>0||H-this.mousedownEvent.time>this.$focusTimeout)&&this.startSelect(this.mousedownEvent.getDocumentPosition())},this.onDoubleClick=function(x){var S=x.getDocumentPosition(),w=this.editor,U=w.session.getBracketRange(S);U?(U.isEmpty()&&(U.start.column--,U.end.column++),this.setState("select")):(U=w.selection.getWordRange(S.row,S.column),this.setState("selectByWords")),this.$clickSelection=U,this.select()},this.onTripleClick=function(x){var S=x.getDocumentPosition(),w=this.editor;this.setState("selectByLines");var U=w.getSelectionRange();U.isMultiLine()&&U.contains(S.row,S.column)?(this.$clickSelection=w.selection.getLineRange(U.start.row),this.$clickSelection.end=w.selection.getLineRange(U.end.row).end):this.$clickSelection=w.selection.getLineRange(S.row),this.select()},this.onQuadClick=function(x){var S=this.editor;S.selectAll(),this.$clickSelection=S.getSelectionRange(),this.setState("selectAll")},this.onMouseWheel=function(x){if(!x.getAccelKey()){x.getShiftKey()&&x.wheelY&&!x.wheelX&&(x.wheelX=x.wheelY,x.wheelY=0);var S=this.editor;this.$lastScroll||(this.$lastScroll={t:0,vx:0,vy:0,allowed:0});var w=this.$lastScroll,U=x.domEvent.timeStamp,G=U-w.t,H=G?x.wheelX/G:w.vx,z=G?x.wheelY/G:w.vy;G<550&&(H=(H+w.vx)/2,z=(z+w.vy)/2);var j=Math.abs(H/z),X=!1;return j>=1&&S.renderer.isScrollableBy(x.wheelX*x.speed,0)&&(X=!0),j<=1&&S.renderer.isScrollableBy(0,x.wheelY*x.speed)&&(X=!0),X?w.allowed=U:U-w.allowed<550&&(Math.abs(H)<=1.5*Math.abs(w.vx)&&Math.abs(z)<=1.5*Math.abs(w.vy)?(X=!0,w.allowed=U):w.allowed=0),w.t=U,w.vx=H,w.vy=z,X?(S.renderer.scrollBy(x.wheelX*x.speed,x.wheelY*x.speed),x.stop()):void 0}}}).call(r.prototype),S.DefaultHandlers=r})),ace.define("ace/tooltip",["require","exports","module","ace/lib/oop","ace/lib/dom"],(function(x,S,w){"use strict";x("./lib/oop");var U=x("./lib/dom");function r(x){this.isOpen=!1,this.$element=null,this.$parentNode=x}(function(){this.$init=function(){return this.$element=U.createElement("div"),this.$element.className="ace_tooltip",this.$element.style.display="none",this.$parentNode.appendChild(this.$element),this.$element},this.getElement=function(){return this.$element||this.$init()},this.setText=function(x){this.getElement().textContent=x},this.setHtml=function(x){this.getElement().innerHTML=x},this.setPosition=function(x,S){this.getElement().style.left=x+"px",this.getElement().style.top=S+"px"},this.setClassName=function(x){U.addCssClass(this.getElement(),x)},this.show=function(x,S,w){null!=x&&this.setText(x),null!=S&&null!=w&&this.setPosition(S,w),this.isOpen||(this.getElement().style.display="block",this.isOpen=!0)},this.hide=function(){this.isOpen&&(this.getElement().style.display="none",this.isOpen=!1)},this.getHeight=function(){return this.getElement().offsetHeight},this.getWidth=function(){return this.getElement().offsetWidth},this.destroy=function(){this.isOpen=!1,this.$element&&this.$element.parentNode&&this.$element.parentNode.removeChild(this.$element)}}).call(r.prototype),S.Tooltip=r})),ace.define("ace/mouse/default_gutter_handler",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/event","ace/tooltip"],(function(x,S,w){"use strict";var U=x("../lib/dom"),G=x("../lib/oop"),H=x("../lib/event"),z=x("../tooltip").Tooltip;function a(x){z.call(this,x)}G.inherits(a,z),function(){this.setPosition=function(x,S){var w=window.innerWidth||document.documentElement.clientWidth,U=window.innerHeight||document.documentElement.clientHeight,G=this.getWidth(),H=this.getHeight();(x+=15)+G>w&&(x-=x+G-w),(S+=15)+H>U&&(S-=20+H),z.prototype.setPosition.call(this,x,S)}}.call(a.prototype),S.GutterHandler=function(x){var S,w,G,z=x.editor,j=z.renderer.$gutterLayer,X=new a(z.container);function u(){S&&(S=clearTimeout(S)),G&&(X.hide(),G=null,z._signal("hideGutterTooltip",X),z.removeEventListener("mousewheel",u))}function h(x){X.setPosition(x.x,x.y)}x.editor.setDefaultHandler("guttermousedown",(function(S){if(z.isFocused()&&0==S.getButton()&&"foldWidgets"!=j.getRegion(S)){var w=S.getDocumentPosition().row,U=z.session.selection;if(S.getShiftKey())U.selectTo(w,0);else{if(2==S.domEvent.detail)return z.selectAll(),S.preventDefault();x.$clickSelection=z.selection.getLineRange(w)}return x.setState("selectByLines"),x.captureMouse(S),S.preventDefault()}})),x.editor.setDefaultHandler("guttermousemove",(function(H){var K=H.domEvent.target||H.domEvent.srcElement;if(U.hasCssClass(K,"ace_fold-widget"))return u();G&&x.$tooltipFollowsMouse&&h(H),w=H,S||(S=setTimeout((function(){S=null,w&&!x.isMousePressed?function(){var S=w.getDocumentPosition().row,U=j.$annotations[S];if(!U)return u();if(S==z.session.getLength()){var H=z.renderer.pixelToScreenCoordinates(0,w.y).row,K=w.$pos;if(H>z.session.documentToScreenRow(K.row,K.column))return u()}if(G!=U)if(G=U.text.join("
"),X.setHtml(G),X.show(),z._signal("showGutterTooltip",X),z.on("mousewheel",u),x.$tooltipFollowsMouse)h(w);else{var q=w.domEvent.target.getBoundingClientRect(),Y=X.getElement().style;Y.left=q.right+"px",Y.top=q.bottom+"px"}}():u()}),50))})),H.addListener(z.renderer.$gutter,"mouseout",(function(x){w=null,G&&!S&&(S=setTimeout((function(){S=null,u()}),50))})),z.on("changeSession",u)}})),ace.define("ace/mouse/mouse_event",["require","exports","module","ace/lib/event","ace/lib/useragent"],(function(x,S,w){"use strict";var U=x("../lib/event"),G=x("../lib/useragent"),H=S.MouseEvent=function(x,S){this.domEvent=x,this.editor=S,this.x=this.clientX=x.clientX,this.y=this.clientY=x.clientY,this.$pos=null,this.$inSelection=null,this.propagationStopped=!1,this.defaultPrevented=!1};(function(){this.stopPropagation=function(){U.stopPropagation(this.domEvent),this.propagationStopped=!0},this.preventDefault=function(){U.preventDefault(this.domEvent),this.defaultPrevented=!0},this.stop=function(){this.stopPropagation(),this.preventDefault()},this.getDocumentPosition=function(){return this.$pos||(this.$pos=this.editor.renderer.screenToTextCoordinates(this.clientX,this.clientY)),this.$pos},this.inSelection=function(){if(null!==this.$inSelection)return this.$inSelection;var x=this.editor.getSelectionRange();if(x.isEmpty())this.$inSelection=!1;else{var S=this.getDocumentPosition();this.$inSelection=x.contains(S.row,S.column)}return this.$inSelection},this.getButton=function(){return U.getButton(this.domEvent)},this.getShiftKey=function(){return this.domEvent.shiftKey},this.getAccelKey=G.isMac?function(){return this.domEvent.metaKey}:function(){return this.domEvent.ctrlKey}}).call(H.prototype)})),ace.define("ace/mouse/dragdrop_handler",["require","exports","module","ace/lib/dom","ace/lib/event","ace/lib/useragent"],(function(x,S,w){"use strict";var U=x("../lib/dom"),G=x("../lib/event"),H=x("../lib/useragent");function s(x){var S=x.editor,w=U.createElement("img");w.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",H.isOpera&&(w.style.cssText="width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;"),["dragWait","dragWaitEnd","startDrag","dragReadyEnd","onMouseDrag"].forEach((function(S){x[S]=this[S]}),this),S.addEventListener("mousedown",this.onMouseDown.bind(x));var z,j,X,K,q,Y,Z,J,Q,ee,te,ne=S.container,ie=0;function C(){var x=Y;(function(x,w){var U=Date.now(),G=!w||x.row!=w.row,H=!w||x.column!=w.column;!ee||G||H?(S.moveCursorToPosition(x),ee=U,te={x:j,y:X}):a(te.x,te.y,j,X)>5?ee=null:U-ee>=200&&(S.renderer.scrollCursorIntoView(),ee=null)})(Y=S.renderer.screenToTextCoordinates(j,X),x),function(x,w){var U=Date.now(),G=S.renderer.layerConfig.lineHeight,H=S.renderer.layerConfig.characterWidth,z=S.renderer.scroller.getBoundingClientRect(),K={x:{left:j-z.left,right:z.right-j},y:{top:X-z.top,bottom:z.bottom-X}},q=Math.min(K.x.left,K.x.right),Y=Math.min(K.y.top,K.y.bottom),Z={row:x.row,column:x.column};q/H<=2&&(Z.column+=K.x.left=200&&S.renderer.scrollCursorIntoView(Z):Q=U:Q=null}(Y,x)}function A(){q=S.selection.toOrientedRange(),z=S.session.addMarker(q,"ace_selection",S.getSelectionStyle()),S.clearSelection(),S.isFocused()&&S.renderer.$cursorLayer.setBlinking(!1),clearInterval(K),C(),K=setInterval(C,20),ie=0,G.addListener(document,"mousemove",y)}function R(){clearInterval(K),S.session.removeMarker(z),z=null,S.selection.fromOrientedRange(q),S.isFocused()&&!J&&S.$resetCursorStyle(),q=null,Y=null,ie=0,Q=null,ee=null,G.removeListener(document,"mousemove",y)}this.onDragStart=function(x){if(this.cancelDrag||!ne.draggable){var U=this;return setTimeout((function(){U.startSelect(),U.captureMouse(x)}),0),x.preventDefault()}q=S.getSelectionRange();var G=x.dataTransfer;G.effectAllowed=S.getReadOnly()?"copy":"copyMove",H.isOpera&&(S.container.appendChild(w),w.scrollTop=0),G.setDragImage&&G.setDragImage(w,0,0),H.isOpera&&S.container.removeChild(w),G.clearData(),G.setData("Text",S.session.getTextRange()),J=!0,this.setState("drag")},this.onDragEnd=function(x){if(ne.draggable=!1,J=!1,this.setState(null),!S.getReadOnly()){var w=x.dataTransfer.dropEffect;Z||"move"!=w||S.session.remove(S.getSelectionRange()),S.$resetCursorStyle()}this.editor.unsetStyle("ace_dragging"),this.editor.renderer.setCursorStyle("")},this.onDragEnter=function(x){if(!S.getReadOnly()&&T(x.dataTransfer))return j=x.clientX,X=x.clientY,z||A(),ie++,x.dataTransfer.dropEffect=Z=b(x),G.preventDefault(x)},this.onDragOver=function(x){if(!S.getReadOnly()&&T(x.dataTransfer))return j=x.clientX,X=x.clientY,z||(A(),ie++),null!==re&&(re=null),x.dataTransfer.dropEffect=Z=b(x),G.preventDefault(x)},this.onDragLeave=function(x){if(--ie<=0&&z)return R(),Z=null,G.preventDefault(x)},this.onDrop=function(x){if(Y){var w=x.dataTransfer;if(J)switch(Z){case"move":q=q.contains(Y.row,Y.column)?{start:Y,end:Y}:S.moveText(q,Y);break;case"copy":q=S.moveText(q,Y,!0)}else{var U=w.getData("Text");q={start:Y,end:S.session.insert(Y,U)},S.focus(),Z=null}return R(),G.preventDefault(x)}},G.addListener(ne,"dragstart",this.onDragStart.bind(x)),G.addListener(ne,"dragend",this.onDragEnd.bind(x)),G.addListener(ne,"dragenter",this.onDragEnter.bind(x)),G.addListener(ne,"dragover",this.onDragOver.bind(x)),G.addListener(ne,"dragleave",this.onDragLeave.bind(x)),G.addListener(ne,"drop",this.onDrop.bind(x));var re=null;function y(){null==re&&(re=setTimeout((function(){null!=re&&z&&R()}),20))}function T(x){var S=x.types;return!S||Array.prototype.some.call(S,(function(x){return"text/plain"==x||"Text"==x}))}function b(x){var S=["copy","copymove","all","uninitialized"],w=H.isMac?x.altKey:x.ctrlKey,U="uninitialized";try{U=x.dataTransfer.effectAllowed.toLowerCase()}catch(x){}var G="none";return w&&S.indexOf(U)>=0?G="copy":["move","copymove","linkmove","all","uninitialized"].indexOf(U)>=0?G="move":S.indexOf(U)>=0&&(G="copy"),G}}function a(x,S,w,U){return Math.sqrt(Math.pow(w-x,2)+Math.pow(U-S,2))}(function(){this.dragWait=function(){Date.now()-this.mousedownEvent.time>this.editor.getDragDelay()&&this.startDrag()},this.dragWaitEnd=function(){this.editor.container.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()),this.selectEnd()},this.dragReadyEnd=function(x){this.editor.$resetCursorStyle(),this.editor.unsetStyle("ace_dragging"),this.editor.renderer.setCursorStyle(""),this.dragWaitEnd()},this.startDrag=function(){this.cancelDrag=!1;var x=this.editor;x.container.draggable=!0,x.renderer.$cursorLayer.setBlinking(!1),x.setStyle("ace_dragging");var S=H.isWin?"default":"move";x.renderer.setCursorStyle(S),this.setState("dragReady")},this.onMouseDrag=function(x){var S=this.editor.container;H.isIE&&"dragReady"==this.state&&a(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y)>3&&S.dragDrop(),"dragWait"===this.state&&a(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y)>0&&(S.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()))},this.onMouseDown=function(x){if(this.$dragEnabled){this.mousedownEvent=x;var S=this.editor,w=x.inSelection(),U=x.getButton();if(1===(x.domEvent.detail||1)&&0===U&&w){if(x.editor.inMultiSelectMode&&(x.getAccelKey()||x.getShiftKey()))return;this.mousedownEvent.time=Date.now();var G=x.domEvent.target||x.domEvent.srcElement;"unselectable"in G&&(G.unselectable="on"),S.getDragDelay()?(H.isWebKit&&(this.cancelDrag=!0,S.container.draggable=!0),this.setState("dragWait")):this.startDrag(),this.captureMouse(x,this.onMouseDrag.bind(this)),x.defaultPrevented=!0}}}}).call(s.prototype),S.DragdropHandler=s})),ace.define("ace/mouse/touch_handler",["require","exports","module","ace/mouse/mouse_event","ace/lib/dom"],(function(x,S,w){"use strict";var U=x("./mouse_event").MouseEvent,G=x("../lib/dom");S.addTouchListeners=function(x,S){var w,H,z,j,X,K,q,Y,Z,J="scroll",Q=0,ee=0,te=0,ne=0;function _(){var x=window.navigator&&window.navigator.clipboard,w=!1,i=function(U){var H,z,j=U.target.getAttribute("action");if("more"==j||!w)return w=!w,H=S.getCopyText(),z=S.session.getUndoManager().hasUndo(),void Z.replaceChild(G.buildDom(w?["span",!H&&["span",{class:"ace_mobile-button",action:"selectall"},"Select All"],H&&["span",{class:"ace_mobile-button",action:"copy"},"Copy"],H&&["span",{class:"ace_mobile-button",action:"cut"},"Cut"],x&&["span",{class:"ace_mobile-button",action:"paste"},"Paste"],z&&["span",{class:"ace_mobile-button",action:"undo"},"Undo"],["span",{class:"ace_mobile-button",action:"find"},"Find"],["span",{class:"ace_mobile-button",action:"openCommandPallete"},"Pallete"]]:["span"]),Z.firstChild);"paste"==j?x.readText().then((function(x){S.execCommand(j,x)})):j&&("cut"!=j&&"copy"!=j||(x?x.writeText(S.getCopyText()):document.execCommand("copy")),S.execCommand(j)),Z.firstChild.style.display="none",w=!1,"openCommandPallete"!=j&&S.focus()};Z=G.buildDom(["div",{class:"ace_mobile-menu",ontouchstart:function(x){J="menu",x.stopPropagation(),x.preventDefault(),S.textInput.focus()},ontouchend:function(x){x.stopPropagation(),x.preventDefault(),i(x)},onclick:i},["span"],["span",{class:"ace_mobile-button",action:"more"},"..."]],S.container)}function E(){Z||_();var x=S.selection.cursor,w=S.renderer.textToScreenCoordinates(x.row,x.column),U=S.container.getBoundingClientRect();Z.style.top=w.pageY-U.top-3+"px",Z.style.right="10px",Z.style.display="",Z.firstChild.style.display="none",S.on("input",C)}function C(x){Z&&(Z.style.display="none"),S.off("input",C)}function A(){X=null,clearTimeout(X);var x=S.selection.getRange(),w=x.contains(q.row,q.column);!x.isEmpty()&&w||(S.selection.moveToPosition(q),S.selection.selectWord()),J="wait",E()}x.addEventListener("contextmenu",(function(x){Y&&S.textInput.getElement().focus()})),x.addEventListener("touchstart",(function(x){var G=x.touches;if(X||G.length>1)return clearTimeout(X),X=null,z=-1,void(J="zoom");Y=S.$mouseHandler.isMousePressed=!0;var K=S.renderer.layerConfig.lineHeight,Z=S.renderer.layerConfig.lineHeight,ie=x.timeStamp;j=ie;var re=G[0],oe=re.clientX,ae=re.clientY;Math.abs(w-oe)+Math.abs(H-ae)>K&&(z=-1),w=x.clientX=oe,H=x.clientY=ae,te=ne=0;var se=new U(x,S);if(q=se.getDocumentPosition(),ie-z<500&&1==G.length&&!Q)ee++,x.preventDefault(),x.button=0,function(){X=null,clearTimeout(X),S.selection.moveToPosition(q);var x=ee>=2?S.selection.getLineRange(q.row):S.session.getBracketRange(q);x&&!x.isEmpty()?S.selection.setRange(x):S.selection.selectWord(),J="wait"}();else{ee=0;var le=S.selection.cursor,ce=S.selection.isEmpty()?le:S.selection.anchor,ue=S.renderer.$cursorLayer.getPixelPosition(le,!0),he=S.renderer.$cursorLayer.getPixelPosition(ce,!0),de=S.renderer.scroller.getBoundingClientRect(),L=function(x,S){return(x/=Z)*x+(S=S/K-.75)*S};if(x.clientXme?"cursor":"anchor"),J=me<3.5?"anchor":pe<3.5?"cursor":"scroll",X=setTimeout(A,450)}z=ie})),x.addEventListener("touchend",(function(x){Y=S.$mouseHandler.isMousePressed=!1,K&&clearInterval(K),"zoom"==J?(J="",Q=0):X?(S.selection.moveToPosition(q),Q=0,E()):"scroll"==J?(Q+=60,K=setInterval((function(){Q--<=0&&(clearInterval(K),K=null),Math.abs(te)<.01&&(te=0),Math.abs(ne)<.01&&(ne=0),Q<20&&(te*=.9),Q<20&&(ne*=.9);var x=S.session.getScrollTop();S.renderer.scrollBy(10*te,10*ne),x==S.session.getScrollTop()&&(Q=0)}),10),x.preventDefault(),C()):E(),clearTimeout(X),X=null})),x.addEventListener("touchmove",(function(x){X&&(clearTimeout(X),X=null);var G=x.touches;if(!(G.length>1||"zoom"==J)){var z=G[0],K=w-z.clientX,q=H-z.clientY;if("wait"==J){if(!(K*K+q*q>4))return x.preventDefault();J="cursor"}w=z.clientX,H=z.clientY,x.clientX=z.clientX,x.clientY=z.clientY;var Y=x.timeStamp,Z=Y-j;if(j=Y,"scroll"==J){var Q=new U(x,S);Q.speed=1,Q.wheelX=K,Q.wheelY=q,10*Math.abs(K)1&&(G=w[w.length-2]);var z=X[S+"Path"];return null==z?z=X.basePath:"/"==U&&(S=U=""),z&&"/"!=z.slice(-1)&&(z+="/"),z+S+U+G+this.get("suffix")},S.setModuleUrl=function(x,S){return X.$moduleUrls[x]=S},S.$loading={},S.loadModule=function(w,U){var G,z;Array.isArray(w)&&(z=w[0],w=w[1]);try{G=x(w)}catch(x){}if(G&&!S.$loading[w])return U&&U(G);if(S.$loading[w]||(S.$loading[w]=[]),S.$loading[w].push(U),!(S.$loading[w].length>1)){var a=function(){x([w],(function(x){S._emit("load.module",{name:w,module:x});var U=S.$loading[w];S.$loading[w]=null,U.forEach((function(S){S&&S(x)}))}))};if(!S.get("packaged"))return a();H.loadScript(S.moduleUrl(w,z),a),l()}};var l=function(){X.basePath||X.workerPath||X.modePath||X.themePath||Object.keys(X.$moduleUrls).length||(console.error("Unable to infer path to ace from script src,","use ace.config.set('basePath', 'path') to enable dynamic loading of modes and themes","or with webpack use ace/webpack-resolver"),l=function(){})};function u(G){if(j&&j.document){X.packaged=G||x.packaged||U.packaged||j.define&&w(3).packaged;for(var H,z={},K="",q=document.currentScript||document._currentScript,Y=(q&&q.ownerDocument||document).getElementsByTagName("script"),Z=0;Z=x){for(H=Y+1;H=x;)H++;for(j=Y,X=H-1;j=S.length||2!=(X=w[G-1])&&3!=X||2!=(K=S[G+1])&&3!=K?4:(H&&(K=3),K==X?K:4);case 10:return 2==(X=G>0?w[G-1]:5)&&G+10&&2==w[G-1])return 2;if(H)return 4;for(Y=G+1,q=S.length;Y=1425&&J<=2303||64286==J;if(X=S[Y],Q&&(1==X||7==X))return 1}return G<1||5==(X=S[G-1])?4:w[G-1];case 5:return H=!1,z=!0,U;case 6:return j=!0,4;case 13:case 14:case 16:case 17:case 15:H=!1;case 18:return 4}}function m(x){var S=x.charCodeAt(0),w=S>>8;return 0==w?S>191?0:q[S]:5==w?/[\u0591-\u05f4]/.test(x)?1:0:6==w?/[\u0610-\u061a\u064b-\u065f\u06d6-\u06e4\u06e7-\u06ed]/.test(x)?12:/[\u0660-\u0669\u066b-\u066c]/.test(x)?3:1642==S?11:/[\u06f0-\u06f9]/.test(x)?2:7:32==w&&S<=8287?Y[255&S]:254==w&&S>=65136?7:4}S.L=0,S.R=1,S.EN=2,S.ON_R=3,S.AN=4,S.R_H=5,S.B=6,S.RLE=7,S.DOT="·",S.doBidiReorder=function(x,w,q){if(x.length<2)return{};var Y=x.split(""),Z=new Array(Y.length),J=new Array(Y.length),Q=[];U=q?1:0,function(x,S,w,q){var Y=U?K:X,Z=null,J=null,Q=null,ee=0,te=null,ne=-1,ie=null,re=null,oe=[];if(!q)for(ie=0,q=[];ie0)if(16==te){for(ie=ne;ie-1){for(ie=ne;ie=0&&8==q[ae];ae--)S[ae]=U}}(Y,Q,Y.length,w);for(var ee=0;ee7&&w[ee]<13||4===w[ee]||18===w[ee])?Q[ee]=S.ON_R:ee>0&&"ل"===Y[ee-1]&&/\u0622|\u0623|\u0625|\u0627/.test(Y[ee])&&(Q[ee-1]=Q[ee]=S.R_H,ee++);for(Y[Y.length-1]===S.DOT&&(Q[Y.length-1]=S.B),"‫"===Y[0]&&(Q[0]=S.RLE),ee=0;ee=0&&(x=this.session.$docRowCache[w])}return x},this.getSplitIndex=function(){var x=0,S=this.session.$screenRowCache;if(S.length)for(var w,U=this.session.$getRowCacheIndex(S,this.currentRow);this.currentRow-x>0&&(w=this.session.$getRowCacheIndex(S,this.currentRow-x-1))===U;)U=w,x++;else x=this.currentRow;return x},this.updateRowLine=function(x,S){void 0===x&&(x=this.getDocumentRow());var w=x===this.session.getLength()-1?this.EOF:this.EOL;if(this.wrapIndent=0,this.line=this.session.getLine(x),this.isRtlDir=this.$isRtl||this.line.charAt(0)===this.RLE,this.session.$useWrapMode){var H=this.session.$wrapData[x];H&&(void 0===S&&(S=this.getSplitIndex()),S>0&&H.length?(this.wrapIndent=H.indent,this.wrapOffset=this.wrapIndent*this.charWidths[U.L],this.line=SS?this.session.getOverwrite()?x:x-1:S,G=U.getVisualFromLogicalIdx(w,this.bidiMap),H=this.bidiMap.bidiLevels,z=0;!this.session.getOverwrite()&&x<=S&&H[G]%2!=0&&G++;for(var j=0;jS&&H[G]%2==0&&(z+=this.charWidths[H[G]]),this.wrapIndent&&(z+=this.isRtlDir?-1*this.wrapOffset:this.wrapOffset),this.isRtlDir&&(z+=this.rtlLineOffset),z},this.getSelections=function(x,S){var w,U=this.bidiMap,G=U.bidiLevels,H=[],z=0,j=Math.min(x,S)-this.wrapIndent,X=Math.max(x,S)-this.wrapIndent,K=!1,q=!1,Y=0;this.wrapIndent&&(z+=this.isRtlDir?-1*this.wrapOffset:this.wrapOffset);for(var Z,J=0;J=j&&Zw+H/2;){if(w+=H,U===G.length-1){H=0;break}H=this.charWidths[G[++U]]}return U>0&&G[U-1]%2!=0&&G[U]%2==0?(x0&&G[U-1]%2==0&&G[U]%2!=0?S=1+(x>w?this.bidiMap.logicalFromVisual[U]:this.bidiMap.logicalFromVisual[U-1]):this.isRtlDir&&U===G.length-1&&0===H&&G[U-1]%2==0||!this.isRtlDir&&0===U&&G[U]%2!=0?S=1+this.bidiMap.logicalFromVisual[U]:(U>0&&G[U-1]%2!=0&&0!==H&&U--,S=this.bidiMap.logicalFromVisual[U]),0===S&&this.isRtlDir&&S++,S+this.wrapIndent}}).call(s.prototype),S.BidiHandler=s})),ace.define("ace/selection",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter","ace/range"],(function(x,S,w){"use strict";var U=x("./lib/oop"),G=x("./lib/lang"),H=x("./lib/event_emitter").EventEmitter,z=x("./range").Range,a=function(x){this.session=x,this.doc=x.getDocument(),this.clearSelection(),this.cursor=this.lead=this.doc.createAnchor(0,0),this.anchor=this.doc.createAnchor(0,0),this.$silent=!1;var S=this;this.cursor.on("change",(function(x){S.$cursorChanged=!0,S.$silent||S._emit("changeCursor"),S.$isEmpty||S.$silent||S._emit("changeSelection"),S.$keepDesiredColumnOnChange||x.old.column==x.value.column||(S.$desiredColumn=null)})),this.anchor.on("change",(function(){S.$anchorChanged=!0,S.$isEmpty||S.$silent||S._emit("changeSelection")}))};(function(){U.implement(this,H),this.isEmpty=function(){return this.$isEmpty||this.anchor.row==this.lead.row&&this.anchor.column==this.lead.column},this.isMultiLine=function(){return!this.$isEmpty&&this.anchor.row!=this.cursor.row},this.getCursor=function(){return this.lead.getPosition()},this.setSelectionAnchor=function(x,S){this.$isEmpty=!1,this.anchor.setPosition(x,S)},this.getAnchor=this.getSelectionAnchor=function(){return this.$isEmpty?this.getSelectionLead():this.anchor.getPosition()},this.getSelectionLead=function(){return this.lead.getPosition()},this.isBackwards=function(){var x=this.anchor,S=this.lead;return x.row>S.row||x.row==S.row&&x.column>S.column},this.getRange=function(){var x=this.anchor,S=this.lead;return this.$isEmpty?z.fromPoints(S,S):this.isBackwards()?z.fromPoints(S,x):z.fromPoints(x,S)},this.clearSelection=function(){this.$isEmpty||(this.$isEmpty=!0,this._emit("changeSelection"))},this.selectAll=function(){this.$setSelection(0,0,Number.MAX_VALUE,Number.MAX_VALUE)},this.setRange=this.setSelectionRange=function(x,S){var w=S?x.end:x.start,U=S?x.start:x.end;this.$setSelection(w.row,w.column,U.row,U.column)},this.$setSelection=function(x,S,w,U){var G=this.$isEmpty,H=this.inMultiSelectMode;this.$silent=!0,this.$cursorChanged=this.$anchorChanged=!1,this.anchor.setPosition(x,S),this.cursor.setPosition(w,U),this.$isEmpty=!z.comparePoints(this.anchor,this.cursor),this.$silent=!1,this.$cursorChanged&&this._emit("changeCursor"),(this.$cursorChanged||this.$anchorChanged||G!=this.$isEmpty||H)&&this._emit("changeSelection")},this.$moveSelection=function(x){var S=this.lead;this.$isEmpty&&this.setSelectionAnchor(S.row,S.column),x.call(this)},this.selectTo=function(x,S){this.$moveSelection((function(){this.moveCursorTo(x,S)}))},this.selectToPosition=function(x){this.$moveSelection((function(){this.moveCursorToPosition(x)}))},this.moveTo=function(x,S){this.clearSelection(),this.moveCursorTo(x,S)},this.moveToPosition=function(x){this.clearSelection(),this.moveCursorToPosition(x)},this.selectUp=function(){this.$moveSelection(this.moveCursorUp)},this.selectDown=function(){this.$moveSelection(this.moveCursorDown)},this.selectRight=function(){this.$moveSelection(this.moveCursorRight)},this.selectLeft=function(){this.$moveSelection(this.moveCursorLeft)},this.selectLineStart=function(){this.$moveSelection(this.moveCursorLineStart)},this.selectLineEnd=function(){this.$moveSelection(this.moveCursorLineEnd)},this.selectFileEnd=function(){this.$moveSelection(this.moveCursorFileEnd)},this.selectFileStart=function(){this.$moveSelection(this.moveCursorFileStart)},this.selectWordRight=function(){this.$moveSelection(this.moveCursorWordRight)},this.selectWordLeft=function(){this.$moveSelection(this.moveCursorWordLeft)},this.getWordRange=function(x,S){if(void 0===S){var w=x||this.lead;x=w.row,S=w.column}return this.session.getWordRange(x,S)},this.selectWord=function(){this.setSelectionRange(this.getWordRange())},this.selectAWord=function(){var x=this.getCursor(),S=this.session.getAWordRange(x.row,x.column);this.setSelectionRange(S)},this.getLineRange=function(x,S){var w,U="number"==typeof x?x:this.lead.row,G=this.session.getFoldLine(U);return G?(U=G.start.row,w=G.end.row):w=U,!0===S?new z(U,0,w,this.session.getLine(w).length):new z(U,0,w+1,0)},this.selectLine=function(){this.setSelectionRange(this.getLineRange())},this.moveCursorUp=function(){this.moveCursorBy(-1,0)},this.moveCursorDown=function(){this.moveCursorBy(1,0)},this.wouldMoveIntoSoftTab=function(x,S,w){var U=x.column,G=x.column+S;return w<0&&(U=x.column-S,G=x.column),this.session.isTabStop(x)&&this.doc.getLine(x.row).slice(U,G).split(" ").length-1==S},this.moveCursorLeft=function(){var x,S=this.lead.getPosition();if(x=this.session.getFoldAt(S.row,S.column,-1))this.moveCursorTo(x.start.row,x.start.column);else if(0===S.column)S.row>0&&this.moveCursorTo(S.row-1,this.doc.getLine(S.row-1).length);else{var w=this.session.getTabSize();this.wouldMoveIntoSoftTab(S,w,-1)&&!this.session.getNavigateWithinSoftTabs()?this.moveCursorBy(0,-w):this.moveCursorBy(0,-1)}},this.moveCursorRight=function(){var x,S=this.lead.getPosition();if(x=this.session.getFoldAt(S.row,S.column,1))this.moveCursorTo(x.end.row,x.end.column);else if(this.lead.column==this.doc.getLine(this.lead.row).length)this.lead.row0&&(S.column=U)}}this.moveCursorTo(S.row,S.column)},this.moveCursorFileEnd=function(){var x=this.doc.getLength()-1,S=this.doc.getLine(x).length;this.moveCursorTo(x,S)},this.moveCursorFileStart=function(){this.moveCursorTo(0,0)},this.moveCursorLongWordRight=function(){var x=this.lead.row,S=this.lead.column,w=this.doc.getLine(x),U=w.substring(S);this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;var G=this.session.getFoldAt(x,S,1);if(G)this.moveCursorTo(G.end.row,G.end.column);else{if(this.session.nonTokenRe.exec(U)&&(S+=this.session.nonTokenRe.lastIndex,this.session.nonTokenRe.lastIndex=0,U=w.substring(S)),S>=w.length)return this.moveCursorTo(x,w.length),this.moveCursorRight(),void(x0&&this.moveCursorWordLeft());this.session.tokenRe.exec(H)&&(w-=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0),this.moveCursorTo(S,w)}},this.$shortWordEndIndex=function(x){var S,w=0,U=/\s/,G=this.session.tokenRe;if(G.lastIndex=0,this.session.tokenRe.exec(x))w=this.session.tokenRe.lastIndex;else{for(;(S=x[w])&&U.test(S);)w++;if(w<1)for(G.lastIndex=0;(S=x[w])&&!G.test(S);)if(G.lastIndex=0,w++,U.test(S)){if(w>2){w--;break}for(;(S=x[w])&&U.test(S);)w++;if(w>2)break}}return G.lastIndex=0,w},this.moveCursorShortWordRight=function(){var x=this.lead.row,S=this.lead.column,w=this.doc.getLine(x),U=w.substring(S),G=this.session.getFoldAt(x,S,1);if(G)return this.moveCursorTo(G.end.row,G.end.column);if(S==w.length){var H=this.doc.getLength();do{x++,U=this.doc.getLine(x)}while(x0&&/^\s*$/.test(U));w=U.length,/\s+$/.test(U)||(U="")}var H=G.stringReverse(U),z=this.$shortWordEndIndex(H);return this.moveCursorTo(S,w-z)},this.moveCursorWordRight=function(){this.session.$selectLongWords?this.moveCursorLongWordRight():this.moveCursorShortWordRight()},this.moveCursorWordLeft=function(){this.session.$selectLongWords?this.moveCursorLongWordLeft():this.moveCursorShortWordLeft()},this.moveCursorBy=function(x,S){var w,U=this.session.documentToScreenPosition(this.lead.row,this.lead.column);0===S&&(0!==x&&(this.session.$bidiHandler.isBidiRow(U.row,this.lead.row)?(w=this.session.$bidiHandler.getPosLeft(U.column),U.column=Math.round(w/this.session.$bidiHandler.charWidths[0])):w=U.column*this.session.$bidiHandler.charWidths[0]),this.$desiredColumn?U.column=this.$desiredColumn:this.$desiredColumn=U.column);var G=this.session.screenToDocumentPosition(U.row+x,U.column,w);0!==x&&0===S&&G.row===this.lead.row&&G.column===this.lead.column&&this.session.lineWidgets&&this.session.lineWidgets[G.row]&&(G.row>0||x>0)&&G.row++,this.moveCursorTo(G.row,G.column+S,0===S)},this.moveCursorToPosition=function(x){this.moveCursorTo(x.row,x.column)},this.moveCursorTo=function(x,S,w){var U=this.session.getFoldAt(x,S,1);U&&(x=U.start.row,S=U.start.column),this.$keepDesiredColumnOnChange=!0;var G=this.session.getLine(x);/[\uDC00-\uDFFF]/.test(G.charAt(S))&&G.charAt(S-1)&&(this.lead.row==x&&this.lead.column==S+1?S-=1:S+=1),this.lead.setPosition(x,S),this.$keepDesiredColumnOnChange=!1,w||(this.$desiredColumn=null)},this.moveCursorToScreen=function(x,S,w){var U=this.session.screenToDocumentPosition(x,S);this.moveCursorTo(U.row,U.column,w)},this.detach=function(){this.lead.detach(),this.anchor.detach(),this.session=this.doc=null},this.fromOrientedRange=function(x){this.setSelectionRange(x,x.cursor==x.start),this.$desiredColumn=x.desiredColumn||this.$desiredColumn},this.toOrientedRange=function(x){var S=this.getRange();return x?(x.start.column=S.start.column,x.start.row=S.start.row,x.end.column=S.end.column,x.end.row=S.end.row):x=S,x.cursor=this.isBackwards()?x.start:x.end,x.desiredColumn=this.$desiredColumn,x},this.getRangeOfMovements=function(x){var S=this.getCursor();try{x(this);var w=this.getCursor();return z.fromPoints(S,w)}catch(x){return z.fromPoints(S,S)}finally{this.moveCursorToPosition(S)}},this.toJSON=function(){if(this.rangeCount)var x=this.ranges.map((function(x){var S=x.clone();return S.isBackwards=x.cursor==x.start,S}));else(x=this.getRange()).isBackwards=this.isBackwards();return x},this.fromJSON=function(x){if(null==x.start){if(this.rangeList&&x.length>1){this.toSingleRange(x[0]);for(var S=x.length;S--;){var w=z.fromPoints(x[S].start,x[S].end);x[S].isBackwards&&(w.cursor=w.start),this.addRange(w,!0)}return}x=x[0]}this.rangeList&&this.toSingleRange(x),this.setSelectionRange(x,x.isBackwards)},this.isEqual=function(x){if((x.length||this.rangeCount)&&x.length!=this.rangeCount)return!1;if(!x.length||!this.ranges)return this.getRange().isEqual(x);for(var S=this.ranges.length;S--;)if(!this.ranges[S].isEqual(x[S]))return!1;return!0}}).call(a.prototype),S.Selection=a})),ace.define("ace/tokenizer",["require","exports","module","ace/config"],(function(x,S,w){"use strict";var U=x("./config"),G=2e3,o=function(x){for(var S in this.states=x,this.regExps={},this.matchMappings={},this.states){for(var w=this.states[S],U=[],G=0,H=this.matchMappings[S]={defaultToken:"text"},z="g",j=[],X=0;X1?this.$applyToken:K.token),Y>1&&(/\\\d/.test(K.regex)?q=K.regex.replace(/\\([0-9]+)/g,(function(x,S){return"\\"+(parseInt(S,10)+G+1)})):(Y=1,q=this.removeCapturingGroups(K.regex)),K.splitRegex||"string"==typeof K.token||j.push(K)),H[G]=X,G+=Y,U.push(q),K.onMatch||(K.onMatch=null)}}U.length||(H[0]=0,U.push("$")),j.forEach((function(x){x.splitRegex=this.createSplitterRegexp(x.regex,z)}),this),this.regExps[S]=new RegExp("("+U.join(")|(")+")|($)",z)}};(function(){this.$setMaxTokenCount=function(x){G=0|x},this.$applyToken=function(x){var S=this.splitRegex.exec(x).slice(1),w=this.token.apply(this,S);if("string"==typeof w)return[{type:w,value:x}];for(var U=[],G=0,H=w.length;Gq){var ne=x.substring(q,te-ee.length);Z.type==J?Z.value+=ne:(Z.type&&K.push(Z),Z={type:J,value:ne})}for(var ie=0;ieG){for(Y>2*x.length&&this.reportError("infinite loop with in ace tokenizer",{startState:S,line:x});q1&&w[0]!==U&&w.unshift("#tmp",U),{tokens:K,state:w.length?w:U}},this.reportError=U.reportError}).call(o.prototype),S.Tokenizer=o})),ace.define("ace/mode/text_highlight_rules",["require","exports","module","ace/lib/lang"],(function(x,S,w){"use strict";var U=x("../lib/lang"),r=function(){this.$rules={start:[{token:"empty_line",regex:"^$"},{defaultToken:"text"}]}};(function(){this.addRules=function(x,S){if(S)for(var w in x){for(var U=x[w],G=0;G=this.$rowTokens.length;){if(this.$row+=1,x||(x=this.$session.getLength()),this.$row>=x)return this.$row=x-1,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=0}return this.$rowTokens[this.$tokenIndex]},this.getCurrentToken=function(){return this.$rowTokens[this.$tokenIndex]},this.getCurrentTokenRow=function(){return this.$row},this.getCurrentTokenColumn=function(){var x=this.$rowTokens,S=this.$tokenIndex,w=x[S].start;if(void 0!==w)return w;for(w=0;S>0;)w+=x[S-=1].value.length;return w},this.getCurrentTokenPosition=function(){return{row:this.$row,column:this.getCurrentTokenColumn()}},this.getCurrentTokenRange=function(){var x=this.$rowTokens[this.$tokenIndex],S=this.getCurrentTokenColumn();return new U(this.$row,S,this.$row,S+x.value.length)}}).call(r.prototype),S.TokenIterator=r})),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],(function(x,S,w){"use strict";var U,G=x("../../lib/oop"),H=x("../behaviour").Behaviour,z=x("../../token_iterator").TokenIterator,j=x("../../lib/lang"),X=["text","paren.rparen","rparen","paren","punctuation.operator"],K=["text","paren.rparen","rparen","paren","punctuation.operator","comment"],q={},Y={'"':'"',"'":"'"},d=function(x){var S=-1;if(x.multiSelect&&(S=x.selection.index,q.rangeCount!=x.multiSelect.rangeCount&&(q={rangeCount:x.multiSelect.rangeCount})),q[S])return U=q[S];U=q[S]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:"",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:"",maybeInsertedLineEnd:""}},p=function(x,S,w,U){var G=x.end.row-x.start.row;return{text:w+S+U,selection:[0,x.start.column+1,G,x.end.column+(G?0:1)]}},m=function(x){this.add("braces","insertion",(function(S,w,G,H,z){var X=G.getCursorPosition(),K=H.doc.getLine(X.row);if("{"==z){d(G);var q=G.getSelectionRange(),Y=H.doc.getTextRange(q);if(""!==Y&&"{"!==Y&&G.getWrapBehavioursEnabled())return p(q,Y,"{","}");if(m.isSaneInsertion(G,H))return/[\]\}\)]/.test(K[X.column])||G.inMultiSelectMode||x&&x.braces?(m.recordAutoInsert(G,H,"}"),{text:"{}",selection:[1,1]}):(m.recordMaybeInsert(G,H,"{"),{text:"{",selection:[1,1]})}else if("}"==z){if(d(G),"}"==K.substring(X.column,X.column+1)&&null!==H.$findOpeningBracket("}",{column:X.column+1,row:X.row})&&m.isAutoInsertedClosing(X,K,z))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}else{if("\n"==z||"\r\n"==z){d(G);var Z="";if(m.isMaybeInsertedClosing(X,K)&&(Z=j.stringRepeat("}",U.maybeInsertedBrackets),m.clearMaybeInsertedClosing()),"}"===K.substring(X.column,X.column+1)){var J=H.findMatchingBracket({row:X.row,column:X.column+1},"}");if(!J)return null;var Q=this.$getIndent(H.getLine(J.row))}else{if(!Z)return void m.clearMaybeInsertedClosing();Q=this.$getIndent(K)}var ee=Q+H.getTabString();return{text:"\n"+ee+"\n"+Q+Z,selection:[1,ee.length,1,ee.length]}}m.clearMaybeInsertedClosing()}})),this.add("braces","deletion",(function(x,S,w,G,H){var z=G.doc.getTextRange(H);if(!H.isMultiLine()&&"{"==z){if(d(w),"}"==G.doc.getLine(H.start.row).substring(H.end.column,H.end.column+1))return H.end.column++,H;U.maybeInsertedBrackets--}})),this.add("parens","insertion",(function(x,S,w,U,G){if("("==G){d(w);var H=w.getSelectionRange(),z=U.doc.getTextRange(H);if(""!==z&&w.getWrapBehavioursEnabled())return p(H,z,"(",")");if(m.isSaneInsertion(w,U))return m.recordAutoInsert(w,U,")"),{text:"()",selection:[1,1]}}else if(")"==G){d(w);var j=w.getCursorPosition(),X=U.doc.getLine(j.row);if(")"==X.substring(j.column,j.column+1)&&null!==U.$findOpeningBracket(")",{column:j.column+1,row:j.row})&&m.isAutoInsertedClosing(j,X,G))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}})),this.add("parens","deletion",(function(x,S,w,U,G){var H=U.doc.getTextRange(G);if(!G.isMultiLine()&&"("==H&&(d(w),")"==U.doc.getLine(G.start.row).substring(G.start.column+1,G.start.column+2)))return G.end.column++,G})),this.add("brackets","insertion",(function(x,S,w,U,G){if("["==G){d(w);var H=w.getSelectionRange(),z=U.doc.getTextRange(H);if(""!==z&&w.getWrapBehavioursEnabled())return p(H,z,"[","]");if(m.isSaneInsertion(w,U))return m.recordAutoInsert(w,U,"]"),{text:"[]",selection:[1,1]}}else if("]"==G){d(w);var j=w.getCursorPosition(),X=U.doc.getLine(j.row);if("]"==X.substring(j.column,j.column+1)&&null!==U.$findOpeningBracket("]",{column:j.column+1,row:j.row})&&m.isAutoInsertedClosing(j,X,G))return m.popAutoInsertedClosing(),{text:"",selection:[1,1]}}})),this.add("brackets","deletion",(function(x,S,w,U,G){var H=U.doc.getTextRange(G);if(!G.isMultiLine()&&"["==H&&(d(w),"]"==U.doc.getLine(G.start.row).substring(G.start.column+1,G.start.column+2)))return G.end.column++,G})),this.add("string_dquotes","insertion",(function(x,S,w,U,G){var H=U.$mode.$quotes||Y;if(1==G.length&&H[G]){if(this.lineCommentStart&&-1!=this.lineCommentStart.indexOf(G))return;d(w);var z=G,j=w.getSelectionRange(),X=U.doc.getTextRange(j);if(!(""===X||1==X.length&&H[X])&&w.getWrapBehavioursEnabled())return p(j,X,z,z);if(!X){var K=w.getCursorPosition(),q=U.doc.getLine(K.row),Z=q.substring(K.column-1,K.column),J=q.substring(K.column,K.column+1),Q=U.getTokenAt(K.row,K.column),ee=U.getTokenAt(K.row,K.column+1);if("\\"==Z&&Q&&/escape/.test(Q.type))return null;var te,ne=Q&&/string|escape/.test(Q.type),ie=!ee||/string|escape/.test(ee.type);if(J==z)(te=ne!==ie)&&/string\.end/.test(ee.type)&&(te=!1);else{if(ne&&!ie)return null;if(ne&&ie)return null;var re=U.$mode.tokenRe;re.lastIndex=0;var oe=re.test(Z);re.lastIndex=0;var ae=re.test(Z);if(oe||ae)return null;if(J&&!/[\s;,.})\]\\]/.test(J))return null;var se=q[K.column-2];if(Z==z&&(se==z||re.test(se)))return null;te=!0}return{text:te?z+z:"",selection:[1,1]}}}})),this.add("string_dquotes","deletion",(function(x,S,w,U,G){var H=U.$mode.$quotes||Y,z=U.doc.getTextRange(G);if(!G.isMultiLine()&&H.hasOwnProperty(z)&&(d(w),U.doc.getLine(G.start.row).substring(G.start.column+1,G.start.column+2)==z))return G.end.column++,G}))};m.isSaneInsertion=function(x,S){var w=x.getCursorPosition(),U=new z(S,w.row,w.column);if(!this.$matchTokenType(U.getCurrentToken()||"text",X)){if(/[)}\]]/.test(x.session.getLine(w.row)[w.column]))return!0;var G=new z(S,w.row,w.column+1);if(!this.$matchTokenType(G.getCurrentToken()||"text",X))return!1}return U.stepForward(),U.getCurrentTokenRow()!==w.row||this.$matchTokenType(U.getCurrentToken()||"text",K)},m.$matchTokenType=function(x,S){return S.indexOf(x.type||x)>-1},m.recordAutoInsert=function(x,S,w){var G=x.getCursorPosition(),H=S.doc.getLine(G.row);this.isAutoInsertedClosing(G,H,U.autoInsertedLineEnd[0])||(U.autoInsertedBrackets=0),U.autoInsertedRow=G.row,U.autoInsertedLineEnd=w+H.substr(G.column),U.autoInsertedBrackets++},m.recordMaybeInsert=function(x,S,w){var G=x.getCursorPosition(),H=S.doc.getLine(G.row);this.isMaybeInsertedClosing(G,H)||(U.maybeInsertedBrackets=0),U.maybeInsertedRow=G.row,U.maybeInsertedLineStart=H.substr(0,G.column)+w,U.maybeInsertedLineEnd=H.substr(G.column),U.maybeInsertedBrackets++},m.isAutoInsertedClosing=function(x,S,w){return U.autoInsertedBrackets>0&&x.row===U.autoInsertedRow&&w===U.autoInsertedLineEnd[0]&&S.substr(x.column)===U.autoInsertedLineEnd},m.isMaybeInsertedClosing=function(x,S){return U.maybeInsertedBrackets>0&&x.row===U.maybeInsertedRow&&S.substr(x.column)===U.maybeInsertedLineEnd&&S.substr(0,x.column)==U.maybeInsertedLineStart},m.popAutoInsertedClosing=function(){U.autoInsertedLineEnd=U.autoInsertedLineEnd.substr(1),U.autoInsertedBrackets--},m.clearMaybeInsertedClosing=function(){U&&(U.maybeInsertedBrackets=0,U.maybeInsertedRow=-1)},G.inherits(m,H),S.CstyleBehaviour=m})),ace.define("ace/unicode",["require","exports","module"],(function(x,S,w){"use strict";for(var U=[48,9,8,25,5,0,2,25,48,0,11,0,5,0,6,22,2,30,2,457,5,11,15,4,8,0,2,0,18,116,2,1,3,3,9,0,2,2,2,0,2,19,2,82,2,138,2,4,3,155,12,37,3,0,8,38,10,44,2,0,2,1,2,1,2,0,9,26,6,2,30,10,7,61,2,9,5,101,2,7,3,9,2,18,3,0,17,58,3,100,15,53,5,0,6,45,211,57,3,18,2,5,3,11,3,9,2,1,7,6,2,2,2,7,3,1,3,21,2,6,2,0,4,3,3,8,3,1,3,3,9,0,5,1,2,4,3,11,16,2,2,5,5,1,3,21,2,6,2,1,2,1,2,1,3,0,2,4,5,1,3,2,4,0,8,3,2,0,8,15,12,2,2,8,2,2,2,21,2,6,2,1,2,4,3,9,2,2,2,2,3,0,16,3,3,9,18,2,2,7,3,1,3,21,2,6,2,1,2,4,3,8,3,1,3,2,9,1,5,1,2,4,3,9,2,0,17,1,2,5,4,2,2,3,4,1,2,0,2,1,4,1,4,2,4,11,5,4,4,2,2,3,3,0,7,0,15,9,18,2,2,7,2,2,2,22,2,9,2,4,4,7,2,2,2,3,8,1,2,1,7,3,3,9,19,1,2,7,2,2,2,22,2,9,2,4,3,8,2,2,2,3,8,1,8,0,2,3,3,9,19,1,2,7,2,2,2,22,2,15,4,7,2,2,2,3,10,0,9,3,3,9,11,5,3,1,2,17,4,23,2,8,2,0,3,6,4,0,5,5,2,0,2,7,19,1,14,57,6,14,2,9,40,1,2,0,3,1,2,0,3,0,7,3,2,6,2,2,2,0,2,0,3,1,2,12,2,2,3,4,2,0,2,5,3,9,3,1,35,0,24,1,7,9,12,0,2,0,2,0,5,9,2,35,5,19,2,5,5,7,2,35,10,0,58,73,7,77,3,37,11,42,2,0,4,328,2,3,3,6,2,0,2,3,3,40,2,3,3,32,2,3,3,6,2,0,2,3,3,14,2,56,2,3,3,66,5,0,33,15,17,84,13,619,3,16,2,25,6,74,22,12,2,6,12,20,12,19,13,12,2,2,2,1,13,51,3,29,4,0,5,1,3,9,34,2,3,9,7,87,9,42,6,69,11,28,4,11,5,11,11,39,3,4,12,43,5,25,7,10,38,27,5,62,2,28,3,10,7,9,14,0,89,75,5,9,18,8,13,42,4,11,71,55,9,9,4,48,83,2,2,30,14,230,23,280,3,5,3,37,3,5,3,7,2,0,2,0,2,0,2,30,3,52,2,6,2,0,4,2,2,6,4,3,3,5,5,12,6,2,2,6,67,1,20,0,29,0,14,0,17,4,60,12,5,0,4,11,18,0,5,0,3,9,2,0,4,4,7,0,2,0,2,0,2,3,2,10,3,3,6,4,5,0,53,1,2684,46,2,46,2,132,7,6,15,37,11,53,10,0,17,22,10,6,2,6,2,6,2,6,2,6,2,6,2,6,2,6,2,31,48,0,470,1,36,5,2,4,6,1,5,85,3,1,3,2,2,89,2,3,6,40,4,93,18,23,57,15,513,6581,75,20939,53,1164,68,45,3,268,4,27,21,31,3,13,13,1,2,24,9,69,11,1,38,8,3,102,3,1,111,44,25,51,13,68,12,9,7,23,4,0,5,45,3,35,13,28,4,64,15,10,39,54,10,13,3,9,7,22,4,1,5,66,25,2,227,42,2,1,3,9,7,11171,13,22,5,48,8453,301,3,61,3,105,39,6,13,4,6,11,2,12,2,4,2,0,2,1,2,1,2,107,34,362,19,63,3,53,41,11,5,15,17,6,13,1,25,2,33,4,2,134,20,9,8,25,5,0,2,25,12,88,4,5,3,5,3,5,3,2],G=0,H=[],z=0;z2?U%K!=K-1:U%K==0})}else{if(!this.blockComment)return!1;var J=this.blockComment.start,Q=this.blockComment.end,ee=new RegExp("^(\\s*)(?:"+X.escapeRegExp(J)+")"),te=new RegExp("(?:"+X.escapeRegExp(Q)+")\\s*$"),v=function(x,S){E(x,S)||H&&!/\S/.test(x)||(G.insertInLine({row:S,column:x.length},Q),G.insertInLine({row:S,column:j},J))},_=function(x,S){var w;(w=x.match(te))&&G.removeInLine(S,x.length-w[0].length,x.length),(w=x.match(ee))&&G.removeInLine(S,w[1].length,w[0].length)},E=function(x,w){if(ee.test(x))return!0;for(var U=S.getTokens(w),G=0;Gx.length&&(ne=x.length)})),j==1/0&&(j=ne,H=!1,z=!1),q&&j%K!=0&&(j=Math.floor(j/K)*K),C(z?_:v)},this.toggleBlockComment=function(x,S,w,U){var G=this.blockComment;if(G){!G.start&&G[0]&&(G=G[0]);var H,z,j=(ee=new K(S,U.row,U.column)).getCurrentToken(),X=(S.selection,S.selection.toOrientedRange());if(j&&/comment/.test(j.type)){for(var Y,Z;j&&/comment/.test(j.type);){if(-1!=(te=j.value.indexOf(G.start))){var J=ee.getCurrentTokenRow(),Q=ee.getCurrentTokenColumn()+te;Y=new q(J,Q,J,Q+G.start.length);break}j=ee.stepBackward()}var ee;for(j=(ee=new K(S,U.row,U.column)).getCurrentToken();j&&/comment/.test(j.type);){var te;if(-1!=(te=j.value.indexOf(G.end))){J=ee.getCurrentTokenRow(),Q=ee.getCurrentTokenColumn()+te,Z=new q(J,Q,J,Q+G.end.length);break}j=ee.stepForward()}Z&&S.remove(Z),Y&&(S.remove(Y),H=Y.start.row,z=-G.start.length)}else z=G.start.length,H=w.start.row,S.insert(w.end,G.end),S.insert(w.start,G.start);X.start.row==H&&(X.start.column+=z),X.end.row==H&&(X.end.column+=z),S.selection.fromOrientedRange(X)}},this.getNextLineIndent=function(x,S,w){return this.$getIndent(S)},this.checkOutdent=function(x,S,w){return!1},this.autoOutdent=function(x,S,w){},this.$getIndent=function(x){return x.match(/^\s*/)[0]},this.createWorker=function(x){return null},this.createModeDelegates=function(x){for(var S in this.$embeds=[],this.$modes={},x)if(x[S]){var w=x[S],G=w.prototype.$id,H=U.$modes[G];H||(U.$modes[G]=H=new w),U.$modes[S]||(U.$modes[S]=H),this.$embeds.push(S),this.$modes[S]=H}var z=["toggleBlockComment","toggleCommentLines","getNextLineIndent","checkOutdent","autoOutdent","transformAction","getCompletions"];for(S=0;Sthis.row)){var S=function(x,S,w){var U="insert"==x.action,G=(U?1:-1)*(x.end.row-x.start.row),H=(U?1:-1)*(x.end.column-x.start.column),z=x.start,j=U?z:x.end;return e(S,z,w)?{row:S.row,column:S.column}:e(j,S,!w)?{row:S.row+G,column:S.column+(S.row==j.row?H:0)}:{row:z.row,column:z.column}}(x,{row:this.row,column:this.column},this.$insertRight);this.setPosition(S.row,S.column,!0)}},this.setPosition=function(x,S,w){var U;if(U=w?{row:x,column:S}:this.$clipPositionToDocument(x,S),this.row!=U.row||this.column!=U.column){var G={row:this.row,column:this.column};this.row=U.row,this.column=U.column,this._signal("change",{old:G,value:U})}},this.detach=function(){this.document.removeEventListener("change",this.$onChange)},this.attach=function(x){this.document=x||this.document,this.document.on("change",this.$onChange)},this.$clipPositionToDocument=function(x,S){var w={};return x>=this.document.getLength()?(w.row=Math.max(0,this.document.getLength()-1),w.column=this.document.getLine(w.row).length):x<0?(w.row=0,w.column=0):(w.row=x,w.column=Math.min(this.document.getLine(w.row).length,Math.max(0,S))),S<0&&(w.column=0),w}}).call(H.prototype)})),ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"],(function(x,S,w){"use strict";var U=x("./lib/oop"),G=x("./apply_delta").applyDelta,H=x("./lib/event_emitter").EventEmitter,z=x("./range").Range,j=x("./anchor").Anchor,c=function(x){this.$lines=[""],0===x.length?this.$lines=[""]:Array.isArray(x)?this.insertMergedLines({row:0,column:0},x):this.insert({row:0,column:0},x)};(function(){U.implement(this,H),this.setValue=function(x){var S=this.getLength()-1;this.remove(new z(0,0,S,this.getLine(S).length)),this.insert({row:0,column:0},x)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(x,S){return new j(this,x,S)},0==="aaa".split(/a/).length?this.$split=function(x){return x.replace(/\r\n|\r/g,"\n").split("\n")}:this.$split=function(x){return x.split(/\r\n|\r|\n/)},this.$detectNewLine=function(x){var S=x.match(/^.*?(\r\n|\r|\n)/m);this.$autoNewLine=S?S[1]:"\n",this._signal("changeNewLineMode")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\r\n";case"unix":return"\n";default:return this.$autoNewLine||"\n"}},this.$autoNewLine="",this.$newLineMode="auto",this.setNewLineMode=function(x){this.$newLineMode!==x&&(this.$newLineMode=x,this._signal("changeNewLineMode"))},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(x){return"\r\n"==x||"\r"==x||"\n"==x},this.getLine=function(x){return this.$lines[x]||""},this.getLines=function(x,S){return this.$lines.slice(x,S+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(x){return this.getLinesForRange(x).join(this.getNewLineCharacter())},this.getLinesForRange=function(x){var S;if(x.start.row===x.end.row)S=[this.getLine(x.start.row).substring(x.start.column,x.end.column)];else{(S=this.getLines(x.start.row,x.end.row))[0]=(S[0]||"").substring(x.start.column);var w=S.length-1;x.end.row-x.start.row==w&&(S[w]=S[w].substring(0,x.end.column))}return S},this.insertLines=function(x,S){return console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."),this.insertFullLines(x,S)},this.removeLines=function(x,S){return console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."),this.removeFullLines(x,S)},this.insertNewLine=function(x){return console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead."),this.insertMergedLines(x,["",""])},this.insert=function(x,S){return this.getLength()<=1&&this.$detectNewLine(S),this.insertMergedLines(x,this.$split(S))},this.insertInLine=function(x,S){var w=this.clippedPos(x.row,x.column),U=this.pos(x.row,x.column+S.length);return this.applyDelta({start:w,end:U,action:"insert",lines:[S]},!0),this.clonePos(U)},this.clippedPos=function(x,S){var w=this.getLength();void 0===x?x=w:x<0?x=0:x>=w&&(x=w-1,S=void 0);var U=this.getLine(x);return null==S&&(S=U.length),{row:x,column:S=Math.min(Math.max(S,0),U.length)}},this.clonePos=function(x){return{row:x.row,column:x.column}},this.pos=function(x,S){return{row:x,column:S}},this.$clipPosition=function(x){var S=this.getLength();return x.row>=S?(x.row=Math.max(0,S-1),x.column=this.getLine(S-1).length):(x.row=Math.max(0,x.row),x.column=Math.min(Math.max(x.column,0),this.getLine(x.row).length)),x},this.insertFullLines=function(x,S){var w=0;(x=Math.min(Math.max(x,0),this.getLength()))0,U=S=0&&this.applyDelta({start:this.pos(x,this.getLine(x).length),end:this.pos(x+1,0),action:"remove",lines:["",""]})},this.replace=function(x,S){return x instanceof z||(x=z.fromPoints(x.start,x.end)),0===S.length&&x.isEmpty()?x.start:S==this.getTextRange(x)?x.end:(this.remove(x),S?this.insert(x.start,S):x.start)},this.applyDeltas=function(x){for(var S=0;S=0;S--)this.revertDelta(x[S])},this.applyDelta=function(x,S){var w="insert"==x.action;(w?x.lines.length<=1&&!x.lines[0]:!z.comparePoints(x.start,x.end))||(w&&x.lines.length>2e4?this.$splitAndapplyLargeDelta(x,2e4):(G(this.$lines,x,S),this._signal("change",x)))},this.$splitAndapplyLargeDelta=function(x,S){for(var w=x.lines,U=w.length-S+1,G=x.start.row,H=x.start.column,z=0,j=0;z20){w.running=setTimeout(w.$worker,20);break}}w.currentLine=S,-1==U&&(U=S),H<=U&&w.fireUpdateEvent(H,U)}}};(function(){U.implement(this,G),this.setTokenizer=function(x){this.tokenizer=x,this.lines=[],this.states=[],this.start(0)},this.setDocument=function(x){this.doc=x,this.lines=[],this.states=[],this.stop()},this.fireUpdateEvent=function(x,S){var w={first:x,last:S};this._signal("update",{data:w})},this.start=function(x){this.currentLine=Math.min(x||0,this.currentLine,this.doc.getLength()),this.lines.splice(this.currentLine,this.lines.length),this.states.splice(this.currentLine,this.states.length),this.stop(),this.running=setTimeout(this.$worker,700)},this.scheduleStart=function(){this.running||(this.running=setTimeout(this.$worker,700))},this.$updateOnChange=function(x){var S=x.start.row,w=x.end.row-S;if(0===w)this.lines[S]=null;else if("remove"==x.action)this.lines.splice(S,w+1,null),this.states.splice(S,w+1,null);else{var U=Array(w+1);U.unshift(S,1),this.lines.splice.apply(this.lines,U),this.states.splice.apply(this.states,U)}this.currentLine=Math.min(S,this.currentLine,this.doc.getLength()),this.stop()},this.stop=function(){this.running&&clearTimeout(this.running),this.running=!1},this.getTokens=function(x){return this.lines[x]||this.$tokenizeRow(x)},this.getState=function(x){return this.currentLine==x&&this.$tokenizeRow(x),this.states[x]||"start"},this.$tokenizeRow=function(x){var S=this.doc.getLine(x),w=this.states[x-1],U=this.tokenizer.getLineTokens(S,w,x);return this.states[x]+""!=U.state+""?(this.states[x]=U.state,this.lines[x+1]=null,this.currentLine>x+1&&(this.currentLine=x+1)):this.currentLine==x&&(this.currentLine=x+1),this.lines[x]=U.tokens}}).call(o.prototype),S.BackgroundTokenizer=o})),ace.define("ace/search_highlight",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],(function(x,S,w){"use strict";var U=x("./lib/lang"),G=(x("./lib/oop"),x("./range").Range),o=function(x,S,w){this.setRegexp(x),this.clazz=S,this.type=w||"text"};(function(){this.MAX_RANGES=500,this.setRegexp=function(x){this.regExp+""!=x+""&&(this.regExp=x,this.cache=[])},this.update=function(x,S,w,H){if(this.regExp)for(var z=H.firstRow,j=H.lastRow,X=z;X<=j;X++){var K=this.cache[X];null==K&&((K=U.getMatchOffsets(w.getLine(X),this.regExp)).length>this.MAX_RANGES&&(K=K.slice(0,this.MAX_RANGES)),K=K.map((function(x){return new G(X,x.offset,X,x.offset+x.length)})),this.cache[X]=K.length?K:"");for(var q=K.length;q--;)S.drawSingleLineMarker(x,K[q].toScreenRange(w),this.clazz,H)}}}).call(o.prototype),S.SearchHighlight=o})),ace.define("ace/edit_session/fold_line",["require","exports","module","ace/range"],(function(x,S,w){"use strict";var U=x("../range").Range;function r(x,S){this.foldData=x,Array.isArray(S)?this.folds=S:S=this.folds=[S];var w=S[S.length-1];this.range=new U(S[0].start.row,S[0].start.column,w.end.row,w.end.column),this.start=this.range.start,this.end=this.range.end,this.folds.forEach((function(x){x.setFoldLine(this)}),this)}(function(){this.shiftRow=function(x){this.start.row+=x,this.end.row+=x,this.folds.forEach((function(S){S.start.row+=x,S.end.row+=x}))},this.addFold=function(x){if(x.sameRow){if(x.start.rowthis.endRow)throw new Error("Can't add a fold to this FoldLine as it has no connection");this.folds.push(x),this.folds.sort((function(x,S){return-x.range.compareEnd(S.start.row,S.start.column)})),this.range.compareEnd(x.start.row,x.start.column)>0?(this.end.row=x.end.row,this.end.column=x.end.column):this.range.compareStart(x.end.row,x.end.column)<0&&(this.start.row=x.start.row,this.start.column=x.start.column)}else if(x.start.row==this.end.row)this.folds.push(x),this.end.row=x.end.row,this.end.column=x.end.column;else{if(x.end.row!=this.start.row)throw new Error("Trying to add fold to FoldRow that doesn't have a matching row");this.folds.unshift(x),this.start.row=x.start.row,this.start.column=x.start.column}x.foldLine=this},this.containsRow=function(x){return x>=this.start.row&&x<=this.end.row},this.walk=function(x,S,w){var U,G,H=0,z=this.folds,j=!0;null==S&&(S=this.end.row,w=this.end.column);for(var X=0;X0)){var X=U(x,z.start);return 0===j?S&&0!==X?-H-2:H:X>0||0===X&&!S?H:-H-1}}return-H-1},this.add=function(x){var S=!x.isEmpty(),w=this.pointIndex(x.start,S);w<0&&(w=-w-1);var U=this.pointIndex(x.end,S,w);return U<0?U=-U-1:U++,this.ranges.splice(w,U-w,x)},this.addList=function(x){for(var S=[],w=x.length;w--;)S.push.apply(S,this.add(x[w]));return S},this.substractPoint=function(x){var S=this.pointIndex(x);if(S>=0)return this.ranges.splice(S,1)},this.merge=function(){for(var x,S=[],w=this.ranges,G=(w=w.sort((function(x,S){return U(x.start,S.start)})))[0],H=1;H=0},this.containsPoint=function(x){return this.pointIndex(x)>=0},this.rangeAtPoint=function(x){var S=this.pointIndex(x);if(S>=0)return this.ranges[S]},this.clipRows=function(x,S){var w=this.ranges;if(w[0].start.row>S||w[w.length-1].start.row=U);z++);if("insert"==x.action){for(var X=G-U,K=-S.column+w.column;zU);z++)if(q.start.row==U&&q.start.column>=S.column&&(q.start.column==S.column&&this.$bias<=0||(q.start.column+=K,q.start.row+=X)),q.end.row==U&&q.end.column>=S.column){if(q.end.column==S.column&&this.$bias<0)continue;q.end.column==S.column&&K>0&&zq.start.column&&q.end.column==H[z+1].start.column&&(q.end.column-=K),q.end.column+=K,q.end.row+=X}}else for(X=U-G,K=S.column-w.column;zG);z++)q.end.rowS.column)&&(q.end.column=S.column,q.end.row=S.row):(q.end.column+=K,q.end.row+=X):q.end.row>G&&(q.end.row+=X),q.start.rowS.column)&&(q.start.column=S.column,q.start.row=S.row):(q.start.column+=K,q.start.row+=X):q.start.row>G&&(q.start.row+=X);if(0!=X&&z=x)return G;if(G.end.row>x)return null}return null},this.getNextFoldLine=function(x,S){var w=this.$foldData,U=0;for(S&&(U=w.indexOf(S)),-1==U&&(U=0);U=x)return G}return null},this.getFoldedRowCount=function(x,S){for(var w=this.$foldData,U=S-x+1,G=0;G=S){j=x?U-=S-j:U=0);break}z>=x&&(U-=j>=x?z-j:z-x+1)}return U},this.$addFoldLine=function(x){return this.$foldData.push(x),this.$foldData.sort((function(x,S){return x.start.row-S.start.row})),x},this.addFold=function(x,S){var w,U=this.$foldData,z=!1;x instanceof H?w=x:(w=new H(S,x)).collapseChildren=S.collapseChildren,this.$clipRangeToDocument(w.range);var j=w.start.row,X=w.start.column,K=w.end.row,q=w.end.column,Y=this.getFoldAt(j,X,1),Z=this.getFoldAt(K,q,-1);if(Y&&Z==Y)return Y.addSubFold(w);Y&&!Y.range.isStart(j,X)&&this.removeFold(Y),Z&&!Z.range.isEnd(K,q)&&this.removeFold(Z);var J=this.getFoldsInRange(w.range);J.length>0&&(this.removeFolds(J),J.forEach((function(x){w.addSubFold(x)})));for(var Q=0;Q0&&this.foldAll(x.start.row+1,x.end.row,x.collapseChildren-1),x.subFolds=[]},this.expandFolds=function(x){x.forEach((function(x){this.expandFold(x)}),this)},this.unfold=function(x,S){var w,G;if(null==x?(w=new U(0,0,this.getLength(),0),S=!0):w="number"==typeof x?new U(x,0,x,this.getLine(x).length):"row"in x?U.fromPoints(x,x):x,G=this.getFoldsInRangeList(w),S)this.removeFolds(G);else for(var H=G;H.length;)this.expandFolds(H),H=this.getFoldsInRangeList(w);if(G.length)return G},this.isRowFolded=function(x,S){return!!this.getFoldLine(x,S)},this.getRowFoldEnd=function(x,S){var w=this.getFoldLine(x,S);return w?w.end.row:x},this.getRowFoldStart=function(x,S){var w=this.getFoldLine(x,S);return w?w.start.row:x},this.getFoldDisplayLine=function(x,S,w,U,G){null==U&&(U=x.start.row),null==G&&(G=0),null==S&&(S=x.end.row),null==w&&(w=this.getLine(S).length);var H=this.doc,z="";return x.walk((function(x,S,w,j){if(!(Sq)break}while(H&&X.test(H.type));H=G.stepBackward()}else H=G.getCurrentToken();return K.end.row=G.getCurrentTokenRow(),K.end.column=G.getCurrentTokenColumn()+H.value.length-2,K}},this.foldAll=function(x,S,w){null==w&&(w=1e5);var U=this.foldWidgets;if(U){S=S||this.getLength();for(var G=x=x||0;G=x){G=H.end.row;try{var z=this.addFold("...",H);z&&(z.collapseChildren=w)}catch(x){}}}}},this.$foldStyles={manual:1,markbegin:1,markbeginend:1},this.$foldStyle="markbegin",this.setFoldStyle=function(x){if(!this.$foldStyles[x])throw new Error("invalid fold style: "+x+"["+Object.keys(this.$foldStyles).join(", ")+"]");if(this.$foldStyle!=x){this.$foldStyle=x,"manual"==x&&this.unfold();var S=this.$foldMode;this.$setFolding(null),this.$setFolding(S)}},this.$setFolding=function(x){this.$foldMode!=x&&(this.$foldMode=x,this.off("change",this.$updateFoldWidgets),this.off("tokenizerUpdate",this.$tokenizerUpdateFoldWidgets),this._signal("changeAnnotation"),x&&"manual"!=this.$foldStyle?(this.foldWidgets=[],this.getFoldWidget=x.getFoldWidget.bind(x,this,this.$foldStyle),this.getFoldWidgetRange=x.getFoldWidgetRange.bind(x,this,this.$foldStyle),this.$updateFoldWidgets=this.updateFoldWidgets.bind(this),this.$tokenizerUpdateFoldWidgets=this.tokenizerUpdateFoldWidgets.bind(this),this.on("change",this.$updateFoldWidgets),this.on("tokenizerUpdate",this.$tokenizerUpdateFoldWidgets)):this.foldWidgets=null)},this.getParentFoldRangeData=function(x,S){var w=this.foldWidgets;if(!w||S&&w[x])return{};for(var U,G=x-1;G>=0;){var H=w[G];if(null==H&&(H=w[G]=this.getFoldWidget(G)),"start"==H){var z=this.getFoldWidgetRange(G);if(U||(U=z),z&&z.end.row>=x)break}G--}return{range:-1!==G&&z,firstRange:U}},this.onFoldWidgetClick=function(x,S){var w={children:(S=S.domEvent).shiftKey,all:S.ctrlKey||S.metaKey,siblings:S.altKey};if(!this.$toggleFoldWidget(x,w)){var U=S.target||S.srcElement;U&&/ace_fold-widget/.test(U.className)&&(U.className+=" ace_invalid")}},this.$toggleFoldWidget=function(x,S){if(this.getFoldWidget){var w=this.getFoldWidget(x),U=this.getLine(x),G="end"===w?-1:1,H=this.getFoldAt(x,-1===G?0:U.length,G);if(H)return S.children||S.all?this.removeFold(H):this.expandFold(H),H;var z=this.getFoldWidgetRange(x,!0);if(z&&!z.isMultiLine()&&(H=this.getFoldAt(z.start.row,z.start.column,1))&&z.isEqual(H.range))return this.removeFold(H),H;if(S.siblings){var j=this.getParentFoldRangeData(x);if(j.range)var X=j.range.start.row+1,K=j.range.end.row;this.foldAll(X,K,S.all?1e4:0)}else S.children?(K=z?z.end.row:this.getLength(),this.foldAll(x+1,K,S.all?1e4:0)):z&&(S.all&&(z.collapseChildren=1e4),this.addFold("...",z));return z}},this.toggleFoldWidget=function(x){var S=this.selection.getCursor().row;S=this.getRowFoldStart(S);var w=this.$toggleFoldWidget(S,{});if(!w){var U=this.getParentFoldRangeData(S,!0);if(w=U.range||U.firstRange){S=w.start.row;var G=this.getFoldAt(S,this.getLine(S).length,1);G?this.removeFold(G):this.addFold("...",w)}}},this.updateFoldWidgets=function(x){var S=x.start.row,w=x.end.row-S;if(0===w)this.foldWidgets[S]=null;else if("remove"==x.action)this.foldWidgets.splice(S,w+1,null);else{var U=Array(w+1);U.unshift(S,1),this.foldWidgets.splice.apply(this.foldWidgets,U)}},this.tokenizerUpdateFoldWidgets=function(x){var S=x.data;S.first!=S.last&&this.foldWidgets.length>S.first&&this.foldWidgets.splice(S.first,this.foldWidgets.length)}}})),ace.define("ace/edit_session/bracket_match",["require","exports","module","ace/token_iterator","ace/range"],(function(x,S,w){"use strict";var U=x("../token_iterator").TokenIterator,G=x("../range").Range;S.BracketMatch=function(){this.findMatchingBracket=function(x,S){if(0==x.column)return null;var w=S||this.getLine(x.row).charAt(x.column-1);if(""==w)return null;var U=w.match(/([\(\[\{])|([\)\]\}])/);return U?U[1]?this.$findClosingBracket(U[1],x):this.$findOpeningBracket(U[2],x):null},this.getBracketRange=function(x){var S,w=this.getLine(x.row),U=!0,H=w.charAt(x.column-1),z=H&&H.match(/([\(\[\{])|([\)\]\}])/);if(z||(H=w.charAt(x.column),x={row:x.row,column:x.column+1},z=H&&H.match(/([\(\[\{])|([\)\]\}])/),U=!1),!z)return null;if(z[1]){if(!(j=this.$findClosingBracket(z[1],x)))return null;S=G.fromPoints(x,j),U||(S.end.column++,S.start.column--),S.cursor=S.end}else{var j;if(!(j=this.$findOpeningBracket(z[2],x)))return null;S=G.fromPoints(j,x),U||(S.start.column++,S.end.column--),S.cursor=S.start}return S},this.$brackets={")":"(","(":")","]":"[","[":"]","{":"}","}":"{","<":">",">":"<"},this.$findOpeningBracket=function(x,S,w){var G=this.$brackets[x],H=1,z=new U(this,S.row,S.column),j=z.getCurrentToken();if(j||(j=z.stepForward()),j){w||(w=new RegExp("(\\.?"+j.type.replace(".","\\.").replace("rparen",".paren").replace(/\b(?:end)\b/,"(?:start|begin|end)")+")+"));for(var X=S.column-z.getCurrentTokenColumn()-2,K=j.value;;){for(;X>=0;){var q=K.charAt(X);if(q==G){if(0==(H-=1))return{row:z.getCurrentTokenRow(),column:X+z.getCurrentTokenColumn()}}else q==x&&(H+=1);X-=1}do{j=z.stepBackward()}while(j&&!w.test(j.type));if(null==j)break;X=(K=j.value).length-1}return null}},this.$findClosingBracket=function(x,S,w){var G=this.$brackets[x],H=1,z=new U(this,S.row,S.column),j=z.getCurrentToken();if(j||(j=z.stepForward()),j){w||(w=new RegExp("(\\.?"+j.type.replace(".","\\.").replace("lparen",".paren").replace(/\b(?:start|begin)\b/,"(?:start|begin|end)")+")+"));for(var X=S.column-z.getCurrentTokenColumn();;){for(var K=j.value,q=K.length;Xw&&(this.$docRowCache.splice(w,S),this.$screenRowCache.splice(w,S))},this.$getRowCacheIndex=function(x,S){for(var w=0,U=x.length-1;w<=U;){var G=w+U>>1,H=x[G];if(S>H)w=G+1;else{if(!(S=S);H++);return(w=U[H])?(w.index=H,w.start=G-w.value.length,w):null},this.setUndoManager=function(x){if(this.$undoManager=x,this.$informUndoManager&&this.$informUndoManager.cancel(),x){var S=this;x.addSession(this),this.$syncInformUndoManager=function(){S.$informUndoManager.cancel(),S.mergeUndoDeltas=!1},this.$informUndoManager=G.delayedCall(this.$syncInformUndoManager)}else this.$syncInformUndoManager=function(){}},this.markUndoGroup=function(){this.$syncInformUndoManager&&this.$syncInformUndoManager()},this.$defaultUndoManager={undo:function(){},redo:function(){},hasUndo:function(){},hasRedo:function(){},reset:function(){},add:function(){},addSelection:function(){},startNewGroup:function(){},addSession:function(){}},this.getUndoManager=function(){return this.$undoManager||this.$defaultUndoManager},this.getTabString=function(){return this.getUseSoftTabs()?G.stringRepeat(" ",this.getTabSize()):"\t"},this.setUseSoftTabs=function(x){this.setOption("useSoftTabs",x)},this.getUseSoftTabs=function(){return this.$useSoftTabs&&!this.$mode.$indentWithTabs},this.setTabSize=function(x){this.setOption("tabSize",x)},this.getTabSize=function(){return this.$tabSize},this.isTabStop=function(x){return this.$useSoftTabs&&x.column%this.$tabSize==0},this.setNavigateWithinSoftTabs=function(x){this.setOption("navigateWithinSoftTabs",x)},this.getNavigateWithinSoftTabs=function(){return this.$navigateWithinSoftTabs},this.$overwrite=!1,this.setOverwrite=function(x){this.setOption("overwrite",x)},this.getOverwrite=function(){return this.$overwrite},this.toggleOverwrite=function(){this.setOverwrite(!this.$overwrite)},this.addGutterDecoration=function(x,S){this.$decorations[x]||(this.$decorations[x]=""),this.$decorations[x]+=" "+S,this._signal("changeBreakpoint",{})},this.removeGutterDecoration=function(x,S){this.$decorations[x]=(this.$decorations[x]||"").replace(" "+S,""),this._signal("changeBreakpoint",{})},this.getBreakpoints=function(){return this.$breakpoints},this.setBreakpoints=function(x){this.$breakpoints=[];for(var S=0;S0&&(U=!!w.charAt(S-1).match(this.tokenRe)),U||(U=!!w.charAt(S).match(this.tokenRe)),U)var G=this.tokenRe;else G=/^\s+$/.test(w.slice(S-1,S+1))?/\s/:this.nonTokenRe;var H=S;if(H>0){do{H--}while(H>=0&&w.charAt(H).match(G));H++}for(var z=S;zx&&(x=S.screenWidth)})),this.lineWidgetWidth=x},this.$computeWidth=function(x){if(this.$modified||x){if(this.$modified=!1,this.$useWrapMode)return this.screenWidth=this.$wrapLimit;for(var S=this.doc.getAllLines(),w=this.$rowLengthCache,U=0,G=0,H=this.$foldData[G],z=H?H.start.row:1/0,j=S.length,X=0;Xz){if((X=H.end.row+1)>=j)break;z=(H=this.$foldData[G++])?H.start.row:1/0}null==w[X]&&(w[X]=this.$getStringScreenWidth(S[X])[0]),w[X]>U&&(U=w[X])}this.screenWidth=U}},this.getLine=function(x){return this.doc.getLine(x)},this.getLines=function(x,S){return this.doc.getLines(x,S)},this.getLength=function(){return this.doc.getLength()},this.getTextRange=function(x){return this.doc.getTextRange(x||this.selection.getRange())},this.insert=function(x,S){return this.doc.insert(x,S)},this.remove=function(x){return this.doc.remove(x)},this.removeFullLines=function(x,S){return this.doc.removeFullLines(x,S)},this.undoChanges=function(x,S){if(x.length){this.$fromUndo=!0;for(var w=x.length-1;-1!=w;w--){var U=x[w];"insert"==U.action||"remove"==U.action?this.doc.revertDelta(U):U.folds&&this.addFolds(U.folds)}!S&&this.$undoSelect&&(x.selectionBefore?this.selection.fromJSON(x.selectionBefore):this.selection.setRange(this.$getUndoSelection(x,!0))),this.$fromUndo=!1}},this.redoChanges=function(x,S){if(x.length){this.$fromUndo=!0;for(var w=0;wx.end.column&&(H.start.column+=K),H.end.row==x.end.row&&H.end.column>x.end.column&&(H.end.column+=K)),z&&H.start.row>=x.end.row&&(H.start.row+=z,H.end.row+=z)}if(H.end=this.insert(H.start,U),G.length){var j=x.start,X=H.start,K=(z=X.row-j.row,X.column-j.column);this.addFolds(G.map((function(x){return(x=x.clone()).start.row==j.row&&(x.start.column+=K),x.end.row==j.row&&(x.end.column+=K),x.start.row+=z,x.end.row+=z,x})))}return H},this.indentRows=function(x,S,w){w=w.replace(/\t/g,this.getTabString());for(var U=x;U<=S;U++)this.doc.insertInLine({row:U,column:0},w)},this.outdentRows=function(x){for(var S=x.collapseRows(),w=new q(0,0,0,0),U=this.getTabSize(),G=S.start.row;G<=S.end.row;++G){var H=this.getLine(G);w.start.row=G,w.end.row=G;for(var z=0;z0){var G;if((G=this.getRowFoldEnd(S+w))>this.doc.getLength()-1)return 0;U=G-S}else x=this.$clipRowToDocument(x),U=(S=this.$clipRowToDocument(S))-x+1;var H=new q(x,0,S,Number.MAX_VALUE),z=this.getFoldsInRange(H).map((function(x){return(x=x.clone()).start.row+=U,x.end.row+=U,x})),j=0==w?this.doc.getLines(x,S):this.doc.removeFullLines(x,S);return this.doc.insertFullLines(x+U,j),z.length&&this.addFolds(z),U},this.moveLinesUp=function(x,S){return this.$moveLines(x,S,-1)},this.moveLinesDown=function(x,S){return this.$moveLines(x,S,1)},this.duplicateLines=function(x,S){return this.$moveLines(x,S,0)},this.$clipRowToDocument=function(x){return Math.max(0,Math.min(x,this.doc.getLength()-1))},this.$clipColumnToRow=function(x,S){return S<0?0:Math.min(this.doc.getLine(x).length,S)},this.$clipPositionToDocument=function(x,S){if(S=Math.max(0,S),x<0)x=0,S=0;else{var w=this.doc.getLength();x>=w?(x=w-1,S=this.doc.getLine(w-1).length):S=Math.min(this.doc.getLine(x).length,S)}return{row:x,column:S}},this.$clipRangeToDocument=function(x){x.start.row<0?(x.start.row=0,x.start.column=0):x.start.column=this.$clipColumnToRow(x.start.row,x.start.column);var S=this.doc.getLength()-1;return x.end.row>S?(x.end.row=S,x.end.column=this.doc.getLine(S).length):x.end.column=this.$clipColumnToRow(x.end.row,x.end.column),x},this.$wrapLimit=80,this.$useWrapMode=!1,this.$wrapLimitRange={min:null,max:null},this.setUseWrapMode=function(x){if(x!=this.$useWrapMode){if(this.$useWrapMode=x,this.$modified=!0,this.$resetRowCache(0),x){var S=this.getLength();this.$wrapData=Array(S),this.$updateWrapData(0,S-1)}this._signal("changeWrapMode")}},this.getUseWrapMode=function(){return this.$useWrapMode},this.setWrapLimitRange=function(x,S){this.$wrapLimitRange.min===x&&this.$wrapLimitRange.max===S||(this.$wrapLimitRange={min:x,max:S},this.$modified=!0,this.$bidiHandler.markAsDirty(),this.$useWrapMode&&this._signal("changeWrapMode"))},this.adjustWrapLimit=function(x,S){var w=this.$wrapLimitRange;w.max<0&&(w={min:S,max:S});var U=this.$constrainWrapLimit(x,w.min,w.max);return U!=this.$wrapLimit&&U>1&&(this.$wrapLimit=U,this.$modified=!0,this.$useWrapMode&&(this.$updateWrapData(0,this.getLength()-1),this.$resetRowCache(0),this._signal("changeWrapLimit")),!0)},this.$constrainWrapLimit=function(x,S,w){return S&&(x=Math.max(S,x)),w&&(x=Math.min(w,x)),x},this.getWrapLimit=function(){return this.$wrapLimit},this.setWrapLimit=function(x){this.setWrapLimitRange(x,x)},this.getWrapLimitRange=function(){return{min:this.$wrapLimitRange.min,max:this.$wrapLimitRange.max}},this.$updateInternalDataOnChange=function(x){var S=this.$useWrapMode,w=x.action,U=x.start,G=x.end,H=U.row,z=G.row,j=z-H,X=null;if(this.$updating=!0,0!=j)if("remove"===w){this[S?"$wrapData":"$rowLengthCache"].splice(H,j);var K=this.$foldData;X=this.getFoldsInRange(x),this.removeFolds(X);var q=0;if(ee=this.getFoldLine(G.row)){ee.addRemoveChars(G.row,G.column,U.column-G.column),ee.shiftRow(-j);var Y=this.getFoldLine(H);Y&&Y!==ee&&(Y.merge(ee),ee=Y),q=K.indexOf(ee)+1}for(;q=G.row&&ee.shiftRow(-j);z=H}else{var Z=Array(j);Z.unshift(H,0);var J=S?this.$wrapData:this.$rowLengthCache;if(J.splice.apply(J,Z),K=this.$foldData,q=0,ee=this.getFoldLine(H)){var Q=ee.range.compareInside(U.row,U.column);0==Q?(ee=ee.split(U.row,U.column))&&(ee.shiftRow(j),ee.addRemoveChars(z,0,G.column-U.column)):-1==Q&&(ee.addRemoveChars(H,0,G.column-U.column),ee.shiftRow(j)),q=K.indexOf(ee)+1}for(;q=H&&ee.shiftRow(j)}}else j=Math.abs(x.start.column-x.end.column),"remove"===w&&(X=this.getFoldsInRange(x),this.removeFolds(X),j=-j),(ee=this.getFoldLine(H))&&ee.addRemoveChars(H,U.column,j);return S&&this.$wrapData.length!=this.doc.getLength()&&console.error("doc.getLength() and $wrapData.length have to be the same!"),this.$updating=!1,S?this.$updateWrapData(H,z):this.$updateRowLengthCache(H,z),X},this.$updateRowLengthCache=function(x,S,w){this.$rowLengthCache[x]=null,this.$rowLengthCache[S]=null},this.$updateWrapData=function(w,U){var G,H,z=this.doc.getAllLines(),j=this.getTabSize(),X=this.$wrapData,K=this.$wrapLimit,q=w;for(U=Math.min(U,z.length-1);q<=U;)(H=this.getFoldLine(q,H))?(G=[],H.walk(function(w,U,H,j){var X;if(null!=w){(X=this.$getDisplayTokens(w,G.length))[0]=x;for(var K=1;K=4352&&x<=4447||x>=4515&&x<=4519||x>=4602&&x<=4607||x>=9001&&x<=9002||x>=11904&&x<=11929||x>=11931&&x<=12019||x>=12032&&x<=12245||x>=12272&&x<=12283||x>=12288&&x<=12350||x>=12353&&x<=12438||x>=12441&&x<=12543||x>=12549&&x<=12589||x>=12593&&x<=12686||x>=12688&&x<=12730||x>=12736&&x<=12771||x>=12784&&x<=12830||x>=12832&&x<=12871||x>=12880&&x<=13054||x>=13056&&x<=19903||x>=19968&&x<=42124||x>=42128&&x<=42182||x>=43360&&x<=43388||x>=44032&&x<=55203||x>=55216&&x<=55238||x>=55243&&x<=55291||x>=63744&&x<=64255||x>=65040&&x<=65049||x>=65072&&x<=65106||x>=65108&&x<=65126||x>=65128&&x<=65131||x>=65281&&x<=65376||x>=65504&&x<=65510)}this.$computeWrapSplits=function(w,U,G){if(0==w.length)return[];var H=[],z=w.length,j=0,X=0,K=this.$wrapAsCode,q=this.$indentedSoftWrap,Y=U<=Math.max(2*G,8)||!1===q?0:Math.floor(U/2);function d(x){for(var S=x-j,U=j;UU-Z;){var J=j+U-Z;if(w[J-1]>=10&&w[J]>=10)d(J);else if(w[J]!=x&&w[J]!=S){for(var Q=Math.max(J-(U-(U>>2)),j-1);J>Q&&w[J]Q&&w[J]Q&&9==w[J];)J--}else for(;J>Q&&w[J]<10;)J--;J>Q?d(++J):(2==w[J=j+U]&&J--,d(J-Z))}else{for(;J!=j-1&&w[J]!=x;J--);if(J>j){d(J);continue}for(J=j+U;J39&&H<48||H>57&&H<64?U.push(9):H>=4352&&n(H)?U.push(1,2):U.push(1)}return U},this.$getStringScreenWidth=function(x,S,w){if(0==S)return[0,0];var U,G;for(null==S&&(S=1/0),w=w||0,G=0;G=4352&&n(U)?w+=2:w+=1,!(w>S));G++);return[w,G]},this.lineWidgets=null,this.getRowLength=function(x){if(this.lineWidgets)var S=this.lineWidgets[x]&&this.lineWidgets[x].rowCount||0;else S=0;return this.$useWrapMode&&this.$wrapData[x]?this.$wrapData[x].length+1+S:1+S},this.getRowLineCount=function(x){return this.$useWrapMode&&this.$wrapData[x]?this.$wrapData[x].length+1:1},this.getRowWrapIndent=function(x){if(this.$useWrapMode){var S=this.screenToDocumentPosition(x,Number.MAX_VALUE),w=this.$wrapData[S.row];return w.length&&w[0]=0){j=K[q],H=this.$docRowCache[q];var Z=x>K[Y-1]}else Z=!Y;for(var J=this.getLength()-1,Q=this.getNextFoldLine(H),ee=Q?Q.start.row:1/0;j<=x&&!(j+(X=this.getRowLength(H))>x||H>=J);)j+=X,++H>ee&&(H=Q.end.row+1,ee=(Q=this.getNextFoldLine(H,Q))?Q.start.row:1/0),Z&&(this.$docRowCache.push(H),this.$screenRowCache.push(j));if(Q&&Q.start.row<=H)U=this.getFoldDisplayLine(Q),H=Q.start.row;else{if(j+X<=x||H>J)return{row:J,column:this.getLine(J).length};U=this.getLine(H),Q=null}var te=0,ne=Math.floor(x-j);if(this.$useWrapMode){var ie=this.$wrapData[H];ie&&(G=ie[ne],ne>0&&ie.length&&(te=ie.indent,z=ie[ne-1]||ie[ie.length-1],U=U.substring(z)))}return void 0!==w&&this.$bidiHandler.isBidiRow(j+ne,H,ne)&&(S=this.$bidiHandler.offsetToCol(w)),z+=this.$getStringScreenWidth(U,S-te)[1],this.$useWrapMode&&z>=G&&(z=G-1),Q?Q.idxToPosition(z):{row:H,column:z}},this.documentToScreenPosition=function(x,S){if(void 0===S)var w=this.$clipPositionToDocument(x.row,x.column);else w=this.$clipPositionToDocument(x,S);x=w.row,S=w.column;var U,G=0,H=null;(U=this.getFoldAt(x,S,1))&&(x=U.start.row,S=U.start.column);var z,j=0,X=this.$docRowCache,K=this.$getRowCacheIndex(X,x),q=X.length;if(q&&K>=0){j=X[K],G=this.$screenRowCache[K];var Y=x>X[q-1]}else Y=!q;for(var Z=this.getNextFoldLine(j),J=Z?Z.start.row:1/0;j=J){if((z=Z.end.row+1)>x)break;J=(Z=this.getNextFoldLine(z,Z))?Z.start.row:1/0}else z=j+1;G+=this.getRowLength(j),j=z,Y&&(this.$docRowCache.push(j),this.$screenRowCache.push(G))}var Q="";Z&&j>=J?(Q=this.getFoldDisplayLine(Z,x,S),H=Z.start.row):(Q=this.getLine(x).substring(0,S),H=x);var ee=0;if(this.$useWrapMode){var te=this.$wrapData[H];if(te){for(var ne=0;Q.length>=te[ne];)G++,ne++;Q=Q.substring(te[ne-1]||0,Q.length),ee=ne>0?te.indent:0}}return{row:G,column:ee+this.$getStringScreenWidth(Q)[0]}},this.documentToScreenColumn=function(x,S){return this.documentToScreenPosition(x,S).column},this.documentToScreenRow=function(x,S){return this.documentToScreenPosition(x,S).row},this.getScreenLength=function(){var x=0,S=null;if(this.$useWrapMode)for(var w=this.$wrapData.length,U=0,G=(j=0,(S=this.$foldData[j++])?S.start.row:1/0);UG&&(U=S.end.row+1,G=(S=this.$foldData[j++])?S.start.row:1/0)}else{x=this.getLength();for(var z=this.$foldData,j=0;jw);H++);return[U,H]})},this.destroy=function(){this.bgTokenizer&&(this.bgTokenizer.setDocument(null),this.bgTokenizer=null),this.$stopWorker()},this.isFullWidth=n}.call(m.prototype),x("./edit_session/folding").Folding.call(m.prototype),x("./edit_session/bracket_match").BracketMatch.call(m.prototype),z.defineOptions(m.prototype,"session",{wrap:{set:function(x){if(x&&"off"!=x?"free"==x?x=!0:"printMargin"==x?x=-1:"string"==typeof x&&(x=parseInt(x,10)||!1):x=!1,this.$wrap!=x)if(this.$wrap=x,x){var S="number"==typeof x?x:null;this.setWrapLimitRange(S,S),this.setUseWrapMode(!0)}else this.setUseWrapMode(!1)},get:function(){return this.getUseWrapMode()?-1==this.$wrap?"printMargin":this.getWrapLimitRange().min?this.$wrap:"free":"off"},handlesSet:!0},wrapMethod:{set:function(x){(x="auto"==x?"text"!=this.$mode.type:"text"!=x)!=this.$wrapAsCode&&(this.$wrapAsCode=x,this.$useWrapMode&&(this.$useWrapMode=!1,this.setUseWrapMode(!0)))},initialValue:"auto"},indentedSoftWrap:{set:function(){this.$useWrapMode&&(this.$useWrapMode=!1,this.setUseWrapMode(!0))},initialValue:!0},firstLineNumber:{set:function(){this._signal("changeBreakpoint")},initialValue:1},useWorker:{set:function(x){this.$useWorker=x,this.$stopWorker(),x&&this.$startWorker()},initialValue:!0},useSoftTabs:{initialValue:!0},tabSize:{set:function(x){(x=parseInt(x))>0&&this.$tabSize!==x&&(this.$modified=!0,this.$rowLengthCache=[],this.$tabSize=x,this._signal("changeTabSize"))},initialValue:4,handlesSet:!0},navigateWithinSoftTabs:{initialValue:!1},foldStyle:{set:function(x){this.setFoldStyle(x)},handlesSet:!0},overwrite:{set:function(x){this._signal("changeOverwrite")},initialValue:!1},newLineMode:{set:function(x){this.doc.setNewLineMode(x)},get:function(){return this.doc.getNewLineMode()},handlesSet:!0},mode:{set:function(x){this.setMode(x)},get:function(){return this.$modeId},handlesSet:!0}}),S.EditSession=m})),ace.define("ace/search",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],(function(x,S,w){"use strict";var U=x("./lib/lang"),G=x("./lib/oop"),H=x("./range").Range,s=function(){this.$options={}};(function(){this.set=function(x){return G.mixin(this.$options,x),this},this.getOptions=function(){return U.copyObject(this.$options)},this.setOptions=function(x){this.$options=x},this.find=function(x){var S=this.$options,w=this.$matchIterator(x,S);if(!w)return!1;var U=null;return w.forEach((function(x,w,G,z){return U=new H(x,w,G,z),!(w==z&&S.start&&S.start.start&&0!=S.skipCurrent&&U.isEqual(S.start)&&(U=null,1))})),U},this.findAll=function(x){var S=this.$options;if(!S.needle)return[];this.$assembleRegExp(S);var w=S.range,G=w?x.getLines(w.start.row,w.end.row):x.doc.getAllLines(),z=[],j=S.re;if(S.$isMultiLine){var X,K=j.length,q=G.length-K;e:for(var Y=j.offset||0;Y<=q;Y++){for(var Z=0;Zee||(z.push(X=new H(Y,ee,Y+K-1,te)),K>2&&(Y=Y+K-2))}}else for(var ne=0;neae&&z[Z].end.row==w.end.row;)Z--;for(z=z.slice(ne,Z+1),ne=0,Z=z.length;ne=j;w--)if(h(w,Number.MAX_VALUE,x))return;if(0!=S.wrap)for(w=X,j=z.row;w>=j;w--)if(h(w,Number.MAX_VALUE,x))return}};else l=function(x){var w=z.row;if(!h(w,z.column,x)){for(w+=1;w<=X;w++)if(h(w,0,x))return;if(0!=S.wrap)for(w=j,X=z.row;w<=X;w++)if(h(w,0,x))return}};if(S.$isMultiLine)var K=w.length,h=function(S,G,H){var z=U?S-K+1:S;if(!(z<0)){var j=x.getLine(z),X=j.search(w[0]);if(!(!U&&XG))return!!H(z,X,z+K-1,Y)||void 0}}};else h=U?function(S,U,G){var H,z=x.getLine(S),j=[],X=0;for(w.lastIndex=0;H=w.exec(z);){var K=H[0].length;if(X=H.index,!K){if(X>=z.length)break;w.lastIndex=X+=1}if(H.index+K>U)break;j.push(H.index,K)}for(var q=j.length-1;q>=0;q-=2){var Y=j[q-1];if(G(S,Y,S,Y+(K=j[q])))return!0}}:function(S,U,G){var H,z,j=x.getLine(S);for(w.lastIndex=U;z=w.exec(j);){var X=z[0].length;if(G(S,H=z.index,S,H+X))return!0;if(!X&&(w.lastIndex=H+=1,H>=j.length))return!1}};return{forEach:l}}}).call(s.prototype),S.Search=s})),ace.define("ace/keyboard/hash_handler",["require","exports","module","ace/lib/keys","ace/lib/useragent"],(function(x,S,w){"use strict";var U=x("../lib/keys"),G=x("../lib/useragent"),H=U.KEY_MODS;function s(x,S){this.platform=S||(G.isMac?"mac":"win"),this.commands={},this.commandKeyBinding={},this.addCommands(x),this.$singleCommand=!0}function a(x,S){s.call(this,x,S),this.$singleCommand=!1}a.prototype=s.prototype,function(){function e(x){return"object"==typeof x&&x.bindKey&&x.bindKey.position||(x.isDefault?-100:0)}this.addCommand=function(x){this.commands[x.name]&&this.removeCommand(x),this.commands[x.name]=x,x.bindKey&&this._buildKeyHash(x)},this.removeCommand=function(x,S){var w=x&&("string"==typeof x?x:x.name);x=this.commands[w],S||delete this.commands[w];var U=this.commandKeyBinding;for(var G in U){var H=U[G];if(H==x)delete U[G];else if(Array.isArray(H)){var z=H.indexOf(x);-1!=z&&(H.splice(z,1),1==H.length&&(U[G]=H[0]))}}},this.bindKey=function(x,S,w){if("object"==typeof x&&x&&(null==w&&(w=x.position),x=x[this.platform]),x)return"function"==typeof S?this.addCommand({exec:S,bindKey:x,name:S.name||x}):void x.split("|").forEach((function(x){var U="";if(-1!=x.indexOf(" ")){var G=x.split(/\s+/);x=G.pop(),G.forEach((function(x){var S=this.parseKeys(x),w=H[S.hashId]+S.key;U+=(U?" ":"")+w,this._addCommandToBinding(U,"chainKeys")}),this),U+=" "}var z=this.parseKeys(x),j=H[z.hashId]+z.key;this._addCommandToBinding(U+j,S,w)}),this)},this._addCommandToBinding=function(x,S,w){var U,G=this.commandKeyBinding;if(S)if(!G[x]||this.$singleCommand)G[x]=S;else{Array.isArray(G[x])?-1!=(U=G[x].indexOf(S))&&G[x].splice(U,1):G[x]=[G[x]],"number"!=typeof w&&(w=e(S));var H=G[x];for(U=0;Uw);U++);H.splice(U,0,S)}else delete G[x]},this.addCommands=function(x){x&&Object.keys(x).forEach((function(S){var w=x[S];if(w){if("string"==typeof w)return this.bindKey(w,S);"function"==typeof w&&(w={exec:w}),"object"==typeof w&&(w.name||(w.name=S),this.addCommand(w))}}),this)},this.removeCommands=function(x){Object.keys(x).forEach((function(S){this.removeCommand(x[S])}),this)},this.bindKeys=function(x){Object.keys(x).forEach((function(S){this.bindKey(S,x[S])}),this)},this._buildKeyHash=function(x){this.bindKey(x.bindKey,x)},this.parseKeys=function(x){var S=x.toLowerCase().split(/[\-\+]([\-\+])?/).filter((function(x){return x})),w=S.pop(),G=U[w];if(U.FUNCTION_KEYS[G])w=U.FUNCTION_KEYS[G].toLowerCase();else{if(!S.length)return{key:w,hashId:-1};if(1==S.length&&"shift"==S[0])return{key:w.toUpperCase(),hashId:-1}}for(var H=0,z=S.length;z--;){var j=U.KEY_MODS[S[z]];if(null==j)return"undefined"!=typeof console&&console.error("invalid modifier "+S[z]+" in "+x),!1;H|=j}return{key:w,hashId:H}},this.findKeyCommand=function(x,S){var w=H[x]+S;return this.commandKeyBinding[w]},this.handleKeyboard=function(x,S,w,U){if(!(U<0)){var G=H[S]+w,z=this.commandKeyBinding[G];return x.$keyChain&&(x.$keyChain+=" "+G,z=this.commandKeyBinding[x.$keyChain]||z),!z||"chainKeys"!=z&&"chainKeys"!=z[z.length-1]?(x.$keyChain&&(S&&4!=S||1!=w.length?(-1==S||U>0)&&(x.$keyChain=""):x.$keyChain=x.$keyChain.slice(0,-G.length-1)),{command:z}):(x.$keyChain=x.$keyChain||G,{command:"null"})}},this.getStatusText=function(x,S){return S.$keyChain||""}}.call(s.prototype),S.HashHandler=s,S.MultiHashHandler=a})),ace.define("ace/commands/command_manager",["require","exports","module","ace/lib/oop","ace/keyboard/hash_handler","ace/lib/event_emitter"],(function(x,S,w){"use strict";var U=x("../lib/oop"),G=x("../keyboard/hash_handler").MultiHashHandler,H=x("../lib/event_emitter").EventEmitter,s=function(x,S){G.call(this,S,x),this.byName=this.commands,this.setDefaultHandler("exec",(function(x){return x.command.exec(x.editor,x.args||{})}))};U.inherits(s,G),function(){U.implement(this,H),this.exec=function(x,S,w){if(Array.isArray(x)){for(var U=x.length;U--;)if(this.exec(x[U],S,w))return!0;return!1}if("string"==typeof x&&(x=this.commands[x]),!x)return!1;if(S&&S.$readOnly&&!x.readOnly)return!1;if(0!=this.$checkCommandState&&x.isAvailable&&!x.isAvailable(S))return!1;var G={editor:S,command:x,args:w};return G.returnValue=this._emit("exec",G),this._signal("afterExec",G),!1!==G.returnValue},this.toggleRecording=function(x){if(!this.$inReplay)return x&&x._emit("changeStatus"),this.recording?(this.macro.pop(),this.removeEventListener("exec",this.$addCommandToMacro),this.macro.length||(this.macro=this.oldMacro),this.recording=!1):(this.$addCommandToMacro||(this.$addCommandToMacro=function(x){this.macro.push([x.command,x.args])}.bind(this)),this.oldMacro=this.macro,this.macro=[],this.on("exec",this.$addCommandToMacro),this.recording=!0)},this.replay=function(x){if(!this.$inReplay&&this.macro){if(this.recording)return this.toggleRecording(x);try{this.$inReplay=!0,this.macro.forEach((function(S){"string"==typeof S?this.exec(S,x):this.exec(S[0],x,S[1])}),this)}finally{this.$inReplay=!1}}},this.trimMacro=function(x){return x.map((function(x){return"string"!=typeof x[0]&&(x[0]=x[0].name),x[1]||(x=x[0]),x}))}}.call(s.prototype),S.CommandManager=s})),ace.define("ace/commands/default_commands",["require","exports","module","ace/lib/lang","ace/config","ace/range"],(function(x,S,w){"use strict";var U=x("../lib/lang"),G=x("../config"),H=x("../range").Range;function s(x,S){return{win:x,mac:S}}S.commands=[{name:"showSettingsMenu",bindKey:s("Ctrl-,","Command-,"),exec:function(x){G.loadModule("ace/ext/settings_menu",(function(S){S.init(x),x.showSettingsMenu()}))},readOnly:!0},{name:"goToNextError",bindKey:s("Alt-E","F4"),exec:function(x){G.loadModule("./ext/error_marker",(function(S){S.showErrorMarker(x,1)}))},scrollIntoView:"animate",readOnly:!0},{name:"goToPreviousError",bindKey:s("Alt-Shift-E","Shift-F4"),exec:function(x){G.loadModule("./ext/error_marker",(function(S){S.showErrorMarker(x,-1)}))},scrollIntoView:"animate",readOnly:!0},{name:"selectall",description:"Select all",bindKey:s("Ctrl-A","Command-A"),exec:function(x){x.selectAll()},readOnly:!0},{name:"centerselection",description:"Center selection",bindKey:s(null,"Ctrl-L"),exec:function(x){x.centerSelection()},readOnly:!0},{name:"gotoline",description:"Go to line...",bindKey:s("Ctrl-L","Command-L"),exec:function(x,S){"number"!=typeof S||isNaN(S)||x.gotoLine(S),x.prompt({$type:"gotoLine"})},readOnly:!0},{name:"fold",bindKey:s("Alt-L|Ctrl-F1","Command-Alt-L|Command-F1"),exec:function(x){x.session.toggleFold(!1)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"unfold",bindKey:s("Alt-Shift-L|Ctrl-Shift-F1","Command-Alt-Shift-L|Command-Shift-F1"),exec:function(x){x.session.toggleFold(!0)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"toggleFoldWidget",bindKey:s("F2","F2"),exec:function(x){x.session.toggleFoldWidget()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"toggleParentFoldWidget",bindKey:s("Alt-F2","Alt-F2"),exec:function(x){x.session.toggleFoldWidget(!0)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"foldall",description:"Fold all",bindKey:s(null,"Ctrl-Command-Option-0"),exec:function(x){x.session.foldAll()},scrollIntoView:"center",readOnly:!0},{name:"foldOther",description:"Fold other",bindKey:s("Alt-0","Command-Option-0"),exec:function(x){x.session.foldAll(),x.session.unfold(x.selection.getAllRanges())},scrollIntoView:"center",readOnly:!0},{name:"unfoldall",description:"Unfold all",bindKey:s("Alt-Shift-0","Command-Option-Shift-0"),exec:function(x){x.session.unfold()},scrollIntoView:"center",readOnly:!0},{name:"findnext",description:"Find next",bindKey:s("Ctrl-K","Command-G"),exec:function(x){x.findNext()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"findprevious",description:"Find previous",bindKey:s("Ctrl-Shift-K","Command-Shift-G"),exec:function(x){x.findPrevious()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"selectOrFindNext",description:"Select or find next",bindKey:s("Alt-K","Ctrl-G"),exec:function(x){x.selection.isEmpty()?x.selection.selectWord():x.findNext()},readOnly:!0},{name:"selectOrFindPrevious",description:"Select or find previous",bindKey:s("Alt-Shift-K","Ctrl-Shift-G"),exec:function(x){x.selection.isEmpty()?x.selection.selectWord():x.findPrevious()},readOnly:!0},{name:"find",description:"Find",bindKey:s("Ctrl-F","Command-F"),exec:function(x){G.loadModule("ace/ext/searchbox",(function(S){S.Search(x)}))},readOnly:!0},{name:"overwrite",description:"Overwrite",bindKey:"Insert",exec:function(x){x.toggleOverwrite()},readOnly:!0},{name:"selecttostart",description:"Select to start",bindKey:s("Ctrl-Shift-Home","Command-Shift-Home|Command-Shift-Up"),exec:function(x){x.getSelection().selectFileStart()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"gotostart",description:"Go to start",bindKey:s("Ctrl-Home","Command-Home|Command-Up"),exec:function(x){x.navigateFileStart()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"selectup",description:"Select up",bindKey:s("Shift-Up","Shift-Up|Ctrl-Shift-P"),exec:function(x){x.getSelection().selectUp()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"golineup",description:"Go line up",bindKey:s("Up","Up|Ctrl-P"),exec:function(x,S){x.navigateUp(S.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttoend",description:"Select to end",bindKey:s("Ctrl-Shift-End","Command-Shift-End|Command-Shift-Down"),exec:function(x){x.getSelection().selectFileEnd()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"gotoend",description:"Go to end",bindKey:s("Ctrl-End","Command-End|Command-Down"),exec:function(x){x.navigateFileEnd()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"selectdown",description:"Select down",bindKey:s("Shift-Down","Shift-Down|Ctrl-Shift-N"),exec:function(x){x.getSelection().selectDown()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"golinedown",description:"Go line down",bindKey:s("Down","Down|Ctrl-N"),exec:function(x,S){x.navigateDown(S.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectwordleft",description:"Select word left",bindKey:s("Ctrl-Shift-Left","Option-Shift-Left"),exec:function(x){x.getSelection().selectWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotowordleft",description:"Go to word left",bindKey:s("Ctrl-Left","Option-Left"),exec:function(x){x.navigateWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttolinestart",description:"Select to line start",bindKey:s("Alt-Shift-Left","Command-Shift-Left|Ctrl-Shift-A"),exec:function(x){x.getSelection().selectLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotolinestart",description:"Go to line start",bindKey:s("Alt-Left|Home","Command-Left|Home|Ctrl-A"),exec:function(x){x.navigateLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectleft",description:"Select left",bindKey:s("Shift-Left","Shift-Left|Ctrl-Shift-B"),exec:function(x){x.getSelection().selectLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotoleft",description:"Go to left",bindKey:s("Left","Left|Ctrl-B"),exec:function(x,S){x.navigateLeft(S.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectwordright",description:"Select word right",bindKey:s("Ctrl-Shift-Right","Option-Shift-Right"),exec:function(x){x.getSelection().selectWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotowordright",description:"Go to word right",bindKey:s("Ctrl-Right","Option-Right"),exec:function(x){x.navigateWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttolineend",description:"Select to line end",bindKey:s("Alt-Shift-Right","Command-Shift-Right|Shift-End|Ctrl-Shift-E"),exec:function(x){x.getSelection().selectLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotolineend",description:"Go to line end",bindKey:s("Alt-Right|End","Command-Right|End|Ctrl-E"),exec:function(x){x.navigateLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectright",description:"Select right",bindKey:s("Shift-Right","Shift-Right"),exec:function(x){x.getSelection().selectRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotoright",description:"Go to right",bindKey:s("Right","Right|Ctrl-F"),exec:function(x,S){x.navigateRight(S.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectpagedown",description:"Select page down",bindKey:"Shift-PageDown",exec:function(x){x.selectPageDown()},readOnly:!0},{name:"pagedown",description:"Page down",bindKey:s(null,"Option-PageDown"),exec:function(x){x.scrollPageDown()},readOnly:!0},{name:"gotopagedown",description:"Go to page down",bindKey:s("PageDown","PageDown|Ctrl-V"),exec:function(x){x.gotoPageDown()},readOnly:!0},{name:"selectpageup",description:"Select page up",bindKey:"Shift-PageUp",exec:function(x){x.selectPageUp()},readOnly:!0},{name:"pageup",description:"Page up",bindKey:s(null,"Option-PageUp"),exec:function(x){x.scrollPageUp()},readOnly:!0},{name:"gotopageup",description:"Go to page up",bindKey:"PageUp",exec:function(x){x.gotoPageUp()},readOnly:!0},{name:"scrollup",description:"Scroll up",bindKey:s("Ctrl-Up",null),exec:function(x){x.renderer.scrollBy(0,-2*x.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"scrolldown",description:"Scroll down",bindKey:s("Ctrl-Down",null),exec:function(x){x.renderer.scrollBy(0,2*x.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"selectlinestart",description:"Select line start",bindKey:"Shift-Home",exec:function(x){x.getSelection().selectLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectlineend",description:"Select line end",bindKey:"Shift-End",exec:function(x){x.getSelection().selectLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"togglerecording",description:"Toggle recording",bindKey:s("Ctrl-Alt-E","Command-Option-E"),exec:function(x){x.commands.toggleRecording(x)},readOnly:!0},{name:"replaymacro",description:"Replay macro",bindKey:s("Ctrl-Shift-E","Command-Shift-E"),exec:function(x){x.commands.replay(x)},readOnly:!0},{name:"jumptomatching",description:"Jump to matching",bindKey:s("Ctrl-\\|Ctrl-P","Command-\\"),exec:function(x){x.jumpToMatching()},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"selecttomatching",description:"Select to matching",bindKey:s("Ctrl-Shift-\\|Ctrl-Shift-P","Command-Shift-\\"),exec:function(x){x.jumpToMatching(!0)},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"expandToMatching",description:"Expand to matching",bindKey:s("Ctrl-Shift-M","Ctrl-Shift-M"),exec:function(x){x.jumpToMatching(!0,!0)},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"passKeysToBrowser",description:"Pass keys to browser",bindKey:s(null,null),exec:function(){},passEvent:!0,readOnly:!0},{name:"copy",description:"Copy",exec:function(x){},readOnly:!0},{name:"cut",description:"Cut",exec:function(x){var S=x.$copyWithEmptySelection&&x.selection.isEmpty()?x.selection.getLineRange():x.selection.getRange();x._emit("cut",S),S.isEmpty()||x.session.remove(S),x.clearSelection()},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"paste",description:"Paste",exec:function(x,S){x.$handlePaste(S)},scrollIntoView:"cursor"},{name:"removeline",description:"Remove line",bindKey:s("Ctrl-D","Command-D"),exec:function(x){x.removeLines()},scrollIntoView:"cursor",multiSelectAction:"forEachLine"},{name:"duplicateSelection",description:"Duplicate selection",bindKey:s("Ctrl-Shift-D","Command-Shift-D"),exec:function(x){x.duplicateSelection()},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"sortlines",description:"Sort lines",bindKey:s("Ctrl-Alt-S","Command-Alt-S"),exec:function(x){x.sortLines()},scrollIntoView:"selection",multiSelectAction:"forEachLine"},{name:"togglecomment",description:"Toggle comment",bindKey:s("Ctrl-/","Command-/"),exec:function(x){x.toggleCommentLines()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"toggleBlockComment",description:"Toggle block comment",bindKey:s("Ctrl-Shift-/","Command-Shift-/"),exec:function(x){x.toggleBlockComment()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"modifyNumberUp",description:"Modify number up",bindKey:s("Ctrl-Shift-Up","Alt-Shift-Up"),exec:function(x){x.modifyNumber(1)},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"modifyNumberDown",description:"Modify number down",bindKey:s("Ctrl-Shift-Down","Alt-Shift-Down"),exec:function(x){x.modifyNumber(-1)},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"replace",description:"Replace",bindKey:s("Ctrl-H","Command-Option-F"),exec:function(x){G.loadModule("ace/ext/searchbox",(function(S){S.Search(x,!0)}))}},{name:"undo",description:"Undo",bindKey:s("Ctrl-Z","Command-Z"),exec:function(x){x.undo()}},{name:"redo",description:"Redo",bindKey:s("Ctrl-Shift-Z|Ctrl-Y","Command-Shift-Z|Command-Y"),exec:function(x){x.redo()}},{name:"copylinesup",description:"Copy lines up",bindKey:s("Alt-Shift-Up","Command-Option-Up"),exec:function(x){x.copyLinesUp()},scrollIntoView:"cursor"},{name:"movelinesup",description:"Move lines up",bindKey:s("Alt-Up","Option-Up"),exec:function(x){x.moveLinesUp()},scrollIntoView:"cursor"},{name:"copylinesdown",description:"Copy lines down",bindKey:s("Alt-Shift-Down","Command-Option-Down"),exec:function(x){x.copyLinesDown()},scrollIntoView:"cursor"},{name:"movelinesdown",description:"Move lines down",bindKey:s("Alt-Down","Option-Down"),exec:function(x){x.moveLinesDown()},scrollIntoView:"cursor"},{name:"del",description:"Delete",bindKey:s("Delete","Delete|Ctrl-D|Shift-Delete"),exec:function(x){x.remove("right")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"backspace",description:"Backspace",bindKey:s("Shift-Backspace|Backspace","Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H"),exec:function(x){x.remove("left")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"cut_or_delete",description:"Cut or delete",bindKey:s("Shift-Delete",null),exec:function(x){if(!x.selection.isEmpty())return!1;x.remove("left")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolinestart",description:"Remove to line start",bindKey:s("Alt-Backspace","Command-Backspace"),exec:function(x){x.removeToLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolineend",description:"Remove to line end",bindKey:s("Alt-Delete","Ctrl-K|Command-Delete"),exec:function(x){x.removeToLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolinestarthard",description:"Remove to line start hard",bindKey:s("Ctrl-Shift-Backspace",null),exec:function(x){var S=x.selection.getRange();S.start.column=0,x.session.remove(S)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolineendhard",description:"Remove to line end hard",bindKey:s("Ctrl-Shift-Delete",null),exec:function(x){var S=x.selection.getRange();S.end.column=Number.MAX_VALUE,x.session.remove(S)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removewordleft",description:"Remove word left",bindKey:s("Ctrl-Backspace","Alt-Backspace|Ctrl-Alt-Backspace"),exec:function(x){x.removeWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removewordright",description:"Remove word right",bindKey:s("Ctrl-Delete","Alt-Delete"),exec:function(x){x.removeWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"outdent",description:"Outdent",bindKey:s("Shift-Tab","Shift-Tab"),exec:function(x){x.blockOutdent()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"indent",description:"Indent",bindKey:s("Tab","Tab"),exec:function(x){x.indent()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"blockoutdent",description:"Block outdent",bindKey:s("Ctrl-[","Ctrl-["),exec:function(x){x.blockOutdent()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"blockindent",description:"Block indent",bindKey:s("Ctrl-]","Ctrl-]"),exec:function(x){x.blockIndent()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"insertstring",description:"Insert string",exec:function(x,S){x.insert(S)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"inserttext",description:"Insert text",exec:function(x,S){x.insert(U.stringRepeat(S.text||"",S.times||1))},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"splitline",description:"Split line",bindKey:s(null,"Ctrl-O"),exec:function(x){x.splitLine()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"transposeletters",description:"Transpose letters",bindKey:s("Alt-Shift-X","Ctrl-T"),exec:function(x){x.transposeLetters()},multiSelectAction:function(x){x.transposeSelections(1)},scrollIntoView:"cursor"},{name:"touppercase",description:"To uppercase",bindKey:s("Ctrl-U","Ctrl-U"),exec:function(x){x.toUpperCase()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"tolowercase",description:"To lowercase",bindKey:s("Ctrl-Shift-U","Ctrl-Shift-U"),exec:function(x){x.toLowerCase()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"expandtoline",description:"Expand to line",bindKey:s("Ctrl-Shift-L","Command-Shift-L"),exec:function(x){var S=x.selection.getRange();S.start.column=S.end.column=0,S.end.row++,x.selection.setRange(S,!1)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"joinlines",description:"Join lines",bindKey:s(null,null),exec:function(x){for(var S=x.selection.isBackwards(),w=S?x.selection.getSelectionLead():x.selection.getSelectionAnchor(),G=S?x.selection.getSelectionAnchor():x.selection.getSelectionLead(),z=x.session.doc.getLine(w.row).length,j=x.session.doc.getTextRange(x.selection.getRange()).replace(/\n\s*/," ").length,X=x.session.doc.getLine(w.row),K=w.row+1;K<=G.row+1;K++){var q=U.stringTrimLeft(U.stringTrimRight(x.session.doc.getLine(K)));0!==q.length&&(q=" "+q),X+=q}G.row+10?(x.selection.moveCursorTo(w.row,w.column),x.selection.selectTo(w.row,w.column+j)):(z=x.session.doc.getLine(w.row).length>z?z+1:z,x.selection.moveCursorTo(w.row,z))},multiSelectAction:"forEach",readOnly:!0},{name:"invertSelection",description:"Invert selection",bindKey:s(null,null),exec:function(x){var S=x.session.doc.getLength()-1,w=x.session.doc.getLine(S).length,U=x.selection.rangeList.ranges,G=[];U.length<1&&(U=[x.selection.getRange()]);for(var z=0;z=G.lastRow||U.end.row<=G.firstRow)&&this.renderer.scrollSelectionIntoView(this.selection.anchor,this.selection.lead)}"animate"==w&&this.renderer.animateScrolling(this.curOp.scrollTop)}var H=this.selection.toJSON();this.curOp.selectionAfter=H,this.$lastSel=this.selection.toJSON(),this.session.getUndoManager().addSelection(H),this.prevOp=this.curOp,this.curOp=null}},this.$mergeableCommands=["backspace","del","insertstring"],this.$historyTracker=function(x){if(this.$mergeUndoDeltas){var S=this.prevOp,w=this.$mergeableCommands,U=S.command&&x.command.name==S.command.name;if("insertstring"==x.command.name){var G=x.args;void 0===this.mergeNextCommand&&(this.mergeNextCommand=!0),U=U&&this.mergeNextCommand&&(!/\s/.test(G)||/\s/.test(S.args)),this.mergeNextCommand=!0}else U=U&&-1!==w.indexOf(x.command.name);"always"!=this.$mergeUndoDeltas&&Date.now()-this.sequenceStartTime>2e3&&(U=!1),U?this.session.mergeUndoDeltas=!0:-1!==w.indexOf(x.command.name)&&(this.sequenceStartTime=Date.now())}},this.setKeyboardHandler=function(x,S){if(x&&"string"==typeof x&&"ace"!=x){this.$keybindingId=x;var w=this;ne.loadModule(["keybinding",x],(function(U){w.$keybindingId==x&&w.keyBinding.setKeyboardHandler(U&&U.handler),S&&S()}))}else this.$keybindingId=null,this.keyBinding.setKeyboardHandler(x),S&&S()},this.getKeyboardHandler=function(){return this.keyBinding.getKeyboardHandler()},this.setSession=function(x){if(this.session!=x){this.curOp&&this.endOperation(),this.curOp={};var S=this.session;if(S){this.session.off("change",this.$onDocumentChange),this.session.off("changeMode",this.$onChangeMode),this.session.off("tokenizerUpdate",this.$onTokenizerUpdate),this.session.off("changeTabSize",this.$onChangeTabSize),this.session.off("changeWrapLimit",this.$onChangeWrapLimit),this.session.off("changeWrapMode",this.$onChangeWrapMode),this.session.off("changeFold",this.$onChangeFold),this.session.off("changeFrontMarker",this.$onChangeFrontMarker),this.session.off("changeBackMarker",this.$onChangeBackMarker),this.session.off("changeBreakpoint",this.$onChangeBreakpoint),this.session.off("changeAnnotation",this.$onChangeAnnotation),this.session.off("changeOverwrite",this.$onCursorChange),this.session.off("changeScrollTop",this.$onScrollTopChange),this.session.off("changeScrollLeft",this.$onScrollLeftChange);var w=this.session.getSelection();w.off("changeCursor",this.$onCursorChange),w.off("changeSelection",this.$onSelectionChange)}this.session=x,x?(this.$onDocumentChange=this.onDocumentChange.bind(this),x.on("change",this.$onDocumentChange),this.renderer.setSession(x),this.$onChangeMode=this.onChangeMode.bind(this),x.on("changeMode",this.$onChangeMode),this.$onTokenizerUpdate=this.onTokenizerUpdate.bind(this),x.on("tokenizerUpdate",this.$onTokenizerUpdate),this.$onChangeTabSize=this.renderer.onChangeTabSize.bind(this.renderer),x.on("changeTabSize",this.$onChangeTabSize),this.$onChangeWrapLimit=this.onChangeWrapLimit.bind(this),x.on("changeWrapLimit",this.$onChangeWrapLimit),this.$onChangeWrapMode=this.onChangeWrapMode.bind(this),x.on("changeWrapMode",this.$onChangeWrapMode),this.$onChangeFold=this.onChangeFold.bind(this),x.on("changeFold",this.$onChangeFold),this.$onChangeFrontMarker=this.onChangeFrontMarker.bind(this),this.session.on("changeFrontMarker",this.$onChangeFrontMarker),this.$onChangeBackMarker=this.onChangeBackMarker.bind(this),this.session.on("changeBackMarker",this.$onChangeBackMarker),this.$onChangeBreakpoint=this.onChangeBreakpoint.bind(this),this.session.on("changeBreakpoint",this.$onChangeBreakpoint),this.$onChangeAnnotation=this.onChangeAnnotation.bind(this),this.session.on("changeAnnotation",this.$onChangeAnnotation),this.$onCursorChange=this.onCursorChange.bind(this),this.session.on("changeOverwrite",this.$onCursorChange),this.$onScrollTopChange=this.onScrollTopChange.bind(this),this.session.on("changeScrollTop",this.$onScrollTopChange),this.$onScrollLeftChange=this.onScrollLeftChange.bind(this),this.session.on("changeScrollLeft",this.$onScrollLeftChange),this.selection=x.getSelection(),this.selection.on("changeCursor",this.$onCursorChange),this.$onSelectionChange=this.onSelectionChange.bind(this),this.selection.on("changeSelection",this.$onSelectionChange),this.onChangeMode(),this.onCursorChange(),this.onScrollTopChange(),this.onScrollLeftChange(),this.onSelectionChange(),this.onChangeFrontMarker(),this.onChangeBackMarker(),this.onChangeBreakpoint(),this.onChangeAnnotation(),this.session.getUseWrapMode()&&this.renderer.adjustWrapLimit(),this.renderer.updateFull()):(this.selection=null,this.renderer.setSession(x)),this._signal("changeSession",{session:x,oldSession:S}),this.curOp=null,S&&S._signal("changeEditor",{oldEditor:this}),x&&x._signal("changeEditor",{editor:this}),x&&x.bgTokenizer&&x.bgTokenizer.scheduleStart()}},this.getSession=function(){return this.session},this.setValue=function(x,S){return this.session.doc.setValue(x),S?1==S?this.navigateFileEnd():-1==S&&this.navigateFileStart():this.selectAll(),x},this.getValue=function(){return this.session.getValue()},this.getSelection=function(){return this.selection},this.resize=function(x){this.renderer.onResize(x)},this.setTheme=function(x,S){this.renderer.setTheme(x,S)},this.getTheme=function(){return this.renderer.getTheme()},this.setStyle=function(x){this.renderer.setStyle(x)},this.unsetStyle=function(x){this.renderer.unsetStyle(x)},this.getFontSize=function(){return this.getOption("fontSize")||G.computedStyle(this.container).fontSize},this.setFontSize=function(x){this.setOption("fontSize",x)},this.$highlightBrackets=function(){if(this.session.$bracketHighlight&&(this.session.removeMarker(this.session.$bracketHighlight),this.session.$bracketHighlight=null),!this.$highlightPending){var x=this;this.$highlightPending=!0,setTimeout((function(){x.$highlightPending=!1;var S=x.session;if(S&&S.bgTokenizer){var w=S.findMatchingBracket(x.getCursorPosition());if(w)var U=new J(w.row,w.column,w.row,w.column+1);else S.$mode.getMatching&&(U=S.$mode.getMatching(x.session));U&&(S.$bracketHighlight=S.addMarker(U,"ace_bracket","text"))}}),50)}},this.$highlightTags=function(){if(!this.$highlightTagPending){var x=this;this.$highlightTagPending=!0,setTimeout((function(){x.$highlightTagPending=!1;var S=x.session;if(S&&S.bgTokenizer){var w=x.getCursorPosition(),U=new ie(x.session,w.row,w.column),G=U.getCurrentToken();if(!G||!/\b(?:tag-open|tag-name)/.test(G.type))return S.removeMarker(S.$tagHighlight),void(S.$tagHighlight=null);if(-1==G.type.indexOf("tag-open")||(G=U.stepForward())){var H=G.value,z=0,j=U.stepBackward();if("<"==j.value)do{j=G,(G=U.stepForward())&&G.value===H&&-1!==G.type.indexOf("tag-name")&&("<"===j.value?z++:"=0);else{do{G=j,j=U.stepBackward(),G&&G.value===H&&-1!==G.type.indexOf("tag-name")&&("<"===j.value?z++:"1||(x=!1)),S.$highlightLineMarker&&!x)S.removeMarker(S.$highlightLineMarker.id),S.$highlightLineMarker=null;else if(!S.$highlightLineMarker&&x){var w=new J(x.row,x.column,x.row,1/0);w.id=S.addMarker(w,"ace_active-line","screenLine"),S.$highlightLineMarker=w}else x&&(S.$highlightLineMarker.start.row=x.row,S.$highlightLineMarker.end.row=x.row,S.$highlightLineMarker.start.column=x.column,S._signal("changeBackMarker"))},this.onSelectionChange=function(x){var S=this.session;if(S.$selectionMarker&&S.removeMarker(S.$selectionMarker),S.$selectionMarker=null,this.selection.isEmpty())this.$updateHighlightActiveLine();else{var w=this.selection.getRange(),U=this.getSelectionStyle();S.$selectionMarker=S.addMarker(w,"ace_selection",U)}var G=this.$highlightSelectedWord&&this.$getSelectionHighLightRegexp();this.session.highlight(G),this._signal("changeSelection")},this.$getSelectionHighLightRegexp=function(){var x=this.session,S=this.getSelectionRange();if(!S.isEmpty()&&!S.isMultiLine()){var w=S.start.column,U=S.end.column,G=x.getLine(S.start.row),H=G.substring(w,U);if(!(H.length>5e3)&&/[\w\d]/.test(H)){var z=this.$search.$assembleRegExp({wholeWord:!0,caseSensitive:!0,needle:H}),j=G.substring(w-1,U+1);if(z.test(j))return z}}},this.onChangeFrontMarker=function(){this.renderer.updateFrontMarkers()},this.onChangeBackMarker=function(){this.renderer.updateBackMarkers()},this.onChangeBreakpoint=function(){this.renderer.updateBreakpoints()},this.onChangeAnnotation=function(){this.renderer.setAnnotations(this.session.getAnnotations())},this.onChangeMode=function(x){this.renderer.updateText(),this._emit("changeMode",x)},this.onChangeWrapLimit=function(){this.renderer.updateFull()},this.onChangeWrapMode=function(){this.renderer.onResize(!0)},this.onChangeFold=function(){this.$updateHighlightActiveLine(),this.renderer.updateFull()},this.getSelectedText=function(){return this.session.getTextRange(this.getSelectionRange())},this.getCopyText=function(){var x=this.getSelectedText(),S=this.session.doc.getNewLineCharacter(),w=!1;if(!x&&this.$copyWithEmptySelection){w=!0;for(var U=this.selection.getAllRanges(),G=0;Gj.search(/\S|$/)){var X=j.substr(G.column).search(/\S|$/);w.doc.removeInLine(G.row,G.column,G.column+X)}}this.clearSelection();var K=G.column,q=w.getState(G.row),Y=(j=w.getLine(G.row),U.checkOutdent(q,j,x));if(w.insert(G,x),H&&H.selection&&(2==H.selection.length?this.selection.setSelectionRange(new J(G.row,K+H.selection[0],G.row,K+H.selection[1])):this.selection.setSelectionRange(new J(G.row+H.selection[0],H.selection[1],G.row+H.selection[2],H.selection[3]))),w.getDocument().isNewLine(x)){var Z=U.getNextLineIndent(q,j.slice(0,G.column),w.getTabString());w.insert({row:G.row+1,column:0},Z)}Y&&U.autoOutdent(q,w,G.row)},this.onTextInput=function(x,S){if(!S)return this.keyBinding.onTextInput(x);this.startOperation({command:{name:"insertstring"}});var w=this.applyComposition.bind(this,x,S);this.selection.rangeCount?this.forEachSelection(w):w(),this.endOperation()},this.applyComposition=function(x,S){var w;(S.extendLeft||S.extendRight)&&((w=this.selection.getRange()).start.column-=S.extendLeft,w.end.column+=S.extendRight,this.selection.setRange(w),x||w.isEmpty()||this.remove()),!x&&this.selection.isEmpty()||this.insert(x,!0),(S.restoreStart||S.restoreEnd)&&((w=this.selection.getRange()).start.column-=S.restoreStart,w.end.column-=S.restoreEnd,this.selection.setRange(w))},this.onCommandKey=function(x,S,w){return this.keyBinding.onCommandKey(x,S,w)},this.setOverwrite=function(x){this.session.setOverwrite(x)},this.getOverwrite=function(){return this.session.getOverwrite()},this.toggleOverwrite=function(){this.session.toggleOverwrite()},this.setScrollSpeed=function(x){this.setOption("scrollSpeed",x)},this.getScrollSpeed=function(){return this.getOption("scrollSpeed")},this.setDragDelay=function(x){this.setOption("dragDelay",x)},this.getDragDelay=function(){return this.getOption("dragDelay")},this.setSelectionStyle=function(x){this.setOption("selectionStyle",x)},this.getSelectionStyle=function(){return this.getOption("selectionStyle")},this.setHighlightActiveLine=function(x){this.setOption("highlightActiveLine",x)},this.getHighlightActiveLine=function(){return this.getOption("highlightActiveLine")},this.setHighlightGutterLine=function(x){this.setOption("highlightGutterLine",x)},this.getHighlightGutterLine=function(){return this.getOption("highlightGutterLine")},this.setHighlightSelectedWord=function(x){this.setOption("highlightSelectedWord",x)},this.getHighlightSelectedWord=function(){return this.$highlightSelectedWord},this.setAnimatedScroll=function(x){this.renderer.setAnimatedScroll(x)},this.getAnimatedScroll=function(){return this.renderer.getAnimatedScroll()},this.setShowInvisibles=function(x){this.renderer.setShowInvisibles(x)},this.getShowInvisibles=function(){return this.renderer.getShowInvisibles()},this.setDisplayIndentGuides=function(x){this.renderer.setDisplayIndentGuides(x)},this.getDisplayIndentGuides=function(){return this.renderer.getDisplayIndentGuides()},this.setShowPrintMargin=function(x){this.renderer.setShowPrintMargin(x)},this.getShowPrintMargin=function(){return this.renderer.getShowPrintMargin()},this.setPrintMarginColumn=function(x){this.renderer.setPrintMarginColumn(x)},this.getPrintMarginColumn=function(){return this.renderer.getPrintMarginColumn()},this.setReadOnly=function(x){this.setOption("readOnly",x)},this.getReadOnly=function(){return this.getOption("readOnly")},this.setBehavioursEnabled=function(x){this.setOption("behavioursEnabled",x)},this.getBehavioursEnabled=function(){return this.getOption("behavioursEnabled")},this.setWrapBehavioursEnabled=function(x){this.setOption("wrapBehavioursEnabled",x)},this.getWrapBehavioursEnabled=function(){return this.getOption("wrapBehavioursEnabled")},this.setShowFoldWidgets=function(x){this.setOption("showFoldWidgets",x)},this.getShowFoldWidgets=function(){return this.getOption("showFoldWidgets")},this.setFadeFoldWidgets=function(x){this.setOption("fadeFoldWidgets",x)},this.getFadeFoldWidgets=function(){return this.getOption("fadeFoldWidgets")},this.remove=function(x){this.selection.isEmpty()&&("left"==x?this.selection.selectLeft():this.selection.selectRight());var S=this.getSelectionRange();if(this.getBehavioursEnabled()){var w=this.session,U=w.getState(S.start.row),G=w.getMode().transformAction(U,"deletion",this,w,S);if(0===S.end.column){var H=w.getTextRange(S);if("\n"==H[H.length-1]){var z=w.getLine(S.end.row);/^\s+$/.test(z)&&(S.end.column=z.length)}}G&&(S=G)}this.session.remove(S),this.clearSelection()},this.removeWordRight=function(){this.selection.isEmpty()&&this.selection.selectWordRight(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeWordLeft=function(){this.selection.isEmpty()&&this.selection.selectWordLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineStart=function(){this.selection.isEmpty()&&this.selection.selectLineStart(),this.selection.isEmpty()&&this.selection.selectLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineEnd=function(){this.selection.isEmpty()&&this.selection.selectLineEnd();var x=this.getSelectionRange();x.start.column==x.end.column&&x.start.row==x.end.row&&(x.end.column=0,x.end.row++),this.session.remove(x),this.clearSelection()},this.splitLine=function(){this.selection.isEmpty()||(this.session.remove(this.getSelectionRange()),this.clearSelection());var x=this.getCursorPosition();this.insert("\n"),this.moveCursorToPosition(x)},this.transposeLetters=function(){if(this.selection.isEmpty()){var x=this.getCursorPosition(),S=x.column;if(0!==S){var w,U,G=this.session.getLine(x.row);SS.toLowerCase()?1:0}));var G=new J(0,0,0,0);for(U=x.first;U<=x.last;U++){var H=S.getLine(U);G.start.row=U,G.end.row=U,G.end.column=H.length,S.replace(G,w[U-x.first])}},this.toggleCommentLines=function(){var x=this.session.getState(this.getCursorPosition().row),S=this.$getSelectedRows();this.session.getMode().toggleCommentLines(x,this.session,S.first,S.last)},this.toggleBlockComment=function(){var x=this.getCursorPosition(),S=this.session.getState(x.row),w=this.getSelectionRange();this.session.getMode().toggleBlockComment(S,this.session,w,x)},this.getNumberAt=function(x,S){var w=/[\-]?[0-9]+(?:\.[0-9]+)?/g;w.lastIndex=0;for(var U=this.session.getLine(x);w.lastIndex=S)return{value:G[0],start:G.index,end:G.index+G[0].length}}return null},this.modifyNumber=function(x){var S=this.selection.getCursor().row,w=this.selection.getCursor().column,U=new J(S,w-1,S,w),G=this.session.getTextRange(U);if(!isNaN(parseFloat(G))&&isFinite(G)){var H=this.getNumberAt(S,w);if(H){var z=H.value.indexOf(".")>=0?H.start+H.value.indexOf(".")+1:H.end,j=H.start+H.value.length-z,X=parseFloat(H.value);X*=Math.pow(10,j),z!==H.end&&w=j&&z<=X&&(w=S,K.selection.clearSelection(),K.moveCursorTo(x,j+U),K.selection.selectTo(x,X+U)),j=X}));for(var q,Y=this.$toggleWordPairs,Z=0;ZJ+1)break;J=Q.last}for(q--,j=this.session.$moveLines(Z,J,S?0:x),S&&-1==x&&(Y=q+1);Y<=q;)z[Y].moveBy(j,0),Y++;S||(j=0),X+=j}G.fromOrientedRange(G.ranges[0]),G.rangeList.attach(this.session),this.inVirtualSelectionMode=!1}},this.$getSelectedRows=function(x){return x=(x||this.getSelectionRange()).collapseRows(),{first:this.session.getRowFoldStart(x.start.row),last:this.session.getRowFoldEnd(x.end.row)}},this.onCompositionStart=function(x){this.renderer.showComposition(x)},this.onCompositionUpdate=function(x){this.renderer.setCompositionText(x)},this.onCompositionEnd=function(){this.renderer.hideComposition()},this.getFirstVisibleRow=function(){return this.renderer.getFirstVisibleRow()},this.getLastVisibleRow=function(){return this.renderer.getLastVisibleRow()},this.isRowVisible=function(x){return x>=this.getFirstVisibleRow()&&x<=this.getLastVisibleRow()},this.isRowFullyVisible=function(x){return x>=this.renderer.getFirstFullyVisibleRow()&&x<=this.renderer.getLastFullyVisibleRow()},this.$getVisibleRowCount=function(){return this.renderer.getScrollBottomRow()-this.renderer.getScrollTopRow()+1},this.$moveByPage=function(x,S){var w=this.renderer,U=this.renderer.layerConfig,G=x*Math.floor(U.height/U.lineHeight);!0===S?this.selection.$moveSelection((function(){this.moveCursorBy(G,0)})):!1===S&&(this.selection.moveCursorBy(G,0),this.selection.clearSelection());var H=w.scrollTop;w.scrollBy(0,G*U.lineHeight),null!=S&&w.scrollCursorIntoView(null,.5),w.animateScrolling(H)},this.selectPageDown=function(){this.$moveByPage(1,!0)},this.selectPageUp=function(){this.$moveByPage(-1,!0)},this.gotoPageDown=function(){this.$moveByPage(1,!1)},this.gotoPageUp=function(){this.$moveByPage(-1,!1)},this.scrollPageDown=function(){this.$moveByPage(1)},this.scrollPageUp=function(){this.$moveByPage(-1)},this.scrollToRow=function(x){this.renderer.scrollToRow(x)},this.scrollToLine=function(x,S,w,U){this.renderer.scrollToLine(x,S,w,U)},this.centerSelection=function(){var x=this.getSelectionRange(),S={row:Math.floor(x.start.row+(x.end.row-x.start.row)/2),column:Math.floor(x.start.column+(x.end.column-x.start.column)/2)};this.renderer.alignCursor(S,.5)},this.getCursorPosition=function(){return this.selection.getCursor()},this.getCursorPositionScreen=function(){return this.session.documentToScreenPosition(this.getCursorPosition())},this.getSelectionRange=function(){return this.selection.getRange()},this.selectAll=function(){this.selection.selectAll()},this.clearSelection=function(){this.selection.clearSelection()},this.moveCursorTo=function(x,S){this.selection.moveCursorTo(x,S)},this.moveCursorToPosition=function(x){this.selection.moveCursorToPosition(x)},this.jumpToMatching=function(x,S){var w=this.getCursorPosition(),U=new ie(this.session,w.row,w.column),G=U.getCurrentToken(),H=G||U.stepForward();if(H){var z,j,X=!1,K={},q=w.column-H.start,Y={")":"(","(":"(","]":"[","[":"[","{":"{","}":"{"};do{if(H.value.match(/[{}()\[\]]/g)){for(;q=0;--H)this.$tryReplace(w[H],x)&&U++;return this.selection.setSelectionRange(G),U},this.$tryReplace=function(x,S){var w=this.session.getTextRange(x);return null!==(S=this.$search.replace(w,S))?(x.end=this.session.replace(x,S),x):null},this.getLastSearchOptions=function(){return this.$search.getOptions()},this.find=function(x,S,w){S||(S={}),"string"==typeof x||x instanceof RegExp?S.needle=x:"object"==typeof x&&U.mixin(S,x);var G=this.selection.getRange();null==S.needle&&((x=this.session.getTextRange(G)||this.$search.$options.needle)||(G=this.session.getWordRange(G.start.row,G.start.column),x=this.session.getTextRange(G)),this.$search.set({needle:x})),this.$search.set(S),S.start||this.$search.set({start:G});var H=this.$search.find(this.session);return S.preventScroll?H:H?(this.revealRange(H,w),H):(S.backwards?G.start=G.end:G.end=G.start,void this.selection.setRange(G))},this.findNext=function(x,S){this.find({skipCurrent:!0,backwards:!1},x,S)},this.findPrevious=function(x,S){this.find(x,{skipCurrent:!0,backwards:!0},S)},this.revealRange=function(x,S){this.session.unfold(x),this.selection.setSelectionRange(x);var w=this.renderer.scrollTop;this.renderer.scrollSelectionIntoView(x.start,x.end,.5),!1!==S&&this.renderer.animateScrolling(w)},this.undo=function(){this.session.getUndoManager().undo(this.session),this.renderer.scrollCursorIntoView(null,.5)},this.redo=function(){this.session.getUndoManager().redo(this.session),this.renderer.scrollCursorIntoView(null,.5)},this.destroy=function(){this.renderer.destroy(),this._signal("destroy",this),this.session&&this.session.destroy()},this.setAutoScrollEditorIntoView=function(x){if(x){var S,w=this,U=!1;this.$scrollAnchor||(this.$scrollAnchor=document.createElement("div"));var G=this.$scrollAnchor;G.style.cssText="position:absolute",this.container.insertBefore(G,this.container.firstChild);var H=this.on("changeSelection",(function(){U=!0})),z=this.renderer.on("beforeRender",(function(){U&&(S=w.renderer.container.getBoundingClientRect())})),j=this.renderer.on("afterRender",(function(){if(U&&S&&(w.isFocused()||w.searchBox&&w.searchBox.isFocused())){var x=w.renderer,H=x.$cursorLayer.$pixelPos,z=x.layerConfig,j=H.top-z.offset;null!=(U=H.top>=0&&j+S.top<0||!(H.topwindow.innerHeight)&&null)&&(G.style.top=j+"px",G.style.left=H.left+"px",G.style.height=z.lineHeight+"px",G.scrollIntoView(U)),U=S=null}}));this.setAutoScrollEditorIntoView=function(x){x||(delete this.setAutoScrollEditorIntoView,this.off("changeSelection",H),this.renderer.off("afterRender",j),this.renderer.off("beforeRender",z))}}},this.$resetCursorStyle=function(){var x=this.$cursorStyle||"ace",S=this.renderer.$cursorLayer;S&&(S.setSmoothBlinking(/smooth/.test(x)),S.isBlinking=!this.$readOnly&&"wide"!=x,G.setCssClass(S.element,"ace_slim-cursors",/slim/.test(x)))},this.prompt=function(x,S,w){var U=this;ne.loadModule("./ext/prompt",(function(G){G.prompt(U,x,S,w)}))}}.call(C.prototype),ne.defineOptions(C.prototype,"editor",{selectionStyle:{set:function(x){this.onSelectionChange(),this._signal("changeSelectionStyle",{data:x})},initialValue:"line"},highlightActiveLine:{set:function(){this.$updateHighlightActiveLine()},initialValue:!0},highlightSelectedWord:{set:function(x){this.$onSelectionChange()},initialValue:!0},readOnly:{set:function(x){this.textInput.setReadOnly(x),this.$resetCursorStyle()},initialValue:!1},copyWithEmptySelection:{set:function(x){this.textInput.setCopyWithEmptySelection(x)},initialValue:!1},cursorStyle:{set:function(x){this.$resetCursorStyle()},values:["ace","slim","smooth","wide"],initialValue:"ace"},mergeUndoDeltas:{values:[!1,!0,"always"],initialValue:!0},behavioursEnabled:{initialValue:!0},wrapBehavioursEnabled:{initialValue:!0},autoScrollEditorIntoView:{set:function(x){this.setAutoScrollEditorIntoView(x)}},keyboardHandler:{set:function(x){this.setKeyboardHandler(x)},get:function(){return this.$keybindingId},handlesSet:!0},value:{set:function(x){this.session.setValue(x)},get:function(){return this.getValue()},handlesSet:!0,hidden:!0},session:{set:function(x){this.setSession(x)},get:function(){return this.session},handlesSet:!0,hidden:!0},showLineNumbers:{set:function(x){this.renderer.$gutterLayer.setShowLineNumbers(x),this.renderer.$loop.schedule(this.renderer.CHANGE_GUTTER),x&&this.$relativeLineNumbers?oe.attach(this):oe.detach(this)},initialValue:!0},relativeLineNumbers:{set:function(x){this.$showLineNumbers&&x?oe.attach(this):oe.detach(this)}},placeholder:{set:function(x){this.$updatePlaceholder||(this.$updatePlaceholder=function(){var x=this.renderer.$composition||this.getValue();if(x&&this.renderer.placeholderNode)this.renderer.off("afterRender",this.$updatePlaceholder),G.removeCssClass(this.container,"ace_hasPlaceholder"),this.renderer.placeholderNode.remove(),this.renderer.placeholderNode=null;else if(!x&&!this.renderer.placeholderNode){this.renderer.on("afterRender",this.$updatePlaceholder),G.addCssClass(this.container,"ace_hasPlaceholder");var S=G.createElement("div");S.className="ace_placeholder",S.textContent=this.$placeholder||"",this.renderer.placeholderNode=S,this.renderer.content.appendChild(this.renderer.placeholderNode)}}.bind(this),this.on("input",this.$updatePlaceholder)),this.$updatePlaceholder()}},hScrollBarAlwaysVisible:"renderer",vScrollBarAlwaysVisible:"renderer",highlightGutterLine:"renderer",animatedScroll:"renderer",showInvisibles:"renderer",showPrintMargin:"renderer",printMarginColumn:"renderer",printMargin:"renderer",fadeFoldWidgets:"renderer",showFoldWidgets:"renderer",displayIndentGuides:"renderer",showGutter:"renderer",fontSize:"renderer",fontFamily:"renderer",maxLines:"renderer",minLines:"renderer",scrollPastEnd:"renderer",fixedWidthGutter:"renderer",theme:"renderer",hasCssTransforms:"renderer",maxPixelHeight:"renderer",useTextareaForIME:"renderer",scrollSpeed:"$mouseHandler",dragDelay:"$mouseHandler",dragEnabled:"$mouseHandler",focusTimeout:"$mouseHandler",tooltipFollowsMouse:"$mouseHandler",firstLineNumber:"session",overwrite:"session",newLineMode:"session",useWorker:"session",useSoftTabs:"session",navigateWithinSoftTabs:"session",tabSize:"session",wrap:"session",indentedSoftWrap:"session",foldStyle:"session",mode:"session"});var oe={getText:function(x,S){return(Math.abs(x.selection.lead.row-S)||S+1+(S<9?"·":""))+""},getWidth:function(x,S,w){return Math.max(S.toString().length,(w.lastRow+1).toString().length,2)*w.characterWidth},update:function(x,S){S.renderer.$loop.schedule(S.renderer.CHANGE_GUTTER)},attach:function(x){x.renderer.$gutterLayer.$renderer=this,x.on("changeSelection",this.update),this.update(null,x)},detach:function(x){x.renderer.$gutterLayer.$renderer==this&&(x.renderer.$gutterLayer.$renderer=null),x.off("changeSelection",this.update),this.update(null,x)}};S.Editor=C})),ace.define("ace/undomanager",["require","exports","module","ace/range"],(function(x,S,w){"use strict";var i=function(){this.$maxRev=0,this.$fromUndo=!1,this.reset()};(function(){this.addSession=function(x){this.$session=x},this.add=function(x,S,w){this.$fromUndo||x!=this.$lastDelta&&(!1!==S&&this.lastDeltas||(this.lastDeltas=[],this.$undoStack.push(this.lastDeltas),x.id=this.$rev=++this.$maxRev),"remove"!=x.action&&"insert"!=x.action||(this.$lastDelta=x),this.lastDeltas.push(x))},this.addSelection=function(x,S){this.selections.push({value:x,rev:S||this.$rev})},this.startNewGroup=function(){return this.lastDeltas=null,this.$rev},this.markIgnored=function(x,S){null==S&&(S=this.$rev+1);for(var w=this.$undoStack,U=w.length;U--;){var G=w[U][0];if(G.id<=x)break;G.id0},this.canRedo=function(){return this.$redoStack.length>0},this.bookmark=function(x){null==x&&(x=this.$rev),this.mark=x},this.isAtBookmark=function(){return this.$rev===this.mark},this.toJSON=function(){},this.fromJSON=function(){},this.hasUndo=this.canUndo,this.hasRedo=this.canRedo,this.isClean=this.isAtBookmark,this.markClean=this.bookmark,this.$prettyPrint=function(x){return x?a(x):a(this.$undoStack)+"\n---\n"+a(this.$redoStack)}}).call(i.prototype);var U=x("./range").Range,G=U.comparePoints;function s(x){return{row:x.row,column:x.column}}function a(x){if(x=x||this,Array.isArray(x))return x.map(a).join("\n");var S="";return x.action?(S="insert"==x.action?"+":"-",S+="["+x.lines+"]"):x.value&&(S=Array.isArray(x.value)?x.value.map(c).join("\n"):c(x.value)),x.start&&(S+=c(x)),(x.id||x.rev)&&(S+="\t("+(x.id||x.rev)+")"),S}function c(x){return x.start.row+":"+x.start.column+"=>"+x.end.row+":"+x.end.column}function l(x,S){var w="insert"==x.action,U="insert"==S.action;if(w&&U)if(G(S.start,x.end)>=0)d(S,x,-1);else{if(!(G(S.start,x.start)<=0))return null;d(x,S,1)}else if(w&&!U)if(G(S.start,x.end)>=0)d(S,x,-1);else{if(!(G(S.end,x.start)<=0))return null;d(x,S,-1)}else if(!w&&U)if(G(S.start,x.start)>=0)d(S,x,1);else{if(!(G(S.start,x.start)<=0))return null;d(x,S,1)}else if(!w&&!U)if(G(S.start,x.start)>=0)d(S,x,1);else{if(!(G(S.end,x.start)<=0))return null;d(x,S,-1)}return[S,x]}function u(x,S){for(var w=x.length;w--;)for(var U=0;U=0?d(x,S,-1):(G(x.start,S.start)<=0||d(x,U.fromPoints(S.start,x.start),-1),d(S,x,1));else if(!w&&H)G(S.start,x.end)>=0?d(S,x,-1):(G(S.start,x.start)<=0||d(S,U.fromPoints(x.start,S.start),-1),d(x,S,1));else if(!w&&!H)if(G(S.start,x.end)>=0)d(S,x,-1);else{var z,j;if(!(G(S.end,x.start)<=0))return G(x.start,S.start)<0&&(z=x,x=m(x,S.start)),G(x.end,S.end)>0&&(j=m(x,S.end)),p(S.end,x.start,x.end,-1),j&&!z&&(x.lines=j.lines,x.start=j.start,x.end=j.end,j=x),[S,z,j].filter(Boolean);d(x,S,-1)}return[S,x]}function d(x,S,w){p(x.start,S.start,S.end,w),p(x.end,S.start,S.end,w)}function p(x,S,w,U){x.row==(1==U?S:w).row&&(x.column+=U*(w.column-S.column)),x.row+=U*(w.row-S.row)}function m(x,S){var w=x.lines,U=x.end;x.end=s(S);var G=x.end.row-x.start.row,H=w.splice(G,w.length),z=G?S.column:S.column-x.start.column;return w.push(H[0].substring(0,z)),H[0]=H[0].substr(z),{start:s(S),end:U,lines:H,action:x.action}}function f(x,S){S=function(x){return{start:s(x.start),end:s(x.end),action:x.action,lines:x.lines.slice()}}(S);for(var w=x.length;w--;){for(var U=x[w],G=0;GH&&(X=G.end.row+1,H=(G=S.getNextFoldLine(X,G))?G.start.row:1/0),X>U){for(;this.$lines.getLength()>j+1;)this.$lines.pop();break}(z=this.$lines.get(++j))?z.row=X:(z=this.$lines.createCell(X,x,this.session,l),this.$lines.push(z)),this.$renderCell(z,x,G,X),X++}this._signal("afterRender"),this.$updateGutterWidth(x)},this.$updateGutterWidth=function(x){var S=this.session,w=S.gutterRenderer||this.$renderer,U=S.$firstLineNumber,G=this.$lines.last()?this.$lines.last().text:"";(this.$fixedWidth||S.$useWrapMode)&&(G=S.getLength()+U-1);var H=w?w.getWidth(S,G,x):G.toString().length*x.characterWidth,z=this.$padding||this.$computePadding();(H+=z.left+z.right)===this.gutterWidth||isNaN(H)||(this.gutterWidth=H,this.element.parentNode.style.width=this.element.style.width=Math.ceil(this.gutterWidth)+"px",this._signal("changeGutterWidth",H))},this.$updateCursorRow=function(){if(this.$highlightGutterLine){var x=this.session.selection.getCursor();this.$cursorRow!==x.row&&(this.$cursorRow=x.row)}},this.updateLineHighlight=function(){if(this.$highlightGutterLine){var x=this.session.selection.cursor.row;if(this.$cursorRow=x,!this.$cursorCell||this.$cursorCell.row!=x){this.$cursorCell&&(this.$cursorCell.element.className=this.$cursorCell.element.className.replace("ace_gutter-active-line ",""));var S=this.$lines.cells;this.$cursorCell=null;for(var w=0;w=this.$cursorRow){if(U.row>this.$cursorRow){var G=this.session.getFoldLine(this.$cursorRow);if(!(w>0&&G&&G.start.row==S[w-1].row))break;U=S[w-1]}U.element.className="ace_gutter-active-line "+U.element.className,this.$cursorCell=U;break}}}}},this.scrollLines=function(x){var S=this.config;if(this.config=x,this.$updateCursorRow(),this.$lines.pageChanged(S,x))return this.update(x);this.$lines.moveContainer(x);var w=Math.min(x.lastRow+x.gutterOffset,this.session.getLength()-1),U=this.oldLastRow;if(this.oldLastRow=w,!S||U0;G--)this.$lines.shift();if(U>w)for(G=this.session.getFoldedRowCount(w+1,U);G>0;G--)this.$lines.pop();x.firstRowU&&this.$lines.push(this.$renderLines(x,U+1,w)),this.updateLineHighlight(),this._signal("afterRender"),this.$updateGutterWidth(x)},this.$renderLines=function(x,S,w){for(var U=[],G=S,H=this.session.getNextFoldLine(G),z=H?H.start.row:1/0;G>z&&(G=H.end.row+1,z=(H=this.session.getNextFoldLine(G,H))?H.start.row:1/0),!(G>w);){var j=this.$lines.createCell(G,x,this.session,l);this.$renderCell(j,x,H,G),U.push(j),G++}return U},this.$renderCell=function(x,S,w,G){var H=x.element,z=this.session,j=H.childNodes[0],X=H.childNodes[1],K=z.$firstLineNumber,q=z.$breakpoints,Y=z.$decorations,Z=z.gutterRenderer||this.$renderer,J=this.$showFoldWidgets&&z.foldWidgets,Q=w?w.start.row:Number.MAX_VALUE,ee="ace_gutter-cell ";if(this.$highlightGutterLine&&(G==this.$cursorRow||w&&G=Q&&this.$cursorRow<=w.end.row)&&(ee+="ace_gutter-active-line ",this.$cursorCell!=x&&(this.$cursorCell&&(this.$cursorCell.element.className=this.$cursorCell.element.className.replace("ace_gutter-active-line ","")),this.$cursorCell=x)),q[G]&&(ee+=q[G]),Y[G]&&(ee+=Y[G]),this.$annotations[G]&&(ee+=this.$annotations[G].className),H.className!=ee&&(H.className=ee),J){var te=J[G];null==te&&(te=J[G]=z.getFoldWidget(G))}if(te){ee="ace_fold-widget ace_"+te,"start"==te&&G==Q&&Gw.right-S.right?"foldWidgets":void 0}}).call(c.prototype),S.Gutter=c})),ace.define("ace/layer/marker",["require","exports","module","ace/range","ace/lib/dom"],(function(x,S,w){"use strict";var U=x("../range").Range,G=x("../lib/dom"),o=function(x){this.element=G.createElement("div"),this.element.className="ace_layer ace_marker-layer",x.appendChild(this.element)};(function(){this.$padding=0,this.setPadding=function(x){this.$padding=x},this.setSession=function(x){this.session=x},this.setMarkers=function(x){this.markers=x},this.elt=function(x,S){var w=-1!=this.i&&this.element.childNodes[this.i];w?this.i++:(w=document.createElement("div"),this.element.appendChild(w),this.i=-1),w.style.cssText=S,w.className=x},this.update=function(x){if(x){var S;for(var w in this.config=x,this.i=0,this.markers){var U=this.markers[w];if(U.range){var G=U.range.clipRows(x.firstRow,x.lastRow);if(!G.isEmpty())if(G=G.toScreenRange(this.session),U.renderer){var H=this.$getTop(G.start.row,x),z=this.$padding+G.start.column*x.characterWidth;U.renderer(S,G,z,H,x)}else"fullLine"==U.type?this.drawFullLineMarker(S,G,U.clazz,x):"screenLine"==U.type?this.drawScreenLineMarker(S,G,U.clazz,x):G.isMultiLine()?"text"==U.type?this.drawTextMarker(S,G,U.clazz,x):this.drawMultiLineMarker(S,G,U.clazz,x):this.drawSingleLineMarker(S,G,U.clazz+" ace_start ace_br15",x)}else U.update(S,this,this.session,x)}if(-1!=this.i)for(;this.iZ?4:0)|(K==X?8:0)),G,K==X?0:1,H)},this.drawMultiLineMarker=function(x,S,w,U,G){var H=this.$padding,z=U.lineHeight,j=this.$getTop(S.start.row,U),X=H+S.start.column*U.characterWidth;if(G=G||"",this.session.$bidiHandler.isBidiRow(S.start.row)?((K=S.clone()).end.row=K.start.row,K.end.column=this.session.getLine(K.start.row).length,this.drawBidiSingleLineMarker(x,K,w+" ace_br1 ace_start",U,null,G)):this.elt(w+" ace_br1 ace_start","height:"+z+"px;right:0;top:"+j+"px;left:"+X+"px;"+(G||"")),this.session.$bidiHandler.isBidiRow(S.end.row)){var K;(K=S.clone()).start.row=K.end.row,K.start.column=0,this.drawBidiSingleLineMarker(x,K,w+" ace_br12",U,null,G)}else{j=this.$getTop(S.end.row,U);var q=S.end.column*U.characterWidth;this.elt(w+" ace_br12","height:"+z+"px;width:"+q+"px;top:"+j+"px;left:"+H+"px;"+(G||""))}if(!((z=(S.end.row-S.start.row-1)*U.lineHeight)<=0)){j=this.$getTop(S.start.row+1,U);var Y=(S.start.column?1:0)|(S.end.column?0:8);this.elt(w+(Y?" ace_br"+Y:""),"height:"+z+"px;right:0;top:"+j+"px;left:"+H+"px;"+(G||""))}},this.drawSingleLineMarker=function(x,S,w,U,G,H){if(this.session.$bidiHandler.isBidiRow(S.start.row))return this.drawBidiSingleLineMarker(x,S,w,U,G,H);var z=U.lineHeight,j=(S.end.column+(G||0)-S.start.column)*U.characterWidth,X=this.$getTop(S.start.row,U),K=this.$padding+S.start.column*U.characterWidth;this.elt(w,"height:"+z+"px;width:"+j+"px;top:"+X+"px;left:"+K+"px;"+(H||""))},this.drawBidiSingleLineMarker=function(x,S,w,U,G,H){var z=U.lineHeight,j=this.$getTop(S.start.row,U),X=this.$padding;this.session.$bidiHandler.getSelections(S.start.column,S.end.column).forEach((function(x){this.elt(w,"height:"+z+"px;width:"+x.width+(G||0)+"px;top:"+j+"px;left:"+(X+x.left)+"px;"+(H||""))}),this)},this.drawFullLineMarker=function(x,S,w,U,G){var H=this.$getTop(S.start.row,U),z=U.lineHeight;S.start.row!=S.end.row&&(z+=this.$getTop(S.end.row,U)-H),this.elt(w,"height:"+z+"px;top:"+H+"px;left:0;right:0;"+(G||""))},this.drawScreenLineMarker=function(x,S,w,U,G){var H=this.$getTop(S.start.row,U),z=U.lineHeight;this.elt(w,"height:"+z+"px;top:"+H+"px;left:0;right:0;"+(G||""))}}).call(o.prototype),S.Marker=o})),ace.define("ace/layer/text",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/layer/lines","ace/lib/event_emitter"],(function(x,S,w){"use strict";var U=x("../lib/oop"),G=x("../lib/dom"),H=x("../lib/lang"),z=x("./lines").Lines,j=x("../lib/event_emitter").EventEmitter,c=function(x){this.dom=G,this.element=this.dom.createElement("div"),this.element.className="ace_layer ace_text-layer",x.appendChild(this.element),this.$updateEolChar=this.$updateEolChar.bind(this),this.$lines=new z(this.element)};(function(){U.implement(this,j),this.EOF_CHAR="¶",this.EOL_CHAR_LF="¬",this.EOL_CHAR_CRLF="¤",this.EOL_CHAR=this.EOL_CHAR_LF,this.TAB_CHAR="—",this.SPACE_CHAR="·",this.$padding=0,this.MAX_LINE_LENGTH=1e4,this.$updateEolChar=function(){var x=this.session.doc,S="\n"==x.getNewLineCharacter()&&"windows"!=x.getNewLineMode()?this.EOL_CHAR_LF:this.EOL_CHAR_CRLF;if(this.EOL_CHAR!=S)return this.EOL_CHAR=S,!0},this.setPadding=function(x){this.$padding=x,this.element.style.margin="0 "+x+"px"},this.getLineHeight=function(){return this.$fontMetrics.$characterSize.height||0},this.getCharacterWidth=function(){return this.$fontMetrics.$characterSize.width||0},this.$setFontMetrics=function(x){this.$fontMetrics=x,this.$fontMetrics.on("changeCharacterSize",function(x){this._signal("changeCharacterSize",x)}.bind(this)),this.$pollSizeChanges()},this.checkForSizeChanges=function(){this.$fontMetrics.checkForSizeChanges()},this.$pollSizeChanges=function(){return this.$pollSizeChangesTimer=this.$fontMetrics.$pollSizeChanges()},this.setSession=function(x){this.session=x,x&&this.$computeTabString()},this.showInvisibles=!1,this.setShowInvisibles=function(x){return this.showInvisibles!=x&&(this.showInvisibles=x,this.$computeTabString(),!0)},this.displayIndentGuides=!0,this.setDisplayIndentGuides=function(x){return this.displayIndentGuides!=x&&(this.displayIndentGuides=x,this.$computeTabString(),!0)},this.$tabStrings=[],this.onChangeTabSize=this.$computeTabString=function(){var x=this.session.getTabSize();this.tabSize=x;for(var S=this.$tabStrings=[0],w=1;wq&&(j=X.end.row+1,q=(X=this.session.getNextFoldLine(j,X))?X.start.row:1/0),!(j>G);){var Y=H[z++];if(Y){this.dom.removeChildren(Y),this.$renderLine(Y,j,j==q&&X),K&&(Y.style.top=this.$lines.computeLineTop(j,x,this.session)+"px");var Z=x.lineHeight*this.session.getRowLength(j)+"px";Y.style.height!=Z&&(K=!0,Y.style.height=Z)}j++}if(K)for(;z0;G--)this.$lines.shift();if(S.lastRow>x.lastRow)for(G=this.session.getFoldedRowCount(x.lastRow+1,S.lastRow);G>0;G--)this.$lines.pop();x.firstRowS.lastRow&&this.$lines.push(this.$renderLinesFragment(x,S.lastRow+1,x.lastRow))},this.$renderLinesFragment=function(x,S,w){for(var U=[],H=S,z=this.session.getNextFoldLine(H),j=z?z.start.row:1/0;H>j&&(H=z.end.row+1,j=(z=this.session.getNextFoldLine(H,z))?z.start.row:1/0),!(H>w);){var X=this.$lines.createCell(H,x,this.session),K=X.element;this.dom.removeChildren(K),G.setStyle(K.style,"height",this.$lines.computeLineHeight(H,x,this.session)+"px"),G.setStyle(K.style,"top",this.$lines.computeLineTop(H,x,this.session)+"px"),this.$renderLine(K,H,H==j&&z),this.$useLineGroups()?K.className="ace_line_group":K.className="ace_line",U.push(X),H++}return U},this.update=function(x){this.$lines.moveContainer(x),this.config=x;for(var S=x.firstRow,w=x.lastRow,U=this.$lines;U.getLength();)U.pop();U.push(this.$renderLinesFragment(x,S,w))},this.$textToken={text:!0,rparen:!0,lparen:!0},this.$renderToken=function(x,S,w,U){for(var G,z=/(\t)|( +)|([\x00-\x1f\x80-\xa0\xad\u1680\u180E\u2000-\u200f\u2028\u2029\u202F\u205F\uFEFF\uFFF9-\uFFFC]+)|(\u3000)|([\u1100-\u115F\u11A3-\u11A7\u11FA-\u11FF\u2329-\u232A\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3001-\u303E\u3041-\u3096\u3099-\u30FF\u3105-\u312D\u3131-\u318E\u3190-\u31BA\u31C0-\u31E3\u31F0-\u321E\u3220-\u3247\u3250-\u32FE\u3300-\u4DBF\u4E00-\uA48C\uA490-\uA4C6\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFAFF\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFF01-\uFF60\uFFE0-\uFFE6]|[\uD800-\uDBFF][\uDC00-\uDFFF])/g,j=this.dom.createFragment(this.element),X=0;G=z.exec(U);){var K=G[1],q=G[2],Y=G[3],Z=G[4],J=G[5];if(this.showInvisibles||!q){var Q=X!=G.index?U.slice(X,G.index):"";if(X=G.index+G[0].length,Q&&j.appendChild(this.dom.createTextNode(Q,this.element)),K){var ee=this.session.getScreenTabSize(S+G.index);j.appendChild(this.$tabStrings[ee].cloneNode(!0)),S+=ee-1}else q?this.showInvisibles?((ne=this.dom.createElement("span")).className="ace_invisible ace_invisible_space",ne.textContent=H.stringRepeat(this.SPACE_CHAR,q.length),j.appendChild(ne)):j.appendChild(this.com.createTextNode(q,this.element)):Y?((ne=this.dom.createElement("span")).className="ace_invisible ace_invisible_space ace_invalid",ne.textContent=H.stringRepeat(this.SPACE_CHAR,Y.length),j.appendChild(ne)):Z?(S+=1,(ne=this.dom.createElement("span")).style.width=2*this.config.characterWidth+"px",ne.className=this.showInvisibles?"ace_cjk ace_invisible ace_invisible_space":"ace_cjk",ne.textContent=this.showInvisibles?this.SPACE_CHAR:Z,j.appendChild(ne)):J&&(S+=1,(ne=this.dom.createElement("span")).style.width=2*this.config.characterWidth+"px",ne.className="ace_cjk",ne.textContent=J,j.appendChild(ne))}}if(j.appendChild(this.dom.createTextNode(X?U.slice(X):U,this.element)),this.$textToken[w.type])x.appendChild(j);else{var te="ace_"+w.type.replace(/\./g," ace_"),ne=this.dom.createElement("span");"fold"==w.type&&(ne.style.width=w.value.length*this.config.characterWidth+"px"),ne.className=te,ne.appendChild(j),x.appendChild(ne)}return S+U.length},this.renderIndentGuide=function(x,S,w){var U=S.search(this.$indentGuideRe);if(U<=0||U>=w)return S;if(" "==S[0]){for(var G=(U-=U%this.tabSize)/this.tabSize,H=0;H=z;)j=this.$renderToken(X,j,q,Y.substring(0,z-U)),Y=Y.substring(z-U),U=z,X=this.$createLineElement(),x.appendChild(X),X.appendChild(this.dom.createTextNode(H.stringRepeat(" ",w.indent),this.element)),j=0,z=w[++G]||Number.MAX_VALUE;0!=Y.length&&(U+=Y.length,j=this.$renderToken(X,j,q,Y))}}w[w.length-1]>this.MAX_LINE_LENGTH&&this.$renderOverflowMessage(X,j,null,"",!0)},this.$renderSimpleLine=function(x,S){var w=0,U=S[0],G=U.value;this.displayIndentGuides&&(G=this.renderIndentGuide(x,G)),G&&(w=this.$renderToken(x,w,U,G));for(var H=1;Hthis.MAX_LINE_LENGTH)return this.$renderOverflowMessage(x,w,U,G);w=this.$renderToken(x,w,U,G)}},this.$renderOverflowMessage=function(x,S,w,U,G){w&&this.$renderToken(x,S,w,U.slice(0,this.MAX_LINE_LENGTH-S));var H=this.dom.createElement("span");H.className="ace_inline_button ace_keyword ace_toggle_wrap",H.textContent=G?"":"",x.appendChild(H)},this.$renderLine=function(x,S,w){if(w||0==w||(w=this.session.getFoldLine(S)),w)var U=this.$getFoldLineTokens(S,w);else U=this.session.getTokens(S);var G=x;if(U.length){var H=this.session.getRowSplitData(S);H&&H.length?(this.$renderWrappedLine(x,U,H),G=x.lastChild):(G=x,this.$useLineGroups()&&(G=this.$createLineElement(),x.appendChild(G)),this.$renderSimpleLine(G,U))}else this.$useLineGroups()&&(G=this.$createLineElement(),x.appendChild(G));if(this.showInvisibles&&G){w&&(S=w.end.row);var z=this.dom.createElement("span");z.className="ace_invisible ace_invisible_eol",z.textContent=S==this.session.getLength()-1?this.EOF_CHAR:this.EOL_CHAR,G.appendChild(z)}},this.$getFoldLineTokens=function(x,S){var w=this.session,U=[],G=w.getTokens(x);return S.walk((function(x,S,H,z,j){null!=x?U.push({type:"fold",value:x}):(j&&(G=w.getTokens(S)),G.length&&function(x,S,w){for(var G=0,H=0;H+x[G].value.lengthw-S&&(z=z.substring(0,w-S)),U.push({type:x[G].type,value:z}),H=S+z.length,G+=1);Hw?U.push({type:x[G].type,value:z.substring(0,w-H)}):U.push(x[G]),H+=z.length,G+=1}}(G,z,H))}),S.end.row,this.session.getLine(S.end.row).length),U},this.$useLineGroups=function(){return this.session.getUseWrapMode()},this.destroy=function(){}}).call(c.prototype),S.Text=c})),ace.define("ace/layer/cursor",["require","exports","module","ace/lib/dom"],(function(x,S,w){"use strict";var U=x("../lib/dom"),r=function(x){this.element=U.createElement("div"),this.element.className="ace_layer ace_cursor-layer",x.appendChild(this.element),this.isVisible=!1,this.isBlinking=!0,this.blinkInterval=1e3,this.smoothBlinking=!1,this.cursors=[],this.cursor=this.addCursor(),U.addCssClass(this.element,"ace_hidden-cursors"),this.$updateCursors=this.$updateOpacity.bind(this)};(function(){this.$updateOpacity=function(x){for(var S=this.cursors,w=S.length;w--;)U.setStyle(S[w].style,"opacity",x?"":"0")},this.$startCssAnimation=function(){for(var x=this.cursors,S=x.length;S--;)x[S].style.animationDuration=this.blinkInterval+"ms";setTimeout(function(){U.addCssClass(this.element,"ace_animate-blinking")}.bind(this))},this.$stopCssAnimation=function(){U.removeCssClass(this.element,"ace_animate-blinking")},this.$padding=0,this.setPadding=function(x){this.$padding=x},this.setSession=function(x){this.session=x},this.setBlinking=function(x){x!=this.isBlinking&&(this.isBlinking=x,this.restartTimer())},this.setBlinkInterval=function(x){x!=this.blinkInterval&&(this.blinkInterval=x,this.restartTimer())},this.setSmoothBlinking=function(x){x!=this.smoothBlinking&&(this.smoothBlinking=x,U.setCssClass(this.element,"ace_smooth-blinking",x),this.$updateCursors(!0),this.restartTimer())},this.addCursor=function(){var x=U.createElement("div");return x.className="ace_cursor",this.element.appendChild(x),this.cursors.push(x),x},this.removeCursor=function(){if(this.cursors.length>1){var x=this.cursors.pop();return x.parentNode.removeChild(x),x}},this.hideCursor=function(){this.isVisible=!1,U.addCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},this.showCursor=function(){this.isVisible=!0,U.removeCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},this.restartTimer=function(){var x=this.$updateCursors;if(clearInterval(this.intervalId),clearTimeout(this.timeoutId),this.$stopCssAnimation(),this.smoothBlinking&&U.removeCssClass(this.element,"ace_smooth-blinking"),x(!0),this.isBlinking&&this.blinkInterval&&this.isVisible)if(this.smoothBlinking&&setTimeout(function(){U.addCssClass(this.element,"ace_smooth-blinking")}.bind(this)),U.HAS_CSS_ANIMATION)this.$startCssAnimation();else{var S=function(){this.timeoutId=setTimeout((function(){x(!1)}),.6*this.blinkInterval)}.bind(this);this.intervalId=setInterval((function(){x(!0),S()}),this.blinkInterval),S()}else this.$stopCssAnimation()},this.getPixelPosition=function(x,S){if(!this.config||!this.session)return{left:0,top:0};x||(x=this.session.selection.getCursor());var w=this.session.documentToScreenPosition(x);return{left:this.$padding+(this.session.$bidiHandler.isBidiRow(w.row,x.row)?this.session.$bidiHandler.getPosLeft(w.column):w.column*this.config.characterWidth),top:(w.row-(S?this.config.firstRowScreen:0))*this.config.lineHeight}},this.isCursorInView=function(x,S){return x.top>=0&&x.topx.height+x.offset||z.top<0)&&w>1)){var j=this.cursors[G++]||this.addCursor(),X=j.style;this.drawCursor?this.drawCursor(j,z,x,S[w],this.session):this.isCursorInView(z,x)?(U.setStyle(X,"display","block"),U.translate(j,z.left,z.top),U.setStyle(X,"width",Math.round(x.characterWidth)+"px"),U.setStyle(X,"height",x.lineHeight+"px")):U.setStyle(X,"display","none")}}for(;this.cursors.length>G;)this.removeCursor();var K=this.session.getOverwrite();this.$setOverwrite(K),this.$pixelPos=z,this.restartTimer()},this.drawCursor=null,this.$setOverwrite=function(x){x!=this.overwrite&&(this.overwrite=x,x?U.addCssClass(this.element,"ace_overwrite-cursors"):U.removeCssClass(this.element,"ace_overwrite-cursors"))},this.destroy=function(){clearInterval(this.intervalId),clearTimeout(this.timeoutId)}}).call(r.prototype),S.Cursor=r})),ace.define("ace/scrollbar",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/event_emitter"],(function(x,S,w){"use strict";var U=x("./lib/oop"),G=x("./lib/dom"),H=x("./lib/event"),z=x("./lib/event_emitter").EventEmitter,a=function(x){this.element=G.createElement("div"),this.element.className="ace_scrollbar ace_scrollbar"+this.classSuffix,this.inner=G.createElement("div"),this.inner.className="ace_scrollbar-inner",this.inner.textContent=" ",this.element.appendChild(this.inner),x.appendChild(this.element),this.setVisible(!1),this.skipEvent=!1,H.addListener(this.element,"scroll",this.onScroll.bind(this)),H.addListener(this.element,"mousedown",H.preventDefault)};(function(){U.implement(this,z),this.setVisible=function(x){this.element.style.display=x?"":"none",this.isVisible=x,this.coeff=1}}).call(a.prototype);var c=function(x,S){a.call(this,x),this.scrollTop=0,this.scrollHeight=0,S.$scrollbarWidth=this.width=G.scrollbarWidth(x.ownerDocument),this.inner.style.width=this.element.style.width=(this.width||15)+5+"px",this.$minWidth=0};U.inherits(c,a),function(){this.classSuffix="-v",this.onScroll=function(){if(!this.skipEvent){if(this.scrollTop=this.element.scrollTop,1!=this.coeff){var x=this.element.clientHeight/this.scrollHeight;this.scrollTop=this.scrollTop*(1-x)/(this.coeff-x)}this._emit("scroll",{data:this.scrollTop})}this.skipEvent=!1},this.getWidth=function(){return Math.max(this.isVisible?this.width:0,this.$minWidth||0)},this.setHeight=function(x){this.element.style.height=x+"px"},this.setInnerHeight=this.setScrollHeight=function(x){this.scrollHeight=x,x>32768?(this.coeff=32768/x,x=32768):1!=this.coeff&&(this.coeff=1),this.inner.style.height=x+"px"},this.setScrollTop=function(x){this.scrollTop!=x&&(this.skipEvent=!0,this.scrollTop=x,this.element.scrollTop=x*this.coeff)}}.call(c.prototype);var l=function(x,S){a.call(this,x),this.scrollLeft=0,this.height=S.$scrollbarWidth,this.inner.style.height=this.element.style.height=(this.height||15)+5+"px"};U.inherits(l,a),function(){this.classSuffix="-h",this.onScroll=function(){this.skipEvent||(this.scrollLeft=this.element.scrollLeft,this._emit("scroll",{data:this.scrollLeft})),this.skipEvent=!1},this.getHeight=function(){return this.isVisible?this.height:0},this.setWidth=function(x){this.element.style.width=x+"px"},this.setInnerWidth=function(x){this.inner.style.width=x+"px"},this.setScrollWidth=function(x){this.inner.style.width=x+"px"},this.setScrollLeft=function(x){this.scrollLeft!=x&&(this.skipEvent=!0,this.scrollLeft=this.element.scrollLeft=x)}}.call(l.prototype),S.ScrollBar=c,S.ScrollBarV=c,S.ScrollBarH=l,S.VScrollBar=c,S.HScrollBar=l})),ace.define("ace/renderloop",["require","exports","module","ace/lib/event"],(function(x,S,w){"use strict";var U=x("./lib/event"),r=function(x,S){this.onRender=x,this.pending=!1,this.changes=0,this.$recursionLimit=2,this.window=S||window;var w=this;this._flush=function(x){w.pending=!1;var S=w.changes;if(S&&(U.blockIdle(100),w.changes=0,w.onRender(S)),w.changes){if(w.$recursionLimit--<0)return;w.schedule()}else w.$recursionLimit=2}};(function(){this.schedule=function(x){this.changes=this.changes|x,this.changes&&!this.pending&&(U.nextFrame(this._flush),this.pending=!0)},this.clear=function(x){var S=this.changes;return this.changes=0,S}}).call(r.prototype),S.RenderLoop=r})),ace.define("ace/layer/font_metrics",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/event","ace/lib/useragent","ace/lib/event_emitter"],(function(x,S,w){var U=x("../lib/oop"),G=x("../lib/dom"),H=x("../lib/lang"),z=x("../lib/event"),j=x("../lib/useragent"),X=x("../lib/event_emitter").EventEmitter,K="function"==typeof ResizeObserver,q=200,Y=S.FontMetrics=function(x){this.el=G.createElement("div"),this.$setMeasureNodeStyles(this.el.style,!0),this.$main=G.createElement("div"),this.$setMeasureNodeStyles(this.$main.style),this.$measureNode=G.createElement("div"),this.$setMeasureNodeStyles(this.$measureNode.style),this.el.appendChild(this.$main),this.el.appendChild(this.$measureNode),x.appendChild(this.el),this.$measureNode.innerHTML=H.stringRepeat("X",256),this.$characterSize={width:0,height:0},K?this.$addObserver():this.checkForSizeChanges()};(function(){U.implement(this,X),this.$characterSize={width:0,height:0},this.$setMeasureNodeStyles=function(x,S){x.width=x.height="auto",x.left=x.top="0px",x.visibility="hidden",x.position="absolute",x.whiteSpace="pre",j.isIE<8?x["font-family"]="inherit":x.font="inherit",x.overflow=S?"hidden":"visible"},this.checkForSizeChanges=function(x){if(void 0===x&&(x=this.$measureSizes()),x&&(this.$characterSize.width!==x.width||this.$characterSize.height!==x.height)){this.$measureNode.style.fontWeight="bold";var S=this.$measureSizes();this.$measureNode.style.fontWeight="",this.$characterSize=x,this.charSizes=Object.create(null),this.allowBoldFonts=S&&S.width===x.width&&S.height===x.height,this._emit("changeCharacterSize",{data:x})}},this.$addObserver=function(){var x=this;this.$observer=new window.ResizeObserver((function(S){var w=S[0].contentRect;x.checkForSizeChanges({height:w.height,width:w.width/256})})),this.$observer.observe(this.$measureNode)},this.$pollSizeChanges=function(){if(this.$pollSizeChangesTimer||this.$observer)return this.$pollSizeChangesTimer;var x=this;return this.$pollSizeChangesTimer=z.onIdle((function t(){x.checkForSizeChanges(),z.onIdle(t,500)}),500)},this.setPolling=function(x){x?this.$pollSizeChanges():this.$pollSizeChangesTimer&&(clearInterval(this.$pollSizeChangesTimer),this.$pollSizeChangesTimer=0)},this.$measureSizes=function(x){var S={height:(x||this.$measureNode).clientHeight,width:(x||this.$measureNode).clientWidth/256};return 0===S.width||0===S.height?null:S},this.$measureCharWidth=function(x){return this.$main.innerHTML=H.stringRepeat(x,256),this.$main.getBoundingClientRect().width/256},this.getCharacterWidth=function(x){var S=this.charSizes[x];return void 0===S&&(S=this.charSizes[x]=this.$measureCharWidth(x)/this.$characterSize.width),S},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.$observer&&this.$observer.disconnect(),this.el&&this.el.parentNode&&this.el.parentNode.removeChild(this.el)},this.$getZoom=function e(x){return x?(window.getComputedStyle(x).zoom||1)*e(x.parentElement):1},this.$initTransformMeasureNodes=function(){var e=function(x,S){return["div",{style:"position: absolute;top:"+x+"px;left:"+S+"px;"}]};this.els=G.buildDom([e(0,0),e(q,0),e(0,q),e(q,q)],this.el)},this.transformCoordinates=function(x,S){function n(x,S,w){var U=x[1]*S[0]-x[0]*S[1];return[(-S[1]*w[0]+S[0]*w[1])/U,(+x[1]*w[0]-x[0]*w[1])/U]}function i(x,S){return[x[0]-S[0],x[1]-S[1]]}function r(x,S){return[x[0]+S[0],x[1]+S[1]]}function o(x,S){return[x*S[0],x*S[1]]}function s(x){var S=x.getBoundingClientRect();return[S.left,S.top]}x&&(x=o(1/this.$getZoom(this.el),x)),this.els||this.$initTransformMeasureNodes();var w=s(this.els[0]),U=s(this.els[1]),G=s(this.els[2]),H=s(this.els[3]),z=n(i(H,U),i(H,G),i(r(U,G),r(H,w))),j=o(1+z[0],i(U,w)),X=o(1+z[1],i(G,w));if(S){var K=S,Y=z[0]*K[0]/q+z[1]*K[1]/q+1,Z=r(o(K[0],j),o(K[1],X));return r(o(1/Y/q,Z),w)}var J=i(x,w),Q=n(i(j,o(z[0],J)),i(X,o(z[1],J)),J);return o(q,Q)}}).call(Y.prototype)})),ace.define("ace/virtual_renderer",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/config","ace/layer/gutter","ace/layer/marker","ace/layer/text","ace/layer/cursor","ace/scrollbar","ace/scrollbar","ace/renderloop","ace/layer/font_metrics","ace/lib/event_emitter","ace/lib/useragent"],(function(x,S,w){"use strict";var U=x("./lib/oop"),G=x("./lib/dom"),H=x("./config"),z=x("./layer/gutter").Gutter,j=x("./layer/marker").Marker,X=x("./layer/text").Text,K=x("./layer/cursor").Cursor,q=x("./scrollbar").HScrollBar,Y=x("./scrollbar").VScrollBar,Z=x("./renderloop").RenderLoop,J=x("./layer/font_metrics").FontMetrics,Q=x("./lib/event_emitter").EventEmitter,ee='.ace_br1 {border-top-left-radius : 3px;}.ace_br2 {border-top-right-radius : 3px;}.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}.ace_br4 {border-bottom-right-radius: 3px;}.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}.ace_br8 {border-bottom-left-radius : 3px;}.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_editor {position: relative;overflow: hidden;font: 12px/normal \'Monaco\', \'Menlo\', \'Ubuntu Mono\', \'Consolas\', \'source-code-pro\', monospace;direction: ltr;text-align: left;-webkit-tap-highlight-color: rgba(0, 0, 0, 0);}.ace_scroller {position: absolute;overflow: hidden;top: 0;bottom: 0;background-color: inherit;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;cursor: text;}.ace_content {position: absolute;box-sizing: border-box;min-width: 100%;contain: style size layout;}.ace_dragging .ace_scroller:before{position: absolute;top: 0;left: 0;right: 0;bottom: 0;content: \'\';background: rgba(250, 250, 250, 0.01);z-index: 1000;}.ace_dragging.ace_dark .ace_scroller:before{background: rgba(0, 0, 0, 0.01);}.ace_selecting, .ace_selecting * {cursor: text !important;}.ace_gutter {position: absolute;overflow : hidden;width: auto;top: 0;bottom: 0;left: 0;cursor: default;z-index: 4;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;contain: style size layout;}.ace_gutter-active-line {position: absolute;left: 0;right: 0;}.ace_scroller.ace_scroll-left {box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;}.ace_gutter-cell {position: absolute;top: 0;left: 0;right: 0;padding-left: 19px;padding-right: 6px;background-repeat: no-repeat;}.ace_gutter-cell.ace_error {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==");background-repeat: no-repeat;background-position: 2px center;}.ace_gutter-cell.ace_warning {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==");background-position: 2px center;}.ace_gutter-cell.ace_info {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=");background-position: 2px center;}.ace_dark .ace_gutter-cell.ace_info {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC");}.ace_scrollbar {contain: strict;position: absolute;right: 0;bottom: 0;z-index: 6;}.ace_scrollbar-inner {position: absolute;cursor: text;left: 0;top: 0;}.ace_scrollbar-v{overflow-x: hidden;overflow-y: scroll;top: 0;}.ace_scrollbar-h {overflow-x: scroll;overflow-y: hidden;left: 0;}.ace_print-margin {position: absolute;height: 100%;}.ace_text-input {position: absolute;z-index: 0;width: 0.5em;height: 1em;opacity: 0;background: transparent;-moz-appearance: none;appearance: none;border: none;resize: none;outline: none;overflow: hidden;font: inherit;padding: 0 1px;margin: 0 -1px;contain: strict;-ms-user-select: text;-moz-user-select: text;-webkit-user-select: text;user-select: text;white-space: pre!important;}.ace_text-input.ace_composition {background: transparent;color: inherit;z-index: 1000;opacity: 1;}.ace_composition_placeholder { color: transparent }.ace_composition_marker { border-bottom: 1px solid;position: absolute;border-radius: 0;margin-top: 1px;}[ace_nocontext=true] {transform: none!important;filter: none!important;perspective: none!important;clip-path: none!important;mask : none!important;contain: none!important;perspective: none!important;mix-blend-mode: initial!important;z-index: auto;}.ace_layer {z-index: 1;position: absolute;overflow: hidden;word-wrap: normal;white-space: pre;height: 100%;width: 100%;box-sizing: border-box;pointer-events: none;}.ace_gutter-layer {position: relative;width: auto;text-align: right;pointer-events: auto;height: 1000000px;contain: style size layout;}.ace_text-layer {font: inherit !important;position: absolute;height: 1000000px;width: 1000000px;contain: style size layout;}.ace_text-layer > .ace_line, .ace_text-layer > .ace_line_group {contain: style size layout;position: absolute;top: 0;left: 0;right: 0;}.ace_hidpi .ace_text-layer,.ace_hidpi .ace_gutter-layer,.ace_hidpi .ace_content,.ace_hidpi .ace_gutter {contain: strict;will-change: transform;}.ace_hidpi .ace_text-layer > .ace_line, .ace_hidpi .ace_text-layer > .ace_line_group {contain: strict;}.ace_cjk {display: inline-block;text-align: center;}.ace_cursor-layer {z-index: 4;}.ace_cursor {z-index: 4;position: absolute;box-sizing: border-box;border-left: 2px solid;transform: translatez(0);}.ace_multiselect .ace_cursor {border-left-width: 1px;}.ace_slim-cursors .ace_cursor {border-left-width: 1px;}.ace_overwrite-cursors .ace_cursor {border-left-width: 0;border-bottom: 1px solid;}.ace_hidden-cursors .ace_cursor {opacity: 0.2;}.ace_hasPlaceholder .ace_hidden-cursors .ace_cursor {opacity: 0;}.ace_smooth-blinking .ace_cursor {transition: opacity 0.18s;}.ace_animate-blinking .ace_cursor {animation-duration: 1000ms;animation-timing-function: step-end;animation-name: blink-ace-animate;animation-iteration-count: infinite;}.ace_animate-blinking.ace_smooth-blinking .ace_cursor {animation-duration: 1000ms;animation-timing-function: ease-in-out;animation-name: blink-ace-animate-smooth;}@keyframes blink-ace-animate {from, to { opacity: 1; }60% { opacity: 0; }}@keyframes blink-ace-animate-smooth {from, to { opacity: 1; }45% { opacity: 1; }60% { opacity: 0; }85% { opacity: 0; }}.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {position: absolute;z-index: 3;}.ace_marker-layer .ace_selection {position: absolute;z-index: 5;}.ace_marker-layer .ace_bracket {position: absolute;z-index: 6;}.ace_marker-layer .ace_active-line {position: absolute;z-index: 2;}.ace_marker-layer .ace_selected-word {position: absolute;z-index: 4;box-sizing: border-box;}.ace_line .ace_fold {box-sizing: border-box;display: inline-block;height: 11px;margin-top: -2px;vertical-align: middle;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="),url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=");background-repeat: no-repeat, repeat-x;background-position: center center, top left;color: transparent;border: 1px solid black;border-radius: 2px;cursor: pointer;pointer-events: auto;}.ace_dark .ace_fold {}.ace_fold:hover{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="),url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC");}.ace_tooltip {background-color: #FFF;background-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));border: 1px solid gray;border-radius: 1px;box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);color: black;max-width: 100%;padding: 3px 4px;position: fixed;z-index: 999999;box-sizing: border-box;cursor: default;white-space: pre;word-wrap: break-word;line-height: normal;font-style: normal;font-weight: normal;letter-spacing: normal;pointer-events: none;}.ace_folding-enabled > .ace_gutter-cell {padding-right: 13px;}.ace_fold-widget {box-sizing: border-box;margin: 0 -12px 0 1px;display: none;width: 11px;vertical-align: top;background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==");background-repeat: no-repeat;background-position: center;border-radius: 3px;border: 1px solid transparent;cursor: pointer;}.ace_folding-enabled .ace_fold-widget {display: inline-block; }.ace_fold-widget.ace_end {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==");}.ace_fold-widget.ace_closed {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==");}.ace_fold-widget:hover {border: 1px solid rgba(0, 0, 0, 0.3);background-color: rgba(255, 255, 255, 0.2);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);}.ace_fold-widget:active {border: 1px solid rgba(0, 0, 0, 0.4);background-color: rgba(0, 0, 0, 0.05);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);}.ace_dark .ace_fold-widget {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC");}.ace_dark .ace_fold-widget.ace_end {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==");}.ace_dark .ace_fold-widget.ace_closed {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==");}.ace_dark .ace_fold-widget:hover {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);background-color: rgba(255, 255, 255, 0.1);}.ace_dark .ace_fold-widget:active {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);}.ace_inline_button {border: 1px solid lightgray;display: inline-block;margin: -1px 8px;padding: 0 5px;pointer-events: auto;cursor: pointer;}.ace_inline_button:hover {border-color: gray;background: rgba(200,200,200,0.2);display: inline-block;pointer-events: auto;}.ace_fold-widget.ace_invalid {background-color: #FFB4B4;border-color: #DE5555;}.ace_fade-fold-widgets .ace_fold-widget {transition: opacity 0.4s ease 0.05s;opacity: 0;}.ace_fade-fold-widgets:hover .ace_fold-widget {transition: opacity 0.05s ease 0.05s;opacity:1;}.ace_underline {text-decoration: underline;}.ace_bold {font-weight: bold;}.ace_nobold .ace_bold {font-weight: normal;}.ace_italic {font-style: italic;}.ace_error-marker {background-color: rgba(255, 0, 0,0.2);position: absolute;z-index: 9;}.ace_highlight-marker {background-color: rgba(255, 255, 0,0.2);position: absolute;z-index: 8;}.ace_mobile-menu {position: absolute;line-height: 1.5;border-radius: 4px;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;background: white;box-shadow: 1px 3px 2px grey;border: 1px solid #dcdcdc;color: black;}.ace_dark > .ace_mobile-menu {background: #333;color: #ccc;box-shadow: 1px 3px 2px grey;border: 1px solid #444;}.ace_mobile-button {padding: 2px;cursor: pointer;overflow: hidden;}.ace_mobile-button:hover {background-color: #eee;opacity:1;}.ace_mobile-button:active {background-color: #ddd;}.ace_placeholder {font-family: arial;transform: scale(0.9);opacity: 0.7;transform-origin: left;text-indent: 10px;}',te=x("./lib/useragent"),ne=te.isIE;G.importCssString(ee,"ace_editor.css");var _=function(x,S){var w=this;this.container=x||G.createElement("div"),G.addCssClass(this.container,"ace_editor"),G.HI_DPI&&G.addCssClass(this.container,"ace_hidpi"),this.setTheme(S),this.$gutter=G.createElement("div"),this.$gutter.className="ace_gutter",this.container.appendChild(this.$gutter),this.$gutter.setAttribute("aria-hidden",!0),this.scroller=G.createElement("div"),this.scroller.className="ace_scroller",this.container.appendChild(this.scroller),this.content=G.createElement("div"),this.content.className="ace_content",this.scroller.appendChild(this.content),this.$gutterLayer=new z(this.$gutter),this.$gutterLayer.on("changeGutterWidth",this.onGutterResize.bind(this)),this.$markerBack=new j(this.content);var U=this.$textLayer=new X(this.content);this.canvas=U.element,this.$markerFront=new j(this.content),this.$cursorLayer=new K(this.content),this.$horizScroll=!1,this.$vScroll=!1,this.scrollBar=this.scrollBarV=new Y(this.container,this),this.scrollBarH=new q(this.container,this),this.scrollBarV.addEventListener("scroll",(function(x){w.$scrollAnimation||w.session.setScrollTop(x.data-w.scrollMargin.top)})),this.scrollBarH.addEventListener("scroll",(function(x){w.$scrollAnimation||w.session.setScrollLeft(x.data-w.scrollMargin.left)})),this.scrollTop=0,this.scrollLeft=0,this.cursorPos={row:0,column:0},this.$fontMetrics=new J(this.container),this.$textLayer.$setFontMetrics(this.$fontMetrics),this.$textLayer.addEventListener("changeCharacterSize",(function(x){w.updateCharacterSize(),w.onResize(!0,w.gutterWidth,w.$size.width,w.$size.height),w._signal("changeCharacterSize",x)})),this.$size={width:0,height:0,scrollerHeight:0,scrollerWidth:0,$dirty:!0},this.layerConfig={width:1,padding:0,firstRow:0,firstRowScreen:0,lastRow:0,lineHeight:0,characterWidth:0,minHeight:1,maxHeight:1,offset:0,height:1,gutterOffset:1},this.scrollMargin={left:0,right:0,top:0,bottom:0,v:0,h:0},this.margin={left:0,right:0,top:0,bottom:0,v:0,h:0},this.$keepTextAreaAtCursor=!te.isIOS,this.$loop=new Z(this.$renderChanges.bind(this),this.container.ownerDocument.defaultView),this.$loop.schedule(this.CHANGE_FULL),this.updateCharacterSize(),this.setPadding(4),H.resetOptions(this),H._signal("renderer",this)};(function(){this.CHANGE_CURSOR=1,this.CHANGE_MARKER=2,this.CHANGE_GUTTER=4,this.CHANGE_SCROLL=8,this.CHANGE_LINES=16,this.CHANGE_TEXT=32,this.CHANGE_SIZE=64,this.CHANGE_MARKER_BACK=128,this.CHANGE_MARKER_FRONT=256,this.CHANGE_FULL=512,this.CHANGE_H_SCROLL=1024,U.implement(this,Q),this.updateCharacterSize=function(){this.$textLayer.allowBoldFonts!=this.$allowBoldFonts&&(this.$allowBoldFonts=this.$textLayer.allowBoldFonts,this.setStyle("ace_nobold",!this.$allowBoldFonts)),this.layerConfig.characterWidth=this.characterWidth=this.$textLayer.getCharacterWidth(),this.layerConfig.lineHeight=this.lineHeight=this.$textLayer.getLineHeight(),this.$updatePrintMargin(),G.setStyle(this.scroller.style,"line-height",this.lineHeight+"px")},this.setSession=function(x){this.session&&this.session.doc.off("changeNewLineMode",this.onChangeNewLineMode),this.session=x,x&&this.scrollMargin.top&&x.getScrollTop()<=0&&x.setScrollTop(-this.scrollMargin.top),this.$cursorLayer.setSession(x),this.$markerBack.setSession(x),this.$markerFront.setSession(x),this.$gutterLayer.setSession(x),this.$textLayer.setSession(x),x&&(this.$loop.schedule(this.CHANGE_FULL),this.session.$setFontMetrics(this.$fontMetrics),this.scrollBarH.scrollLeft=this.scrollBarV.scrollTop=null,this.onChangeNewLineMode=this.onChangeNewLineMode.bind(this),this.onChangeNewLineMode(),this.session.doc.on("changeNewLineMode",this.onChangeNewLineMode))},this.updateLines=function(x,S,w){if(void 0===S&&(S=1/0),this.$changedLines?(this.$changedLines.firstRow>x&&(this.$changedLines.firstRow=x),this.$changedLines.lastRowthis.layerConfig.lastRow||this.$loop.schedule(this.CHANGE_LINES)},this.onChangeNewLineMode=function(){this.$loop.schedule(this.CHANGE_TEXT),this.$textLayer.$updateEolChar(),this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR)},this.onChangeTabSize=function(){this.$loop.schedule(this.CHANGE_TEXT|this.CHANGE_MARKER),this.$textLayer.onChangeTabSize()},this.updateText=function(){this.$loop.schedule(this.CHANGE_TEXT)},this.updateFull=function(x){x?this.$renderChanges(this.CHANGE_FULL,!0):this.$loop.schedule(this.CHANGE_FULL)},this.updateFontSize=function(){this.$textLayer.checkForSizeChanges()},this.$changes=0,this.$updateSizeAsync=function(){this.$loop.pending?this.$size.$dirty=!0:this.onResize()},this.onResize=function(x,S,w,U){if(!(this.resizing>2)){this.resizing>0?this.resizing++:this.resizing=x?1:0;var G=this.container;U||(U=G.clientHeight||G.scrollHeight),w||(w=G.clientWidth||G.scrollWidth);var H=this.$updateCachedSize(x,S,w,U);if(!this.$size.scrollerHeight||!w&&!U)return this.resizing=0;x&&(this.$gutterLayer.$padding=null),x?this.$renderChanges(H|this.$changes,!0):this.$loop.schedule(H|this.$changes),this.resizing&&(this.resizing=0),this.scrollBarV.scrollLeft=this.scrollBarV.scrollTop=null}},this.$updateCachedSize=function(x,S,w,U){U-=this.$extraHeight||0;var H=0,z=this.$size,j={width:z.width,height:z.height,scrollerHeight:z.scrollerHeight,scrollerWidth:z.scrollerWidth};if(U&&(x||z.height!=U)&&(z.height=U,H|=this.CHANGE_SIZE,z.scrollerHeight=z.height,this.$horizScroll&&(z.scrollerHeight-=this.scrollBarH.getHeight()),this.scrollBarV.element.style.bottom=this.scrollBarH.getHeight()+"px",H|=this.CHANGE_SCROLL),w&&(x||z.width!=w)){H|=this.CHANGE_SIZE,z.width=w,null==S&&(S=this.$showGutter?this.$gutter.offsetWidth:0),this.gutterWidth=S,G.setStyle(this.scrollBarH.element.style,"left",S+"px"),G.setStyle(this.scroller.style,"left",S+this.margin.left+"px"),z.scrollerWidth=Math.max(0,w-S-this.scrollBarV.getWidth()-this.margin.h),G.setStyle(this.$gutter.style,"left",this.margin.left+"px");var X=this.scrollBarV.getWidth()+"px";G.setStyle(this.scrollBarH.element.style,"right",X),G.setStyle(this.scroller.style,"right",X),G.setStyle(this.scroller.style,"bottom",this.scrollBarH.getHeight()),(this.session&&this.session.getUseWrapMode()&&this.adjustWrapLimit()||x)&&(H|=this.CHANGE_FULL)}return z.$dirty=!w||!U,H&&this._signal("resize",j),H},this.onGutterResize=function(x){var S=this.$showGutter?x:0;S!=this.gutterWidth&&(this.$changes|=this.$updateCachedSize(!0,S,this.$size.width,this.$size.height)),this.session.getUseWrapMode()&&this.adjustWrapLimit()||this.$size.$dirty?this.$loop.schedule(this.CHANGE_FULL):this.$computeLayerConfig()},this.adjustWrapLimit=function(){var x=this.$size.scrollerWidth-2*this.$padding,S=Math.floor(x/this.characterWidth);return this.session.adjustWrapLimit(S,this.$showPrintMargin&&this.$printMarginColumn)},this.setAnimatedScroll=function(x){this.setOption("animatedScroll",x)},this.getAnimatedScroll=function(){return this.$animatedScroll},this.setShowInvisibles=function(x){this.setOption("showInvisibles",x),this.session.$bidiHandler.setShowInvisibles(x)},this.getShowInvisibles=function(){return this.getOption("showInvisibles")},this.getDisplayIndentGuides=function(){return this.getOption("displayIndentGuides")},this.setDisplayIndentGuides=function(x){this.setOption("displayIndentGuides",x)},this.setShowPrintMargin=function(x){this.setOption("showPrintMargin",x)},this.getShowPrintMargin=function(){return this.getOption("showPrintMargin")},this.setPrintMarginColumn=function(x){this.setOption("printMarginColumn",x)},this.getPrintMarginColumn=function(){return this.getOption("printMarginColumn")},this.getShowGutter=function(){return this.getOption("showGutter")},this.setShowGutter=function(x){return this.setOption("showGutter",x)},this.getFadeFoldWidgets=function(){return this.getOption("fadeFoldWidgets")},this.setFadeFoldWidgets=function(x){this.setOption("fadeFoldWidgets",x)},this.setHighlightGutterLine=function(x){this.setOption("highlightGutterLine",x)},this.getHighlightGutterLine=function(){return this.getOption("highlightGutterLine")},this.$updatePrintMargin=function(){if(this.$showPrintMargin||this.$printMarginEl){if(!this.$printMarginEl){var x=G.createElement("div");x.className="ace_layer ace_print-margin-layer",this.$printMarginEl=G.createElement("div"),this.$printMarginEl.className="ace_print-margin",x.appendChild(this.$printMarginEl),this.content.insertBefore(x,this.content.firstChild)}var S=this.$printMarginEl.style;S.left=Math.round(this.characterWidth*this.$printMarginColumn+this.$padding)+"px",S.visibility=this.$showPrintMargin?"visible":"hidden",this.session&&-1==this.session.$wrap&&this.adjustWrapLimit()}},this.getContainerElement=function(){return this.container},this.getMouseEventTarget=function(){return this.scroller},this.getTextAreaContainer=function(){return this.container},this.$moveTextAreaToCursor=function(){if(!this.$isMousePressed){var x=this.textarea.style,S=this.$composition;if(this.$keepTextAreaAtCursor||S){var w=this.$cursorLayer.$pixelPos;if(w){S&&S.markerRange&&(w=this.$cursorLayer.getPixelPosition(S.markerRange.start,!0));var U=this.layerConfig,H=w.top,z=w.left;H-=U.offset;var j=S&&S.useTextareaForIME?this.lineHeight:ne?0:1;if(H<0||H>U.height-j)G.translate(this.textarea,0,0);else{var X=1,K=this.$size.height-j;if(S)if(S.useTextareaForIME){var q=this.textarea.value;X=this.characterWidth*this.session.$getStringScreenWidth(q)[0]}else H+=this.lineHeight+2;else H+=this.lineHeight;(z-=this.scrollLeft)>this.$size.scrollerWidth-X&&(z=this.$size.scrollerWidth-X),z+=this.gutterWidth+this.margin.left,G.setStyle(x,"height",j+"px"),G.setStyle(x,"width",X+"px"),G.translate(this.textarea,Math.min(z,this.$size.scrollerWidth-X),Math.min(H,K))}}}else G.translate(this.textarea,-100,0)}},this.getFirstVisibleRow=function(){return this.layerConfig.firstRow},this.getFirstFullyVisibleRow=function(){return this.layerConfig.firstRow+(0===this.layerConfig.offset?0:1)},this.getLastFullyVisibleRow=function(){var x=this.layerConfig,S=x.lastRow;return this.session.documentToScreenRow(S,0)*x.lineHeight-this.session.getScrollTop()>x.height-x.lineHeight?S-1:S},this.getLastVisibleRow=function(){return this.layerConfig.lastRow},this.$padding=null,this.setPadding=function(x){this.$padding=x,this.$textLayer.setPadding(x),this.$cursorLayer.setPadding(x),this.$markerFront.setPadding(x),this.$markerBack.setPadding(x),this.$loop.schedule(this.CHANGE_FULL),this.$updatePrintMargin()},this.setScrollMargin=function(x,S,w,U){var G=this.scrollMargin;G.top=0|x,G.bottom=0|S,G.right=0|U,G.left=0|w,G.v=G.top+G.bottom,G.h=G.left+G.right,G.top&&this.scrollTop<=0&&this.session&&this.session.setScrollTop(-G.top),this.updateFull()},this.setMargin=function(x,S,w,U){var G=this.margin;G.top=0|x,G.bottom=0|S,G.right=0|U,G.left=0|w,G.v=G.top+G.bottom,G.h=G.left+G.right,this.$updateCachedSize(!0,this.gutterWidth,this.$size.width,this.$size.height),this.updateFull()},this.getHScrollBarAlwaysVisible=function(){return this.$hScrollBarAlwaysVisible},this.setHScrollBarAlwaysVisible=function(x){this.setOption("hScrollBarAlwaysVisible",x)},this.getVScrollBarAlwaysVisible=function(){return this.$vScrollBarAlwaysVisible},this.setVScrollBarAlwaysVisible=function(x){this.setOption("vScrollBarAlwaysVisible",x)},this.$updateScrollBarV=function(){var x=this.layerConfig.maxHeight,S=this.$size.scrollerHeight;!this.$maxLines&&this.$scrollPastEnd&&(x-=(S-this.lineHeight)*this.$scrollPastEnd,this.scrollTop>x-S&&(x=this.scrollTop+S,this.scrollBarV.scrollTop=null)),this.scrollBarV.setScrollHeight(x+this.scrollMargin.v),this.scrollBarV.setScrollTop(this.scrollTop+this.scrollMargin.top)},this.$updateScrollBarH=function(){this.scrollBarH.setScrollWidth(this.layerConfig.width+2*this.$padding+this.scrollMargin.h),this.scrollBarH.setScrollLeft(this.scrollLeft+this.scrollMargin.left)},this.$frozen=!1,this.freeze=function(){this.$frozen=!0},this.unfreeze=function(){this.$frozen=!1},this.$renderChanges=function(x,S){if(this.$changes&&(x|=this.$changes,this.$changes=0),this.session&&this.container.offsetWidth&&!this.$frozen&&(x||S)){if(this.$size.$dirty)return this.$changes|=x,this.onResize(!0);this.lineHeight||this.$textLayer.checkForSizeChanges(),this._signal("beforeRender"),this.session&&this.session.$bidiHandler&&this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);var w=this.layerConfig;if(x&this.CHANGE_FULL||x&this.CHANGE_SIZE||x&this.CHANGE_TEXT||x&this.CHANGE_LINES||x&this.CHANGE_SCROLL||x&this.CHANGE_H_SCROLL){if(x|=this.$computeLayerConfig()|this.$loop.clear(),w.firstRow!=this.layerConfig.firstRow&&w.firstRowScreen==this.layerConfig.firstRowScreen){var U=this.scrollTop+(w.firstRow-this.layerConfig.firstRow)*this.lineHeight;U>0&&(this.scrollTop=U,x|=this.CHANGE_SCROLL,x|=this.$computeLayerConfig()|this.$loop.clear())}w=this.layerConfig,this.$updateScrollBarV(),x&this.CHANGE_H_SCROLL&&this.$updateScrollBarH(),G.translate(this.content,-this.scrollLeft,-w.offset);var H=w.width+2*this.$padding+"px",z=w.minHeight+"px";G.setStyle(this.content.style,"width",H),G.setStyle(this.content.style,"height",z)}if(x&this.CHANGE_H_SCROLL&&(G.translate(this.content,-this.scrollLeft,-w.offset),this.scroller.className=this.scrollLeft<=0?"ace_scroller":"ace_scroller ace_scroll-left"),x&this.CHANGE_FULL)return this.$changedLines=null,this.$textLayer.update(w),this.$showGutter&&this.$gutterLayer.update(w),this.$markerBack.update(w),this.$markerFront.update(w),this.$cursorLayer.update(w),this.$moveTextAreaToCursor(),void this._signal("afterRender");if(x&this.CHANGE_SCROLL)return this.$changedLines=null,x&this.CHANGE_TEXT||x&this.CHANGE_LINES?this.$textLayer.update(w):this.$textLayer.scrollLines(w),this.$showGutter&&(x&this.CHANGE_GUTTER||x&this.CHANGE_LINES?this.$gutterLayer.update(w):this.$gutterLayer.scrollLines(w)),this.$markerBack.update(w),this.$markerFront.update(w),this.$cursorLayer.update(w),this.$moveTextAreaToCursor(),void this._signal("afterRender");x&this.CHANGE_TEXT?(this.$changedLines=null,this.$textLayer.update(w),this.$showGutter&&this.$gutterLayer.update(w)):x&this.CHANGE_LINES?(this.$updateLines()||x&this.CHANGE_GUTTER&&this.$showGutter)&&this.$gutterLayer.update(w):x&this.CHANGE_TEXT||x&this.CHANGE_GUTTER?this.$showGutter&&this.$gutterLayer.update(w):x&this.CHANGE_CURSOR&&this.$highlightGutterLine&&this.$gutterLayer.updateLineHighlight(w),x&this.CHANGE_CURSOR&&(this.$cursorLayer.update(w),this.$moveTextAreaToCursor()),x&(this.CHANGE_MARKER|this.CHANGE_MARKER_FRONT)&&this.$markerFront.update(w),x&(this.CHANGE_MARKER|this.CHANGE_MARKER_BACK)&&this.$markerBack.update(w),this._signal("afterRender")}else this.$changes|=x},this.$autosize=function(){var x=this.session.getScreenLength()*this.lineHeight,S=this.$maxLines*this.lineHeight,w=Math.min(S,Math.max((this.$minLines||1)*this.lineHeight,x))+this.scrollMargin.v+(this.$extraHeight||0);this.$horizScroll&&(w+=this.scrollBarH.getHeight()),this.$maxPixelHeight&&w>this.$maxPixelHeight&&(w=this.$maxPixelHeight);var U=!(w<=2*this.lineHeight)&&x>S;if(w!=this.desiredHeight||this.$size.height!=this.desiredHeight||U!=this.$vScroll){U!=this.$vScroll&&(this.$vScroll=U,this.scrollBarV.setVisible(U));var G=this.container.clientWidth;this.container.style.height=w+"px",this.$updateCachedSize(!0,this.$gutterWidth,G,w),this.desiredHeight=w,this._signal("autosize")}},this.$computeLayerConfig=function(){var x=this.session,S=this.$size,w=S.height<=2*this.lineHeight,U=this.session.getScreenLength()*this.lineHeight,G=this.$getLongestLine(),H=!w&&(this.$hScrollBarAlwaysVisible||S.scrollerWidth-G-2*this.$padding<0),z=this.$horizScroll!==H;z&&(this.$horizScroll=H,this.scrollBarH.setVisible(H));var j=this.$vScroll;this.$maxLines&&this.lineHeight>1&&this.$autosize();var X=S.scrollerHeight+this.lineHeight,K=!this.$maxLines&&this.$scrollPastEnd?(S.scrollerHeight-this.lineHeight)*this.$scrollPastEnd:0;U+=K;var q=this.scrollMargin;this.session.setScrollTop(Math.max(-q.top,Math.min(this.scrollTop,U-S.scrollerHeight+q.bottom))),this.session.setScrollLeft(Math.max(-q.left,Math.min(this.scrollLeft,G+2*this.$padding-S.scrollerWidth+q.right)));var Y=!w&&(this.$vScrollBarAlwaysVisible||S.scrollerHeight-U+K<0||this.scrollTop>q.top),Z=j!==Y;Z&&(this.$vScroll=Y,this.scrollBarV.setVisible(Y));var J,Q,ee=this.scrollTop%this.lineHeight,te=Math.ceil(X/this.lineHeight)-1,ne=Math.max(0,Math.round((this.scrollTop-ee)/this.lineHeight)),ie=ne+te,re=this.lineHeight;ne=x.screenToDocumentRow(ne,0);var oe=x.getFoldLine(ne);oe&&(ne=oe.start.row),J=x.documentToScreenRow(ne,0),Q=x.getRowLength(ne)*re,ie=Math.min(x.screenToDocumentRow(ie,0),x.getLength()-1),X=S.scrollerHeight+x.getRowLength(ie)*re+Q,ee=this.scrollTop-J*re;var ae=0;return(this.layerConfig.width!=G||z)&&(ae=this.CHANGE_H_SCROLL),(z||Z)&&(ae|=this.$updateCachedSize(!0,this.gutterWidth,S.width,S.height),this._signal("scrollbarVisibilityChanged"),Z&&(G=this.$getLongestLine())),this.layerConfig={width:G,padding:this.$padding,firstRow:ne,firstRowScreen:J,lastRow:ie,lineHeight:re,characterWidth:this.characterWidth,minHeight:X,maxHeight:U,offset:ee,gutterOffset:re?Math.max(0,Math.ceil((ee+S.height-S.scrollerHeight)/re)):0,height:this.$size.scrollerHeight},this.session.$bidiHandler&&this.session.$bidiHandler.setContentWidth(G-this.$padding),ae},this.$updateLines=function(){if(this.$changedLines){var x=this.$changedLines.firstRow,S=this.$changedLines.lastRow;this.$changedLines=null;var w=this.layerConfig;if(!(x>w.lastRow+1||Sthis.$textLayer.MAX_LINE_LENGTH&&(x=this.$textLayer.MAX_LINE_LENGTH+30),Math.max(this.$size.scrollerWidth-2*this.$padding,Math.round(x*this.characterWidth))},this.updateFrontMarkers=function(){this.$markerFront.setMarkers(this.session.getMarkers(!0)),this.$loop.schedule(this.CHANGE_MARKER_FRONT)},this.updateBackMarkers=function(){this.$markerBack.setMarkers(this.session.getMarkers()),this.$loop.schedule(this.CHANGE_MARKER_BACK)},this.addGutterDecoration=function(x,S){this.$gutterLayer.addGutterDecoration(x,S)},this.removeGutterDecoration=function(x,S){this.$gutterLayer.removeGutterDecoration(x,S)},this.updateBreakpoints=function(x){this.$loop.schedule(this.CHANGE_GUTTER)},this.setAnnotations=function(x){this.$gutterLayer.setAnnotations(x),this.$loop.schedule(this.CHANGE_GUTTER)},this.updateCursor=function(){this.$loop.schedule(this.CHANGE_CURSOR)},this.hideCursor=function(){this.$cursorLayer.hideCursor()},this.showCursor=function(){this.$cursorLayer.showCursor()},this.scrollSelectionIntoView=function(x,S,w){this.scrollCursorIntoView(x,w),this.scrollCursorIntoView(S,w)},this.scrollCursorIntoView=function(x,S,w){if(0!==this.$size.scrollerHeight){var U=this.$cursorLayer.getPixelPosition(x),G=U.left,H=U.top,z=w&&w.top||0,j=w&&w.bottom||0,X=this.$scrollAnimation?this.session.getScrollTop():this.scrollTop;X+z>H?(S&&X+z>H+this.lineHeight&&(H-=S*this.$size.scrollerHeight),0===H&&(H=-this.scrollMargin.top),this.session.setScrollTop(H)):X+this.$size.scrollerHeight-jG?(G=1-this.scrollMargin.top||S>0&&this.session.getScrollTop()+this.$size.scrollerHeight-this.layerConfig.maxHeight<-1+this.scrollMargin.bottom||x<0&&this.session.getScrollLeft()>=1-this.scrollMargin.left||x>0&&this.session.getScrollLeft()+this.$size.scrollerWidth-this.layerConfig.width<-1+this.scrollMargin.right||void 0},this.pixelToScreenCoordinates=function(x,S){var w;if(this.$hasCssTransforms){w={top:0,left:0};var U=this.$fontMetrics.transformCoordinates([x,S]);x=U[1]-this.gutterWidth-this.margin.left,S=U[0]}else w=this.scroller.getBoundingClientRect();var G=x+this.scrollLeft-w.left-this.$padding,H=G/this.characterWidth,z=Math.floor((S+this.scrollTop-w.top)/this.lineHeight),j=this.$blockCursor?Math.floor(H):Math.round(H);return{row:z,column:j,side:H-j>0?1:-1,offsetX:G}},this.screenToTextCoordinates=function(x,S){var w;if(this.$hasCssTransforms){w={top:0,left:0};var U=this.$fontMetrics.transformCoordinates([x,S]);x=U[1]-this.gutterWidth-this.margin.left,S=U[0]}else w=this.scroller.getBoundingClientRect();var G=x+this.scrollLeft-w.left-this.$padding,H=G/this.characterWidth,z=this.$blockCursor?Math.floor(H):Math.round(H),j=Math.floor((S+this.scrollTop-w.top)/this.lineHeight);return this.session.screenToDocumentPosition(j,Math.max(z,0),G)},this.textToScreenCoordinates=function(x,S){var w=this.scroller.getBoundingClientRect(),U=this.session.documentToScreenPosition(x,S),G=this.$padding+(this.session.$bidiHandler.isBidiRow(U.row,x)?this.session.$bidiHandler.getPosLeft(U.column):Math.round(U.column*this.characterWidth)),H=U.row*this.lineHeight;return{pageX:w.left+G-this.scrollLeft,pageY:w.top+H-this.scrollTop}},this.visualizeFocus=function(){G.addCssClass(this.container,"ace_focus")},this.visualizeBlur=function(){G.removeCssClass(this.container,"ace_focus")},this.showComposition=function(x){this.$composition=x,x.cssText||(x.cssText=this.textarea.style.cssText),x.useTextareaForIME=this.$useTextareaForIME,this.$useTextareaForIME?(G.addCssClass(this.textarea,"ace_composition"),this.textarea.style.cssText="",this.$moveTextAreaToCursor(),this.$cursorLayer.element.style.display="none"):x.markerId=this.session.addMarker(x.markerRange,"ace_composition_marker","text")},this.setCompositionText=function(x){var S=this.session.selection.cursor;this.addToken(x,"composition_placeholder",S.row,S.column),this.$moveTextAreaToCursor()},this.hideComposition=function(){this.$composition&&(this.$composition.markerId&&this.session.removeMarker(this.$composition.markerId),G.removeCssClass(this.textarea,"ace_composition"),this.textarea.style.cssText=this.$composition.cssText,this.$composition=null,this.$cursorLayer.element.style.display="")},this.addToken=function(x,S,w,U){var G=this.session;G.bgTokenizer.lines[w]=null;var H={type:S,value:x},z=G.getTokens(w);if(null==U)z.push(H);else for(var j=0,X=0;X50&&x.length>this.$doc.getLength()>>1?this.call("setValue",[this.$doc.getValue()]):this.emit("change",{data:x}))}}).call(c.prototype),S.UIWorkerClient=function(x,S,w){var U=null,G=!1,j=Object.create(H),X=[],K=new c({messageBuffer:X,terminate:function(){},postMessage:function(x){X.push(x),U&&(G?setTimeout(h):h())}});K.setEmitSync=function(x){G=x};var h=function(){var x=X.shift();x.command?U[x.command].apply(U,x.args):x.event&&j._signal(x.event,x.data)};return j.postMessage=function(x){K.onMessage({data:x})},j.callback=function(x,S){this.postMessage({type:"call",id:S,data:x})},j.emit=function(x,S){this.postMessage({type:"event",name:x,data:S})},z.loadModule(["worker",S],(function(x){for(U=new x[w](j);X.length;)h()})),K},S.WorkerClient=c,S.createWorker=a})),ace.define("ace/placeholder",["require","exports","module","ace/range","ace/lib/event_emitter","ace/lib/oop"],(function(x,S,w){"use strict";var U=x("./range").Range,G=x("./lib/event_emitter").EventEmitter,H=x("./lib/oop"),s=function(x,S,w,U,G,H){var z=this;this.length=S,this.session=x,this.doc=x.getDocument(),this.mainClass=G,this.othersClass=H,this.$onUpdate=this.onUpdate.bind(this),this.doc.on("change",this.$onUpdate),this.$others=U,this.$onCursorChange=function(){setTimeout((function(){z.onCursorChange()}))},this.$pos=w;var j=x.getUndoManager().$undoStack||x.getUndoManager().$undostack||{length:-1};this.$undoStackDepth=j.length,this.setup(),x.selection.on("changeCursor",this.$onCursorChange)};(function(){H.implement(this,G),this.setup=function(){var x=this,S=this.doc,w=this.session;this.selectionBefore=w.selection.toJSON(),w.selection.inMultiSelectMode&&w.selection.toSingleRange(),this.pos=S.createAnchor(this.$pos.row,this.$pos.column);var G=this.pos;G.$insertRight=!0,G.detach(),G.markerId=w.addMarker(new U(G.row,G.column,G.row,G.column+this.length),this.mainClass,null,!1),this.others=[],this.$others.forEach((function(w){var U=S.createAnchor(w.row,w.column);U.$insertRight=!0,U.detach(),x.others.push(U)})),w.setUndoSelect(!1)},this.showOtherMarkers=function(){if(!this.othersActive){var x=this.session,S=this;this.othersActive=!0,this.others.forEach((function(w){w.markerId=x.addMarker(new U(w.row,w.column,w.row,w.column+S.length),S.othersClass,null,!1)}))}},this.hideOtherMarkers=function(){if(this.othersActive){this.othersActive=!1;for(var x=0;x=this.pos.column&&S.start.column<=this.pos.column+this.length+1,H=S.start.column-this.pos.column;if(this.updateAnchors(x),G&&(this.length+=w),G&&!this.session.$fromUndo)if("insert"===x.action)for(var z=this.others.length-1;z>=0;z--){var j={row:(X=this.others[z]).row,column:X.column+H};this.doc.insertMergedLines(j,x.lines)}else if("remove"===x.action)for(z=this.others.length-1;z>=0;z--){var X;j={row:(X=this.others[z]).row,column:X.column+H},this.doc.remove(new U(j.row,j.column,j.row,j.column-w))}this.$updating=!1,this.updateMarkers()}},this.updateAnchors=function(x){this.pos.onChange(x);for(var S=this.others.length;S--;)this.others[S].onChange(x);this.updateMarkers()},this.updateMarkers=function(){if(!this.$updating){var x=this,S=this.session,n=function(w,G){S.removeMarker(w.markerId),w.markerId=S.addMarker(new U(w.row,w.column,w.row,w.column+x.length),G,null,!1)};n(this.pos,this.mainClass);for(var w=this.others.length;w--;)n(this.others[w],this.othersClass)}},this.onCursorChange=function(x){if(!this.$updating&&this.session){var S=this.session.selection.getCursor();S.row===this.pos.row&&S.column>=this.pos.column&&S.column<=this.pos.column+this.length?(this.showOtherMarkers(),this._emit("cursorEnter",x)):(this.hideOtherMarkers(),this._emit("cursorLeave",x))}},this.detach=function(){this.session.removeMarker(this.pos&&this.pos.markerId),this.hideOtherMarkers(),this.doc.removeEventListener("change",this.$onUpdate),this.session.selection.removeEventListener("changeCursor",this.$onCursorChange),this.session.setUndoSelect(!0),this.session=null},this.cancel=function(){if(-1!==this.$undoStackDepth){for(var x=this.session.getUndoManager(),S=(x.$undoStack||x.$undostack).length-this.$undoStackDepth,w=0;w1&&!this.inMultiSelectMode&&(this._signal("multiSelect"),this.inMultiSelectMode=!0,this.session.$undoSelect=!1,this.rangeList.attach(this.session)),S||this.fromOrientedRange(x)}},this.toSingleRange=function(x){x=x||this.ranges[0];var S=this.rangeList.removeAll();S.length&&this.$onRemoveRange(S),x&&this.fromOrientedRange(x)},this.substractPoint=function(x){var S=this.rangeList.substractPoint(x);if(S)return this.$onRemoveRange(S),S[0]},this.mergeOverlappingRanges=function(){var x=this.rangeList.merge();x.length&&this.$onRemoveRange(x)},this.$onAddRange=function(x){this.rangeCount=this.rangeList.ranges.length,this.ranges.unshift(x),this._signal("addRange",{range:x})},this.$onRemoveRange=function(x){if(this.rangeCount=this.rangeList.ranges.length,1==this.rangeCount&&this.inMultiSelectMode){var S=this.rangeList.ranges.pop();x.push(S),this.rangeCount=0}for(var w=x.length;w--;){var U=this.ranges.indexOf(x[w]);this.ranges.splice(U,1)}this._signal("removeRange",{ranges:x}),0===this.rangeCount&&this.inMultiSelectMode&&(this.inMultiSelectMode=!1,this._signal("singleSelect"),this.session.$undoSelect=!0,this.rangeList.detach(this.session)),(S=S||this.ranges[0])&&!S.isEqual(this.getRange())&&this.fromOrientedRange(S)},this.$initRangeList=function(){this.rangeList||(this.rangeList=new U,this.ranges=[],this.rangeCount=0)},this.getAllRanges=function(){return this.rangeCount?this.rangeList.ranges.concat():[this.getRange()]},this.splitIntoLines=function(){if(this.rangeCount>1){var x=this.rangeList.ranges,S=x[x.length-1],w=G.fromPoints(x[0].start,S.end);this.toSingleRange(),this.setSelectionRange(w,S.cursor==S.start)}else{w=this.getRange();var U=this.isBackwards(),H=w.start.row,z=w.end.row;if(H==z){if(U)var j=w.end,X=w.start;else j=w.start,X=w.end;return this.addRange(G.fromPoints(X,X)),void this.addRange(G.fromPoints(j,j))}var K=[],q=this.getLineRange(H,!0);q.start.column=w.start.column,K.push(q);for(var Y=H+1;Y1){var x=this.rangeList.ranges,S=x[x.length-1],w=G.fromPoints(x[0].start,S.end);this.toSingleRange(),this.setSelectionRange(w,S.cursor==S.start)}else{var U=this.session.documentToScreenPosition(this.cursor),H=this.session.documentToScreenPosition(this.anchor);this.rectangularRangeBlock(U,H).forEach(this.addRange,this)}},this.rectangularRangeBlock=function(x,S,w){var U=[],H=x.column0;)ie--;if(ie>0)for(var re=0;U[re].isEmpty();)re++;for(var oe=ie;oe>=re;oe--)U[oe].isEmpty()&&U.splice(oe,1)}return U}}.call(H.prototype);var Z=x("./editor").Editor;function p(x){x.$multiselectOnSessionChange||(x.$onAddRange=x.$onAddRange.bind(x),x.$onRemoveRange=x.$onRemoveRange.bind(x),x.$onMultiSelect=x.$onMultiSelect.bind(x),x.$onSingleSelect=x.$onSingleSelect.bind(x),x.$multiselectOnSessionChange=S.onSessionChange.bind(x),x.$checkMultiselectChange=x.$checkMultiselectChange.bind(x),x.$multiselectOnSessionChange(x),x.on("changeSession",x.$multiselectOnSessionChange),x.on("mousedown",z),x.commands.addCommands(K.defaultCommands),function(x){if(x.textInput){var S=x.textInput.getElement(),w=!1;j.addListener(S,"keydown",(function(S){var U=18==S.keyCode&&!(S.ctrlKey||S.shiftKey||S.metaKey);x.$blockSelectEnabled&&U?w||(x.renderer.setMouseCursor("crosshair"),w=!0):w&&i()})),j.addListener(S,"keyup",i),j.addListener(S,"blur",i)}function i(S){w&&(x.renderer.setMouseCursor(""),w=!1)}}(x))}(function(){this.updateSelectionMarkers=function(){this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.addSelectionMarker=function(x){x.cursor||(x.cursor=x.end);var S=this.getSelectionStyle();return x.marker=this.session.addMarker(x,"ace_selection",S),this.session.$selectionMarkers.push(x),this.session.selectionMarkerCount=this.session.$selectionMarkers.length,x},this.removeSelectionMarker=function(x){if(x.marker){this.session.removeMarker(x.marker);var S=this.session.$selectionMarkers.indexOf(x);-1!=S&&this.session.$selectionMarkers.splice(S,1),this.session.selectionMarkerCount=this.session.$selectionMarkers.length}},this.removeSelectionMarkers=function(x){for(var S=this.session.$selectionMarkers,w=x.length;w--;){var U=x[w];if(U.marker){this.session.removeMarker(U.marker);var G=S.indexOf(U);-1!=G&&S.splice(G,1)}}this.session.selectionMarkerCount=S.length},this.$onAddRange=function(x){this.addSelectionMarker(x.range),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onRemoveRange=function(x){this.removeSelectionMarkers(x.ranges),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onMultiSelect=function(x){this.inMultiSelectMode||(this.inMultiSelectMode=!0,this.setStyle("ace_multiselect"),this.keyBinding.addKeyboardHandler(K.keyboardHandler),this.commands.setDefaultHandler("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers())},this.$onSingleSelect=function(x){this.session.multiSelect.inVirtualMode||(this.inMultiSelectMode=!1,this.unsetStyle("ace_multiselect"),this.keyBinding.removeKeyboardHandler(K.keyboardHandler),this.commands.removeDefaultHandler("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers(),this._emit("changeSelection"))},this.$onMultiSelectExec=function(x){var S=x.command,w=x.editor;if(w.multiSelect){if(S.multiSelectAction)"forEach"==S.multiSelectAction?U=w.forEachSelection(S,x.args):"forEachLine"==S.multiSelectAction?U=w.forEachSelection(S,x.args,!0):"single"==S.multiSelectAction?(w.exitMultiSelectMode(),U=S.exec(w,x.args||{})):U=S.multiSelectAction(w,x.args||{});else{var U=S.exec(w,x.args||{});w.multiSelect.addRange(w.multiSelect.toOrientedRange()),w.multiSelect.mergeOverlappingRanges()}return U}},this.forEachSelection=function(x,S,w){if(!this.inVirtualSelectionMode){var U,G=w&&w.keepOrder,z=1==w||w&&w.$byLines,j=this.session,X=this.selection,K=X.rangeList,q=(G?X:K).ranges;if(!q.length)return x.exec?x.exec(this,S||{}):x(this,S||{});var Y=X._eventRegistry;X._eventRegistry={};var Z=new H(j);this.inVirtualSelectionMode=!0;for(var J=q.length;J--;){if(z)for(;J>0&&q[J].start.row==q[J-1].end.row;)J--;Z.fromOrientedRange(q[J]),Z.index=J,this.selection=j.selection=Z;var Q=x.exec?x.exec(this,S||{}):x(this,S||{});U||void 0===Q||(U=Q),Z.toOrientedRange(q[J])}Z.detach(),this.selection=j.selection=X,this.inVirtualSelectionMode=!1,X._eventRegistry=Y,X.mergeOverlappingRanges(),X.ranges[0]&&X.fromOrientedRange(X.ranges[0]);var ee=this.renderer.$scrollAnimation;return this.onCursorChange(),this.onSelectionChange(),ee&&ee.from==ee.to&&this.renderer.animateScrolling(ee.from),U}},this.exitMultiSelectMode=function(){this.inMultiSelectMode&&!this.inVirtualSelectionMode&&this.multiSelect.toSingleRange()},this.getSelectedText=function(){var x="";if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){for(var S=this.multiSelect.rangeList.ranges,w=[],U=0;Uz&&(z=w.column),Uq?x.insert(U,X.stringRepeat(" ",H-q)):x.remove(new G(U.row,U.column,U.row,U.column-H+q)),S.start.column=S.end.column=z,S.start.row=S.end.row=U.row,S.cursor=S.end})),S.fromOrientedRange(w[0]),this.renderer.updateCursor(),this.renderer.updateBackMarkers()}else{var q=this.selection.getRange(),Y=q.start.row,Z=q.end.row,J=Y==Z;if(J){var Q,ee=this.session.getLength();do{Q=this.session.getLine(Z)}while(/[=:]/.test(Q)&&++Z0);Y<0&&(Y=0),Z>=ee&&(Z=ee-1)}var te=this.session.removeFullLines(Y,Z);te=this.$reAlignText(te,J),this.session.insert({row:Y,column:0},te.join("\n")+"\n"),J||(q.start.column=0,q.end.column=te[te.length-1].length),this.selection.setRange(q)}},this.$reAlignText=function(x,S){var w,U,G,H=!0,z=!0;return x.map((function(x){var S=x.match(/(\s*)(.*?)(\s*)([=:].*)/);return S?null==w?(w=S[1].length,U=S[2].length,G=S[3].length,S):(w+U+G!=S[1].length+S[2].length+S[3].length&&(z=!1),w!=S[1].length&&(H=!1),w>S[1].length&&(w=S[1].length),US[3].length&&(G=S[3].length),S):[x]})).map(S?l:H?z?function(x){return x[2]?a(w+U-x[2].length)+x[2]+a(G)+x[4].replace(/^([=:])\s+/,"$1 "):x[0]}:l:function(x){return x[2]?a(w)+x[2]+a(G)+x[4].replace(/^([=:])\s+/,"$1 "):x[0]});function a(x){return X.stringRepeat(" ",x)}function l(x){return x[2]?a(w)+x[2]+a(U-x[2].length+G)+x[4].replace(/^([=:])\s+/,"$1 "):x[0]}}}).call(Z.prototype),S.onSessionChange=function(x){var S=x.session;S&&!S.multiSelect&&(S.$selectionMarkers=[],S.selection.$initRangeList(),S.multiSelect=S.selection),this.multiSelect=S&&S.multiSelect;var w=x.oldSession;w&&(w.multiSelect.off("addRange",this.$onAddRange),w.multiSelect.off("removeRange",this.$onRemoveRange),w.multiSelect.off("multiSelect",this.$onMultiSelect),w.multiSelect.off("singleSelect",this.$onSingleSelect),w.multiSelect.lead.off("change",this.$checkMultiselectChange),w.multiSelect.anchor.off("change",this.$checkMultiselectChange)),S&&(S.multiSelect.on("addRange",this.$onAddRange),S.multiSelect.on("removeRange",this.$onRemoveRange),S.multiSelect.on("multiSelect",this.$onMultiSelect),S.multiSelect.on("singleSelect",this.$onSingleSelect),S.multiSelect.lead.on("change",this.$checkMultiselectChange),S.multiSelect.anchor.on("change",this.$checkMultiselectChange)),S&&this.inMultiSelectMode!=S.selection.inMultiSelectMode&&(S.selection.inMultiSelectMode?this.$onMultiSelect():this.$onSingleSelect())},S.MultiSelect=p,x("./config").defineOptions(Z.prototype,"editor",{enableMultiselect:{set:function(x){p(this),x?(this.on("changeSession",this.$multiselectOnSessionChange),this.on("mousedown",z)):(this.off("changeSession",this.$multiselectOnSessionChange),this.off("mousedown",z))},value:!0},enableBlockSelect:{set:function(x){this.$blockSelectEnabled=x},value:!0}})})),ace.define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],(function(x,S,w){"use strict";var U=x("../../range").Range,G=S.FoldMode=function(){};(function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(x,S,w){var U=x.getLine(w);return this.foldingStartMarker.test(U)?"start":"markbeginend"==S&&this.foldingStopMarker&&this.foldingStopMarker.test(U)?"end":""},this.getFoldWidgetRange=function(x,S,w){return null},this.indentationBlock=function(x,S,w){var G=/\S/,H=x.getLine(S),z=H.search(G);if(-1!=z){for(var j=w||H.length,X=x.getLength(),K=S,q=S;++SK){var J=x.getLine(q).length;return new U(K,j,q,J)}}},this.openingBracketBlock=function(x,S,w,G,H){var z={row:w,column:G+1},j=x.$findClosingBracket(S,z,H);if(j){var X=x.foldWidgets[j.row];return null==X&&(X=x.getFoldWidget(j.row)),"start"==X&&j.row>z.row&&(j.row--,j.column=x.getLine(j.row).length),U.fromPoints(z,j)}},this.closingBracketBlock=function(x,S,w,G,H){var z={row:w,column:G},j=x.$findOpeningBracket(S,z);if(j)return j.column++,z.column--,U.fromPoints(j,z)}}).call(G.prototype)})),ace.define("ace/theme/textmate",["require","exports","module","ace/lib/dom"],(function(x,S,w){"use strict";S.isDark=!1,S.cssClass="ace-tm",S.cssText='.ace-tm .ace_gutter {background: #f0f0f0;color: #333;}.ace-tm .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-tm .ace_fold {background-color: #6B72E6;}.ace-tm {background-color: #FFFFFF;color: black;}.ace-tm .ace_cursor {color: black;}.ace-tm .ace_invisible {color: rgb(191, 191, 191);}.ace-tm .ace_storage,.ace-tm .ace_keyword {color: blue;}.ace-tm .ace_constant {color: rgb(197, 6, 11);}.ace-tm .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-tm .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-tm .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-tm .ace_invalid {background-color: rgba(255, 0, 0, 0.1);color: red;}.ace-tm .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-tm .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-tm .ace_support.ace_type,.ace-tm .ace_support.ace_class {color: rgb(109, 121, 222);}.ace-tm .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-tm .ace_string {color: rgb(3, 106, 7);}.ace-tm .ace_comment {color: rgb(76, 136, 107);}.ace-tm .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-tm .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-tm .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-tm .ace_variable {color: rgb(49, 132, 149);}.ace-tm .ace_xml-pe {color: rgb(104, 104, 91);}.ace-tm .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-tm .ace_heading {color: rgb(12, 7, 255);}.ace-tm .ace_list {color:rgb(185, 6, 144);}.ace-tm .ace_meta.ace_tag {color:rgb(0, 22, 142);}.ace-tm .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-tm .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-tm.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;}.ace-tm .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-tm .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-tm .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-tm .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-tm .ace_gutter-active-line {background-color : #dcdcdc;}.ace-tm .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-tm .ace_indent-guide {background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==") right repeat-y;}',S.$id="ace/theme/textmate",x("../lib/dom").importCssString(S.cssText,S.cssClass)})),ace.define("ace/line_widgets",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/range"],(function(x,S,w){"use strict";x("./lib/oop");var U=x("./lib/dom");function r(x){this.session=x,this.session.widgetManager=this,this.session.getRowLength=this.getRowLength,this.session.$getWidgetScreenLength=this.$getWidgetScreenLength,this.updateOnChange=this.updateOnChange.bind(this),this.renderWidgets=this.renderWidgets.bind(this),this.measureWidgets=this.measureWidgets.bind(this),this.session._changedWidgets=[],this.$onChangeEditor=this.$onChangeEditor.bind(this),this.session.on("change",this.updateOnChange),this.session.on("changeFold",this.updateOnFold),this.session.on("changeEditor",this.$onChangeEditor)}x("./range").Range,function(){this.getRowLength=function(x){var S;return S=this.lineWidgets&&this.lineWidgets[x]&&this.lineWidgets[x].rowCount||0,this.$useWrapMode&&this.$wrapData[x]?this.$wrapData[x].length+1+S:1+S},this.$getWidgetScreenLength=function(){var x=0;return this.lineWidgets.forEach((function(S){S&&S.rowCount&&!S.hidden&&(x+=S.rowCount)})),x},this.$onChangeEditor=function(x){this.attach(x.editor)},this.attach=function(x){x&&x.widgetManager&&x.widgetManager!=this&&x.widgetManager.detach(),this.editor!=x&&(this.detach(),this.editor=x,x&&(x.widgetManager=this,x.renderer.on("beforeRender",this.measureWidgets),x.renderer.on("afterRender",this.renderWidgets)))},this.detach=function(x){var S=this.editor;if(S){this.editor=null,S.widgetManager=null,S.renderer.off("beforeRender",this.measureWidgets),S.renderer.off("afterRender",this.renderWidgets);var w=this.session.lineWidgets;w&&w.forEach((function(x){x&&x.el&&x.el.parentNode&&(x._inDocument=!1,x.el.parentNode.removeChild(x.el))}))}},this.updateOnFold=function(x,S){var w=S.lineWidgets;if(w&&x.action){for(var U=x.data,G=U.start.row,H=U.end.row,z="add"==x.action,j=G+1;j0&&!U[G];)G--;this.firstRow=w.firstRow,this.lastRow=w.lastRow,S.$cursorLayer.config=w;for(var z=G;z<=H;z++){var j=U[z];if(j&&j.el)if(j.hidden)j.el.style.top=-100-(j.pixelHeight||0)+"px";else{j._inDocument||(j._inDocument=!0,S.container.appendChild(j.el));var X=S.$cursorLayer.getPixelPosition({row:z,column:0},!0).top;j.coverLine||(X+=w.lineHeight*this.session.getRowLineCount(j.row)),j.el.style.top=X-w.offset+"px";var K=j.coverGutter?0:S.gutterWidth;j.fixedWidth||(K-=S.scrollLeft),j.el.style.left=K+"px",j.fullWidth&&j.screenWidth&&(j.el.style.minWidth=w.width+2*w.padding+"px"),j.fixedWidth?j.el.style.right=S.scrollBar.getWidth()+"px":j.el.style.right=""}}}}}.call(r.prototype),S.LineWidgets=r})),ace.define("ace/ext/error_marker",["require","exports","module","ace/line_widgets","ace/lib/dom","ace/range"],(function(x,S,w){"use strict";var U=x("../line_widgets").LineWidgets,G=x("../lib/dom"),H=x("../range").Range;S.showErrorMarker=function(x,S){var w=x.session;w.widgetManager||(w.widgetManager=new U(w),w.widgetManager.attach(x));var z=x.getCursorPosition(),j=z.row,X=w.widgetManager.getWidgetsAtRow(j).filter((function(x){return"errorMarker"==x.type}))[0];X?X.destroy():j-=S;var K,q=function(x,S,w){var U=x.getAnnotations().sort(H.comparePoints);if(U.length){var G=function(x,S,w){for(var U=0,G=x.length-1;U<=G;){var H=U+G>>1,z=w(S,x[H]);if(z>0)U=H+1;else{if(!(z<0))return H;G=H-1}}return-(U+1)}(U,{row:S,column:-1},H.comparePoints);G<0&&(G=-G-1),G>=U.length?G=w>0?0:U.length-1:0===G&&w<0&&(G=U.length-1);var z=U[G];if(z&&w){if(z.row===S){do{z=U[G+=w]}while(z&&z.row===S);if(!z)return U.slice()}var j=[];S=z.row;do{j[w<0?"unshift":"push"](z),z=U[G+=w]}while(z&&z.row==S);return j.length&&j}}}(w,j,S);if(q){var Y=q[0];z.column=(Y.pos&&"number"!=typeof Y.column?Y.pos.sc:Y.column)||0,z.row=Y.row,K=x.renderer.$gutterLayer.$annotations[z.row]}else{if(X)return;K={text:["Looks good!"],className:"ace_ok"}}x.session.unfold(z.row),x.selection.moveToPosition(z);var Z={row:z.row,fixedWidth:!0,coverGutter:!0,el:G.createElement("div"),type:"errorMarker"},J=Z.el.appendChild(G.createElement("div")),Q=Z.el.appendChild(G.createElement("div"));Q.className="error_widget_arrow "+K.className;var ee=x.renderer.$cursorLayer.getPixelPosition(z).left;Q.style.left=ee+x.renderer.gutterWidth-5+"px",Z.el.className="error_widget_wrapper",J.className="error_widget "+K.className,J.innerHTML=K.text.join("
"),J.appendChild(G.createElement("div"));var g=function(x,S,w){if(0===S&&("esc"===w||"return"===w))return Z.destroy(),{command:"null"}};Z.destroy=function(){x.$mouseHandler.isMousePressed||(x.keyBinding.removeKeyboardHandler(g),w.widgetManager.removeLineWidget(Z),x.off("changeSelection",Z.destroy),x.off("changeSession",Z.destroy),x.off("mouseup",Z.destroy),x.off("change",Z.destroy))},x.keyBinding.addKeyboardHandler(g),x.on("changeSelection",Z.destroy),x.on("changeSession",Z.destroy),x.on("mouseup",Z.destroy),x.on("change",Z.destroy),x.session.widgetManager.addLineWidget(Z),Z.el.onmousedown=x.focus.bind(x),x.renderer.scrollCursorIntoView(null,.5,{bottom:Z.el.offsetHeight})},G.importCssString(" .error_widget_wrapper { background: inherit; color: inherit; border:none } .error_widget { border-top: solid 2px; border-bottom: solid 2px; margin: 5px 0; padding: 10px 40px; white-space: pre-wrap; } .error_widget.ace_error, .error_widget_arrow.ace_error{ border-color: #ff5a5a } .error_widget.ace_warning, .error_widget_arrow.ace_warning{ border-color: #F1D817 } .error_widget.ace_info, .error_widget_arrow.ace_info{ border-color: #5a5a5a } .error_widget.ace_ok, .error_widget_arrow.ace_ok{ border-color: #5aaa5a } .error_widget_arrow { position: absolute; border: solid 5px; border-top-color: transparent!important; border-right-color: transparent!important; border-left-color: transparent!important; top: -5px; }","")})),ace.define("ace/ace",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/dom","ace/lib/event","ace/range","ace/editor","ace/edit_session","ace/undomanager","ace/virtual_renderer","ace/worker/worker_client","ace/keyboard/hash_handler","ace/placeholder","ace/multi_select","ace/mode/folding/fold_mode","ace/theme/textmate","ace/ext/error_marker","ace/config"],(function(x,S,U){"use strict";x("./lib/fixoldbrowsers");var G=x("./lib/dom"),H=x("./lib/event"),z=x("./range").Range,j=x("./editor").Editor,X=x("./edit_session").EditSession,K=x("./undomanager").UndoManager,q=x("./virtual_renderer").VirtualRenderer;x("./worker/worker_client"),x("./keyboard/hash_handler"),x("./placeholder"),x("./multi_select"),x("./mode/folding/fold_mode"),x("./theme/textmate"),x("./ext/error_marker"),S.config=x("./config"),S.require=x,S.define=w(3),S.edit=function(x,w){if("string"==typeof x){var U=x;if(!(x=document.getElementById(U)))throw new Error("ace.edit can't find div #"+U)}if(x&&x.env&&x.env.editor instanceof j)return x.env.editor;var z="";if(x&&/input|textarea/i.test(x.tagName)){var X=x;z=X.value,x=G.createElement("pre"),X.parentNode.replaceChild(x,X)}else x&&(z=x.textContent,x.innerHTML="");var K=S.createEditSession(z),Y=new j(new q(x),K,w),Z={document:K,editor:Y,onResize:Y.resize.bind(Y,null)};return X&&(Z.textarea=X),H.addListener(window,"resize",Z.onResize),Y.on("destroy",(function(){H.removeListener(window,"resize",Z.onResize),Z.editor.container.env=null})),Y.container.env=Y.env=Z,Y},S.createEditSession=function(x,S){var w=new X(x,S);return w.setUndoManager(new K),w},S.Range=z,S.Editor=j,S.EditSession=X,S.UndoManager=K,S.VirtualRenderer=q,S.version=S.config.version})),ace.require(["ace/ace"],(function(S){for(var w in S&&(S.config.init(!0),S.define=ace.define),window.ace||(window.ace=S),S)S.hasOwnProperty(w)&&(window.ace[w]=S[w]);window.ace.default=window.ace,x&&(x.exports=window.ace)})),x.exports=ace}).call(this,w(0)(x))},function(x,S,w){(function(x){ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],(function(x,S,w){"use strict";var U=x("../lib/oop"),G=x("./text_highlight_rules").TextHighlightRules,o=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},o.getTagRule(),{defaultToken:"comment.doc",caseInsensitive:!0}]}};U.inherits(o,G),o.getTagRule=function(x){return{token:"comment.doc.tag.storage.type",regex:"\\b(?:TODO|FIXME|XXX|HACK)\\b"}},o.getStartRule=function(x){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:x}},o.getEndRule=function(x){return{token:"comment.doc",regex:"\\*\\/",next:x}},S.DocCommentHighlightRules=o})),ace.define("ace/mode/c_cpp_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],(function(x,S,w){"use strict";var U=x("../lib/oop"),G=x("./doc_comment_highlight_rules").DocCommentHighlightRules,H=x("./text_highlight_rules").TextHighlightRules,z=S.cFunctions="\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\b",a=function(){var x=this.$keywords=this.createKeywordMapper({"keyword.control":"break|case|continue|default|do|else|for|goto|if|_Pragma|return|switch|while|catch|operator|try|throw|using","storage.type":"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|class|wchar_t|template|char16_t|char32_t","storage.modifier":"const|extern|register|restrict|static|volatile|inline|private|protected|public|friend|explicit|virtual|export|mutable|typename|constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local","keyword.operator":"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace","variable.language":"this","constant.language":"NULL|true|false|TRUE|FALSE|nullptr"},"identifier"),S=/\\(?:['"?\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\d]{2}|u[a-fA-F\d]{4}U[a-fA-F\d]{8}|.)/.source,w="%"+/(\d+\$)?/.source+/[#0\- +']*/.source+/[,;:_]?/.source+/((-?\d+)|\*(-?\d+\$)?)?/.source+/(\.((-?\d+)|\*(-?\d+\$)?)?)?/.source+/(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source+/(\[[^"\]]+\]|[diouxXDOUeEfFgGaACcSspn%])/.source;this.$rules={start:[{token:"comment",regex:"//$",next:"start"},{token:"comment",regex:"//",next:"singleLineComment"},G.getStartRule("doc-start"),{token:"comment",regex:"\\/\\*",next:"comment"},{token:"string",regex:"'(?:"+S+"|.)?'"},{token:"string.start",regex:'"',stateName:"qqstring",next:[{token:"string",regex:/\\\s*$/,next:"qqstring"},{token:"constant.language.escape",regex:S},{token:"constant.language.escape",regex:w},{token:"string.end",regex:'"|$',next:"start"},{defaultToken:"string"}]},{token:"string.start",regex:'R"\\(',stateName:"rawString",next:[{token:"string.end",regex:'\\)"',next:"start"},{defaultToken:"string"}]},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b"},{token:"keyword",regex:"#\\s*(?:include|import|pragma|line|define|undef|version)\\b",next:"directive"},{token:"keyword",regex:"#\\s*(?:endif|if|ifdef|else|elif|ifndef)\\b"},{token:"support.function.C99.c",regex:z},{token:x,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*"},{token:"keyword.operator",regex:/--|\+\+|<<=|>>=|>>>=|<>|&&|\|\||\?:|[*%\/+\-&\^|~!<>=]=?/},{token:"punctuation.operator",regex:"\\?|\\:|\\,|\\;|\\."},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:"\\*\\/",next:"start"},{defaultToken:"comment"}],singleLineComment:[{token:"comment",regex:/\\$/,next:"singleLineComment"},{token:"comment",regex:/$/,next:"start"},{defaultToken:"comment"}],directive:[{token:"constant.other.multiline",regex:/\\/},{token:"constant.other.multiline",regex:/.*\\/},{token:"constant.other",regex:"\\s*<.+?>",next:"start"},{token:"constant.other",regex:'\\s*["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]',next:"start"},{token:"constant.other",regex:"\\s*['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']",next:"start"},{token:"constant.other",regex:/[^\\\/]+/,next:"start"}]},this.embedRules(G,"doc-",[G.getEndRule("start")]),this.normalizeRules()};U.inherits(a,H),S.c_cppHighlightRules=a})),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],(function(x,S,w){"use strict";var U=x("../range").Range,r=function(){};(function(){this.checkOutdent=function(x,S){return!!/^\s+$/.test(x)&&/^\s*\}/.test(S)},this.autoOutdent=function(x,S){var w=x.getLine(S).match(/^(\s*\})/);if(!w)return 0;var G=w[1].length,H=x.findMatchingBracket({row:S,column:G});if(!H||H.row==S)return 0;var z=this.$getIndent(x.getLine(H.row));x.replace(new U(S,0,S,G-1),z)},this.$getIndent=function(x){return x.match(/^\s*/)[0]}}).call(r.prototype),S.MatchingBraceOutdent=r})),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],(function(x,S,w){"use strict";var U=x("../../lib/oop"),G=x("../../range").Range,H=x("./fold_mode").FoldMode,z=S.FoldMode=function(x){x&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+x.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+x.end)))};U.inherits(z,H),function(){this.foldingStartMarker=/([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(x,S,w){var U=x.getLine(w);if(this.singleLineBlockCommentRe.test(U)&&!this.startRegionRe.test(U)&&!this.tripleStarBlockCommentRe.test(U))return"";var G=this._getFoldWidgetBase(x,S,w);return!G&&this.startRegionRe.test(U)?"start":G},this.getFoldWidgetRange=function(x,S,w,U){var G,H=x.getLine(w);if(this.startRegionRe.test(H))return this.getCommentRegionBlock(x,H,w);if(G=H.match(this.foldingStartMarker)){var z=G.index;if(G[1])return this.openingBracketBlock(x,G[1],w,z);var j=x.getCommentFoldRange(w,z+G[0].length,1);return j&&!j.isMultiLine()&&(U?j=this.getSectionRange(x,w):"all"!=S&&(j=null)),j}return"markbegin"!==S&&(G=H.match(this.foldingStopMarker))?(z=G.index+G[0].length,G[1]?this.closingBracketBlock(x,G[1],w,z):x.getCommentFoldRange(w,z,-1)):void 0},this.getSectionRange=function(x,S){for(var w=x.getLine(S),U=w.search(/\S/),H=S,z=w.length,j=S+=1,X=x.getLength();++SK)break;var q=this.getFoldWidgetRange(x,"all",S);if(q){if(q.start.row<=H)break;if(q.isMultiLine())S=q.end.row;else if(U==K)break}j=S}}return new G(H,z,j,x.getLine(j).length)},this.getCommentRegionBlock=function(x,S,w){for(var U=S.search(/\s*$/),H=x.getLength(),z=w,j=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,X=1;++wz)return new G(z,U,w,S.length)}}.call(z.prototype)})),ace.define("ace/mode/c_cpp",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/c_cpp_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],(function(x,S,w){"use strict";var U=x("../lib/oop"),G=x("./text").Mode,H=x("./c_cpp_highlight_rules").c_cppHighlightRules,z=x("./matching_brace_outdent").MatchingBraceOutdent,j=(x("../range").Range,x("./behaviour/cstyle").CstyleBehaviour),X=x("./folding/cstyle").FoldMode,l=function(){this.HighlightRules=H,this.$outdent=new z,this.$behaviour=new j,this.foldingRules=new X};U.inherits(l,G),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(x,S,w){var U=this.$getIndent(S),G=this.getTokenizer().getLineTokens(S,x),H=G.tokens,z=G.state;if(H.length&&"comment"==H[H.length-1].type)return U;if("start"==x)(j=S.match(/^.*[\{\(\[]\s*$/))&&(U+=w);else if("doc-start"==x){if("start"==z)return"";var j;(j=S.match(/^\s*(\/?)\*/))&&(j[1]&&(U+=" "),U+="* ")}return U},this.checkOutdent=function(x,S,w){return this.$outdent.checkOutdent(S,w)},this.autoOutdent=function(x,S,w){this.$outdent.autoOutdent(S,w)},this.$id="ace/mode/c_cpp"}.call(l.prototype),S.Mode=l})),ace.define("ace/mode/glsl_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/c_cpp_highlight_rules"],(function(x,S,w){"use strict";var U=x("../lib/oop"),G=x("./c_cpp_highlight_rules").c_cppHighlightRules,o=function(){var x=this.createKeywordMapper({"variable.language":"this",keyword:"layout|attribute|const|uniform|varying|break|continue|do|for|while|if|else|in|out|inout|float|int|void|bool|true|false|lowp|mediump|highp|precision|invariant|discard|return|mat2|mat3|mat4|vec2|vec3|vec4|ivec2|ivec3|ivec4|bvec2|bvec3|bvec4|sampler2D|samplerCube|struct","constant.language":"radians|degrees|sin|cos|tan|asin|acos|atan|pow|exp|log|exp2|log2|sqrt|inversesqrt|abs|sign|floor|ceil|fract|mod|min|max|clamp|mix|step|smoothstep|length|distance|dot|cross|normalize|faceforward|reflect|refract|matrixCompMult|lessThan|lessThanEqual|greaterThan|greaterThanEqual|equal|notEqual|any|all|not|dFdx|dFdy|fwidth|texture2D|texture2DProj|texture2DLod|texture2DProjLod|textureCube|textureCubeLod|gl_MaxVertexAttribs|gl_MaxVertexUniformVectors|gl_MaxVaryingVectors|gl_MaxVertexTextureImageUnits|gl_MaxCombinedTextureImageUnits|gl_MaxTextureImageUnits|gl_MaxFragmentUniformVectors|gl_MaxDrawBuffers|gl_DepthRangeParameters|gl_DepthRange|gl_Position|gl_PointSize|gl_FragCoord|gl_FrontFacing|gl_PointCoord|gl_FragColor|gl_FragData"},"identifier");this.$rules=(new G).$rules,this.$rules.start.forEach((function(S){"function"==typeof S.token&&(S.token=x)}))};U.inherits(o,G),S.glslHighlightRules=o})),ace.define("ace/mode/glsl",["require","exports","module","ace/lib/oop","ace/mode/c_cpp","ace/mode/glsl_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],(function(x,S,w){"use strict";var U=x("../lib/oop"),G=x("./c_cpp").Mode,H=x("./glsl_highlight_rules").glslHighlightRules,z=x("./matching_brace_outdent").MatchingBraceOutdent,j=(x("../range").Range,x("./behaviour/cstyle").CstyleBehaviour),X=x("./folding/cstyle").FoldMode,l=function(){this.HighlightRules=H,this.$outdent=new z,this.$behaviour=new j,this.foldingRules=new X};U.inherits(l,G),function(){this.$id="ace/mode/glsl"}.call(l.prototype),S.Mode=l})),ace.require(["ace/mode/glsl"],(function(S){x&&(x.exports=S)}))}).call(this,w(0)(x))},function(x,S,w){(function(x){ace.define("ace/theme/monokai",["require","exports","module","ace/lib/dom"],(function(x,S,w){S.isDark=!0,S.cssClass="ace-monokai",S.cssText=".ace-monokai .ace_gutter {background: #2F3129;color: #8F908A}.ace-monokai .ace_print-margin {width: 1px;background: #555651}.ace-monokai {background-color: #272822;color: #F8F8F2}.ace-monokai .ace_cursor {color: #F8F8F0}.ace-monokai .ace_marker-layer .ace_selection {background: #49483E}.ace-monokai.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #272822;}.ace-monokai .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-monokai .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #49483E}.ace-monokai .ace_marker-layer .ace_active-line {background: #202020}.ace-monokai .ace_gutter-active-line {background-color: #272727}.ace-monokai .ace_marker-layer .ace_selected-word {border: 1px solid #49483E}.ace-monokai .ace_invisible {color: #52524d}.ace-monokai .ace_entity.ace_name.ace_tag,.ace-monokai .ace_keyword,.ace-monokai .ace_meta.ace_tag,.ace-monokai .ace_storage {color: #F92672}.ace-monokai .ace_punctuation,.ace-monokai .ace_punctuation.ace_tag {color: #fff}.ace-monokai .ace_constant.ace_character,.ace-monokai .ace_constant.ace_language,.ace-monokai .ace_constant.ace_numeric,.ace-monokai .ace_constant.ace_other {color: #AE81FF}.ace-monokai .ace_invalid {color: #F8F8F0;background-color: #F92672}.ace-monokai .ace_invalid.ace_deprecated {color: #F8F8F0;background-color: #AE81FF}.ace-monokai .ace_support.ace_constant,.ace-monokai .ace_support.ace_function {color: #66D9EF}.ace-monokai .ace_fold {background-color: #A6E22E;border-color: #F8F8F2}.ace-monokai .ace_storage.ace_type,.ace-monokai .ace_support.ace_class,.ace-monokai .ace_support.ace_type {font-style: italic;color: #66D9EF}.ace-monokai .ace_entity.ace_name.ace_function,.ace-monokai .ace_entity.ace_other,.ace-monokai .ace_entity.ace_other.ace_attribute-name,.ace-monokai .ace_variable {color: #A6E22E}.ace-monokai .ace_variable.ace_parameter {font-style: italic;color: #FD971F}.ace-monokai .ace_string {color: #E6DB74}.ace-monokai .ace_comment {color: #75715E}.ace-monokai .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ0FD0ZXBzd/wPAAjVAoxeSgNeAAAAAElFTkSuQmCC) right repeat-y}",x("../lib/dom").importCssString(S.cssText,S.cssClass)})),ace.require(["ace/theme/monokai"],(function(S){x&&(x.exports=S)}))}).call(this,w(0)(x))},function(x,S,w){var U=w(1),G=w(9);"string"==typeof(G=G.__esModule?G.default:G)&&(G=[[x.i,G,""]]);var H=(U(G,{insert:"html",singleton:!1}),G.locals?G.locals:{});x.exports=H},function(x,S,w){(S=w(2)(!1)).push([x.i,".ace-monokai {\r\n color: #f9f9f9;\r\n font-size: 14px;\r\n}\r\n\r\n.ace-monokai .ace_entity.ace_name.ace_tag,\r\n.ace-monokai .ace_keyword,\r\n.ace-monokai .ace_meta.ace_tag,\r\n.ace-monokai .ace_storage {\r\n color: #F0640D\r\n}\r\n\r\n.ace-monokai .ace_constant.ace_character,\r\n.ace-monokai .ace_constant.ace_other {\r\n color: #5db0d7;\r\n}\r\n\r\n.ace-monokai .ace_marker-layer .ace_selection {\r\n background: #a6e22e\r\n}\r\n\r\n.ace-monokai .ace_marker-layer .ace_bracket {\r\n margin: -1px 0 0 -1px;\r\n border: 1px solid #a6e22e;\r\n}\r\n\r\n.ace-monokai .ace_marker-layer .ace_active-line {\r\n background: #2c2c2c\r\n}\r\n.ace-monokai .ace_gutter-active-line {\r\n background-color: #2c2c2c\r\n}\r\n.ace-monokai .ace_marker-layer .ace_selected-word {\r\n border: 1px solid #a6e22e\r\n}\r\n\r\n.ace-monokai .ace_constant.ace_language {\r\n color: #e6db74\r\n}\r\n.ace-monokai .ace_constant.ace_numeric {\r\n color: #ae81ff\r\n}\r\n\r\n.ace-monokai .ace_gutter {\r\n background: #222;\r\n color: #8F908A;\r\n}",""]),x.exports=S},function(x,S,w){(function(x){ace.define("ace/ext/searchbox",["require","exports","module","ace/lib/dom","ace/lib/lang","ace/lib/event","ace/keyboard/hash_handler","ace/lib/keys"],(function(x,S,w){"use strict";var U=x("../lib/dom"),G=x("../lib/lang"),H=x("../lib/event"),z='.ace_search {background-color: #ddd;color: #666;border: 1px solid #cbcbcb;border-top: 0 none;overflow: hidden;margin: 0;padding: 4px 6px 0 4px;position: absolute;top: 0;z-index: 99;white-space: normal;}.ace_search.left {border-left: 0 none;border-radius: 0px 0px 5px 0px;left: 0;}.ace_search.right {border-radius: 0px 0px 0px 5px;border-right: 0 none;right: 0;}.ace_search_form, .ace_replace_form {margin: 0 20px 4px 0;overflow: hidden;line-height: 1.9;}.ace_replace_form {margin-right: 0;}.ace_search_form.ace_nomatch {outline: 1px solid red;}.ace_search_field {border-radius: 3px 0 0 3px;background-color: white;color: black;border: 1px solid #cbcbcb;border-right: 0 none;outline: 0;padding: 0;font-size: inherit;margin: 0;line-height: inherit;padding: 0 6px;min-width: 17em;vertical-align: top;min-height: 1.8em;box-sizing: content-box;}.ace_searchbtn {border: 1px solid #cbcbcb;line-height: inherit;display: inline-block;padding: 0 6px;background: #fff;border-right: 0 none;border-left: 1px solid #dcdcdc;cursor: pointer;margin: 0;position: relative;color: #666;}.ace_searchbtn:last-child {border-radius: 0 3px 3px 0;border-right: 1px solid #cbcbcb;}.ace_searchbtn:disabled {background: none;cursor: default;}.ace_searchbtn:hover {background-color: #eef1f6;}.ace_searchbtn.prev, .ace_searchbtn.next {padding: 0px 0.7em}.ace_searchbtn.prev:after, .ace_searchbtn.next:after {content: "";border: solid 2px #888;width: 0.5em;height: 0.5em;border-width: 2px 0 0 2px;display:inline-block;transform: rotate(-45deg);}.ace_searchbtn.next:after {border-width: 0 2px 2px 0 ;}.ace_searchbtn_close {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;border-radius: 50%;border: 0 none;color: #656565;cursor: pointer;font: 16px/16px Arial;padding: 0;height: 14px;width: 14px;top: 9px;right: 7px;position: absolute;}.ace_searchbtn_close:hover {background-color: #656565;background-position: 50% 100%;color: white;}.ace_button {margin-left: 2px;cursor: pointer;-webkit-user-select: none;-moz-user-select: none;-o-user-select: none;-ms-user-select: none;user-select: none;overflow: hidden;opacity: 0.7;border: 1px solid rgba(100,100,100,0.23);padding: 1px;box-sizing: border-box!important;color: black;}.ace_button:hover {background-color: #eee;opacity:1;}.ace_button:active {background-color: #ddd;}.ace_button.checked {border-color: #3399ff;opacity:1;}.ace_search_options{margin-bottom: 3px;text-align: right;-webkit-user-select: none;-moz-user-select: none;-o-user-select: none;-ms-user-select: none;user-select: none;clear: both;}.ace_search_counter {float: left;font-family: arial;padding: 0 8px;}',j=x("../keyboard/hash_handler").HashHandler,X=x("../lib/keys");U.importCssString(z,"ace_searchbox");var l=function(x,S,w){var G=U.createElement("div");U.buildDom(["div",{class:"ace_search right"},["span",{action:"hide",class:"ace_searchbtn_close"}],["div",{class:"ace_search_form"},["input",{class:"ace_search_field",placeholder:"Search for",spellcheck:"false"}],["span",{action:"findPrev",class:"ace_searchbtn prev"},"​"],["span",{action:"findNext",class:"ace_searchbtn next"},"​"],["span",{action:"findAll",class:"ace_searchbtn",title:"Alt-Enter"},"All"]],["div",{class:"ace_replace_form"},["input",{class:"ace_search_field",placeholder:"Replace with",spellcheck:"false"}],["span",{action:"replaceAndFindNext",class:"ace_searchbtn"},"Replace"],["span",{action:"replaceAll",class:"ace_searchbtn"},"All"]],["div",{class:"ace_search_options"},["span",{action:"toggleReplace",class:"ace_button",title:"Toggle Replace mode",style:"float:left;margin-top:-2px;padding:0 5px;"},"+"],["span",{class:"ace_search_counter"}],["span",{action:"toggleRegexpMode",class:"ace_button",title:"RegExp Search"},".*"],["span",{action:"toggleCaseSensitive",class:"ace_button",title:"CaseSensitive Search"},"Aa"],["span",{action:"toggleWholeWords",class:"ace_button",title:"Whole Word Search"},"\\b"],["span",{action:"searchInSelection",class:"ace_button",title:"Search In Selection"},"S"]]],G),this.element=G.firstChild,this.setSession=this.setSession.bind(this),this.$init(),this.setEditor(x),U.importCssString(z,"ace_searchbox",x.container)};(function(){this.setEditor=function(x){x.searchBox=this,x.renderer.scroller.appendChild(this.element),this.editor=x},this.setSession=function(x){this.searchRange=null,this.$syncOptions(!0)},this.$initElements=function(x){this.searchBox=x.querySelector(".ace_search_form"),this.replaceBox=x.querySelector(".ace_replace_form"),this.searchOption=x.querySelector("[action=searchInSelection]"),this.replaceOption=x.querySelector("[action=toggleReplace]"),this.regExpOption=x.querySelector("[action=toggleRegexpMode]"),this.caseSensitiveOption=x.querySelector("[action=toggleCaseSensitive]"),this.wholeWordOption=x.querySelector("[action=toggleWholeWords]"),this.searchInput=this.searchBox.querySelector(".ace_search_field"),this.replaceInput=this.replaceBox.querySelector(".ace_search_field"),this.searchCounter=x.querySelector(".ace_search_counter")},this.$init=function(){var x=this.element;this.$initElements(x);var S=this;H.addListener(x,"mousedown",(function(x){setTimeout((function(){S.activeInput.focus()}),0),H.stopPropagation(x)})),H.addListener(x,"click",(function(x){var w=(x.target||x.srcElement).getAttribute("action");w&&S[w]?S[w]():S.$searchBarKb.commands[w]&&S.$searchBarKb.commands[w].exec(S),H.stopPropagation(x)})),H.addCommandKeyListener(x,(function(x,w,U){var G=X.keyCodeToString(U),z=S.$searchBarKb.findKeyCommand(w,G);z&&z.exec&&(z.exec(S),H.stopEvent(x))})),this.$onChange=G.delayedCall((function(){S.find(!1,!1)})),H.addListener(this.searchInput,"input",(function(){S.$onChange.schedule(20)})),H.addListener(this.searchInput,"focus",(function(){S.activeInput=S.searchInput,S.searchInput.value&&S.highlight()})),H.addListener(this.replaceInput,"focus",(function(){S.activeInput=S.replaceInput,S.searchInput.value&&S.highlight()}))},this.$closeSearchBarKb=new j([{bindKey:"Esc",name:"closeSearchBar",exec:function(x){x.searchBox.hide()}}]),this.$searchBarKb=new j,this.$searchBarKb.bindKeys({"Ctrl-f|Command-f":function(x){var S=x.isReplace=!x.isReplace;x.replaceBox.style.display=S?"":"none",x.replaceOption.checked=!1,x.$syncOptions(),x.searchInput.focus()},"Ctrl-H|Command-Option-F":function(x){x.editor.getReadOnly()||(x.replaceOption.checked=!0,x.$syncOptions(),x.replaceInput.focus())},"Ctrl-G|Command-G":function(x){x.findNext()},"Ctrl-Shift-G|Command-Shift-G":function(x){x.findPrev()},esc:function(x){setTimeout((function(){x.hide()}))},Return:function(x){x.activeInput==x.replaceInput&&x.replace(),x.findNext()},"Shift-Return":function(x){x.activeInput==x.replaceInput&&x.replace(),x.findPrev()},"Alt-Return":function(x){x.activeInput==x.replaceInput&&x.replaceAll(),x.findAll()},Tab:function(x){(x.activeInput==x.replaceInput?x.searchInput:x.replaceInput).focus()}}),this.$searchBarKb.addCommands([{name:"toggleRegexpMode",bindKey:{win:"Alt-R|Alt-/",mac:"Ctrl-Alt-R|Ctrl-Alt-/"},exec:function(x){x.regExpOption.checked=!x.regExpOption.checked,x.$syncOptions()}},{name:"toggleCaseSensitive",bindKey:{win:"Alt-C|Alt-I",mac:"Ctrl-Alt-R|Ctrl-Alt-I"},exec:function(x){x.caseSensitiveOption.checked=!x.caseSensitiveOption.checked,x.$syncOptions()}},{name:"toggleWholeWords",bindKey:{win:"Alt-B|Alt-W",mac:"Ctrl-Alt-B|Ctrl-Alt-W"},exec:function(x){x.wholeWordOption.checked=!x.wholeWordOption.checked,x.$syncOptions()}},{name:"toggleReplace",exec:function(x){x.replaceOption.checked=!x.replaceOption.checked,x.$syncOptions()}},{name:"searchInSelection",exec:function(x){x.searchOption.checked=!x.searchRange,x.setSearchRange(x.searchOption.checked&&x.editor.getSelectionRange()),x.$syncOptions()}}]),this.setSearchRange=function(x){this.searchRange=x,x?this.searchRangeMarker=this.editor.session.addMarker(x,"ace_active-line"):this.searchRangeMarker&&(this.editor.session.removeMarker(this.searchRangeMarker),this.searchRangeMarker=null)},this.$syncOptions=function(x){U.setCssClass(this.replaceOption,"checked",this.searchRange),U.setCssClass(this.searchOption,"checked",this.searchOption.checked),this.replaceOption.textContent=this.replaceOption.checked?"-":"+",U.setCssClass(this.regExpOption,"checked",this.regExpOption.checked),U.setCssClass(this.wholeWordOption,"checked",this.wholeWordOption.checked),U.setCssClass(this.caseSensitiveOption,"checked",this.caseSensitiveOption.checked);var S=this.editor.getReadOnly();this.replaceOption.style.display=S?"none":"",this.replaceBox.style.display=this.replaceOption.checked&&!S?"":"none",this.find(!1,!1,x)},this.highlight=function(x){this.editor.session.highlight(x||this.editor.$search.$options.re),this.editor.renderer.updateBackMarkers()},this.find=function(x,S,w){var G=!this.editor.find(this.searchInput.value,{skipCurrent:x,backwards:S,wrap:!0,regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked,preventScroll:w,range:this.searchRange})&&this.searchInput.value;U.setCssClass(this.searchBox,"ace_nomatch",G),this.editor._emit("findSearchBox",{match:!G}),this.highlight(),this.updateCounter()},this.updateCounter=function(){var x=this.editor,S=x.$search.$options.re,w=0,U=0;if(S){var G=this.searchRange?x.session.getTextRange(this.searchRange):x.getValue(),H=x.session.doc.positionToIndex(x.selection.anchor);this.searchRange&&(H-=x.session.doc.positionToIndex(this.searchRange.start));for(var z,j=S.lastIndex=0;(z=S.exec(G))&&(w++,(j=z.index)<=H&&U++,!(w>999))&&(z[0]||(S.lastIndex=j+=1,!(j>=G.length))););}this.searchCounter.textContent=U+" of "+(w>999?"999+":w)},this.findNext=function(){this.find(!0,!1)},this.findPrev=function(){this.find(!0,!0)},this.findAll=function(){var x=!this.editor.findAll(this.searchInput.value,{regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked})&&this.searchInput.value;U.setCssClass(this.searchBox,"ace_nomatch",x),this.editor._emit("findSearchBox",{match:!x}),this.highlight(),this.hide()},this.replace=function(){this.editor.getReadOnly()||this.editor.replace(this.replaceInput.value)},this.replaceAndFindNext=function(){this.editor.getReadOnly()||(this.editor.replace(this.replaceInput.value),this.findNext())},this.replaceAll=function(){this.editor.getReadOnly()||this.editor.replaceAll(this.replaceInput.value)},this.hide=function(){this.active=!1,this.setSearchRange(null),this.editor.off("changeSession",this.setSession),this.element.style.display="none",this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb),this.editor.focus()},this.show=function(x,S){this.active=!0,this.editor.on("changeSession",this.setSession),this.element.style.display="",this.replaceOption.checked=S,x&&(this.searchInput.value=x),this.searchInput.focus(),this.searchInput.select(),this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb),this.$syncOptions(!0)},this.isFocused=function(){var x=document.activeElement;return x==this.searchInput||x==this.replaceInput}}).call(l.prototype),S.SearchBox=l,S.Search=function(x,S){(x.searchBox||new l(x)).show(x.session.getTextRange(),S)}})),ace.require(["ace/ext/searchbox"],(function(S){x&&(x.exports=S)}))}).call(this,w(0)(x))},function(x,S,w){var U=w(1),G=w(12);"string"==typeof(G=G.__esModule?G.default:G)&&(G=[[x.i,G,""]]);var H=(U(G,{insert:"html",singleton:!1}),G.locals?G.locals:{});x.exports=H},function(x,S,w){(S=w(2)(!1)).push([x.i,"@import url(https://fonts.googleapis.com/css?family=Montserrat:300,400);"]),S.push([x.i,".captureMenuComponent{position:absolute;padding:7px;z-index:99999;top:10px;left:50%;margin-left:-209px;height:40px;width:400px;border:2px solid #222;background-color:#2c2c2c;visibility:hidden;display:none;color:#f9f9f9;font-family:Consolas, monaco, monospace;font-size:14px;font-weight:500}.captureMenuComponent.active{visibility:visible;display:block}.captureMenuComponent,.captureMenuComponent:after,.captureMenuComponent:before{box-sizing:content-box}.captureMenuLogComponent{position:absolute;padding:7px;z-index:80000;top:66px;left:50%;margin-left:-209px;height:40px;width:400px;border:2px solid #222;background-color:#2c2c2c;visibility:hidden;display:none;color:#f9f9f9;font-family:Consolas, monaco, monospace;font-size:14px;font-weight:500}.captureMenuLogComponent.active{visibility:visible;display:block}.captureMenuLogComponent,.captureMenuLogComponent:after,.captureMenuLogComponent:before{box-sizing:content-box}.captureMenuLogComponent span.error{color:red}.canvasListComponent{float:left;width:50%;height:100%}.canvasListComponent [commandName=onCanvasSelection]{vertical-align:center;line-height:40px;white-space:nowrap;text-overflow:ellipsis;width:190px;display:inline-block;overflow:hidden;margin:0px 5px}.canvasListComponent [commandName=onCanvasSelection]:hover{color:#c9c9c9;cursor:pointer;transition:color .3s;-webkit-transition:color .3s;-moz-transition:color .3s}.canvasListComponent ul{margin:0px;padding:7px;list-style:none;position:absolute;top:54px;left:-2px;width:400px;border:2px solid #222;background-color:#2c2c2c}.canvasListComponent ul li{margin:5px}.canvasListComponent ul li:hover{color:#c9c9c9;cursor:pointer;transition:color .3s;-webkit-transition:color .3s;-moz-transition:color .3s}.captureMenuActionsComponent{float:left;width:30%;height:100%;margin-top:7.5px}.captureMenuActionsComponent div{float:left}.captureMenuActionsComponent [commandName=onCaptureRequested]{border-radius:50%;background:#2c2c2c;border:2px solid red;width:21px;height:21px}.captureMenuActionsComponent [commandName=onCaptureRequested]:hover{background:red;cursor:pointer;transition:background .3s;-webkit-transition:background .3s;-moz-transition:background .3s}.captureMenuActionsComponent [commandName=onPlayRequested],.captureMenuActionsComponent [commandName=onPlayNextFrameRequested]{width:21px;height:21px;border:2px solid #f9f9f9;border-radius:50%;margin-left:9px}.captureMenuActionsComponent [commandName=onPlayRequested]:before,.captureMenuActionsComponent [commandName=onPlayNextFrameRequested]:before{content:'';position:absolute;display:inline-block;margin-top:6px;margin-left:4px;width:7px;height:7px;border-top:2px solid #f9f9f9;border-right:2px solid #f9f9f9;background-color:#f9f9f9;-moz-transform:rotate(45deg);-webkit-transform:rotate(45deg);transform:rotate(45deg);z-index:-20}.captureMenuActionsComponent [commandName=onPlayRequested]:after,.captureMenuActionsComponent [commandName=onPlayNextFrameRequested]:after{content:'';position:absolute;display:inline-block;width:8px;height:20px;background-color:#2c2c2c;z-index:-10}.captureMenuActionsComponent [commandName=onPlayRequested]:hover,.captureMenuActionsComponent :hover[commandName=onPlayNextFrameRequested]{cursor:pointer;border:2px solid #c9c9c9;transition:border .3s;-webkit-transition:border .3s;-moz-transition:border .3s}.captureMenuActionsComponent [commandName=onPauseRequested]{width:21px;height:21px;border:2px solid #f9f9f9;border-radius:50%;margin-left:9px}.captureMenuActionsComponent [commandName=onPauseRequested]:before{content:'';position:absolute;display:inline-block;width:2px;height:13px;margin-left:12px;margin-top:4px;background-color:#f9f9f9}.captureMenuActionsComponent [commandName=onPauseRequested]:after{content:'';position:absolute;display:inline-block;width:2px;height:13px;margin-left:7px;margin-top:4px;background-color:#f9f9f9}.captureMenuActionsComponent [commandName=onPauseRequested]:hover{cursor:pointer;border:2px solid #c9c9c9;transition:border .3s;-webkit-transition:border .3s;-moz-transition:border .3s}.captureMenuActionsComponent [commandName=onPlayNextFrameRequested]:before{background-color:#2c2c2c}.fpsCounterComponent{float:left;width:20%;vertical-align:center;line-height:40px;white-space:nowrap}\n",""]),x.exports=S},function(x,S,w){var U=w(1),G=w(14);"string"==typeof(G=G.__esModule?G.default:G)&&(G=[[x.i,G,""]]);var H=(U(G,{insert:"html",singleton:!1}),G.locals?G.locals:{});x.exports=H},function(x,S,w){(S=w(2)(!1)).push([x.i,"@import url(https://fonts.googleapis.com/css?family=Montserrat:300,400);"]),S.push([x.i,".resultViewComponent{position:absolute;z-index:99999;border:1px solid #000;top:0;left:0;bottom:0;right:0;background-color:#222;opacity:1;visibility:hidden;display:none;color:#f9f9f9;font-family:Consolas, monaco, monospace;font-size:14px;font-weight:500}.resultViewComponent.active{visibility:visible;display:block}.resultViewComponent,.resultViewComponent:after,.resultViewComponent:before{box-sizing:content-box}.resultViewMenuComponent{font-family:'Montserrat', sans-serif;font-size:13px;font-weight:300;line-height:40px;flex:1 100%;display:flex;flex-flow:row wrap;height:42px;outline:0 none;border-bottom:2px solid #222;box-sizing:border-box;list-style:none;margin:0;background:#2c2c2c;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-flow:row wrap;flex-flow:row wrap;justify-content:flex-end}.resultViewMenuComponent .resultViewMenuOpen{display:none;visibility:hidden}.resultViewMenuComponent a{outline:0 none;text-decoration:none;display:block;padding:0 20px 0 20px;color:#ccc;background:#2c2c2c;box-sizing:border-box;height:100%}.resultViewMenuComponent a.active{background:#222;color:white;font-weight:400;border-bottom:2px solid #F0640D}.resultViewMenuComponent a:hover{background:#222;color:#c9c9c9;cursor:pointer;transition:color .3s;-webkit-transition:color .3s;-moz-transition:color .3s}.resultViewMenuComponent a:hover.active{color:#F0640D;transition:color 0;-webkit-transition:color 0;-moz-transition:color 0}.resultViewMenuComponent a.clearSearch{padding:0px;margin-left:-30px;margin-right:20px;z-index:9000;color:#f9f9f9}.resultViewMenuComponent a.clearSearch:hover{background:#2c2c2c;color:#F0640D}@media all and (max-width: 1024px){.resultViewMenuComponent{padding:0px;position:absolute;overflow-y:visible;top:0px;left:0px;right:0px;bottom:0px;z-index:999999;display:block}.resultViewMenuComponent .resultViewMenuOpen{display:block;visibility:visible}.resultViewMenuComponent li:not(.resultViewMenuSmall){display:none;visibility:hidden}.resultViewMenuComponent li{background:#2c2c2c}.resultViewMenuComponent li.searchContainer{background:#464646}.resultViewMenuComponent a.active{background:#2c2c2c}}.resultViewMenuComponent input{border:0;font-family:'Montserrat', sans-serif;font-weight:300;padding:0 20px 0 20px;background:#464646;color:#f9f9f9;height:40px;position:relative;top:-1px;box-sizing:border-box}.resultViewMenuComponent input:focus{border:0;outline:0 none}.resultViewMenuComponent .clearSearch{position:relative;background:transparent;display:inline;padding:0px;margin-left:-30px;z-index:9000;color:#F0640D}.resultViewMenuComponent .clearSearch:hover{background:transparent !important}.resultViewMenuComponent ::-webkit-input-placeholder{color:#ccc}.resultViewMenuComponent :-moz-placeholder{color:#ccc}.resultViewMenuComponent ::-moz-placeholder{color:#ccc}.resultViewMenuComponent :-ms-input-placeholder{color:#ccc}.resultViewContentComponent{position:absolute;top:40px;left:0;bottom:0;right:0}.informationColumnLeftComponent{position:absolute;top:0;left:0;bottom:0;right:50%;overflow:auto;overflow-x:hidden;overflow-y:visible}.informationColumnRightComponent{position:absolute;top:0;left:50%;bottom:0;right:0;overflow:auto;overflow-x:hidden;overflow-y:visible}.captureListComponent{position:absolute;top:40px;left:0;bottom:0;right:0;background:#222;z-index:9000;display:none;visibility:hidden;overflow-y:visible;overflow-x:hidden}.captureListComponent.active{display:block;visibility:visible}.captureListComponent .openCaptureFile{border:1px dashed #f9f9f9;display:block;margin:5px;padding:5px;text-align:center;font-style:italic}.captureListComponent .openCaptureFile span{line-height:100%;vertical-align:middle}.captureListComponent ul{margin:0px;padding:0px;list-style:none;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-flow:row wrap;flex-flow:row wrap;justify-content:flex-start}.captureListComponent ul li{margin:5px;border:1px solid #606060}.captureListComponent ul li img{width:295px;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, #c9c9c9), color-stop(0.25, transparent)),-webkit-gradient(linear, 0 0, 100% 100%, color-stop(0.25, #c9c9c9), color-stop(0.25, transparent)),-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.75, transparent), color-stop(0.75, #c9c9c9)),-webkit-gradient(linear, 0 0, 100% 100%, color-stop(0.75, transparent), color-stop(0.75, #c9c9c9));background-image:-moz-linear-gradient(45deg, #d9d9d9 25%, transparent 25%),-moz-linear-gradient(-45deg, #d9d9d9 25%, transparent 25%),-moz-linear-gradient(45deg, transparent 75%, #d9d9d9 75%),-moz-linear-gradient(-45deg, transparent 75%, #d9d9d9 75%);-webkit-background-size:50px 51px;-moz-background-size:50px 50px;background-size:50px 50px;background-position:0 0, 25px 0, 25px -25px, 0px 25px;display:block}.captureListComponent ul li span{display:block;text-align:center;border:5px solid #222}.captureListComponent ul li span .captureListItemSave{color:#f9f9f9;font-size:16px;margin-left:10px;position:relative;padding:3px 8px 3px 32px}.captureListComponent ul li span .captureListItemSave:before,.captureListComponent ul li span .captureListItemSave:after{box-sizing:border-box;content:\"\";position:absolute}.captureListComponent ul li span .captureListItemSave:before{background:#d9d9d9;border-color:#f9f9f9;border-style:solid;border-width:7px 2px 1px;border-radius:1px;height:16px;left:8px;top:5px;width:16px}.captureListComponent ul li span .captureListItemSave:after{background:#f9f9f9;border-color:#d9d9d9;border-style:solid;border-width:1px 1px 1px 4px;height:5px;left:13px;top:5px;width:7px}.captureListComponent ul li:hover{cursor:pointer}.captureListComponent ul li.active span{background:#F0640D;border:5px solid #F0640D}.captureListComponent ul li.active span .captureListItemSave:before{background:#F0640D}.captureListComponent ul li.active span .captureListItemSave:after{border-color:#F0640D}.visualStateListComponent{position:absolute;top:0;left:0;bottom:0;padding:5px;right:80%;overflow-y:visible;overflow-x:hidden}.visualStateListComponent ul{margin:0px;padding:0px;list-style:none}.visualStateListComponent ul li{margin:20px 15px 0px 15px;border:1px solid #606060}.visualStateListComponent ul li img{display:block;padding:0px;box-sizing:border-box;max-height:600px;width:100%;margin:0 auto;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, #c9c9c9), color-stop(0.25, transparent)),-webkit-gradient(linear, 0 0, 100% 100%, color-stop(0.25, #c9c9c9), color-stop(0.25, transparent)),-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.75, transparent), color-stop(0.75, #c9c9c9)),-webkit-gradient(linear, 0 0, 100% 100%, color-stop(0.75, transparent), color-stop(0.75, #c9c9c9));background-image:-moz-linear-gradient(45deg, #d9d9d9 25%, transparent 25%),-moz-linear-gradient(-45deg, #d9d9d9 25%, transparent 25%),-moz-linear-gradient(45deg, transparent 75%, #d9d9d9 75%),-moz-linear-gradient(-45deg, transparent 75%, #d9d9d9 75%);-webkit-background-size:50px 51px;-moz-background-size:50px 50px;background-size:50px 50px;background-position:0 0, 25px 0, 25px -25px, 0px 25px}.visualStateListComponent ul li:hover{cursor:pointer}.visualStateListComponent ul li span{border:5px solid #222;background:#222;box-sizing:border-box;display:inline-block;width:100%;margin:0px;padding:5px;word-wrap:break-word}.visualStateListComponent ul li.active{border:2px solid #F0640D}.commandListComponent{position:absolute;top:0;left:20%;right:40%;bottom:0;color:#d3d3d3}.commandListComponent ul{margin:0px;padding:0px;list-style:none;overflow-y:visible;overflow-x:hidden;height:100%}.commandListComponent ul li{padding:8px}.commandListComponent ul li span{word-wrap:break-word;line-height:22px}.commandListComponent ul li:hover{color:#f9f9f9;cursor:pointer;transition:color .3s;-webkit-transition:color .3s;-moz-transition:color .3s}.commandListComponent ul li:nth-child(even){background:#2c2c2c}.commandListComponent ul li:nth-child(odd){background:#222}.commandListComponent ul li .important{font-weight:800}.commandListComponent ul li .important.deprecated{color:red}.commandListComponent ul li .important.unused{color:yellow}.commandListComponent ul li .important.disabled{color:gray}.commandListComponent ul li .important.redundant{color:orange}.commandListComponent ul li .important.valid{color:greenyellow}.commandListComponent ul li .marker{font-size:16px;font-weight:900;color:greenyellow}.commandListComponent ul li.active{background:#f37628;color:#222}.commandListComponent ul li.drawCall{background:#5db0d7;color:#222}.commandListComponent ul li a{margin-left:5px;margin-right:5px;color:#5db0d7;background:#222;padding:5px;font-weight:900;display:inline-block}.commandDetailComponent{position:absolute;top:0;left:60%;right:0;bottom:0;overflow-y:visible;overflow-x:hidden}.jsonGroupComponent{display:block;margin:10px;padding:10px;padding-bottom:5px}.jsonGroupComponent .jsonGroupComponentTitle{display:block;font-size:16px;color:#5db0d7;border-bottom:1px solid #5db0d7;padding-bottom:5px;margin-bottom:5px;text-transform:capitalize}.jsonGroupComponent ul{margin:0px;padding:0px;list-style:none}.jsonGroupComponent ul li:nth-child(even){background:#222}.jsonGroupComponent ul li:nth-child(odd){background:#222}.jsonItemComponentKey{color:#F0640D}.jsonItemComponentValue{white-space:pre-wrap}.jsonItemImageHolder{width:50%;margin:auto}.jsonItemImageHolder .jsonItemImage{margin:5px;display:block;border:1px solid #606060;width:100%}.jsonItemImageHolder .jsonItemImage img{width:100%;display:block;margin:auto;max-width:256px;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, #c9c9c9), color-stop(0.25, transparent)),-webkit-gradient(linear, 0 0, 100% 100%, color-stop(0.25, #c9c9c9), color-stop(0.25, transparent)),-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.75, transparent), color-stop(0.75, #c9c9c9)),-webkit-gradient(linear, 0 0, 100% 100%, color-stop(0.75, transparent), color-stop(0.75, #c9c9c9));background-image:-moz-linear-gradient(45deg, #d9d9d9 25%, transparent 25%),-moz-linear-gradient(-45deg, #d9d9d9 25%, transparent 25%),-moz-linear-gradient(45deg, transparent 75%, #d9d9d9 75%),-moz-linear-gradient(-45deg, transparent 75%, #d9d9d9 75%);-webkit-background-size:50px 51px;-moz-background-size:50px 50px;background-size:50px 50px;background-position:0 0, 25px 0, 25px -25px, 0px 25px}.jsonItemImageHolder .jsonItemImage span{margin:0px;padding:5px;word-wrap:break-word;display:inline-block;width:100%;box-sizing:border-box}[commandName=onOpenSourceClicked]:hover{color:#f9f9f9;cursor:pointer;transition:color .3s;-webkit-transition:color .3s;-moz-transition:color .3s}.jsonVisualStateItemComponent{text-align:center;padding:10px}.jsonVisualStateItemComponent img{background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, #c9c9c9), color-stop(0.25, transparent)),-webkit-gradient(linear, 0 0, 100% 100%, color-stop(0.25, #c9c9c9), color-stop(0.25, transparent)),-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.75, transparent), color-stop(0.75, #c9c9c9)),-webkit-gradient(linear, 0 0, 100% 100%, color-stop(0.75, transparent), color-stop(0.75, #c9c9c9));background-image:-moz-linear-gradient(45deg, #d9d9d9 25%, transparent 25%),-moz-linear-gradient(-45deg, #d9d9d9 25%, transparent 25%),-moz-linear-gradient(45deg, transparent 75%, #d9d9d9 75%),-moz-linear-gradient(-45deg, transparent 75%, #d9d9d9 75%);-webkit-background-size:50px 51px;-moz-background-size:50px 50px;background-size:50px 50px;background-position:0 0, 25px 0, 25px -25px, 0px 25px;border:1px solid #606060;margin:5px;width:100%;max-width:512px;max-height:800px}.jsonVisualStateItemComponent span{display:block}.jsonContentComponent{position:absolute;top:0;left:0;right:0;bottom:0;padding:10px;overflow-y:visible;overflow-x:hidden}.jsonItemComponentValue{word-break:break-all;white-space:normal}.jsonSourceItemComponentOpen{font-weight:bold;color:#5db0d7;text-decoration:underline}.sourceCodeMenuComponentContainer{position:absolute;left:0;top:0;right:40%}.sourceCodeMenuComponent{font-family:'Montserrat', sans-serif;font-size:13px;font-weight:300;line-height:40px;flex:1 100%;display:flex;flex-flow:row wrap;height:42px;outline:0 none;border-bottom:2px solid #222;box-sizing:border-box;list-style:none;margin:0;background:#2c2c2c;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-flow:row wrap;flex-flow:row wrap;justify-content:flex-end}.sourceCodeMenuComponent .resultViewMenuOpen{display:none;visibility:hidden}.sourceCodeMenuComponent a{outline:0 none;text-decoration:none;display:block;padding:0 20px 0 20px;color:#ccc;background:#2c2c2c;box-sizing:border-box;height:100%}.sourceCodeMenuComponent a.active{background:#222;color:white;font-weight:400;border-bottom:2px solid #F0640D}.sourceCodeMenuComponent a:hover{background:#222;color:#c9c9c9;cursor:pointer;transition:color .3s;-webkit-transition:color .3s;-moz-transition:color .3s}.sourceCodeMenuComponent a:hover.active{color:#F0640D;transition:color 0;-webkit-transition:color 0;-moz-transition:color 0}.sourceCodeMenuComponent a.clearSearch{display:inline-block;padding:0px;margin-left:-30px;margin-right:20px;z-index:9000;color:#f9f9f9}.sourceCodeMenuComponent a.clearSearch:hover{background:#2c2c2c;color:#F0640D}.sourceCodeMenuComponent input{border:0;font-family:'Montserrat', sans-serif;font-weight:300;padding:0 20px 0 20px;background:#464646;color:#f9f9f9;height:100%;position:relative;top:-1px;box-sizing:border-box}.sourceCodeMenuComponent input:focus{border:0;outline:0 none}.sourceCodeMenuComponent .clearSearch{position:relative;background:transparent;display:inline;padding:0px;margin-left:-30px;z-index:9000;color:#F0640D}.sourceCodeMenuComponent .clearSearch:hover{background:transparent !important}.sourceCodeMenuComponent ::-webkit-input-placeholder{color:#ccc}.sourceCodeMenuComponent :-moz-placeholder{color:#ccc}.sourceCodeMenuComponent ::-moz-placeholder{color:#ccc}.sourceCodeMenuComponent :-ms-input-placeholder{color:#ccc}.sourceCodeComponent{position:absolute;top:42px;left:0;bottom:0;right:40%;background:#222;z-index:9000;overflow-x:visible;overflow:auto}.sourceCodeComponent .sourceCodeComponentTitle{font-size:16px;font-weight:800;line-height:50px;color:#F0640D;padding:1em;margin:.5em 0}\n",""]),x.exports=S},function(x,S,w){"use strict";w.r(S),w.d(S,"EmbeddedFrontend",(function(){return ar})),w.d(S,"Spector",(function(){return sr}));var U,G=function(){function e(){}return e.isBuildableProgram=function(x){return!!x&&!!x[this.rebuildProgramFunctionName]},e.rebuildProgram=function(x,S,w,U,G){this.isBuildableProgram(x)&&x[this.rebuildProgramFunctionName](S,w,U,G)},e.rebuildProgramFunctionName="__SPECTOR_rebuildProgram",e}();!function(x){x[x.noLog=0]="noLog",x[x.error=1]="error",x[x.warning=2]="warning",x[x.info=3]="info"}(U||(U={}));var H,z=function(){function e(){}return e.error=function(x){for(var S=[],w=1;w0&&console.error(x,S)},e.warn=function(x){for(var S=[],w=1;w1&&console.warn(x,S)},e.info=function(x){for(var S=[],w=1;w2&&console.log(x,S)},e.level=U.warning,e}(),j=function(){function e(){this.callbacks=[],this.counter=-1}return e.prototype.add=function(x,S){return this.counter++,S&&(x=x.bind(S)),this.callbacks[this.counter]=x,this.counter},e.prototype.remove=function(x){delete this.callbacks[x]},e.prototype.clear=function(){this.callbacks={}},e.prototype.trigger=function(x){for(var S in this.callbacks)this.callbacks.hasOwnProperty(S)&&this.callbacks[S](x)},e}(),X=function(){function e(){if(window.performance&&window.performance.now)this.nowFunction=this.dateBasedPerformanceNow.bind(this);else{var x=new Date;this.nowFunction=x.getTime.bind(x)}}return e.prototype.dateBasedPerformanceNow=function(){return performance.timing.navigationStart+performance.now()},Object.defineProperty(e,"now",{get:function(){return e.instance.nowFunction()},enumerable:!0,configurable:!0}),e.instance=new e,e}(),K=function(){function e(x){this.options=x}return e.prototype.appendAnalysis=function(x){x.analyses=x.analyses||[];var S=this.getAnalysis(x);x.analyses.push(S)},e.prototype.getAnalysis=function(x){var S={analyserName:this.analyserName};return this.appendToAnalysis(x,S),S},e}(),q=(H=function(x,S){return(H=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)},function(x,S){function n(){this.constructor=x}H(x,S),x.prototype=null===S?Object.create(S):(n.prototype=S.prototype,new n)}),Y=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return q(t,x),Object.defineProperty(t.prototype,"analyserName",{get:function(){return t.analyserName},enumerable:!0,configurable:!0}),t.prototype.appendToAnalysis=function(x,S){if(x.commands){for(var w={},U=0,G=x.commands;U-1&&S.draw++}}},t.analyserName="CommandsSummary",t}(K),ee=function(){function e(){}return e.isWebGlConstant=function(x){return null!==ne[x]&&void 0!==ne[x]},e.stringifyWebGlConstant=function(x,S){if(0===x)return this.zeroMeaningByCommand[S]||"0";if(1===x)return this.oneMeaningByCommand[S]||"1";var w=ne[x];return w?w.name:x+""},e.DEPTH_BUFFER_BIT={name:"DEPTH_BUFFER_BIT",value:256,description:"Passed to clear to clear the current depth buffer."},e.STENCIL_BUFFER_BIT={name:"STENCIL_BUFFER_BIT",value:1024,description:"Passed to clear to clear the current stencil buffer."},e.COLOR_BUFFER_BIT={name:"COLOR_BUFFER_BIT",value:16384,description:"Passed to clear to clear the current color buffer."},e.POINTS={name:"POINTS",value:0,description:"Passed to drawElements or drawArrays to draw single points."},e.LINES={name:"LINES",value:1,description:"Passed to drawElements or drawArrays to draw lines. Each vertex connects to the one after it."},e.LINE_LOOP={name:"LINE_LOOP",value:2,description:"Passed to drawElements or drawArrays to draw lines. Each set of two vertices is treated as a separate line segment."},e.LINE_STRIP={name:"LINE_STRIP",value:3,description:"Passed to drawElements or drawArrays to draw a connected group of line segments from the first vertex to the last."},e.TRIANGLES={name:"TRIANGLES",value:4,description:"Passed to drawElements or drawArrays to draw triangles. Each set of three vertices creates a separate triangle."},e.TRIANGLE_STRIP={name:"TRIANGLE_STRIP",value:5,description:"Passed to drawElements or drawArrays to draw a connected group of triangles."},e.TRIANGLE_FAN={name:"TRIANGLE_FAN",value:6,description:"Passed to drawElements or drawArrays to draw a connected group of triangles. Each vertex connects to the previous and the first vertex in the fan."},e.ZERO={name:"ZERO",value:0,description:"Passed to blendFunc or blendFuncSeparate to turn off a component."},e.ONE={name:"ONE",value:1,description:"Passed to blendFunc or blendFuncSeparate to turn on a component."},e.SRC_COLOR={name:"SRC_COLOR",value:768,description:"Passed to blendFunc or blendFuncSeparate to multiply a component by the source elements color."},e.ONE_MINUS_SRC_COLOR={name:"ONE_MINUS_SRC_COLOR",value:769,description:"Passed to blendFunc or blendFuncSeparate to multiply a component by one minus the source elements color."},e.SRC_ALPHA={name:"SRC_ALPHA",value:770,description:"Passed to blendFunc or blendFuncSeparate to multiply a component by the source's alpha."},e.ONE_MINUS_SRC_ALPHA={name:"ONE_MINUS_SRC_ALPHA",value:771,description:"Passed to blendFunc or blendFuncSeparate to multiply a component by one minus the source's alpha."},e.DST_ALPHA={name:"DST_ALPHA",value:772,description:"Passed to blendFunc or blendFuncSeparate to multiply a component by the destination's alpha."},e.ONE_MINUS_DST_ALPHA={name:"ONE_MINUS_DST_ALPHA",value:773,description:"Passed to blendFunc or blendFuncSeparate to multiply a component by one minus the destination's alpha."},e.DST_COLOR={name:"DST_COLOR",value:774,description:"Passed to blendFunc or blendFuncSeparate to multiply a component by the destination's color."},e.ONE_MINUS_DST_COLOR={name:"ONE_MINUS_DST_COLOR",value:775,description:"Passed to blendFunc or blendFuncSeparate to multiply a component by one minus the destination's color."},e.SRC_ALPHA_SATURATE={name:"SRC_ALPHA_SATURATE",value:776,description:"Passed to blendFunc or blendFuncSeparate to multiply a component by the minimum of source's alpha or one minus the destination's alpha."},e.CONSTANT_COLOR={name:"CONSTANT_COLOR",value:32769,description:"Passed to blendFunc or blendFuncSeparate to specify a constant color blend function."},e.ONE_MINUS_CONSTANT_COLOR={name:"ONE_MINUS_CONSTANT_COLOR",value:32770,description:"Passed to blendFunc or blendFuncSeparate to specify one minus a constant color blend function."},e.CONSTANT_ALPHA={name:"CONSTANT_ALPHA",value:32771,description:"Passed to blendFunc or blendFuncSeparate to specify a constant alpha blend function."},e.ONE_MINUS_CONSTANT_ALPHA={name:"ONE_MINUS_CONSTANT_ALPHA",value:32772,description:"Passed to blendFunc or blendFuncSeparate to specify one minus a constant alpha blend function."},e.FUNC_ADD={name:"FUNC_ADD",value:32774,description:"Passed to blendEquation or blendEquationSeparate to set an addition blend function."},e.FUNC_SUBSTRACT={name:"FUNC_SUBSTRACT",value:32778,description:"Passed to blendEquation or blendEquationSeparate to specify a subtraction blend function (source - destination)."},e.FUNC_REVERSE_SUBTRACT={name:"FUNC_REVERSE_SUBTRACT",value:32779,description:"Passed to blendEquation or blendEquationSeparate to specify a reverse subtraction blend function (destination - source)."},e.BLEND_EQUATION={name:"BLEND_EQUATION",value:32777,description:"Passed to getParameter to get the current RGB blend function."},e.BLEND_EQUATION_RGB={name:"BLEND_EQUATION_RGB",value:32777,description:"Passed to getParameter to get the current RGB blend function. Same as BLEND_EQUATION"},e.BLEND_EQUATION_ALPHA={name:"BLEND_EQUATION_ALPHA",value:34877,description:"Passed to getParameter to get the current alpha blend function. Same as BLEND_EQUATION"},e.BLEND_DST_RGB={name:"BLEND_DST_RGB",value:32968,description:"Passed to getParameter to get the current destination RGB blend function."},e.BLEND_SRC_RGB={name:"BLEND_SRC_RGB",value:32969,description:"Passed to getParameter to get the current destination RGB blend function."},e.BLEND_DST_ALPHA={name:"BLEND_DST_ALPHA",value:32970,description:"Passed to getParameter to get the current destination alpha blend function."},e.BLEND_SRC_ALPHA={name:"BLEND_SRC_ALPHA",value:32971,description:"Passed to getParameter to get the current source alpha blend function."},e.BLEND_COLOR={name:"BLEND_COLOR",value:32773,description:"Passed to getParameter to return a the current blend color."},e.ARRAY_BUFFER_BINDING={name:"ARRAY_BUFFER_BINDING",value:34964,description:"Passed to getParameter to get the array buffer binding."},e.ELEMENT_ARRAY_BUFFER_BINDING={name:"ELEMENT_ARRAY_BUFFER_BINDING",value:34965,description:"Passed to getParameter to get the current element array buffer."},e.LINE_WIDTH={name:"LINE_WIDTH",value:2849,description:"Passed to getParameter to get the current lineWidth (set by the lineWidth method)."},e.ALIASED_POINT_SIZE_RANGE={name:"ALIASED_POINT_SIZE_RANGE",value:33901,description:"Passed to getParameter to get the current size of a point drawn with gl.POINTS"},e.ALIASED_LINE_WIDTH_RANGE={name:"ALIASED_LINE_WIDTH_RANGE",value:33902,description:"Passed to getParameter to get the range of available widths for a line. Returns a length-2 array with the lo value at 0, and hight at 1."},e.CULL_FACE_MODE={name:"CULL_FACE_MODE",value:2885,description:"Passed to getParameter to get the current value of cullFace. Should return FRONT, BACK, or FRONT_AND_BACK"},e.FRONT_FACE={name:"FRONT_FACE",value:2886,description:"Passed to getParameter to determine the current value of frontFace. Should return CW or CCW."},e.DEPTH_RANGE={name:"DEPTH_RANGE",value:2928,description:"Passed to getParameter to return a length-2 array of floats giving the current depth range."},e.DEPTH_WRITEMASK={name:"DEPTH_WRITEMASK",value:2930,description:"Passed to getParameter to determine if the depth write mask is enabled."},e.DEPTH_CLEAR_VALUE={name:"DEPTH_CLEAR_VALUE",value:2931,description:"Passed to getParameter to determine the current depth clear value."},e.DEPTH_FUNC={name:"DEPTH_FUNC",value:2932,description:"Passed to getParameter to get the current depth function. Returns NEVER, ALWAYS, LESS, EQUAL, LEQUAL, GREATER, GEQUAL, or NOTEQUAL."},e.STENCIL_CLEAR_VALUE={name:"STENCIL_CLEAR_VALUE",value:2961,description:"Passed to getParameter to get the value the stencil will be cleared to."},e.STENCIL_FUNC={name:"STENCIL_FUNC",value:2962,description:"Passed to getParameter to get the current stencil function. Returns NEVER, ALWAYS, LESS, EQUAL, LEQUAL, GREATER, GEQUAL, or NOTEQUAL."},e.STENCIL_FAIL={name:"STENCIL_FAIL",value:2964,description:"Passed to getParameter to get the current stencil fail function. Should return KEEP, REPLACE, INCR, DECR, INVERT, INCR_WRAP, or DECR_WRAP."},e.STENCIL_PASS_DEPTH_FAIL={name:"STENCIL_PASS_DEPTH_FAIL",value:2965,description:"Passed to getParameter to get the current stencil fail function should the depth buffer test fail. Should return KEEP, REPLACE, INCR, DECR, INVERT, INCR_WRAP, or DECR_WRAP."},e.STENCIL_PASS_DEPTH_PASS={name:"STENCIL_PASS_DEPTH_PASS",value:2966,description:"Passed to getParameter to get the current stencil fail function should the depth buffer test pass. Should return KEEP, REPLACE, INCR, DECR, INVERT, INCR_WRAP, or DECR_WRAP."},e.STENCIL_REF={name:"STENCIL_REF",value:2967,description:"Passed to getParameter to get the reference value used for stencil tests."},e.STENCIL_VALUE_MASK={name:"STENCIL_VALUE_MASK",value:2963,description:" "},e.STENCIL_WRITEMASK={name:"STENCIL_WRITEMASK",value:2968,description:" "},e.STENCIL_BACK_FUNC={name:"STENCIL_BACK_FUNC",value:34816,description:" "},e.STENCIL_BACK_FAIL={name:"STENCIL_BACK_FAIL",value:34817,description:" "},e.STENCIL_BACK_PASS_DEPTH_FAIL={name:"STENCIL_BACK_PASS_DEPTH_FAIL",value:34818,description:" "},e.STENCIL_BACK_PASS_DEPTH_PASS={name:"STENCIL_BACK_PASS_DEPTH_PASS",value:34819,description:" "},e.STENCIL_BACK_REF={name:"STENCIL_BACK_REF",value:36003,description:" "},e.STENCIL_BACK_VALUE_MASK={name:"STENCIL_BACK_VALUE_MASK",value:36004,description:" "},e.STENCIL_BACK_WRITEMASK={name:"STENCIL_BACK_WRITEMASK",value:36005,description:" "},e.VIEWPORT={name:"VIEWPORT",value:2978,description:"Returns an Int32Array with four elements for the current viewport dimensions."},e.SCISSOR_BOX={name:"SCISSOR_BOX",value:3088,description:"Returns an Int32Array with four elements for the current scissor box dimensions."},e.COLOR_CLEAR_VALUE={name:"COLOR_CLEAR_VALUE",value:3106,description:" "},e.COLOR_WRITEMASK={name:"COLOR_WRITEMASK",value:3107,description:" "},e.UNPACK_ALIGNMENT={name:"UNPACK_ALIGNMENT",value:3317,description:" "},e.PACK_ALIGNMENT={name:"PACK_ALIGNMENT",value:3333,description:" "},e.MAX_TEXTURE_SIZE={name:"MAX_TEXTURE_SIZE",value:3379,description:" "},e.MAX_VIEWPORT_DIMS={name:"MAX_VIEWPORT_DIMS",value:3386,description:" "},e.SUBPIXEL_BITS={name:"SUBPIXEL_BITS",value:3408,description:" "},e.RED_BITS={name:"RED_BITS",value:3410,description:" "},e.GREEN_BITS={name:"GREEN_BITS",value:3411,description:" "},e.BLUE_BITS={name:"BLUE_BITS",value:3412,description:" "},e.ALPHA_BITS={name:"ALPHA_BITS",value:3413,description:" "},e.DEPTH_BITS={name:"DEPTH_BITS",value:3414,description:" "},e.STENCIL_BITS={name:"STENCIL_BITS",value:3415,description:" "},e.POLYGON_OFFSET_UNITS={name:"POLYGON_OFFSET_UNITS",value:10752,description:" "},e.POLYGON_OFFSET_FACTOR={name:"POLYGON_OFFSET_FACTOR",value:32824,description:" "},e.TEXTURE_BINDING_2D={name:"TEXTURE_BINDING_2D",value:32873,description:" "},e.SAMPLE_BUFFERS={name:"SAMPLE_BUFFERS",value:32936,description:" "},e.SAMPLES={name:"SAMPLES",value:32937,description:" "},e.SAMPLE_COVERAGE_VALUE={name:"SAMPLE_COVERAGE_VALUE",value:32938,description:" "},e.SAMPLE_COVERAGE_INVERT={name:"SAMPLE_COVERAGE_INVERT",value:32939,description:" "},e.COMPRESSED_TEXTURE_FORMATS={name:"COMPRESSED_TEXTURE_FORMATS",value:34467,description:" "},e.VENDOR={name:"VENDOR",value:7936,description:" "},e.RENDERER={name:"RENDERER",value:7937,description:" "},e.VERSION={name:"VERSION",value:7938,description:" "},e.IMPLEMENTATION_COLOR_READ_TYPE={name:"IMPLEMENTATION_COLOR_READ_TYPE",value:35738,description:" "},e.IMPLEMENTATION_COLOR_READ_FORMAT={name:"IMPLEMENTATION_COLOR_READ_FORMAT",value:35739,description:" "},e.BROWSER_DEFAULT_WEBGL={name:"BROWSER_DEFAULT_WEBGL",value:37444,description:" "},e.STATIC_DRAW={name:"STATIC_DRAW",value:35044,description:"Passed to bufferData as a hint about whether the contents of the buffer are likely to be used often and not change often."},e.STREAM_DRAW={name:"STREAM_DRAW",value:35040,description:"Passed to bufferData as a hint about whether the contents of the buffer are likely to not be used often."},e.DYNAMIC_DRAW={name:"DYNAMIC_DRAW",value:35048,description:"Passed to bufferData as a hint about whether the contents of the buffer are likely to be used often and change often."},e.ARRAY_BUFFER={name:"ARRAY_BUFFER",value:34962,description:"Passed to bindBuffer or bufferData to specify the type of buffer being used."},e.ELEMENT_ARRAY_BUFFER={name:"ELEMENT_ARRAY_BUFFER",value:34963,description:"Passed to bindBuffer or bufferData to specify the type of buffer being used."},e.BUFFER_SIZE={name:"BUFFER_SIZE",value:34660,description:"Passed to getBufferParameter to get a buffer's size."},e.BUFFER_USAGE={name:"BUFFER_USAGE",value:34661,description:"Passed to getBufferParameter to get the hint for the buffer passed in when it was created."},e.CURRENT_VERTEX_ATTRIB={name:"CURRENT_VERTEX_ATTRIB",value:34342,description:"Passed to getVertexAttrib to read back the current vertex attribute."},e.VERTEX_ATTRIB_ARRAY_ENABLED={name:"VERTEX_ATTRIB_ARRAY_ENABLED",value:34338,description:" "},e.VERTEX_ATTRIB_ARRAY_SIZE={name:"VERTEX_ATTRIB_ARRAY_SIZE",value:34339,description:" "},e.VERTEX_ATTRIB_ARRAY_STRIDE={name:"VERTEX_ATTRIB_ARRAY_STRIDE",value:34340,description:" "},e.VERTEX_ATTRIB_ARRAY_TYPE={name:"VERTEX_ATTRIB_ARRAY_TYPE",value:34341,description:" "},e.VERTEX_ATTRIB_ARRAY_NORMALIZED={name:"VERTEX_ATTRIB_ARRAY_NORMALIZED",value:34922,description:" "},e.VERTEX_ATTRIB_ARRAY_POINTER={name:"VERTEX_ATTRIB_ARRAY_POINTER",value:34373,description:" "},e.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING={name:"VERTEX_ATTRIB_ARRAY_BUFFER_BINDING",value:34975,description:" "},e.CULL_FACE={name:"CULL_FACE",value:2884,description:"Passed to enable/disable to turn on/off culling. Can also be used with getParameter to find the current culling method."},e.FRONT={name:"FRONT",value:1028,description:"Passed to cullFace to specify that only front faces should be drawn."},e.BACK={name:"BACK",value:1029,description:"Passed to cullFace to specify that only back faces should be drawn."},e.FRONT_AND_BACK={name:"FRONT_AND_BACK",value:1032,description:"Passed to cullFace to specify that front and back faces should be drawn."},e.BLEND={name:"BLEND",value:3042,description:"Passed to enable/disable to turn on/off blending. Can also be used with getParameter to find the current blending method."},e.DEPTH_TEST={name:"DEPTH_TEST",value:2929,description:"Passed to enable/disable to turn on/off the depth test. Can also be used with getParameter to query the depth test."},e.DITHER={name:"DITHER",value:3024,description:"Passed to enable/disable to turn on/off dithering. Can also be used with getParameter to find the current dithering method."},e.POLYGON_OFFSET_FILL={name:"POLYGON_OFFSET_FILL",value:32823,description:"Passed to enable/disable to turn on/off the polygon offset. Useful for rendering hidden-line images, decals, and or solids with highlighted edges. Can also be used with getParameter to query the scissor test."},e.SAMPLE_ALPHA_TO_COVERAGE={name:"SAMPLE_ALPHA_TO_COVERAGE",value:32926,description:"Passed to enable/disable to turn on/off the alpha to coverage. Used in multi-sampling alpha channels."},e.SAMPLE_COVERAGE={name:"SAMPLE_COVERAGE",value:32928,description:"Passed to enable/disable to turn on/off the sample coverage. Used in multi-sampling."},e.SCISSOR_TEST={name:"SCISSOR_TEST",value:3089,description:"Passed to enable/disable to turn on/off the scissor test. Can also be used with getParameter to query the scissor test."},e.STENCIL_TEST={name:"STENCIL_TEST",value:2960,description:"Passed to enable/disable to turn on/off the stencil test. Can also be used with getParameter to query the stencil test."},e.NO_ERROR={name:"NO_ERROR",value:0,description:"Returned from getError."},e.INVALID_ENUM={name:"INVALID_ENUM",value:1280,description:"Returned from getError."},e.INVALID_VALUE={name:"INVALID_VALUE",value:1281,description:"Returned from getError."},e.INVALID_OPERATION={name:"INVALID_OPERATION",value:1282,description:"Returned from getError."},e.OUT_OF_MEMORY={name:"OUT_OF_MEMORY",value:1285,description:"Returned from getError."},e.CONTEXT_LOST_WEBGL={name:"CONTEXT_LOST_WEBGL",value:37442,description:"Returned from getError."},e.CW={name:"CW",value:2304,description:"Passed to frontFace to specify the front face of a polygon is drawn in the clockwise direction"},e.CCW={name:"CCW",value:2305,description:"Passed to frontFace to specify the front face of a polygon is drawn in the counter clockwise direction"},e.DONT_CARE={name:"DONT_CARE",value:4352,description:"There is no preference for this behavior."},e.FASTEST={name:"FASTEST",value:4353,description:"The most efficient behavior should be used."},e.NICEST={name:"NICEST",value:4354,description:"The most correct or the highest quality option should be used."},e.GENERATE_MIPMAP_HINT={name:"GENERATE_MIPMAP_HINT",value:33170,description:"Hint for the quality of filtering when generating mipmap images with WebGLRenderingContext.generateMipmap()."},e.BYTE={name:"BYTE",value:5120,description:" "},e.UNSIGNED_BYTE={name:"UNSIGNED_BYTE",value:5121,description:" "},e.SHORT={name:"SHORT",value:5122,description:" "},e.UNSIGNED_SHORT={name:"UNSIGNED_SHORT",value:5123,description:" "},e.INT={name:"INT",value:5124,description:" "},e.UNSIGNED_INT={name:"UNSIGNED_INT",value:5125,description:" "},e.FLOAT={name:"FLOAT",value:5126,description:" "},e.DEPTH_COMPONENT={name:"DEPTH_COMPONENT",value:6402,description:" "},e.ALPHA={name:"ALPHA",value:6406,description:" "},e.RGB={name:"RGB",value:6407,description:" "},e.RGBA={name:"RGBA",value:6408,description:" "},e.LUMINANCE={name:"LUMINANCE",value:6409,description:" "},e.LUMINANCE_ALPHA={name:"LUMINANCE_ALPHA",value:6410,description:" "},e.UNSIGNED_SHORT_4_4_4_4={name:"UNSIGNED_SHORT_4_4_4_4",value:32819,description:" "},e.UNSIGNED_SHORT_5_5_5_1={name:"UNSIGNED_SHORT_5_5_5_1",value:32820,description:" "},e.UNSIGNED_SHORT_5_6_5={name:"UNSIGNED_SHORT_5_6_5",value:33635,description:" "},e.FRAGMENT_SHADER={name:"FRAGMENT_SHADER",value:35632,description:"Passed to createShader to define a fragment shader."},e.VERTEX_SHADER={name:"VERTEX_SHADER",value:35633,description:"Passed to createShader to define a vertex shader"},e.COMPILE_STATUS={name:"COMPILE_STATUS",value:35713,description:"Passed to getShaderParamter to get the status of the compilation. Returns false if the shader was not compiled. You can then query getShaderInfoLog to find the exact error"},e.DELETE_STATUS={name:"DELETE_STATUS",value:35712,description:"Passed to getShaderParamter to determine if a shader was deleted via deleteShader. Returns true if it was, false otherwise."},e.LINK_STATUS={name:"LINK_STATUS",value:35714,description:"Passed to getProgramParameter after calling linkProgram to determine if a program was linked correctly. Returns false if there were errors. Use getProgramInfoLog to find the exact error."},e.VALIDATE_STATUS={name:"VALIDATE_STATUS",value:35715,description:"Passed to getProgramParameter after calling validateProgram to determine if it is valid. Returns false if errors were found."},e.ATTACHED_SHADERS={name:"ATTACHED_SHADERS",value:35717,description:"Passed to getProgramParameter after calling attachShader to determine if the shader was attached correctly. Returns false if errors occurred."},e.ACTIVE_ATTRIBUTES={name:"ACTIVE_ATTRIBUTES",value:35721,description:"Passed to getProgramParameter to get the number of attributes active in a program."},e.ACTIVE_UNIFORMS={name:"ACTIVE_UNIFORMS",value:35718,description:"Passed to getProgramParamter to get the number of uniforms active in a program."},e.MAX_VERTEX_ATTRIBS={name:"MAX_VERTEX_ATTRIBS",value:34921,description:" "},e.MAX_VERTEX_UNIFORM_VECTORS={name:"MAX_VERTEX_UNIFORM_VECTORS",value:36347,description:" "},e.MAX_VARYING_VECTORS={name:"MAX_VARYING_VECTORS",value:36348,description:" "},e.MAX_COMBINED_TEXTURE_IMAGE_UNITS={name:"MAX_COMBINED_TEXTURE_IMAGE_UNITS",value:35661,description:" "},e.MAX_VERTEX_TEXTURE_IMAGE_UNITS={name:"MAX_VERTEX_TEXTURE_IMAGE_UNITS",value:35660,description:" "},e.MAX_TEXTURE_IMAGE_UNITS={name:"MAX_TEXTURE_IMAGE_UNITS",value:34930,description:"Implementation dependent number of maximum texture units. At least 8."},e.MAX_FRAGMENT_UNIFORM_VECTORS={name:"MAX_FRAGMENT_UNIFORM_VECTORS",value:36349,description:" "},e.SHADER_TYPE={name:"SHADER_TYPE",value:35663,description:" "},e.SHADING_LANGUAGE_VERSION={name:"SHADING_LANGUAGE_VERSION",value:35724,description:" "},e.CURRENT_PROGRAM={name:"CURRENT_PROGRAM",value:35725,description:" "},e.NEVER={name:"NEVER",value:512,description:"Passed to depthFunction or stencilFunction to specify depth or stencil tests will never pass. i.e. Nothing will be drawn."},e.ALWAYS={name:"ALWAYS",value:519,description:"Passed to depthFunction or stencilFunction to specify depth or stencil tests will always pass. i.e. Pixels will be drawn in the order they are drawn."},e.LESS={name:"LESS",value:513,description:"Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is less than the stored value."},e.EQUAL={name:"EQUAL",value:514,description:"Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is equals to the stored value."},e.LEQUAL={name:"LEQUAL",value:515,description:"Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is less than or equal to the stored value."},e.GREATER={name:"GREATER",value:516,description:"Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is greater than the stored value."},e.GEQUAL={name:"GEQUAL",value:518,description:"Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is greater than or equal to the stored value."},e.NOTEQUAL={name:"NOTEQUAL",value:517,description:"Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is not equal to the stored value."},e.KEEP={name:"KEEP",value:7680,description:" "},e.REPLACE={name:"REPLACE",value:7681,description:" "},e.INCR={name:"INCR",value:7682,description:" "},e.DECR={name:"DECR",value:7683,description:" "},e.INVERT={name:"INVERT",value:5386,description:" "},e.INCR_WRAP={name:"INCR_WRAP",value:34055,description:" "},e.DECR_WRAP={name:"DECR_WRAP",value:34056,description:" "},e.NEAREST={name:"NEAREST",value:9728,description:" "},e.LINEAR={name:"LINEAR",value:9729,description:" "},e.NEAREST_MIPMAP_NEAREST={name:"NEAREST_MIPMAP_NEAREST",value:9984,description:" "},e.LINEAR_MIPMAP_NEAREST={name:"LINEAR_MIPMAP_NEAREST",value:9985,description:" "},e.NEAREST_MIPMAP_LINEAR={name:"NEAREST_MIPMAP_LINEAR",value:9986,description:" "},e.LINEAR_MIPMAP_LINEAR={name:"LINEAR_MIPMAP_LINEAR",value:9987,description:" "},e.TEXTURE_MAG_FILTER={name:"TEXTURE_MAG_FILTER",value:10240,description:" "},e.TEXTURE_MIN_FILTER={name:"TEXTURE_MIN_FILTER",value:10241,description:" "},e.TEXTURE_WRAP_S={name:"TEXTURE_WRAP_S",value:10242,description:" "},e.TEXTURE_WRAP_T={name:"TEXTURE_WRAP_T",value:10243,description:" "},e.TEXTURE_2D={name:"TEXTURE_2D",value:3553,description:" "},e.TEXTURE={name:"TEXTURE",value:5890,description:" "},e.TEXTURE_CUBE_MAP={name:"TEXTURE_CUBE_MAP",value:34067,description:" "},e.TEXTURE_BINDING_CUBE_MAP={name:"TEXTURE_BINDING_CUBE_MAP",value:34068,description:" "},e.TEXTURE_CUBE_MAP_POSITIVE_X={name:"TEXTURE_CUBE_MAP_POSITIVE_X",value:34069,description:" "},e.TEXTURE_CUBE_MAP_NEGATIVE_X={name:"TEXTURE_CUBE_MAP_NEGATIVE_X",value:34070,description:" "},e.TEXTURE_CUBE_MAP_POSITIVE_Y={name:"TEXTURE_CUBE_MAP_POSITIVE_Y",value:34071,description:" "},e.TEXTURE_CUBE_MAP_NEGATIVE_Y={name:"TEXTURE_CUBE_MAP_NEGATIVE_Y",value:34072,description:" "},e.TEXTURE_CUBE_MAP_POSITIVE_Z={name:"TEXTURE_CUBE_MAP_POSITIVE_Z",value:34073,description:" "},e.TEXTURE_CUBE_MAP_NEGATIVE_Z={name:"TEXTURE_CUBE_MAP_NEGATIVE_Z",value:34074,description:" "},e.MAX_CUBE_MAP_TEXTURE_SIZE={name:"MAX_CUBE_MAP_TEXTURE_SIZE",value:34076,description:" "},e.TEXTURE0={name:"TEXTURE0",value:33984,description:"A texture unit."},e.TEXTURE1={name:"TEXTURE1",value:33985,description:"A texture unit."},e.TEXTURE2={name:"TEXTURE2",value:33986,description:"A texture unit."},e.TEXTURE3={name:"TEXTURE3",value:33987,description:"A texture unit."},e.TEXTURE4={name:"TEXTURE4",value:33988,description:"A texture unit."},e.TEXTURE5={name:"TEXTURE5",value:33989,description:"A texture unit."},e.TEXTURE6={name:"TEXTURE6",value:33990,description:"A texture unit."},e.TEXTURE7={name:"TEXTURE7",value:33991,description:"A texture unit."},e.TEXTURE8={name:"TEXTURE8",value:33992,description:"A texture unit."},e.TEXTURE9={name:"TEXTURE9",value:33993,description:"A texture unit."},e.TEXTURE10={name:"TEXTURE10",value:33994,description:"A texture unit."},e.TEXTURE11={name:"TEXTURE11",value:33995,description:"A texture unit."},e.TEXTURE12={name:"TEXTURE12",value:33996,description:"A texture unit."},e.TEXTURE13={name:"TEXTURE13",value:33997,description:"A texture unit."},e.TEXTURE14={name:"TEXTURE14",value:33998,description:"A texture unit."},e.TEXTURE15={name:"TEXTURE15",value:33999,description:"A texture unit."},e.TEXTURE16={name:"TEXTURE16",value:34e3,description:"A texture unit."},e.TEXTURE17={name:"TEXTURE17",value:34001,description:"A texture unit."},e.TEXTURE18={name:"TEXTURE18",value:34002,description:"A texture unit."},e.TEXTURE19={name:"TEXTURE19",value:34003,description:"A texture unit."},e.TEXTURE20={name:"TEXTURE20",value:34004,description:"A texture unit."},e.TEXTURE21={name:"TEXTURE21",value:34005,description:"A texture unit."},e.TEXTURE22={name:"TEXTURE22",value:34006,description:"A texture unit."},e.TEXTURE23={name:"TEXTURE23",value:34007,description:"A texture unit."},e.TEXTURE24={name:"TEXTURE24",value:34008,description:"A texture unit."},e.TEXTURE25={name:"TEXTURE25",value:34009,description:"A texture unit."},e.TEXTURE26={name:"TEXTURE26",value:34010,description:"A texture unit."},e.TEXTURE27={name:"TEXTURE27",value:34011,description:"A texture unit."},e.TEXTURE28={name:"TEXTURE28",value:34012,description:"A texture unit."},e.TEXTURE29={name:"TEXTURE29",value:34013,description:"A texture unit."},e.TEXTURE30={name:"TEXTURE30",value:34014,description:"A texture unit."},e.TEXTURE31={name:"TEXTURE31",value:34015,description:"A texture unit."},e.ACTIVE_TEXTURE={name:"ACTIVE_TEXTURE",value:34016,description:"The current active texture unit."},e.REPEAT={name:"REPEAT",value:10497,description:" "},e.CLAMP_TO_EDGE={name:"CLAMP_TO_EDGE",value:33071,description:" "},e.MIRRORED_REPEAT={name:"MIRRORED_REPEAT",value:33648,description:" "},e.FLOAT_VEC2={name:"FLOAT_VEC2",value:35664,description:" "},e.FLOAT_VEC3={name:"FLOAT_VEC3",value:35665,description:" "},e.FLOAT_VEC4={name:"FLOAT_VEC4",value:35666,description:" "},e.INT_VEC2={name:"INT_VEC2",value:35667,description:" "},e.INT_VEC3={name:"INT_VEC3",value:35668,description:" "},e.INT_VEC4={name:"INT_VEC4",value:35669,description:" "},e.BOOL={name:"BOOL",value:35670,description:" "},e.BOOL_VEC2={name:"BOOL_VEC2",value:35671,description:" "},e.BOOL_VEC3={name:"BOOL_VEC3",value:35672,description:" "},e.BOOL_VEC4={name:"BOOL_VEC4",value:35673,description:" "},e.FLOAT_MAT2={name:"FLOAT_MAT2",value:35674,description:" "},e.FLOAT_MAT3={name:"FLOAT_MAT3",value:35675,description:" "},e.FLOAT_MAT4={name:"FLOAT_MAT4",value:35676,description:" "},e.SAMPLER_2D={name:"SAMPLER_2D",value:35678,description:" "},e.SAMPLER_CUBE={name:"SAMPLER_CUBE",value:35680,description:" "},e.LOW_FLOAT={name:"LOW_FLOAT",value:36336,description:" "},e.MEDIUM_FLOAT={name:"MEDIUM_FLOAT",value:36337,description:" "},e.HIGH_FLOAT={name:"HIGH_FLOAT",value:36338,description:" "},e.LOW_INT={name:"LOW_INT",value:36339,description:" "},e.MEDIUM_INT={name:"MEDIUM_INT",value:36340,description:" "},e.HIGH_INT={name:"HIGH_INT",value:36341,description:" "},e.FRAMEBUFFER={name:"FRAMEBUFFER",value:36160,description:" "},e.RENDERBUFFER={name:"RENDERBUFFER",value:36161,description:" "},e.RGBA4={name:"RGBA4",value:32854,description:" "},e.RGB5_A1={name:"RGB5_A1",value:32855,description:" "},e.RGB565={name:"RGB565",value:36194,description:" "},e.DEPTH_COMPONENT16={name:"DEPTH_COMPONENT16",value:33189,description:" "},e.STENCIL_INDEX={name:"STENCIL_INDEX",value:6401,description:" "},e.STENCIL_INDEX8={name:"STENCIL_INDEX8",value:36168,description:" "},e.DEPTH_STENCIL={name:"DEPTH_STENCIL",value:34041,description:" "},e.RENDERBUFFER_WIDTH={name:"RENDERBUFFER_WIDTH",value:36162,description:" "},e.RENDERBUFFER_HEIGHT={name:"RENDERBUFFER_HEIGHT",value:36163,description:" "},e.RENDERBUFFER_INTERNAL_FORMAT={name:"RENDERBUFFER_INTERNAL_FORMAT",value:36164,description:" "},e.RENDERBUFFER_RED_SIZE={name:"RENDERBUFFER_RED_SIZE",value:36176,description:" "},e.RENDERBUFFER_GREEN_SIZE={name:"RENDERBUFFER_GREEN_SIZE",value:36177,description:" "},e.RENDERBUFFER_BLUE_SIZE={name:"RENDERBUFFER_BLUE_SIZE",value:36178,description:" "},e.RENDERBUFFER_ALPHA_SIZE={name:"RENDERBUFFER_ALPHA_SIZE",value:36179,description:" "},e.RENDERBUFFER_DEPTH_SIZE={name:"RENDERBUFFER_DEPTH_SIZE",value:36180,description:" "},e.RENDERBUFFER_STENCIL_SIZE={name:"RENDERBUFFER_STENCIL_SIZE",value:36181,description:" "},e.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE={name:"FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE",value:36048,description:" "},e.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME={name:"FRAMEBUFFER_ATTACHMENT_OBJECT_NAME",value:36049,description:" "},e.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL={name:"FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL",value:36050,description:" "},e.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE={name:"FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE",value:36051,description:" "},e.COLOR_ATTACHMENT0={name:"COLOR_ATTACHMENT0",value:36064,description:" "},e.DEPTH_ATTACHMENT={name:"DEPTH_ATTACHMENT",value:36096,description:" "},e.STENCIL_ATTACHMENT={name:"STENCIL_ATTACHMENT",value:36128,description:" "},e.DEPTH_STENCIL_ATTACHMENT={name:"DEPTH_STENCIL_ATTACHMENT",value:33306,description:" "},e.NONE={name:"NONE",value:0,description:" "},e.FRAMEBUFFER_COMPLETE={name:"FRAMEBUFFER_COMPLETE",value:36053,description:" "},e.FRAMEBUFFER_INCOMPLETE_ATTACHMENT={name:"FRAMEBUFFER_INCOMPLETE_ATTACHMENT",value:36054,description:" "},e.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT={name:"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT",value:36055,description:" "},e.FRAMEBUFFER_INCOMPLETE_DIMENSIONS={name:"FRAMEBUFFER_INCOMPLETE_DIMENSIONS",value:36057,description:" "},e.FRAMEBUFFER_UNSUPPORTED={name:"FRAMEBUFFER_UNSUPPORTED",value:36061,description:" "},e.FRAMEBUFFER_BINDING={name:"FRAMEBUFFER_BINDING",value:36006,description:" "},e.RENDERBUFFER_BINDING={name:"RENDERBUFFER_BINDING",value:36007,description:" "},e.MAX_RENDERBUFFER_SIZE={name:"MAX_RENDERBUFFER_SIZE",value:34024,description:" "},e.INVALID_FRAMEBUFFER_OPERATION={name:"INVALID_FRAMEBUFFER_OPERATION",value:1286,description:" "},e.UNPACK_FLIP_Y_WEBGL={name:"UNPACK_FLIP_Y_WEBGL",value:37440,description:" "},e.UNPACK_PREMULTIPLY_ALPHA_WEBGL={name:"UNPACK_PREMULTIPLY_ALPHA_WEBGL",value:37441,description:" "},e.UNPACK_COLORSPACE_CONVERSION_WEBGL={name:"UNPACK_COLORSPACE_CONVERSION_WEBGL",value:37443,description:" "},e.READ_BUFFER={name:"READ_BUFFER",value:3074,description:" "},e.UNPACK_ROW_LENGTH={name:"UNPACK_ROW_LENGTH",value:3314,description:" "},e.UNPACK_SKIP_ROWS={name:"UNPACK_SKIP_ROWS",value:3315,description:" "},e.UNPACK_SKIP_PIXELS={name:"UNPACK_SKIP_PIXELS",value:3316,description:" "},e.PACK_ROW_LENGTH={name:"PACK_ROW_LENGTH",value:3330,description:" "},e.PACK_SKIP_ROWS={name:"PACK_SKIP_ROWS",value:3331,description:" "},e.PACK_SKIP_PIXELS={name:"PACK_SKIP_PIXELS",value:3332,description:" "},e.TEXTURE_BINDING_3D={name:"TEXTURE_BINDING_3D",value:32874,description:" "},e.UNPACK_SKIP_IMAGES={name:"UNPACK_SKIP_IMAGES",value:32877,description:" "},e.UNPACK_IMAGE_HEIGHT={name:"UNPACK_IMAGE_HEIGHT",value:32878,description:" "},e.MAX_3D_TEXTURE_SIZE={name:"MAX_3D_TEXTURE_SIZE",value:32883,description:" "},e.MAX_ELEMENTS_VERTICES={name:"MAX_ELEMENTS_VERTICES",value:33e3,description:" "},e.MAX_ELEMENTS_INDICES={name:"MAX_ELEMENTS_INDICES",value:33001,description:" "},e.MAX_TEXTURE_LOD_BIAS={name:"MAX_TEXTURE_LOD_BIAS",value:34045,description:" "},e.MAX_FRAGMENT_UNIFORM_COMPONENTS={name:"MAX_FRAGMENT_UNIFORM_COMPONENTS",value:35657,description:" "},e.MAX_VERTEX_UNIFORM_COMPONENTS={name:"MAX_VERTEX_UNIFORM_COMPONENTS",value:35658,description:" "},e.MAX_ARRAY_TEXTURE_LAYERS={name:"MAX_ARRAY_TEXTURE_LAYERS",value:35071,description:" "},e.MIN_PROGRAM_TEXEL_OFFSET={name:"MIN_PROGRAM_TEXEL_OFFSET",value:35076,description:" "},e.MAX_PROGRAM_TEXEL_OFFSET={name:"MAX_PROGRAM_TEXEL_OFFSET",value:35077,description:" "},e.MAX_VARYING_COMPONENTS={name:"MAX_VARYING_COMPONENTS",value:35659,description:" "},e.FRAGMENT_SHADER_DERIVATIVE_HINT={name:"FRAGMENT_SHADER_DERIVATIVE_HINT",value:35723,description:" "},e.RASTERIZER_DISCARD={name:"RASTERIZER_DISCARD",value:35977,description:" "},e.VERTEX_ARRAY_BINDING={name:"VERTEX_ARRAY_BINDING",value:34229,description:" "},e.MAX_VERTEX_OUTPUT_COMPONENTS={name:"MAX_VERTEX_OUTPUT_COMPONENTS",value:37154,description:" "},e.MAX_FRAGMENT_INPUT_COMPONENTS={name:"MAX_FRAGMENT_INPUT_COMPONENTS",value:37157,description:" "},e.MAX_SERVER_WAIT_TIMEOUT={name:"MAX_SERVER_WAIT_TIMEOUT",value:37137,description:" "},e.MAX_ELEMENT_INDEX={name:"MAX_ELEMENT_INDEX",value:36203,description:" "},e.RED={name:"RED",value:6403,description:" "},e.RGB8={name:"RGB8",value:32849,description:" "},e.RGBA8={name:"RGBA8",value:32856,description:" "},e.RGB10_A2={name:"RGB10_A2",value:32857,description:" "},e.TEXTURE_3D={name:"TEXTURE_3D",value:32879,description:" "},e.TEXTURE_WRAP_R={name:"TEXTURE_WRAP_R",value:32882,description:" "},e.TEXTURE_MIN_LOD={name:"TEXTURE_MIN_LOD",value:33082,description:" "},e.TEXTURE_MAX_LOD={name:"TEXTURE_MAX_LOD",value:33083,description:" "},e.TEXTURE_BASE_LEVEL={name:"TEXTURE_BASE_LEVEL",value:33084,description:" "},e.TEXTURE_MAX_LEVEL={name:"TEXTURE_MAX_LEVEL",value:33085,description:" "},e.TEXTURE_COMPARE_MODE={name:"TEXTURE_COMPARE_MODE",value:34892,description:" "},e.TEXTURE_COMPARE_FUNC={name:"TEXTURE_COMPARE_FUNC",value:34893,description:" "},e.SRGB={name:"SRGB",value:35904,description:" "},e.SRGB8={name:"SRGB8",value:35905,description:" "},e.SRGB8_ALPHA8={name:"SRGB8_ALPHA8",value:35907,description:" "},e.COMPARE_REF_TO_TEXTURE={name:"COMPARE_REF_TO_TEXTURE",value:34894,description:" "},e.RGBA32F={name:"RGBA32F",value:34836,description:" "},e.RGB32F={name:"RGB32F",value:34837,description:" "},e.RGBA16F={name:"RGBA16F",value:34842,description:" "},e.RGB16F={name:"RGB16F",value:34843,description:" "},e.TEXTURE_2D_ARRAY={name:"TEXTURE_2D_ARRAY",value:35866,description:" "},e.TEXTURE_BINDING_2D_ARRAY={name:"TEXTURE_BINDING_2D_ARRAY",value:35869,description:" "},e.R11F_G11F_B10F={name:"R11F_G11F_B10F",value:35898,description:" "},e.RGB9_E5={name:"RGB9_E5",value:35901,description:" "},e.RGBA32UI={name:"RGBA32UI",value:36208,description:" "},e.RGB32UI={name:"RGB32UI",value:36209,description:" "},e.RGBA16UI={name:"RGBA16UI",value:36214,description:" "},e.RGB16UI={name:"RGB16UI",value:36215,description:" "},e.RGBA8UI={name:"RGBA8UI",value:36220,description:" "},e.RGB8UI={name:"RGB8UI",value:36221,description:" "},e.RGBA32I={name:"RGBA32I",value:36226,description:" "},e.RGB32I={name:"RGB32I",value:36227,description:" "},e.RGBA16I={name:"RGBA16I",value:36232,description:" "},e.RGB16I={name:"RGB16I",value:36233,description:" "},e.RGBA8I={name:"RGBA8I",value:36238,description:" "},e.RGB8I={name:"RGB8I",value:36239,description:" "},e.RED_INTEGER={name:"RED_INTEGER",value:36244,description:" "},e.RGB_INTEGER={name:"RGB_INTEGER",value:36248,description:" "},e.RGBA_INTEGER={name:"RGBA_INTEGER",value:36249,description:" "},e.R8={name:"R8",value:33321,description:" "},e.RG8={name:"RG8",value:33323,description:" "},e.R16F={name:"R16F",value:33325,description:" "},e.R32F={name:"R32F",value:33326,description:" "},e.RG16F={name:"RG16F",value:33327,description:" "},e.RG32F={name:"RG32F",value:33328,description:" "},e.R8I={name:"R8I",value:33329,description:" "},e.R8UI={name:"R8UI",value:33330,description:" "},e.R16I={name:"R16I",value:33331,description:" "},e.R16UI={name:"R16UI",value:33332,description:" "},e.R32I={name:"R32I",value:33333,description:" "},e.R32UI={name:"R32UI",value:33334,description:" "},e.RG8I={name:"RG8I",value:33335,description:" "},e.RG8UI={name:"RG8UI",value:33336,description:" "},e.RG16I={name:"RG16I",value:33337,description:" "},e.RG16UI={name:"RG16UI",value:33338,description:" "},e.RG32I={name:"RG32I",value:33339,description:" "},e.RG32UI={name:"RG32UI",value:33340,description:" "},e.R8_SNORM={name:"R8_SNORM",value:36756,description:" "},e.RG8_SNORM={name:"RG8_SNORM",value:36757,description:" "},e.RGB8_SNORM={name:"RGB8_SNORM",value:36758,description:" "},e.RGBA8_SNORM={name:"RGBA8_SNORM",value:36759,description:" "},e.RGB10_A2UI={name:"RGB10_A2UI",value:36975,description:" "},e.TEXTURE_IMMUTABLE_FORMAT={name:"TEXTURE_IMMUTABLE_FORMAT",value:37167,description:" "},e.TEXTURE_IMMUTABLE_LEVELS={name:"TEXTURE_IMMUTABLE_LEVELS",value:33503,description:" "},e.UNSIGNED_INT_2_10_10_10_REV={name:"UNSIGNED_INT_2_10_10_10_REV",value:33640,description:" "},e.UNSIGNED_INT_10F_11F_11F_REV={name:"UNSIGNED_INT_10F_11F_11F_REV",value:35899,description:" "},e.UNSIGNED_INT_5_9_9_9_REV={name:"UNSIGNED_INT_5_9_9_9_REV",value:35902,description:" "},e.FLOAT_32_UNSIGNED_INT_24_8_REV={name:"FLOAT_32_UNSIGNED_INT_24_8_REV",value:36269,description:" "},e.UNSIGNED_INT_24_8={name:"UNSIGNED_INT_24_8",value:34042,description:" "},e.HALF_FLOAT={name:"HALF_FLOAT",value:5131,description:" "},e.RG={name:"RG",value:33319,description:" "},e.RG_INTEGER={name:"RG_INTEGER",value:33320,description:" "},e.INT_2_10_10_10_REV={name:"INT_2_10_10_10_REV",value:36255,description:" "},e.CURRENT_QUERY={name:"CURRENT_QUERY",value:34917,description:" "},e.QUERY_RESULT={name:"QUERY_RESULT",value:34918,description:" "},e.QUERY_RESULT_AVAILABLE={name:"QUERY_RESULT_AVAILABLE",value:34919,description:" "},e.ANY_SAMPLES_PASSED={name:"ANY_SAMPLES_PASSED",value:35887,description:" "},e.ANY_SAMPLES_PASSED_CONSERVATIVE={name:"ANY_SAMPLES_PASSED_CONSERVATIVE",value:36202,description:" "},e.MAX_DRAW_BUFFERS={name:"MAX_DRAW_BUFFERS",value:34852,description:" "},e.DRAW_BUFFER0={name:"DRAW_BUFFER0",value:34853,description:" "},e.DRAW_BUFFER1={name:"DRAW_BUFFER1",value:34854,description:" "},e.DRAW_BUFFER2={name:"DRAW_BUFFER2",value:34855,description:" "},e.DRAW_BUFFER3={name:"DRAW_BUFFER3",value:34856,description:" "},e.DRAW_BUFFER4={name:"DRAW_BUFFER4",value:34857,description:" "},e.DRAW_BUFFER5={name:"DRAW_BUFFER5",value:34858,description:" "},e.DRAW_BUFFER6={name:"DRAW_BUFFER6",value:34859,description:" "},e.DRAW_BUFFER7={name:"DRAW_BUFFER7",value:34860,description:" "},e.DRAW_BUFFER8={name:"DRAW_BUFFER8",value:34861,description:" "},e.DRAW_BUFFER9={name:"DRAW_BUFFER9",value:34862,description:" "},e.DRAW_BUFFER10={name:"DRAW_BUFFER10",value:34863,description:" "},e.DRAW_BUFFER11={name:"DRAW_BUFFER11",value:34864,description:" "},e.DRAW_BUFFER12={name:"DRAW_BUFFER12",value:34865,description:" "},e.DRAW_BUFFER13={name:"DRAW_BUFFER13",value:34866,description:" "},e.DRAW_BUFFER14={name:"DRAW_BUFFER14",value:34867,description:" "},e.DRAW_BUFFER15={name:"DRAW_BUFFER15",value:34868,description:" "},e.MAX_COLOR_ATTACHMENTS={name:"MAX_COLOR_ATTACHMENTS",value:36063,description:" "},e.COLOR_ATTACHMENT1={name:"COLOR_ATTACHMENT1",value:36065,description:" "},e.COLOR_ATTACHMENT2={name:"COLOR_ATTACHMENT2",value:36066,description:" "},e.COLOR_ATTACHMENT3={name:"COLOR_ATTACHMENT3",value:36067,description:" "},e.COLOR_ATTACHMENT4={name:"COLOR_ATTACHMENT4",value:36068,description:" "},e.COLOR_ATTACHMENT5={name:"COLOR_ATTACHMENT5",value:36069,description:" "},e.COLOR_ATTACHMENT6={name:"COLOR_ATTACHMENT6",value:36070,description:" "},e.COLOR_ATTACHMENT7={name:"COLOR_ATTACHMENT7",value:36071,description:" "},e.COLOR_ATTACHMENT8={name:"COLOR_ATTACHMENT8",value:36072,description:" "},e.COLOR_ATTACHMENT9={name:"COLOR_ATTACHMENT9",value:36073,description:" "},e.COLOR_ATTACHMENT10={name:"COLOR_ATTACHMENT10",value:36074,description:" "},e.COLOR_ATTACHMENT11={name:"COLOR_ATTACHMENT11",value:36075,description:" "},e.COLOR_ATTACHMENT12={name:"COLOR_ATTACHMENT12",value:36076,description:" "},e.COLOR_ATTACHMENT13={name:"COLOR_ATTACHMENT13",value:36077,description:" "},e.COLOR_ATTACHMENT14={name:"COLOR_ATTACHMENT14",value:36078,description:" "},e.COLOR_ATTACHMENT15={name:"COLOR_ATTACHMENT15",value:36079,description:" "},e.SAMPLER_3D={name:"SAMPLER_3D",value:35679,description:" "},e.SAMPLER_2D_SHADOW={name:"SAMPLER_2D_SHADOW",value:35682,description:" "},e.SAMPLER_2D_ARRAY={name:"SAMPLER_2D_ARRAY",value:36289,description:" "},e.SAMPLER_2D_ARRAY_SHADOW={name:"SAMPLER_2D_ARRAY_SHADOW",value:36292,description:" "},e.SAMPLER_CUBE_SHADOW={name:"SAMPLER_CUBE_SHADOW",value:36293,description:" "},e.INT_SAMPLER_2D={name:"INT_SAMPLER_2D",value:36298,description:" "},e.INT_SAMPLER_3D={name:"INT_SAMPLER_3D",value:36299,description:" "},e.INT_SAMPLER_CUBE={name:"INT_SAMPLER_CUBE",value:36300,description:" "},e.INT_SAMPLER_2D_ARRAY={name:"INT_SAMPLER_2D_ARRAY",value:36303,description:" "},e.UNSIGNED_INT_SAMPLER_2D={name:"UNSIGNED_INT_SAMPLER_2D",value:36306,description:" "},e.UNSIGNED_INT_SAMPLER_3D={name:"UNSIGNED_INT_SAMPLER_3D",value:36307,description:" "},e.UNSIGNED_INT_SAMPLER_CUBE={name:"UNSIGNED_INT_SAMPLER_CUBE",value:36308,description:" "},e.UNSIGNED_INT_SAMPLER_2D_ARRAY={name:"UNSIGNED_INT_SAMPLER_2D_ARRAY",value:36311,description:" "},e.MAX_SAMPLES={name:"MAX_SAMPLES",value:36183,description:" "},e.SAMPLER_BINDING={name:"SAMPLER_BINDING",value:35097,description:" "},e.PIXEL_PACK_BUFFER={name:"PIXEL_PACK_BUFFER",value:35051,description:" "},e.PIXEL_UNPACK_BUFFER={name:"PIXEL_UNPACK_BUFFER",value:35052,description:" "},e.PIXEL_PACK_BUFFER_BINDING={name:"PIXEL_PACK_BUFFER_BINDING",value:35053,description:" "},e.PIXEL_UNPACK_BUFFER_BINDING={name:"PIXEL_UNPACK_BUFFER_BINDING",value:35055,description:" "},e.COPY_READ_BUFFER={name:"COPY_READ_BUFFER",value:36662,description:" "},e.COPY_WRITE_BUFFER={name:"COPY_WRITE_BUFFER",value:36663,description:" "},e.COPY_READ_BUFFER_BINDING={name:"COPY_READ_BUFFER_BINDING",value:36662,description:" "},e.COPY_WRITE_BUFFER_BINDING={name:"COPY_WRITE_BUFFER_BINDING",value:36663,description:" "},e.FLOAT_MAT2x3={name:"FLOAT_MAT2x3",value:35685,description:" "},e.FLOAT_MAT2x4={name:"FLOAT_MAT2x4",value:35686,description:" "},e.FLOAT_MAT3x2={name:"FLOAT_MAT3x2",value:35687,description:" "},e.FLOAT_MAT3x4={name:"FLOAT_MAT3x4",value:35688,description:" "},e.FLOAT_MAT4x2={name:"FLOAT_MAT4x2",value:35689,description:" "},e.FLOAT_MAT4x3={name:"FLOAT_MAT4x3",value:35690,description:" "},e.UNSIGNED_INT_VEC2={name:"UNSIGNED_INT_VEC2",value:36294,description:" "},e.UNSIGNED_INT_VEC3={name:"UNSIGNED_INT_VEC3",value:36295,description:" "},e.UNSIGNED_INT_VEC4={name:"UNSIGNED_INT_VEC4",value:36296,description:" "},e.UNSIGNED_NORMALIZED={name:"UNSIGNED_NORMALIZED",value:35863,description:" "},e.SIGNED_NORMALIZED={name:"SIGNED_NORMALIZED",value:36764,description:" "},e.VERTEX_ATTRIB_ARRAY_INTEGER={name:"VERTEX_ATTRIB_ARRAY_INTEGER",value:35069,description:" "},e.VERTEX_ATTRIB_ARRAY_DIVISOR={name:"VERTEX_ATTRIB_ARRAY_DIVISOR",value:35070,description:" "},e.TRANSFORM_FEEDBACK_BUFFER_MODE={name:"TRANSFORM_FEEDBACK_BUFFER_MODE",value:35967,description:" "},e.MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS={name:"MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS",value:35968,description:" "},e.TRANSFORM_FEEDBACK_VARYINGS={name:"TRANSFORM_FEEDBACK_VARYINGS",value:35971,description:" "},e.TRANSFORM_FEEDBACK_BUFFER_START={name:"TRANSFORM_FEEDBACK_BUFFER_START",value:35972,description:" "},e.TRANSFORM_FEEDBACK_BUFFER_SIZE={name:"TRANSFORM_FEEDBACK_BUFFER_SIZE",value:35973,description:" "},e.TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN={name:"TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN",value:35976,description:" "},e.MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS={name:"MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS",value:35978,description:" "},e.MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS={name:"MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS",value:35979,description:" "},e.INTERLEAVED_ATTRIBS={name:"INTERLEAVED_ATTRIBS",value:35980,description:" "},e.SEPARATE_ATTRIBS={name:"SEPARATE_ATTRIBS",value:35981,description:" "},e.TRANSFORM_FEEDBACK_BUFFER={name:"TRANSFORM_FEEDBACK_BUFFER",value:35982,description:" "},e.TRANSFORM_FEEDBACK_BUFFER_BINDING={name:"TRANSFORM_FEEDBACK_BUFFER_BINDING",value:35983,description:" "},e.TRANSFORM_FEEDBACK={name:"TRANSFORM_FEEDBACK",value:36386,description:" "},e.TRANSFORM_FEEDBACK_PAUSED={name:"TRANSFORM_FEEDBACK_PAUSED",value:36387,description:" "},e.TRANSFORM_FEEDBACK_ACTIVE={name:"TRANSFORM_FEEDBACK_ACTIVE",value:36388,description:" "},e.TRANSFORM_FEEDBACK_BINDING={name:"TRANSFORM_FEEDBACK_BINDING",value:36389,description:" "},e.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING={name:"FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING",value:33296,description:" "},e.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE={name:"FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE",value:33297,description:" "},e.FRAMEBUFFER_ATTACHMENT_RED_SIZE={name:"FRAMEBUFFER_ATTACHMENT_RED_SIZE",value:33298,description:" "},e.FRAMEBUFFER_ATTACHMENT_GREEN_SIZE={name:"FRAMEBUFFER_ATTACHMENT_GREEN_SIZE",value:33299,description:" "},e.FRAMEBUFFER_ATTACHMENT_BLUE_SIZE={name:"FRAMEBUFFER_ATTACHMENT_BLUE_SIZE",value:33300,description:" "},e.FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE={name:"FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE",value:33301,description:" "},e.FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE={name:"FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE",value:33302,description:" "},e.FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE={name:"FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE",value:33303,description:" "},e.FRAMEBUFFER_DEFAULT={name:"FRAMEBUFFER_DEFAULT",value:33304,description:" "},e.DEPTH24_STENCIL8={name:"DEPTH24_STENCIL8",value:35056,description:" "},e.DRAW_FRAMEBUFFER_BINDING={name:"DRAW_FRAMEBUFFER_BINDING",value:36006,description:" "},e.READ_FRAMEBUFFER={name:"READ_FRAMEBUFFER",value:36008,description:" "},e.DRAW_FRAMEBUFFER={name:"DRAW_FRAMEBUFFER",value:36009,description:" "},e.READ_FRAMEBUFFER_BINDING={name:"READ_FRAMEBUFFER_BINDING",value:36010,description:" "},e.RENDERBUFFER_SAMPLES={name:"RENDERBUFFER_SAMPLES",value:36011,description:" "},e.FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER={name:"FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER",value:36052,description:" "},e.FRAMEBUFFER_INCOMPLETE_MULTISAMPLE={name:"FRAMEBUFFER_INCOMPLETE_MULTISAMPLE",value:36182,description:" "},e.UNIFORM_BUFFER={name:"UNIFORM_BUFFER",value:35345,description:" "},e.UNIFORM_BUFFER_BINDING={name:"UNIFORM_BUFFER_BINDING",value:35368,description:" "},e.UNIFORM_BUFFER_START={name:"UNIFORM_BUFFER_START",value:35369,description:" "},e.UNIFORM_BUFFER_SIZE={name:"UNIFORM_BUFFER_SIZE",value:35370,description:" "},e.MAX_VERTEX_UNIFORM_BLOCKS={name:"MAX_VERTEX_UNIFORM_BLOCKS",value:35371,description:" "},e.MAX_FRAGMENT_UNIFORM_BLOCKS={name:"MAX_FRAGMENT_UNIFORM_BLOCKS",value:35373,description:" "},e.MAX_COMBINED_UNIFORM_BLOCKS={name:"MAX_COMBINED_UNIFORM_BLOCKS",value:35374,description:" "},e.MAX_UNIFORM_BUFFER_BINDINGS={name:"MAX_UNIFORM_BUFFER_BINDINGS",value:35375,description:" "},e.MAX_UNIFORM_BLOCK_SIZE={name:"MAX_UNIFORM_BLOCK_SIZE",value:35376,description:" "},e.MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS={name:"MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS",value:35377,description:" "},e.MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS={name:"MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS",value:35379,description:" "},e.UNIFORM_BUFFER_OFFSET_ALIGNMENT={name:"UNIFORM_BUFFER_OFFSET_ALIGNMENT",value:35380,description:" "},e.ACTIVE_UNIFORM_BLOCKS={name:"ACTIVE_UNIFORM_BLOCKS",value:35382,description:" "},e.UNIFORM_TYPE={name:"UNIFORM_TYPE",value:35383,description:" "},e.UNIFORM_SIZE={name:"UNIFORM_SIZE",value:35384,description:" "},e.UNIFORM_BLOCK_INDEX={name:"UNIFORM_BLOCK_INDEX",value:35386,description:" "},e.UNIFORM_OFFSET={name:"UNIFORM_OFFSET",value:35387,description:" "},e.UNIFORM_ARRAY_STRIDE={name:"UNIFORM_ARRAY_STRIDE",value:35388,description:" "},e.UNIFORM_MATRIX_STRIDE={name:"UNIFORM_MATRIX_STRIDE",value:35389,description:" "},e.UNIFORM_IS_ROW_MAJOR={name:"UNIFORM_IS_ROW_MAJOR",value:35390,description:" "},e.UNIFORM_BLOCK_BINDING={name:"UNIFORM_BLOCK_BINDING",value:35391,description:" "},e.UNIFORM_BLOCK_DATA_SIZE={name:"UNIFORM_BLOCK_DATA_SIZE",value:35392,description:" "},e.UNIFORM_BLOCK_ACTIVE_UNIFORMS={name:"UNIFORM_BLOCK_ACTIVE_UNIFORMS",value:35394,description:" "},e.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES={name:"UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES",value:35395,description:" "},e.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER={name:"UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER",value:35396,description:" "},e.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER={name:"UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER",value:35398,description:" "},e.OBJECT_TYPE={name:"OBJECT_TYPE",value:37138,description:" "},e.SYNC_CONDITION={name:"SYNC_CONDITION",value:37139,description:" "},e.SYNC_STATUS={name:"SYNC_STATUS",value:37140,description:" "},e.SYNC_FLAGS={name:"SYNC_FLAGS",value:37141,description:" "},e.SYNC_FENCE={name:"SYNC_FENCE",value:37142,description:" "},e.SYNC_GPU_COMMANDS_COMPLETE={name:"SYNC_GPU_COMMANDS_COMPLETE",value:37143,description:" "},e.UNSIGNALED={name:"UNSIGNALED",value:37144,description:" "},e.SIGNALED={name:"SIGNALED",value:37145,description:" "},e.ALREADY_SIGNALED={name:"ALREADY_SIGNALED",value:37146,description:" "},e.TIMEOUT_EXPIRED={name:"TIMEOUT_EXPIRED",value:37147,description:" "},e.CONDITION_SATISFIED={name:"CONDITION_SATISFIED",value:37148,description:" "},e.WAIT_FAILED={name:"WAIT_FAILED",value:37149,description:" "},e.SYNC_FLUSH_COMMANDS_BIT={name:"SYNC_FLUSH_COMMANDS_BIT",value:1,description:" "},e.COLOR={name:"COLOR",value:6144,description:" "},e.DEPTH={name:"DEPTH",value:6145,description:" "},e.STENCIL={name:"STENCIL",value:6146,description:" "},e.MIN={name:"MIN",value:32775,description:" "},e.MAX={name:"MAX",value:32776,description:" "},e.DEPTH_COMPONENT24={name:"DEPTH_COMPONENT24",value:33190,description:" "},e.STREAM_READ={name:"STREAM_READ",value:35041,description:" "},e.STREAM_COPY={name:"STREAM_COPY",value:35042,description:" "},e.STATIC_READ={name:"STATIC_READ",value:35045,description:" "},e.STATIC_COPY={name:"STATIC_COPY",value:35046,description:" "},e.DYNAMIC_READ={name:"DYNAMIC_READ",value:35049,description:" "},e.DYNAMIC_COPY={name:"DYNAMIC_COPY",value:35050,description:" "},e.DEPTH_COMPONENT32F={name:"DEPTH_COMPONENT32F",value:36012,description:" "},e.DEPTH32F_STENCIL8={name:"DEPTH32F_STENCIL8",value:36013,description:" "},e.INVALID_INDEX={name:"INVALID_INDEX",value:4294967295,description:" "},e.TIMEOUT_IGNORED={name:"TIMEOUT_IGNORED",value:-1,description:" "},e.MAX_CLIENT_WAIT_TIMEOUT_WEBGL={name:"MAX_CLIENT_WAIT_TIMEOUT_WEBGL",value:37447,description:" "},e.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE={name:"VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE",value:35070,description:"Describes the frequency divisor used for instanced rendering.",extensionName:"ANGLE_instanced_arrays"},e.UNMASKED_VENDOR_WEBGL={name:"UNMASKED_VENDOR_WEBGL",value:37445,description:"Passed to getParameter to get the vendor string of the graphics driver.",extensionName:"ANGLE_instanced_arrays"},e.UNMASKED_RENDERER_WEBGL={name:"UNMASKED_RENDERER_WEBGL",value:37446,description:"Passed to getParameter to get the renderer string of the graphics driver.",extensionName:"WEBGL_debug_renderer_info"},e.MAX_TEXTURE_MAX_ANISOTROPY_EXT={name:"MAX_TEXTURE_MAX_ANISOTROPY_EXT",value:34047,description:"Returns the maximum available anisotropy.",extensionName:"EXT_texture_filter_anisotropic"},e.TEXTURE_MAX_ANISOTROPY_EXT={name:"TEXTURE_MAX_ANISOTROPY_EXT",value:34046,description:"Passed to texParameter to set the desired maximum anisotropy for a texture.",extensionName:"EXT_texture_filter_anisotropic"},e.COMPRESSED_RGB_S3TC_DXT1_EXT={name:"COMPRESSED_RGB_S3TC_DXT1_EXT",value:33776,description:"A DXT1-compressed image in an RGB image format.",extensionName:"WEBGL_compressed_texture_s3tc"},e.COMPRESSED_RGBA_S3TC_DXT1_EXT={name:"COMPRESSED_RGBA_S3TC_DXT1_EXT",value:33777,description:"A DXT1-compressed image in an RGB image format with a simple on/off alpha value.",extensionName:"WEBGL_compressed_texture_s3tc"},e.COMPRESSED_RGBA_S3TC_DXT3_EXT={name:"COMPRESSED_RGBA_S3TC_DXT3_EXT",value:33778,description:"A DXT3-compressed image in an RGBA image format. Compared to a 32-bit RGBA texture, it offers 4:1 compression.",extensionName:"WEBGL_compressed_texture_s3tc"},e.COMPRESSED_RGBA_S3TC_DXT5_EXT={name:"COMPRESSED_RGBA_S3TC_DXT5_EXT",value:33779,description:"A DXT5-compressed image in an RGBA image format. It also provides a 4:1 compression, but differs to the DXT3 compression in how the alpha compression is done.",extensionName:"WEBGL_compressed_texture_s3tc"},e.COMPRESSED_R11_EAC={name:"COMPRESSED_R11_EAC",value:37488,description:"One-channel (red) unsigned format compression.",extensionName:"WEBGL_compressed_texture_etc"},e.COMPRESSED_SIGNED_R11_EAC={name:"COMPRESSED_SIGNED_R11_EAC",value:37489,description:"One-channel (red) signed format compression.",extensionName:"WEBGL_compressed_texture_etc"},e.COMPRESSED_RG11_EAC={name:"COMPRESSED_RG11_EAC",value:37490,description:"Two-channel (red and green) unsigned format compression.",extensionName:"WEBGL_compressed_texture_etc"},e.COMPRESSED_SIGNED_RG11_EAC={name:"COMPRESSED_SIGNED_RG11_EAC",value:37491,description:"Two-channel (red and green) signed format compression.",extensionName:"WEBGL_compressed_texture_etc"},e.COMPRESSED_RGB8_ETC2={name:"COMPRESSED_RGB8_ETC2",value:37492,description:"Compresses RBG8 data with no alpha channel.",extensionName:"WEBGL_compressed_texture_etc"},e.COMPRESSED_RGBA8_ETC2_EAC={name:"COMPRESSED_RGBA8_ETC2_EAC",value:37493,description:"Compresses RGBA8 data. The RGB part is encoded the same as RGB_ETC2, but the alpha part is encoded separately.",extensionName:"WEBGL_compressed_texture_etc"},e.COMPRESSED_SRGB8_ETC2={name:"COMPRESSED_SRGB8_ETC2",value:37494,description:"Compresses sRBG8 data with no alpha channel.",extensionName:"WEBGL_compressed_texture_etc"},e.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC={name:"COMPRESSED_SRGB8_ALPHA8_ETC2_EAC",value:37495,description:"Compresses sRGBA8 data. The sRGB part is encoded the same as SRGB_ETC2, but the alpha part is encoded separately.",extensionName:"WEBGL_compressed_texture_etc"},e.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2={name:"COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2",value:37496,description:"Similar to RGB8_ETC, but with ability to punch through the alpha channel, which means to make it completely opaque or transparent.",extensionName:"WEBGL_compressed_texture_etc"},e.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2={name:"COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2",value:37497,description:"Similar to SRGB8_ETC, but with ability to punch through the alpha channel, which means to make it completely opaque or transparent.",extensionName:"WEBGL_compressed_texture_etc"},e.COMPRESSED_RGB_PVRTC_4BPPV1_IMG={name:"COMPRESSED_RGB_PVRTC_4BPPV1_IMG",value:35840,description:"RGB compression in 4-bit mode. One block for each 4×4 pixels.",extensionName:"WEBGL_compressed_texture_pvrtc"},e.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG={name:"COMPRESSED_RGBA_PVRTC_4BPPV1_IMG",value:35842,description:"RGBA compression in 4-bit mode. One block for each 4×4 pixels.",extensionName:"WEBGL_compressed_texture_pvrtc"},e.COMPRESSED_RGB_PVRTC_2BPPV1_IMG={name:"COMPRESSED_RGB_PVRTC_2BPPV1_IMG",value:35841,description:"RGB compression in 2-bit mode. One block for each 8×4 pixels.",extensionName:"WEBGL_compressed_texture_pvrtc"},e.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG={name:"COMPRESSED_RGBA_PVRTC_2BPPV1_IMG",value:35843,description:"RGBA compression in 2-bit mode. One block for each 8×4 pixe",extensionName:"WEBGL_compressed_texture_pvrtc"},e.COMPRESSED_RGB_ETC1_WEBGL={name:"COMPRESSED_RGB_ETC1_WEBGL",value:36196,description:"Compresses 24-bit RGB data with no alpha channel.",extensionName:"WEBGL_compressed_texture_etc1"},e.COMPRESSED_RGB_ATC_WEBGL={name:"COMPRESSED_RGB_ATC_WEBGL",value:35986,description:"Compresses RGB textures with no alpha channel.",extensionName:"WEBGL_compressed_texture_atc"},e.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL={name:"COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL",value:35986,description:"Compresses RGBA textures using explicit alpha encoding (useful when alpha transitions are sharp).",extensionName:"WEBGL_compressed_texture_atc"},e.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL={name:"COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL",value:34798,description:"Compresses RGBA textures using interpolated alpha encoding (useful when alpha transitions are gradient).",extensionName:"WEBGL_compressed_texture_atc"},e.UNSIGNED_INT_24_8_WEBGL={name:"UNSIGNED_INT_24_8_WEBGL",value:34042,description:"Unsigned integer type for 24-bit depth texture data.",extensionName:"WEBGL_depth_texture"},e.HALF_FLOAT_OES={name:"HALF_FLOAT_OES",value:36193,description:"Half floating-point type (16-bit).",extensionName:"OES_texture_half_float"},e.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT={name:"FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT",value:33297,description:" ",extensionName:"WEBGL_color_buffer_float"},e.UNSIGNED_NORMALIZED_EXT={name:"UNSIGNED_NORMALIZED_EXT",value:35863,description:" ",extensionName:"WEBGL_color_buffer_float"},e.MIN_EXT={name:"MIN_EXT",value:32775,description:"Produces the minimum color components of the source and destination colors.",extensionName:"EXT_blend_minmax"},e.MAX_EXT={name:"MAX_EXT",value:32776,description:"Produces the maximum color components of the source and destination colors.",extensionName:"EXT_blend_minmax"},e.SRGB_EXT={name:"SRGB_EXT",value:35904,description:"Unsized sRGB format that leaves the precision up to the driver.",extensionName:"EXT_sRGB"},e.SRGB_ALPHA_EXT={name:"SRGB_ALPHA_EXT",value:35906,description:"Unsized sRGB format with unsized alpha component.",extensionName:"EXT_sRGB"},e.SRGB8_ALPHA8_EXT={name:"SRGB8_ALPHA8_EXT",value:35907,description:"Sized (8-bit) sRGB and alpha formats.",extensionName:"EXT_sRGB"},e.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT={name:"FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT",value:33296,description:"Returns the framebuffer color encoding.",extensionName:"EXT_sRGB"},e.FRAGMENT_SHADER_DERIVATIVE_HINT_OES={name:"FRAGMENT_SHADER_DERIVATIVE_HINT_OES",value:35723,description:"Indicates the accuracy of the derivative calculation for the GLSL built-in functions: dFdx, dFdy, and fwidth.",extensionName:"OES_standard_derivatives"},e.COLOR_ATTACHMENT0_WEBGL={name:"COLOR_ATTACHMENT0_WEBGL",value:36064,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},e.COLOR_ATTACHMENT1_WEBGL={name:"COLOR_ATTACHMENT1_WEBGL",value:36065,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},e.COLOR_ATTACHMENT2_WEBGL={name:"COLOR_ATTACHMENT2_WEBGL",value:36066,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},e.COLOR_ATTACHMENT3_WEBGL={name:"COLOR_ATTACHMENT3_WEBGL",value:36067,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},e.COLOR_ATTACHMENT4_WEBGL={name:"COLOR_ATTACHMENT4_WEBGL",value:36068,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},e.COLOR_ATTACHMENT5_WEBGL={name:"COLOR_ATTACHMENT5_WEBGL",value:36069,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},e.COLOR_ATTACHMENT6_WEBGL={name:"COLOR_ATTACHMENT6_WEBGL",value:36070,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},e.COLOR_ATTACHMENT7_WEBGL={name:"COLOR_ATTACHMENT7_WEBGL",value:36071,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},e.COLOR_ATTACHMENT8_WEBGL={name:"COLOR_ATTACHMENT8_WEBGL",value:36072,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},e.COLOR_ATTACHMENT9_WEBGL={name:"COLOR_ATTACHMENT9_WEBGL",value:36073,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},e.COLOR_ATTACHMENT10_WEBGL={name:"COLOR_ATTACHMENT10_WEBGL",value:36074,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},e.COLOR_ATTACHMENT11_WEBGL={name:"COLOR_ATTACHMENT11_WEBGL",value:36075,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},e.COLOR_ATTACHMENT12_WEBGL={name:"COLOR_ATTACHMENT12_WEBGL",value:36076,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},e.COLOR_ATTACHMENT13_WEBGL={name:"COLOR_ATTACHMENT13_WEBGL",value:36077,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},e.COLOR_ATTACHMENT14_WEBGL={name:"COLOR_ATTACHMENT14_WEBGL",value:36078,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},e.COLOR_ATTACHMENT15_WEBGL={name:"COLOR_ATTACHMENT15_WEBGL",value:36079,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},e.DRAW_BUFFER0_WEBGL={name:"DRAW_BUFFER0_WEBGL",value:34853,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},e.DRAW_BUFFER1_WEBGL={name:"DRAW_BUFFER1_WEBGL",value:34854,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},e.DRAW_BUFFER2_WEBGL={name:"DRAW_BUFFER2_WEBGL",value:34855,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},e.DRAW_BUFFER3_WEBGL={name:"DRAW_BUFFER3_WEBGL",value:34856,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},e.DRAW_BUFFER4_WEBGL={name:"DRAW_BUFFER4_WEBGL",value:34857,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},e.DRAW_BUFFER5_WEBGL={name:"DRAW_BUFFER5_WEBGL",value:34858,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},e.DRAW_BUFFER6_WEBGL={name:"DRAW_BUFFER6_WEBGL",value:34859,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},e.DRAW_BUFFER7_WEBGL={name:"DRAW_BUFFER7_WEBGL",value:34860,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},e.DRAW_BUFFER8_WEBGL={name:"DRAW_BUFFER8_WEBGL",value:34861,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},e.DRAW_BUFFER9_WEBGL={name:"DRAW_BUFFER9_WEBGL",value:34862,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},e.DRAW_BUFFER10_WEBGL={name:"DRAW_BUFFER10_WEBGL",value:34863,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},e.DRAW_BUFFER11_WEBGL={name:"DRAW_BUFFER11_WEBGL",value:34864,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},e.DRAW_BUFFER12_WEBGL={name:"DRAW_BUFFER12_WEBGL",value:34865,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},e.DRAW_BUFFER13_WEBGL={name:"DRAW_BUFFER13_WEBGL",value:34866,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},e.DRAW_BUFFER14_WEBGL={name:"DRAW_BUFFER14_WEBGL",value:34867,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},e.DRAW_BUFFER15_WEBGL={name:"DRAW_BUFFER15_WEBGL",value:34868,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},e.MAX_COLOR_ATTACHMENTS_WEBGL={name:"MAX_COLOR_ATTACHMENTS_WEBGL",value:36063,description:"Maximum number of framebuffer color attachment points",extensionName:"WEBGL_draw_buffers"},e.MAX_DRAW_BUFFERS_WEBGL={name:"MAX_DRAW_BUFFERS_WEBGL",value:34852,description:"Maximum number of draw buffers",extensionName:"WEBGL_draw_buffers"},e.VERTEX_ARRAY_BINDING_OES={name:"VERTEX_ARRAY_BINDING_OES",value:34229,description:"The bound vertex array object (VAO).",extensionName:"VERTEX_ARRAY_BINDING_OES"},e.QUERY_COUNTER_BITS_EXT={name:"QUERY_COUNTER_BITS_EXT",value:34916,description:"The number of bits used to hold the query result for the given target.",extensionName:"EXT_disjoint_timer_query"},e.CURRENT_QUERY_EXT={name:"CURRENT_QUERY_EXT",value:34917,description:"The currently active query.",extensionName:"EXT_disjoint_timer_query"},e.QUERY_RESULT_EXT={name:"QUERY_RESULT_EXT",value:34918,description:"The query result.",extensionName:"EXT_disjoint_timer_query"},e.QUERY_RESULT_AVAILABLE_EXT={name:"QUERY_RESULT_AVAILABLE_EXT",value:34919,description:"A Boolean indicating whether or not a query result is available.",extensionName:"EXT_disjoint_timer_query"},e.TIME_ELAPSED_EXT={name:"TIME_ELAPSED_EXT",value:35007,description:"Elapsed time (in nanoseconds).",extensionName:"EXT_disjoint_timer_query"},e.TIMESTAMP_EXT={name:"TIMESTAMP_EXT",value:36392,description:"The current time.",extensionName:"EXT_disjoint_timer_query"},e.GPU_DISJOINT_EXT={name:"GPU_DISJOINT_EXT",value:36795,description:"A Boolean indicating whether or not the GPU performed any disjoint operation.",extensionName:"EXT_disjoint_timer_query"},e.zeroMeaningByCommand={getError:"NO_ERROR",blendFunc:"ZERO",blendFuncSeparate:"ZERO",readBuffer:"NONE",getFramebufferAttachmentParameter:"NONE",texParameterf:"NONE",texParameteri:"NONE",drawArrays:"POINTS",drawElements:"POINTS",drawArraysInstanced:"POINTS",drawArraysInstancedAngle:"POINTS",drawBuffers:"POINTS",drawElementsInstanced:"POINTS",drawRangeElements:"POINTS"},e.oneMeaningByCommand={blendFunc:"ONE",blendFuncSeparate:"ONE",drawArrays:"LINES",drawElements:"LINES",drawArraysInstanced:"LINES",drawArraysInstancedAngle:"LINES",drawBuffers:"LINES",drawElementsInstanced:"LINES",drawRangeElements:"LINES"},e}(),te={},ne={};!function(){for(var x in ee)if(ee.hasOwnProperty(x)){var S=ee[x];te[S.name]=S,ne[S.value]=S}}();var ie,re,oe,ae,se,le,ce,ue,he,de,pe,me,fe,ge,ve,_e,ye,be,xe,Ee,Se,Te=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),we=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return Te(t,x),Object.defineProperty(t.prototype,"analyserName",{get:function(){return t.analyserName},enumerable:!0,configurable:!0}),t.prototype.appendToAnalysis=function(x,S){if(x.commands){for(var w={total:0,totalTriangles:0,totalTriangleStrip:0,totalTriangleFan:0,totalLines:0,totalLineStrip:0,totalLineLoop:0,totalPoints:0},U=0,G=x.commands;U=3||"drawArraysInstanced"===H.name&&H.commandArguments.length>=3||"drawArraysInstancedANGLE"===H.name&&H.commandArguments.length>=3?this.appendToPrimitives(w,H.commandArguments[0],H.commandArguments[2]):"drawElements"===H.name&&H.commandArguments.length>=2||"drawElementsInstanced"===H.name&&H.commandArguments.length>=2||"drawElementsInstancedANGLE"===H.name&&H.commandArguments.length>=2?this.appendToPrimitives(w,H.commandArguments[0],H.commandArguments[1]):"drawRangeElements"===H.name&&H.commandArguments.length>=4&&this.appendToPrimitives(w,H.commandArguments[0],H.commandArguments[3])}S.total=w.total,S.triangles=w.totalTriangles,S.triangleStrip=w.totalTriangleStrip,S.triangleFan=w.totalTriangleFan,S.lines=w.totalLines,S.lineStrip=w.totalLineStrip,S.lineLoop=w.totalLineLoop,S.points=w.totalPoints}},t.prototype.appendToPrimitives=function(x,S,w){S===ee.POINTS.value?x.totalPoints+=w:S===ee.LINES.value?x.totalLines+=w:S===ee.LINE_STRIP.value?x.totalLineStrip+=w:S===ee.LINE_LOOP.value?x.totalLineLoop+=w:S===ee.TRIANGLES.value?x.totalTriangles+=w:S===ee.TRIANGLE_STRIP.value?x.totalTriangleStrip+=w:S===ee.TRIANGLE_FAN.value&&(x.totalTriangleFan+=w),x.total+=w},t.analyserName="Primitives",t}(K),Ce=function(){function e(x){this.contextInformation=x,this.analysers=[],this.initAnalysers()}return e.prototype.appendAnalyses=function(x){for(var S in this.analysers)this.analysers.hasOwnProperty(S)&&this.analysers[S].appendAnalysis(x)},e.prototype.initAnalysers=function(){this.analysers.push(new Y(this.contextInformation),new Q(this.contextInformation),new we(this.contextInformation))},e}(),Ae=function(){function e(){}return e.storeOriginFunction=function(x,S){if(x&&x[S]){var w=this.getOriginFunctionName(S);x[w]||(x[w]=x[S])}},e.storePrototypeOriginFunction=function(x,S){if(x&&x.prototype[S]){var w=this.getOriginFunctionName(S);x.prototype[w]||(x.prototype[w]=x.prototype[S])}},e.executePrototypeOriginFunction=function(x,S,w,U){if(x){var G=this.getOriginFunctionName(w);if(S.prototype[G])return x[G]||(x[G]=S.prototype[G]),this.executeFunction(x,G,U)}},e.executeOriginFunction=function(x,S,w){if(x){var U=this.getOriginFunctionName(S);if(x[U])return this.executeFunction(x,U,w)}},e.executeFunction=function(x,S,w){var U=w;if(void 0===U||0===U.length)return x[S]();switch(U.length){case 1:return x[S](U[0]);case 2:return x[S](U[0],U[1]);case 3:return x[S](U[0],U[1],U[2]);case 4:return x[S](U[0],U[1],U[2],U[3]);case 5:return x[S](U[0],U[1],U[2],U[3],U[4]);case 6:return x[S](U[0],U[1],U[2],U[3],U[4],U[5]);case 7:return x[S](U[0],U[1],U[2],U[3],U[4],U[5],U[6]);case 8:return x[S](U[0],U[1],U[2],U[3],U[4],U[5],U[6],U[7]);case 9:return x[S](U[0],U[1],U[2],U[3],U[4],U[5],U[6],U[7],U[8]);case 10:return x[S](U[0],U[1],U[2],U[3],U[4],U[5],U[6],U[7],U[8],U[9]);case 11:return x[S](U[0],U[1],U[2],U[3],U[4],U[5],U[6],U[7],U[8],U[9],U[10]);case 12:return x[S](U[0],U[1],U[2],U[3],U[4],U[5],U[6],U[7],U[8],U[9],U[10],U[11]);case 13:return x[S](U[0],U[1],U[2],U[3],U[4],U[5],U[6],U[7],U[8],U[9],U[10],U[11],U[12]);case 14:return x[S](U[0],U[1],U[2],U[3],U[4],U[5],U[6],U[7],U[8],U[9],U[10],U[11],U[12],U[13]);case 15:return x[S](U[0],U[1],U[2],U[3],U[4],U[5],U[6],U[7],U[8],U[9],U[10],U[11],U[12],U[13],U[14]);case 16:return x[S](U[0],U[1],U[2],U[3],U[4],U[5],U[6],U[7],U[8],U[9],U[10],U[11],U[12],U[13],U[14],U[15]);case 17:return x[S](U[0],U[1],U[2],U[3],U[4],U[5],U[6],U[7],U[8],U[9],U[10],U[11],U[12],U[13],U[14],U[15],U[16]);case 18:return x[S](U[0],U[1],U[2],U[3],U[4],U[5],U[6],U[7],U[8],U[9],U[10],U[11],U[12],U[13],U[14],U[15],U[16],U[17]);case 19:return x[S](U[0],U[1],U[2],U[3],U[4],U[5],U[6],U[7],U[8],U[9],U[10],U[11],U[12],U[13],U[14],U[15],U[16],U[17],U[18]);case 20:return x[S](U[0],U[1],U[2],U[3],U[4],U[5],U[6],U[7],U[8],U[9],U[10],U[11],U[12],U[13],U[14],U[15],U[16],U[17],U[18],U[19]);default:return x[S].apply(x,U)}},e.getOriginFunctionName=function(x){return this.originFunctionPrefix+x},e.originFunctionPrefix="__SPECTOR_Origin_",e}(),Me=function(){function e(){}return e.getStackTrace=function(x,S){void 0===x&&(x=0),void 0===S&&(S=0);var w=[];try{throw new Error("Errorator.")}catch(x){if(x.stack)for(var U=0,G=(H=x.stack.split("\n")).length;U0;U++)w.shift();for(U=0;U0;U++)w.pop()}return w},e}(),Re=function(){function e(){}return e.getWebGlObjectTag=function(x){return x[e.SPECTOROBJECTTAGKEY]},e.attachWebGlObjectTag=function(x,S){S.displayText=e.stringifyWebGlObjectTag(S),x[e.SPECTOROBJECTTAGKEY]=S},e.stringifyWebGlObjectTag=function(x){return x?x.typeName+" - ID: "+x.id:"No tag available."},e.SPECTOROBJECTTAGKEY="__SPECTOR_Object_TAG",e}(),Le=function(){function e(){this.id=0}return Object.defineProperty(e.prototype,"type",{get:function(){return window[this.typeName]||null},enumerable:!0,configurable:!0}),e.prototype.tagWebGlObject=function(x){if(this.type){var S;if(!x)return S;if(S=Re.getWebGlObjectTag(x))return S;if(x instanceof this.type){var w=this.getNextId();return S={typeName:this.typeName,id:w},Re.attachWebGlObjectTag(x,S),S}return S}},e.prototype.getNextId=function(){return this.id++},e}(),Ie=function(){function e(x){this.options=x}return e.prototype.createCapture=function(x,S,w){var U=Me.getStackTrace(4,1),G=0===x.name.indexOf("uniform")?this.stringifyUniform(x.arguments):this.stringify(x.arguments,x.result),H={id:S,startTime:x.startTime,commandEndTime:x.endTime,endTime:0,name:x.name,commandArguments:x.arguments,result:x.result,stackTrace:U,status:0,marker:w,text:G};this.transformCapture(H);for(var z=0;z50&&(H.commandArguments[z]="Array Length: "+j.length)}if(H.commandArguments){var X=[];for(z=0;z0&&(w+=": "+this.stringifyArgs(x).join(", ")),S&&(w+=" -> "+this.stringifyResult(S)),w},e.prototype.stringifyUniform=function(x){var S=this.spiedCommandName;if(x&&x.length>0){var w=[];w.push(this.stringifyValue(x[0]));for(var U=1;U-1,U}return Be(t,x),Object.defineProperty(t.prototype,"spiedCommandName",{get:function(){return this.internalSpiedCommandName},enumerable:!0,configurable:!0}),t.prototype.transformCapture=function(x){this.isDeprecated&&(x.status=50)},t}(Ie),Ue=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),Ge=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return Ue(t,x),Object.defineProperty(t.prototype,"spiedCommandName",{get:function(){return t.commandName},enumerable:!0,configurable:!0}),t.prototype.stringifyArgs=function(x){var S=[];return S.push(x[0]),S},t.commandName="disableVertexAttribArray",t}(Ie),Ve=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),He=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return Ve(t,x),Object.defineProperty(t.prototype,"spiedCommandName",{get:function(){return t.commandName},enumerable:!0,configurable:!0}),t.prototype.stringifyArgs=function(x){var S=[];return S.push(ee.stringifyWebGlConstant(x[0],"drawArrays")),S.push(x[1]),S.push(x[2]),S},t.commandName="drawArrays",t}(Ie),We=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),$e=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return We(t,x),Object.defineProperty(t.prototype,"spiedCommandName",{get:function(){return t.commandName},enumerable:!0,configurable:!0}),t.prototype.stringifyArgs=function(x){var S=[];return S.push(ee.stringifyWebGlConstant(x[0],"drawArraysInstanced")),S.push(x[1]),S.push(x[2]),S.push(x[3]),S},t.commandName="drawArraysInstanced",t}(Ie),ze=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),je=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return ze(t,x),Object.defineProperty(t.prototype,"spiedCommandName",{get:function(){return t.commandName},enumerable:!0,configurable:!0}),t.prototype.stringifyArgs=function(x){var S=[];return S.push(ee.stringifyWebGlConstant(x[0],"drawArraysInstancedANGLE")),S.push(x[1]),S.push(x[2]),S.push(x[3]),S},t.commandName="drawArraysInstancedANGLE",t}(Ie),Xe=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),Ke=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return Xe(t,x),Object.defineProperty(t.prototype,"spiedCommandName",{get:function(){return t.commandName},enumerable:!0,configurable:!0}),t.prototype.stringifyArgs=function(x){var S=[];return S.push(ee.stringifyWebGlConstant(x[0],"drawElements")),S.push(x[1]),S.push(ee.stringifyWebGlConstant(x[2],"drawElements")),S.push(x[3]),S},t.commandName="drawElements",t}(Ie),qe=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),Ye=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return qe(t,x),Object.defineProperty(t.prototype,"spiedCommandName",{get:function(){return t.commandName},enumerable:!0,configurable:!0}),t.prototype.stringifyArgs=function(x){var S=[];return S.push(ee.stringifyWebGlConstant(x[0],"drawElementsInstancedANGLE")),S.push(x[1]),S.push(ee.stringifyWebGlConstant(x[2],"drawElementsInstancedANGLE")),S.push(x[3]),S.push(x[4]),S},t.commandName="drawElementsInstancedANGLE",t}(Ie),Ze=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),Je=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return Ze(t,x),Object.defineProperty(t.prototype,"spiedCommandName",{get:function(){return t.commandName},enumerable:!0,configurable:!0}),t.prototype.stringifyArgs=function(x){var S=[];return S.push(ee.stringifyWebGlConstant(x[0],"drawElementsInstanced")),S.push(x[1]),S.push(ee.stringifyWebGlConstant(x[2],"drawElementsInstanced")),S.push(x[3]),S.push(x[4]),S},t.commandName="drawElementsInstanced",t}(Ie),Qe=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),et=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return Qe(t,x),Object.defineProperty(t.prototype,"spiedCommandName",{get:function(){return t.commandName},enumerable:!0,configurable:!0}),t.prototype.stringifyArgs=function(x){var S=[];return S.push(ee.stringifyWebGlConstant(x[0],"drawRangeElements")),S.push(x[1]),S.push(x[2]),S.push(x[3]),S.push(ee.stringifyWebGlConstant(x[4],"drawRangeElements")),S.push(x[5]),S},t.commandName="drawRangeElements",t}(Ie),tt=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),nt=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return tt(t,x),Object.defineProperty(t.prototype,"spiedCommandName",{get:function(){return t.commandName},enumerable:!0,configurable:!0}),t.prototype.stringifyResult=function(x){if(x)return"name: "+x.name+", size: "+x.size+", type: "+x.type},t.commandName="getActiveAttrib",t}(Ie),it=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),rt=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return it(t,x),Object.defineProperty(t.prototype,"spiedCommandName",{get:function(){return t.commandName},enumerable:!0,configurable:!0}),t.prototype.stringifyResult=function(x){if(x)return"name: "+x.name+", size: "+x.size+", type: "+x.type},t.commandName="getActiveUniform",t}(Ie),ot=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),at=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return ot(t,x),Object.defineProperty(t.prototype,"spiedCommandName",{get:function(){return t.commandName},enumerable:!0,configurable:!0}),t.prototype.stringifyResult=function(x){return x?"true":"false"},t.commandName="getExtension",t}(Ie),st=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),lt=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return st(t,x),Object.defineProperty(t.prototype,"spiedCommandName",{get:function(){return t.commandName},enumerable:!0,configurable:!0}),t.prototype.stringifyResult=function(x){if(!x)return"null";var S=Re.getWebGlObjectTag(x);return S?S.displayText:x},t.commandName="getParameter",t}(Ie),ct=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),ut=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return ct(t,x),Object.defineProperty(t.prototype,"spiedCommandName",{get:function(){return t.commandName},enumerable:!0,configurable:!0}),t.prototype.stringifyResult=function(x){if(x)return"min: "+x.rangeMin+", max: "+x.rangeMax+", precision: "+x.precision},t.commandName="getShaderPrecisionFormat",t}(Ie),ht=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),pt=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return ht(t,x),Object.defineProperty(t.prototype,"spiedCommandName",{get:function(){return t.commandName},enumerable:!0,configurable:!0}),t.prototype.stringifyResult=function(x){if(x)return"name: "+x.name+", size: "+x.size+", type: "+x.type},t.commandName="getTransformFeedbackVarying",t}(Ie),mt=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),ft=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return mt(t,x),Object.defineProperty(t.prototype,"spiedCommandName",{get:function(){return t.commandName},enumerable:!0,configurable:!0}),t.prototype.stringifyArgs=function(x){for(var S=[],w=0;w<4;w++)S.push(x[w].toFixed(0));return S},t.commandName="scissor",t}(Ie),gt=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),vt=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return gt(t,x),Object.defineProperty(t.prototype,"spiedCommandName",{get:function(){return t.commandName},enumerable:!0,configurable:!0}),t.prototype.stringifyArgs=function(x){var S=[];return S.push(x[0]),S.push(x[1]),S.push(ee.stringifyWebGlConstant(x[2],"vertexAttribPointer")),S.push(x[3]),S.push(x[4]),S.push(x[5]),S},t.commandName="vertexAttribPointer",t}(Ie),_t=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),yt=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return _t(t,x),Object.defineProperty(t.prototype,"spiedCommandName",{get:function(){return t.commandName},enumerable:!0,configurable:!0}),t.prototype.stringifyArgs=function(x){for(var S=[],w=0;w<4;w++)S.push(x[w].toFixed(0));return S},t.commandName="viewport",t}(Ie),bt=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),xt=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return bt(t,x),Object.defineProperty(t.prototype,"spiedCommandName",{get:function(){return t.commandName},enumerable:!0,configurable:!0}),t.prototype.stringifyArgs=function(x){var S=[];return S.push(x[0]),S},t.commandName="enableVertexAttribArray",t}(Ie),Et=function(){function e(x){this.spiedCommandName=x.spiedCommandName,this.spiedCommandRunningContext=x.spiedCommandRunningContext,this.spiedCommand=this.spiedCommandRunningContext[this.spiedCommandName],Ae.storeOriginFunction(this.spiedCommandRunningContext,this.spiedCommandName),this.callback=x.callback,this.commandOptions={context:x.context,contextVersion:x.contextVersion,extensions:x.extensions,toggleCapture:x.toggleCapture},this.initCustomCommands(),this.initCommand()}return e.prototype.spy=function(){this.spiedCommandRunningContext[this.spiedCommandName]=this.overloadedCommand},e.prototype.unSpy=function(){this.spiedCommandRunningContext[this.spiedCommandName]=this.spiedCommand},e.prototype.createCapture=function(x,S,w){return this.command.createCapture(x,S,w)},e.prototype.initCommand=function(){e.customCommandsConstructors[this.spiedCommandName]?this.command=e.customCommandsConstructors[this.spiedCommandName](this.commandOptions):this.command=new ke(this.commandOptions,this.spiedCommandName),this.overloadedCommand=this.getSpy()},e.prototype.getSpy=function(){var x=this;return function(){var S=X.now,w=Ae.executeOriginFunction(x.spiedCommandRunningContext,x.spiedCommandName,arguments),U=X.now,G={name:x.spiedCommandName,arguments,result:w,startTime:S,endTime:U};return x.callback(x,G),w}},e.prototype.initCustomCommands=function(){var x;e.customCommandsConstructors||(e.customCommandsConstructors=((x={})[Fe.commandName]=function(x){return new Fe(x)},x[Ne.commandName]=function(x){return new Ne(x)},x[Ge.commandName]=function(x){return new Ge(x)},x[He.commandName]=function(x){return new He(x)},x[$e.commandName]=function(x){return new $e(x)},x[je.commandName]=function(x){return new je(x)},x[Ke.commandName]=function(x){return new Ke(x)},x[Je.commandName]=function(x){return new Je(x)},x[Ye.commandName]=function(x){return new Ye(x)},x[et.commandName]=function(x){return new et(x)},x[nt.commandName]=function(x){return new nt(x)},x[rt.commandName]=function(x){return new rt(x)},x[at.commandName]=function(x){return new at(x)},x[lt.commandName]=function(x){return new lt(x)},x[ut.commandName]=function(x){return new ut(x)},x[pt.commandName]=function(x){return new pt(x)},x[ft.commandName]=function(x){return new ft(x)},x[vt.commandName]=function(x){return new vt(x)},x[yt.commandName]=function(x){return new yt(x)},x[xt.commandName]=function(x){return new xt(x)},x))},e}(),St=function(){function e(x){this.options=x,this.context=x.context,this.contextVersion=x.contextVersion,this.extensions=x.extensions,this.toggleCapture=x.toggleCapture,this.consumeCommands=this.getConsumeCommands(),this.changeCommandsByState=this.getChangeCommandsByState(),this.commandNameToStates=this.getCommandNameToStates()}return Object.defineProperty(e.prototype,"requireStartAndStopStates",{get:function(){return!0},enumerable:!0,configurable:!0}),e.prototype.startCapture=function(x,S,w){return this.quickCapture=S,this.fullCapture=w,this.capturedCommandsByState={},x&&this.requireStartAndStopStates&&(this.currentState={},this.readFromContextNoSideEffects()),this.copyCurrentStateToPrevious(),this.currentState={},this.previousState},e.prototype.stopCapture=function(){return this.requireStartAndStopStates&&this.readFromContextNoSideEffects(),this.analyse(void 0),this.currentState},e.prototype.registerCallbacks=function(x){for(var S in this.changeCommandsByState)if(this.changeCommandsByState.hasOwnProperty(S))for(var w=0,U=this.changeCommandsByState[S];w=0)if(x){for(var G=0;G1&&this.parameters.push(this.getWebgl2Parameters());for(var x={},S=1;S<=this.contextVersion&&!(S>this.parameters.length);S++)if(this.parameters[S-1])for(var w=0,U=this.parameters[S-1];wthis.parameters.length);x++)for(var S=0,w=this.parameters[x-1];S0:"stencilFunc"===x.name||"stencilFuncSeparate"===x.name?t.stencilFuncStates.indexOf(x.commandArguments[0])>0:"stencilMask"!==x.name&&"stencilMaskSeparate"!==x.name||t.stencilMaskStates.indexOf(x.commandArguments[0])>0},t.prototype.getConsumeCommands=function(){return Z},t.prototype.isStateEnable=function(x,S){return this.context.isEnabled(ee.STENCIL_TEST.value)},t.stateName="StencilState",t.stencilOpStates=[ee.STENCIL_BACK_FAIL.value,ee.STENCIL_BACK_PASS_DEPTH_FAIL.value,ee.STENCIL_BACK_PASS_DEPTH_PASS.value,ee.STENCIL_FAIL.value,ee.STENCIL_PASS_DEPTH_FAIL.value,ee.STENCIL_PASS_DEPTH_PASS.value],t.stencilFuncStates=[ee.STENCIL_BACK_FUNC.value,ee.STENCIL_BACK_REF.value,ee.STENCIL_BACK_VALUE_MASK.value,ee.STENCIL_FUNC.value,ee.STENCIL_REF.value,ee.STENCIL_VALUE_MASK.value],t.stencilMaskStates=[ee.STENCIL_BACK_WRITEMASK.value,ee.STENCIL_WRITEMASK.value],t}(wt),Zt=function(){function e(){}return e.isSupportedCombination=function(x,S,w){return x=x||ee.UNSIGNED_BYTE.value,((S=S||ee.RGBA.value)===ee.RGB.value||S===ee.RGBA.value)&&(w===ee.RGB.value||w===ee.RGBA.value||w===ee.RGBA8.value||w===ee.RGBA16F.value||w===ee.RGBA32F.value||w===ee.RGB16F.value||w===ee.RGB32F.value||w===ee.R11F_G11F_B10F.value||w===ee.SRGB8.value||w===ee.SRGB8_ALPHA8.value)&&this.isSupportedComponentType(x)},e.readPixels=function(x,S,w,U,G,H){x.getError();var z,j=U*G*4;if(H===ee.UNSIGNED_BYTE.value?z=new Uint8Array(j):(H=ee.FLOAT.value,z=new Float32Array(j)),x.readPixels(S,w,U,G,x.RGBA,H,z),!x.getError()){if(H===ee.UNSIGNED_BYTE.value)return z;for(var X=new Uint8Array(U*G*4),K=0;K1)for(X=this.context.getParameter(ee.MAX_DRAW_BUFFERS.value),K=0;K1?this.context.getFramebufferAttachmentParameter(j,w.value,ee.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE.value):ee.UNSIGNED_BYTE.value;X===ee.RENDERBUFFER.value?this.readFrameBufferAttachmentFromRenderBuffer(x,S,w,U,G,H,z,j,q,K):X===ee.TEXTURE.value&&this.readFrameBufferAttachmentFromTexture(x,S,w,U,G,H,z,j,q,K)}}},t.prototype.readFrameBufferAttachmentFromRenderBuffer=function(x,S,w,U,G,H,z,j,X,K){var q=0,Y=0;if(K.__SPECTOR_Object_CustomData){var Z=K.__SPECTOR_Object_CustomData;if(H=Z.width,z=Z.height,q=Z.samples,Y=Z.internalFormat,!q&&!Zt.isSupportedCombination(X,ee.RGBA.value,Y))return}else H+=U,z+=G;if(U=G=0,q){var J=x,Q=x.createRenderbuffer(),te=x.getParameter(x.RENDERBUFFER_BINDING);x.bindRenderbuffer(x.RENDERBUFFER,Q),x.renderbufferStorage(x.RENDERBUFFER,Y,H,z),x.bindRenderbuffer(x.RENDERBUFFER,te),x.bindFramebuffer(ee.FRAMEBUFFER.value,this.captureFrameBuffer),x.framebufferRenderbuffer(ee.FRAMEBUFFER.value,ee.COLOR_ATTACHMENT0.value,ee.RENDERBUFFER.value,Q);var ne=J.getParameter(J.READ_FRAMEBUFFER_BINDING),ie=J.getParameter(J.DRAW_FRAMEBUFFER_BINDING);J.bindFramebuffer(J.READ_FRAMEBUFFER,S),J.bindFramebuffer(J.DRAW_FRAMEBUFFER,this.captureFrameBuffer),J.blitFramebuffer(0,0,H,z,0,0,H,z,x.COLOR_BUFFER_BIT,x.NEAREST),J.bindFramebuffer(ee.FRAMEBUFFER.value,this.captureFrameBuffer),J.bindFramebuffer(J.READ_FRAMEBUFFER,ne),J.bindFramebuffer(J.DRAW_FRAMEBUFFER,ie),this.context.checkFramebufferStatus(ee.FRAMEBUFFER.value)===ee.FRAMEBUFFER_COMPLETE.value&&this.getCapture(x,w.name,U,G,H,z,0,0,ee.UNSIGNED_BYTE.value),x.bindFramebuffer(ee.FRAMEBUFFER.value,S),x.deleteRenderbuffer(Q)}else x.bindFramebuffer(ee.FRAMEBUFFER.value,this.captureFrameBuffer),x.framebufferRenderbuffer(ee.FRAMEBUFFER.value,ee.COLOR_ATTACHMENT0.value,ee.RENDERBUFFER.value,K),this.context.checkFramebufferStatus(ee.FRAMEBUFFER.value)===ee.FRAMEBUFFER_COMPLETE.value&&this.getCapture(x,w.name,U,G,H,z,0,0,X),x.bindFramebuffer(ee.FRAMEBUFFER.value,S)},t.prototype.readFrameBufferAttachmentFromTexture=function(x,S,w,U,G,H,z,j,X,K){var q=0;this.contextVersion>1&&(q=this.context.getFramebufferAttachmentParameter(j,w.value,ee.FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER.value));var Y=this.context.getFramebufferAttachmentParameter(j,w.value,ee.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL.value),Z=this.context.getFramebufferAttachmentParameter(j,w.value,ee.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE.value),J=(Z>0?ne[Z].name:ee.TEXTURE_2D.name,!1),Q=X;if(K.__SPECTOR_Object_CustomData){var te=K.__SPECTOR_Object_CustomData;if(H=te.width,z=te.height,Q=te.type,J=te.target===ee.TEXTURE_2D_ARRAY.name,!Zt.isSupportedCombination(te.type,te.format,te.internalFormat))return}else H+=U,z+=G;U=G=0,x.bindFramebuffer(ee.FRAMEBUFFER.value,this.captureFrameBuffer),q>0||J?x.framebufferTextureLayer(ee.FRAMEBUFFER.value,ee.COLOR_ATTACHMENT0.value,K,Y,q):x.framebufferTexture2D(ee.FRAMEBUFFER.value,ee.COLOR_ATTACHMENT0.value,Z||ee.TEXTURE_2D.value,K,Y),this.context.checkFramebufferStatus(ee.FRAMEBUFFER.value)===ee.FRAMEBUFFER_COMPLETE.value&&this.getCapture(x,w.name,U,G,H,z,Z,q,Q),x.bindFramebuffer(ee.FRAMEBUFFER.value,S)},t.prototype.getCapture=function(x,S,w,U,G,H,j,X,K){var q={attachmentName:S,src:null,textureCubeMapFace:j?ne[j].name:null,textureLayer:X};if(!this.quickCapture)try{var Y=Zt.readPixels(x,w,U,G,H,K);if(Y){this.workingCanvas.width=G,this.workingCanvas.height=H;var Z=this.workingContext2D.createImageData(Math.ceil(G),Math.ceil(H));if(Z.data.set(Y),this.workingContext2D.putImageData(Z,0,0),this.fullCapture)this.captureCanvas.width=this.workingCanvas.width,this.captureCanvas.height=this.workingCanvas.height;else{var J=G/H;J<1?(this.captureCanvas.width=t.captureBaseSize*J,this.captureCanvas.height=t.captureBaseSize):J>1?(this.captureCanvas.width=t.captureBaseSize,this.captureCanvas.height=t.captureBaseSize/J):(this.captureCanvas.width=t.captureBaseSize,this.captureCanvas.height=t.captureBaseSize)}this.captureCanvas.width=Math.max(this.captureCanvas.width,1),this.captureCanvas.height=Math.max(this.captureCanvas.height,1),this.captureContext2D.globalCompositeOperation="copy",this.captureContext2D.scale(1,-1),this.captureContext2D.translate(0,-this.captureCanvas.height),this.captureContext2D.drawImage(this.workingCanvas,0,0,G,H,0,0,this.captureCanvas.width,this.captureCanvas.height),this.captureContext2D.setTransform(1,0,0,1,0,0),this.captureContext2D.globalCompositeOperation="source-over",q.src=this.captureCanvas.toDataURL()}}catch(x){z.warn("Spector can not capture the visual state: "+x)}this.currentState.Attachments.push(q)},t.prototype.analyse=function(x){},t.stateName="VisualState",t.captureBaseSize=256,t}(St),en=function(){function e(x){this.context=x.context,this.captureFrameBuffer=x.context.createFramebuffer(),this.workingCanvas=document.createElement("canvas"),this.workingContext2D=this.workingCanvas.getContext("2d"),this.captureCanvas=document.createElement("canvas"),this.captureContext2D=this.captureCanvas.getContext("2d"),this.captureContext2D.imageSmoothingEnabled=!0,this.captureContext2D.mozImageSmoothingEnabled=!0,this.captureContext2D.oImageSmoothingEnabled=!0,this.captureContext2D.webkitImageSmoothingEnabled=!0,this.captureContext2D.msImageSmoothingEnabled=!0}return e.prototype.appendTextureState=function(x,S,w,U){if(void 0===w&&(w=null),S){var G=S.__SPECTOR_Object_CustomData;G&&(this.fullCapture=U,G.type&&(x.textureType=this.getWebGlConstant(G.type)),G.format&&(x.format=this.getWebGlConstant(G.format)),G.internalFormat&&(x.internalFormat=this.getWebGlConstant(G.internalFormat)),x.width=G.width,x.height=G.height,G.depth&&(x.depth=G.depth),w&&(x.visual=this.getTextureVisualState(w,S,G)))}},e.prototype.getTextureVisualState=function(x,S,w){try{var U=this.context,G={};if(!Zt.isSupportedCombination(w.type,w.format,w.internalFormat))return G;var H=this.context.getParameter(ee.FRAMEBUFFER_BINDING.value);U.bindFramebuffer(ee.FRAMEBUFFER.value,this.captureFrameBuffer);try{var z=w.width,j=w.height;if(x===ee.TEXTURE_3D&&w.depth)for(var X=U,K=0;K2&&K2&&K1?(this.captureCanvas.width=Qt.captureBaseSize,this.captureCanvas.height=Qt.captureBaseSize/X):(this.captureCanvas.width=Qt.captureBaseSize,this.captureCanvas.height=Qt.captureBaseSize)}return this.captureCanvas.width=Math.max(this.captureCanvas.width,1),this.captureCanvas.height=Math.max(this.captureCanvas.height,1),this.captureContext2D.globalCompositeOperation="copy",this.captureContext2D.scale(1,-1),this.captureContext2D.translate(0,-this.captureCanvas.height),this.captureContext2D.drawImage(this.workingCanvas,0,0,U,G,0,0,this.captureCanvas.width,this.captureCanvas.height),this.captureContext2D.setTransform(1,0,0,1,0,0),this.captureContext2D.globalCompositeOperation="source-over",this.captureCanvas.toDataURL()}catch(x){}},e.prototype.getWebGlConstant=function(x){var S=ne[x];return S?S.name:x+""},e.captureBaseSize=64,e.cubeMapFaces=[ee.TEXTURE_CUBE_MAP_POSITIVE_X,ee.TEXTURE_CUBE_MAP_POSITIVE_Y,ee.TEXTURE_CUBE_MAP_POSITIVE_Z,ee.TEXTURE_CUBE_MAP_NEGATIVE_X,ee.TEXTURE_CUBE_MAP_NEGATIVE_Y,ee.TEXTURE_CUBE_MAP_NEGATIVE_Z],e}(),tn=function(){function e(x){this.context=x.context}return e.prototype.getUboValue=function(x,S,w,U){var G=e.uboTypes[U];if(G){var H=new G.arrayBufferView(w*G.lengthMultiplier),z=this.context,j=z.getIndexedParameter(ee.UNIFORM_BUFFER_BINDING.value,x);if(j){var X=z.getIndexedParameter(ee.UNIFORM_BUFFER_START.value,x),K=z.getParameter(ee.UNIFORM_BUFFER_BINDING.value);try{z.bindBuffer(ee.UNIFORM_BUFFER.value,j),z.getBufferSubData(ee.UNIFORM_BUFFER.value,X+S,H)}catch(x){return}K&&z.bindBuffer(ee.UNIFORM_BUFFER.value,K)}return Array.prototype.slice.call(H)}},e.uboTypes=((ie={})[ee.BOOL.value]={arrayBufferView:Uint8Array,lengthMultiplier:1},ie[ee.BOOL_VEC2.value]={arrayBufferView:Uint8Array,lengthMultiplier:2},ie[ee.BOOL_VEC3.value]={arrayBufferView:Uint8Array,lengthMultiplier:3},ie[ee.BOOL_VEC4.value]={arrayBufferView:Uint8Array,lengthMultiplier:4},ie[ee.INT.value]={arrayBufferView:Int32Array,lengthMultiplier:1},ie[ee.INT_VEC2.value]={arrayBufferView:Int32Array,lengthMultiplier:2},ie[ee.INT_VEC3.value]={arrayBufferView:Int32Array,lengthMultiplier:3},ie[ee.INT_VEC4.value]={arrayBufferView:Int32Array,lengthMultiplier:4},ie[ee.UNSIGNED_INT.value]={arrayBufferView:Uint32Array,lengthMultiplier:1},ie[ee.UNSIGNED_INT_VEC2.value]={arrayBufferView:Uint32Array,lengthMultiplier:2},ie[ee.UNSIGNED_INT_VEC3.value]={arrayBufferView:Uint32Array,lengthMultiplier:3},ie[ee.UNSIGNED_INT_VEC4.value]={arrayBufferView:Uint32Array,lengthMultiplier:4},ie[ee.FLOAT.value]={arrayBufferView:Float32Array,lengthMultiplier:1},ie[ee.FLOAT_VEC2.value]={arrayBufferView:Float32Array,lengthMultiplier:2},ie[ee.FLOAT_VEC3.value]={arrayBufferView:Float32Array,lengthMultiplier:3},ie[ee.FLOAT_VEC4.value]={arrayBufferView:Float32Array,lengthMultiplier:4},ie[ee.FLOAT_MAT2.value]={arrayBufferView:Float32Array,lengthMultiplier:4},ie[ee.FLOAT_MAT2x3.value]={arrayBufferView:Float32Array,lengthMultiplier:6},ie[ee.FLOAT_MAT2x4.value]={arrayBufferView:Float32Array,lengthMultiplier:8},ie[ee.FLOAT_MAT3.value]={arrayBufferView:Float32Array,lengthMultiplier:9},ie[ee.FLOAT_MAT3x2.value]={arrayBufferView:Float32Array,lengthMultiplier:6},ie[ee.FLOAT_MAT3x4.value]={arrayBufferView:Float32Array,lengthMultiplier:12},ie[ee.FLOAT_MAT4.value]={arrayBufferView:Float32Array,lengthMultiplier:16},ie[ee.FLOAT_MAT4x2.value]={arrayBufferView:Float32Array,lengthMultiplier:8},ie[ee.FLOAT_MAT4x3.value]={arrayBufferView:Float32Array,lengthMultiplier:12},ie[ee.SAMPLER_2D.value]={arrayBufferView:Uint8Array,lengthMultiplier:1},ie[ee.SAMPLER_CUBE.value]={arrayBufferView:Uint8Array,lengthMultiplier:1},ie),e}(),nn=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),rn=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return nn(t,x),Object.defineProperty(t.prototype,"typeName",{get:function(){return"WebGLBuffer"},enumerable:!0,configurable:!0}),t}(Le),on=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return nn(t,x),Object.defineProperty(t.prototype,"typeName",{get:function(){return"WebGLFramebuffer"},enumerable:!0,configurable:!0}),t}(Le),an=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return nn(t,x),Object.defineProperty(t.prototype,"typeName",{get:function(){return"WebGLProgram"},enumerable:!0,configurable:!0}),t.saveInGlobalStore=function(x){var S=Re.getWebGlObjectTag(x);S&&(this.store[S.id]=x)},t.getFromGlobalStore=function(x){return this.store[x]},t.updateInGlobalStore=function(x,S){if(S){var w=this.getFromGlobalStore(x);if(w){var U=Re.getWebGlObjectTag(w);U&&(Re.attachWebGlObjectTag(S,U),this.store[U.id]=S)}}},t.store={},t}(Le),sn=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return nn(t,x),Object.defineProperty(t.prototype,"typeName",{get:function(){return"WebGLQuery"},enumerable:!0,configurable:!0}),t}(Le),ln=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return nn(t,x),Object.defineProperty(t.prototype,"typeName",{get:function(){return"WebGLRenderbuffer"},enumerable:!0,configurable:!0}),t}(Le),cn=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return nn(t,x),Object.defineProperty(t.prototype,"typeName",{get:function(){return"WebGLSampler"},enumerable:!0,configurable:!0}),t}(Le),hn=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return nn(t,x),Object.defineProperty(t.prototype,"typeName",{get:function(){return"WebGLShader"},enumerable:!0,configurable:!0}),t}(Le),dn=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return nn(t,x),Object.defineProperty(t.prototype,"typeName",{get:function(){return"WebGLSync"},enumerable:!0,configurable:!0}),t}(Le),pn=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return nn(t,x),Object.defineProperty(t.prototype,"typeName",{get:function(){return"WebGLTexture"},enumerable:!0,configurable:!0}),t}(Le),mn=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return nn(t,x),Object.defineProperty(t.prototype,"typeName",{get:function(){return"WebGLTransformFeedback"},enumerable:!0,configurable:!0}),t}(Le),gn=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return nn(t,x),Object.defineProperty(t.prototype,"typeName",{get:function(){return"WebGLUniformLocation"},enumerable:!0,configurable:!0}),t}(Le),vn=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return nn(t,x),Object.defineProperty(t.prototype,"typeName",{get:function(){return"WebGLVertexArrayObject"},enumerable:!0,configurable:!0}),t}(Le),bn=function(){function e(){}return e.getProgramData=function(x,S){for(var w={LINK_STATUS:x.getProgramParameter(S,ee.LINK_STATUS.value),VALIDATE_STATUS:x.getProgramParameter(S,ee.VALIDATE_STATUS.value)},U=x.getAttachedShaders(S),G=new Array(2),H=0,z=0,j=U;z=0){var U=this.context.getParameter(this.context.ELEMENT_ARRAY_BUFFER_BINDING);U&&(this.currentState.elementArray={},this.currentState.elementArray.arrayBuffer=this.getSpectorData(U))}var H=this.context.getProgramParameter(S,ee.ACTIVE_ATTRIBUTES.value);this.currentState.attributes=[];for(var z=0;z1){var Y=this.context.getProgramParameter(S,ee.ACTIVE_UNIFORM_BLOCKS.value);for(this.currentState.uniformBlocks=[],z=0;z1){var G=this.context;for(S.colorAttachments=[],w=G.getParameter(ee.MAX_DRAW_BUFFERS.value),U=0;U1&&(U.alphaSize=this.context.getFramebufferAttachmentParameter(S,x,ee.FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE.value),U.blueSize=this.context.getFramebufferAttachmentParameter(S,x,ee.FRAMEBUFFER_ATTACHMENT_BLUE_SIZE.value),U.encoding=this.getWebGlConstant(this.context.getFramebufferAttachmentParameter(S,x,ee.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING.value)),U.componentType=this.getWebGlConstant(this.context.getFramebufferAttachmentParameter(S,x,ee.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE.value)),U.depthSize=this.context.getFramebufferAttachmentParameter(S,x,ee.FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE.value),U.greenSize=this.context.getFramebufferAttachmentParameter(S,x,ee.FRAMEBUFFER_ATTACHMENT_GREEN_SIZE.value),U.redSize=this.context.getFramebufferAttachmentParameter(S,x,ee.FRAMEBUFFER_ATTACHMENT_RED_SIZE.value),U.stencilSize=this.context.getFramebufferAttachmentParameter(S,x,ee.FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE.value),w===ee.TEXTURE.value&&(U.textureLayer=this.context.getFramebufferAttachmentParameter(S,x,ee.FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER.value))),U}},t.prototype.readAttributeFromContext=function(x,S){var w=this.context.getActiveAttrib(x,S),U=this.context.getAttribLocation(x,w.name);if(-1===U)return{name:w.name,size:w.size,type:this.getWebGlConstant(w.type),location:-1};var G=this.context.getVertexAttrib(U,ee.CURRENT_VERTEX_ATTRIB.value),H=this.context.getVertexAttrib(U,ee.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING.value),z={name:w.name,size:w.size,type:this.getWebGlConstant(w.type),location:U,offsetPointer:this.context.getVertexAttribOffset(U,ee.VERTEX_ATTRIB_ARRAY_POINTER.value),bufferBinding:this.getSpectorData(H),enabled:this.context.getVertexAttrib(U,ee.VERTEX_ATTRIB_ARRAY_ENABLED.value),arraySize:this.context.getVertexAttrib(U,ee.VERTEX_ATTRIB_ARRAY_SIZE.value),stride:this.context.getVertexAttrib(U,ee.VERTEX_ATTRIB_ARRAY_STRIDE.value),arrayType:this.getWebGlConstant(this.context.getVertexAttrib(U,ee.VERTEX_ATTRIB_ARRAY_TYPE.value)),normalized:this.context.getVertexAttrib(U,ee.VERTEX_ATTRIB_ARRAY_NORMALIZED.value),vertexAttrib:Array.prototype.slice.call(G)};return this.extensions[ee.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE.extensionName]?z.divisor=this.context.getVertexAttrib(U,ee.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE.value):this.contextVersion>1&&(z.integer=this.context.getVertexAttrib(U,ee.VERTEX_ATTRIB_ARRAY_INTEGER.value),z.divisor=this.context.getVertexAttrib(U,ee.VERTEX_ATTRIB_ARRAY_DIVISOR.value)),this.appendBufferCustomData(z,H),z},t.prototype.readUniformFromContext=function(x,S){var w=this.context.getActiveUniform(x,S),U=this.context.getUniformLocation(x,w.name);if(U){if(w.size>1&&w.name&&w.name.indexOf("[0]")===w.name.length-3){for(var G=[],H=0;H1){U.baseLevel=this.context.getTexParameter(S.value,ee.TEXTURE_BASE_LEVEL.value),U.immutable=this.context.getTexParameter(S.value,ee.TEXTURE_IMMUTABLE_FORMAT.value),U.immutableLevels=this.context.getTexParameter(S.value,ee.TEXTURE_IMMUTABLE_LEVELS.value),U.maxLevel=this.context.getTexParameter(S.value,ee.TEXTURE_MAX_LEVEL.value);var G=this.context.getParameter(ee.SAMPLER_BINDING.value);if(G){U.sampler=this.getSpectorData(G);var H=this.context;U.samplerMaxLod=H.getSamplerParameter(G,ee.TEXTURE_MAX_LOD.value),U.samplerMinLod=H.getSamplerParameter(G,ee.TEXTURE_MIN_LOD.value),U.samplerCompareFunc=this.getWebGlConstant(H.getSamplerParameter(G,ee.TEXTURE_COMPARE_FUNC.value)),U.samplerCompareMode=this.getWebGlConstant(H.getSamplerParameter(G,ee.TEXTURE_COMPARE_MODE.value)),U.samplerWrapS=this.getWebGlConstant(H.getSamplerParameter(G,ee.TEXTURE_WRAP_S.value)),U.samplerWrapT=this.getWebGlConstant(H.getSamplerParameter(G,ee.TEXTURE_WRAP_T.value)),U.samplerWrapR=this.getWebGlConstant(H.getSamplerParameter(G,ee.TEXTURE_WRAP_R.value)),U.samplerMagFilter=this.getWebGlConstant(H.getSamplerParameter(G,ee.TEXTURE_MAG_FILTER.value)),U.samplerMinFilter=this.getWebGlConstant(H.getSamplerParameter(G,ee.TEXTURE_MIN_FILTER.value))}else U.maxLod=this.context.getTexParameter(S.value,ee.TEXTURE_MAX_LOD.value),U.minLod=this.context.getTexParameter(S.value,ee.TEXTURE_MIN_LOD.value),U.compareFunc=this.getWebGlConstant(this.context.getTexParameter(S.value,ee.TEXTURE_COMPARE_FUNC.value)),U.compareMode=this.getWebGlConstant(this.context.getTexParameter(S.value,ee.TEXTURE_COMPARE_MODE.value)),U.wrapR=this.getWebGlConstant(this.context.getTexParameter(S.value,ee.TEXTURE_WRAP_R.value))}var z=this.getTextureStorage(S);if(z){var j=this.quickCapture?null:S;this.drawCallTextureInputState.appendTextureState(U,z,j,this.fullCapture)}return this.context.activeTexture(w),U},t.prototype.getTextureStorage=function(x){return x===ee.TEXTURE_2D?this.context.getParameter(ee.TEXTURE_BINDING_2D.value):x===ee.TEXTURE_CUBE_MAP?this.context.getParameter(ee.TEXTURE_BINDING_CUBE_MAP.value):x===ee.TEXTURE_3D?this.context.getParameter(ee.TEXTURE_BINDING_3D.value):x===ee.TEXTURE_2D_ARRAY?this.context.getParameter(ee.TEXTURE_BINDING_2D_ARRAY.value):void 0},t.prototype.readUniformsFromContextIntoState=function(x,S,w,U){for(var G=this.context,H=G.getActiveUniforms(x,S,ee.UNIFORM_TYPE.value),z=G.getActiveUniforms(x,S,ee.UNIFORM_SIZE.value),j=G.getActiveUniforms(x,S,ee.UNIFORM_BLOCK_INDEX.value),X=G.getActiveUniforms(x,S,ee.UNIFORM_OFFSET.value),K=G.getActiveUniforms(x,S,ee.UNIFORM_ARRAY_STRIDE.value),q=G.getActiveUniforms(x,S,ee.UNIFORM_MATRIX_STRIDE.value),Y=G.getActiveUniforms(x,S,ee.UNIFORM_IS_ROW_MAJOR.value),Z=0;Z-1&&(J.blockName=G.getActiveUniformBlockName(x,J.blockIndice)),J.offset=X[Z],J.arrayStride=K[Z],J.matrixStride=q[Z],J.rowMajor=Y[Z],J.blockIndice>-1){var Q=U[j[Z]].bindingPoint;J.value=this.drawCallUboInputState.getUboValue(Q,J.offset,J.size,H[Z])}}},t.prototype.readTransformFeedbackFromContext=function(x,S){var w=this.context,U=w.getTransformFeedbackVarying(x,S),G=w.getIndexedParameter(ee.TRANSFORM_FEEDBACK_BUFFER_BINDING.value,S),H={name:U.name,size:U.size,type:this.getWebGlConstant(U.type),buffer:this.getSpectorData(G),bufferSize:w.getIndexedParameter(ee.TRANSFORM_FEEDBACK_BUFFER_SIZE.value,S),bufferStart:w.getIndexedParameter(ee.TRANSFORM_FEEDBACK_BUFFER_START.value,S)};return this.appendBufferCustomData(H,G),H},t.prototype.readUniformBlockFromContext=function(x,S){var w=this.context,U=w.getActiveUniformBlockParameter(x,S,ee.UNIFORM_BLOCK_BINDING.value),G=w.getIndexedParameter(ee.UNIFORM_BUFFER_BINDING.value,U),H={name:w.getActiveUniformBlockName(x,S),bindingPoint:U,size:w.getActiveUniformBlockParameter(x,S,ee.UNIFORM_BLOCK_DATA_SIZE.value),activeUniformCount:w.getActiveUniformBlockParameter(x,S,ee.UNIFORM_BLOCK_ACTIVE_UNIFORMS.value),vertex:w.getActiveUniformBlockParameter(x,S,ee.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER.value),fragment:w.getActiveUniformBlockParameter(x,S,ee.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER.value),buffer:this.getSpectorData(G)};return this.appendBufferCustomData(H,G),H},t.prototype.appendBufferCustomData=function(x,S){if(S){var w=S.__SPECTOR_Object_CustomData;w&&(w.usage&&(x.bufferUsage=this.getWebGlConstant(w.usage)),x.bufferLength=w.length,w.offset&&(x.bufferOffset=w.offset),w.sourceLength&&(x.bufferSourceLength=w.sourceLength))}},t.prototype.getWebGlConstant=function(x){var S=ne[x];return S?S.name:x},t.stateName="DrawCall",t.samplerTypes=((re={})[ee.SAMPLER_2D.value]=ee.TEXTURE_2D,re[ee.SAMPLER_CUBE.value]=ee.TEXTURE_CUBE_MAP,re[ee.SAMPLER_3D.value]=ee.TEXTURE_3D,re[ee.SAMPLER_2D_SHADOW.value]=ee.TEXTURE_2D,re[ee.SAMPLER_2D_ARRAY.value]=ee.TEXTURE_2D_ARRAY,re[ee.SAMPLER_2D_ARRAY_SHADOW.value]=ee.TEXTURE_2D_ARRAY,re[ee.SAMPLER_CUBE_SHADOW.value]=ee.TEXTURE_CUBE_MAP,re[ee.INT_SAMPLER_2D.value]=ee.TEXTURE_2D,re[ee.INT_SAMPLER_3D.value]=ee.TEXTURE_3D,re[ee.INT_SAMPLER_CUBE.value]=ee.TEXTURE_CUBE_MAP,re[ee.INT_SAMPLER_2D_ARRAY.value]=ee.TEXTURE_2D_ARRAY,re[ee.UNSIGNED_INT_SAMPLER_2D.value]=ee.TEXTURE_2D,re[ee.UNSIGNED_INT_SAMPLER_3D.value]=ee.TEXTURE_3D,re[ee.UNSIGNED_INT_SAMPLER_CUBE.value]=ee.TEXTURE_CUBE_MAP,re[ee.UNSIGNED_INT_SAMPLER_2D_ARRAY.value]=ee.TEXTURE_2D_ARRAY,re),t}(St),Sn=function(){function e(x){this.contextInformation=x,this.stateTrackers=[],this.onCommandCapturedCallbacks={},this.initStateTrackers()}return e.prototype.startCapture=function(x,S,w){for(var U=0,G=this.stateTrackers;U=4?{target:x,length:w,usage:S.arguments[2],offset:S.arguments[3],sourceLength:S.arguments[1]?S.arguments[1].length:-1}:3===S.arguments.length?{target:x,length:w,usage:S.arguments[2]}:void 0},t.prototype.getLength=function(x){var S=-1,w=0;return 5===x.arguments.length&&(S=x.arguments[4],w=x.arguments[3]),S<=0&&(S="number"==typeof x.arguments[1]?x.arguments[1]:x.arguments[1]&&(x.arguments[1].byteLength||x.arguments[1].length)||0),S-w},t}(Tn),An=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),Mn=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return An(t,x),Object.defineProperty(t.prototype,"objectName",{get:function(){return"Renderbuffer"},enumerable:!0,configurable:!0}),t.prototype.getCreateCommandNames=function(){return["createRenderbuffer"]},t.prototype.getUpdateCommandNames=function(){return["renderbufferStorage","renderbufferStorageMultisample"]},t.prototype.getDeleteCommandNames=function(){return["deleteRenderbuffer"]},t.prototype.getBoundInstance=function(x){var S=this.options.context;if(x===ee.RENDERBUFFER.value)return S.getParameter(ee.RENDERBUFFER_BINDING.value)},t.prototype.delete=function(x){var S=x.__SPECTOR_Object_CustomData;return S?S.length:0},t.prototype.update=function(x,S,w){var U=this.getCustomData(x,S);if(!U)return 0;var G=w.__SPECTOR_Object_CustomData?w.__SPECTOR_Object_CustomData.length:0;return U.length=U.width*U.height*this.getByteSizeForInternalFormat(U.internalFormat),w.__SPECTOR_Object_CustomData=U,U.length-G},t.prototype.getCustomData=function(x,S){return 4===x.arguments.length?{target:S,internalFormat:x.arguments[1],width:x.arguments[2],height:x.arguments[3],length:0,samples:0}:{target:S,internalFormat:x.arguments[2],width:x.arguments[3],height:x.arguments[4],length:0,samples:x.arguments[1]}},t}(Tn),Rn=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),In=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return Rn(t,x),Object.defineProperty(t.prototype,"objectName",{get:function(){return"Texture2d"},enumerable:!0,configurable:!0}),t.prototype.getCreateCommandNames=function(){return["createTexture"]},t.prototype.getUpdateCommandNames=function(){return["texImage2D","compressedTexImage2D","texStorage2D"]},t.prototype.getDeleteCommandNames=function(){return["deleteTexture"]},t.prototype.getBoundInstance=function(x){var S=this.options.context;return x===ee.TEXTURE_2D.value?S.getParameter(ee.TEXTURE_BINDING_2D.value):x===ee.TEXTURE_CUBE_MAP_POSITIVE_X.value||x===ee.TEXTURE_CUBE_MAP_POSITIVE_Y.value||x===ee.TEXTURE_CUBE_MAP_POSITIVE_Z.value||x===ee.TEXTURE_CUBE_MAP_NEGATIVE_X.value||x===ee.TEXTURE_CUBE_MAP_NEGATIVE_Y.value||x===ee.TEXTURE_CUBE_MAP_NEGATIVE_Z.value?S.getParameter(ee.TEXTURE_BINDING_CUBE_MAP.value):void 0},t.prototype.delete=function(x){var S=x.__SPECTOR_Object_CustomData;return S?S.target===ee.TEXTURE_2D_ARRAY.name||S.target===ee.TEXTURE_3D.name?0:S.length:0},t.prototype.update=function(x,S,w){if(x.arguments.length>=2&&0!==x.arguments[1])return 0;var U=this.getCustomData(x,S,w);if(!U)return 0;var G=w.__SPECTOR_Object_CustomData?w.__SPECTOR_Object_CustomData.length:0;if(U.isCompressed){if(x.arguments.length>=7){var H=x.arguments[6];U.length="number"==typeof H?H:null==H?void 0:H.byteLength}}else{var z="TEXTURE_2D"===S?1:6,j=U.internalFormat;j===ee.RGBA.value&&(U.type===ee.FLOAT.value&&(j=ee.RGBA32F.value),U.type===ee.HALF_FLOAT_OES.value&&(j=ee.RGBA16F.value)),U.length=U.width*U.height*z*this.getByteSizeForInternalFormat(j)}return U.length=0|U.length,w.__SPECTOR_Object_CustomData=U,U.length-G},t.prototype.getCustomData=function(x,S,w){return"texImage2D"===x.name?this.getTexImage2DCustomData(x,S,w):"compressedTexImage2D"===x.name?this.getCompressedTexImage2DCustomData(x,S,w):"texStorage2D"===x.name?this.getTexStorage2DCustomData(x,S,w):void 0},t.prototype.getTexStorage2DCustomData=function(x,S,w){var U;return 5===x.arguments.length&&(U={target:S,internalFormat:x.arguments[2],width:x.arguments[3],height:x.arguments[4],length:0,isCompressed:!1}),U},t.prototype.getCompressedTexImage2DCustomData=function(x,S,w){var U;if(0===x.arguments[1])return x.arguments.length>=7&&(U={target:S,internalFormat:x.arguments[2],width:x.arguments[3],height:x.arguments[4],length:0,isCompressed:!0}),U},t.prototype.getTexImage2DCustomData=function(x,S,w){var U;if(0===x.arguments[1])return x.arguments.length>=8?U={target:S,internalFormat:x.arguments[2],width:x.arguments[3],height:x.arguments[4],format:x.arguments[6],type:x.arguments[7],length:0,isCompressed:!1}:6===x.arguments.length&&(U={target:S,internalFormat:x.arguments[2],width:x.arguments[5].width,height:x.arguments[5].height,format:x.arguments[3],type:x.arguments[4],length:0,isCompressed:!1}),U},t}(Tn),Fn=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),On=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return Fn(t,x),Object.defineProperty(t.prototype,"objectName",{get:function(){return"Texture3d"},enumerable:!0,configurable:!0}),t.prototype.getCreateCommandNames=function(){return["createTexture"]},t.prototype.getUpdateCommandNames=function(){return["texImage3D","compressedTexImage3D","texStorage3D"]},t.prototype.getDeleteCommandNames=function(){return["deleteTexture"]},t.prototype.getBoundInstance=function(x){var S=this.options.context;return x===ee.TEXTURE_2D_ARRAY.value?S.getParameter(ee.TEXTURE_BINDING_2D_ARRAY.value):x===ee.TEXTURE_3D.value?S.getParameter(ee.TEXTURE_BINDING_3D.value):void 0},t.prototype.delete=function(x){var S=x.__SPECTOR_Object_CustomData;return S?S.target!==ee.TEXTURE_2D_ARRAY.name&&S.target!==ee.TEXTURE_3D.name?0:S.length:0},t.prototype.update=function(x,S,w){if(x.arguments.length>=2&&0!==x.arguments[1])return 0;var U=this.getCustomData(x,S,w);if(!U)return 0;var G=w.__SPECTOR_Object_CustomData?w.__SPECTOR_Object_CustomData.length:0;if(U.isCompressed){if(x.arguments.length>=7){var H=x.arguments[6];U.length="number"==typeof H?H:null==H?void 0:H.byteLength}}else U.length=U.width*U.height*U.depth*this.getByteSizeForInternalFormat(U.internalFormat);return U.length=0|U.length,w.__SPECTOR_Object_CustomData=U,U.length-G},t.prototype.getCustomData=function(x,S,w){return"texImage3D"===x.name?this.getTexImage3DCustomData(x,S,w):"compressedTexImage3D"===x.name?this.getCompressedTexImage3DCustomData(x,S,w):"texStorage3D"===x.name?this.getTexStorage3DCustomData(x,S,w):void 0},t.prototype.getTexStorage3DCustomData=function(x,S,w){var U;return 6===x.arguments.length&&(U={target:S,internalFormat:x.arguments[2],width:x.arguments[3],height:x.arguments[4],depth:x.arguments[5],length:0,isCompressed:!1}),U},t.prototype.getCompressedTexImage3DCustomData=function(x,S,w){var U;if(0===x.arguments[1])return x.arguments.length>=8&&(U={target:S,internalFormat:x.arguments[2],width:x.arguments[3],height:x.arguments[4],depth:x.arguments[5],length:0,isCompressed:!0}),U},t.prototype.getTexImage3DCustomData=function(x,S,w){var U;if(0===x.arguments[1])return x.arguments.length>=9&&(U={target:S,internalFormat:x.arguments[2],width:x.arguments[3],height:x.arguments[4],depth:x.arguments[5],format:x.arguments[7],type:x.arguments[8],length:0,isCompressed:!1}),U},t}(Tn),Nn=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),Bn=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return Nn(t,x),Object.defineProperty(t.prototype,"objectName",{get:function(){return"Program"},enumerable:!0,configurable:!0}),t.prototype.getCreateCommandNames=function(){return["createProgram"]},t.prototype.getUpdateCommandNames=function(){return["linkProgram"]},t.prototype.getDeleteCommandNames=function(){return["deleteProgram"]},t.prototype.getBoundInstance=function(x){return x},t.prototype.delete=function(x){var S=x.__SPECTOR_Object_CustomData;return S?S.length:0},t.prototype.update=function(x,S,w){if(x.arguments.length>=1&&!x.arguments[0])return 0;var U=this.getCustomData(w);if(!U)return 0;var G=w.__SPECTOR_Object_CustomData?w.__SPECTOR_Object_CustomData.length:0;return w.__SPECTOR_Object_CustomData=U,U.length-G},t.prototype.getCustomData=function(x){var S=this.options.context;return bn.getProgramData(S,x)},t}(Tn),Dn=function(){function e(x){this.contextInformation=x,this.onCommandCallbacks={},this.recorders=[],this.initRecorders()}return e.prototype.recordCommand=function(x){var S=this.onCommandCallbacks[x.name];if(S)for(var w=0,U=S;w0&&this.currentCapture.commands.length===this.maxCommands&&this.onMaxCommand.trigger(this)}},e.prototype.spyContext=function(x){var S=[];for(var w in x)w&&S.push(w);for(var U=0;U-1&&(z[0]=S.getCallback(S,G,U?function(){w[x](G)}:null)),Ae.executeOriginFunction(w,x,z)}},e.prototype.getCallback=function(x,S,w){return void 0===w&&(w=null),function(){var U=X.now;if(x.lastFrame=++x.lastFrame%x.speedRatio,x.willPlayNextFrame||x.speedRatio&&!x.lastFrame){x.onFrameStart.trigger(x);try{S.apply(x.spiedWindow,arguments)}catch(S){x.onError.trigger(S)}x.lastSixtyFramesCurrentIndex=(x.lastSixtyFramesCurrentIndex+1)%e.fpsWindowSize,x.lastSixtyFramesDuration[x.lastSixtyFramesCurrentIndex]=U-x.lastSixtyFramesPreviousStart,x.onFrameEnd.trigger(x),x.willPlayNextFrame=!1}else w&&w();x.lastSixtyFramesPreviousStart=U}},e.requestAnimationFrameFunctions=["requestAnimationFrame","msRequestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame"],e.setTimerFunctions=["setTimeout","setInterval"],e.setTimerCommonValues=[0,15,16,33,32,40],e.fpsWindowSize=60,e}(),Zn=function(){function e(x){this.canvas=x,this.onContextRequested=new j,this.init()}return e.prototype.init=function(){var x=this,t=function(){var S=this instanceof HTMLCanvasElement?HTMLCanvasElement:OffscreenCanvas,w=x.canvas?Ae.executeOriginFunction(this,"getContext",arguments):Ae.executePrototypeOriginFunction(this,S,"getContext",arguments);if(arguments.length>0&&"2d"===arguments[0])return w;if(w){var U=Array.prototype.slice.call(arguments),G="webgl2"===U[0]||"experimental-webgl2"===U[0]?2:1;x.onContextRequested.trigger({context:w,contextVersion:G})}return w};this.canvas?(Ae.storeOriginFunction(this.canvas,"getContext"),this.canvas.getContext=t):(Ae.storePrototypeOriginFunction(HTMLCanvasElement,"getContext"),HTMLCanvasElement.prototype.getContext=t,"undefined"!=typeof OffscreenCanvas&&(Ae.storePrototypeOriginFunction(OffscreenCanvas,"getContext"),OffscreenCanvas.prototype.getContext=t))},e}(),Jn=(w(11),function(){function e(x,S){this.placeHolder=x,this.stateStore=S}return e.prototype.compose=function(x){var S=this.stateStore.getStatesToProcess(),w=!1;for(var U in S)if(S.hasOwnProperty(U)){var G=S[U],H=this.stateStore.getLastOperation(G),z=this.stateStore.getComponentInstance(G),j=this.stateStore.getData(G);z.render(j,G,H),w=!0}if(w){var X=this.stateStore.getLastOperation(x);this.composeInContainer(this.placeHolder,Number.MAX_VALUE,x,X)}},e.prototype.composeChildren=function(x,S){if(S)for(var w=this.stateStore.getChildrenIds(x),U=0,G=0;G0},e.prototype.add=function(x,S){var w=this.getNewId();return this.pendingOperation[w]=w,this.store[w]={data:x,id:w,parent:null,children:[],componentInstance:S,lastOperation:20},w},e.prototype.update=function(x,S){this.store[x],this.pendingOperation[x]=x,this.store[x].data=S,this.store[x].lastOperation=40},e.prototype.addChild=function(x,S,w){var U=this.store[x],G=this.add(S,w);this.pendingOperation[G]=G;var H=this.store[G];return H.parent=U,U.children.push(H),G},e.prototype.insertChildAt=function(x,S,w,U){var G=this.store[x],H=this.add(w,U);this.pendingOperation[H]=H;var z=this.store[H];return z.parent=G,S>=G.children.length?G.children.push(z):S>=0?G.children.splice(S,0,z):G.children.unshift(z),H},e.prototype.removeChildById=function(x,S){for(var w=this.store[x],U=w.children.length-1;U>=0;U--)if(w.children[U].id===S){this.removeChildAt(x,U);break}},e.prototype.removeChildAt=function(x,S){var w,U=this.store[x];S>U.children.length-1?(w=U.children[U.children.length-1],U.children[U.children.length-1].parent=null,U.children.splice(U.children.length-1,1)):S>=0?(w=U.children[S],U.children[S].parent=null,U.children.splice(S,1)):(w=U.children[0],U.children[0].parent=null,U.children.splice(0,1)),w.parent=null,this.remove(w.id)},e.prototype.remove=function(x){var S=this.store[x];S.parent?(this.store[S.parent.id],this.removeChildById(S.parent.id,x)):(this.removeChildren(x),this.store[x].lastOperation=50,this.pendingOperation[x]=x)},e.prototype.removeChildren=function(x){for(var S=this.store[x];S.children.length;)this.remove(S.children[0].id)},e.prototype.getStatesToProcess=function(){return this.pendingOperation},e.prototype.flushPendingOperations=function(){for(var x in this.pendingOperation)this.pendingOperation[x]&&(50===this.store[x].lastOperation?delete this.store[x]:this.store[x].lastOperation=0);this.pendingOperation={}},e.prototype.getNewId=function(){return++this.idGenerator},e}(),ni=function(){function e(x){this.component=x}return e.prototype.render=function(x,S,w){0!==w&&(50!==w?this.domNode=this.component.render(x,S):this.removeNode())},e.prototype.composeInContainer=function(x,S,w){if(50===w)return this.removeNode(),null;var U=this.cachedCurrentChildrenContainer;if(0===w)return U;var G=this.domNode,H=G.getAttribute("childrencontainer")?G:G.querySelector("[childrenContainer]");if(H&&U)for(var z=U.children;z.length>0;)H.appendChild(z[0]);if(this.cachedCurrentChildrenContainer=H,S>=x.children.length)x.appendChild(G),this.cachedCurrentDomNode&&40===w&&(this.cachedCurrentDomNode.remove?this.cachedCurrentDomNode.remove():this.cachedCurrentDomNode.parentNode&&this.cachedCurrentDomNode.parentNode.removeChild(this.cachedCurrentDomNode));else{var j=x.children[S];x.insertBefore(G,j),40===w&&x.removeChild(j)}return this.cachedCurrentDomNode=this.domNode,H},e.prototype.removeNode=function(){this.domNode&&this.domNode.parentElement&&(this.domNode.remove?this.domNode.remove():this.domNode.parentNode&&this.domNode.parentNode.removeChild(this.domNode)),this.cachedCurrentDomNode&&this.cachedCurrentDomNode.parentElement&&(this.cachedCurrentDomNode.remove?this.cachedCurrentDomNode.remove():this.cachedCurrentDomNode.parentNode&&this.cachedCurrentDomNode.parentNode.removeChild(this.cachedCurrentDomNode))},e.idGenerator=0,e}(),ii=function(){function e(x){this.stateStore=new ei,this.compositor=new Jn(x,this.stateStore),this.willRender=!1,this.rootStateId=-1}return e.prototype.addRootState=function(x,S,w){void 0===w&&(w=!1);var U=new ni(S),G=this.stateStore.add(x,U);return this.rootStateId=G,this.setForRender(w),G},e.prototype.addChildState=function(x,S,w,U){void 0===U&&(U=!1);var G=this.insertChildState(x,S,Number.MAX_VALUE,w);return this.setForRender(U),G},e.prototype.insertChildState=function(x,S,w,U,G){void 0===G&&(G=!1);var H=new ni(U),z=this.stateStore.insertChildAt(x,w,S,H);return this.setForRender(G),z},e.prototype.updateState=function(x,S,w){void 0===w&&(w=!1),this.stateStore.update(x,S),this.setForRender(w)},e.prototype.removeState=function(x,S){void 0===S&&(S=!1),this.stateStore.remove(x),this.setForRender(S)},e.prototype.removeChildrenStates=function(x,S){void 0===S&&(S=!1),this.stateStore.removeChildren(x),this.setForRender(S)},e.prototype.getState=function(x){return this.stateStore.getData(x)},e.prototype.getGenericState=function(x){return this.getState(x)},e.prototype.getChildrenState=function(x){var S=this;return this.stateStore.getChildrenIds(x).map((function(w){return S.stateStore.getData(x)}))},e.prototype.getChildrenGenericState=function(x){return this.getChildrenState(x)},e.prototype.hasChildren=function(x){return this.stateStore.hasChildren(x)},e.prototype.updateAllChildrenState=function(x,S){for(var w=0,U=this.stateStore.getChildrenIds(x);w0&&"$"===U[U.length-1]?U=U.slice(0,-1):x=S.htmlEscape(x),H+=U,H+=x})),H+=G[G.length-1]},e.prototype.htmlEscape=function(x){return null==x||0===x.length?x:(this.dummyTextGeneratorElement.innerText=x,this.dummyTextGeneratorElement.innerHTML)},e}()),ai=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),un=function(x,S){return Object.defineProperty?Object.defineProperty(x,"raw",{value:S}):x.raw=S,x},li=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return ai(t,x),t.prototype.render=function(x,S){var w=this.htmlTemplate(oe||(oe=un(['
\n
\n
\n
\n ',"\n
\n
"],['
\n
\n
\n
\n ',"\n
\n
"])),x?"active":"",x.logVisible?"active":"",x.logLevel===U.error?"error":"",x.logText);return this.renderElementFromTemplate(w,x,S)},t}(oi),ci=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),ui=function(x){function t(){var S=x.call(this)||this;return S.onCanvasSelected=S.createEvent("onCanvasSelected"),S}return ci(t,x),t.prototype.render=function(x,S){var w=document.createElement("li"),U=document.createElement("span");return U.innerText="Id: "+x.id+" - Size: "+x.width+"*"+x.height,w.appendChild(U),this.mapEventListener(w,"click","onCanvasSelected",x,S),w},t}(oi),di=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),fn=function(x,S){return Object.defineProperty?Object.defineProperty(x,"raw",{value:S}):x.raw=S,x},pi=function(x){function t(){var S=x.call(this)||this;return S.onCaptureRequested=S.createEvent("onCaptureRequested"),S.onPlayRequested=S.createEvent("onPlayRequested"),S.onPauseRequested=S.createEvent("onPauseRequested"),S.onPlayNextFrameRequested=S.createEvent("onPlayNextFrameRequested"),S}return di(t,x),t.prototype.render=function(x,S){var w=this.htmlTemplate(ae||(ae=fn(['\n
\n
\n
\n $',"\n
"],['\n
\n
\n
\n $',"\n
"])),x?'
\n
':'
\n
\n
\n
');return this.renderElementFromTemplate(w,x,S)},t}(oi),fi=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),_n=function(x,S){return Object.defineProperty?Object.defineProperty(x,"raw",{value:S}):x.raw=S,x},gi=function(x){function t(){var S=x.call(this)||this;return S.onCanvasSelection=S.createEvent("onCanvasSelection"),S}return fi(t,x),t.prototype.render=function(x,S){var w=this.htmlTemplate(se||(se=_n(['\n
\n \n ','\n \n
    \n
    '],['\n
    \n \n ','\n \n
      \n
      '])),x.currentCanvasInformation?x.currentCanvasInformation.id+" ("+x.currentCanvasInformation.width+"*"+x.currentCanvasInformation.height+")":"Choose Canvas...",x.showList?"display:block;visibility:visible":"display:none;visibility:hidden");return this.renderElementFromTemplate(w,x,S)},t}(oi),_i=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),yi=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return _i(t,x),t.prototype.render=function(x,S){var w=document.createElement("span");return w.className="fpsCounterComponent",w.innerText=x.toFixed(2)+" Fps",w},t}(oi),bi=function(){function e(x){var S=this;void 0===x&&(x={}),this.options=x,this.rootPlaceHolder=x.rootPlaceHolder||document.body,this.mvx=new ii(this.rootPlaceHolder),this.isTrackingCanvas=!1,this.onCanvasSelected=new j,this.onCaptureRequested=new j,this.onPauseRequested=new j,this.onPlayRequested=new j,this.onPlayNextFrameRequested=new j,this.captureMenuComponent=new li,this.canvasListComponent=new gi,this.canvasListItemComponent=new ui,this.actionsComponent=new pi,this.fpsCounterComponent=new yi,this.rootStateId=this.mvx.addRootState({visible:!0,logLevel:U.info,logText:e.SelectCanvasHelpText,logVisible:!this.options.hideLog},this.captureMenuComponent),this.canvasListStateId=this.mvx.addChildState(this.rootStateId,{currentCanvasInformation:null,showList:!1},this.canvasListComponent),this.actionsStateId=this.mvx.addChildState(this.rootStateId,!0,this.actionsComponent),this.fpsStateId=this.mvx.addChildState(this.rootStateId,0,this.fpsCounterComponent),this.actionsComponent.onCaptureRequested.add((function(){var x=S.getSelectedCanvasInformation();x&&S.updateMenuStateLog(U.info,e.PleaseWaitHelpText,!0),setTimeout((function(){S.onCaptureRequested.trigger(x)}),200)})),this.actionsComponent.onPauseRequested.add((function(){S.onPauseRequested.trigger(S.getSelectedCanvasInformation()),S.mvx.updateState(S.actionsStateId,!1)})),this.actionsComponent.onPlayRequested.add((function(){S.onPlayRequested.trigger(S.getSelectedCanvasInformation()),S.mvx.updateState(S.actionsStateId,!0)})),this.actionsComponent.onPlayNextFrameRequested.add((function(){S.onPlayNextFrameRequested.trigger(S.getSelectedCanvasInformation())})),this.canvasListComponent.onCanvasSelection.add((function(x){S.mvx.updateState(S.canvasListStateId,{currentCanvasInformation:null,showList:!x.state.showList}),S.updateMenuStateLog(U.info,e.SelectCanvasHelpText),S.onCanvasSelected.trigger(null),S.isTrackingCanvas&&S.trackPageCanvases(),x.state.showList?S.showMenuStateLog():S.hideMenuStateLog()})),this.canvasListItemComponent.onCanvasSelected.add((function(x){S.mvx.updateState(S.canvasListStateId,{currentCanvasInformation:x.state,showList:!1}),S.onCanvasSelected.trigger(x.state),S.updateMenuStateLog(U.info,e.ActionsHelpText),S.showMenuStateLog()}))}return e.prototype.getSelectedCanvasInformation=function(){return this.mvx.getGenericState(this.canvasListStateId).currentCanvasInformation},e.prototype.trackPageCanvases=function(){if(this.isTrackingCanvas=!0,document.body){var x=document.body.querySelectorAll("canvas");this.updateCanvasesList(x)}},e.prototype.updateCanvasesList=function(x){this.updateCanvasesListInformationInternal(x,(function(x){return{id:x.id,width:x.width,height:x.height,ref:x}}))},e.prototype.updateCanvasesListInformation=function(x){this.updateCanvasesListInformationInternal(x,(function(x){return{id:x.id,width:x.width,height:x.height,ref:x.ref}}))},e.prototype.display=function(){this.updateMenuStateVisibility(!0)},e.prototype.hide=function(){this.updateMenuStateVisibility(!1)},e.prototype.captureComplete=function(x){x?this.updateMenuStateLog(U.error,x):this.updateMenuStateLog(U.info,e.ActionsHelpText)},e.prototype.setFPS=function(x){this.mvx.updateState(this.fpsStateId,x)},e.prototype.updateCanvasesListInformationInternal=function(x,S){this.mvx.removeChildrenStates(this.canvasListStateId);for(var w=[],G=0;G\n
      \n Drag files here to open a previously saved capture.\n
      \n
        \n '],['\n
        \n
        \n Drag files here to open a previously saved capture.\n
        \n
          \n
          '])),x?"active":""),G=this.renderElementFromTemplate(U,x,S),H=G.querySelector(".openCaptureFile");return H.addEventListener("dragenter",(function(x){return w.drag(x),!1}),!1),H.addEventListener("dragover",(function(x){return w.drag(x),!1}),!1),H.addEventListener("drop",(function(x){w.drop(x)}),!1),G},t.prototype.drag=function(x){x.stopPropagation(),x.preventDefault()},t.prototype.drop=function(x){x.stopPropagation(),x.preventDefault(),this.loadFiles(x)},t.prototype.loadFiles=function(x){var S=this,w=null;if(x&&x.dataTransfer&&x.dataTransfer.files&&(w=x.dataTransfer.files),x&&x.target&&x.target.files&&(w=x.target.files),w&&w.length>0)for(var i=function(x){var U=w[x].name.toLowerCase().split(".").pop();if(w[x].type,"json"===U){var G=w[x],H=new FileReader;H.onerror=function(x){z.error("Error while reading file: "+G.name+x)},H.onload=function(x){try{var w=JSON.parse(x.target.result);S.onCaptureLoaded.trigger(w)}catch(x){z.error("Error while reading file: "+G.name+x)}},H.readAsText(G)}},U=0;U\n
            \n '],['\n
            \n
              \n
              '])));return this.renderElementFromTemplate(w,x,S)},t}(oi),Ai=function(){function e(){}return e.scrollIntoView=function(x){for(var S=x.getBoundingClientRect(),w=x.parentElement;w&&w.clientHeight===w.offsetHeight;)w=w.parentElement;if(w){var U=w.getBoundingClientRect();S.topU.bottom&&x.scrollIntoView(!1)}},e}(),Mi=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),Ri=function(x){function t(){var S=x.call(this)||this;return S.onVisualStateSelected=S.createEvent("onVisualStateSelected"),S}return Mi(t,x),t.prototype.render=function(x,S){var w=document.createElement("li");if(x.active&&(w.className="active",setTimeout((function(){Ai.scrollIntoView(w)}),1)),x.VisualState.Attachments)for(var U=0,G=x.VisualState.Attachments;U1){var j=document.createElement("span");j.innerText=H.attachmentName,w.appendChild(j)}if(H.textureLayer){var X=document.createElement("span");X.innerText="Layer: "+H.textureLayer,w.appendChild(X)}if(H.textureCubeMapFace){var K=document.createElement("span");K.innerText=H.textureCubeMapFace,w.appendChild(K)}}}else{var q=document.createElement("span");q.innerText=x.VisualState.FrameBufferStatus,w.appendChild(q)}var Y=document.createElement("span");return Y.innerText=x.VisualState.FrameBuffer?"Frame buffer: "+x.VisualState.FrameBuffer.__SPECTOR_Object_TAG.id:"Canvas frame buffer",w.appendChild(Y),this.mapEventListener(w,"click","onVisualStateSelected",x,S),w},t}(oi),Li=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),Pn=function(x,S){return Object.defineProperty?Object.defineProperty(x,"raw",{value:S}):x.raw=S,x},Ii=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return Li(t,x),t.prototype.render=function(x,S){var w=this.htmlTemplate(ue||(ue=Pn(['\n
              \n
                \n
                '],['\n
                \n
                  \n
                  '])));return this.renderElementFromTemplate(w,x,S)},t}(oi),Pi=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),Fi=function(x){function t(){var S=x.call(this)||this;return S.onCommandSelected=S.createEvent("onCommandSelected"),S.onVertexSelected=S.createEvent("onVertexSelected"),S.onFragmentSelected=S.createEvent("onFragmentSelected"),S}return Pi(t,x),t.prototype.render=function(x,S){var w=document.createElement("li"),U="unknown";switch(x.capture.status){case 50:U="deprecated";break;case 10:U="unused";break;case 20:U="disabled";break;case 30:U="redundant";break;case 40:U="valid"}if(x.capture.VisualState&&(w.className=" drawCall"),x.active&&(w.className=" active",setTimeout((function(){Ai.scrollIntoView(w)}),1)),x.capture.marker){var G=document.createElement("span");G.className=U+" marker important",G.innerText=x.capture.marker+" ",G.style.fontWeight="1000",w.appendChild(G)}var H=document.createElement("span"),z=x.capture.text;if(z=z.replace(x.capture.name,''+x.capture.name+""),H.innerHTML=z,w.appendChild(H),x.capture.VisualState&&"clear"!==x.capture.name)try{var j=x.capture.DrawCall.shaders[0],X=x.capture.DrawCall.shaders[1],K=document.createElement("a");K.innerText=j.name,K.href="#",w.appendChild(K),this.mapEventListener(K,"click","onVertexSelected",x,S);var q=document.createElement("a");q.innerText=X.name,q.href="#",w.appendChild(q),this.mapEventListener(q,"click","onFragmentSelected",x,S)}catch(x){}return this.mapEventListener(w,"click","onCommandSelected",x,S),w},t}(oi),Oi=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),Un=function(x,S){return Object.defineProperty?Object.defineProperty(x,"raw",{value:S}):x.raw=S,x},Ni=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return Oi(t,x),t.prototype.render=function(x,S){var w=this.htmlTemplate(he||(he=Un(['\n
                  \n
                  '],['\n
                  \n
                  '])));return this.renderElementFromTemplate(w,x,S)},t}(oi),Bi=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),Vn=function(x,S){return Object.defineProperty?Object.defineProperty(x,"raw",{value:S}):x.raw=S,x},Di=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return Bi(t,x),t.prototype.render=function(x,S){var w=this.htmlTemplate(de||(de=Vn(['\n
                  \n
                  '],['\n
                  \n
                  '])));return this.renderElementFromTemplate(w,x,S)},t}(oi),ki=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),jn=function(x,S){return Object.defineProperty?Object.defineProperty(x,"raw",{value:S}):x.raw=S,x},Ui=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return ki(t,x),t.prototype.render=function(x,S){var w=this.htmlTemplate(pe||(pe=jn(['\n
                  \n
                  ','
                  \n
                    \n
                    '],['\n
                    \n
                    ','
                    \n
                      \n
                      '])),x?x.replace(/([A-Z])/g," $1").trim():"");return this.renderElementFromTemplate(w,x,S)},t}(oi),Gi=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),Yn=function(x,S){return Object.defineProperty?Object.defineProperty(x,"raw",{value:S}):x.raw=S,x},Vi=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return Gi(t,x),t.prototype.render=function(x,S){var w=this.htmlTemplate(me||(me=Yn(['\n
                    • ',': ',"
                    • "],['\n
                    • ',': ',"
                    • "])),x.key,x.value);return this.renderElementFromTemplate(w,x,S)},t}(oi),Hi=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),Qn=function(x,S){return Object.defineProperty?Object.defineProperty(x,"raw",{value:S}):x.raw=S,x},Wi=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return Hi(t,x),t.prototype.render=function(x,S){var w=this.htmlTemplate(fe||(fe=Qn(['\n
                    • ',"
                    • "],['\n
                    • ',"
                    • "])),x.value,x.key);return this.renderElementFromTemplate(w,x,S)},t}(oi),$i=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),ti=function(x,S){return Object.defineProperty?Object.defineProperty(x,"raw",{value:S}):x.raw=S,x},zi=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return $i(t,x),t.prototype.render=function(x,S){var w=this.htmlTemplate(ge||(ge=ti(['\n
                    • ',': \n ',' (Open help page)\n \n
                    • '],['\n
                    • ',': \n ',' (Open help page)\n \n
                    • '])),x.key,x.value,x.help);return this.renderElementFromTemplate(w,x,S)},t}(oi),ji=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),Xi=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return ji(t,x),t.prototype.render=function(x,S){var w=document.createElement("div");if(w.className="jsonVisualStateItemComponent",x.Attachments)for(var U=0,G=x.Attachments;U1){var j=document.createElement("span");j.innerText=H.attachmentName,w.appendChild(j)}}}else{var X=document.createElement("span");X.innerText=x.FrameBufferStatus,w.appendChild(X)}var K=document.createElement("span");return K.innerText=x.FrameBuffer?x.FrameBuffer.__SPECTOR_Object_TAG.displayText:"Canvas frame buffer",w.appendChild(K),w},t}(oi),Ki=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),si=function(x,S){return Object.defineProperty?Object.defineProperty(x,"raw",{value:S}):x.raw=S,x},qi=function(x){function t(){var S=x.call(this)||this;return S.onCapturesClicked=S.createEvent("onCapturesClicked"),S.onCommandsClicked=S.createEvent("onCommandsClicked"),S.onInformationClicked=S.createEvent("onInformationClicked"),S.onInitStateClicked=S.createEvent("onInitStateClicked"),S.onEndStateClicked=S.createEvent("onEndStateClicked"),S.onCloseClicked=S.createEvent("onCloseClicked"),S.onSearchTextChanged=S.createEvent("onSearchTextChanged"),S.onSearchTextCleared=S.createEvent("onSearchTextCleared"),S}return Ki(t,x),t.prototype.render=function(x,S){var w=this.htmlTemplate(ve||(ve=si([''],[''])),x.searchText,0===x.status?"active":"",10===x.status?"active":"",20===x.status?"active":"",40===x.status?"active":"",x.commandCount>0?" ("+x.commandCount+")":"",30===x.status?"active":""),U=this.renderElementFromTemplate(w,x,S),G=U.querySelector(".resultViewMenuOpen"),H=U.querySelectorAll("li:not(.resultViewMenuSmall)");return G.addEventListener("click",(function(x){if("true"===G.getAttribute("open")){G.setAttribute("open","false");for(var S=0;S',x,S)},t}(oi),Ji=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),hi=function(x,S){return Object.defineProperty?Object.defineProperty(x,"raw",{value:S}):x.raw=S,x},Qi=function(x){function t(){return null!==x&&x.apply(this,arguments)||this}return Ji(t,x),t.prototype.render=function(x,S){var w=this.htmlTemplate(_e||(_e=hi(['\n
                      \n
                      '],['\n
                      \n
                      '])),x?"active":"");return this.renderElementFromTemplate(w,x,S)},t}(oi),er=function(){var e=function(x,S){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(x,S){x.__proto__=S}||function(x,S){for(var w in S)S.hasOwnProperty(w)&&(x[w]=S[w])})(x,S)};return function(x,S){function i(){this.constructor=x}e(x,S),x.prototype=null===S?Object.create(S):(i.prototype=S.prototype,new i)}}(),mi=function(x,S){return Object.defineProperty?Object.defineProperty(x,"raw",{value:S}):x.raw=S,x},tr=function(x){function t(){var S=x.call(this)||this;return S.onTranslatedVertexSourceClicked=S.createEvent("onTranslatedVertexSourceClicked"),S.onTranslatedFragmentSourceClicked=S.createEvent("onTranslatedFragmentSourceClicked"),S.onVertexSourceClicked=S.createEvent("onVertexSourceClicked"),S.onFragmentSourceClicked=S.createEvent("onFragmentSourceClicked"),S.onSourceCodeCloseClicked=S.createEvent("onSourceCodeCloseClicked"),S.onSourceCodeChanged=S.createEvent("onSourceCodeChanged"),S}return er(t,x),t.prototype.showError=function(x){if(this.editor){var S=[];if(x=x||"")for(var w=/^.*ERROR:\W([0-9]+):([0-9]+):(.*)$/gm,U=w.exec(x);null!=U;)S.push({row:+U[2]-1,column:U[1],text:U[3]||"Error",type:"error"}),U=w.exec(x);this.editor.getSession().setAnnotations(S)}},t.prototype.render=function(x,S){var w,U=this,G=x.fragment?x.sourceFragment:x.sourceVertex;w=x.translated?x.fragment?x.translatedSourceFragment:x.translatedSourceVertex:G?this._indentIfdef(this._beautify(G)):"";var H=this.htmlTemplate(Ee||(Ee=mi(['\n
                      \n
                      \n \n
                      \n $',"\n
                      "],['\n
                      \n
                      \n \n
                      \n $',"\n
                      "])),x.translatedSourceVertex?this.htmlTemplate(ye||(ye=mi(['
                    • Translated Vertex
                    • '],['
                    • Translated Vertex
                    • '])),!x.fragment&&x.translated?"active":""):"",x.translatedSourceFragment?this.htmlTemplate(be||(be=mi(['
                    • Translated Fragment
                    • '],['
                    • Translated Fragment
                    • '])),x.fragment&&x.translated?"active":""):"",x.fragment||x.translated?"":"active",x.fragment&&!x.translated?"active":"",this.htmlTemplate(xe||(xe=mi(['
                      ',"
                      "],['
                      ',"
                      "])),w)),z=this.renderElementFromTemplate(H.replace(/
                      /g,"\n"),x,S);this.editor=ace.edit(z.querySelector(".sourceCodeComponent")),this.editor.setTheme("ace/theme/monokai"),this.editor.getSession().setMode("ace/mode/glsl"),this.editor.setShowPrintMargin(!1);var j=-1;return this.editor.setReadOnly(!x.editable&&!x.translated),this.editor.getSession().on("change",(function(w){-1!==j&&clearTimeout(j),j=setTimeout((function(){U._triggerCompilation(U.editor,x,z,S)}),1500)})),z},t.prototype._triggerCompilation=function(x,S,w,U){S.fragment?S.sourceFragment=x.getValue():S.sourceVertex=x.getValue(),this.triggerEvent("onSourceCodeChanged",w,S,U)},t.prototype._beautify=function(x,S){void 0===S&&(S=0),x=x.trim(),x=this._adaptComments(x);for(var w,U=this._getBracket(x),G=U.firstIteration,H=U.lastIteration,z="",j=0;j<\s]*=)\s*/g,(function(x){return" "+x.trim()+" "}))).replace(/\s*(,)\s*/g,(function(x){return x.trim()+" "}))).replace(/\n[ \t]+/g,"\n")).replace(/\n/g,"\n"+z)).replace(/\s+$/g,"")).replace(/\n+$/g,"");else{var X=x.substr(0,G),K=x.substr(H+1,x.length),q=x.substr(G+1,H-G-1).trim(),Y=this._beautify(q,S+1);w=(w=(w=this._beautify(X,S)+" {\n"+Y+"\n"+z+"}\n"+this._beautify(K,S)).replace(/\s*\n+\s*;/g,";")).replace(/#endif[\t \f\v]*{/g,"\n {")}return(w=(w=w.replace(t.semicolonReplacementKeyRegex,";")).replace(t.openCurlyReplacementKeyRegex,"{")).replace(t.closeCurlyReplacementKeyRegex,"}")},t.prototype._adaptComments=function(x){for(var S=!1,w=!1,U=0;U-1&&0===H?this._getBracket(x,w+1):{firstIteration:w,lastIteration:H}},t.prototype._indentIfdef=function(x){for(var S=0,w=x.split("\n"),U=0;U'],['\n
                      '])),x?"informationColumnLeftComponent":"informationColumnRightComponent");return this.renderElementFromTemplate(w,x,S)},t}(oi),rr=function(){function e(){}return e.getMDNLink=function(x){var S=e.WebGL2Functions[x];if(S)return e.WebGL2RootUrl+S;var w=e.WebGLFunctions[x];return w?e.WebGLRootUrl+w:e.WebGLRootUrl+x},e.WebGL2RootUrl="https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext/",e.WebGLRootUrl="https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/",e.WebGL2Functions={beginQuery:"beginQuery",beginTransformFeedback:"beginTransformFeedback",bindBufferBase:"bindBufferBase",bindBufferRange:"bindBufferRange",bindSampler:"bindSampler",bindTransformFeedback:"bindTransformFeedback",bindVertexArray:"bindVertexArray",blitFramebuffer:"blitFramebuffer",clearBufferfv:"clearBuffer",clearBufferiv:"clearBuffer",clearBufferuiv:"clearBuffer",clearBufferfi:"clearBuffer",clientWaitSync:"clientWaitSync",compressedTexImage3D:"compressedTexImage3D",compressedTexSubImage3D:"compressedTexSubImage3D",copyBufferSubData:"copyBufferSubData",copyTexSubImage3D:"copyTexSubImage3D",createQuery:"createQuery",createSampler:"createSampler",createTransformFeedback:"createTransformFeedback",createVertexArray:"createVertexArray",deleteQuery:"deleteQuery",deleteSampler:"deleteSampler",deleteSync:"deleteSync",deleteTransformFeedback:"deleteTransformFeedback",deleteVertexArray:"deleteVertexArray",drawArraysInstanced:"drawArraysInstanced",drawBuffers:"drawBuffers",drawElementsInstanced:"drawElementsInstanced",drawRangeElements:"drawRangeElements",endQuery:"endQuery",endTransformFeedback:"endTransformFeedback",fenceSync:"fenceSync",framebufferTextureLayer:"framebufferTextureLayer",getActiveUniformBlockName:"getActiveUniformBlockName",getActiveUniformBlockParameter:"getActiveUniformBlockParameter",getActiveUniforms:"getActiveUniforms",getBufferSubData:"getBufferSubData",getFragDataLocation:"getFragDataLocation",getIndexedParameter:"getIndexedParameter",getInternalformatParameter:"getInternalformatParameter",getQuery:"getQuery",getQueryParameter:"getQueryParameter",getSamplerParameter:"getSamplerParameter",getSyncParameter:"getSyncParameter",getTransformFeedbackVarying:"getTransformFeedbackVarying",getUniformBlockIndex:"getUniformBlockIndex",getUniformIndices:"getUniformIndices",invalidateFramebuffer:"invalidateFramebuffer",invalidateSubFramebuffer:"invalidateSubFramebuffer",isQuery:"isQuery",isSampler:"isSampler",isSync:"isSync",isTransformFeedback:"isTransformFeedback",isVertexArray:"isVertexArray",pauseTransformFeedback:"pauseTransformFeedback",readBuffer:"readBuffer",renderbufferStorageMultisample:"renderbufferStorageMultisample",resumeTransformFeedback:"resumeTransformFeedback",samplerParameteri:"samplerParameter",samplerParameterf:"samplerParameter",texImage3D:"texImage3D",texStorage2D:"texStorage2D",texStorage3D:"texStorage3D",texSubImage3D:"texSubImage3D",transformFeedbackVaryings:"transformFeedbackVaryings",uniform1ui:"uniform",uniform2ui:"uniform",uniform3ui:"uniform",uniform4ui:"uniform",uniform1fv:"uniform",uniform2fv:"uniform",uniform3fv:"uniform",uniform4fv:"uniform",uniform1iv:"uniform",uniform2iv:"uniform",uniform3iv:"uniform",uniform4iv:"uniform",uniform1uiv:"uniform",uniform2uiv:"uniform",uniform3uiv:"uniform",uniform4uiv:"uniform",uniformBlockBinding:"uniformBlockBinding",uniformMatrix2fv:"uniformMatrix",uniformMatrix3x2fv:"uniformMatrix",uniformMatrix4x2fv:"uniformMatrix",uniformMatrix2x3fv:"uniformMatrix",uniformMatrix3fv:"uniformMatrix",uniformMatrix4x3fv:"uniformMatrix",uniformMatrix2x4fv:"uniformMatrix",uniformMatrix3x4fv:"uniformMatrix",uniformMatrix4fv:"uniformMatrix",vertexAttribDivisor:"vertexAttribDivisor",vertexAttribI4i:"vertexAttribI",vertexAttribI4ui:"vertexAttribI",vertexAttribI4iv:"vertexAttribI",vertexAttribI4uiv:"vertexAttribI",vertexAttribIPointer:"vertexAttribIPointer",waitSync:"waitSync"},e.WebGLFunctions={uniform1f:"uniform",uniform1fv:"uniform",uniform1i:"uniform",uniform1iv:"uniform",uniform2f:"uniform",uniform2fv:"uniform",uniform2i:"uniform",uniform2iv:"uniform",uniform3f:"uniform",uniform3i:"uniform",uniform3iv:"uniform",uniform4f:"uniform",uniform4fv:"uniform",uniform4i:"uniform",uniform4iv:"uniform",uniformMatrix2fv:"uniformMatrix",uniformMatrix3fv:"uniformMatrix",uniformMatrix4fv:"uniformMatrix",vertexAttrib1f:"vertexAttrib",vertexAttrib2f:"vertexAttrib",vertexAttrib3f:"vertexAttrib",vertexAttrib4f:"vertexAttrib",vertexAttrib1fv:"vertexAttrib",vertexAttrib2fv:"vertexAttrib",vertexAttrib3fv:"vertexAttrib",vertexAttrib4fv:"vertexAttrib"},e}(),or=function(){function e(x){var S=this;void 0===x&&(x=null),this.rootPlaceHolder=x,this.onSourceCodeChanged=new j,this.rootPlaceHolder=this.rootPlaceHolder||document.body,this.mvx=new ii(this.rootPlaceHolder),this.searchText="",this.currentCommandId=-1,this.visible=!1,this.commandCount=0,this.commandListStateId=-1,this.commandDetailStateId=-1,this.currentCaptureStateId=-1,this.currentCommandStateId=-1,this.currentVisualStateId=-1,this.visualStateListStateId=-1,this.initVisualStateId=-1,this.sourceCodeComponentStateId=-1,this.captureListComponent=new Ei,this.captureListItemComponent=new Ti,this.visualStateListComponent=new Ci,this.visualStateListItemComponent=new Ri,this.commandListComponent=new Ii,this.commandListItemComponent=new Fi,this.commandDetailComponent=new Ni,this.jsonContentComponent=new Di,this.jsonGroupComponent=new Ui,this.jsonItemComponent=new Vi,this.jsonImageItemComponent=new Wi,this.jsonHelpItemComponent=new zi,this.jsonVisualStateItemComponent=new Xi,this.resultViewMenuComponent=new qi,this.resultViewContentComponent=new Zi,this.resultViewComponent=new Qi,this.sourceCodeComponent=new tr,this.informationColumnComponent=new ir,this.rootStateId=this.mvx.addRootState(null,this.resultViewComponent),this.menuStateId=this.mvx.addChildState(this.rootStateId,null,this.resultViewMenuComponent),this.contentStateId=this.mvx.addChildState(this.rootStateId,null,this.resultViewContentComponent),this.captureListStateId=this.mvx.addChildState(this.rootStateId,!1,this.captureListComponent),this.initKeyboardEvents(),this.initMenuComponent(),this.captureListComponent.onCaptureLoaded.add((function(x){S.addCapture(x)})),this.captureListItemComponent.onCaptureSelected.add((function(x){S.selectCapture(x.stateId)})),this.captureListItemComponent.onSaveRequested.add((function(x){S.saveCapture(x.state.capture)})),this.visualStateListItemComponent.onVisualStateSelected.add((function(x){S.selectVisualState(x.stateId)})),this.commandListItemComponent.onCommandSelected.add((function(x){S.selectCommand(x.stateId)})),this.commandListItemComponent.onVertexSelected.add((function(x){S.selectCommand(x.stateId),S.openShader(!1)})),this.commandListItemComponent.onFragmentSelected.add((function(x){S.selectCommand(x.stateId),S.openShader(!0)})),this.sourceCodeComponent.onSourceCodeCloseClicked.add((function(){S.displayCurrentCapture()})),this.sourceCodeComponent.onTranslatedVertexSourceClicked.add((function(x){var w=S.mvx.getGenericState(S.sourceCodeComponentStateId);w.fragment=!1,w.translated=!0,S.mvx.updateState(S.sourceCodeComponentStateId,w)})),this.sourceCodeComponent.onTranslatedFragmentSourceClicked.add((function(x){var w=S.mvx.getGenericState(S.sourceCodeComponentStateId);w.fragment=!0,w.translated=!0,S.mvx.updateState(S.sourceCodeComponentStateId,w)})),this.sourceCodeComponent.onVertexSourceClicked.add((function(x){var w=S.mvx.getGenericState(S.sourceCodeComponentStateId);w.fragment=!1,w.translated=!1,S.mvx.updateState(S.sourceCodeComponentStateId,w)})),this.sourceCodeComponent.onFragmentSourceClicked.add((function(x){var w=S.mvx.getGenericState(S.sourceCodeComponentStateId);w.fragment=!0,w.translated=!1,S.mvx.updateState(S.sourceCodeComponentStateId,w)})),this.sourceCodeComponent.onSourceCodeChanged.add((function(x){S.onSourceCodeChanged.trigger({programId:x.state.programId,sourceFragment:x.state.sourceFragment,sourceVertex:x.state.sourceVertex,translatedSourceFragment:x.state.translatedSourceFragment,translatedSourceVertex:x.state.translatedSourceVertex})})),this.updateViewState()}return e.prototype.saveCapture=function(x){var S=JSON.stringify(x,null,4),w=new Blob([S],{type:"octet/stream"}),U="capture "+new Date(x.startTime).toTimeString().split(" ")[0]+".json";if(navigator.msSaveBlob)navigator.msSaveBlob(w,U);else{var G=document.createElement("a"),H=window.URL.createObjectURL(w);G.setAttribute("href",H),G.setAttribute("download",U),G.click()}},e.prototype.selectCapture=function(x){this.currentCommandId=-1,this.currentCaptureStateId=x,this.displayCurrentCapture()},e.prototype.selectCommand=function(x){this.currentCommandStateId=x,this.currentVisualStateId=this.displayCurrentCommand(),this.displayCurrentVisualState()},e.prototype.selectVisualState=function(x){this.currentVisualStateId=x,this.currentCommandStateId=this.displayCurrentVisualState(),this.displayCurrentCommand()},e.prototype.display=function(){this.visible=!0,this.updateViewState()},e.prototype.hide=function(){this.visible=!1,this.updateViewState()},e.prototype.addCapture=function(x){var S=this.mvx.insertChildState(this.captureListStateId,{capture:x,active:!1},0,this.captureListItemComponent);return this.selectCapture(S),S},e.prototype.showSourceCodeError=function(x){this.sourceCodeComponent.showError(x)},e.prototype.initKeyboardEvents=function(){var x=this;this.rootPlaceHolder.addEventListener("keydown",(function(S){40===x.mvx.getGenericState(x.menuStateId).status&&(38===S.keyCode?(S.preventDefault(),S.stopPropagation(),x.selectPreviousCommand()):40===S.keyCode?(S.preventDefault(),S.stopPropagation(),x.selectNextCommand()):33===S.keyCode?(S.preventDefault(),S.stopPropagation(),x.selectPreviousVisualState()):34===S.keyCode&&(S.preventDefault(),S.stopPropagation(),x.selectNextVisualState()))}))},e.prototype.openShader=function(x){this.mvx.removeChildrenStates(this.contentStateId);var S=this.mvx.getGenericState(this.currentCommandStateId);this.sourceCodeComponentStateId=this.mvx.addChildState(this.contentStateId,{programId:S.capture.DrawCall.programStatus.program.__SPECTOR_Object_TAG.id,nameVertex:S.capture.DrawCall.shaders[0].name,nameFragment:S.capture.DrawCall.shaders[1].name,sourceVertex:S.capture.DrawCall.shaders[0].source,sourceFragment:S.capture.DrawCall.shaders[1].source,translatedSourceVertex:S.capture.DrawCall.shaders[0].translatedSource,translatedSourceFragment:S.capture.DrawCall.shaders[1].translatedSource,fragment:x,translated:!1,editable:S.capture.DrawCall.programStatus.RECOMPILABLE},this.sourceCodeComponent),this.commandDetailStateId=this.mvx.addChildState(this.contentStateId,null,this.commandDetailComponent),this.displayCurrentCommandDetail(S)},e.prototype.selectPreviousCommand=function(){var x=this.mvx.getGenericState(this.currentCommandStateId);x.previousCommandStateId<0||this.selectCommand(x.previousCommandStateId)},e.prototype.selectNextCommand=function(){var x=this.mvx.getGenericState(this.currentCommandStateId);x.nextCommandStateId<0||this.selectCommand(x.nextCommandStateId)},e.prototype.selectPreviousVisualState=function(){var x=this.mvx.getGenericState(this.currentVisualStateId);x.previousVisualStateId<0||this.selectVisualState(x.previousVisualStateId)},e.prototype.selectNextVisualState=function(){var x=this.mvx.getGenericState(this.currentVisualStateId);x.nextVisualStateId<0||this.selectVisualState(x.nextVisualStateId)},e.prototype.initMenuComponent=function(){var x=this;this.mvx.updateState(this.menuStateId,{status:0,searchText:this.searchText,commandCount:0}),this.resultViewMenuComponent.onCloseClicked.add((function(S){x.hide()})),this.resultViewMenuComponent.onCapturesClicked.add((function(S){x.displayCaptures()})),this.resultViewMenuComponent.onCommandsClicked.add((function(S){x.displayCurrentCapture()})),this.resultViewMenuComponent.onInformationClicked.add((function(S){x.displayInformation()})),this.resultViewMenuComponent.onInitStateClicked.add((function(S){x.displayInitState()})),this.resultViewMenuComponent.onEndStateClicked.add((function(S){x.displayEndState()})),this.resultViewMenuComponent.onSearchTextChanged.add((function(S){x.search(S.sender.value)})),this.resultViewMenuComponent.onSearchTextCleared.add((function(S){x.mvx.updateState(x.menuStateId,{status:S.state.status,searchText:"",commandCount:S.state.commandCount}),x.search("")}))},e.prototype.onCaptureRelatedAction=function(x){var S=this.mvx.getGenericState(this.currentCaptureStateId);return this.commandCount=S.capture.commands.length,this.mvx.removeChildrenStates(this.contentStateId),this.mvx.updateState(this.menuStateId,{status:x,searchText:this.searchText,commandCount:this.commandCount}),this.mvx.getGenericState(this.captureListStateId)&&this.mvx.updateState(this.captureListStateId,!1),S.capture},e.prototype.displayCaptures=function(){this.mvx.updateState(this.menuStateId,{status:0,searchText:this.searchText,commandCount:this.commandCount}),this.mvx.updateState(this.captureListStateId,!0)},e.prototype.displayInformation=function(){var x=this.onCaptureRelatedAction(10),S=this.mvx.addChildState(this.contentStateId,!0,this.informationColumnComponent),w=this.mvx.addChildState(this.contentStateId,!1,this.informationColumnComponent),U=this.mvx.addChildState(S,null,this.jsonContentComponent);this.displayJSONGroup(U,"Canvas",x.canvas),this.displayJSONGroup(U,"Context",x.context);for(var G=this.mvx.addChildState(w,null,this.jsonContentComponent),H=0,z=x.analyses;H2&&-1===x.indexOf(this.searchText.toLowerCase()))},e.prototype.search=function(x){switch(this.searchText=x,this.mvx.getGenericState(this.menuStateId).status){case 0:case 40:this.displayCurrentCapture();break;case 30:this.displayEndState();break;case 10:this.displayInformation();break;case 20:this.displayInitState()}this.searchText=""},e}(),ar={CaptureMenu:bi,ResultView:or},sr=function(){function e(){this.noFrameTimeout=-1,this.captureNextFrames=0,this.captureNextCommands=0,this.quickCapture=!1,this.fullCapture=!1,this.retry=0,this.contexts=[],this.timeSpy=new qn,this.onCaptureStarted=new j,this.onCapture=new j,this.onError=new j,this.timeSpy.onFrameStart.add(this.onFrameStart,this),this.timeSpy.onFrameEnd.add(this.onFrameEnd,this),this.timeSpy.onError.add(this.onErrorInternal,this)}return e.getFirstAvailable3dContext=function(x){return this.tryGetContextFromHelperField(x)||this.tryGetContextFromCanvas(x,"webgl")||this.tryGetContextFromCanvas(x,"experimental-webgl")||this.tryGetContextFromCanvas(x,"webgl2")||this.tryGetContextFromCanvas(x,"experimental-webgl2")},e.tryGetContextFromHelperField=function(x){var S=x instanceof HTMLCanvasElement?x.getAttribute("__spector_context_type"):x.__spector_context_type;if(S)return this.tryGetContextFromCanvas(x,S)},e.tryGetContextFromCanvas=function(x,S){var w;try{w=x.getContext(S)}catch(x){}return w},e.prototype.displayUI=function(x){var S=this;void 0===x&&(x=!1),this.captureMenu||(this.getCaptureUI(),this.captureMenu.onPauseRequested.add(this.pause,this),this.captureMenu.onPlayRequested.add(this.play,this),this.captureMenu.onPlayNextFrameRequested.add(this.playNextFrame,this),this.captureMenu.onCaptureRequested.add((function(x){x&&S.captureCanvas(x.ref)}),this),setInterval((function(){S.captureMenu.setFPS(S.getFps())}),1e3),x||this.captureMenu.trackPageCanvases(),this.captureMenu.display()),this.resultView||(this.getResultUI(),this.onCapture.add((function(x){S.resultView.display(),S.resultView.addCapture(x)})))},e.prototype.getResultUI=function(){var x=this;return this.resultView||(this.resultView=new or,this.resultView.onSourceCodeChanged.add((function(S){x.rebuildProgramFromProgramId(S.programId,S.sourceVertex,S.sourceFragment,(function(w){x.referenceNewProgram(S.programId,w),x.resultView.showSourceCodeError(null)}),(function(S){x.resultView.showSourceCodeError(S)}))}))),this.resultView},e.prototype.getCaptureUI=function(){return this.captureMenu||(this.captureMenu=new bi),this.captureMenu},e.prototype.rebuildProgramFromProgramId=function(x,S,w,U,G){var H=an.getFromGlobalStore(x);this.rebuildProgram(H,S,w,U,G)},e.prototype.rebuildProgram=function(x,S,w,U,H){G.rebuildProgram(x,S,w,U,H)},e.prototype.referenceNewProgram=function(x,S){an.updateInGlobalStore(x,S)},e.prototype.pause=function(){this.timeSpy.changeSpeedRatio(0)},e.prototype.play=function(){this.timeSpy.changeSpeedRatio(1)},e.prototype.playNextFrame=function(){this.timeSpy.playNextFrame()},e.prototype.drawOnlyEveryXFrame=function(x){this.timeSpy.changeSpeedRatio(x)},e.prototype.getFps=function(){return this.timeSpy.getFps()},e.prototype.spyCanvases=function(){this.canvasSpy?this.onErrorInternal("Already spying canvas."):(this.canvasSpy=new Zn,this.canvasSpy.onContextRequested.add(this.spyContext,this))},e.prototype.spyCanvas=function(x){this.canvasSpy?this.onErrorInternal("Already spying canvas."):(this.canvasSpy=new Zn(x),this.canvasSpy.onContextRequested.add(this.spyContext,this))},e.prototype.getAvailableContexts=function(){return this.getAvailableContexts()},e.prototype.captureCanvas=function(x,S,w,U){void 0===S&&(S=0),void 0===w&&(w=!1),void 0===U&&(U=!1);var G=this.getAvailableContextSpyByCanvas(x);if(G)this.captureContextSpy(G,S,w,U);else{var H=e.getFirstAvailable3dContext(x);H?this.captureContext(H,S,w,U):z.error("No webgl context available on the chosen canvas.")}},e.prototype.captureContext=function(x,S,w,U){void 0===S&&(S=0),void 0===w&&(w=!1),void 0===U&&(U=!1);var G=this.getAvailableContextSpyByCanvas(x.canvas);G||((G=x.getIndexedParameter?new Kn({context:x,version:2,recordAlways:!1}):new Kn({context:x,version:1,recordAlways:!1})).onMaxCommand.add(this.stopCapture,this),this.contexts.push({canvas:G.context.canvas,contextSpy:G})),G&&this.captureContextSpy(G,S,w,U)},e.prototype.captureContextSpy=function(x,S,w,U){var G=this;void 0===S&&(S=0),void 0===w&&(w=!1),void 0===U&&(U=!1),this.quickCapture=w,this.fullCapture=U,this.capturingContext?this.onErrorInternal("Already capturing a context."):(this.retry=0,this.capturingContext=x,this.capturingContext.setMarker(this.marker),(S=Math.min(S,5e3))>0?this.captureCommands(S):this.captureFrames(1),this.noFrameTimeout=setTimeout((function(){S>0?G.stopCapture():G.capturingContext&&G.retry>1?G.onErrorInternal("No frames with gl commands detected. Try moving the camera."):G.onErrorInternal("No frames detected. Try moving the camera or implementing requestAnimationFrame.")}),1e4))},e.prototype.captureNextFrame=function(x,S,w){void 0===S&&(S=!1),void 0===w&&(w=!1),x instanceof HTMLCanvasElement||self.OffscreenCanvas&&x instanceof OffscreenCanvas?this.captureCanvas(x,0,S,w):this.captureContext(x,0,S,w)},e.prototype.startCapture=function(x,S,w,U){void 0===w&&(w=!1),void 0===U&&(U=!1),x instanceof HTMLCanvasElement||self.OffscreenCanvas&&x instanceof OffscreenCanvas?this.captureCanvas(x,S,w,U):this.captureContext(x,S,w,U)},e.prototype.stopCapture=function(){if(this.capturingContext){var x=this.capturingContext.stopCapture();if(x.commands.length>0)return this.noFrameTimeout>-1&&clearTimeout(this.noFrameTimeout),this.triggerCapture(x),this.capturingContext=void 0,this.captureNextFrames=0,this.captureNextCommands=0,x;0===this.captureNextCommands&&(this.retry++,this.captureFrames(1))}},e.prototype.setMarker=function(x){this.marker=x,this.capturingContext&&this.capturingContext.setMarker(x)},e.prototype.clearMarker=function(){this.marker=null,this.capturingContext&&this.capturingContext.clearMarker()},e.prototype.captureFrames=function(x){this.captureNextFrames=x,this.captureNextCommands=0,this.playNextFrame()},e.prototype.captureCommands=function(x){this.captureNextFrames=0,this.captureNextCommands=x,this.play(),this.capturingContext?(this.onCaptureStarted.trigger(void 0),this.capturingContext.startCapture(x,this.quickCapture,this.fullCapture)):(this.onErrorInternal("No context to capture from."),this.captureNextCommands=0)},e.prototype.spyContext=function(x){var S=this.getAvailableContextSpyByCanvas(x.context.canvas);S||((S=new Kn({context:x.context,version:x.contextVersion,recordAlways:!0})).onMaxCommand.add(this.stopCapture,this),this.contexts.push({canvas:S.context.canvas,contextSpy:S})),S.spy()},e.prototype.getAvailableContextSpyByCanvas=function(x){for(var S=0,w=this.contexts;S0||(this.captureNextFrames>0?(this.capturingContext&&(this.onCaptureStarted.trigger(void 0),this.capturingContext.startCapture(0,this.quickCapture,this.fullCapture)),this.captureNextFrames--):this.capturingContext=void 0)},e.prototype.onFrameEnd=function(){this.captureNextCommands>0||0===this.captureNextFrames&&this.stopCapture()},e.prototype.triggerCapture=function(x){this.captureMenu&&this.captureMenu.captureComplete(null),this.onCapture.trigger(x)},e.prototype.onErrorInternal=function(x){if(z.error(x),this.noFrameTimeout>-1&&clearTimeout(this.noFrameTimeout),!this.capturingContext)throw x;this.capturingContext=void 0,this.captureNextFrames=0,this.captureNextCommands=0,this.retry=0,this.captureMenu&&this.captureMenu.captureComplete(x),this.onError.trigger(x)},e}()}])},792:function(x){x.exports=function(){"use strict";var c=function(){var x=0,S=document.createElement("div");function e(x){return S.appendChild(x.dom),x}function t(w){for(var U=0;U{var U=w(212);U.OrbitControls=function(x,S){var w,G,H,z,j;void 0===S&&console.warn('THREE.OrbitControls: The second parameter "domElement" is now mandatory.'),S===document&&console.error('THREE.OrbitControls: "document" should not be used as the target "domElement". Please use "renderer.domElement" instead.'),this.object=x,this.domElement=S,this.enabled=!0,this.target=new U.Vector3,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.enableDamping=!1,this.dampingFactor=.05,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=1,this.enablePan=!0,this.panSpeed=1,this.screenSpacePanning=!1,this.keyPanSpeed=7,this.autoRotate=!1,this.autoRotateSpeed=2,this.enableKeys=!0,this.keys={LEFT:37,UP:38,RIGHT:39,BOTTOM:40},this.mouseButtons={LEFT:U.MOUSE.ROTATE,MIDDLE:U.MOUSE.DOLLY,RIGHT:U.MOUSE.PAN},this.touches={ONE:U.TOUCH.ROTATE,TWO:U.TOUCH.DOLLY_PAN},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this.getPolarAngle=function(){return ee.phi},this.getAzimuthalAngle=function(){return ee.theta},this.saveState=function(){X.target0.copy(X.target),X.position0.copy(X.object.position),X.zoom0=X.object.zoom},this.reset=function(){X.target.copy(X.target0),X.object.position.copy(X.position0),X.object.zoom=X.zoom0,X.object.updateProjectionMatrix(),X.dispatchEvent(K),X.update(),J=Z.NONE},this.update=(w=new U.Vector3,G=(new U.Quaternion).setFromUnitVectors(x.up,new U.Vector3(0,1,0)),H=G.clone().inverse(),z=new U.Vector3,j=new U.Quaternion,function update(){var x=X.object.position;return w.copy(x).sub(X.target),w.applyQuaternion(G),ee.setFromVector3(w),X.autoRotate&&J===Z.NONE&&rotateLeft(function getAutoRotationAngle(){return 2*Math.PI/60/60*X.autoRotateSpeed}()),X.enableDamping?(ee.theta+=te.theta*X.dampingFactor,ee.phi+=te.phi*X.dampingFactor):(ee.theta+=te.theta,ee.phi+=te.phi),ee.theta=Math.max(X.minAzimuthAngle,Math.min(X.maxAzimuthAngle,ee.theta)),ee.phi=Math.max(X.minPolarAngle,Math.min(X.maxPolarAngle,ee.phi)),ee.makeSafe(),ee.radius*=ne,ee.radius=Math.max(X.minDistance,Math.min(X.maxDistance,ee.radius)),!0===X.enableDamping?X.target.addScaledVector(ie,X.dampingFactor):X.target.add(ie),w.setFromSpherical(ee),w.applyQuaternion(H),x.copy(X.target).add(w),X.object.lookAt(X.target),!0===X.enableDamping?(te.theta*=1-X.dampingFactor,te.phi*=1-X.dampingFactor,ie.multiplyScalar(1-X.dampingFactor)):(te.set(0,0,0),ie.set(0,0,0)),ne=1,!!(re||z.distanceToSquared(X.object.position)>Q||8*(1-j.dot(X.object.quaternion))>Q)&&(X.dispatchEvent(K),z.copy(X.object.position),j.copy(X.object.quaternion),re=!1,!0)}),this.dispose=function(){X.domElement.removeEventListener("contextmenu",onContextMenu,!1),X.domElement.removeEventListener("mousedown",onMouseDown,!1),X.domElement.removeEventListener("wheel",onMouseWheel,!1),X.domElement.removeEventListener("touchstart",onTouchStart,!1),X.domElement.removeEventListener("touchend",onTouchEnd,!1),X.domElement.removeEventListener("touchmove",onTouchMove,!1),document.removeEventListener("mousemove",onMouseMove,!1),document.removeEventListener("mouseup",onMouseUp,!1),X.domElement.removeEventListener("keydown",onKeyDown,!1)};var X=this,K={type:"change"},q={type:"start"},Y={type:"end"},Z={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6},J=Z.NONE,Q=1e-6,ee=new U.Spherical,te=new U.Spherical,ne=1,ie=new U.Vector3,re=!1,oe=new U.Vector2,ae=new U.Vector2,se=new U.Vector2,le=new U.Vector2,ce=new U.Vector2,ue=new U.Vector2,he=new U.Vector2,de=new U.Vector2,pe=new U.Vector2;function getZoomScale(){return Math.pow(.95,X.zoomSpeed)}function rotateLeft(x){te.theta-=x}function rotateUp(x){te.phi-=x}var me,fe=(me=new U.Vector3,function panLeft(x,S){me.setFromMatrixColumn(S,0),me.multiplyScalar(-x),ie.add(me)}),ge=function(){var x=new U.Vector3;return function panUp(S,w){!0===X.screenSpacePanning?x.setFromMatrixColumn(w,1):(x.setFromMatrixColumn(w,0),x.crossVectors(X.object.up,x)),x.multiplyScalar(S),ie.add(x)}}(),ve=function(){var x=new U.Vector3;return function pan(S,w){var U=X.domElement;if(X.object.isPerspectiveCamera){var G=X.object.position;x.copy(G).sub(X.target);var H=x.length();H*=Math.tan(X.object.fov/2*Math.PI/180),fe(2*S*H/U.clientHeight,X.object.matrix),ge(2*w*H/U.clientHeight,X.object.matrix)}else X.object.isOrthographicCamera?(fe(S*(X.object.right-X.object.left)/X.object.zoom/U.clientWidth,X.object.matrix),ge(w*(X.object.top-X.object.bottom)/X.object.zoom/U.clientHeight,X.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),X.enablePan=!1)}}();function dollyIn(x){X.object.isPerspectiveCamera?ne/=x:X.object.isOrthographicCamera?(X.object.zoom=Math.max(X.minZoom,Math.min(X.maxZoom,X.object.zoom*x)),X.object.updateProjectionMatrix(),re=!0):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),X.enableZoom=!1)}function dollyOut(x){X.object.isPerspectiveCamera?ne*=x:X.object.isOrthographicCamera?(X.object.zoom=Math.max(X.minZoom,Math.min(X.maxZoom,X.object.zoom/x)),X.object.updateProjectionMatrix(),re=!0):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),X.enableZoom=!1)}function handleMouseDownRotate(x){oe.set(x.clientX,x.clientY)}function handleMouseDownPan(x){le.set(x.clientX,x.clientY)}function handleTouchStartRotate(x){if(1==x.touches.length)oe.set(x.touches[0].pageX,x.touches[0].pageY);else{var S=.5*(x.touches[0].pageX+x.touches[1].pageX),w=.5*(x.touches[0].pageY+x.touches[1].pageY);oe.set(S,w)}}function handleTouchStartPan(x){if(1==x.touches.length)le.set(x.touches[0].pageX,x.touches[0].pageY);else{var S=.5*(x.touches[0].pageX+x.touches[1].pageX),w=.5*(x.touches[0].pageY+x.touches[1].pageY);le.set(S,w)}}function handleTouchStartDolly(x){var S=x.touches[0].pageX-x.touches[1].pageX,w=x.touches[0].pageY-x.touches[1].pageY,U=Math.sqrt(S*S+w*w);he.set(0,U)}function handleTouchMoveRotate(x){if(1==x.touches.length)ae.set(x.touches[0].pageX,x.touches[0].pageY);else{var S=.5*(x.touches[0].pageX+x.touches[1].pageX),w=.5*(x.touches[0].pageY+x.touches[1].pageY);ae.set(S,w)}se.subVectors(ae,oe).multiplyScalar(X.rotateSpeed);var U=X.domElement;rotateLeft(2*Math.PI*se.x/U.clientHeight),rotateUp(2*Math.PI*se.y/U.clientHeight),oe.copy(ae)}function handleTouchMovePan(x){if(1==x.touches.length)ce.set(x.touches[0].pageX,x.touches[0].pageY);else{var S=.5*(x.touches[0].pageX+x.touches[1].pageX),w=.5*(x.touches[0].pageY+x.touches[1].pageY);ce.set(S,w)}ue.subVectors(ce,le).multiplyScalar(X.panSpeed),ve(ue.x,ue.y),le.copy(ce)}function handleTouchMoveDolly(x){var S=x.touches[0].pageX-x.touches[1].pageX,w=x.touches[0].pageY-x.touches[1].pageY,U=Math.sqrt(S*S+w*w);de.set(0,U),pe.set(0,Math.pow(de.y/he.y,X.zoomSpeed)),dollyIn(pe.y),he.copy(de)}function onMouseDown(x){if(!1!==X.enabled){switch(x.preventDefault(),X.domElement.focus?X.domElement.focus():window.focus(),x.button){case 0:switch(X.mouseButtons.LEFT){case U.MOUSE.ROTATE:if(x.ctrlKey||x.metaKey||x.shiftKey){if(!1===X.enablePan)return;handleMouseDownPan(x),J=Z.PAN}else{if(!1===X.enableRotate)return;handleMouseDownRotate(x),J=Z.ROTATE}break;case U.MOUSE.PAN:if(x.ctrlKey||x.metaKey||x.shiftKey){if(!1===X.enableRotate)return;handleMouseDownRotate(x),J=Z.ROTATE}else{if(!1===X.enablePan)return;handleMouseDownPan(x),J=Z.PAN}break;default:J=Z.NONE}break;case 1:if(X.mouseButtons.MIDDLE===U.MOUSE.DOLLY){if(!1===X.enableZoom)return;!function handleMouseDownDolly(x){he.set(x.clientX,x.clientY)}(x),J=Z.DOLLY}else J=Z.NONE;break;case 2:switch(X.mouseButtons.RIGHT){case U.MOUSE.ROTATE:if(!1===X.enableRotate)return;handleMouseDownRotate(x),J=Z.ROTATE;break;case U.MOUSE.PAN:if(!1===X.enablePan)return;handleMouseDownPan(x),J=Z.PAN;break;default:J=Z.NONE}}J!==Z.NONE&&(document.addEventListener("mousemove",onMouseMove,!1),document.addEventListener("mouseup",onMouseUp,!1),X.dispatchEvent(q))}}function onMouseMove(x){if(!1!==X.enabled)switch(x.preventDefault(),J){case Z.ROTATE:if(!1===X.enableRotate)return;!function handleMouseMoveRotate(x){ae.set(x.clientX,x.clientY),se.subVectors(ae,oe).multiplyScalar(X.rotateSpeed);var S=X.domElement;rotateLeft(2*Math.PI*se.x/S.clientHeight),rotateUp(2*Math.PI*se.y/S.clientHeight),oe.copy(ae),X.update()}(x);break;case Z.DOLLY:if(!1===X.enableZoom)return;!function handleMouseMoveDolly(x){de.set(x.clientX,x.clientY),pe.subVectors(de,he),pe.y>0?dollyIn(getZoomScale()):pe.y<0&&dollyOut(getZoomScale()),he.copy(de),X.update()}(x);break;case Z.PAN:if(!1===X.enablePan)return;!function handleMouseMovePan(x){ce.set(x.clientX,x.clientY),ue.subVectors(ce,le).multiplyScalar(X.panSpeed),ve(ue.x,ue.y),le.copy(ce),X.update()}(x)}}function onMouseUp(x){!1!==X.enabled&&(document.removeEventListener("mousemove",onMouseMove,!1),document.removeEventListener("mouseup",onMouseUp,!1),X.dispatchEvent(Y),J=Z.NONE)}function onMouseWheel(x){!1===X.enabled||!1===X.enableZoom||J!==Z.NONE&&J!==Z.ROTATE||(x.preventDefault(),x.stopPropagation(),X.dispatchEvent(q),function handleMouseWheel(x){x.deltaY<0?dollyOut(getZoomScale()):x.deltaY>0&&dollyIn(getZoomScale()),X.update()}(x),X.dispatchEvent(Y))}function onKeyDown(x){!1!==X.enabled&&!1!==X.enableKeys&&!1!==X.enablePan&&function handleKeyDown(x){var S=!1;switch(x.keyCode){case X.keys.UP:ve(0,X.keyPanSpeed),S=!0;break;case X.keys.BOTTOM:ve(0,-X.keyPanSpeed),S=!0;break;case X.keys.LEFT:ve(X.keyPanSpeed,0),S=!0;break;case X.keys.RIGHT:ve(-X.keyPanSpeed,0),S=!0}S&&(x.preventDefault(),X.update())}(x)}function onTouchStart(x){if(!1!==X.enabled){switch(x.preventDefault(),x.touches.length){case 1:switch(X.touches.ONE){case U.TOUCH.ROTATE:if(!1===X.enableRotate)return;handleTouchStartRotate(x),J=Z.TOUCH_ROTATE;break;case U.TOUCH.PAN:if(!1===X.enablePan)return;handleTouchStartPan(x),J=Z.TOUCH_PAN;break;default:J=Z.NONE}break;case 2:switch(X.touches.TWO){case U.TOUCH.DOLLY_PAN:if(!1===X.enableZoom&&!1===X.enablePan)return;!function handleTouchStartDollyPan(x){X.enableZoom&&handleTouchStartDolly(x),X.enablePan&&handleTouchStartPan(x)}(x),J=Z.TOUCH_DOLLY_PAN;break;case U.TOUCH.DOLLY_ROTATE:if(!1===X.enableZoom&&!1===X.enableRotate)return;!function handleTouchStartDollyRotate(x){X.enableZoom&&handleTouchStartDolly(x),X.enableRotate&&handleTouchStartRotate(x)}(x),J=Z.TOUCH_DOLLY_ROTATE;break;default:J=Z.NONE}break;default:J=Z.NONE}J!==Z.NONE&&X.dispatchEvent(q)}}function onTouchMove(x){if(!1!==X.enabled)switch(x.preventDefault(),x.stopPropagation(),J){case Z.TOUCH_ROTATE:if(!1===X.enableRotate)return;handleTouchMoveRotate(x),X.update();break;case Z.TOUCH_PAN:if(!1===X.enablePan)return;handleTouchMovePan(x),X.update();break;case Z.TOUCH_DOLLY_PAN:if(!1===X.enableZoom&&!1===X.enablePan)return;!function handleTouchMoveDollyPan(x){X.enableZoom&&handleTouchMoveDolly(x),X.enablePan&&handleTouchMovePan(x)}(x),X.update();break;case Z.TOUCH_DOLLY_ROTATE:if(!1===X.enableZoom&&!1===X.enableRotate)return;!function handleTouchMoveDollyRotate(x){X.enableZoom&&handleTouchMoveDolly(x),X.enableRotate&&handleTouchMoveRotate(x)}(x),X.update();break;default:J=Z.NONE}}function onTouchEnd(x){!1!==X.enabled&&(X.dispatchEvent(Y),J=Z.NONE)}function onContextMenu(x){!1!==X.enabled&&x.preventDefault()}X.domElement.addEventListener("contextmenu",onContextMenu,!1),X.domElement.addEventListener("mousedown",onMouseDown,!1),X.domElement.addEventListener("wheel",onMouseWheel,!1),X.domElement.addEventListener("touchstart",onTouchStart,!1),X.domElement.addEventListener("touchend",onTouchEnd,!1),X.domElement.addEventListener("touchmove",onTouchMove,!1),X.domElement.addEventListener("keydown",onKeyDown,!1),-1===X.domElement.tabIndex&&(X.domElement.tabIndex=0),this.update()},U.OrbitControls.prototype=Object.create(U.EventDispatcher.prototype),U.OrbitControls.prototype.constructor=U.OrbitControls,U.MapControls=function(x,S){U.OrbitControls.call(this,x,S),this.mouseButtons.LEFT=U.MOUSE.PAN,this.mouseButtons.RIGHT=U.MOUSE.ROTATE,this.touches.ONE=U.TOUCH.PAN,this.touches.TWO=U.TOUCH.DOLLY_ROTATE},U.MapControls.prototype=Object.create(U.EventDispatcher.prototype),U.MapControls.prototype.constructor=U.MapControls,x.exports=S.default=U.OrbitControls},212:(x,S,w)=>{"use strict";w.r(S),w.d(S,{ACESFilmicToneMapping:()=>Ve,AddEquation:()=>ue,AddOperation:()=>Be,AdditiveAnimationBlendMode:()=>Hn,AdditiveBlending:()=>ae,AlphaFormat:()=>Et,AlwaysDepth:()=>Ae,AlwaysStencilFunc:()=>Ai,AmbientLight:()=>AmbientLight,AmbientLightProbe:()=>AmbientLightProbe,AnimationClip:()=>AnimationClip,AnimationLoader:()=>AnimationLoader,AnimationMixer:()=>AnimationMixer,AnimationObjectGroup:()=>AnimationObjectGroup,AnimationUtils:()=>hs,ArcCurve:()=>ArcCurve,ArrayCamera:()=>ArrayCamera,ArrowHelper:()=>ArrowHelper,Audio:()=>Audio,AudioAnalyser:()=>AudioAnalyser,AudioContext:()=>ws,AudioListener:()=>AudioListener,AudioLoader:()=>AudioLoader,AxesHelper:()=>AxesHelper,AxisHelper:()=>AxisHelper,BackSide:()=>ee,BasicDepthPacking:()=>ri,BasicShadowMap:()=>q,BinaryTextureLoader:()=>BinaryTextureLoader,Bone:()=>Bone,BooleanKeyframeTrack:()=>BooleanKeyframeTrack,BoundingBoxHelper:()=>BoundingBoxHelper,Box2:()=>Box2,Box3:()=>Box3,Box3Helper:()=>Box3Helper,BoxBufferGeometry:()=>BoxGeometry,BoxGeometry:()=>BoxGeometry,BoxHelper:()=>BoxHelper,BufferAttribute:()=>BufferAttribute,BufferGeometry:()=>BufferGeometry,BufferGeometryLoader:()=>BufferGeometryLoader,ByteType:()=>ut,Cache:()=>ds,Camera:()=>Camera,CameraHelper:()=>CameraHelper,CanvasRenderer:()=>CanvasRenderer,CanvasTexture:()=>CanvasTexture,CatmullRomCurve3:()=>CatmullRomCurve3,CineonToneMapping:()=>Ge,CircleBufferGeometry:()=>CircleGeometry,CircleGeometry:()=>CircleGeometry,ClampToEdgeWrapping:()=>Ze,Clock:()=>Clock,Color:()=>Color,ColorKeyframeTrack:()=>ColorKeyframeTrack,CompressedTexture:()=>CompressedTexture,CompressedTextureLoader:()=>CompressedTextureLoader,ConeBufferGeometry:()=>ConeGeometry,ConeGeometry:()=>ConeGeometry,CubeCamera:()=>CubeCamera,CubeReflectionMapping:()=>$e,CubeRefractionMapping:()=>ze,CubeTexture:()=>CubeTexture,CubeTextureLoader:()=>CubeTextureLoader,CubeUVReflectionMapping:()=>Ke,CubeUVRefractionMapping:()=>qe,CubicBezierCurve:()=>CubicBezierCurve,CubicBezierCurve3:()=>CubicBezierCurve3,CubicInterpolant:()=>CubicInterpolant,CullFaceBack:()=>j,CullFaceFront:()=>X,CullFaceFrontBack:()=>K,CullFaceNone:()=>z,Curve:()=>Curve,CurvePath:()=>CurvePath,CustomBlending:()=>ce,CustomToneMapping:()=>He,CylinderBufferGeometry:()=>CylinderGeometry,CylinderGeometry:()=>CylinderGeometry,Cylindrical:()=>Cylindrical,DataTexture:()=>DataTexture,DataTexture2DArray:()=>DataTexture2DArray,DataTexture3D:()=>DataTexture3D,DataTextureLoader:()=>DataTextureLoader,DataUtils:()=>DataUtils,DecrementStencilOp:()=>fi,DecrementWrapStencilOp:()=>_i,DefaultLoadingManager:()=>ps,DepthFormat:()=>Mt,DepthStencilFormat:()=>Rt,DepthTexture:()=>DepthTexture,DirectionalLight:()=>DirectionalLight,DirectionalLightHelper:()=>DirectionalLightHelper,DiscreteInterpolant:()=>DiscreteInterpolant,DodecahedronBufferGeometry:()=>DodecahedronGeometry,DodecahedronGeometry:()=>DodecahedronGeometry,DoubleSide:()=>te,DstAlphaFactor:()=>xe,DstColorFactor:()=>Se,DynamicBufferAttribute:()=>DynamicBufferAttribute,DynamicCopyUsage:()=>Ni,DynamicDrawUsage:()=>Ri,DynamicReadUsage:()=>Pi,EdgesGeometry:()=>EdgesGeometry,EdgesHelper:()=>EdgesHelper,EllipseCurve:()=>EllipseCurve,EqualDepth:()=>Le,EqualStencilFunc:()=>Ei,EquirectangularReflectionMapping:()=>je,EquirectangularRefractionMapping:()=>Xe,Euler:()=>Euler,EventDispatcher:()=>EventDispatcher,ExtrudeBufferGeometry:()=>ExtrudeGeometry,ExtrudeGeometry:()=>ExtrudeGeometry,FaceColors:()=>gl,FileLoader:()=>FileLoader,FlatShading:()=>ne,Float16BufferAttribute:()=>Float16BufferAttribute,Float32Attribute:()=>Float32Attribute,Float32BufferAttribute:()=>Float32BufferAttribute,Float64Attribute:()=>Float64Attribute,Float64BufferAttribute:()=>Float64BufferAttribute,FloatType:()=>gt,Fog:()=>Fog,FogExp2:()=>FogExp2,Font:()=>Font,FontLoader:()=>FontLoader,FrontSide:()=>Q,Frustum:()=>Frustum,GLBufferAttribute:()=>GLBufferAttribute,GLSL1:()=>Di,GLSL3:()=>ki,GammaEncoding:()=>qn,GreaterDepth:()=>Pe,GreaterEqualDepth:()=>Ie,GreaterEqualStencilFunc:()=>Ci,GreaterStencilFunc:()=>Ti,GridHelper:()=>GridHelper,Group:()=>Group,HalfFloatType:()=>vt,HemisphereLight:()=>HemisphereLight,HemisphereLightHelper:()=>HemisphereLightHelper,HemisphereLightProbe:()=>HemisphereLightProbe,IcosahedronBufferGeometry:()=>IcosahedronGeometry,IcosahedronGeometry:()=>IcosahedronGeometry,ImageBitmapLoader:()=>ImageBitmapLoader,ImageLoader:()=>ImageLoader,ImageUtils:()=>ImageUtils,ImmediateRenderObject:()=>ImmediateRenderObject,IncrementStencilOp:()=>pi,IncrementWrapStencilOp:()=>gi,InstancedBufferAttribute:()=>InstancedBufferAttribute,InstancedBufferGeometry:()=>InstancedBufferGeometry,InstancedInterleavedBuffer:()=>InstancedInterleavedBuffer,InstancedMesh:()=>InstancedMesh,Int16Attribute:()=>Int16Attribute,Int16BufferAttribute:()=>Int16BufferAttribute,Int32Attribute:()=>Int32Attribute,Int32BufferAttribute:()=>Int32BufferAttribute,Int8Attribute:()=>Int8Attribute,Int8BufferAttribute:()=>Int8BufferAttribute,IntType:()=>mt,InterleavedBuffer:()=>InterleavedBuffer,InterleavedBufferAttribute:()=>InterleavedBufferAttribute,Interpolant:()=>Interpolant,InterpolateDiscrete:()=>Fn,InterpolateLinear:()=>On,InterpolateSmooth:()=>Nn,InvertStencilOp:()=>yi,JSONLoader:()=>JSONLoader,KeepStencilOp:()=>ui,KeyframeTrack:()=>KeyframeTrack,LOD:()=>LOD,LatheBufferGeometry:()=>LatheGeometry,LatheGeometry:()=>LatheGeometry,Layers:()=>Layers,LensFlare:()=>LensFlare,LessDepth:()=>Me,LessEqualDepth:()=>Re,LessEqualStencilFunc:()=>Si,LessStencilFunc:()=>xi,Light:()=>Light,LightProbe:()=>LightProbe,Line:()=>Line,Line3:()=>Line3,LineBasicMaterial:()=>LineBasicMaterial,LineCurve:()=>LineCurve,LineCurve3:()=>LineCurve3,LineDashedMaterial:()=>LineDashedMaterial,LineLoop:()=>LineLoop,LinePieces:()=>ml,LineSegments:()=>LineSegments,LineStrip:()=>pl,LinearEncoding:()=>Xn,LinearFilter:()=>rt,LinearInterpolant:()=>LinearInterpolant,LinearMipMapLinearFilter:()=>lt,LinearMipMapNearestFilter:()=>at,LinearMipmapLinearFilter:()=>st,LinearMipmapNearestFilter:()=>ot,LinearToneMapping:()=>ke,Loader:()=>Loader,LoaderUtils:()=>LoaderUtils,LoadingManager:()=>LoadingManager,LogLuvEncoding:()=>Jn,LoopOnce:()=>Mn,LoopPingPong:()=>In,LoopRepeat:()=>Rn,LuminanceAlphaFormat:()=>Ct,LuminanceFormat:()=>wt,MOUSE:()=>G,Material:()=>Material,MaterialLoader:()=>MaterialLoader,Math:()=>$i,MathUtils:()=>$i,Matrix3:()=>Matrix3,Matrix4:()=>Matrix4,MaxEquation:()=>me,Mesh:()=>Mesh,MeshBasicMaterial:()=>MeshBasicMaterial,MeshDepthMaterial:()=>MeshDepthMaterial,MeshDistanceMaterial:()=>MeshDistanceMaterial,MeshFaceMaterial:()=>MeshFaceMaterial,MeshLambertMaterial:()=>MeshLambertMaterial,MeshMatcapMaterial:()=>MeshMatcapMaterial,MeshNormalMaterial:()=>MeshNormalMaterial,MeshPhongMaterial:()=>MeshPhongMaterial,MeshPhysicalMaterial:()=>MeshPhysicalMaterial,MeshStandardMaterial:()=>MeshStandardMaterial,MeshToonMaterial:()=>MeshToonMaterial,MinEquation:()=>pe,MirroredRepeatWrapping:()=>Je,MixOperation:()=>Ne,MultiMaterial:()=>MultiMaterial,MultiplyBlending:()=>le,MultiplyOperation:()=>Oe,NearestFilter:()=>Qe,NearestMipMapLinearFilter:()=>it,NearestMipMapNearestFilter:()=>tt,NearestMipmapLinearFilter:()=>nt,NearestMipmapNearestFilter:()=>et,NeverDepth:()=>Ce,NeverStencilFunc:()=>bi,NoBlending:()=>re,NoColors:()=>fl,NoToneMapping:()=>De,NormalAnimationBlendMode:()=>Gn,NormalBlending:()=>oe,NotEqualDepth:()=>Fe,NotEqualStencilFunc:()=>wi,NumberKeyframeTrack:()=>NumberKeyframeTrack,Object3D:()=>Object3D,ObjectLoader:()=>ObjectLoader,ObjectSpaceNormalMap:()=>li,OctahedronBufferGeometry:()=>OctahedronGeometry,OctahedronGeometry:()=>OctahedronGeometry,OneFactor:()=>ge,OneMinusDstAlphaFactor:()=>Ee,OneMinusDstColorFactor:()=>Te,OneMinusSrcAlphaFactor:()=>be,OneMinusSrcColorFactor:()=>_e,OrthographicCamera:()=>OrthographicCamera,PCFShadowMap:()=>Y,PCFSoftShadowMap:()=>Z,PMREMGenerator:()=>PMREMGenerator,ParametricGeometry:()=>ParametricGeometry,Particle:()=>Particle,ParticleBasicMaterial:()=>ParticleBasicMaterial,ParticleSystem:()=>ParticleSystem,ParticleSystemMaterial:()=>ParticleSystemMaterial,Path:()=>Path,PerspectiveCamera:()=>PerspectiveCamera,Plane:()=>Plane,PlaneBufferGeometry:()=>PlaneGeometry,PlaneGeometry:()=>PlaneGeometry,PlaneHelper:()=>PlaneHelper,PointCloud:()=>PointCloud,PointCloudMaterial:()=>PointCloudMaterial,PointLight:()=>PointLight,PointLightHelper:()=>PointLightHelper,Points:()=>Points,PointsMaterial:()=>PointsMaterial,PolarGridHelper:()=>PolarGridHelper,PolyhedronBufferGeometry:()=>PolyhedronGeometry,PolyhedronGeometry:()=>PolyhedronGeometry,PositionalAudio:()=>PositionalAudio,PropertyBinding:()=>PropertyBinding,PropertyMixer:()=>PropertyMixer,QuadraticBezierCurve:()=>QuadraticBezierCurve,QuadraticBezierCurve3:()=>QuadraticBezierCurve3,Quaternion:()=>Quaternion,QuaternionKeyframeTrack:()=>QuaternionKeyframeTrack,QuaternionLinearInterpolant:()=>QuaternionLinearInterpolant,REVISION:()=>U,RGBADepthPacking:()=>oi,RGBAFormat:()=>Tt,RGBAIntegerFormat:()=>Bt,RGBA_ASTC_10x10_Format:()=>an,RGBA_ASTC_10x5_Format:()=>nn,RGBA_ASTC_10x6_Format:()=>rn,RGBA_ASTC_10x8_Format:()=>on,RGBA_ASTC_12x10_Format:()=>sn,RGBA_ASTC_12x12_Format:()=>ln,RGBA_ASTC_4x4_Format:()=>Kt,RGBA_ASTC_5x4_Format:()=>qt,RGBA_ASTC_5x5_Format:()=>Yt,RGBA_ASTC_6x5_Format:()=>Zt,RGBA_ASTC_6x6_Format:()=>Jt,RGBA_ASTC_8x5_Format:()=>Qt,RGBA_ASTC_8x6_Format:()=>en,RGBA_ASTC_8x8_Format:()=>tn,RGBA_BPTC_Format:()=>cn,RGBA_ETC2_EAC_Format:()=>Xt,RGBA_PVRTC_2BPPV1_Format:()=>$t,RGBA_PVRTC_4BPPV1_Format:()=>Wt,RGBA_S3TC_DXT1_Format:()=>kt,RGBA_S3TC_DXT3_Format:()=>Ut,RGBA_S3TC_DXT5_Format:()=>Gt,RGBDEncoding:()=>ii,RGBEEncoding:()=>Zn,RGBEFormat:()=>At,RGBFormat:()=>St,RGBIntegerFormat:()=>Nt,RGBM16Encoding:()=>ni,RGBM7Encoding:()=>ei,RGB_ETC1_Format:()=>zt,RGB_ETC2_Format:()=>jt,RGB_PVRTC_2BPPV1_Format:()=>Ht,RGB_PVRTC_4BPPV1_Format:()=>Vt,RGB_S3TC_DXT1_Format:()=>Dt,RGFormat:()=>Pt,RGIntegerFormat:()=>Ft,RawShaderMaterial:()=>RawShaderMaterial,Ray:()=>Ray,Raycaster:()=>Raycaster,RectAreaLight:()=>RectAreaLight,RedFormat:()=>Lt,RedIntegerFormat:()=>It,ReinhardToneMapping:()=>Ue,RepeatWrapping:()=>Ye,ReplaceStencilOp:()=>di,ReverseSubtractEquation:()=>de,RingBufferGeometry:()=>RingGeometry,RingGeometry:()=>RingGeometry,SRGB8_ALPHA8_ASTC_10x10_Format:()=>wn,SRGB8_ALPHA8_ASTC_10x5_Format:()=>En,SRGB8_ALPHA8_ASTC_10x6_Format:()=>Sn,SRGB8_ALPHA8_ASTC_10x8_Format:()=>Tn,SRGB8_ALPHA8_ASTC_12x10_Format:()=>Cn,SRGB8_ALPHA8_ASTC_12x12_Format:()=>An,SRGB8_ALPHA8_ASTC_4x4_Format:()=>hn,SRGB8_ALPHA8_ASTC_5x4_Format:()=>dn,SRGB8_ALPHA8_ASTC_5x5_Format:()=>pn,SRGB8_ALPHA8_ASTC_6x5_Format:()=>mn,SRGB8_ALPHA8_ASTC_6x6_Format:()=>gn,SRGB8_ALPHA8_ASTC_8x5_Format:()=>vn,SRGB8_ALPHA8_ASTC_8x6_Format:()=>bn,SRGB8_ALPHA8_ASTC_8x8_Format:()=>xn,Scene:()=>Scene,SceneUtils:()=>_l,ShaderChunk:()=>Bo,ShaderLib:()=>ko,ShaderMaterial:()=>ShaderMaterial,ShadowMaterial:()=>ShadowMaterial,Shape:()=>Shape,ShapeBufferGeometry:()=>ShapeGeometry,ShapeGeometry:()=>ShapeGeometry,ShapePath:()=>ShapePath,ShapeUtils:()=>ShapeUtils,ShortType:()=>ht,Skeleton:()=>Skeleton,SkeletonHelper:()=>SkeletonHelper,SkinnedMesh:()=>SkinnedMesh,SmoothShading:()=>ie,Sphere:()=>Sphere,SphereBufferGeometry:()=>SphereGeometry,SphereGeometry:()=>SphereGeometry,Spherical:()=>Spherical,SphericalHarmonics3:()=>SphericalHarmonics3,SplineCurve:()=>SplineCurve,SpotLight:()=>SpotLight,SpotLightHelper:()=>SpotLightHelper,Sprite:()=>Sprite,SpriteMaterial:()=>SpriteMaterial,SrcAlphaFactor:()=>ye,SrcAlphaSaturateFactor:()=>we,SrcColorFactor:()=>ve,StaticCopyUsage:()=>Oi,StaticDrawUsage:()=>Mi,StaticReadUsage:()=>Ii,StereoCamera:()=>StereoCamera,StreamCopyUsage:()=>Bi,StreamDrawUsage:()=>Li,StreamReadUsage:()=>Fi,StringKeyframeTrack:()=>StringKeyframeTrack,SubtractEquation:()=>he,SubtractiveBlending:()=>se,TOUCH:()=>H,TangentSpaceNormalMap:()=>ai,TetrahedronBufferGeometry:()=>TetrahedronGeometry,TetrahedronGeometry:()=>TetrahedronGeometry,TextGeometry:()=>TextGeometry,Texture:()=>Texture,TextureLoader:()=>TextureLoader,TorusBufferGeometry:()=>TorusGeometry,TorusGeometry:()=>TorusGeometry,TorusKnotBufferGeometry:()=>TorusKnotGeometry,TorusKnotGeometry:()=>TorusKnotGeometry,Triangle:()=>Triangle,TriangleFanDrawMode:()=>zn,TriangleStripDrawMode:()=>$n,TrianglesDrawMode:()=>Wn,TubeBufferGeometry:()=>TubeGeometry,TubeGeometry:()=>TubeGeometry,UVMapping:()=>We,Uint16Attribute:()=>Uint16Attribute,Uint16BufferAttribute:()=>Uint16BufferAttribute,Uint32Attribute:()=>Uint32Attribute,Uint32BufferAttribute:()=>Uint32BufferAttribute,Uint8Attribute:()=>Uint8Attribute,Uint8BufferAttribute:()=>Uint8BufferAttribute,Uint8ClampedAttribute:()=>Uint8ClampedAttribute,Uint8ClampedBufferAttribute:()=>Uint8ClampedBufferAttribute,Uniform:()=>Uniform,UniformsLib:()=>Do,UniformsUtils:()=>Ro,UnsignedByteType:()=>ct,UnsignedInt248Type:()=>xt,UnsignedIntType:()=>ft,UnsignedShort4444Type:()=>_t,UnsignedShort5551Type:()=>yt,UnsignedShort565Type:()=>bt,UnsignedShortType:()=>pt,VSMShadowMap:()=>J,Vector2:()=>Vector2,Vector3:()=>Vector3,Vector4:()=>Vector4,VectorKeyframeTrack:()=>VectorKeyframeTrack,Vertex:()=>Vertex,VertexColors:()=>vl,VideoTexture:()=>VideoTexture,WebGL1Renderer:()=>WebGL1Renderer,WebGLCubeRenderTarget:()=>WebGLCubeRenderTarget,WebGLMultipleRenderTargets:()=>WebGLMultipleRenderTargets,WebGLMultisampleRenderTarget:()=>WebGLMultisampleRenderTarget,WebGLRenderTarget:()=>WebGLRenderTarget,WebGLRenderTargetCube:()=>WebGLRenderTargetCube,WebGLRenderer:()=>WebGLRenderer,WebGLUtils:()=>WebGLUtils,WireframeGeometry:()=>WireframeGeometry,WireframeHelper:()=>WireframeHelper,WrapAroundEnding:()=>kn,XHRLoader:()=>XHRLoader,ZeroCurvatureEnding:()=>Bn,ZeroFactor:()=>fe,ZeroSlopeEnding:()=>Dn,ZeroStencilOp:()=>ci,sRGBEncoding:()=>Kn});const U="133",G={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},H={ROTATE:0,PAN:1,DOLLY_PAN:2,DOLLY_ROTATE:3},z=0,j=1,X=2,K=3,q=0,Y=1,Z=2,J=3,Q=0,ee=1,te=2,ne=1,ie=2,re=0,oe=1,ae=2,se=3,le=4,ce=5,ue=100,he=101,de=102,pe=103,me=104,fe=200,ge=201,ve=202,_e=203,ye=204,be=205,xe=206,Ee=207,Se=208,Te=209,we=210,Ce=0,Ae=1,Me=2,Re=3,Le=4,Ie=5,Pe=6,Fe=7,Oe=0,Ne=1,Be=2,De=0,ke=1,Ue=2,Ge=3,Ve=4,He=5,We=300,$e=301,ze=302,je=303,Xe=304,Ke=306,qe=307,Ye=1e3,Ze=1001,Je=1002,Qe=1003,et=1004,tt=1004,nt=1005,it=1005,rt=1006,ot=1007,at=1007,st=1008,lt=1008,ct=1009,ut=1010,ht=1011,pt=1012,mt=1013,ft=1014,gt=1015,vt=1016,_t=1017,yt=1018,bt=1019,xt=1020,Et=1021,St=1022,Tt=1023,wt=1024,Ct=1025,At=Tt,Mt=1026,Rt=1027,Lt=1028,It=1029,Pt=1030,Ft=1031,Nt=1032,Bt=1033,Dt=33776,kt=33777,Ut=33778,Gt=33779,Vt=35840,Ht=35841,Wt=35842,$t=35843,zt=36196,jt=37492,Xt=37496,Kt=37808,qt=37809,Yt=37810,Zt=37811,Jt=37812,Qt=37813,en=37814,tn=37815,nn=37816,rn=37817,on=37818,an=37819,sn=37820,ln=37821,cn=36492,hn=37840,dn=37841,pn=37842,mn=37843,gn=37844,vn=37845,bn=37846,xn=37847,En=37848,Sn=37849,Tn=37850,wn=37851,Cn=37852,An=37853,Mn=2200,Rn=2201,In=2202,Fn=2300,On=2301,Nn=2302,Bn=2400,Dn=2401,kn=2402,Gn=2500,Hn=2501,Wn=0,$n=1,zn=2,Xn=3e3,Kn=3001,qn=3007,Zn=3002,Jn=3003,ei=3004,ni=3005,ii=3006,ri=3200,oi=3201,ai=0,li=1,ci=0,ui=7680,di=7681,pi=7682,fi=7683,gi=34055,_i=34056,yi=5386,bi=512,xi=513,Ei=514,Si=515,Ti=516,wi=517,Ci=518,Ai=519,Mi=35044,Ri=35048,Li=35040,Ii=35045,Pi=35049,Fi=35041,Oi=35046,Ni=35050,Bi=35042,Di="100",ki="300 es";class EventDispatcher{addEventListener(x,S){void 0===this._listeners&&(this._listeners={});const w=this._listeners;void 0===w[x]&&(w[x]=[]),-1===w[x].indexOf(S)&&w[x].push(S)}hasEventListener(x,S){if(void 0===this._listeners)return!1;const w=this._listeners;return void 0!==w[x]&&-1!==w[x].indexOf(S)}removeEventListener(x,S){if(void 0===this._listeners)return;const w=this._listeners[x];if(void 0!==w){const x=w.indexOf(S);-1!==x&&w.splice(x,1)}}dispatchEvent(x){if(void 0===this._listeners)return;const S=this._listeners[x.type];if(void 0!==S){x.target=this;const w=S.slice(0);for(let S=0,U=w.length;S>8&255]+Hi[x>>16&255]+Hi[x>>24&255]+"-"+Hi[255&S]+Hi[S>>8&255]+"-"+Hi[S>>16&15|64]+Hi[S>>24&255]+"-"+Hi[63&w|128]+Hi[w>>8&255]+"-"+Hi[w>>16&255]+Hi[w>>24&255]+Hi[255&U]+Hi[U>>8&255]+Hi[U>>16&255]+Hi[U>>24&255]).toUpperCase()}function clamp(x,S,w){return Math.max(S,Math.min(w,x))}function euclideanModulo(x,S){return(x%S+S)%S}function lerp(x,S,w){return(1-w)*x+w*S}function isPowerOfTwo(x){return 0==(x&x-1)&&0!==x}function ceilPowerOfTwo(x){return Math.pow(2,Math.ceil(Math.log(x)/Math.LN2))}function floorPowerOfTwo(x){return Math.pow(2,Math.floor(Math.log(x)/Math.LN2))}var $i=Object.freeze({__proto__:null,DEG2RAD:Gi,RAD2DEG:Vi,generateUUID,clamp,euclideanModulo,mapLinear:function mapLinear(x,S,w,U,G){return U+(x-S)*(G-U)/(w-S)},inverseLerp:function inverseLerp(x,S,w){return x!==S?(w-x)/(S-x):0},lerp,damp:function damp(x,S,w,U){return lerp(x,S,1-Math.exp(-w*U))},pingpong:function pingpong(x,S=1){return S-Math.abs(euclideanModulo(x,2*S)-S)},smoothstep:function smoothstep(x,S,w){return x<=S?0:x>=w?1:(x=(x-S)/(w-S))*x*(3-2*x)},smootherstep:function smootherstep(x,S,w){return x<=S?0:x>=w?1:(x=(x-S)/(w-S))*x*x*(x*(6*x-15)+10)},randInt:function randInt(x,S){return x+Math.floor(Math.random()*(S-x+1))},randFloat:function randFloat(x,S){return x+Math.random()*(S-x)},randFloatSpread:function randFloatSpread(x){return x*(.5-Math.random())},seededRandom:function seededRandom(x){return void 0!==x&&(Ui=x%2147483647),Ui=16807*Ui%2147483647,(Ui-1)/2147483646},degToRad:function degToRad(x){return x*Gi},radToDeg:function radToDeg(x){return x*Vi},isPowerOfTwo,ceilPowerOfTwo,floorPowerOfTwo,setQuaternionFromProperEuler:function setQuaternionFromProperEuler(x,S,w,U,G){const H=Math.cos,z=Math.sin,j=H(w/2),X=z(w/2),K=H((S+U)/2),q=z((S+U)/2),Y=H((S-U)/2),Z=z((S-U)/2),J=H((U-S)/2),Q=z((U-S)/2);switch(G){case"XYX":x.set(j*q,X*Y,X*Z,j*K);break;case"YZY":x.set(X*Z,j*q,X*Y,j*K);break;case"ZXZ":x.set(X*Y,X*Z,j*q,j*K);break;case"XZX":x.set(j*q,X*Q,X*J,j*K);break;case"YXY":x.set(X*J,j*q,X*Q,j*K);break;case"ZYZ":x.set(X*Q,X*J,j*q,j*K);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+G)}}});class Vector2{constructor(x=0,S=0){this.x=x,this.y=S}get width(){return this.x}set width(x){this.x=x}get height(){return this.y}set height(x){this.y=x}set(x,S){return this.x=x,this.y=S,this}setScalar(x){return this.x=x,this.y=x,this}setX(x){return this.x=x,this}setY(x){return this.y=x,this}setComponent(x,S){switch(x){case 0:this.x=S;break;case 1:this.y=S;break;default:throw new Error("index is out of range: "+x)}return this}getComponent(x){switch(x){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+x)}}clone(){return new this.constructor(this.x,this.y)}copy(x){return this.x=x.x,this.y=x.y,this}add(x,S){return void 0!==S?(console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(x,S)):(this.x+=x.x,this.y+=x.y,this)}addScalar(x){return this.x+=x,this.y+=x,this}addVectors(x,S){return this.x=x.x+S.x,this.y=x.y+S.y,this}addScaledVector(x,S){return this.x+=x.x*S,this.y+=x.y*S,this}sub(x,S){return void 0!==S?(console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(x,S)):(this.x-=x.x,this.y-=x.y,this)}subScalar(x){return this.x-=x,this.y-=x,this}subVectors(x,S){return this.x=x.x-S.x,this.y=x.y-S.y,this}multiply(x){return this.x*=x.x,this.y*=x.y,this}multiplyScalar(x){return this.x*=x,this.y*=x,this}divide(x){return this.x/=x.x,this.y/=x.y,this}divideScalar(x){return this.multiplyScalar(1/x)}applyMatrix3(x){const S=this.x,w=this.y,U=x.elements;return this.x=U[0]*S+U[3]*w+U[6],this.y=U[1]*S+U[4]*w+U[7],this}min(x){return this.x=Math.min(this.x,x.x),this.y=Math.min(this.y,x.y),this}max(x){return this.x=Math.max(this.x,x.x),this.y=Math.max(this.y,x.y),this}clamp(x,S){return this.x=Math.max(x.x,Math.min(S.x,this.x)),this.y=Math.max(x.y,Math.min(S.y,this.y)),this}clampScalar(x,S){return this.x=Math.max(x,Math.min(S,this.x)),this.y=Math.max(x,Math.min(S,this.y)),this}clampLength(x,S){const w=this.length();return this.divideScalar(w||1).multiplyScalar(Math.max(x,Math.min(S,w)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(x){return this.x*x.x+this.y*x.y}cross(x){return this.x*x.y-this.y*x.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}distanceTo(x){return Math.sqrt(this.distanceToSquared(x))}distanceToSquared(x){const S=this.x-x.x,w=this.y-x.y;return S*S+w*w}manhattanDistanceTo(x){return Math.abs(this.x-x.x)+Math.abs(this.y-x.y)}setLength(x){return this.normalize().multiplyScalar(x)}lerp(x,S){return this.x+=(x.x-this.x)*S,this.y+=(x.y-this.y)*S,this}lerpVectors(x,S,w){return this.x=x.x+(S.x-x.x)*w,this.y=x.y+(S.y-x.y)*w,this}equals(x){return x.x===this.x&&x.y===this.y}fromArray(x,S=0){return this.x=x[S],this.y=x[S+1],this}toArray(x=[],S=0){return x[S]=this.x,x[S+1]=this.y,x}fromBufferAttribute(x,S,w){return void 0!==w&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute()."),this.x=x.getX(S),this.y=x.getY(S),this}rotateAround(x,S){const w=Math.cos(S),U=Math.sin(S),G=this.x-x.x,H=this.y-x.y;return this.x=G*w-H*U+x.x,this.y=G*U+H*w+x.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}Vector2.prototype.isVector2=!0;class Matrix3{constructor(){this.elements=[1,0,0,0,1,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.")}set(x,S,w,U,G,H,z,j,X){const K=this.elements;return K[0]=x,K[1]=U,K[2]=z,K[3]=S,K[4]=G,K[5]=j,K[6]=w,K[7]=H,K[8]=X,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(x){const S=this.elements,w=x.elements;return S[0]=w[0],S[1]=w[1],S[2]=w[2],S[3]=w[3],S[4]=w[4],S[5]=w[5],S[6]=w[6],S[7]=w[7],S[8]=w[8],this}extractBasis(x,S,w){return x.setFromMatrix3Column(this,0),S.setFromMatrix3Column(this,1),w.setFromMatrix3Column(this,2),this}setFromMatrix4(x){const S=x.elements;return this.set(S[0],S[4],S[8],S[1],S[5],S[9],S[2],S[6],S[10]),this}multiply(x){return this.multiplyMatrices(this,x)}premultiply(x){return this.multiplyMatrices(x,this)}multiplyMatrices(x,S){const w=x.elements,U=S.elements,G=this.elements,H=w[0],z=w[3],j=w[6],X=w[1],K=w[4],q=w[7],Y=w[2],Z=w[5],J=w[8],Q=U[0],ee=U[3],te=U[6],ne=U[1],ie=U[4],re=U[7],oe=U[2],ae=U[5],se=U[8];return G[0]=H*Q+z*ne+j*oe,G[3]=H*ee+z*ie+j*ae,G[6]=H*te+z*re+j*se,G[1]=X*Q+K*ne+q*oe,G[4]=X*ee+K*ie+q*ae,G[7]=X*te+K*re+q*se,G[2]=Y*Q+Z*ne+J*oe,G[5]=Y*ee+Z*ie+J*ae,G[8]=Y*te+Z*re+J*se,this}multiplyScalar(x){const S=this.elements;return S[0]*=x,S[3]*=x,S[6]*=x,S[1]*=x,S[4]*=x,S[7]*=x,S[2]*=x,S[5]*=x,S[8]*=x,this}determinant(){const x=this.elements,S=x[0],w=x[1],U=x[2],G=x[3],H=x[4],z=x[5],j=x[6],X=x[7],K=x[8];return S*H*K-S*z*X-w*G*K+w*z*j+U*G*X-U*H*j}invert(){const x=this.elements,S=x[0],w=x[1],U=x[2],G=x[3],H=x[4],z=x[5],j=x[6],X=x[7],K=x[8],q=K*H-z*X,Y=z*j-K*G,Z=X*G-H*j,J=S*q+w*Y+U*Z;if(0===J)return this.set(0,0,0,0,0,0,0,0,0);const Q=1/J;return x[0]=q*Q,x[1]=(U*X-K*w)*Q,x[2]=(z*w-U*H)*Q,x[3]=Y*Q,x[4]=(K*S-U*j)*Q,x[5]=(U*G-z*S)*Q,x[6]=Z*Q,x[7]=(w*j-X*S)*Q,x[8]=(H*S-w*G)*Q,this}transpose(){let x;const S=this.elements;return x=S[1],S[1]=S[3],S[3]=x,x=S[2],S[2]=S[6],S[6]=x,x=S[5],S[5]=S[7],S[7]=x,this}getNormalMatrix(x){return this.setFromMatrix4(x).invert().transpose()}transposeIntoArray(x){const S=this.elements;return x[0]=S[0],x[1]=S[3],x[2]=S[6],x[3]=S[1],x[4]=S[4],x[5]=S[7],x[6]=S[2],x[7]=S[5],x[8]=S[8],this}setUvTransform(x,S,w,U,G,H,z){const j=Math.cos(G),X=Math.sin(G);return this.set(w*j,w*X,-w*(j*H+X*z)+H+x,-U*X,U*j,-U*(-X*H+j*z)+z+S,0,0,1),this}scale(x,S){const w=this.elements;return w[0]*=x,w[3]*=x,w[6]*=x,w[1]*=S,w[4]*=S,w[7]*=S,this}rotate(x){const S=Math.cos(x),w=Math.sin(x),U=this.elements,G=U[0],H=U[3],z=U[6],j=U[1],X=U[4],K=U[7];return U[0]=S*G+w*j,U[3]=S*H+w*X,U[6]=S*z+w*K,U[1]=-w*G+S*j,U[4]=-w*H+S*X,U[7]=-w*z+S*K,this}translate(x,S){const w=this.elements;return w[0]+=x*w[2],w[3]+=x*w[5],w[6]+=x*w[8],w[1]+=S*w[2],w[4]+=S*w[5],w[7]+=S*w[8],this}equals(x){const S=this.elements,w=x.elements;for(let x=0;x<9;x++)if(S[x]!==w[x])return!1;return!0}fromArray(x,S=0){for(let w=0;w<9;w++)this.elements[w]=x[w+S];return this}toArray(x=[],S=0){const w=this.elements;return x[S]=w[0],x[S+1]=w[1],x[S+2]=w[2],x[S+3]=w[3],x[S+4]=w[4],x[S+5]=w[5],x[S+6]=w[6],x[S+7]=w[7],x[S+8]=w[8],x}clone(){return(new this.constructor).fromArray(this.elements)}}function arrayMax(x){if(0===x.length)return-1/0;let S=x[0];for(let w=1,U=x.length;wS&&(S=x[w]);return S}Matrix3.prototype.isMatrix3=!0;const zi={Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array};function getTypedArray(x,S){return new zi[x](S)}function createElementNS(x){return document.createElementNS("http://www.w3.org/1999/xhtml",x)}let ji;class ImageUtils{static getDataURL(x){if(/^data:/i.test(x.src))return x.src;if("undefined"==typeof HTMLCanvasElement)return x.src;let S;if(x instanceof HTMLCanvasElement)S=x;else{void 0===ji&&(ji=createElementNS("canvas")),ji.width=x.width,ji.height=x.height;const w=ji.getContext("2d");x instanceof ImageData?w.putImageData(x,0,0):w.drawImage(x,0,0,x.width,x.height),S=ji}return S.width>2048||S.height>2048?(console.warn("THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons",x),S.toDataURL("image/jpeg",.6)):S.toDataURL("image/png")}}let Xi=0;class Texture extends EventDispatcher{constructor(x=Texture.DEFAULT_IMAGE,S=Texture.DEFAULT_MAPPING,w=Ze,U=Ze,G=rt,H=st,z=Tt,j=ct,X=1,K=Xn){super(),Object.defineProperty(this,"id",{value:Xi++}),this.uuid=generateUUID(),this.name="",this.image=x,this.mipmaps=[],this.mapping=S,this.wrapS=w,this.wrapT=U,this.magFilter=G,this.minFilter=H,this.anisotropy=X,this.format=z,this.internalFormat=null,this.type=j,this.offset=new Vector2(0,0),this.repeat=new Vector2(1,1),this.center=new Vector2(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new Matrix3,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.encoding=K,this.version=0,this.onUpdate=null,this.isRenderTargetTexture=!1}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}clone(){return(new this.constructor).copy(this)}copy(x){return this.name=x.name,this.image=x.image,this.mipmaps=x.mipmaps.slice(0),this.mapping=x.mapping,this.wrapS=x.wrapS,this.wrapT=x.wrapT,this.magFilter=x.magFilter,this.minFilter=x.minFilter,this.anisotropy=x.anisotropy,this.format=x.format,this.internalFormat=x.internalFormat,this.type=x.type,this.offset.copy(x.offset),this.repeat.copy(x.repeat),this.center.copy(x.center),this.rotation=x.rotation,this.matrixAutoUpdate=x.matrixAutoUpdate,this.matrix.copy(x.matrix),this.generateMipmaps=x.generateMipmaps,this.premultiplyAlpha=x.premultiplyAlpha,this.flipY=x.flipY,this.unpackAlignment=x.unpackAlignment,this.encoding=x.encoding,this}toJSON(x){const S=void 0===x||"string"==typeof x;if(!S&&void 0!==x.textures[this.uuid])return x.textures[this.uuid];const w={metadata:{version:4.5,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,type:this.type,encoding:this.encoding,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};if(void 0!==this.image){const U=this.image;if(void 0===U.uuid&&(U.uuid=generateUUID()),!S&&void 0===x.images[U.uuid]){let S;if(Array.isArray(U)){S=[];for(let x=0,w=U.length;x1)switch(this.wrapS){case Ye:x.x=x.x-Math.floor(x.x);break;case Ze:x.x=x.x<0?0:1;break;case Je:1===Math.abs(Math.floor(x.x)%2)?x.x=Math.ceil(x.x)-x.x:x.x=x.x-Math.floor(x.x)}if(x.y<0||x.y>1)switch(this.wrapT){case Ye:x.y=x.y-Math.floor(x.y);break;case Ze:x.y=x.y<0?0:1;break;case Je:1===Math.abs(Math.floor(x.y)%2)?x.y=Math.ceil(x.y)-x.y:x.y=x.y-Math.floor(x.y)}return this.flipY&&(x.y=1-x.y),x}set needsUpdate(x){!0===x&&this.version++}}function serializeImage(x){return"undefined"!=typeof HTMLImageElement&&x instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&x instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&x instanceof ImageBitmap?ImageUtils.getDataURL(x):x.data?{data:Array.prototype.slice.call(x.data),width:x.width,height:x.height,type:x.data.constructor.name}:(console.warn("THREE.Texture: Unable to serialize Texture."),{})}Texture.DEFAULT_IMAGE=void 0,Texture.DEFAULT_MAPPING=We,Texture.prototype.isTexture=!0;class Vector4{constructor(x=0,S=0,w=0,U=1){this.x=x,this.y=S,this.z=w,this.w=U}get width(){return this.z}set width(x){this.z=x}get height(){return this.w}set height(x){this.w=x}set(x,S,w,U){return this.x=x,this.y=S,this.z=w,this.w=U,this}setScalar(x){return this.x=x,this.y=x,this.z=x,this.w=x,this}setX(x){return this.x=x,this}setY(x){return this.y=x,this}setZ(x){return this.z=x,this}setW(x){return this.w=x,this}setComponent(x,S){switch(x){case 0:this.x=S;break;case 1:this.y=S;break;case 2:this.z=S;break;case 3:this.w=S;break;default:throw new Error("index is out of range: "+x)}return this}getComponent(x){switch(x){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+x)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(x){return this.x=x.x,this.y=x.y,this.z=x.z,this.w=void 0!==x.w?x.w:1,this}add(x,S){return void 0!==S?(console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(x,S)):(this.x+=x.x,this.y+=x.y,this.z+=x.z,this.w+=x.w,this)}addScalar(x){return this.x+=x,this.y+=x,this.z+=x,this.w+=x,this}addVectors(x,S){return this.x=x.x+S.x,this.y=x.y+S.y,this.z=x.z+S.z,this.w=x.w+S.w,this}addScaledVector(x,S){return this.x+=x.x*S,this.y+=x.y*S,this.z+=x.z*S,this.w+=x.w*S,this}sub(x,S){return void 0!==S?(console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(x,S)):(this.x-=x.x,this.y-=x.y,this.z-=x.z,this.w-=x.w,this)}subScalar(x){return this.x-=x,this.y-=x,this.z-=x,this.w-=x,this}subVectors(x,S){return this.x=x.x-S.x,this.y=x.y-S.y,this.z=x.z-S.z,this.w=x.w-S.w,this}multiply(x){return this.x*=x.x,this.y*=x.y,this.z*=x.z,this.w*=x.w,this}multiplyScalar(x){return this.x*=x,this.y*=x,this.z*=x,this.w*=x,this}applyMatrix4(x){const S=this.x,w=this.y,U=this.z,G=this.w,H=x.elements;return this.x=H[0]*S+H[4]*w+H[8]*U+H[12]*G,this.y=H[1]*S+H[5]*w+H[9]*U+H[13]*G,this.z=H[2]*S+H[6]*w+H[10]*U+H[14]*G,this.w=H[3]*S+H[7]*w+H[11]*U+H[15]*G,this}divideScalar(x){return this.multiplyScalar(1/x)}setAxisAngleFromQuaternion(x){this.w=2*Math.acos(x.w);const S=Math.sqrt(1-x.w*x.w);return S<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=x.x/S,this.y=x.y/S,this.z=x.z/S),this}setAxisAngleFromRotationMatrix(x){let S,w,U,G;const H=.01,z=.1,j=x.elements,X=j[0],K=j[4],q=j[8],Y=j[1],Z=j[5],J=j[9],Q=j[2],ee=j[6],te=j[10];if(Math.abs(K-Y)j&&x>ne?xne?j=0?1:-1,U=1-S*S;if(U>Number.EPSILON){const G=Math.sqrt(U),H=Math.atan2(G,S*w);x=Math.sin(x*H)/G,z=Math.sin(z*H)/G}const G=z*w;if(j=j*x+Y*G,X=X*x+Z*G,K=K*x+J*G,q=q*x+Q*G,x===1-z){const x=1/Math.sqrt(j*j+X*X+K*K+q*q);j*=x,X*=x,K*=x,q*=x}}x[S]=j,x[S+1]=X,x[S+2]=K,x[S+3]=q}static multiplyQuaternionsFlat(x,S,w,U,G,H){const z=w[U],j=w[U+1],X=w[U+2],K=w[U+3],q=G[H],Y=G[H+1],Z=G[H+2],J=G[H+3];return x[S]=z*J+K*q+j*Z-X*Y,x[S+1]=j*J+K*Y+X*q-z*Z,x[S+2]=X*J+K*Z+z*Y-j*q,x[S+3]=K*J-z*q-j*Y-X*Z,x}get x(){return this._x}set x(x){this._x=x,this._onChangeCallback()}get y(){return this._y}set y(x){this._y=x,this._onChangeCallback()}get z(){return this._z}set z(x){this._z=x,this._onChangeCallback()}get w(){return this._w}set w(x){this._w=x,this._onChangeCallback()}set(x,S,w,U){return this._x=x,this._y=S,this._z=w,this._w=U,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(x){return this._x=x.x,this._y=x.y,this._z=x.z,this._w=x.w,this._onChangeCallback(),this}setFromEuler(x,S){if(!x||!x.isEuler)throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");const w=x._x,U=x._y,G=x._z,H=x._order,z=Math.cos,j=Math.sin,X=z(w/2),K=z(U/2),q=z(G/2),Y=j(w/2),Z=j(U/2),J=j(G/2);switch(H){case"XYZ":this._x=Y*K*q+X*Z*J,this._y=X*Z*q-Y*K*J,this._z=X*K*J+Y*Z*q,this._w=X*K*q-Y*Z*J;break;case"YXZ":this._x=Y*K*q+X*Z*J,this._y=X*Z*q-Y*K*J,this._z=X*K*J-Y*Z*q,this._w=X*K*q+Y*Z*J;break;case"ZXY":this._x=Y*K*q-X*Z*J,this._y=X*Z*q+Y*K*J,this._z=X*K*J+Y*Z*q,this._w=X*K*q-Y*Z*J;break;case"ZYX":this._x=Y*K*q-X*Z*J,this._y=X*Z*q+Y*K*J,this._z=X*K*J-Y*Z*q,this._w=X*K*q+Y*Z*J;break;case"YZX":this._x=Y*K*q+X*Z*J,this._y=X*Z*q+Y*K*J,this._z=X*K*J-Y*Z*q,this._w=X*K*q-Y*Z*J;break;case"XZY":this._x=Y*K*q-X*Z*J,this._y=X*Z*q-Y*K*J,this._z=X*K*J+Y*Z*q,this._w=X*K*q+Y*Z*J;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+H)}return!1!==S&&this._onChangeCallback(),this}setFromAxisAngle(x,S){const w=S/2,U=Math.sin(w);return this._x=x.x*U,this._y=x.y*U,this._z=x.z*U,this._w=Math.cos(w),this._onChangeCallback(),this}setFromRotationMatrix(x){const S=x.elements,w=S[0],U=S[4],G=S[8],H=S[1],z=S[5],j=S[9],X=S[2],K=S[6],q=S[10],Y=w+z+q;if(Y>0){const x=.5/Math.sqrt(Y+1);this._w=.25/x,this._x=(K-j)*x,this._y=(G-X)*x,this._z=(H-U)*x}else if(w>z&&w>q){const x=2*Math.sqrt(1+w-z-q);this._w=(K-j)/x,this._x=.25*x,this._y=(U+H)/x,this._z=(G+X)/x}else if(z>q){const x=2*Math.sqrt(1+z-w-q);this._w=(G-X)/x,this._x=(U+H)/x,this._y=.25*x,this._z=(j+K)/x}else{const x=2*Math.sqrt(1+q-w-z);this._w=(H-U)/x,this._x=(G+X)/x,this._y=(j+K)/x,this._z=.25*x}return this._onChangeCallback(),this}setFromUnitVectors(x,S){let w=x.dot(S)+1;return wMath.abs(x.z)?(this._x=-x.y,this._y=x.x,this._z=0,this._w=w):(this._x=0,this._y=-x.z,this._z=x.y,this._w=w)):(this._x=x.y*S.z-x.z*S.y,this._y=x.z*S.x-x.x*S.z,this._z=x.x*S.y-x.y*S.x,this._w=w),this.normalize()}angleTo(x){return 2*Math.acos(Math.abs(clamp(this.dot(x),-1,1)))}rotateTowards(x,S){const w=this.angleTo(x);if(0===w)return this;const U=Math.min(1,S/w);return this.slerp(x,U),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(x){return this._x*x._x+this._y*x._y+this._z*x._z+this._w*x._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let x=this.length();return 0===x?(this._x=0,this._y=0,this._z=0,this._w=1):(x=1/x,this._x=this._x*x,this._y=this._y*x,this._z=this._z*x,this._w=this._w*x),this._onChangeCallback(),this}multiply(x,S){return void 0!==S?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(x,S)):this.multiplyQuaternions(this,x)}premultiply(x){return this.multiplyQuaternions(x,this)}multiplyQuaternions(x,S){const w=x._x,U=x._y,G=x._z,H=x._w,z=S._x,j=S._y,X=S._z,K=S._w;return this._x=w*K+H*z+U*X-G*j,this._y=U*K+H*j+G*z-w*X,this._z=G*K+H*X+w*j-U*z,this._w=H*K-w*z-U*j-G*X,this._onChangeCallback(),this}slerp(x,S){if(0===S)return this;if(1===S)return this.copy(x);const w=this._x,U=this._y,G=this._z,H=this._w;let z=H*x._w+w*x._x+U*x._y+G*x._z;if(z<0?(this._w=-x._w,this._x=-x._x,this._y=-x._y,this._z=-x._z,z=-z):this.copy(x),z>=1)return this._w=H,this._x=w,this._y=U,this._z=G,this;const j=1-z*z;if(j<=Number.EPSILON){const x=1-S;return this._w=x*H+S*this._w,this._x=x*w+S*this._x,this._y=x*U+S*this._y,this._z=x*G+S*this._z,this.normalize(),this._onChangeCallback(),this}const X=Math.sqrt(j),K=Math.atan2(X,z),q=Math.sin((1-S)*K)/X,Y=Math.sin(S*K)/X;return this._w=H*q+this._w*Y,this._x=w*q+this._x*Y,this._y=U*q+this._y*Y,this._z=G*q+this._z*Y,this._onChangeCallback(),this}slerpQuaternions(x,S,w){this.copy(x).slerp(S,w)}random(){const x=Math.random(),S=Math.sqrt(1-x),w=Math.sqrt(x),U=2*Math.PI*Math.random(),G=2*Math.PI*Math.random();return this.set(S*Math.cos(U),w*Math.sin(G),w*Math.cos(G),S*Math.sin(U))}equals(x){return x._x===this._x&&x._y===this._y&&x._z===this._z&&x._w===this._w}fromArray(x,S=0){return this._x=x[S],this._y=x[S+1],this._z=x[S+2],this._w=x[S+3],this._onChangeCallback(),this}toArray(x=[],S=0){return x[S]=this._x,x[S+1]=this._y,x[S+2]=this._z,x[S+3]=this._w,x}fromBufferAttribute(x,S){return this._x=x.getX(S),this._y=x.getY(S),this._z=x.getZ(S),this._w=x.getW(S),this}_onChange(x){return this._onChangeCallback=x,this}_onChangeCallback(){}}Quaternion.prototype.isQuaternion=!0;class Vector3{constructor(x=0,S=0,w=0){this.x=x,this.y=S,this.z=w}set(x,S,w){return void 0===w&&(w=this.z),this.x=x,this.y=S,this.z=w,this}setScalar(x){return this.x=x,this.y=x,this.z=x,this}setX(x){return this.x=x,this}setY(x){return this.y=x,this}setZ(x){return this.z=x,this}setComponent(x,S){switch(x){case 0:this.x=S;break;case 1:this.y=S;break;case 2:this.z=S;break;default:throw new Error("index is out of range: "+x)}return this}getComponent(x){switch(x){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+x)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(x){return this.x=x.x,this.y=x.y,this.z=x.z,this}add(x,S){return void 0!==S?(console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(x,S)):(this.x+=x.x,this.y+=x.y,this.z+=x.z,this)}addScalar(x){return this.x+=x,this.y+=x,this.z+=x,this}addVectors(x,S){return this.x=x.x+S.x,this.y=x.y+S.y,this.z=x.z+S.z,this}addScaledVector(x,S){return this.x+=x.x*S,this.y+=x.y*S,this.z+=x.z*S,this}sub(x,S){return void 0!==S?(console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(x,S)):(this.x-=x.x,this.y-=x.y,this.z-=x.z,this)}subScalar(x){return this.x-=x,this.y-=x,this.z-=x,this}subVectors(x,S){return this.x=x.x-S.x,this.y=x.y-S.y,this.z=x.z-S.z,this}multiply(x,S){return void 0!==S?(console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(x,S)):(this.x*=x.x,this.y*=x.y,this.z*=x.z,this)}multiplyScalar(x){return this.x*=x,this.y*=x,this.z*=x,this}multiplyVectors(x,S){return this.x=x.x*S.x,this.y=x.y*S.y,this.z=x.z*S.z,this}applyEuler(x){return x&&x.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."),this.applyQuaternion(qi.setFromEuler(x))}applyAxisAngle(x,S){return this.applyQuaternion(qi.setFromAxisAngle(x,S))}applyMatrix3(x){const S=this.x,w=this.y,U=this.z,G=x.elements;return this.x=G[0]*S+G[3]*w+G[6]*U,this.y=G[1]*S+G[4]*w+G[7]*U,this.z=G[2]*S+G[5]*w+G[8]*U,this}applyNormalMatrix(x){return this.applyMatrix3(x).normalize()}applyMatrix4(x){const S=this.x,w=this.y,U=this.z,G=x.elements,H=1/(G[3]*S+G[7]*w+G[11]*U+G[15]);return this.x=(G[0]*S+G[4]*w+G[8]*U+G[12])*H,this.y=(G[1]*S+G[5]*w+G[9]*U+G[13])*H,this.z=(G[2]*S+G[6]*w+G[10]*U+G[14])*H,this}applyQuaternion(x){const S=this.x,w=this.y,U=this.z,G=x.x,H=x.y,z=x.z,j=x.w,X=j*S+H*U-z*w,K=j*w+z*S-G*U,q=j*U+G*w-H*S,Y=-G*S-H*w-z*U;return this.x=X*j+Y*-G+K*-z-q*-H,this.y=K*j+Y*-H+q*-G-X*-z,this.z=q*j+Y*-z+X*-H-K*-G,this}project(x){return this.applyMatrix4(x.matrixWorldInverse).applyMatrix4(x.projectionMatrix)}unproject(x){return this.applyMatrix4(x.projectionMatrixInverse).applyMatrix4(x.matrixWorld)}transformDirection(x){const S=this.x,w=this.y,U=this.z,G=x.elements;return this.x=G[0]*S+G[4]*w+G[8]*U,this.y=G[1]*S+G[5]*w+G[9]*U,this.z=G[2]*S+G[6]*w+G[10]*U,this.normalize()}divide(x){return this.x/=x.x,this.y/=x.y,this.z/=x.z,this}divideScalar(x){return this.multiplyScalar(1/x)}min(x){return this.x=Math.min(this.x,x.x),this.y=Math.min(this.y,x.y),this.z=Math.min(this.z,x.z),this}max(x){return this.x=Math.max(this.x,x.x),this.y=Math.max(this.y,x.y),this.z=Math.max(this.z,x.z),this}clamp(x,S){return this.x=Math.max(x.x,Math.min(S.x,this.x)),this.y=Math.max(x.y,Math.min(S.y,this.y)),this.z=Math.max(x.z,Math.min(S.z,this.z)),this}clampScalar(x,S){return this.x=Math.max(x,Math.min(S,this.x)),this.y=Math.max(x,Math.min(S,this.y)),this.z=Math.max(x,Math.min(S,this.z)),this}clampLength(x,S){const w=this.length();return this.divideScalar(w||1).multiplyScalar(Math.max(x,Math.min(S,w)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(x){return this.x*x.x+this.y*x.y+this.z*x.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(x){return this.normalize().multiplyScalar(x)}lerp(x,S){return this.x+=(x.x-this.x)*S,this.y+=(x.y-this.y)*S,this.z+=(x.z-this.z)*S,this}lerpVectors(x,S,w){return this.x=x.x+(S.x-x.x)*w,this.y=x.y+(S.y-x.y)*w,this.z=x.z+(S.z-x.z)*w,this}cross(x,S){return void 0!==S?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(x,S)):this.crossVectors(this,x)}crossVectors(x,S){const w=x.x,U=x.y,G=x.z,H=S.x,z=S.y,j=S.z;return this.x=U*j-G*z,this.y=G*H-w*j,this.z=w*z-U*H,this}projectOnVector(x){const S=x.lengthSq();if(0===S)return this.set(0,0,0);const w=x.dot(this)/S;return this.copy(x).multiplyScalar(w)}projectOnPlane(x){return Ki.copy(this).projectOnVector(x),this.sub(Ki)}reflect(x){return this.sub(Ki.copy(x).multiplyScalar(2*this.dot(x)))}angleTo(x){const S=Math.sqrt(this.lengthSq()*x.lengthSq());if(0===S)return Math.PI/2;const w=this.dot(x)/S;return Math.acos(clamp(w,-1,1))}distanceTo(x){return Math.sqrt(this.distanceToSquared(x))}distanceToSquared(x){const S=this.x-x.x,w=this.y-x.y,U=this.z-x.z;return S*S+w*w+U*U}manhattanDistanceTo(x){return Math.abs(this.x-x.x)+Math.abs(this.y-x.y)+Math.abs(this.z-x.z)}setFromSpherical(x){return this.setFromSphericalCoords(x.radius,x.phi,x.theta)}setFromSphericalCoords(x,S,w){const U=Math.sin(S)*x;return this.x=U*Math.sin(w),this.y=Math.cos(S)*x,this.z=U*Math.cos(w),this}setFromCylindrical(x){return this.setFromCylindricalCoords(x.radius,x.theta,x.y)}setFromCylindricalCoords(x,S,w){return this.x=x*Math.sin(S),this.y=w,this.z=x*Math.cos(S),this}setFromMatrixPosition(x){const S=x.elements;return this.x=S[12],this.y=S[13],this.z=S[14],this}setFromMatrixScale(x){const S=this.setFromMatrixColumn(x,0).length(),w=this.setFromMatrixColumn(x,1).length(),U=this.setFromMatrixColumn(x,2).length();return this.x=S,this.y=w,this.z=U,this}setFromMatrixColumn(x,S){return this.fromArray(x.elements,4*S)}setFromMatrix3Column(x,S){return this.fromArray(x.elements,3*S)}equals(x){return x.x===this.x&&x.y===this.y&&x.z===this.z}fromArray(x,S=0){return this.x=x[S],this.y=x[S+1],this.z=x[S+2],this}toArray(x=[],S=0){return x[S]=this.x,x[S+1]=this.y,x[S+2]=this.z,x}fromBufferAttribute(x,S,w){return void 0!==w&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."),this.x=x.getX(S),this.y=x.getY(S),this.z=x.getZ(S),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const x=2*(Math.random()-.5),S=Math.random()*Math.PI*2,w=Math.sqrt(1-x**2);return this.x=w*Math.cos(S),this.y=w*Math.sin(S),this.z=x,this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}Vector3.prototype.isVector3=!0;const Ki=new Vector3,qi=new Quaternion;class Box3{constructor(x=new Vector3(1/0,1/0,1/0),S=new Vector3(-1/0,-1/0,-1/0)){this.min=x,this.max=S}set(x,S){return this.min.copy(x),this.max.copy(S),this}setFromArray(x){let S=1/0,w=1/0,U=1/0,G=-1/0,H=-1/0,z=-1/0;for(let j=0,X=x.length;jG&&(G=X),K>H&&(H=K),q>z&&(z=q)}return this.min.set(S,w,U),this.max.set(G,H,z),this}setFromBufferAttribute(x){let S=1/0,w=1/0,U=1/0,G=-1/0,H=-1/0,z=-1/0;for(let j=0,X=x.count;jG&&(G=X),K>H&&(H=K),q>z&&(z=q)}return this.min.set(S,w,U),this.max.set(G,H,z),this}setFromPoints(x){this.makeEmpty();for(let S=0,w=x.length;Sthis.max.x||x.ythis.max.y||x.zthis.max.z)}containsBox(x){return this.min.x<=x.min.x&&x.max.x<=this.max.x&&this.min.y<=x.min.y&&x.max.y<=this.max.y&&this.min.z<=x.min.z&&x.max.z<=this.max.z}getParameter(x,S){return S.set((x.x-this.min.x)/(this.max.x-this.min.x),(x.y-this.min.y)/(this.max.y-this.min.y),(x.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(x){return!(x.max.xthis.max.x||x.max.ythis.max.y||x.max.zthis.max.z)}intersectsSphere(x){return this.clampPoint(x.center,Zi),Zi.distanceToSquared(x.center)<=x.radius*x.radius}intersectsPlane(x){let S,w;return x.normal.x>0?(S=x.normal.x*this.min.x,w=x.normal.x*this.max.x):(S=x.normal.x*this.max.x,w=x.normal.x*this.min.x),x.normal.y>0?(S+=x.normal.y*this.min.y,w+=x.normal.y*this.max.y):(S+=x.normal.y*this.max.y,w+=x.normal.y*this.min.y),x.normal.z>0?(S+=x.normal.z*this.min.z,w+=x.normal.z*this.max.z):(S+=x.normal.z*this.max.z,w+=x.normal.z*this.min.z),S<=-x.constant&&w>=-x.constant}intersectsTriangle(x){if(this.isEmpty())return!1;this.getCenter(or),ar.subVectors(this.max,or),Qi.subVectors(x.a,or),er.subVectors(x.b,or),tr.subVectors(x.c,or),nr.subVectors(er,Qi),ir.subVectors(tr,er),rr.subVectors(Qi,tr);let S=[0,-nr.z,nr.y,0,-ir.z,ir.y,0,-rr.z,rr.y,nr.z,0,-nr.x,ir.z,0,-ir.x,rr.z,0,-rr.x,-nr.y,nr.x,0,-ir.y,ir.x,0,-rr.y,rr.x,0];return!!satForAxes(S,Qi,er,tr,ar)&&(S=[1,0,0,0,1,0,0,0,1],!!satForAxes(S,Qi,er,tr,ar)&&(sr.crossVectors(nr,ir),S=[sr.x,sr.y,sr.z],satForAxes(S,Qi,er,tr,ar)))}clampPoint(x,S){return S.copy(x).clamp(this.min,this.max)}distanceToPoint(x){return Zi.copy(x).clamp(this.min,this.max).sub(x).length()}getBoundingSphere(x){return this.getCenter(x.center),x.radius=.5*this.getSize(Zi).length(),x}intersect(x){return this.min.max(x.min),this.max.min(x.max),this.isEmpty()&&this.makeEmpty(),this}union(x){return this.min.min(x.min),this.max.max(x.max),this}applyMatrix4(x){return this.isEmpty()||(Yi[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(x),Yi[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(x),Yi[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(x),Yi[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(x),Yi[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(x),Yi[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(x),Yi[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(x),Yi[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(x),this.setFromPoints(Yi)),this}translate(x){return this.min.add(x),this.max.add(x),this}equals(x){return x.min.equals(this.min)&&x.max.equals(this.max)}}Box3.prototype.isBox3=!0;const Yi=[new Vector3,new Vector3,new Vector3,new Vector3,new Vector3,new Vector3,new Vector3,new Vector3],Zi=new Vector3,Ji=new Box3,Qi=new Vector3,er=new Vector3,tr=new Vector3,nr=new Vector3,ir=new Vector3,rr=new Vector3,or=new Vector3,ar=new Vector3,sr=new Vector3,lr=new Vector3;function satForAxes(x,S,w,U,G){for(let H=0,z=x.length-3;H<=z;H+=3){lr.fromArray(x,H);const z=G.x*Math.abs(lr.x)+G.y*Math.abs(lr.y)+G.z*Math.abs(lr.z),j=S.dot(lr),X=w.dot(lr),K=U.dot(lr);if(Math.max(-Math.max(j,X,K),Math.min(j,X,K))>z)return!1}return!0}const cr=new Box3,ur=new Vector3,hr=new Vector3,dr=new Vector3;class Sphere{constructor(x=new Vector3,S=-1){this.center=x,this.radius=S}set(x,S){return this.center.copy(x),this.radius=S,this}setFromPoints(x,S){const w=this.center;void 0!==S?w.copy(S):cr.setFromPoints(x).getCenter(w);let U=0;for(let S=0,G=x.length;Sthis.radius*this.radius&&(S.sub(this.center).normalize(),S.multiplyScalar(this.radius).add(this.center)),S}getBoundingBox(x){return this.isEmpty()?(x.makeEmpty(),x):(x.set(this.center,this.center),x.expandByScalar(this.radius),x)}applyMatrix4(x){return this.center.applyMatrix4(x),this.radius=this.radius*x.getMaxScaleOnAxis(),this}translate(x){return this.center.add(x),this}expandByPoint(x){dr.subVectors(x,this.center);const S=dr.lengthSq();if(S>this.radius*this.radius){const x=Math.sqrt(S),w=.5*(x-this.radius);this.center.add(dr.multiplyScalar(w/x)),this.radius+=w}return this}union(x){return hr.subVectors(x.center,this.center).normalize().multiplyScalar(x.radius),this.expandByPoint(ur.copy(x.center).add(hr)),this.expandByPoint(ur.copy(x.center).sub(hr)),this}equals(x){return x.center.equals(this.center)&&x.radius===this.radius}clone(){return(new this.constructor).copy(this)}}const pr=new Vector3,mr=new Vector3,fr=new Vector3,gr=new Vector3,vr=new Vector3,_r=new Vector3,yr=new Vector3;class Ray{constructor(x=new Vector3,S=new Vector3(0,0,-1)){this.origin=x,this.direction=S}set(x,S){return this.origin.copy(x),this.direction.copy(S),this}copy(x){return this.origin.copy(x.origin),this.direction.copy(x.direction),this}at(x,S){return S.copy(this.direction).multiplyScalar(x).add(this.origin)}lookAt(x){return this.direction.copy(x).sub(this.origin).normalize(),this}recast(x){return this.origin.copy(this.at(x,pr)),this}closestPointToPoint(x,S){S.subVectors(x,this.origin);const w=S.dot(this.direction);return w<0?S.copy(this.origin):S.copy(this.direction).multiplyScalar(w).add(this.origin)}distanceToPoint(x){return Math.sqrt(this.distanceSqToPoint(x))}distanceSqToPoint(x){const S=pr.subVectors(x,this.origin).dot(this.direction);return S<0?this.origin.distanceToSquared(x):(pr.copy(this.direction).multiplyScalar(S).add(this.origin),pr.distanceToSquared(x))}distanceSqToSegment(x,S,w,U){mr.copy(x).add(S).multiplyScalar(.5),fr.copy(S).sub(x).normalize(),gr.copy(this.origin).sub(mr);const G=.5*x.distanceTo(S),H=-this.direction.dot(fr),z=gr.dot(this.direction),j=-gr.dot(fr),X=gr.lengthSq(),K=Math.abs(1-H*H);let q,Y,Z,J;if(K>0)if(q=H*j-z,Y=H*z-j,J=G*K,q>=0)if(Y>=-J)if(Y<=J){const x=1/K;q*=x,Y*=x,Z=q*(q+H*Y+2*z)+Y*(H*q+Y+2*j)+X}else Y=G,q=Math.max(0,-(H*Y+z)),Z=-q*q+Y*(Y+2*j)+X;else Y=-G,q=Math.max(0,-(H*Y+z)),Z=-q*q+Y*(Y+2*j)+X;else Y<=-J?(q=Math.max(0,-(-H*G+z)),Y=q>0?-G:Math.min(Math.max(-G,-j),G),Z=-q*q+Y*(Y+2*j)+X):Y<=J?(q=0,Y=Math.min(Math.max(-G,-j),G),Z=Y*(Y+2*j)+X):(q=Math.max(0,-(H*G+z)),Y=q>0?G:Math.min(Math.max(-G,-j),G),Z=-q*q+Y*(Y+2*j)+X);else Y=H>0?-G:G,q=Math.max(0,-(H*Y+z)),Z=-q*q+Y*(Y+2*j)+X;return w&&w.copy(this.direction).multiplyScalar(q).add(this.origin),U&&U.copy(fr).multiplyScalar(Y).add(mr),Z}intersectSphere(x,S){pr.subVectors(x.center,this.origin);const w=pr.dot(this.direction),U=pr.dot(pr)-w*w,G=x.radius*x.radius;if(U>G)return null;const H=Math.sqrt(G-U),z=w-H,j=w+H;return z<0&&j<0?null:z<0?this.at(j,S):this.at(z,S)}intersectsSphere(x){return this.distanceSqToPoint(x.center)<=x.radius*x.radius}distanceToPlane(x){const S=x.normal.dot(this.direction);if(0===S)return 0===x.distanceToPoint(this.origin)?0:null;const w=-(this.origin.dot(x.normal)+x.constant)/S;return w>=0?w:null}intersectPlane(x,S){const w=this.distanceToPlane(x);return null===w?null:this.at(w,S)}intersectsPlane(x){const S=x.distanceToPoint(this.origin);if(0===S)return!0;return x.normal.dot(this.direction)*S<0}intersectBox(x,S){let w,U,G,H,z,j;const X=1/this.direction.x,K=1/this.direction.y,q=1/this.direction.z,Y=this.origin;return X>=0?(w=(x.min.x-Y.x)*X,U=(x.max.x-Y.x)*X):(w=(x.max.x-Y.x)*X,U=(x.min.x-Y.x)*X),K>=0?(G=(x.min.y-Y.y)*K,H=(x.max.y-Y.y)*K):(G=(x.max.y-Y.y)*K,H=(x.min.y-Y.y)*K),w>H||G>U?null:((G>w||w!=w)&&(w=G),(H=0?(z=(x.min.z-Y.z)*q,j=(x.max.z-Y.z)*q):(z=(x.max.z-Y.z)*q,j=(x.min.z-Y.z)*q),w>j||z>U?null:((z>w||w!=w)&&(w=z),(j=0?w:U,S)))}intersectsBox(x){return null!==this.intersectBox(x,pr)}intersectTriangle(x,S,w,U,G){vr.subVectors(S,x),_r.subVectors(w,x),yr.crossVectors(vr,_r);let H,z=this.direction.dot(yr);if(z>0){if(U)return null;H=1}else{if(!(z<0))return null;H=-1,z=-z}gr.subVectors(this.origin,x);const j=H*this.direction.dot(_r.crossVectors(gr,_r));if(j<0)return null;const X=H*this.direction.dot(vr.cross(gr));if(X<0)return null;if(j+X>z)return null;const K=-H*gr.dot(yr);return K<0?null:this.at(K/z,G)}applyMatrix4(x){return this.origin.applyMatrix4(x),this.direction.transformDirection(x),this}equals(x){return x.origin.equals(this.origin)&&x.direction.equals(this.direction)}clone(){return(new this.constructor).copy(this)}}class Matrix4{constructor(){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.")}set(x,S,w,U,G,H,z,j,X,K,q,Y,Z,J,Q,ee){const te=this.elements;return te[0]=x,te[4]=S,te[8]=w,te[12]=U,te[1]=G,te[5]=H,te[9]=z,te[13]=j,te[2]=X,te[6]=K,te[10]=q,te[14]=Y,te[3]=Z,te[7]=J,te[11]=Q,te[15]=ee,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return(new Matrix4).fromArray(this.elements)}copy(x){const S=this.elements,w=x.elements;return S[0]=w[0],S[1]=w[1],S[2]=w[2],S[3]=w[3],S[4]=w[4],S[5]=w[5],S[6]=w[6],S[7]=w[7],S[8]=w[8],S[9]=w[9],S[10]=w[10],S[11]=w[11],S[12]=w[12],S[13]=w[13],S[14]=w[14],S[15]=w[15],this}copyPosition(x){const S=this.elements,w=x.elements;return S[12]=w[12],S[13]=w[13],S[14]=w[14],this}setFromMatrix3(x){const S=x.elements;return this.set(S[0],S[3],S[6],0,S[1],S[4],S[7],0,S[2],S[5],S[8],0,0,0,0,1),this}extractBasis(x,S,w){return x.setFromMatrixColumn(this,0),S.setFromMatrixColumn(this,1),w.setFromMatrixColumn(this,2),this}makeBasis(x,S,w){return this.set(x.x,S.x,w.x,0,x.y,S.y,w.y,0,x.z,S.z,w.z,0,0,0,0,1),this}extractRotation(x){const S=this.elements,w=x.elements,U=1/br.setFromMatrixColumn(x,0).length(),G=1/br.setFromMatrixColumn(x,1).length(),H=1/br.setFromMatrixColumn(x,2).length();return S[0]=w[0]*U,S[1]=w[1]*U,S[2]=w[2]*U,S[3]=0,S[4]=w[4]*G,S[5]=w[5]*G,S[6]=w[6]*G,S[7]=0,S[8]=w[8]*H,S[9]=w[9]*H,S[10]=w[10]*H,S[11]=0,S[12]=0,S[13]=0,S[14]=0,S[15]=1,this}makeRotationFromEuler(x){x&&x.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");const S=this.elements,w=x.x,U=x.y,G=x.z,H=Math.cos(w),z=Math.sin(w),j=Math.cos(U),X=Math.sin(U),K=Math.cos(G),q=Math.sin(G);if("XYZ"===x.order){const x=H*K,w=H*q,U=z*K,G=z*q;S[0]=j*K,S[4]=-j*q,S[8]=X,S[1]=w+U*X,S[5]=x-G*X,S[9]=-z*j,S[2]=G-x*X,S[6]=U+w*X,S[10]=H*j}else if("YXZ"===x.order){const x=j*K,w=j*q,U=X*K,G=X*q;S[0]=x+G*z,S[4]=U*z-w,S[8]=H*X,S[1]=H*q,S[5]=H*K,S[9]=-z,S[2]=w*z-U,S[6]=G+x*z,S[10]=H*j}else if("ZXY"===x.order){const x=j*K,w=j*q,U=X*K,G=X*q;S[0]=x-G*z,S[4]=-H*q,S[8]=U+w*z,S[1]=w+U*z,S[5]=H*K,S[9]=G-x*z,S[2]=-H*X,S[6]=z,S[10]=H*j}else if("ZYX"===x.order){const x=H*K,w=H*q,U=z*K,G=z*q;S[0]=j*K,S[4]=U*X-w,S[8]=x*X+G,S[1]=j*q,S[5]=G*X+x,S[9]=w*X-U,S[2]=-X,S[6]=z*j,S[10]=H*j}else if("YZX"===x.order){const x=H*j,w=H*X,U=z*j,G=z*X;S[0]=j*K,S[4]=G-x*q,S[8]=U*q+w,S[1]=q,S[5]=H*K,S[9]=-z*K,S[2]=-X*K,S[6]=w*q+U,S[10]=x-G*q}else if("XZY"===x.order){const x=H*j,w=H*X,U=z*j,G=z*X;S[0]=j*K,S[4]=-q,S[8]=X*K,S[1]=x*q+G,S[5]=H*K,S[9]=w*q-U,S[2]=U*q-w,S[6]=z*K,S[10]=G*q+x}return S[3]=0,S[7]=0,S[11]=0,S[12]=0,S[13]=0,S[14]=0,S[15]=1,this}makeRotationFromQuaternion(x){return this.compose(Er,x,Sr)}lookAt(x,S,w){const U=this.elements;return Cr.subVectors(x,S),0===Cr.lengthSq()&&(Cr.z=1),Cr.normalize(),Tr.crossVectors(w,Cr),0===Tr.lengthSq()&&(1===Math.abs(w.z)?Cr.x+=1e-4:Cr.z+=1e-4,Cr.normalize(),Tr.crossVectors(w,Cr)),Tr.normalize(),wr.crossVectors(Cr,Tr),U[0]=Tr.x,U[4]=wr.x,U[8]=Cr.x,U[1]=Tr.y,U[5]=wr.y,U[9]=Cr.y,U[2]=Tr.z,U[6]=wr.z,U[10]=Cr.z,this}multiply(x,S){return void 0!==S?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(x,S)):this.multiplyMatrices(this,x)}premultiply(x){return this.multiplyMatrices(x,this)}multiplyMatrices(x,S){const w=x.elements,U=S.elements,G=this.elements,H=w[0],z=w[4],j=w[8],X=w[12],K=w[1],q=w[5],Y=w[9],Z=w[13],J=w[2],Q=w[6],ee=w[10],te=w[14],ne=w[3],ie=w[7],re=w[11],oe=w[15],ae=U[0],se=U[4],le=U[8],ce=U[12],ue=U[1],he=U[5],de=U[9],pe=U[13],me=U[2],fe=U[6],ge=U[10],ve=U[14],_e=U[3],ye=U[7],be=U[11],xe=U[15];return G[0]=H*ae+z*ue+j*me+X*_e,G[4]=H*se+z*he+j*fe+X*ye,G[8]=H*le+z*de+j*ge+X*be,G[12]=H*ce+z*pe+j*ve+X*xe,G[1]=K*ae+q*ue+Y*me+Z*_e,G[5]=K*se+q*he+Y*fe+Z*ye,G[9]=K*le+q*de+Y*ge+Z*be,G[13]=K*ce+q*pe+Y*ve+Z*xe,G[2]=J*ae+Q*ue+ee*me+te*_e,G[6]=J*se+Q*he+ee*fe+te*ye,G[10]=J*le+Q*de+ee*ge+te*be,G[14]=J*ce+Q*pe+ee*ve+te*xe,G[3]=ne*ae+ie*ue+re*me+oe*_e,G[7]=ne*se+ie*he+re*fe+oe*ye,G[11]=ne*le+ie*de+re*ge+oe*be,G[15]=ne*ce+ie*pe+re*ve+oe*xe,this}multiplyScalar(x){const S=this.elements;return S[0]*=x,S[4]*=x,S[8]*=x,S[12]*=x,S[1]*=x,S[5]*=x,S[9]*=x,S[13]*=x,S[2]*=x,S[6]*=x,S[10]*=x,S[14]*=x,S[3]*=x,S[7]*=x,S[11]*=x,S[15]*=x,this}determinant(){const x=this.elements,S=x[0],w=x[4],U=x[8],G=x[12],H=x[1],z=x[5],j=x[9],X=x[13],K=x[2],q=x[6],Y=x[10],Z=x[14];return x[3]*(+G*j*q-U*X*q-G*z*Y+w*X*Y+U*z*Z-w*j*Z)+x[7]*(+S*j*Z-S*X*Y+G*H*Y-U*H*Z+U*X*K-G*j*K)+x[11]*(+S*X*q-S*z*Z-G*H*q+w*H*Z+G*z*K-w*X*K)+x[15]*(-U*z*K-S*j*q+S*z*Y+U*H*q-w*H*Y+w*j*K)}transpose(){const x=this.elements;let S;return S=x[1],x[1]=x[4],x[4]=S,S=x[2],x[2]=x[8],x[8]=S,S=x[6],x[6]=x[9],x[9]=S,S=x[3],x[3]=x[12],x[12]=S,S=x[7],x[7]=x[13],x[13]=S,S=x[11],x[11]=x[14],x[14]=S,this}setPosition(x,S,w){const U=this.elements;return x.isVector3?(U[12]=x.x,U[13]=x.y,U[14]=x.z):(U[12]=x,U[13]=S,U[14]=w),this}invert(){const x=this.elements,S=x[0],w=x[1],U=x[2],G=x[3],H=x[4],z=x[5],j=x[6],X=x[7],K=x[8],q=x[9],Y=x[10],Z=x[11],J=x[12],Q=x[13],ee=x[14],te=x[15],ne=q*ee*X-Q*Y*X+Q*j*Z-z*ee*Z-q*j*te+z*Y*te,ie=J*Y*X-K*ee*X-J*j*Z+H*ee*Z+K*j*te-H*Y*te,re=K*Q*X-J*q*X+J*z*Z-H*Q*Z-K*z*te+H*q*te,oe=J*q*j-K*Q*j-J*z*Y+H*Q*Y+K*z*ee-H*q*ee,ae=S*ne+w*ie+U*re+G*oe;if(0===ae)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const se=1/ae;return x[0]=ne*se,x[1]=(Q*Y*G-q*ee*G-Q*U*Z+w*ee*Z+q*U*te-w*Y*te)*se,x[2]=(z*ee*G-Q*j*G+Q*U*X-w*ee*X-z*U*te+w*j*te)*se,x[3]=(q*j*G-z*Y*G-q*U*X+w*Y*X+z*U*Z-w*j*Z)*se,x[4]=ie*se,x[5]=(K*ee*G-J*Y*G+J*U*Z-S*ee*Z-K*U*te+S*Y*te)*se,x[6]=(J*j*G-H*ee*G-J*U*X+S*ee*X+H*U*te-S*j*te)*se,x[7]=(H*Y*G-K*j*G+K*U*X-S*Y*X-H*U*Z+S*j*Z)*se,x[8]=re*se,x[9]=(J*q*G-K*Q*G-J*w*Z+S*Q*Z+K*w*te-S*q*te)*se,x[10]=(H*Q*G-J*z*G+J*w*X-S*Q*X-H*w*te+S*z*te)*se,x[11]=(K*z*G-H*q*G-K*w*X+S*q*X+H*w*Z-S*z*Z)*se,x[12]=oe*se,x[13]=(K*Q*U-J*q*U+J*w*Y-S*Q*Y-K*w*ee+S*q*ee)*se,x[14]=(J*z*U-H*Q*U-J*w*j+S*Q*j+H*w*ee-S*z*ee)*se,x[15]=(H*q*U-K*z*U+K*w*j-S*q*j-H*w*Y+S*z*Y)*se,this}scale(x){const S=this.elements,w=x.x,U=x.y,G=x.z;return S[0]*=w,S[4]*=U,S[8]*=G,S[1]*=w,S[5]*=U,S[9]*=G,S[2]*=w,S[6]*=U,S[10]*=G,S[3]*=w,S[7]*=U,S[11]*=G,this}getMaxScaleOnAxis(){const x=this.elements,S=x[0]*x[0]+x[1]*x[1]+x[2]*x[2],w=x[4]*x[4]+x[5]*x[5]+x[6]*x[6],U=x[8]*x[8]+x[9]*x[9]+x[10]*x[10];return Math.sqrt(Math.max(S,w,U))}makeTranslation(x,S,w){return this.set(1,0,0,x,0,1,0,S,0,0,1,w,0,0,0,1),this}makeRotationX(x){const S=Math.cos(x),w=Math.sin(x);return this.set(1,0,0,0,0,S,-w,0,0,w,S,0,0,0,0,1),this}makeRotationY(x){const S=Math.cos(x),w=Math.sin(x);return this.set(S,0,w,0,0,1,0,0,-w,0,S,0,0,0,0,1),this}makeRotationZ(x){const S=Math.cos(x),w=Math.sin(x);return this.set(S,-w,0,0,w,S,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(x,S){const w=Math.cos(S),U=Math.sin(S),G=1-w,H=x.x,z=x.y,j=x.z,X=G*H,K=G*z;return this.set(X*H+w,X*z-U*j,X*j+U*z,0,X*z+U*j,K*z+w,K*j-U*H,0,X*j-U*z,K*j+U*H,G*j*j+w,0,0,0,0,1),this}makeScale(x,S,w){return this.set(x,0,0,0,0,S,0,0,0,0,w,0,0,0,0,1),this}makeShear(x,S,w,U,G,H){return this.set(1,w,G,0,x,1,H,0,S,U,1,0,0,0,0,1),this}compose(x,S,w){const U=this.elements,G=S._x,H=S._y,z=S._z,j=S._w,X=G+G,K=H+H,q=z+z,Y=G*X,Z=G*K,J=G*q,Q=H*K,ee=H*q,te=z*q,ne=j*X,ie=j*K,re=j*q,oe=w.x,ae=w.y,se=w.z;return U[0]=(1-(Q+te))*oe,U[1]=(Z+re)*oe,U[2]=(J-ie)*oe,U[3]=0,U[4]=(Z-re)*ae,U[5]=(1-(Y+te))*ae,U[6]=(ee+ne)*ae,U[7]=0,U[8]=(J+ie)*se,U[9]=(ee-ne)*se,U[10]=(1-(Y+Q))*se,U[11]=0,U[12]=x.x,U[13]=x.y,U[14]=x.z,U[15]=1,this}decompose(x,S,w){const U=this.elements;let G=br.set(U[0],U[1],U[2]).length();const H=br.set(U[4],U[5],U[6]).length(),z=br.set(U[8],U[9],U[10]).length();this.determinant()<0&&(G=-G),x.x=U[12],x.y=U[13],x.z=U[14],xr.copy(this);const j=1/G,X=1/H,K=1/z;return xr.elements[0]*=j,xr.elements[1]*=j,xr.elements[2]*=j,xr.elements[4]*=X,xr.elements[5]*=X,xr.elements[6]*=X,xr.elements[8]*=K,xr.elements[9]*=K,xr.elements[10]*=K,S.setFromRotationMatrix(xr),w.x=G,w.y=H,w.z=z,this}makePerspective(x,S,w,U,G,H){void 0===H&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.");const z=this.elements,j=2*G/(S-x),X=2*G/(w-U),K=(S+x)/(S-x),q=(w+U)/(w-U),Y=-(H+G)/(H-G),Z=-2*H*G/(H-G);return z[0]=j,z[4]=0,z[8]=K,z[12]=0,z[1]=0,z[5]=X,z[9]=q,z[13]=0,z[2]=0,z[6]=0,z[10]=Y,z[14]=Z,z[3]=0,z[7]=0,z[11]=-1,z[15]=0,this}makeOrthographic(x,S,w,U,G,H){const z=this.elements,j=1/(S-x),X=1/(w-U),K=1/(H-G),q=(S+x)*j,Y=(w+U)*X,Z=(H+G)*K;return z[0]=2*j,z[4]=0,z[8]=0,z[12]=-q,z[1]=0,z[5]=2*X,z[9]=0,z[13]=-Y,z[2]=0,z[6]=0,z[10]=-2*K,z[14]=-Z,z[3]=0,z[7]=0,z[11]=0,z[15]=1,this}equals(x){const S=this.elements,w=x.elements;for(let x=0;x<16;x++)if(S[x]!==w[x])return!1;return!0}fromArray(x,S=0){for(let w=0;w<16;w++)this.elements[w]=x[w+S];return this}toArray(x=[],S=0){const w=this.elements;return x[S]=w[0],x[S+1]=w[1],x[S+2]=w[2],x[S+3]=w[3],x[S+4]=w[4],x[S+5]=w[5],x[S+6]=w[6],x[S+7]=w[7],x[S+8]=w[8],x[S+9]=w[9],x[S+10]=w[10],x[S+11]=w[11],x[S+12]=w[12],x[S+13]=w[13],x[S+14]=w[14],x[S+15]=w[15],x}}Matrix4.prototype.isMatrix4=!0;const br=new Vector3,xr=new Matrix4,Er=new Vector3(0,0,0),Sr=new Vector3(1,1,1),Tr=new Vector3,wr=new Vector3,Cr=new Vector3,Ar=new Matrix4,Mr=new Quaternion;class Euler{constructor(x=0,S=0,w=0,U=Euler.DefaultOrder){this._x=x,this._y=S,this._z=w,this._order=U}get x(){return this._x}set x(x){this._x=x,this._onChangeCallback()}get y(){return this._y}set y(x){this._y=x,this._onChangeCallback()}get z(){return this._z}set z(x){this._z=x,this._onChangeCallback()}get order(){return this._order}set order(x){this._order=x,this._onChangeCallback()}set(x,S,w,U=this._order){return this._x=x,this._y=S,this._z=w,this._order=U,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(x){return this._x=x._x,this._y=x._y,this._z=x._z,this._order=x._order,this._onChangeCallback(),this}setFromRotationMatrix(x,S=this._order,w=!0){const U=x.elements,G=U[0],H=U[4],z=U[8],j=U[1],X=U[5],K=U[9],q=U[2],Y=U[6],Z=U[10];switch(S){case"XYZ":this._y=Math.asin(clamp(z,-1,1)),Math.abs(z)<.9999999?(this._x=Math.atan2(-K,Z),this._z=Math.atan2(-H,G)):(this._x=Math.atan2(Y,X),this._z=0);break;case"YXZ":this._x=Math.asin(-clamp(K,-1,1)),Math.abs(K)<.9999999?(this._y=Math.atan2(z,Z),this._z=Math.atan2(j,X)):(this._y=Math.atan2(-q,G),this._z=0);break;case"ZXY":this._x=Math.asin(clamp(Y,-1,1)),Math.abs(Y)<.9999999?(this._y=Math.atan2(-q,Z),this._z=Math.atan2(-H,X)):(this._y=0,this._z=Math.atan2(j,G));break;case"ZYX":this._y=Math.asin(-clamp(q,-1,1)),Math.abs(q)<.9999999?(this._x=Math.atan2(Y,Z),this._z=Math.atan2(j,G)):(this._x=0,this._z=Math.atan2(-H,X));break;case"YZX":this._z=Math.asin(clamp(j,-1,1)),Math.abs(j)<.9999999?(this._x=Math.atan2(-K,X),this._y=Math.atan2(-q,G)):(this._x=0,this._y=Math.atan2(z,Z));break;case"XZY":this._z=Math.asin(-clamp(H,-1,1)),Math.abs(H)<.9999999?(this._x=Math.atan2(Y,X),this._y=Math.atan2(z,G)):(this._x=Math.atan2(-K,Z),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+S)}return this._order=S,!0===w&&this._onChangeCallback(),this}setFromQuaternion(x,S,w){return Ar.makeRotationFromQuaternion(x),this.setFromRotationMatrix(Ar,S,w)}setFromVector3(x,S=this._order){return this.set(x.x,x.y,x.z,S)}reorder(x){return Mr.setFromEuler(this),this.setFromQuaternion(Mr,x)}equals(x){return x._x===this._x&&x._y===this._y&&x._z===this._z&&x._order===this._order}fromArray(x){return this._x=x[0],this._y=x[1],this._z=x[2],void 0!==x[3]&&(this._order=x[3]),this._onChangeCallback(),this}toArray(x=[],S=0){return x[S]=this._x,x[S+1]=this._y,x[S+2]=this._z,x[S+3]=this._order,x}toVector3(x){return x?x.set(this._x,this._y,this._z):new Vector3(this._x,this._y,this._z)}_onChange(x){return this._onChangeCallback=x,this}_onChangeCallback(){}}Euler.prototype.isEuler=!0,Euler.DefaultOrder="XYZ",Euler.RotationOrders=["XYZ","YZX","ZXY","XZY","YXZ","ZYX"];class Layers{constructor(){this.mask=1}set(x){this.mask=1<1){for(let x=0;x1){for(let x=0;x0){U.children=[];for(let S=0;S0){U.animations=[];for(let S=0;S0&&(w.geometries=S),U.length>0&&(w.materials=U),G.length>0&&(w.textures=G),H.length>0&&(w.images=H),z.length>0&&(w.shapes=z),j.length>0&&(w.skeletons=j),X.length>0&&(w.animations=X)}return w.object=U,w;function extractFromCache(x){const S=[];for(const w in x){const U=x[w];delete U.metadata,S.push(U)}return S}}clone(x){return(new this.constructor).copy(this,x)}copy(x,S=!0){if(this.name=x.name,this.up.copy(x.up),this.position.copy(x.position),this.rotation.order=x.rotation.order,this.quaternion.copy(x.quaternion),this.scale.copy(x.scale),this.matrix.copy(x.matrix),this.matrixWorld.copy(x.matrixWorld),this.matrixAutoUpdate=x.matrixAutoUpdate,this.matrixWorldNeedsUpdate=x.matrixWorldNeedsUpdate,this.layers.mask=x.layers.mask,this.visible=x.visible,this.castShadow=x.castShadow,this.receiveShadow=x.receiveShadow,this.frustumCulled=x.frustumCulled,this.renderOrder=x.renderOrder,this.userData=JSON.parse(JSON.stringify(x.userData)),!0===S)for(let S=0;S0?U.multiplyScalar(1/Math.sqrt(G)):U.set(0,0,0)}static getBarycoord(x,S,w,U,G){Hr.subVectors(U,S),Wr.subVectors(w,S),$r.subVectors(x,S);const H=Hr.dot(Hr),z=Hr.dot(Wr),j=Hr.dot($r),X=Wr.dot(Wr),K=Wr.dot($r),q=H*X-z*z;if(0===q)return G.set(-2,-1,-1);const Y=1/q,Z=(X*j-z*K)*Y,J=(H*K-z*j)*Y;return G.set(1-Z-J,J,Z)}static containsPoint(x,S,w,U){return this.getBarycoord(x,S,w,U,zr),zr.x>=0&&zr.y>=0&&zr.x+zr.y<=1}static getUV(x,S,w,U,G,H,z,j){return this.getBarycoord(x,S,w,U,zr),j.set(0,0),j.addScaledVector(G,zr.x),j.addScaledVector(H,zr.y),j.addScaledVector(z,zr.z),j}static isFrontFacing(x,S,w,U){return Hr.subVectors(w,S),Wr.subVectors(x,S),Hr.cross(Wr).dot(U)<0}set(x,S,w){return this.a.copy(x),this.b.copy(S),this.c.copy(w),this}setFromPointsAndIndices(x,S,w,U){return this.a.copy(x[S]),this.b.copy(x[w]),this.c.copy(x[U]),this}setFromAttributeAndIndices(x,S,w,U){return this.a.fromBufferAttribute(x,S),this.b.fromBufferAttribute(x,w),this.c.fromBufferAttribute(x,U),this}clone(){return(new this.constructor).copy(this)}copy(x){return this.a.copy(x.a),this.b.copy(x.b),this.c.copy(x.c),this}getArea(){return Hr.subVectors(this.c,this.b),Wr.subVectors(this.a,this.b),.5*Hr.cross(Wr).length()}getMidpoint(x){return x.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(x){return Triangle.getNormal(this.a,this.b,this.c,x)}getPlane(x){return x.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(x,S){return Triangle.getBarycoord(x,this.a,this.b,this.c,S)}getUV(x,S,w,U,G){return Triangle.getUV(x,this.a,this.b,this.c,S,w,U,G)}containsPoint(x){return Triangle.containsPoint(x,this.a,this.b,this.c)}isFrontFacing(x){return Triangle.isFrontFacing(this.a,this.b,this.c,x)}intersectsBox(x){return x.intersectsTriangle(this)}closestPointToPoint(x,S){const w=this.a,U=this.b,G=this.c;let H,z;jr.subVectors(U,w),Xr.subVectors(G,w),qr.subVectors(x,w);const j=jr.dot(qr),X=Xr.dot(qr);if(j<=0&&X<=0)return S.copy(w);Yr.subVectors(x,U);const K=jr.dot(Yr),q=Xr.dot(Yr);if(K>=0&&q<=K)return S.copy(U);const Y=j*q-K*X;if(Y<=0&&j>=0&&K<=0)return H=j/(j-K),S.copy(w).addScaledVector(jr,H);Zr.subVectors(x,G);const Z=jr.dot(Zr),J=Xr.dot(Zr);if(J>=0&&Z<=J)return S.copy(G);const Q=Z*X-j*J;if(Q<=0&&X>=0&&J<=0)return z=X/(X-J),S.copy(w).addScaledVector(Xr,z);const ee=K*J-Z*q;if(ee<=0&&q-K>=0&&Z-J>=0)return Kr.subVectors(G,U),z=(q-K)/(q-K+(Z-J)),S.copy(U).addScaledVector(Kr,z);const te=1/(ee+Q+Y);return H=Q*te,z=Y*te,S.copy(w).addScaledVector(jr,H).addScaledVector(Xr,z)}equals(x){return x.a.equals(this.a)&&x.b.equals(this.b)&&x.c.equals(this.c)}}let Jr=0;class Material extends EventDispatcher{constructor(){super(),Object.defineProperty(this,"id",{value:Jr++}),this.uuid=generateUUID(),this.name="",this.type="Material",this.fog=!0,this.blending=oe,this.side=Q,this.vertexColors=!1,this.opacity=1,this.format=Tt,this.transparent=!1,this.blendSrc=ye,this.blendDst=be,this.blendEquation=ue,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.depthFunc=Re,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=Ai,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=ui,this.stencilZFail=ui,this.stencilZPass=ui,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0,this._alphaTest=0}get alphaTest(){return this._alphaTest}set alphaTest(x){this._alphaTest>0!=x>0&&this.version++,this._alphaTest=x}onBuild(){}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(x){if(void 0!==x)for(const S in x){const w=x[S];if(void 0===w){console.warn("THREE.Material: '"+S+"' parameter is undefined.");continue}if("shading"===S){console.warn("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead."),this.flatShading=w===ne;continue}const U=this[S];void 0!==U?U&&U.isColor?U.set(w):U&&U.isVector3&&w&&w.isVector3?U.copy(w):this[S]=w:console.warn("THREE."+this.type+": '"+S+"' is not a property of this material.")}}toJSON(x){const S=void 0===x||"string"==typeof x;S&&(x={textures:{},images:{}});const w={metadata:{version:4.5,type:"Material",generator:"Material.toJSON"}};function extractFromCache(x){const S=[];for(const w in x){const U=x[w];delete U.metadata,S.push(U)}return S}if(w.uuid=this.uuid,w.type=this.type,""!==this.name&&(w.name=this.name),this.color&&this.color.isColor&&(w.color=this.color.getHex()),void 0!==this.roughness&&(w.roughness=this.roughness),void 0!==this.metalness&&(w.metalness=this.metalness),void 0!==this.sheen&&(w.sheen=this.sheen),this.sheenTint&&this.sheenTint.isColor&&(w.sheenTint=this.sheenTint.getHex()),void 0!==this.sheenRoughness&&(w.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(w.emissive=this.emissive.getHex()),this.emissiveIntensity&&1!==this.emissiveIntensity&&(w.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(w.specular=this.specular.getHex()),void 0!==this.specularIntensity&&(w.specularIntensity=this.specularIntensity),this.specularTint&&this.specularTint.isColor&&(w.specularTint=this.specularTint.getHex()),void 0!==this.shininess&&(w.shininess=this.shininess),void 0!==this.clearcoat&&(w.clearcoat=this.clearcoat),void 0!==this.clearcoatRoughness&&(w.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(w.clearcoatMap=this.clearcoatMap.toJSON(x).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(w.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(x).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(w.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(x).uuid,w.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.map&&this.map.isTexture&&(w.map=this.map.toJSON(x).uuid),this.matcap&&this.matcap.isTexture&&(w.matcap=this.matcap.toJSON(x).uuid),this.alphaMap&&this.alphaMap.isTexture&&(w.alphaMap=this.alphaMap.toJSON(x).uuid),this.lightMap&&this.lightMap.isTexture&&(w.lightMap=this.lightMap.toJSON(x).uuid,w.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(w.aoMap=this.aoMap.toJSON(x).uuid,w.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(w.bumpMap=this.bumpMap.toJSON(x).uuid,w.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(w.normalMap=this.normalMap.toJSON(x).uuid,w.normalMapType=this.normalMapType,w.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(w.displacementMap=this.displacementMap.toJSON(x).uuid,w.displacementScale=this.displacementScale,w.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(w.roughnessMap=this.roughnessMap.toJSON(x).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(w.metalnessMap=this.metalnessMap.toJSON(x).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(w.emissiveMap=this.emissiveMap.toJSON(x).uuid),this.specularMap&&this.specularMap.isTexture&&(w.specularMap=this.specularMap.toJSON(x).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(w.specularIntensityMap=this.specularIntensityMap.toJSON(x).uuid),this.specularTintMap&&this.specularTintMap.isTexture&&(w.specularTintMap=this.specularTintMap.toJSON(x).uuid),this.envMap&&this.envMap.isTexture&&(w.envMap=this.envMap.toJSON(x).uuid,void 0!==this.combine&&(w.combine=this.combine)),void 0!==this.envMapIntensity&&(w.envMapIntensity=this.envMapIntensity),void 0!==this.reflectivity&&(w.reflectivity=this.reflectivity),void 0!==this.refractionRatio&&(w.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(w.gradientMap=this.gradientMap.toJSON(x).uuid),void 0!==this.transmission&&(w.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(w.transmissionMap=this.transmissionMap.toJSON(x).uuid),void 0!==this.thickness&&(w.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(w.thicknessMap=this.thicknessMap.toJSON(x).uuid),void 0!==this.attenuationDistance&&(w.attenuationDistance=this.attenuationDistance),void 0!==this.attenuationTint&&(w.attenuationTint=this.attenuationTint.getHex()),void 0!==this.size&&(w.size=this.size),null!==this.shadowSide&&(w.shadowSide=this.shadowSide),void 0!==this.sizeAttenuation&&(w.sizeAttenuation=this.sizeAttenuation),this.blending!==oe&&(w.blending=this.blending),this.side!==Q&&(w.side=this.side),this.vertexColors&&(w.vertexColors=!0),this.opacity<1&&(w.opacity=this.opacity),this.format!==Tt&&(w.format=this.format),!0===this.transparent&&(w.transparent=this.transparent),w.depthFunc=this.depthFunc,w.depthTest=this.depthTest,w.depthWrite=this.depthWrite,w.colorWrite=this.colorWrite,w.stencilWrite=this.stencilWrite,w.stencilWriteMask=this.stencilWriteMask,w.stencilFunc=this.stencilFunc,w.stencilRef=this.stencilRef,w.stencilFuncMask=this.stencilFuncMask,w.stencilFail=this.stencilFail,w.stencilZFail=this.stencilZFail,w.stencilZPass=this.stencilZPass,this.rotation&&0!==this.rotation&&(w.rotation=this.rotation),!0===this.polygonOffset&&(w.polygonOffset=!0),0!==this.polygonOffsetFactor&&(w.polygonOffsetFactor=this.polygonOffsetFactor),0!==this.polygonOffsetUnits&&(w.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth&&1!==this.linewidth&&(w.linewidth=this.linewidth),void 0!==this.dashSize&&(w.dashSize=this.dashSize),void 0!==this.gapSize&&(w.gapSize=this.gapSize),void 0!==this.scale&&(w.scale=this.scale),!0===this.dithering&&(w.dithering=!0),this.alphaTest>0&&(w.alphaTest=this.alphaTest),!0===this.alphaToCoverage&&(w.alphaToCoverage=this.alphaToCoverage),!0===this.premultipliedAlpha&&(w.premultipliedAlpha=this.premultipliedAlpha),!0===this.wireframe&&(w.wireframe=this.wireframe),this.wireframeLinewidth>1&&(w.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(w.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(w.wireframeLinejoin=this.wireframeLinejoin),!0===this.flatShading&&(w.flatShading=this.flatShading),!1===this.visible&&(w.visible=!1),!1===this.toneMapped&&(w.toneMapped=!1),"{}"!==JSON.stringify(this.userData)&&(w.userData=this.userData),S){const S=extractFromCache(x.textures),U=extractFromCache(x.images);S.length>0&&(w.textures=S),U.length>0&&(w.images=U)}return w}clone(){return(new this.constructor).copy(this)}copy(x){this.name=x.name,this.fog=x.fog,this.blending=x.blending,this.side=x.side,this.vertexColors=x.vertexColors,this.opacity=x.opacity,this.format=x.format,this.transparent=x.transparent,this.blendSrc=x.blendSrc,this.blendDst=x.blendDst,this.blendEquation=x.blendEquation,this.blendSrcAlpha=x.blendSrcAlpha,this.blendDstAlpha=x.blendDstAlpha,this.blendEquationAlpha=x.blendEquationAlpha,this.depthFunc=x.depthFunc,this.depthTest=x.depthTest,this.depthWrite=x.depthWrite,this.stencilWriteMask=x.stencilWriteMask,this.stencilFunc=x.stencilFunc,this.stencilRef=x.stencilRef,this.stencilFuncMask=x.stencilFuncMask,this.stencilFail=x.stencilFail,this.stencilZFail=x.stencilZFail,this.stencilZPass=x.stencilZPass,this.stencilWrite=x.stencilWrite;const S=x.clippingPlanes;let w=null;if(null!==S){const x=S.length;w=new Array(x);for(let U=0;U!==x;++U)w[U]=S[U].clone()}return this.clippingPlanes=w,this.clipIntersection=x.clipIntersection,this.clipShadows=x.clipShadows,this.shadowSide=x.shadowSide,this.colorWrite=x.colorWrite,this.precision=x.precision,this.polygonOffset=x.polygonOffset,this.polygonOffsetFactor=x.polygonOffsetFactor,this.polygonOffsetUnits=x.polygonOffsetUnits,this.dithering=x.dithering,this.alphaTest=x.alphaTest,this.alphaToCoverage=x.alphaToCoverage,this.premultipliedAlpha=x.premultipliedAlpha,this.visible=x.visible,this.toneMapped=x.toneMapped,this.userData=JSON.parse(JSON.stringify(x.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(x){!0===x&&this.version++}}Material.prototype.isMaterial=!0;const Qr={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,rebeccapurple:6697881,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},eo={h:0,s:0,l:0},to={h:0,s:0,l:0};function hue2rgb(x,S,w){return w<0&&(w+=1),w>1&&(w-=1),w<1/6?x+6*(S-x)*w:w<.5?S:w<2/3?x+6*(S-x)*(2/3-w):x}function SRGBToLinear(x){return x<.04045?.0773993808*x:Math.pow(.9478672986*x+.0521327014,2.4)}function LinearToSRGB(x){return x<.0031308?12.92*x:1.055*Math.pow(x,.41666)-.055}class Color{constructor(x,S,w){return void 0===S&&void 0===w?this.set(x):this.setRGB(x,S,w)}set(x){return x&&x.isColor?this.copy(x):"number"==typeof x?this.setHex(x):"string"==typeof x&&this.setStyle(x),this}setScalar(x){return this.r=x,this.g=x,this.b=x,this}setHex(x){return x=Math.floor(x),this.r=(x>>16&255)/255,this.g=(x>>8&255)/255,this.b=(255&x)/255,this}setRGB(x,S,w){return this.r=x,this.g=S,this.b=w,this}setHSL(x,S,w){if(x=euclideanModulo(x,1),S=clamp(S,0,1),w=clamp(w,0,1),0===S)this.r=this.g=this.b=w;else{const U=w<=.5?w*(1+S):w+S-w*S,G=2*w-U;this.r=hue2rgb(G,U,x+1/3),this.g=hue2rgb(G,U,x),this.b=hue2rgb(G,U,x-1/3)}return this}setStyle(x){function handleAlpha(S){void 0!==S&&parseFloat(S)<1&&console.warn("THREE.Color: Alpha component of "+x+" will be ignored.")}let S;if(S=/^((?:rgb|hsl)a?)\(([^\)]*)\)/.exec(x)){let x;const w=S[1],U=S[2];switch(w){case"rgb":case"rgba":if(x=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(U))return this.r=Math.min(255,parseInt(x[1],10))/255,this.g=Math.min(255,parseInt(x[2],10))/255,this.b=Math.min(255,parseInt(x[3],10))/255,handleAlpha(x[4]),this;if(x=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(U))return this.r=Math.min(100,parseInt(x[1],10))/100,this.g=Math.min(100,parseInt(x[2],10))/100,this.b=Math.min(100,parseInt(x[3],10))/100,handleAlpha(x[4]),this;break;case"hsl":case"hsla":if(x=/^\s*(\d*\.?\d+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(U)){const S=parseFloat(x[1])/360,w=parseInt(x[2],10)/100,U=parseInt(x[3],10)/100;return handleAlpha(x[4]),this.setHSL(S,w,U)}}}else if(S=/^\#([A-Fa-f\d]+)$/.exec(x)){const x=S[1],w=x.length;if(3===w)return this.r=parseInt(x.charAt(0)+x.charAt(0),16)/255,this.g=parseInt(x.charAt(1)+x.charAt(1),16)/255,this.b=parseInt(x.charAt(2)+x.charAt(2),16)/255,this;if(6===w)return this.r=parseInt(x.charAt(0)+x.charAt(1),16)/255,this.g=parseInt(x.charAt(2)+x.charAt(3),16)/255,this.b=parseInt(x.charAt(4)+x.charAt(5),16)/255,this}return x&&x.length>0?this.setColorName(x):this}setColorName(x){const S=Qr[x.toLowerCase()];return void 0!==S?this.setHex(S):console.warn("THREE.Color: Unknown color "+x),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(x){return this.r=x.r,this.g=x.g,this.b=x.b,this}copyGammaToLinear(x,S=2){return this.r=Math.pow(x.r,S),this.g=Math.pow(x.g,S),this.b=Math.pow(x.b,S),this}copyLinearToGamma(x,S=2){const w=S>0?1/S:1;return this.r=Math.pow(x.r,w),this.g=Math.pow(x.g,w),this.b=Math.pow(x.b,w),this}convertGammaToLinear(x){return this.copyGammaToLinear(this,x),this}convertLinearToGamma(x){return this.copyLinearToGamma(this,x),this}copySRGBToLinear(x){return this.r=SRGBToLinear(x.r),this.g=SRGBToLinear(x.g),this.b=SRGBToLinear(x.b),this}copyLinearToSRGB(x){return this.r=LinearToSRGB(x.r),this.g=LinearToSRGB(x.g),this.b=LinearToSRGB(x.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0}getHexString(){return("000000"+this.getHex().toString(16)).slice(-6)}getHSL(x){const S=this.r,w=this.g,U=this.b,G=Math.max(S,w,U),H=Math.min(S,w,U);let z,j;const X=(H+G)/2;if(H===G)z=0,j=0;else{const x=G-H;switch(j=X<=.5?x/(G+H):x/(2-G-H),G){case S:z=(w-U)/x+(w65535?Uint32BufferAttribute:Uint16BufferAttribute)(x,1):this.index=x,this}getAttribute(x){return this.attributes[x]}setAttribute(x,S){return this.attributes[x]=S,this}deleteAttribute(x){return delete this.attributes[x],this}hasAttribute(x){return void 0!==this.attributes[x]}addGroup(x,S,w=0){this.groups.push({start:x,count:S,materialIndex:w})}clearGroups(){this.groups=[]}setDrawRange(x,S){this.drawRange.start=x,this.drawRange.count=S}applyMatrix4(x){const S=this.attributes.position;void 0!==S&&(S.applyMatrix4(x),S.needsUpdate=!0);const w=this.attributes.normal;if(void 0!==w){const S=(new Matrix3).getNormalMatrix(x);w.applyNormalMatrix(S),w.needsUpdate=!0}const U=this.attributes.tangent;return void 0!==U&&(U.transformDirection(x),U.needsUpdate=!0),null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this}applyQuaternion(x){return oo.makeRotationFromQuaternion(x),this.applyMatrix4(oo),this}rotateX(x){return oo.makeRotationX(x),this.applyMatrix4(oo),this}rotateY(x){return oo.makeRotationY(x),this.applyMatrix4(oo),this}rotateZ(x){return oo.makeRotationZ(x),this.applyMatrix4(oo),this}translate(x,S,w){return oo.makeTranslation(x,S,w),this.applyMatrix4(oo),this}scale(x,S,w){return oo.makeScale(x,S,w),this.applyMatrix4(oo),this}lookAt(x){return ao.lookAt(x),ao.updateMatrix(),this.applyMatrix4(ao.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(so).negate(),this.translate(so.x,so.y,so.z),this}setFromPoints(x){const S=[];for(let w=0,U=x.length;w0&&(x.userData=this.userData),void 0!==this.parameters){const S=this.parameters;for(const w in S)void 0!==S[w]&&(x[w]=S[w]);return x}x.data={attributes:{}};const S=this.index;null!==S&&(x.data.index={type:S.array.constructor.name,array:Array.prototype.slice.call(S.array)});const w=this.attributes;for(const S in w){const U=w[S];x.data.attributes[S]=U.toJSON(x.data)}const U={};let G=!1;for(const S in this.morphAttributes){const w=this.morphAttributes[S],H=[];for(let S=0,U=w.length;S0&&(U[S]=H,G=!0)}G&&(x.data.morphAttributes=U,x.data.morphTargetsRelative=this.morphTargetsRelative);const H=this.groups;H.length>0&&(x.data.groups=JSON.parse(JSON.stringify(H)));const z=this.boundingSphere;return null!==z&&(x.data.boundingSphere={center:z.center.toArray(),radius:z.radius}),x}clone(){return(new this.constructor).copy(this)}copy(x){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const S={};this.name=x.name;const w=x.index;null!==w&&this.setIndex(w.clone(S));const U=x.attributes;for(const x in U){const w=U[x];this.setAttribute(x,w.clone(S))}const G=x.morphAttributes;for(const x in G){const w=[],U=G[x];for(let x=0,G=U.length;x0){const x=S[w[0]];if(void 0!==x){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let S=0,w=x.length;S0&&console.error("THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")}}raycast(x,S){const w=this.geometry,U=this.material,G=this.matrixWorld;if(void 0===U)return;if(null===w.boundingSphere&&w.computeBoundingSphere(),mo.copy(w.boundingSphere),mo.applyMatrix4(G),!1===x.ray.intersectsSphere(mo))return;if(ho.copy(G).invert(),po.copy(x.ray).applyMatrix4(ho),null!==w.boundingBox&&!1===po.intersectsBox(w.boundingBox))return;let H;if(w.isBufferGeometry){const G=w.index,z=w.attributes.position,j=w.morphAttributes.position,X=w.morphTargetsRelative,K=w.attributes.uv,q=w.attributes.uv2,Y=w.groups,Z=w.drawRange;if(null!==G)if(Array.isArray(U))for(let w=0,J=Y.length;ww.far?null:{distance:K,point:Mo.clone(),object:x}}(x,S,w,U,fo,go,vo,Ao);if(J){j&&(To.fromBufferAttribute(j,K),wo.fromBufferAttribute(j,q),Co.fromBufferAttribute(j,Y),J.uv=Triangle.getUV(Ao,fo,go,vo,To,wo,Co,new Vector2)),X&&(To.fromBufferAttribute(X,K),wo.fromBufferAttribute(X,q),Co.fromBufferAttribute(X,Y),J.uv2=Triangle.getUV(Ao,fo,go,vo,To,wo,Co,new Vector2));const x={a:K,b:q,c:Y,normal:new Vector3,materialIndex:0};Triangle.getNormal(fo,go,vo,x.normal),J.face=x}return J}Mesh.prototype.isMesh=!0;class BoxGeometry extends BufferGeometry{constructor(x=1,S=1,w=1,U=1,G=1,H=1){super(),this.type="BoxGeometry",this.parameters={width:x,height:S,depth:w,widthSegments:U,heightSegments:G,depthSegments:H};const z=this;U=Math.floor(U),G=Math.floor(G),H=Math.floor(H);const j=[],X=[],K=[],q=[];let Y=0,Z=0;function buildPlane(x,S,w,U,G,H,J,Q,ee,te,ne){const ie=H/ee,re=J/te,oe=H/2,ae=J/2,se=Q/2,le=ee+1,ce=te+1;let ue=0,he=0;const de=new Vector3;for(let H=0;H0?1:-1,K.push(de.x,de.y,de.z),q.push(j/ee),q.push(1-H/te),ue+=1}}for(let x=0;x0&&(S.defines=this.defines),S.vertexShader=this.vertexShader,S.fragmentShader=this.fragmentShader;const w={};for(const x in this.extensions)!0===this.extensions[x]&&(w[x]=!0);return Object.keys(w).length>0&&(S.extensions=w),S}}ShaderMaterial.prototype.isShaderMaterial=!0;class Camera extends Object3D{constructor(){super(),this.type="Camera",this.matrixWorldInverse=new Matrix4,this.projectionMatrix=new Matrix4,this.projectionMatrixInverse=new Matrix4}copy(x,S){return super.copy(x,S),this.matrixWorldInverse.copy(x.matrixWorldInverse),this.projectionMatrix.copy(x.projectionMatrix),this.projectionMatrixInverse.copy(x.projectionMatrixInverse),this}getWorldDirection(x){this.updateWorldMatrix(!0,!1);const S=this.matrixWorld.elements;return x.set(-S[8],-S[9],-S[10]).normalize()}updateMatrixWorld(x){super.updateMatrixWorld(x),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(x,S){super.updateWorldMatrix(x,S),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return(new this.constructor).copy(this)}}Camera.prototype.isCamera=!0;class PerspectiveCamera extends Camera{constructor(x=50,S=1,w=.1,U=2e3){super(),this.type="PerspectiveCamera",this.fov=x,this.zoom=1,this.near=w,this.far=U,this.focus=10,this.aspect=S,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(x,S){return super.copy(x,S),this.fov=x.fov,this.zoom=x.zoom,this.near=x.near,this.far=x.far,this.focus=x.focus,this.aspect=x.aspect,this.view=null===x.view?null:Object.assign({},x.view),this.filmGauge=x.filmGauge,this.filmOffset=x.filmOffset,this}setFocalLength(x){const S=.5*this.getFilmHeight()/x;this.fov=2*Vi*Math.atan(S),this.updateProjectionMatrix()}getFocalLength(){const x=Math.tan(.5*Gi*this.fov);return.5*this.getFilmHeight()/x}getEffectiveFOV(){return 2*Vi*Math.atan(Math.tan(.5*Gi*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}setViewOffset(x,S,w,U,G,H){this.aspect=x/S,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=x,this.view.fullHeight=S,this.view.offsetX=w,this.view.offsetY=U,this.view.width=G,this.view.height=H,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const x=this.near;let S=x*Math.tan(.5*Gi*this.fov)/this.zoom,w=2*S,U=this.aspect*w,G=-.5*U;const H=this.view;if(null!==this.view&&this.view.enabled){const x=H.fullWidth,z=H.fullHeight;G+=H.offsetX*U/x,S-=H.offsetY*w/z,U*=H.width/x,w*=H.height/z}const z=this.filmOffset;0!==z&&(G+=x*z/this.getFilmWidth()),this.projectionMatrix.makePerspective(G,G+U,S,S-w,x,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(x){const S=super.toJSON(x);return S.object.fov=this.fov,S.object.zoom=this.zoom,S.object.near=this.near,S.object.far=this.far,S.object.focus=this.focus,S.object.aspect=this.aspect,null!==this.view&&(S.object.view=Object.assign({},this.view)),S.object.filmGauge=this.filmGauge,S.object.filmOffset=this.filmOffset,S}}PerspectiveCamera.prototype.isPerspectiveCamera=!0;const Lo=90;class CubeCamera extends Object3D{constructor(x,S,w){if(super(),this.type="CubeCamera",!0!==w.isWebGLCubeRenderTarget)return void console.error("THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.");this.renderTarget=w;const U=new PerspectiveCamera(Lo,1,x,S);U.layers=this.layers,U.up.set(0,-1,0),U.lookAt(new Vector3(1,0,0)),this.add(U);const G=new PerspectiveCamera(Lo,1,x,S);G.layers=this.layers,G.up.set(0,-1,0),G.lookAt(new Vector3(-1,0,0)),this.add(G);const H=new PerspectiveCamera(Lo,1,x,S);H.layers=this.layers,H.up.set(0,0,1),H.lookAt(new Vector3(0,1,0)),this.add(H);const z=new PerspectiveCamera(Lo,1,x,S);z.layers=this.layers,z.up.set(0,0,-1),z.lookAt(new Vector3(0,-1,0)),this.add(z);const j=new PerspectiveCamera(Lo,1,x,S);j.layers=this.layers,j.up.set(0,-1,0),j.lookAt(new Vector3(0,0,1)),this.add(j);const X=new PerspectiveCamera(Lo,1,x,S);X.layers=this.layers,X.up.set(0,-1,0),X.lookAt(new Vector3(0,0,-1)),this.add(X)}update(x,S){null===this.parent&&this.updateMatrixWorld();const w=this.renderTarget,[U,G,H,z,j,X]=this.children,K=x.xr.enabled,q=x.getRenderTarget();x.xr.enabled=!1;const Y=w.texture.generateMipmaps;w.texture.generateMipmaps=!1,x.setRenderTarget(w,0),x.render(S,U),x.setRenderTarget(w,1),x.render(S,G),x.setRenderTarget(w,2),x.render(S,H),x.setRenderTarget(w,3),x.render(S,z),x.setRenderTarget(w,4),x.render(S,j),w.texture.generateMipmaps=Y,x.setRenderTarget(w,5),x.render(S,X),x.setRenderTarget(q),x.xr.enabled=K}}class CubeTexture extends Texture{constructor(x,S,w,U,G,H,z,j,X,K){super(x=void 0!==x?x:[],S=void 0!==S?S:$e,w,U,G,H,z,j,X,K),this.flipY=!1}get images(){return this.image}set images(x){this.image=x}}CubeTexture.prototype.isCubeTexture=!0;class WebGLCubeRenderTarget extends WebGLRenderTarget{constructor(x,S,w){Number.isInteger(S)&&(console.warn("THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )"),S=w),super(x,x,S),S=S||{},this.texture=new CubeTexture(void 0,S.mapping,S.wrapS,S.wrapT,S.magFilter,S.minFilter,S.format,S.type,S.anisotropy,S.encoding),this.texture.isRenderTargetTexture=!0,this.texture.generateMipmaps=void 0!==S.generateMipmaps&&S.generateMipmaps,this.texture.minFilter=void 0!==S.minFilter?S.minFilter:rt,this.texture._needsFlipEnvMap=!1}fromEquirectangularTexture(x,S){this.texture.type=S.type,this.texture.format=Tt,this.texture.encoding=S.encoding,this.texture.generateMipmaps=S.generateMipmaps,this.texture.minFilter=S.minFilter,this.texture.magFilter=S.magFilter;const w={uniforms:{tEquirect:{value:null}},vertexShader:"\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t",fragmentShader:"\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t"},U=new BoxGeometry(5,5,5),G=new ShaderMaterial({name:"CubemapFromEquirect",uniforms:cloneUniforms(w.uniforms),vertexShader:w.vertexShader,fragmentShader:w.fragmentShader,side:ee,blending:re});G.uniforms.tEquirect.value=S;const H=new Mesh(U,G),z=S.minFilter;S.minFilter===st&&(S.minFilter=rt);return new CubeCamera(1,10,this).update(x,H),S.minFilter=z,H.geometry.dispose(),H.material.dispose(),this}clear(x,S,w,U){const G=x.getRenderTarget();for(let G=0;G<6;G++)x.setRenderTarget(this,G),x.clear(S,w,U);x.setRenderTarget(G)}}WebGLCubeRenderTarget.prototype.isWebGLCubeRenderTarget=!0;const Io=new Vector3,Po=new Vector3,Fo=new Matrix3;class Plane{constructor(x=new Vector3(1,0,0),S=0){this.normal=x,this.constant=S}set(x,S){return this.normal.copy(x),this.constant=S,this}setComponents(x,S,w,U){return this.normal.set(x,S,w),this.constant=U,this}setFromNormalAndCoplanarPoint(x,S){return this.normal.copy(x),this.constant=-S.dot(this.normal),this}setFromCoplanarPoints(x,S,w){const U=Io.subVectors(w,S).cross(Po.subVectors(x,S)).normalize();return this.setFromNormalAndCoplanarPoint(U,x),this}copy(x){return this.normal.copy(x.normal),this.constant=x.constant,this}normalize(){const x=1/this.normal.length();return this.normal.multiplyScalar(x),this.constant*=x,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(x){return this.normal.dot(x)+this.constant}distanceToSphere(x){return this.distanceToPoint(x.center)-x.radius}projectPoint(x,S){return S.copy(this.normal).multiplyScalar(-this.distanceToPoint(x)).add(x)}intersectLine(x,S){const w=x.delta(Io),U=this.normal.dot(w);if(0===U)return 0===this.distanceToPoint(x.start)?S.copy(x.start):null;const G=-(x.start.dot(this.normal)+this.constant)/U;return G<0||G>1?null:S.copy(w).multiplyScalar(G).add(x.start)}intersectsLine(x){const S=this.distanceToPoint(x.start),w=this.distanceToPoint(x.end);return S<0&&w>0||w<0&&S>0}intersectsBox(x){return x.intersectsPlane(this)}intersectsSphere(x){return x.intersectsPlane(this)}coplanarPoint(x){return x.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(x,S){const w=S||Fo.getNormalMatrix(x),U=this.coplanarPoint(Io).applyMatrix4(x),G=this.normal.applyMatrix3(w).normalize();return this.constant=-U.dot(G),this}translate(x){return this.constant-=x.dot(this.normal),this}equals(x){return x.normal.equals(this.normal)&&x.constant===this.constant}clone(){return(new this.constructor).copy(this)}}Plane.prototype.isPlane=!0;const Oo=new Sphere,No=new Vector3;class Frustum{constructor(x=new Plane,S=new Plane,w=new Plane,U=new Plane,G=new Plane,H=new Plane){this.planes=[x,S,w,U,G,H]}set(x,S,w,U,G,H){const z=this.planes;return z[0].copy(x),z[1].copy(S),z[2].copy(w),z[3].copy(U),z[4].copy(G),z[5].copy(H),this}copy(x){const S=this.planes;for(let w=0;w<6;w++)S[w].copy(x.planes[w]);return this}setFromProjectionMatrix(x){const S=this.planes,w=x.elements,U=w[0],G=w[1],H=w[2],z=w[3],j=w[4],X=w[5],K=w[6],q=w[7],Y=w[8],Z=w[9],J=w[10],Q=w[11],ee=w[12],te=w[13],ne=w[14],ie=w[15];return S[0].setComponents(z-U,q-j,Q-Y,ie-ee).normalize(),S[1].setComponents(z+U,q+j,Q+Y,ie+ee).normalize(),S[2].setComponents(z+G,q+X,Q+Z,ie+te).normalize(),S[3].setComponents(z-G,q-X,Q-Z,ie-te).normalize(),S[4].setComponents(z-H,q-K,Q-J,ie-ne).normalize(),S[5].setComponents(z+H,q+K,Q+J,ie+ne).normalize(),this}intersectsObject(x){const S=x.geometry;return null===S.boundingSphere&&S.computeBoundingSphere(),Oo.copy(S.boundingSphere).applyMatrix4(x.matrixWorld),this.intersectsSphere(Oo)}intersectsSprite(x){return Oo.center.set(0,0,0),Oo.radius=.7071067811865476,Oo.applyMatrix4(x.matrixWorld),this.intersectsSphere(Oo)}intersectsSphere(x){const S=this.planes,w=x.center,U=-x.radius;for(let x=0;x<6;x++){if(S[x].distanceToPoint(w)0?x.max.x:x.min.x,No.y=U.normal.y>0?x.max.y:x.min.y,No.z=U.normal.z>0?x.max.z:x.min.z,U.distanceToPoint(No)<0)return!1}return!0}containsPoint(x){const S=this.planes;for(let w=0;w<6;w++)if(S[w].distanceToPoint(x)<0)return!1;return!0}clone(){return(new this.constructor).copy(this)}}function WebGLAnimation(){let x=null,S=!1,w=null,U=null;function onAnimationFrame(S,G){w(S,G),U=x.requestAnimationFrame(onAnimationFrame)}return{start:function(){!0!==S&&null!==w&&(U=x.requestAnimationFrame(onAnimationFrame),S=!0)},stop:function(){x.cancelAnimationFrame(U),S=!1},setAnimationLoop:function(x){w=x},setContext:function(S){x=S}}}function WebGLAttributes(x,S){const w=S.isWebGL2,U=new WeakMap;return{get:function get(x){return x.isInterleavedBufferAttribute&&(x=x.data),U.get(x)},remove:function remove(S){S.isInterleavedBufferAttribute&&(S=S.data);const w=U.get(S);w&&(x.deleteBuffer(w.buffer),U.delete(S))},update:function update(S,G){if(S.isGLBufferAttribute){const x=U.get(S);return void((!x||x.version 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, 1.0, dotVH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie( float roughness, float dotNH ) {\n\tfloat alpha = pow2( roughness );\n\tfloat invAlpha = 1.0 / alpha;\n\tfloat cos2h = dotNH * dotNH;\n\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 );\n\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\n}\nfloat V_Neubelt( float dotNV, float dotNL ) {\n\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\n}\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenTint, const in float sheenRoughness ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat D = D_Charlie( sheenRoughness, dotNH );\n\tfloat V = V_Neubelt( dotNV, dotNL );\n\treturn sheenTint * ( D * V );\n}\n#endif",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif",clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#if defined( USE_COLOR_ALPHA )\n\tdiffuseColor *= vColor;\n#elif defined( USE_COLOR )\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR )\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif",color_vertex:"#if defined( USE_COLOR_ALPHA )\n\tvColor = vec4( 1.0 );\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor *= color;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif",common:"#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract( sin( sn ) * c );\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_maxMipLevel 8.0\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_maxTileSize 256.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\n\t\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\n\t\tvec2 f = fract( uv );\n\t\tuv += 0.5 - f;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tif ( mipInt < cubeUV_maxMipLevel ) {\n\t\t\tuv.y += 2.0 * cubeUV_maxTileSize;\n\t\t}\n\t\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\n\t\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\n\t\tuv *= texelSize;\n\t\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x += texelSize;\n\t\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.y += texelSize;\n\t\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x -= texelSize;\n\t\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tvec3 tm = mix( tl, tr, f.x );\n\t\tvec3 bm = mix( bl, br, f.x );\n\t\treturn mix( tm, bm, f.y );\n\t}\n\t#define r0 1.0\n\t#define v0 0.339\n\t#define m0 - 2.0\n\t#define r1 0.8\n\t#define v1 0.276\n\t#define m1 - 1.0\n\t#define r4 0.4\n\t#define v4 0.046\n\t#define m4 2.0\n\t#define r5 0.305\n\t#define v5 0.016\n\t#define m5 3.0\n\t#define r6 0.21\n\t#define v6 0.0038\n\t#define m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= r1 ) {\n\t\t\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\n\t\t} else if ( roughness >= r4 ) {\n\t\t\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\n\t\t} else if ( roughness >= r5 ) {\n\t\t\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\n\t\t} else if ( roughness >= r6 ) {\n\t\t\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), m0, cubeUV_maxMipLevel );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif",defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}",envmap_fragment:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t\tenvColor = envMapTexelToLinear( envColor );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif",envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getIBLIrradiance( const in vec3 normal ) {\n\t\t#if defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\n\t\t#if defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 reflectVec;\n\t\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\t\treflectVec = reflect( - viewDir, normal );\n\t\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t\t#else\n\t\t\t\treflectVec = refract( - viewDir, normal, refractionRatio );\n\t\t\t#endif\n\t\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t\treturn envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif",fog_vertex:"#ifdef USE_FOG\n\tvFogDepth = - mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float vFogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float vFogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",gradientmap_pars_fragment:"#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\n\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tlightMapIrradiance *= PI;\n\t#endif\n\treflectedLight.indirectDiffuse += lightMapIrradiance;\n#endif",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry.normal );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry.normal );\n#endif\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointLightInfo( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotLightInfo( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalLightInfo( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry.normal );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif",lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\n\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\treturn irradiance;\n}\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n\t#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\t\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\t\tif ( cutoffDistance > 0.0 ) {\n\t\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t\t}\n\t\treturn distanceFalloff;\n\t#else\n\t\tif ( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\t\treturn pow( saturate( - lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t\t}\n\t\treturn 1.0;\n\t#endif\n}\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\n\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight light ) {\n\t\tlight.color = directionalLight.color;\n\t\tlight.direction = directionalLight.direction;\n\t\tlight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointLightInfo( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight light ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tlight.color = pointLight.color;\n\t\tlight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\n\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotLightInfo( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight light ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat angleCos = dot( light.direction, spotLight.direction );\n\t\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\tif ( spotAttenuation > 0.0 ) {\n\t\t\tfloat lightDistance = length( lVector );\n\t\t\tlight.color = spotLight.color * spotAttenuation;\n\t\t\tlight.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t\t} else {\n\t\t\tlight.color = vec3( 0.0 );\n\t\t\tlight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\n\t\tfloat dotNL = dot( normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\treturn irradiance;\n\t}\n#endif",lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\nmaterial.roughness = min( material.roughness, 1.0 );\n#ifdef IOR\n\t#ifdef SPECULAR\n\t\tfloat specularIntensityFactor = specularIntensity;\n\t\tvec3 specularTintFactor = specularTint;\n\t\t#ifdef USE_SPECULARINTENSITYMAP\n\t\t\tspecularIntensityFactor *= texture2D( specularIntensityMap, vUv ).a;\n\t\t#endif\n\t\t#ifdef USE_SPECULARTINTMAP\n\t\t\tspecularTintFactor *= specularTintMapTexelToLinear( texture2D( specularTintMap, vUv ) ).rgb;\n\t\t#endif\n\t\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\n\t#else\n\t\tfloat specularIntensityFactor = 1.0;\n\t\tvec3 specularTintFactor = vec3( 1.0 );\n\t\tmaterial.specularF90 = 1.0;\n\t#endif\n\tmaterial.specularColor = mix( min( pow2( ( ior - 1.0 ) / ( ior + 1.0 ) ) * specularTintFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.specularF90 = 1.0;\n#endif\n#ifdef USE_CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\tmaterial.clearcoatF0 = vec3( 0.04 );\n\tmaterial.clearcoatF90 = 1.0;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenTint = sheenTint;\n\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\n#endif",lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat roughness;\n\tvec3 specularColor;\n\tfloat specularF90;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat clearcoat;\n\t\tfloat clearcoatRoughness;\n\t\tvec3 clearcoatF0;\n\t\tfloat clearcoatF90;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tvec3 sheenTint;\n\t\tfloat sheenRoughness;\n\t#endif\n};\nvec3 clearcoatSpecular = vec3( 0.0 );\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\n\treturn fab;\n}\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\treturn specularColor * fab.x + specularF90 * fab.y;\n}\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\tvec3 FssEss = specularColor * fab.x + specularF90 * fab.y;\n\tfloat Ess = fab.x + fab.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.roughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNLcc = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = dotNLcc * directLight.color;\n\t\tclearcoatSpecular += ccIrradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.clearcoatNormal, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += irradiance * BRDF_Sheen( directLight.direction, geometry.viewDir, geometry.normal, material.sheenTint, material.sheenRoughness );\n\t#endif\n\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.roughness );\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatSpecular += clearcoatRadiance * EnvironmentBRDF( geometry.clearcoatNormal, geometry.viewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tcomputeMultiscattering( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}",lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef USE_CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointLightInfo( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotLightInfo( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalLightInfo( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry.normal );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getIBLIrradiance( geometry.normal );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getIBLRadiance( geometry.viewDir, geometry.normal, material.roughness );\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatRadiance += getIBLRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness );\n\t#endif\n#endif",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif",map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif",map_particle_pars_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t\tif ( morphTargetInfluences[ i ] > 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1, 2 ) * morphTargetInfluences[ i ];\n\t\t}\n\t#else\n\t\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\t\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\t\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\t\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n\t#endif\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\n\t\tuniform sampler2DArray morphTargetsTexture;\n\t\tuniform vec2 morphTargetsTextureSize;\n\t\tvec3 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset, const in int stride ) {\n\t\t\tfloat texelIndex = float( vertexIndex * stride + offset );\n\t\t\tfloat y = floor( texelIndex / morphTargetsTextureSize.x );\n\t\t\tfloat x = texelIndex - y * morphTargetsTextureSize.x;\n\t\t\tvec3 morphUV = vec3( ( x + 0.5 ) / morphTargetsTextureSize.x, y / morphTargetsTextureSize.y, morphTargetIndex );\n\t\t\treturn texture( morphTargetsTexture, morphUV ).xyz;\n\t\t}\n\t#else\n\t\t#ifndef USE_MORPHNORMALS\n\t\t\tuniform float morphTargetInfluences[ 8 ];\n\t\t#else\n\t\t\tuniform float morphTargetInfluences[ 4 ];\n\t\t#endif\n\t#endif\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t\t#ifndef USE_MORPHNORMALS\n\t\t\t\tif ( morphTargetInfluences[ i ] > 0.0 ) transformed += getMorph( gl_VertexID, i, 0, 1 ) * morphTargetInfluences[ i ];\n\t\t\t#else\n\t\t\t\tif ( morphTargetInfluences[ i ] > 0.0 ) transformed += getMorph( gl_VertexID, i, 0, 2 ) * morphTargetInfluences[ i ];\n\t\t\t#endif\n\t\t}\n\t#else\n\t\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\t\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\t\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\t\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t\t#ifndef USE_MORPHNORMALS\n\t\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t\t#endif\n\t#endif\n#endif",normal_fragment_begin:"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * faceDirection;\n\t\t\tbitangent = bitangent * faceDirection;\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;",normal_fragment_maps:"#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( - vViewPosition, normal, mapN, faceDirection );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif",normal_pars_fragment:"#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif",normal_pars_vertex:"#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif",normal_vertex:"#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tvec3 N = surf_norm;\n\t\tvec3 q1perp = cross( q1, N );\n\t\tvec3 q0perp = cross( N, q0 );\n\t\tvec3 T = q1perp * st0.x + q0perp * st1.x;\n\t\tvec3 B = q1perp * st0.y + q0perp * st1.y;\n\t\tfloat det = max( dot( T, T ), dot( B, B ) );\n\t\tfloat scale = ( det == 0.0 ) ? 0.0 : faceDirection * inversesqrt( det );\n\t\treturn normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z );\n\t}\n#endif",clearcoat_normal_fragment_begin:"#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection );\n\t#endif\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif",output_fragment:"#ifdef OPAQUE\ndiffuseColor.a = 1.0;\n#endif\n#ifdef USE_TRANSMISSION\ndiffuseColor.a *= transmissionAlpha + 0.1;\n#endif\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif",shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif",shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\n\t\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\tvec4 shadowWorldPosition;\n\t#endif\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif",shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}",skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif",skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }",transmission_fragment:"#ifdef USE_TRANSMISSION\n\tfloat transmissionAlpha = 1.0;\n\tfloat transmissionFactor = transmission;\n\tfloat thicknessFactor = thickness;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\ttransmissionFactor *= texture2D( transmissionMap, vUv ).r;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tthicknessFactor *= texture2D( thicknessMap, vUv ).g;\n\t#endif\n\tvec3 pos = vWorldPosition;\n\tvec3 v = normalize( cameraPosition - pos );\n\tvec3 n = inverseTransformDirection( normal, viewMatrix );\n\tvec4 transmission = getIBLVolumeRefraction(\n\t\tn, v, roughnessFactor, material.diffuseColor, material.specularColor, material.specularF90,\n\t\tpos, modelMatrix, viewMatrix, projectionMatrix, ior, thicknessFactor,\n\t\tattenuationTint, attenuationDistance );\n\ttotalDiffuse = mix( totalDiffuse, transmission.rgb, transmissionFactor );\n\ttransmissionAlpha = mix( transmissionAlpha, transmission.a, transmissionFactor );\n#endif",transmission_pars_fragment:"#ifdef USE_TRANSMISSION\n\tuniform float transmission;\n\tuniform float thickness;\n\tuniform float attenuationDistance;\n\tuniform vec3 attenuationTint;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tuniform sampler2D transmissionMap;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tuniform sampler2D thicknessMap;\n\t#endif\n\tuniform vec2 transmissionSamplerSize;\n\tuniform sampler2D transmissionSamplerMap;\n\tuniform mat4 modelMatrix;\n\tuniform mat4 projectionMatrix;\n\tvarying vec3 vWorldPosition;\n\tvec3 getVolumeTransmissionRay( vec3 n, vec3 v, float thickness, float ior, mat4 modelMatrix ) {\n\t\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\n\t\tvec3 modelScale;\n\t\tmodelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\n\t\tmodelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\n\t\tmodelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\n\t\treturn normalize( refractionVector ) * thickness * modelScale;\n\t}\n\tfloat applyIorToRoughness( float roughness, float ior ) {\n\t\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\n\t}\n\tvec4 getTransmissionSample( vec2 fragCoord, float roughness, float ior ) {\n\t\tfloat framebufferLod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\n\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\treturn texture2DLodEXT( transmissionSamplerMap, fragCoord.xy, framebufferLod );\n\t\t#else\n\t\t\treturn texture2D( transmissionSamplerMap, fragCoord.xy, framebufferLod );\n\t\t#endif\n\t}\n\tvec3 applyVolumeAttenuation( vec3 radiance, float transmissionDistance, vec3 attenuationColor, float attenuationDistance ) {\n\t\tif ( attenuationDistance == 0.0 ) {\n\t\t\treturn radiance;\n\t\t} else {\n\t\t\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\n\t\t\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );\t\t\treturn transmittance * radiance;\n\t\t}\n\t}\n\tvec4 getIBLVolumeRefraction( vec3 n, vec3 v, float roughness, vec3 diffuseColor, vec3 specularColor, float specularF90,\n\t\tvec3 position, mat4 modelMatrix, mat4 viewMatrix, mat4 projMatrix, float ior, float thickness,\n\t\tvec3 attenuationColor, float attenuationDistance ) {\n\t\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\n\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\trefractionCoords += 1.0;\n\t\trefractionCoords /= 2.0;\n\t\tvec4 transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\n\t\tvec3 attenuatedColor = applyVolumeAttenuation( transmittedLight.rgb, length( transmissionRay ), attenuationColor, attenuationDistance );\n\t\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\n\t\treturn vec4( ( 1.0 - F ) * attenuatedColor * diffuseColor, transmittedLight.a );\n\t}\n#endif",uv_pars_fragment:"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif",uv_vertex:"#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif",uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif",background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",background_frag:"uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",cube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",cube_frag:"#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}",depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}",distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}",distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}",equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}",meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshnormal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}",meshnormal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#ifdef USE_TRANSMISSION\n\tvarying vec3 vWorldPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n#ifdef USE_TRANSMISSION\n\tvWorldPosition = worldPosition.xyz;\n#endif\n}",meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n\t#define IOR\n\t#define SPECULAR\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef IOR\n\tuniform float ior;\n#endif\n#ifdef SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularTint;\n\t#ifdef USE_SPECULARINTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\n\t#endif\n\t#ifdef USE_SPECULARTINTMAP\n\t\tuniform sampler2D specularTintMap;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheenTint;\n\tuniform float sheenRoughness;\n#endif\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\t#include \n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n\t\toutgoingLight = outgoingLight * ( 1.0 - clearcoat * Fcc ) + clearcoatSpecular * clearcoat;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_vert:"#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}",sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}",sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n}"},Do={common:{diffuse:{value:new Color(16777215)},opacity:{value:1},map:{value:null},uvTransform:{value:new Matrix3},uv2Transform:{value:new Matrix3},alphaMap:{value:null},alphaTest:{value:0}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98},maxMipLevel:{value:0}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new Vector2(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new Color(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new Color(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaTest:{value:0},uvTransform:{value:new Matrix3}},sprite:{diffuse:{value:new Color(16777215)},opacity:{value:1},center:{value:new Vector2(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},alphaTest:{value:0},uvTransform:{value:new Matrix3}}},ko={basic:{uniforms:mergeUniforms([Do.common,Do.specularmap,Do.envmap,Do.aomap,Do.lightmap,Do.fog]),vertexShader:Bo.meshbasic_vert,fragmentShader:Bo.meshbasic_frag},lambert:{uniforms:mergeUniforms([Do.common,Do.specularmap,Do.envmap,Do.aomap,Do.lightmap,Do.emissivemap,Do.fog,Do.lights,{emissive:{value:new Color(0)}}]),vertexShader:Bo.meshlambert_vert,fragmentShader:Bo.meshlambert_frag},phong:{uniforms:mergeUniforms([Do.common,Do.specularmap,Do.envmap,Do.aomap,Do.lightmap,Do.emissivemap,Do.bumpmap,Do.normalmap,Do.displacementmap,Do.fog,Do.lights,{emissive:{value:new Color(0)},specular:{value:new Color(1118481)},shininess:{value:30}}]),vertexShader:Bo.meshphong_vert,fragmentShader:Bo.meshphong_frag},standard:{uniforms:mergeUniforms([Do.common,Do.envmap,Do.aomap,Do.lightmap,Do.emissivemap,Do.bumpmap,Do.normalmap,Do.displacementmap,Do.roughnessmap,Do.metalnessmap,Do.fog,Do.lights,{emissive:{value:new Color(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:Bo.meshphysical_vert,fragmentShader:Bo.meshphysical_frag},toon:{uniforms:mergeUniforms([Do.common,Do.aomap,Do.lightmap,Do.emissivemap,Do.bumpmap,Do.normalmap,Do.displacementmap,Do.gradientmap,Do.fog,Do.lights,{emissive:{value:new Color(0)}}]),vertexShader:Bo.meshtoon_vert,fragmentShader:Bo.meshtoon_frag},matcap:{uniforms:mergeUniforms([Do.common,Do.bumpmap,Do.normalmap,Do.displacementmap,Do.fog,{matcap:{value:null}}]),vertexShader:Bo.meshmatcap_vert,fragmentShader:Bo.meshmatcap_frag},points:{uniforms:mergeUniforms([Do.points,Do.fog]),vertexShader:Bo.points_vert,fragmentShader:Bo.points_frag},dashed:{uniforms:mergeUniforms([Do.common,Do.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:Bo.linedashed_vert,fragmentShader:Bo.linedashed_frag},depth:{uniforms:mergeUniforms([Do.common,Do.displacementmap]),vertexShader:Bo.depth_vert,fragmentShader:Bo.depth_frag},normal:{uniforms:mergeUniforms([Do.common,Do.bumpmap,Do.normalmap,Do.displacementmap,{opacity:{value:1}}]),vertexShader:Bo.meshnormal_vert,fragmentShader:Bo.meshnormal_frag},sprite:{uniforms:mergeUniforms([Do.sprite,Do.fog]),vertexShader:Bo.sprite_vert,fragmentShader:Bo.sprite_frag},background:{uniforms:{uvTransform:{value:new Matrix3},t2D:{value:null}},vertexShader:Bo.background_vert,fragmentShader:Bo.background_frag},cube:{uniforms:mergeUniforms([Do.envmap,{opacity:{value:1}}]),vertexShader:Bo.cube_vert,fragmentShader:Bo.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:Bo.equirect_vert,fragmentShader:Bo.equirect_frag},distanceRGBA:{uniforms:mergeUniforms([Do.common,Do.displacementmap,{referencePosition:{value:new Vector3},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:Bo.distanceRGBA_vert,fragmentShader:Bo.distanceRGBA_frag},shadow:{uniforms:mergeUniforms([Do.lights,Do.fog,{color:{value:new Color(0)},opacity:{value:1}}]),vertexShader:Bo.shadow_vert,fragmentShader:Bo.shadow_frag}};function WebGLBackground(x,S,w,U,G){const H=new Color(0);let z,j,X=0,K=null,q=0,Y=null;function setClear(x,S){w.buffers.color.setClear(x.r,x.g,x.b,S,G)}return{getClearColor:function(){return H},setClearColor:function(x,S=1){H.set(x),X=S,setClear(H,X)},getClearAlpha:function(){return X},setClearAlpha:function(x){X=x,setClear(H,X)},render:function render(w,G){let Z=!1,J=!0===G.isScene?G.background:null;J&&J.isTexture&&(J=S.get(J));const te=x.xr,ne=te.getSession&&te.getSession();ne&&"additive"===ne.environmentBlendMode&&(J=null),null===J?setClear(H,X):J&&J.isColor&&(setClear(J,1),Z=!0),(x.autoClear||Z)&&x.clear(x.autoClearColor,x.autoClearDepth,x.autoClearStencil),J&&(J.isCubeTexture||J.mapping===Ke)?(void 0===j&&(j=new Mesh(new BoxGeometry(1,1,1),new ShaderMaterial({name:"BackgroundCubeMaterial",uniforms:cloneUniforms(ko.cube.uniforms),vertexShader:ko.cube.vertexShader,fragmentShader:ko.cube.fragmentShader,side:ee,depthTest:!1,depthWrite:!1,fog:!1})),j.geometry.deleteAttribute("normal"),j.geometry.deleteAttribute("uv"),j.onBeforeRender=function(x,S,w){this.matrixWorld.copyPosition(w.matrixWorld)},Object.defineProperty(j.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),U.update(j)),j.material.uniforms.envMap.value=J,j.material.uniforms.flipEnvMap.value=J.isCubeTexture&&!1===J.isRenderTargetTexture?-1:1,K===J&&q===J.version&&Y===x.toneMapping||(j.material.needsUpdate=!0,K=J,q=J.version,Y=x.toneMapping),w.unshift(j,j.geometry,j.material,0,0,null)):J&&J.isTexture&&(void 0===z&&(z=new Mesh(new PlaneGeometry(2,2),new ShaderMaterial({name:"BackgroundMaterial",uniforms:cloneUniforms(ko.background.uniforms),vertexShader:ko.background.vertexShader,fragmentShader:ko.background.fragmentShader,side:Q,depthTest:!1,depthWrite:!1,fog:!1})),z.geometry.deleteAttribute("normal"),Object.defineProperty(z.material,"map",{get:function(){return this.uniforms.t2D.value}}),U.update(z)),z.material.uniforms.t2D.value=J,!0===J.matrixAutoUpdate&&J.updateMatrix(),z.material.uniforms.uvTransform.value.copy(J.matrix),K===J&&q===J.version&&Y===x.toneMapping||(z.material.needsUpdate=!0,K=J,q=J.version,Y=x.toneMapping),w.unshift(z,z.geometry,z.material,0,0,null))}}}function WebGLBindingStates(x,S,w,U){const G=x.getParameter(34921),H=U.isWebGL2?null:S.get("OES_vertex_array_object"),z=U.isWebGL2||null!==H,j={},X=createBindingState(null);let K=X;function bindVertexArrayObject(S){return U.isWebGL2?x.bindVertexArray(S):H.bindVertexArrayOES(S)}function deleteVertexArrayObject(S){return U.isWebGL2?x.deleteVertexArray(S):H.deleteVertexArrayOES(S)}function createBindingState(x){const S=[],w=[],U=[];for(let x=0;x=0){let H=X[S];if(void 0===H&&("instanceMatrix"===S&&G.instanceMatrix&&(H=G.instanceMatrix),"instanceColor"===S&&G.instanceColor&&(H=G.instanceColor)),void 0!==H){const S=H.normalized,z=H.itemSize,X=w.get(H);if(void 0===X)continue;const K=X.buffer,q=X.type,Y=X.bytesPerElement;if(H.isInterleavedBufferAttribute){const w=H.data,X=w.stride,Z=H.offset;if(w&&w.isInstancedInterleavedBuffer){for(let x=0;x0&&x.getShaderPrecisionFormat(35632,36338).precision>0)return"highp";S="mediump"}return"mediump"===S&&x.getShaderPrecisionFormat(35633,36337).precision>0&&x.getShaderPrecisionFormat(35632,36337).precision>0?"mediump":"lowp"}const G="undefined"!=typeof WebGL2RenderingContext&&x instanceof WebGL2RenderingContext||"undefined"!=typeof WebGL2ComputeRenderingContext&&x instanceof WebGL2ComputeRenderingContext;let H=void 0!==w.precision?w.precision:"highp";const z=getMaxPrecision(H);z!==H&&(console.warn("THREE.WebGLRenderer:",H,"not supported, using",z,"instead."),H=z);const j=G||S.has("WEBGL_draw_buffers"),X=!0===w.logarithmicDepthBuffer,K=x.getParameter(34930),q=x.getParameter(35660),Y=x.getParameter(3379),Z=x.getParameter(34076),J=x.getParameter(34921),Q=x.getParameter(36347),ee=x.getParameter(36348),te=x.getParameter(36349),ne=q>0,ie=G||S.has("OES_texture_float");return{isWebGL2:G,drawBuffers:j,getMaxAnisotropy:function getMaxAnisotropy(){if(void 0!==U)return U;if(!0===S.has("EXT_texture_filter_anisotropic")){const w=S.get("EXT_texture_filter_anisotropic");U=x.getParameter(w.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else U=0;return U},getMaxPrecision,precision:H,logarithmicDepthBuffer:X,maxTextures:K,maxVertexTextures:q,maxTextureSize:Y,maxCubemapSize:Z,maxAttributes:J,maxVertexUniforms:Q,maxVaryings:ee,maxFragmentUniforms:te,vertexTextures:ne,floatFragmentTextures:ie,floatVertexTextures:ne&&ie,maxSamples:G?x.getParameter(36183):0}}function WebGLClipping(x){const S=this;let w=null,U=0,G=!1,H=!1;const z=new Plane,j=new Matrix3,X={value:null,needsUpdate:!1};function resetGlobalState(){X.value!==w&&(X.value=w,X.needsUpdate=U>0),S.numPlanes=U,S.numIntersection=0}function projectPlanes(x,w,U,G){const H=null!==x?x.length:0;let K=null;if(0!==H){if(K=X.value,!0!==G||null===K){const S=U+4*H,G=w.matrixWorldInverse;j.getNormalMatrix(G),(null===K||K.length0){const G=x.getRenderTarget(),H=new WebGLCubeRenderTarget(U.height/2);return H.fromEquirectangularTexture(x,w),S.set(w,H),x.setRenderTarget(G),w.addEventListener("dispose",onTextureDispose),mapTextureMapping(H.texture,w.mapping)}return null}}}return w},dispose:function dispose(){S=new WeakMap}}}ko.physical={uniforms:mergeUniforms([ko.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatNormalScale:{value:new Vector2(1,1)},clearcoatNormalMap:{value:null},sheen:{value:0},sheenTint:{value:new Color(0)},sheenRoughness:{value:0},transmission:{value:0},transmissionMap:{value:null},transmissionSamplerSize:{value:new Vector2},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},attenuationDistance:{value:0},attenuationTint:{value:new Color(0)},specularIntensity:{value:0},specularIntensityMap:{value:null},specularTint:{value:new Color(1,1,1)},specularTintMap:{value:null}}]),vertexShader:Bo.meshphysical_vert,fragmentShader:Bo.meshphysical_frag};class OrthographicCamera extends Camera{constructor(x=-1,S=1,w=1,U=-1,G=.1,H=2e3){super(),this.type="OrthographicCamera",this.zoom=1,this.view=null,this.left=x,this.right=S,this.top=w,this.bottom=U,this.near=G,this.far=H,this.updateProjectionMatrix()}copy(x,S){return super.copy(x,S),this.left=x.left,this.right=x.right,this.top=x.top,this.bottom=x.bottom,this.near=x.near,this.far=x.far,this.zoom=x.zoom,this.view=null===x.view?null:Object.assign({},x.view),this}setViewOffset(x,S,w,U,G,H){null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=x,this.view.fullHeight=S,this.view.offsetX=w,this.view.offsetY=U,this.view.width=G,this.view.height=H,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const x=(this.right-this.left)/(2*this.zoom),S=(this.top-this.bottom)/(2*this.zoom),w=(this.right+this.left)/2,U=(this.top+this.bottom)/2;let G=w-x,H=w+x,z=U+S,j=U-S;if(null!==this.view&&this.view.enabled){const x=(this.right-this.left)/this.view.fullWidth/this.zoom,S=(this.top-this.bottom)/this.view.fullHeight/this.zoom;G+=x*this.view.offsetX,H=G+x*this.view.width,z-=S*this.view.offsetY,j=z-S*this.view.height}this.projectionMatrix.makeOrthographic(G,H,z,j,this.near,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(x){const S=super.toJSON(x);return S.object.zoom=this.zoom,S.object.left=this.left,S.object.right=this.right,S.object.top=this.top,S.object.bottom=this.bottom,S.object.near=this.near,S.object.far=this.far,null!==this.view&&(S.object.view=Object.assign({},this.view)),S}}OrthographicCamera.prototype.isOrthographicCamera=!0;class RawShaderMaterial extends ShaderMaterial{constructor(x){super(x),this.type="RawShaderMaterial"}}RawShaderMaterial.prototype.isRawShaderMaterial=!0;const Uo=Math.pow(2,8),Go=[.125,.215,.35,.446,.526,.582],Vo=5+Go.length,Ho=20,Wo={[Xn]:0,[Kn]:1,[Zn]:2,[ei]:3,[ni]:4,[ii]:5,[qn]:6},$o=new OrthographicCamera,{_lodPlanes:zo,_sizeLods:jo,_sigmas:Xo}=_createPlanes(),Ko=new Color;let qo=null;const Yo=(1+Math.sqrt(5))/2,Zo=1/Yo,Jo=[new Vector3(1,1,1),new Vector3(-1,1,1),new Vector3(1,1,-1),new Vector3(-1,1,-1),new Vector3(0,Yo,Zo),new Vector3(0,Yo,-Zo),new Vector3(Zo,0,Yo),new Vector3(-Zo,0,Yo),new Vector3(Yo,Zo,0),new Vector3(-Yo,Zo,0)];class PMREMGenerator{constructor(x){this._renderer=x,this._pingPongRenderTarget=null,this._blurMaterial=function _getBlurShader(x){const S=new Float32Array(x),w=new Vector3(0,1,0);return new RawShaderMaterial({name:"SphericalGaussianBlur",defines:{n:x},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:S},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:w},inputEncoding:{value:Wo[Xn]},outputEncoding:{value:Wo[Xn]}},vertexShader:_getCommonVertexShader(),fragmentShader:`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t${_getEncodings()}\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include \n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,blending:re,depthTest:!1,depthWrite:!1})}(Ho),this._equirectShader=null,this._cubemapShader=null,this._compileMaterial(this._blurMaterial)}fromScene(x,S=0,w=.1,U=100){qo=this._renderer.getRenderTarget();const G=this._allocateTargets();return this._sceneToCubeUV(x,w,U,G),S>0&&this._blur(G,0,0,S),this._applyPMREM(G),this._cleanup(G),G}fromEquirectangular(x){return this._fromTexture(x)}fromCubemap(x){return this._fromTexture(x)}compileCubemapShader(){null===this._cubemapShader&&(this._cubemapShader=_getCubemapShader(),this._compileMaterial(this._cubemapShader))}compileEquirectangularShader(){null===this._equirectShader&&(this._equirectShader=_getEquirectShader(),this._compileMaterial(this._equirectShader))}dispose(){this._blurMaterial.dispose(),null!==this._cubemapShader&&this._cubemapShader.dispose(),null!==this._equirectShader&&this._equirectShader.dispose();for(let x=0;x2?Uo:0,Uo,Uo),j.setRenderTarget(U),J&&j.render(Z,G),j.render(x,G)}Z.geometry.dispose(),Z.material.dispose(),j.toneMapping=q,j.outputEncoding=K,j.autoClear=X,x.background=Q}_setEncoding(x,S){!0===this._renderer.capabilities.isWebGL2&&S.format===Tt&&S.type===ct&&S.encoding===Kn?x.value=Wo[Xn]:x.value=Wo[S.encoding]}_textureToCubeUV(x,S){const w=this._renderer;x.isCubeTexture?null==this._cubemapShader&&(this._cubemapShader=_getCubemapShader()):null==this._equirectShader&&(this._equirectShader=_getEquirectShader());const U=x.isCubeTexture?this._cubemapShader:this._equirectShader,G=new Mesh(zo[0],U),H=U.uniforms;H.envMap.value=x,x.isCubeTexture||H.texelSize.value.set(1/x.image.width,1/x.image.height),this._setEncoding(H.inputEncoding,x),this._setEncoding(H.outputEncoding,S.texture),_setViewport(S,0,0,3*Uo,2*Uo),w.setRenderTarget(S),w.render(G,$o)}_applyPMREM(x){const S=this._renderer,w=S.autoClear;S.autoClear=!1;for(let S=1;SHo&&console.warn(`sigmaRadians, ${G}, is too large and will clip, as it requested ${Q} samples when the maximum is set to 20`);const ee=[];let te=0;for(let x=0;x4?U-8+4:0),3*ne,2*ne),j.setRenderTarget(S),j.render(K,$o)}}function _isLDR(x){return void 0!==x&&x.type===ct&&(x.encoding===Xn||x.encoding===Kn||x.encoding===qn)}function _createPlanes(){const x=[],S=[],w=[];let U=8;for(let G=0;G4?z=Go[G-8+4-1]:0==G&&(z=0),w.push(z);const j=1/(H-1),X=-j/2,K=1+j/2,q=[X,X,K,X,K,K,X,X,K,K,X,K],Y=6,Z=6,J=3,Q=2,ee=1,te=new Float32Array(J*Z*Y),ne=new Float32Array(Q*Z*Y),ie=new Float32Array(ee*Z*Y);for(let x=0;x2?0:-1,U=[S,w,0,S+2/3,w,0,S+2/3,w+1,0,S,w,0,S+2/3,w+1,0,S,w+1,0];te.set(U,J*Z*x),ne.set(q,Q*Z*x);const G=[x,x,x,x,x,x];ie.set(G,ee*Z*x)}const re=new BufferGeometry;re.setAttribute("position",new BufferAttribute(te,J)),re.setAttribute("uv",new BufferAttribute(ne,Q)),re.setAttribute("faceIndex",new BufferAttribute(ie,ee)),x.push(re),U>4&&U--}return{_lodPlanes:x,_sizeLods:S,_sigmas:w}}function _createRenderTarget(x){const S=new WebGLRenderTarget(3*Uo,3*Uo,x);return S.texture.mapping=Ke,S.texture.name="PMREM.cubeUv",S.scissorTest=!0,S}function _setViewport(x,S,w,U,G){x.viewport.set(S,w,U,G),x.scissor.set(S,w,U,G)}function _getEquirectShader(){const x=new Vector2(1,1);return new RawShaderMaterial({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null},texelSize:{value:x},inputEncoding:{value:Wo[Xn]},outputEncoding:{value:Wo[Xn]}},vertexShader:_getCommonVertexShader(),fragmentShader:`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform vec2 texelSize;\n\n\t\t\t${_getEncodings()}\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tvec2 f = fract( uv / texelSize - 0.5 );\n\t\t\t\tuv -= f * texelSize;\n\t\t\t\tvec3 tl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x += texelSize.x;\n\t\t\t\tvec3 tr = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.y += texelSize.y;\n\t\t\t\tvec3 br = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x -= texelSize.x;\n\t\t\t\tvec3 bl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\n\t\t\t\tvec3 tm = mix( tl, tr, f.x );\n\t\t\t\tvec3 bm = mix( bl, br, f.x );\n\t\t\t\tgl_FragColor.rgb = mix( tm, bm, f.y );\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,blending:re,depthTest:!1,depthWrite:!1})}function _getCubemapShader(){return new RawShaderMaterial({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},inputEncoding:{value:Wo[Xn]},outputEncoding:{value:Wo[Xn]}},vertexShader:_getCommonVertexShader(),fragmentShader:`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\t${_getEncodings()}\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb = envMapTexelToLinear( textureCube( envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ) ) ).rgb;\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,blending:re,depthTest:!1,depthWrite:!1})}function _getCommonVertexShader(){return"\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute vec3 position;\n\t\tattribute vec2 uv;\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t"}function _getEncodings(){return"\n\n\t\tuniform int inputEncoding;\n\t\tuniform int outputEncoding;\n\n\t\t#include \n\n\t\tvec4 inputTexelToLinear( vec4 value ) {\n\n\t\t\tif ( inputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( inputEncoding == 1 ) {\n\n\t\t\t\treturn sRGBToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 2 ) {\n\n\t\t\t\treturn RGBEToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 3 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 7.0 );\n\n\t\t\t} else if ( inputEncoding == 4 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 16.0 );\n\n\t\t\t} else if ( inputEncoding == 5 ) {\n\n\t\t\t\treturn RGBDToLinear( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn GammaToLinear( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 linearToOutputTexel( vec4 value ) {\n\n\t\t\tif ( outputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( outputEncoding == 1 ) {\n\n\t\t\t\treturn LinearTosRGB( value );\n\n\t\t\t} else if ( outputEncoding == 2 ) {\n\n\t\t\t\treturn LinearToRGBE( value );\n\n\t\t\t} else if ( outputEncoding == 3 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 7.0 );\n\n\t\t\t} else if ( outputEncoding == 4 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 16.0 );\n\n\t\t\t} else if ( outputEncoding == 5 ) {\n\n\t\t\t\treturn LinearToRGBD( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn LinearToGamma( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 envMapTexelToLinear( vec4 color ) {\n\n\t\t\treturn inputTexelToLinear( color );\n\n\t\t}\n\t"}function WebGLCubeUVMaps(x){let S=new WeakMap,w=null;function onTextureDispose(x){const w=x.target;w.removeEventListener("dispose",onTextureDispose);const U=S.get(w);void 0!==U&&(S.delete(w),U.dispose())}return{get:function get(U){if(U&&U.isTexture&&!1===U.isRenderTargetTexture){const G=U.mapping,H=G===je||G===Xe,z=G===$e||G===ze;if(H||z){if(S.has(U))return S.get(U).texture;{const G=U.image;if(H&&G&&G.height>0||z&&G&&function isCubeTextureComplete(x){let S=0;const w=6;for(let U=0;U65535?Uint32BufferAttribute:Uint16BufferAttribute)(w,1);j.version=z;const X=H.get(x);X&&S.remove(X),H.set(x,j)}return{get:function get(x,S){return!0===G[S.id]||(S.addEventListener("dispose",onGeometryDispose),G[S.id]=!0,w.memory.geometries++),S},update:function update(x){const w=x.attributes;for(const x in w)S.update(w[x],34962);const U=x.morphAttributes;for(const x in U){const w=U[x];for(let x=0,U=w.length;xS.maxTextureSize&&(Y=Math.ceil(q/S.maxTextureSize),q=S.maxTextureSize);const Z=new Float32Array(q*Y*4*U),J=new DataTexture2DArray(Z,q,Y,U);J.format=Tt,J.type=gt;const Q=4*X;for(let S=0;S0)return x;const G=S*w;let H=ia[G];if(void 0===H&&(H=new Float32Array(G),ia[G]=H),0!==S){U.toArray(H,0);for(let U=1,G=0;U!==S;++U)G+=w,x[U].toArray(H,G)}return H}function arraysEqual(x,S){if(x.length!==S.length)return!1;for(let w=0,U=x.length;w/gm;function resolveIncludes(x){return x.replace(ua,includeReplacer)}function includeReplacer(x,S){const w=Bo[S];if(void 0===w)throw new Error("Can not resolve #include <"+S+">");return resolveIncludes(w)}const ha=/#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,da=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function unrollLoops(x){return x.replace(da,loopReplacer).replace(ha,deprecatedLoopReplacer)}function deprecatedLoopReplacer(x,S,w,U){return console.warn("WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead."),loopReplacer(x,S,w,U)}function loopReplacer(x,S,w,U){let G="";for(let x=parseInt(S);x0?x.gammaFactor:1,te=w.isWebGL2?"":function generateExtensions(x){return[x.extensionDerivatives||x.envMapCubeUV||x.bumpMap||x.tangentSpaceNormalMap||x.clearcoatNormalMap||x.flatShading||"physical"===x.shaderID?"#extension GL_OES_standard_derivatives : enable":"",(x.extensionFragDepth||x.logarithmicDepthBuffer)&&x.rendererExtensionFragDepth?"#extension GL_EXT_frag_depth : enable":"",x.extensionDrawBuffers&&x.rendererExtensionDrawBuffers?"#extension GL_EXT_draw_buffers : require":"",(x.extensionShaderTextureLOD||x.envMap||x.transmission)&&x.rendererExtensionShaderTextureLod?"#extension GL_EXT_shader_texture_lod : enable":""].filter(filterEmptyLine).join("\n")}(w),ne=function generateDefines(x){const S=[];for(const w in x){const U=x[w];!1!==U&&S.push("#define "+w+" "+U)}return S.join("\n")}(H),ie=G.createProgram();let re,oe,ae=w.glslVersion?"#version "+w.glslVersion+"\n":"";w.isRawShaderMaterial?(re=[ne].filter(filterEmptyLine).join("\n"),re.length>0&&(re+="\n"),oe=[te,ne].filter(filterEmptyLine).join("\n"),oe.length>0&&(oe+="\n")):(re=[generatePrecision(w),"#define SHADER_NAME "+w.shaderName,ne,w.instancing?"#define USE_INSTANCING":"",w.instancingColor?"#define USE_INSTANCING_COLOR":"",w.supportsVertexTextures?"#define VERTEX_TEXTURES":"","#define GAMMA_FACTOR "+ee,"#define MAX_BONES "+w.maxBones,w.useFog&&w.fog?"#define USE_FOG":"",w.useFog&&w.fogExp2?"#define FOG_EXP2":"",w.map?"#define USE_MAP":"",w.envMap?"#define USE_ENVMAP":"",w.envMap?"#define "+q:"",w.lightMap?"#define USE_LIGHTMAP":"",w.aoMap?"#define USE_AOMAP":"",w.emissiveMap?"#define USE_EMISSIVEMAP":"",w.bumpMap?"#define USE_BUMPMAP":"",w.normalMap?"#define USE_NORMALMAP":"",w.normalMap&&w.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",w.normalMap&&w.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",w.clearcoatMap?"#define USE_CLEARCOATMAP":"",w.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",w.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",w.displacementMap&&w.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",w.specularMap?"#define USE_SPECULARMAP":"",w.specularIntensityMap?"#define USE_SPECULARINTENSITYMAP":"",w.specularTintMap?"#define USE_SPECULARTINTMAP":"",w.roughnessMap?"#define USE_ROUGHNESSMAP":"",w.metalnessMap?"#define USE_METALNESSMAP":"",w.alphaMap?"#define USE_ALPHAMAP":"",w.transmission?"#define USE_TRANSMISSION":"",w.transmissionMap?"#define USE_TRANSMISSIONMAP":"",w.thicknessMap?"#define USE_THICKNESSMAP":"",w.vertexTangents?"#define USE_TANGENT":"",w.vertexColors?"#define USE_COLOR":"",w.vertexAlphas?"#define USE_COLOR_ALPHA":"",w.vertexUvs?"#define USE_UV":"",w.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",w.flatShading?"#define FLAT_SHADED":"",w.skinning?"#define USE_SKINNING":"",w.useVertexTexture?"#define BONE_TEXTURE":"",w.morphTargets?"#define USE_MORPHTARGETS":"",w.morphNormals&&!1===w.flatShading?"#define USE_MORPHNORMALS":"",w.morphTargets&&w.isWebGL2?"#define MORPHTARGETS_TEXTURE":"",w.morphTargets&&w.isWebGL2?"#define MORPHTARGETS_COUNT "+w.morphTargetsCount:"",w.doubleSided?"#define DOUBLE_SIDED":"",w.flipSided?"#define FLIP_SIDED":"",w.shadowMapEnabled?"#define USE_SHADOWMAP":"",w.shadowMapEnabled?"#define "+X:"",w.sizeAttenuation?"#define USE_SIZEATTENUATION":"",w.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",w.logarithmicDepthBuffer&&w.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING","\tattribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR","\tattribute vec3 instanceColor;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_TANGENT","\tattribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )","\tattribute vec4 color;","#elif defined( USE_COLOR )","\tattribute vec3 color;","#endif","#if ( defined( USE_MORPHTARGETS ) && ! defined( MORPHTARGETS_TEXTURE ) )","\tattribute vec3 morphTarget0;","\tattribute vec3 morphTarget1;","\tattribute vec3 morphTarget2;","\tattribute vec3 morphTarget3;","\t#ifdef USE_MORPHNORMALS","\t\tattribute vec3 morphNormal0;","\t\tattribute vec3 morphNormal1;","\t\tattribute vec3 morphNormal2;","\t\tattribute vec3 morphNormal3;","\t#else","\t\tattribute vec3 morphTarget4;","\t\tattribute vec3 morphTarget5;","\t\tattribute vec3 morphTarget6;","\t\tattribute vec3 morphTarget7;","\t#endif","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif","\n"].filter(filterEmptyLine).join("\n"),oe=[te,generatePrecision(w),"#define SHADER_NAME "+w.shaderName,ne,"#define GAMMA_FACTOR "+ee,w.useFog&&w.fog?"#define USE_FOG":"",w.useFog&&w.fogExp2?"#define FOG_EXP2":"",w.map?"#define USE_MAP":"",w.matcap?"#define USE_MATCAP":"",w.envMap?"#define USE_ENVMAP":"",w.envMap?"#define "+K:"",w.envMap?"#define "+q:"",w.envMap?"#define "+Q:"",w.lightMap?"#define USE_LIGHTMAP":"",w.aoMap?"#define USE_AOMAP":"",w.emissiveMap?"#define USE_EMISSIVEMAP":"",w.bumpMap?"#define USE_BUMPMAP":"",w.normalMap?"#define USE_NORMALMAP":"",w.normalMap&&w.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",w.normalMap&&w.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",w.clearcoat?"#define USE_CLEARCOAT":"",w.clearcoatMap?"#define USE_CLEARCOATMAP":"",w.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",w.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",w.specularMap?"#define USE_SPECULARMAP":"",w.specularIntensityMap?"#define USE_SPECULARINTENSITYMAP":"",w.specularTintMap?"#define USE_SPECULARTINTMAP":"",w.roughnessMap?"#define USE_ROUGHNESSMAP":"",w.metalnessMap?"#define USE_METALNESSMAP":"",w.alphaMap?"#define USE_ALPHAMAP":"",w.alphaTest?"#define USE_ALPHATEST":"",w.sheen?"#define USE_SHEEN":"",w.transmission?"#define USE_TRANSMISSION":"",w.transmissionMap?"#define USE_TRANSMISSIONMAP":"",w.thicknessMap?"#define USE_THICKNESSMAP":"",w.vertexTangents?"#define USE_TANGENT":"",w.vertexColors||w.instancingColor?"#define USE_COLOR":"",w.vertexAlphas?"#define USE_COLOR_ALPHA":"",w.vertexUvs?"#define USE_UV":"",w.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",w.gradientMap?"#define USE_GRADIENTMAP":"",w.flatShading?"#define FLAT_SHADED":"",w.doubleSided?"#define DOUBLE_SIDED":"",w.flipSided?"#define FLIP_SIDED":"",w.shadowMapEnabled?"#define USE_SHADOWMAP":"",w.shadowMapEnabled?"#define "+X:"",w.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",w.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",w.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",w.logarithmicDepthBuffer&&w.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"",(w.extensionShaderTextureLOD||w.envMap)&&w.rendererExtensionShaderTextureLod?"#define TEXTURE_LOD_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",w.toneMapping!==De?"#define TONE_MAPPING":"",w.toneMapping!==De?Bo.tonemapping_pars_fragment:"",w.toneMapping!==De?getToneMappingFunction("toneMapping",w.toneMapping):"",w.dithering?"#define DITHERING":"",w.format===St?"#define OPAQUE":"",Bo.encodings_pars_fragment,w.map?getTexelDecodingFunction("mapTexelToLinear",w.mapEncoding):"",w.matcap?getTexelDecodingFunction("matcapTexelToLinear",w.matcapEncoding):"",w.envMap?getTexelDecodingFunction("envMapTexelToLinear",w.envMapEncoding):"",w.emissiveMap?getTexelDecodingFunction("emissiveMapTexelToLinear",w.emissiveMapEncoding):"",w.specularTintMap?getTexelDecodingFunction("specularTintMapTexelToLinear",w.specularTintMapEncoding):"",w.lightMap?getTexelDecodingFunction("lightMapTexelToLinear",w.lightMapEncoding):"",getTexelEncodingFunction("linearToOutputTexel",w.outputEncoding),w.depthPacking?"#define DEPTH_PACKING "+w.depthPacking:"","\n"].filter(filterEmptyLine).join("\n")),z=resolveIncludes(z),z=replaceLightNums(z,w),z=replaceClippingPlaneNums(z,w),j=resolveIncludes(j),j=replaceLightNums(j,w),j=replaceClippingPlaneNums(j,w),z=unrollLoops(z),j=unrollLoops(j),w.isWebGL2&&!0!==w.isRawShaderMaterial&&(ae="#version 300 es\n",re=["precision mediump sampler2DArray;","#define attribute in","#define varying out","#define texture2D texture"].join("\n")+"\n"+re,oe=["#define varying in",w.glslVersion===ki?"":"out highp vec4 pc_fragColor;",w.glslVersion===ki?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join("\n")+"\n"+oe);const se=ae+oe+j,le=WebGLShader(G,35633,ae+re+z),ce=WebGLShader(G,35632,se);if(G.attachShader(ie,le),G.attachShader(ie,ce),void 0!==w.index0AttributeName?G.bindAttribLocation(ie,0,w.index0AttributeName):!0===w.morphTargets&&G.bindAttribLocation(ie,0,"position"),G.linkProgram(ie),x.debug.checkShaderErrors){const x=G.getProgramInfoLog(ie).trim(),S=G.getShaderInfoLog(le).trim(),w=G.getShaderInfoLog(ce).trim();let U=!0,H=!0;if(!1===G.getProgramParameter(ie,35714)){U=!1;const S=getShaderErrors(G,le,"vertex"),w=getShaderErrors(G,ce,"fragment");console.error("THREE.WebGLProgram: Shader Error "+G.getError()+" - VALIDATE_STATUS "+G.getProgramParameter(ie,35715)+"\n\nProgram Info Log: "+x+"\n"+S+"\n"+w)}else""!==x?console.warn("THREE.WebGLProgram: Program Info Log:",x):""!==S&&""!==w||(H=!1);H&&(this.diagnostics={runnable:U,programLog:x,vertexShader:{log:S,prefix:re},fragmentShader:{log:w,prefix:oe}})}let ue,he;return G.deleteShader(le),G.deleteShader(ce),this.getUniforms=function(){return void 0===ue&&(ue=new WebGLUniforms(G,ie)),ue},this.getAttributes=function(){return void 0===he&&(he=function fetchAttributeLocations(x,S){const w={},U=x.getProgramParameter(S,35721);for(let G=0;G0,me=H.clearcoat>0;return{isWebGL2:X,shaderID:le,shaderName:H.type,vertexShader:ue,fragmentShader:he,defines:H.defines,isRawShaderMaterial:!0===H.isRawShaderMaterial,glslVersion:H.glslVersion,precision:J,instancing:!0===re.isInstancedMesh,instancingColor:!0===re.isInstancedMesh&&null!==re.instanceColor,supportsVertexTextures:Z,outputEncoding:null!==de?getTextureEncodingFromMap(de.texture):x.outputEncoding,map:!!H.map,mapEncoding:getTextureEncodingFromMap(H.map),matcap:!!H.matcap,matcapEncoding:getTextureEncodingFromMap(H.matcap),envMap:!!se,envMapMode:se&&se.mapping,envMapEncoding:getTextureEncodingFromMap(se),envMapCubeUV:!!se&&(se.mapping===Ke||se.mapping===qe),lightMap:!!H.lightMap,lightMapEncoding:getTextureEncodingFromMap(H.lightMap),aoMap:!!H.aoMap,emissiveMap:!!H.emissiveMap,emissiveMapEncoding:getTextureEncodingFromMap(H.emissiveMap),bumpMap:!!H.bumpMap,normalMap:!!H.normalMap,objectSpaceNormalMap:H.normalMapType===li,tangentSpaceNormalMap:H.normalMapType===ai,clearcoat:me,clearcoatMap:me&&!!H.clearcoatMap,clearcoatRoughnessMap:me&&!!H.clearcoatRoughnessMap,clearcoatNormalMap:me&&!!H.clearcoatNormalMap,displacementMap:!!H.displacementMap,roughnessMap:!!H.roughnessMap,metalnessMap:!!H.metalnessMap,specularMap:!!H.specularMap,specularIntensityMap:!!H.specularIntensityMap,specularTintMap:!!H.specularTintMap,specularTintMapEncoding:getTextureEncodingFromMap(H.specularTintMap),alphaMap:!!H.alphaMap,alphaTest:pe,gradientMap:!!H.gradientMap,sheen:H.sheen>0,transmission:H.transmission>0,transmissionMap:!!H.transmissionMap,thicknessMap:!!H.thicknessMap,combine:H.combine,vertexTangents:!!H.normalMap&&!!re.geometry&&!!re.geometry.attributes.tangent,vertexColors:H.vertexColors,vertexAlphas:!0===H.vertexColors&&!!re.geometry&&!!re.geometry.attributes.color&&4===re.geometry.attributes.color.itemSize,vertexUvs:!!(H.map||H.bumpMap||H.normalMap||H.specularMap||H.alphaMap||H.emissiveMap||H.roughnessMap||H.metalnessMap||H.clearcoatMap||H.clearcoatRoughnessMap||H.clearcoatNormalMap||H.displacementMap||H.transmissionMap||H.thicknessMap||H.specularIntensityMap||H.specularTintMap),uvsVertexOnly:!(H.map||H.bumpMap||H.normalMap||H.specularMap||H.alphaMap||H.emissiveMap||H.roughnessMap||H.metalnessMap||H.clearcoatNormalMap||H.transmission>0||H.transmissionMap||H.thicknessMap||H.specularIntensityMap||H.specularTintMap||!H.displacementMap),fog:!!oe,useFog:H.fog,fogExp2:oe&&oe.isFogExp2,flatShading:!!H.flatShading,sizeAttenuation:H.sizeAttenuation,logarithmicDepthBuffer:K,skinning:!0===re.isSkinnedMesh&&ce>0,maxBones:ce,useVertexTexture:q,morphTargets:!!re.geometry&&!!re.geometry.morphAttributes.position,morphNormals:!!re.geometry&&!!re.geometry.morphAttributes.normal,morphTargetsCount:re.geometry&&re.geometry.morphAttributes.position?re.geometry.morphAttributes.position.length:0,numDirLights:j.directional.length,numPointLights:j.point.length,numSpotLights:j.spot.length,numRectAreaLights:j.rectArea.length,numHemiLights:j.hemi.length,numDirLightShadows:j.directionalShadowMap.length,numPointLightShadows:j.pointShadowMap.length,numSpotLightShadows:j.spotShadowMap.length,numClippingPlanes:z.numPlanes,numClipIntersection:z.numIntersection,format:H.format,dithering:H.dithering,shadowMapEnabled:x.shadowMap.enabled&&ne.length>0,shadowMapType:x.shadowMap.type,toneMapping:H.toneMapped?x.toneMapping:De,physicallyCorrectLights:x.physicallyCorrectLights,premultipliedAlpha:H.premultipliedAlpha,doubleSided:H.side===te,flipSided:H.side===ee,depthPacking:void 0!==H.depthPacking&&H.depthPacking,index0AttributeName:H.index0AttributeName,extensionDerivatives:H.extensions&&H.extensions.derivatives,extensionFragDepth:H.extensions&&H.extensions.fragDepth,extensionDrawBuffers:H.extensions&&H.extensions.drawBuffers,extensionShaderTextureLOD:H.extensions&&H.extensions.shaderTextureLOD,rendererExtensionFragDepth:X||U.has("EXT_frag_depth"),rendererExtensionDrawBuffers:X||U.has("WEBGL_draw_buffers"),rendererExtensionShaderTextureLod:X||U.has("EXT_shader_texture_lod"),customProgramCacheKey:H.customProgramCacheKey()}},getProgramCacheKey:function getProgramCacheKey(S){const w=[];if(S.shaderID?w.push(S.shaderID):(w.push(S.fragmentShader),w.push(S.vertexShader)),void 0!==S.defines)for(const x in S.defines)w.push(x),w.push(S.defines[x]);if(!1===S.isRawShaderMaterial){for(let x=0;x0?G.push(K):!0===w.transparent?H.push(K):U.push(K)},unshift:function unshift(x,S,w,z,j,X){const K=getNextRenderItem(x,S,w,z,j,X);w.transmission>0?G.unshift(K):!0===w.transparent?H.unshift(K):U.unshift(K)},finish:function finish(){for(let x=w,U=S.length;x1&&U.sort(x||painterSortStable),G.length>1&&G.sort(S||reversePainterSortStable),H.length>1&&H.sort(S||reversePainterSortStable)}}}function WebGLRenderLists(x){let S=new WeakMap;return{get:function get(w,U){let G;return!1===S.has(w)?(G=new WebGLRenderList(x),S.set(w,[G])):U>=S.get(w).length?(G=new WebGLRenderList(x),S.get(w).push(G)):G=S.get(w)[U],G},dispose:function dispose(){S=new WeakMap}}}function UniformsCache(){const x={};return{get:function(S){if(void 0!==x[S.id])return x[S.id];let w;switch(S.type){case"DirectionalLight":w={direction:new Vector3,color:new Color};break;case"SpotLight":w={position:new Vector3,direction:new Vector3,color:new Color,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":w={position:new Vector3,color:new Color,distance:0,decay:0};break;case"HemisphereLight":w={direction:new Vector3,skyColor:new Color,groundColor:new Color};break;case"RectAreaLight":w={color:new Color,position:new Vector3,halfWidth:new Vector3,halfHeight:new Vector3}}return x[S.id]=w,w}}}let pa=0;function shadowCastingLightsFirst(x,S){return(S.castShadow?1:0)-(x.castShadow?1:0)}function WebGLLights(x,S){const w=new UniformsCache,U=function ShadowUniformsCache(){const x={};return{get:function(S){if(void 0!==x[S.id])return x[S.id];let w;switch(S.type){case"DirectionalLight":case"SpotLight":w={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Vector2};break;case"PointLight":w={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Vector2,shadowCameraNear:1,shadowCameraFar:1e3}}return x[S.id]=w,w}}}(),G={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadow:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[]};for(let x=0;x<9;x++)G.probe.push(new Vector3);const H=new Vector3,z=new Matrix4,j=new Matrix4;return{setup:function setup(H,z){let j=0,X=0,K=0;for(let x=0;x<9;x++)G.probe[x].set(0,0,0);let q=0,Y=0,Z=0,J=0,Q=0,ee=0,te=0,ne=0;H.sort(shadowCastingLightsFirst);const ie=!0!==z?Math.PI:1;for(let x=0,S=H.length;x0&&(S.isWebGL2||!0===x.has("OES_texture_float_linear")?(G.rectAreaLTC1=Do.LTC_FLOAT_1,G.rectAreaLTC2=Do.LTC_FLOAT_2):!0===x.has("OES_texture_half_float_linear")?(G.rectAreaLTC1=Do.LTC_HALF_1,G.rectAreaLTC2=Do.LTC_HALF_2):console.error("THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.")),G.ambient[0]=j,G.ambient[1]=X,G.ambient[2]=K;const re=G.hash;re.directionalLength===q&&re.pointLength===Y&&re.spotLength===Z&&re.rectAreaLength===J&&re.hemiLength===Q&&re.numDirectionalShadows===ee&&re.numPointShadows===te&&re.numSpotShadows===ne||(G.directional.length=q,G.spot.length=Z,G.rectArea.length=J,G.point.length=Y,G.hemi.length=Q,G.directionalShadow.length=ee,G.directionalShadowMap.length=ee,G.pointShadow.length=te,G.pointShadowMap.length=te,G.spotShadow.length=ne,G.spotShadowMap.length=ne,G.directionalShadowMatrix.length=ee,G.pointShadowMatrix.length=te,G.spotShadowMatrix.length=ne,re.directionalLength=q,re.pointLength=Y,re.spotLength=Z,re.rectAreaLength=J,re.hemiLength=Q,re.numDirectionalShadows=ee,re.numPointShadows=te,re.numSpotShadows=ne,G.version=pa++)},setupView:function setupView(x,S){let w=0,U=0,X=0,K=0,q=0;const Y=S.matrixWorldInverse;for(let S=0,Z=x.length;S=w.get(U).length?(H=new WebGLRenderState(x,S),w.get(U).push(H)):H=w.get(U)[G],H},dispose:function dispose(){w=new WeakMap}}}class MeshDepthMaterial extends Material{constructor(x){super(),this.type="MeshDepthMaterial",this.depthPacking=ri,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.setValues(x)}copy(x){return super.copy(x),this.depthPacking=x.depthPacking,this.map=x.map,this.alphaMap=x.alphaMap,this.displacementMap=x.displacementMap,this.displacementScale=x.displacementScale,this.displacementBias=x.displacementBias,this.wireframe=x.wireframe,this.wireframeLinewidth=x.wireframeLinewidth,this}}MeshDepthMaterial.prototype.isMeshDepthMaterial=!0;class MeshDistanceMaterial extends Material{constructor(x){super(),this.type="MeshDistanceMaterial",this.referencePosition=new Vector3,this.nearDistance=1,this.farDistance=1e3,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.fog=!1,this.setValues(x)}copy(x){return super.copy(x),this.referencePosition.copy(x.referencePosition),this.nearDistance=x.nearDistance,this.farDistance=x.farDistance,this.map=x.map,this.alphaMap=x.alphaMap,this.displacementMap=x.displacementMap,this.displacementScale=x.displacementScale,this.displacementBias=x.displacementBias,this}}MeshDistanceMaterial.prototype.isMeshDistanceMaterial=!0;function WebGLShadowMap(x,S,w){let U=new Frustum;const G=new Vector2,H=new Vector2,z=new Vector4,j=new MeshDepthMaterial({depthPacking:oi}),X=new MeshDistanceMaterial,K={},q=w.maxTextureSize,Z={0:ee,1:Q,2:te},ne=new ShaderMaterial({uniforms:{shadow_pass:{value:null},resolution:{value:new Vector2},radius:{value:4},samples:{value:8}},vertexShader:"void main() {\n\tgl_Position = vec4( position, 1.0 );\n}",fragmentShader:"uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\nuniform float samples;\n#include \nvoid main() {\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\n\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\n\tfor ( float i = 0.0; i < samples; i ++ ) {\n\t\tfloat uvOffset = uvStart + i * uvStride;\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean / samples;\n\tsquared_mean = squared_mean / samples;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"}),ie=ne.clone();ie.defines.HORIZONTAL_PASS=1;const oe=new BufferGeometry;oe.setAttribute("position",new BufferAttribute(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const ae=new Mesh(oe,ne),se=this;function VSMPass(w,U){const G=S.update(ae);ne.uniforms.shadow_pass.value=w.map.texture,ne.uniforms.resolution.value=w.mapSize,ne.uniforms.radius.value=w.radius,ne.uniforms.samples.value=w.blurSamples,x.setRenderTarget(w.mapPass),x.clear(),x.renderBufferDirect(U,null,G,ne,ae,null),ie.uniforms.shadow_pass.value=w.mapPass.texture,ie.uniforms.resolution.value=w.mapSize,ie.uniforms.radius.value=w.radius,ie.uniforms.samples.value=w.blurSamples,x.setRenderTarget(w.map),x.clear(),x.renderBufferDirect(U,null,G,ie,ae,null)}function getDepthMaterial(S,w,U,G,H,z,q){let Y=null;const Q=!0===G.isPointLight?S.customDistanceMaterial:S.customDepthMaterial;if(Y=void 0!==Q?Q:!0===G.isPointLight?X:j,x.localClippingEnabled&&!0===U.clipShadows&&0!==U.clippingPlanes.length||U.displacementMap&&0!==U.displacementScale||U.alphaMap&&U.alphaTest>0){const x=Y.uuid,S=U.uuid;let w=K[x];void 0===w&&(w={},K[x]=w);let G=w[S];void 0===G&&(G=Y.clone(),w[S]=G),Y=G}return Y.visible=U.visible,Y.wireframe=U.wireframe,Y.side=q===J?null!==U.shadowSide?U.shadowSide:U.side:null!==U.shadowSide?U.shadowSide:Z[U.side],Y.alphaMap=U.alphaMap,Y.alphaTest=U.alphaTest,Y.clipShadows=U.clipShadows,Y.clippingPlanes=U.clippingPlanes,Y.clipIntersection=U.clipIntersection,Y.displacementMap=U.displacementMap,Y.displacementScale=U.displacementScale,Y.displacementBias=U.displacementBias,Y.wireframeLinewidth=U.wireframeLinewidth,Y.linewidth=U.linewidth,!0===G.isPointLight&&!0===Y.isMeshDistanceMaterial&&(Y.referencePosition.setFromMatrixPosition(G.matrixWorld),Y.nearDistance=H,Y.farDistance=z),Y}function renderObject(w,G,H,z,j){if(!1===w.visible)return;if(w.layers.test(G.layers)&&(w.isMesh||w.isLine||w.isPoints)&&(w.castShadow||w.receiveShadow&&j===J)&&(!w.frustumCulled||U.intersectsObject(w))){w.modelViewMatrix.multiplyMatrices(H.matrixWorldInverse,w.matrixWorld);const U=S.update(w),G=w.material;if(Array.isArray(G)){const S=U.groups;for(let X=0,K=S.length;Xq||G.y>q)&&(G.x>q&&(H.x=Math.floor(q/Q.x),G.x=H.x*Q.x,Y.mapSize.x=H.x),G.y>q&&(H.y=Math.floor(q/Q.y),G.y=H.y*Q.y,Y.mapSize.y=H.y)),null===Y.map&&!Y.isPointLightShadow&&this.type===J){const x={minFilter:rt,magFilter:rt,format:Tt};Y.map=new WebGLRenderTarget(G.x,G.y,x),Y.map.texture.name=K.name+".shadowMap",Y.mapPass=new WebGLRenderTarget(G.x,G.y,x),Y.camera.updateProjectionMatrix()}if(null===Y.map){const x={minFilter:Qe,magFilter:Qe,format:Tt};Y.map=new WebGLRenderTarget(G.x,G.y,x),Y.map.texture.name=K.name+".shadowMap",Y.camera.updateProjectionMatrix()}x.setRenderTarget(Y.map),x.clear();const ee=Y.getViewportCount();for(let x=0;x=1):-1!==Ke.indexOf("OpenGL ES")&&(Xe=parseFloat(/^OpenGL ES (\d)/.exec(Ke)[1]),je=Xe>=2);let qe=null,Ye={};const Ze=x.getParameter(3088),Je=x.getParameter(2978),Qe=(new Vector4).fromArray(Ze),et=(new Vector4).fromArray(Je);function createTexture(S,w,U){const G=new Uint8Array(4),H=x.createTexture();x.bindTexture(S,H),x.texParameteri(S,10241,9728),x.texParameteri(S,10240,9728);for(let S=0;SU||x.height>U)&&(G=U/Math.max(x.width,x.height)),G<1||!0===S){if("undefined"!=typeof HTMLImageElement&&x instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&x instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&x instanceof ImageBitmap){const U=S?floorPowerOfTwo:Math.floor,H=U(G*x.width),z=U(G*x.height);void 0===J&&(J=createCanvas(H,z));const j=w?createCanvas(H,z):J;j.width=H,j.height=z;return j.getContext("2d").drawImage(x,0,0,H,z),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+x.width+"x"+x.height+") to ("+H+"x"+z+")."),j}return"data"in x&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+x.width+"x"+x.height+")."),x}return x}function isPowerOfTwo$1(x){return isPowerOfTwo(x.width)&&isPowerOfTwo(x.height)}function textureNeedsGenerateMipmaps(x,S){return x.generateMipmaps&&S&&x.minFilter!==Qe&&x.minFilter!==rt}function generateMipmap(S,w,G,H,z=1){x.generateMipmap(S);U.get(w).__maxMipLevel=Math.log2(Math.max(G,H,z))}function getInternalFormat(w,U,G,H){if(!1===j)return U;if(null!==w){if(void 0!==x[w])return x[w];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+w+"'")}let z=U;return 6403===U&&(5126===G&&(z=33326),5131===G&&(z=33325),5121===G&&(z=33321)),6407===U&&(5126===G&&(z=34837),5131===G&&(z=34843),5121===G&&(z=32849)),6408===U&&(5126===G&&(z=34836),5131===G&&(z=34842),5121===G&&(z=H===Kn?35907:32856)),33325!==z&&33326!==z&&34842!==z&&34836!==z||S.get("EXT_color_buffer_float"),z}function filterFallback(x){return x===Qe||x===et||x===nt?9728:9729}function onTextureDispose(S){const w=S.target;w.removeEventListener("dispose",onTextureDispose),function deallocateTexture(S){const w=U.get(S);if(void 0===w.__webglInit)return;x.deleteTexture(w.__webglTexture),U.remove(S)}(w),w.isVideoTexture&&Z.delete(w),z.memory.textures--}function onRenderTargetDispose(S){const w=S.target;w.removeEventListener("dispose",onRenderTargetDispose),function deallocateRenderTarget(S){const w=S.texture,G=U.get(S),H=U.get(w);if(!S)return;void 0!==H.__webglTexture&&(x.deleteTexture(H.__webglTexture),z.memory.textures--);S.depthTexture&&S.depthTexture.dispose();if(S.isWebGLCubeRenderTarget)for(let S=0;S<6;S++)x.deleteFramebuffer(G.__webglFramebuffer[S]),G.__webglDepthbuffer&&x.deleteRenderbuffer(G.__webglDepthbuffer[S]);else x.deleteFramebuffer(G.__webglFramebuffer),G.__webglDepthbuffer&&x.deleteRenderbuffer(G.__webglDepthbuffer),G.__webglMultisampledFramebuffer&&x.deleteFramebuffer(G.__webglMultisampledFramebuffer),G.__webglColorRenderbuffer&&x.deleteRenderbuffer(G.__webglColorRenderbuffer),G.__webglDepthRenderbuffer&&x.deleteRenderbuffer(G.__webglDepthRenderbuffer);if(S.isWebGLMultipleRenderTargets)for(let S=0,G=w.length;S0&&G.__version!==x.version){const w=x.image;if(void 0===w)console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined");else{if(!1!==w.complete)return void uploadTexture(G,x,S);console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete")}}w.activeTexture(33984+S),w.bindTexture(3553,G.__webglTexture)}function setTextureCube(S,G){const z=U.get(S);S.version>0&&z.__version!==S.version?function uploadCubeTexture(S,U,G){if(6!==U.image.length)return;initTexture(S,U),w.activeTexture(33984+G),w.bindTexture(34067,S.__webglTexture),x.pixelStorei(37440,U.flipY),x.pixelStorei(37441,U.premultiplyAlpha),x.pixelStorei(3317,U.unpackAlignment),x.pixelStorei(37443,0);const z=U&&(U.isCompressedTexture||U.image[0].isCompressedTexture),X=U.image[0]&&U.image[0].isDataTexture,q=[];for(let x=0;x<6;x++)q[x]=z||X?X?U.image[x].image:U.image[x]:resizeImage(U.image[x],!1,!0,K);const Y=q[0],Z=isPowerOfTwo$1(Y)||j,J=H.convert(U.format),Q=H.convert(U.type),ee=getInternalFormat(U.internalFormat,J,Q,U.encoding);let te;if(setTextureParameters(34067,U,Z),z){for(let x=0;x<6;x++){te=q[x].mipmaps;for(let S=0;S1||U.get(H).__currentAnisotropy)&&(x.texParameterf(w,z.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(H.anisotropy,G.getMaxAnisotropy())),U.get(H).__currentAnisotropy=H.anisotropy)}}function initTexture(S,w){void 0===S.__webglInit&&(S.__webglInit=!0,w.addEventListener("dispose",onTextureDispose),S.__webglTexture=x.createTexture(),z.memory.textures++)}function uploadTexture(S,U,G){let z=3553;U.isDataTexture2DArray&&(z=35866),U.isDataTexture3D&&(z=32879),initTexture(S,U),w.activeTexture(33984+G),w.bindTexture(z,S.__webglTexture),x.pixelStorei(37440,U.flipY),x.pixelStorei(37441,U.premultiplyAlpha),x.pixelStorei(3317,U.unpackAlignment),x.pixelStorei(37443,0);const X=function textureNeedsPowerOfTwo(x){return!j&&(x.wrapS!==Ze||x.wrapT!==Ze||x.minFilter!==Qe&&x.minFilter!==rt)}(U)&&!1===isPowerOfTwo$1(U.image),K=resizeImage(U.image,X,!1,q),Y=isPowerOfTwo$1(K)||j,Z=H.convert(U.format);let J,Q=H.convert(U.type),ee=getInternalFormat(U.internalFormat,Z,Q,U.encoding);setTextureParameters(z,U,Y);const te=U.mipmaps;if(U.isDepthTexture)ee=6402,j?ee=U.type===gt?36012:U.type===ft?33190:U.type===xt?35056:33189:U.type===gt&&console.error("WebGLRenderer: Floating point depth texture requires WebGL2."),U.format===Mt&&6402===ee&&U.type!==pt&&U.type!==ft&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),U.type=pt,Q=H.convert(U.type)),U.format===Rt&&6402===ee&&(ee=34041,U.type!==xt&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),U.type=xt,Q=H.convert(U.type))),w.texImage2D(3553,0,ee,K.width,K.height,0,Z,Q,null);else if(U.isDataTexture)if(te.length>0&&Y){for(let x=0,S=te.length;x0&&Y){for(let x=0,S=te.length;x=X&&console.warn("THREE.WebGLTextures: Trying to use "+x+" texture units while this GPU supports only "+X),ee+=1,x},this.resetTextureUnits=function resetTextureUnits(){ee=0},this.setTexture2D=setTexture2D,this.setTexture2DArray=function setTexture2DArray(x,S){const G=U.get(x);x.version>0&&G.__version!==x.version?uploadTexture(G,x,S):(w.activeTexture(33984+S),w.bindTexture(35866,G.__webglTexture))},this.setTexture3D=function setTexture3D(x,S){const G=U.get(x);x.version>0&&G.__version!==x.version?uploadTexture(G,x,S):(w.activeTexture(33984+S),w.bindTexture(32879,G.__webglTexture))},this.setTextureCube=setTextureCube,this.setupRenderTarget=function setupRenderTarget(S){const X=S.texture,K=U.get(S),q=U.get(X);S.addEventListener("dispose",onRenderTargetDispose),!0!==S.isWebGLMultipleRenderTargets&&(q.__webglTexture=x.createTexture(),q.__version=X.version,z.memory.textures++);const Y=!0===S.isWebGLCubeRenderTarget,Z=!0===S.isWebGLMultipleRenderTargets,J=!0===S.isWebGLMultisampleRenderTarget,Q=X.isDataTexture3D||X.isDataTexture2DArray,ee=isPowerOfTwo$1(S)||j;if(!j||X.format!==St||X.type!==gt&&X.type!==vt||(X.format=Tt,console.warn("THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.")),Y){K.__webglFramebuffer=[];for(let S=0;S<6;S++)K.__webglFramebuffer[S]=x.createFramebuffer()}else if(K.__webglFramebuffer=x.createFramebuffer(),Z)if(G.drawBuffers){const w=S.texture;for(let S=0,G=w.length;Sj+K?(X.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:x.handedness,target:this})):!X.inputState.pinching&&z<=j-K&&(X.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:x.handedness,target:this}))}else null!==j&&x.gripSpace&&(G=S.getPose(x.gripSpace,w),null!==G&&(j.matrix.fromArray(G.transform.matrix),j.matrix.decompose(j.position,j.rotation,j.scale),G.linearVelocity?(j.hasLinearVelocity=!0,j.linearVelocity.copy(G.linearVelocity)):j.hasLinearVelocity=!1,G.angularVelocity?(j.hasAngularVelocity=!0,j.angularVelocity.copy(G.angularVelocity)):j.hasAngularVelocity=!1));return null!==z&&(z.visible=null!==U),null!==j&&(j.visible=null!==G),null!==X&&(X.visible=null!==H),this}}class WebXRManager extends EventDispatcher{constructor(x,S){super();const w=this,U=x.state;let G=null,H=1,z=null,j="local-floor",X=null,K=null,q=null,Y=null,Z=null,J=!1,Q=null,ee=null,te=null,ne=null,ie=null,re=null;const oe=[],ae=new Map,se=new PerspectiveCamera;se.layers.enable(1),se.viewport=new Vector4;const le=new PerspectiveCamera;le.layers.enable(2),le.viewport=new Vector4;const ce=[se,le],ue=new ArrayCamera;ue.layers.enable(1),ue.layers.enable(2);let he=null,de=null;function onSessionEvent(x){const S=ae.get(x.inputSource);S&&S.dispatchEvent({type:x.type,data:x.inputSource})}function onSessionEnd(){ae.forEach((function(x,S){x.disconnect(S)})),ae.clear(),he=null,de=null,U.bindXRFramebuffer(null),x.setRenderTarget(x.getRenderTarget()),q&&S.deleteFramebuffer(q),Q&&S.deleteFramebuffer(Q),ee&&S.deleteRenderbuffer(ee),te&&S.deleteRenderbuffer(te),q=null,Q=null,ee=null,te=null,Z=null,Y=null,K=null,G=null,ge.stop(),w.isPresenting=!1,w.dispatchEvent({type:"sessionend"})}function onInputSourcesChange(x){const S=G.inputSources;for(let x=0;x0&&(S.alphaTest.value=w.alphaTest);const U=x.get(w).envMap;if(U){S.envMap.value=U,S.flipEnvMap.value=U.isCubeTexture&&!1===U.isRenderTargetTexture?-1:1,S.reflectivity.value=w.reflectivity,S.ior.value=w.ior,S.refractionRatio.value=w.refractionRatio;const G=x.get(U).__maxMipLevel;void 0!==G&&(S.maxMipLevel.value=G)}let G,H;w.lightMap&&(S.lightMap.value=w.lightMap,S.lightMapIntensity.value=w.lightMapIntensity),w.aoMap&&(S.aoMap.value=w.aoMap,S.aoMapIntensity.value=w.aoMapIntensity),w.map?G=w.map:w.specularMap?G=w.specularMap:w.displacementMap?G=w.displacementMap:w.normalMap?G=w.normalMap:w.bumpMap?G=w.bumpMap:w.roughnessMap?G=w.roughnessMap:w.metalnessMap?G=w.metalnessMap:w.alphaMap?G=w.alphaMap:w.emissiveMap?G=w.emissiveMap:w.clearcoatMap?G=w.clearcoatMap:w.clearcoatNormalMap?G=w.clearcoatNormalMap:w.clearcoatRoughnessMap?G=w.clearcoatRoughnessMap:w.specularIntensityMap?G=w.specularIntensityMap:w.specularTintMap?G=w.specularTintMap:w.transmissionMap?G=w.transmissionMap:w.thicknessMap&&(G=w.thicknessMap),void 0!==G&&(G.isWebGLRenderTarget&&(G=G.texture),!0===G.matrixAutoUpdate&&G.updateMatrix(),S.uvTransform.value.copy(G.matrix)),w.aoMap?H=w.aoMap:w.lightMap&&(H=w.lightMap),void 0!==H&&(H.isWebGLRenderTarget&&(H=H.texture),!0===H.matrixAutoUpdate&&H.updateMatrix(),S.uv2Transform.value.copy(H.matrix))}function refreshUniformsStandard(S,w){S.roughness.value=w.roughness,S.metalness.value=w.metalness,w.roughnessMap&&(S.roughnessMap.value=w.roughnessMap),w.metalnessMap&&(S.metalnessMap.value=w.metalnessMap),w.emissiveMap&&(S.emissiveMap.value=w.emissiveMap),w.bumpMap&&(S.bumpMap.value=w.bumpMap,S.bumpScale.value=w.bumpScale,w.side===ee&&(S.bumpScale.value*=-1)),w.normalMap&&(S.normalMap.value=w.normalMap,S.normalScale.value.copy(w.normalScale),w.side===ee&&S.normalScale.value.negate()),w.displacementMap&&(S.displacementMap.value=w.displacementMap,S.displacementScale.value=w.displacementScale,S.displacementBias.value=w.displacementBias);x.get(w).envMap&&(S.envMapIntensity.value=w.envMapIntensity)}return{refreshFogUniforms:function refreshFogUniforms(x,S){x.fogColor.value.copy(S.color),S.isFog?(x.fogNear.value=S.near,x.fogFar.value=S.far):S.isFogExp2&&(x.fogDensity.value=S.density)},refreshMaterialUniforms:function refreshMaterialUniforms(x,S,w,U,G){S.isMeshBasicMaterial?refreshUniformsCommon(x,S):S.isMeshLambertMaterial?(refreshUniformsCommon(x,S),function refreshUniformsLambert(x,S){S.emissiveMap&&(x.emissiveMap.value=S.emissiveMap)}(x,S)):S.isMeshToonMaterial?(refreshUniformsCommon(x,S),function refreshUniformsToon(x,S){S.gradientMap&&(x.gradientMap.value=S.gradientMap);S.emissiveMap&&(x.emissiveMap.value=S.emissiveMap);S.bumpMap&&(x.bumpMap.value=S.bumpMap,x.bumpScale.value=S.bumpScale,S.side===ee&&(x.bumpScale.value*=-1));S.normalMap&&(x.normalMap.value=S.normalMap,x.normalScale.value.copy(S.normalScale),S.side===ee&&x.normalScale.value.negate());S.displacementMap&&(x.displacementMap.value=S.displacementMap,x.displacementScale.value=S.displacementScale,x.displacementBias.value=S.displacementBias)}(x,S)):S.isMeshPhongMaterial?(refreshUniformsCommon(x,S),function refreshUniformsPhong(x,S){x.specular.value.copy(S.specular),x.shininess.value=Math.max(S.shininess,1e-4),S.emissiveMap&&(x.emissiveMap.value=S.emissiveMap);S.bumpMap&&(x.bumpMap.value=S.bumpMap,x.bumpScale.value=S.bumpScale,S.side===ee&&(x.bumpScale.value*=-1));S.normalMap&&(x.normalMap.value=S.normalMap,x.normalScale.value.copy(S.normalScale),S.side===ee&&x.normalScale.value.negate());S.displacementMap&&(x.displacementMap.value=S.displacementMap,x.displacementScale.value=S.displacementScale,x.displacementBias.value=S.displacementBias)}(x,S)):S.isMeshStandardMaterial?(refreshUniformsCommon(x,S),S.isMeshPhysicalMaterial?function refreshUniformsPhysical(x,S,w){refreshUniformsStandard(x,S),x.ior.value=S.ior,S.sheen>0&&(x.sheenTint.value.copy(S.sheenTint).multiplyScalar(S.sheen),x.sheenRoughness.value=S.sheenRoughness);S.clearcoat>0&&(x.clearcoat.value=S.clearcoat,x.clearcoatRoughness.value=S.clearcoatRoughness,S.clearcoatMap&&(x.clearcoatMap.value=S.clearcoatMap),S.clearcoatRoughnessMap&&(x.clearcoatRoughnessMap.value=S.clearcoatRoughnessMap),S.clearcoatNormalMap&&(x.clearcoatNormalScale.value.copy(S.clearcoatNormalScale),x.clearcoatNormalMap.value=S.clearcoatNormalMap,S.side===ee&&x.clearcoatNormalScale.value.negate()));S.transmission>0&&(x.transmission.value=S.transmission,x.transmissionSamplerMap.value=w.texture,x.transmissionSamplerSize.value.set(w.width,w.height),S.transmissionMap&&(x.transmissionMap.value=S.transmissionMap),x.thickness.value=S.thickness,S.thicknessMap&&(x.thicknessMap.value=S.thicknessMap),x.attenuationDistance.value=S.attenuationDistance,x.attenuationTint.value.copy(S.attenuationTint));x.specularIntensity.value=S.specularIntensity,x.specularTint.value.copy(S.specularTint),S.specularIntensityMap&&(x.specularIntensityMap.value=S.specularIntensityMap);S.specularTintMap&&(x.specularTintMap.value=S.specularTintMap)}(x,S,G):refreshUniformsStandard(x,S)):S.isMeshMatcapMaterial?(refreshUniformsCommon(x,S),function refreshUniformsMatcap(x,S){S.matcap&&(x.matcap.value=S.matcap);S.bumpMap&&(x.bumpMap.value=S.bumpMap,x.bumpScale.value=S.bumpScale,S.side===ee&&(x.bumpScale.value*=-1));S.normalMap&&(x.normalMap.value=S.normalMap,x.normalScale.value.copy(S.normalScale),S.side===ee&&x.normalScale.value.negate());S.displacementMap&&(x.displacementMap.value=S.displacementMap,x.displacementScale.value=S.displacementScale,x.displacementBias.value=S.displacementBias)}(x,S)):S.isMeshDepthMaterial?(refreshUniformsCommon(x,S),function refreshUniformsDepth(x,S){S.displacementMap&&(x.displacementMap.value=S.displacementMap,x.displacementScale.value=S.displacementScale,x.displacementBias.value=S.displacementBias)}(x,S)):S.isMeshDistanceMaterial?(refreshUniformsCommon(x,S),function refreshUniformsDistance(x,S){S.displacementMap&&(x.displacementMap.value=S.displacementMap,x.displacementScale.value=S.displacementScale,x.displacementBias.value=S.displacementBias);x.referencePosition.value.copy(S.referencePosition),x.nearDistance.value=S.nearDistance,x.farDistance.value=S.farDistance}(x,S)):S.isMeshNormalMaterial?(refreshUniformsCommon(x,S),function refreshUniformsNormal(x,S){S.bumpMap&&(x.bumpMap.value=S.bumpMap,x.bumpScale.value=S.bumpScale,S.side===ee&&(x.bumpScale.value*=-1));S.normalMap&&(x.normalMap.value=S.normalMap,x.normalScale.value.copy(S.normalScale),S.side===ee&&x.normalScale.value.negate());S.displacementMap&&(x.displacementMap.value=S.displacementMap,x.displacementScale.value=S.displacementScale,x.displacementBias.value=S.displacementBias)}(x,S)):S.isLineBasicMaterial?(!function refreshUniformsLine(x,S){x.diffuse.value.copy(S.color),x.opacity.value=S.opacity}(x,S),S.isLineDashedMaterial&&function refreshUniformsDash(x,S){x.dashSize.value=S.dashSize,x.totalSize.value=S.dashSize+S.gapSize,x.scale.value=S.scale}(x,S)):S.isPointsMaterial?function refreshUniformsPoints(x,S,w,U){x.diffuse.value.copy(S.color),x.opacity.value=S.opacity,x.size.value=S.size*w,x.scale.value=.5*U,S.map&&(x.map.value=S.map);S.alphaMap&&(x.alphaMap.value=S.alphaMap);S.alphaTest>0&&(x.alphaTest.value=S.alphaTest);let G;S.map?G=S.map:S.alphaMap&&(G=S.alphaMap);void 0!==G&&(!0===G.matrixAutoUpdate&&G.updateMatrix(),x.uvTransform.value.copy(G.matrix))}(x,S,w,U):S.isSpriteMaterial?function refreshUniformsSprites(x,S){x.diffuse.value.copy(S.color),x.opacity.value=S.opacity,x.rotation.value=S.rotation,S.map&&(x.map.value=S.map);S.alphaMap&&(x.alphaMap.value=S.alphaMap);S.alphaTest>0&&(x.alphaTest.value=S.alphaTest);let w;S.map?w=S.map:S.alphaMap&&(w=S.alphaMap);void 0!==w&&(!0===w.matrixAutoUpdate&&w.updateMatrix(),x.uvTransform.value.copy(w.matrix))}(x,S):S.isShadowMaterial?(x.color.value.copy(S.color),x.opacity.value=S.opacity):S.isShaderMaterial&&(S.uniformsNeedUpdate=!1)}}}function WebGLRenderer(x={}){const S=void 0!==x.canvas?x.canvas:function createCanvasElement(){const x=createElementNS("canvas");return x.style.display="block",x}(),w=void 0!==x.context?x.context:null,U=void 0!==x.alpha&&x.alpha,G=void 0===x.depth||x.depth,H=void 0===x.stencil||x.stencil,z=void 0!==x.antialias&&x.antialias,j=void 0===x.premultipliedAlpha||x.premultipliedAlpha,X=void 0!==x.preserveDrawingBuffer&&x.preserveDrawingBuffer,K=void 0!==x.powerPreference?x.powerPreference:"default",q=void 0!==x.failIfMajorPerformanceCaveat&&x.failIfMajorPerformanceCaveat;let Y=null,Z=null;const J=[],ne=[];this.domElement=S,this.debug={checkShaderErrors:!0},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.gammaFactor=2,this.outputEncoding=Xn,this.physicallyCorrectLights=!1,this.toneMapping=De,this.toneMappingExposure=1;const ie=this;let re=!1,oe=0,ae=0,se=null,le=-1,ce=null;const ue=new Vector4,he=new Vector4;let de=null,pe=S.width,me=S.height,fe=1,ge=null,ve=null;const _e=new Vector4(0,0,pe,me),ye=new Vector4(0,0,pe,me);let be=!1;const xe=[],Ee=new Frustum;let Se=!1,Te=!1,we=null;const Ce=new Matrix4,Ae=new Vector3,Me={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};function getTargetPixelRatio(){return null===se?fe:1}let Re,Le,Ie,Pe,Fe,Oe,Ne,Be,ke,Ue,Ge,Ve,He,We,$e,ze,je,Xe,Ke,qe,Ye,Je,et,tt=w;function getContext(x,w){for(let U=0;U0&&function renderTransmissionPass(x,S,w){if(null===we){const x=!0===z&&!0===Le.isWebGL2;we=new(x?WebGLMultisampleRenderTarget:WebGLRenderTarget)(1024,1024,{generateMipmaps:!0,type:null!==Je.convert(vt)?vt:ct,minFilter:st,magFilter:Qe,wrapS:Ze,wrapT:Ze})}const U=ie.getRenderTarget();ie.setRenderTarget(we),ie.clear();const G=ie.toneMapping;ie.toneMapping=De,renderObjects(x,S,w),ie.toneMapping=G,Oe.updateMultisampleRenderTarget(we),Oe.updateRenderTargetMipmap(we),ie.setRenderTarget(U)}(G,S,w),U&&Ie.viewport(ue.copy(U)),G.length>0&&renderObjects(G,S,w),H.length>0&&renderObjects(H,S,w),j.length>0&&renderObjects(j,S,w)}function renderObjects(x,S,w){const U=!0===S.isScene?S.overrideMaterial:null;for(let G=0,H=x.length;G0?ne[ne.length-1]:null,J.pop(),Y=J.length>0?J[J.length-1]:null},this.getActiveCubeFace=function(){return oe},this.getActiveMipmapLevel=function(){return ae},this.getRenderTarget=function(){return se},this.setRenderTarget=function(x,S=0,w=0){se=x,oe=S,ae=w,x&&void 0===Fe.get(x).__webglFramebuffer&&Oe.setupRenderTarget(x);let U=null,G=!1,H=!1;if(x){const w=x.texture;(w.isDataTexture3D||w.isDataTexture2DArray)&&(H=!0);const z=Fe.get(x).__webglFramebuffer;x.isWebGLCubeRenderTarget?(U=z[S],G=!0):U=x.isWebGLMultisampleRenderTarget?Fe.get(x).__webglMultisampledFramebuffer:z,ue.copy(x.viewport),he.copy(x.scissor),de=x.scissorTest}else ue.copy(_e).multiplyScalar(fe).floor(),he.copy(ye).multiplyScalar(fe).floor(),de=be;if(Ie.bindFramebuffer(36160,U)&&Le.drawBuffers){let S=!1;if(x)if(x.isWebGLMultipleRenderTargets){const w=x.texture;if(xe.length!==w.length||36064!==xe[0]){for(let x=0,S=w.length;x=0&&S<=x.width-U&&w>=0&&w<=x.height-G&&tt.readPixels(S,w,U,G,Je.convert(j),Je.convert(X),H):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.")}finally{const x=null!==se?Fe.get(se).__webglFramebuffer:null;Ie.bindFramebuffer(36160,x)}}},this.copyFramebufferToTexture=function(x,S,w=0){const U=Math.pow(2,-w),G=Math.floor(S.image.width*U),H=Math.floor(S.image.height*U);let z=Je.convert(S.format);Le.isWebGL2&&(6407===z&&(z=32849),6408===z&&(z=32856)),Oe.setTexture2D(S,0),tt.copyTexImage2D(3553,w,z,x.x,x.y,G,H,0),Ie.unbindTexture()},this.copyTextureToTexture=function(x,S,w,U=0){const G=S.image.width,H=S.image.height,z=Je.convert(w.format),j=Je.convert(w.type);Oe.setTexture2D(w,0),tt.pixelStorei(37440,w.flipY),tt.pixelStorei(37441,w.premultiplyAlpha),tt.pixelStorei(3317,w.unpackAlignment),S.isDataTexture?tt.texSubImage2D(3553,U,x.x,x.y,G,H,z,j,S.image.data):S.isCompressedTexture?tt.compressedTexSubImage2D(3553,U,x.x,x.y,S.mipmaps[0].width,S.mipmaps[0].height,z,S.mipmaps[0].data):tt.texSubImage2D(3553,U,x.x,x.y,z,j,S.image),0===U&&w.generateMipmaps&&tt.generateMipmap(3553),Ie.unbindTexture()},this.copyTextureToTexture3D=function(x,S,w,U,G=0){if(ie.isWebGL1Renderer)return void console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.");const H=x.max.x-x.min.x+1,z=x.max.y-x.min.y+1,j=x.max.z-x.min.z+1,X=Je.convert(U.format),K=Je.convert(U.type);let q;if(U.isDataTexture3D)Oe.setTexture3D(U,0),q=32879;else{if(!U.isDataTexture2DArray)return void console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.");Oe.setTexture2DArray(U,0),q=35866}tt.pixelStorei(37440,U.flipY),tt.pixelStorei(37441,U.premultiplyAlpha),tt.pixelStorei(3317,U.unpackAlignment);const Y=tt.getParameter(3314),Z=tt.getParameter(32878),J=tt.getParameter(3316),Q=tt.getParameter(3315),ee=tt.getParameter(32877),te=w.isCompressedTexture?w.mipmaps[0]:w.image;tt.pixelStorei(3314,te.width),tt.pixelStorei(32878,te.height),tt.pixelStorei(3316,x.min.x),tt.pixelStorei(3315,x.min.y),tt.pixelStorei(32877,x.min.z),w.isDataTexture||w.isDataTexture3D?tt.texSubImage3D(q,G,S.x,S.y,S.z,H,z,j,X,K,te.data):w.isCompressedTexture?(console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture."),tt.compressedTexSubImage3D(q,G,S.x,S.y,S.z,H,z,j,X,te.data)):tt.texSubImage3D(q,G,S.x,S.y,S.z,H,z,j,X,K,te),tt.pixelStorei(3314,Y),tt.pixelStorei(32878,Z),tt.pixelStorei(3316,J),tt.pixelStorei(3315,Q),tt.pixelStorei(32877,ee),0===G&&U.generateMipmaps&&tt.generateMipmap(q),Ie.unbindTexture()},this.initTexture=function(x){Oe.setTexture2D(x,0),Ie.unbindTexture()},this.resetState=function(){oe=0,ae=0,se=null,Ie.reset(),et.reset()},"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}class WebGL1Renderer extends WebGLRenderer{}WebGL1Renderer.prototype.isWebGL1Renderer=!0;class FogExp2{constructor(x,S=25e-5){this.name="",this.color=new Color(x),this.density=S}clone(){return new FogExp2(this.color,this.density)}toJSON(){return{type:"FogExp2",color:this.color.getHex(),density:this.density}}}FogExp2.prototype.isFogExp2=!0;class Fog{constructor(x,S=1,w=1e3){this.name="",this.color=new Color(x),this.near=S,this.far=w}clone(){return new Fog(this.color,this.near,this.far)}toJSON(){return{type:"Fog",color:this.color.getHex(),near:this.near,far:this.far}}}Fog.prototype.isFog=!0;class Scene extends Object3D{constructor(){super(),this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.overrideMaterial=null,this.autoUpdate=!0,"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(x,S){return super.copy(x,S),null!==x.background&&(this.background=x.background.clone()),null!==x.environment&&(this.environment=x.environment.clone()),null!==x.fog&&(this.fog=x.fog.clone()),null!==x.overrideMaterial&&(this.overrideMaterial=x.overrideMaterial.clone()),this.autoUpdate=x.autoUpdate,this.matrixAutoUpdate=x.matrixAutoUpdate,this}toJSON(x){const S=super.toJSON(x);return null!==this.fog&&(S.object.fog=this.fog.toJSON()),S}}Scene.prototype.isScene=!0;class InterleavedBuffer{constructor(x,S){this.array=x,this.stride=S,this.count=void 0!==x?x.length/S:0,this.usage=Mi,this.updateRange={offset:0,count:-1},this.version=0,this.uuid=generateUUID()}onUploadCallback(){}set needsUpdate(x){!0===x&&this.version++}setUsage(x){return this.usage=x,this}copy(x){return this.array=new x.array.constructor(x.array),this.count=x.count,this.stride=x.stride,this.usage=x.usage,this}copyAt(x,S,w){x*=this.stride,w*=S.stride;for(let U=0,G=this.stride;Ux.far||S.push({distance:j,point:va.clone(),uv:Triangle.getUV(va,Sa,Ta,wa,Ca,Aa,Ma,new Vector2),face:null,object:this})}copy(x){return super.copy(x),void 0!==x.center&&this.center.copy(x.center),this.material=x.material,this}}function transformVertex(x,S,w,U,G,H){ba.subVectors(x,w).addScalar(.5).multiply(U),void 0!==G?(xa.x=H*ba.x-G*ba.y,xa.y=G*ba.x+H*ba.y):xa.copy(ba),x.copy(S),x.x+=xa.x,x.y+=xa.y,x.applyMatrix4(Ea)}Sprite.prototype.isSprite=!0;const Ra=new Vector3,La=new Vector3;class LOD extends Object3D{constructor(){super(),this._currentLevel=0,this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]},isLOD:{value:!0}}),this.autoUpdate=!0}copy(x){super.copy(x,!1);const S=x.levels;for(let x=0,w=S.length;x0){let w,U;for(w=1,U=S.length;w0){Ra.setFromMatrixPosition(this.matrixWorld);const w=x.ray.origin.distanceTo(Ra);this.getObjectForDistance(w).raycast(x,S)}}update(x){const S=this.levels;if(S.length>1){Ra.setFromMatrixPosition(x.matrixWorld),La.setFromMatrixPosition(this.matrixWorld);const w=Ra.distanceTo(La)/x.zoom;let U,G;for(S[0].object.visible=!0,U=1,G=S.length;U=S[U].distance;U++)S[U-1].object.visible=!1,S[U].object.visible=!0;for(this._currentLevel=U-1;Uj)continue;Y.applyMatrix4(this.matrixWorld);const Z=x.ray.origin.distanceTo(Y);Zx.far||S.push({distance:Z,point:q.clone().applyMatrix4(this.matrixWorld),index:w,face:null,faceIndex:null,object:this})}}else{for(let w=Math.max(0,H.start),U=Math.min(G.count,H.start+H.count)-1;wj)continue;Y.applyMatrix4(this.matrixWorld);const U=x.ray.origin.distanceTo(Y);Ux.far||S.push({distance:U,point:q.clone().applyMatrix4(this.matrixWorld),index:w,face:null,faceIndex:null,object:this})}}}else w.isGeometry&&console.error("THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")}updateMorphTargets(){const x=this.geometry;if(x.isBufferGeometry){const S=x.morphAttributes,w=Object.keys(S);if(w.length>0){const x=S[w[0]];if(void 0!==x){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let S=0,w=x.length;S0&&console.error("THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}}}Line.prototype.isLine=!0;const Xa=new Vector3,Ka=new Vector3;class LineSegments extends Line{constructor(x,S){super(x,S),this.type="LineSegments"}computeLineDistances(){const x=this.geometry;if(x.isBufferGeometry)if(null===x.index){const S=x.attributes.position,w=[];for(let x=0,U=S.count;x0){const x=S[w[0]];if(void 0!==x){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let S=0,w=x.length;S0&&console.error("THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}}}function testPoint(x,S,w,U,G,H,z){const j=Ya.distanceSqToPoint(x);if(jG.far)return;H.push({distance:X,distanceToRay:Math.sqrt(j),point:w,index:S,face:null,object:z})}}Points.prototype.isPoints=!0;class VideoTexture extends Texture{constructor(x,S,w,U,G,H,z,j,X){super(x,S,w,U,G,H,z,j,X),this.format=void 0!==z?z:St,this.minFilter=void 0!==H?H:rt,this.magFilter=void 0!==G?G:rt,this.generateMipmaps=!1;const K=this;"requestVideoFrameCallback"in x&&x.requestVideoFrameCallback((function updateVideo(){K.needsUpdate=!0,x.requestVideoFrameCallback(updateVideo)}))}clone(){return new this.constructor(this.image).copy(this)}update(){const x=this.image;!1==="requestVideoFrameCallback"in x&&x.readyState>=x.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}}VideoTexture.prototype.isVideoTexture=!0;class CompressedTexture extends Texture{constructor(x,S,w,U,G,H,z,j,X,K,q,Y){super(null,H,z,j,X,K,U,G,q,Y),this.image={width:S,height:w},this.mipmaps=x,this.flipY=!1,this.generateMipmaps=!1}}CompressedTexture.prototype.isCompressedTexture=!0;class CanvasTexture extends Texture{constructor(x,S,w,U,G,H,z,j,X){super(x,S,w,U,G,H,z,j,X),this.needsUpdate=!0}}CanvasTexture.prototype.isCanvasTexture=!0;class DepthTexture extends Texture{constructor(x,S,w,U,G,H,z,j,X,K){if((K=void 0!==K?K:Mt)!==Mt&&K!==Rt)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===w&&K===Mt&&(w=pt),void 0===w&&K===Rt&&(w=xt),super(null,U,G,H,z,j,K,w,X),this.image={width:x,height:S},this.magFilter=void 0!==z?z:Qe,this.minFilter=void 0!==j?j:Qe,this.flipY=!1,this.generateMipmaps=!1}}DepthTexture.prototype.isDepthTexture=!0;class CircleGeometry extends BufferGeometry{constructor(x=1,S=8,w=0,U=2*Math.PI){super(),this.type="CircleGeometry",this.parameters={radius:x,segments:S,thetaStart:w,thetaLength:U},S=Math.max(3,S);const G=[],H=[],z=[],j=[],X=new Vector3,K=new Vector2;H.push(0,0,0),z.push(0,0,1),j.push(.5,.5);for(let G=0,q=3;G<=S;G++,q+=3){const Y=w+G/S*U;X.x=x*Math.cos(Y),X.y=x*Math.sin(Y),H.push(X.x,X.y,X.z),z.push(0,0,1),K.x=(H[q]/x+1)/2,K.y=(H[q+1]/x+1)/2,j.push(K.x,K.y)}for(let x=1;x<=S;x++)G.push(x,x+1,0);this.setIndex(G),this.setAttribute("position",new Float32BufferAttribute(H,3)),this.setAttribute("normal",new Float32BufferAttribute(z,3)),this.setAttribute("uv",new Float32BufferAttribute(j,2))}static fromJSON(x){return new CircleGeometry(x.radius,x.segments,x.thetaStart,x.thetaLength)}}class CylinderGeometry extends BufferGeometry{constructor(x=1,S=1,w=1,U=8,G=1,H=!1,z=0,j=2*Math.PI){super(),this.type="CylinderGeometry",this.parameters={radiusTop:x,radiusBottom:S,height:w,radialSegments:U,heightSegments:G,openEnded:H,thetaStart:z,thetaLength:j};const X=this;U=Math.floor(U),G=Math.floor(G);const K=[],q=[],Y=[],Z=[];let J=0;const Q=[],ee=w/2;let te=0;function generateCap(w){const G=J,H=new Vector2,Q=new Vector3;let ne=0;const ie=!0===w?x:S,re=!0===w?1:-1;for(let x=1;x<=U;x++)q.push(0,ee*re,0),Y.push(0,re,0),Z.push(.5,.5),J++;const oe=J;for(let x=0;x<=U;x++){const S=x/U*j+z,w=Math.cos(S),G=Math.sin(S);Q.x=ie*G,Q.y=ee*re,Q.z=ie*w,q.push(Q.x,Q.y,Q.z),Y.push(0,re,0),H.x=.5*w+.5,H.y=.5*G*re+.5,Z.push(H.x,H.y),J++}for(let x=0;x0&&generateCap(!0),S>0&&generateCap(!1)),this.setIndex(K),this.setAttribute("position",new Float32BufferAttribute(q,3)),this.setAttribute("normal",new Float32BufferAttribute(Y,3)),this.setAttribute("uv",new Float32BufferAttribute(Z,2))}static fromJSON(x){return new CylinderGeometry(x.radiusTop,x.radiusBottom,x.height,x.radialSegments,x.heightSegments,x.openEnded,x.thetaStart,x.thetaLength)}}class ConeGeometry extends CylinderGeometry{constructor(x=1,S=1,w=8,U=1,G=!1,H=0,z=2*Math.PI){super(0,x,S,w,U,G,H,z),this.type="ConeGeometry",this.parameters={radius:x,height:S,radialSegments:w,heightSegments:U,openEnded:G,thetaStart:H,thetaLength:z}}static fromJSON(x){return new ConeGeometry(x.radius,x.height,x.radialSegments,x.heightSegments,x.openEnded,x.thetaStart,x.thetaLength)}}class PolyhedronGeometry extends BufferGeometry{constructor(x=[],S=[],w=1,U=0){super(),this.type="PolyhedronGeometry",this.parameters={vertices:x,indices:S,radius:w,detail:U};const G=[],H=[];function subdivideFace(x,S,w,U){const G=U+1,H=[];for(let U=0;U<=G;U++){H[U]=[];const z=x.clone().lerp(w,U/G),j=S.clone().lerp(w,U/G),X=G-U;for(let x=0;x<=X;x++)H[U][x]=0===x&&U===G?z:z.clone().lerp(j,x/X)}for(let x=0;x.9&&z<.1&&(S<.2&&(H[x+0]+=1),w<.2&&(H[x+2]+=1),U<.2&&(H[x+4]+=1))}}()}(),this.setAttribute("position",new Float32BufferAttribute(G,3)),this.setAttribute("normal",new Float32BufferAttribute(G.slice(),3)),this.setAttribute("uv",new Float32BufferAttribute(H,2)),0===U?this.computeVertexNormals():this.normalizeNormals()}static fromJSON(x){return new PolyhedronGeometry(x.vertices,x.indices,x.radius,x.details)}}class DodecahedronGeometry extends PolyhedronGeometry{constructor(x=1,S=0){const w=(1+Math.sqrt(5))/2,U=1/w;super([-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-U,-w,0,-U,w,0,U,-w,0,U,w,-U,-w,0,-U,w,0,U,-w,0,U,w,0,-w,0,-U,w,0,-U,-w,0,U,w,0,U],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],x,S),this.type="DodecahedronGeometry",this.parameters={radius:x,detail:S}}static fromJSON(x){return new DodecahedronGeometry(x.radius,x.detail)}}const Qa=new Vector3,es=new Vector3,ts=new Vector3,ns=new Triangle;class EdgesGeometry extends BufferGeometry{constructor(x=null,S=1){if(super(),this.type="EdgesGeometry",this.parameters={geometry:x,thresholdAngle:S},null!==x){const w=4,U=Math.pow(10,w),G=Math.cos(Gi*S),H=x.getIndex(),z=x.getAttribute("position"),j=H?H.count:z.count,X=[0,0,0],K=["a","b","c"],q=new Array(3),Y={},Z=[];for(let x=0;x0)){X=U;break}X=U-1}if(U=X,w[U]===H)return U/(G-1);const K=w[U];return(U+(H-K)/(w[U+1]-K))/(G-1)}getTangent(x,S){const w=1e-4;let U=x-w,G=x+w;U<0&&(U=0),G>1&&(G=1);const H=this.getPoint(U),z=this.getPoint(G),j=S||(H.isVector2?new Vector2:new Vector3);return j.copy(z).sub(H).normalize(),j}getTangentAt(x,S){const w=this.getUtoTmapping(x);return this.getTangent(w,S)}computeFrenetFrames(x,S){const w=new Vector3,U=[],G=[],H=[],z=new Vector3,j=new Matrix4;for(let S=0;S<=x;S++){const w=S/x;U[S]=this.getTangentAt(w,new Vector3)}G[0]=new Vector3,H[0]=new Vector3;let X=Number.MAX_VALUE;const K=Math.abs(U[0].x),q=Math.abs(U[0].y),Y=Math.abs(U[0].z);K<=X&&(X=K,w.set(1,0,0)),q<=X&&(X=q,w.set(0,1,0)),Y<=X&&w.set(0,0,1),z.crossVectors(U[0],w).normalize(),G[0].crossVectors(U[0],z),H[0].crossVectors(U[0],G[0]);for(let S=1;S<=x;S++){if(G[S]=G[S-1].clone(),H[S]=H[S-1].clone(),z.crossVectors(U[S-1],U[S]),z.length()>Number.EPSILON){z.normalize();const x=Math.acos(clamp(U[S-1].dot(U[S]),-1,1));G[S].applyMatrix4(j.makeRotationAxis(z,x))}H[S].crossVectors(U[S],G[S])}if(!0===S){let S=Math.acos(clamp(G[0].dot(G[x]),-1,1));S/=x,U[0].dot(z.crossVectors(G[0],G[x]))>0&&(S=-S);for(let w=1;w<=x;w++)G[w].applyMatrix4(j.makeRotationAxis(U[w],S*w)),H[w].crossVectors(U[w],G[w])}return{tangents:U,normals:G,binormals:H}}clone(){return(new this.constructor).copy(this)}copy(x){return this.arcLengthDivisions=x.arcLengthDivisions,this}toJSON(){const x={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};return x.arcLengthDivisions=this.arcLengthDivisions,x.type=this.type,x}fromJSON(x){return this.arcLengthDivisions=x.arcLengthDivisions,this}}class EllipseCurve extends Curve{constructor(x=0,S=0,w=1,U=1,G=0,H=2*Math.PI,z=!1,j=0){super(),this.type="EllipseCurve",this.aX=x,this.aY=S,this.xRadius=w,this.yRadius=U,this.aStartAngle=G,this.aEndAngle=H,this.aClockwise=z,this.aRotation=j}getPoint(x,S){const w=S||new Vector2,U=2*Math.PI;let G=this.aEndAngle-this.aStartAngle;const H=Math.abs(G)U;)G-=U;G0?0:(Math.floor(Math.abs(X)/G)+1)*G:0===K&&X===G-1&&(X=G-2,K=1),this.closed||X>0?z=U[(X-1)%G]:(is.subVectors(U[0],U[1]).add(U[0]),z=is);const q=U[X%G],Y=U[(X+1)%G];if(this.closed||X+2U.length-2?U.length-1:H+1],q=U[H>U.length-3?U.length-1:H+2];return w.set(CatmullRom(z,j.x,X.x,K.x,q.x),CatmullRom(z,j.y,X.y,K.y,q.y)),w}copy(x){super.copy(x),this.points=[];for(let S=0,w=x.points.length;S=w){const x=U[G]-w,H=this.curves[G],z=H.getLength(),j=0===z?0:1-x/z;return H.getPointAt(j,S)}G++}return null}getLength(){const x=this.getCurveLengths();return x[x.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;const x=[];let S=0;for(let w=0,U=this.curves.length;w1&&!S[S.length-1].equals(S[0])&&S.push(S[0]),S}copy(x){super.copy(x),this.curves=[];for(let S=0,w=x.curves.length;S0){const x=X.getPoint(0);x.equals(this.currentPoint)||this.lineTo(x.x,x.y)}this.curves.push(X);const K=X.getPoint(1);return this.currentPoint.copy(K),this}copy(x){return super.copy(x),this.currentPoint.copy(x.currentPoint),this}toJSON(){const x=super.toJSON();return x.currentPoint=this.currentPoint.toArray(),x}fromJSON(x){return super.fromJSON(x),this.currentPoint.fromArray(x.currentPoint),this}}class Shape extends Path{constructor(x){super(x),this.uuid=generateUUID(),this.type="Shape",this.holes=[]}getPointsHoles(x){const S=[];for(let w=0,U=this.holes.length;w80*w){j=K=x[0],X=q=x[1];for(let S=w;SK&&(K=Y),Z>q&&(q=Z);J=Math.max(K-j,q-X),J=0!==J?1/J:0}return earcutLinked(H,z,w,j,X,J),z};function linkedList(x,S,w,U,G){let H,z;if(G===function signedArea(x,S,w,U){let G=0;for(let H=S,z=w-U;H0)for(H=S;H=S;H-=U)z=insertNode(H,x[H],x[H+1],z);return z&&equals(z,z.next)&&(removeNode(z),z=z.next),z}function filterPoints(x,S){if(!x)return x;S||(S=x);let w,U=x;do{if(w=!1,U.steiner||!equals(U,U.next)&&0!==area(U.prev,U,U.next))U=U.next;else{if(removeNode(U),U=S=U.prev,U===U.next)break;w=!0}}while(w||U!==S);return S}function earcutLinked(x,S,w,U,G,H,z){if(!x)return;!z&&H&&function indexCurve(x,S,w,U){let G=x;do{null===G.z&&(G.z=zOrder(G.x,G.y,S,w,U)),G.prevZ=G.prev,G.nextZ=G.next,G=G.next}while(G!==x);G.prevZ.nextZ=null,G.prevZ=null,function sortLinked(x){let S,w,U,G,H,z,j,X,K=1;do{for(w=x,x=null,H=null,z=0;w;){for(z++,U=w,j=0,S=0;S0||X>0&&U;)0!==j&&(0===X||!U||w.z<=U.z)?(G=w,w=w.nextZ,j--):(G=U,U=U.nextZ,X--),H?H.nextZ=G:x=G,G.prevZ=H,H=G;w=U}H.nextZ=null,K*=2}while(z>1);return x}(G)}(x,U,G,H);let j,X,K=x;for(;x.prev!==x.next;)if(j=x.prev,X=x.next,H?isEarHashed(x,U,G,H):isEar(x))S.push(j.i/w),S.push(x.i/w),S.push(X.i/w),removeNode(x),x=X.next,K=X.next;else if((x=X)===K){z?1===z?earcutLinked(x=cureLocalIntersections(filterPoints(x),S,w),S,w,U,G,H,2):2===z&&splitEarcut(x,S,w,U,G,H):earcutLinked(filterPoints(x),S,w,U,G,H,1);break}}function isEar(x){const S=x.prev,w=x,U=x.next;if(area(S,w,U)>=0)return!1;let G=x.next.next;for(;G!==x.prev;){if(pointInTriangle(S.x,S.y,w.x,w.y,U.x,U.y,G.x,G.y)&&area(G.prev,G,G.next)>=0)return!1;G=G.next}return!0}function isEarHashed(x,S,w,U){const G=x.prev,H=x,z=x.next;if(area(G,H,z)>=0)return!1;const j=G.xH.x?G.x>z.x?G.x:z.x:H.x>z.x?H.x:z.x,q=G.y>H.y?G.y>z.y?G.y:z.y:H.y>z.y?H.y:z.y,Y=zOrder(j,X,S,w,U),Z=zOrder(K,q,S,w,U);let J=x.prevZ,Q=x.nextZ;for(;J&&J.z>=Y&&Q&&Q.z<=Z;){if(J!==x.prev&&J!==x.next&&pointInTriangle(G.x,G.y,H.x,H.y,z.x,z.y,J.x,J.y)&&area(J.prev,J,J.next)>=0)return!1;if(J=J.prevZ,Q!==x.prev&&Q!==x.next&&pointInTriangle(G.x,G.y,H.x,H.y,z.x,z.y,Q.x,Q.y)&&area(Q.prev,Q,Q.next)>=0)return!1;Q=Q.nextZ}for(;J&&J.z>=Y;){if(J!==x.prev&&J!==x.next&&pointInTriangle(G.x,G.y,H.x,H.y,z.x,z.y,J.x,J.y)&&area(J.prev,J,J.next)>=0)return!1;J=J.prevZ}for(;Q&&Q.z<=Z;){if(Q!==x.prev&&Q!==x.next&&pointInTriangle(G.x,G.y,H.x,H.y,z.x,z.y,Q.x,Q.y)&&area(Q.prev,Q,Q.next)>=0)return!1;Q=Q.nextZ}return!0}function cureLocalIntersections(x,S,w){let U=x;do{const G=U.prev,H=U.next.next;!equals(G,H)&&intersects(G,U,U.next,H)&&locallyInside(G,H)&&locallyInside(H,G)&&(S.push(G.i/w),S.push(U.i/w),S.push(H.i/w),removeNode(U),removeNode(U.next),U=x=H),U=U.next}while(U!==x);return filterPoints(U)}function splitEarcut(x,S,w,U,G,H){let z=x;do{let x=z.next.next;for(;x!==z.prev;){if(z.i!==x.i&&isValidDiagonal(z,x)){let j=splitPolygon(z,x);return z=filterPoints(z,z.next),j=filterPoints(j,j.next),earcutLinked(z,S,w,U,G,H),void earcutLinked(j,S,w,U,G,H)}x=x.next}z=z.next}while(z!==x)}function compareX(x,S){return x.x-S.x}function eliminateHole(x,S){if(S=function findHoleBridge(x,S){let w=S;const U=x.x,G=x.y;let H,z=-1/0;do{if(G<=w.y&&G>=w.next.y&&w.next.y!==w.y){const x=w.x+(G-w.y)*(w.next.x-w.x)/(w.next.y-w.y);if(x<=U&&x>z){if(z=x,x===U){if(G===w.y)return w;if(G===w.next.y)return w.next}H=w.x=w.x&&w.x>=X&&U!==w.x&&pointInTriangle(GH.x||w.x===H.x&§orContainsSector(H,w)))&&(H=w,Y=q)),w=w.next}while(w!==j);return H}(x,S),S){const w=splitPolygon(S,x);filterPoints(S,S.next),filterPoints(w,w.next)}}function sectorContainsSector(x,S){return area(x.prev,x,S.prev)<0&&area(S.next,x,x.next)<0}function zOrder(x,S,w,U,G){return(x=1431655765&((x=858993459&((x=252645135&((x=16711935&((x=32767*(x-w)*G)|x<<8))|x<<4))|x<<2))|x<<1))|(S=1431655765&((S=858993459&((S=252645135&((S=16711935&((S=32767*(S-U)*G)|S<<8))|S<<4))|S<<2))|S<<1))<<1}function getLeftmost(x){let S=x,w=x;do{(S.x=0&&(x-z)*(U-j)-(w-z)*(S-j)>=0&&(w-z)*(H-j)-(G-z)*(U-j)>=0}function isValidDiagonal(x,S){return x.next.i!==S.i&&x.prev.i!==S.i&&!function intersectsPolygon(x,S){let w=x;do{if(w.i!==x.i&&w.next.i!==x.i&&w.i!==S.i&&w.next.i!==S.i&&intersects(w,w.next,x,S))return!0;w=w.next}while(w!==x);return!1}(x,S)&&(locallyInside(x,S)&&locallyInside(S,x)&&function middleInside(x,S){let w=x,U=!1;const G=(x.x+S.x)/2,H=(x.y+S.y)/2;do{w.y>H!=w.next.y>H&&w.next.y!==w.y&&G<(w.next.x-w.x)*(H-w.y)/(w.next.y-w.y)+w.x&&(U=!U),w=w.next}while(w!==x);return U}(x,S)&&(area(x.prev,x,S.prev)||area(x,S.prev,S))||equals(x,S)&&area(x.prev,x,x.next)>0&&area(S.prev,S,S.next)>0)}function area(x,S,w){return(S.y-x.y)*(w.x-S.x)-(S.x-x.x)*(w.y-S.y)}function equals(x,S){return x.x===S.x&&x.y===S.y}function intersects(x,S,w,U){const G=sign(area(x,S,w)),H=sign(area(x,S,U)),z=sign(area(w,U,x)),j=sign(area(w,U,S));return G!==H&&z!==j||(!(0!==G||!onSegment(x,w,S))||(!(0!==H||!onSegment(x,U,S))||(!(0!==z||!onSegment(w,x,U))||!(0!==j||!onSegment(w,S,U)))))}function onSegment(x,S,w){return S.x<=Math.max(x.x,w.x)&&S.x>=Math.min(x.x,w.x)&&S.y<=Math.max(x.y,w.y)&&S.y>=Math.min(x.y,w.y)}function sign(x){return x>0?1:x<0?-1:0}function locallyInside(x,S){return area(x.prev,x,x.next)<0?area(x,S,x.next)>=0&&area(x,x.prev,S)>=0:area(x,S,x.prev)<0||area(x,x.next,S)<0}function splitPolygon(x,S){const w=new Node(x.i,x.x,x.y),U=new Node(S.i,S.x,S.y),G=x.next,H=S.prev;return x.next=S,S.prev=x,w.next=G,G.prev=w,U.next=w,w.prev=U,H.next=U,U.prev=H,U}function insertNode(x,S,w,U){const G=new Node(x,S,w);return U?(G.next=U.next,G.prev=U,U.next.prev=G,U.next=G):(G.prev=G,G.next=G),G}function removeNode(x){x.next.prev=x.prev,x.prev.next=x.next,x.prevZ&&(x.prevZ.nextZ=x.nextZ),x.nextZ&&(x.nextZ.prevZ=x.prevZ)}function Node(x,S,w){this.i=x,this.x=S,this.y=w,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}class ShapeUtils{static area(x){const S=x.length;let w=0;for(let U=S-1,G=0;G2&&x[S-1].equals(x[0])&&x.pop()}function addContour(x,S){for(let w=0;wNumber.EPSILON){const Y=Math.sqrt(q),Z=Math.sqrt(X*X+K*K),J=S.x-j/Y,Q=S.y+z/Y,ee=((w.x-K/Z-J)*K-(w.y+X/Z-Q)*X)/(z*K-j*X);U=J+z*ee-x.x,G=Q+j*ee-x.y;const te=U*U+G*G;if(te<=2)return new Vector2(U,G);H=Math.sqrt(te/2)}else{let x=!1;z>Number.EPSILON?X>Number.EPSILON&&(x=!0):z<-Number.EPSILON?X<-Number.EPSILON&&(x=!0):Math.sign(j)===Math.sign(K)&&(x=!0),x?(U=-j,G=z,H=Math.sqrt(q)):(U=z,G=j,H=Math.sqrt(q/2))}return new Vector2(U/H,G/H)}const me=[];for(let x=0,S=he.length,w=S-1,U=x+1;x=0;x--){const S=x/J,w=q*Math.cos(S*Math.PI/2),U=Y*Math.sin(S*Math.PI/2)+Z;for(let x=0,S=he.length;x=0;){const U=w;let G=w-1;G<0&&(G=x.length-1);for(let x=0,w=j+2*J;x0)&&Z.push(S,G,X),(x!==w-1||j0!=x>0&&this.version++,this._sheen=x}get clearcoat(){return this._clearcoat}set clearcoat(x){this._clearcoat>0!=x>0&&this.version++,this._clearcoat=x}get transmission(){return this._transmission}set transmission(x){this._transmission>0!=x>0&&this.version++,this._transmission=x}copy(x){return super.copy(x),this.defines={STANDARD:"",PHYSICAL:""},this.clearcoat=x.clearcoat,this.clearcoatMap=x.clearcoatMap,this.clearcoatRoughness=x.clearcoatRoughness,this.clearcoatRoughnessMap=x.clearcoatRoughnessMap,this.clearcoatNormalMap=x.clearcoatNormalMap,this.clearcoatNormalScale.copy(x.clearcoatNormalScale),this.ior=x.ior,this.sheen=x.sheen,this.sheenTint.copy(x.sheenTint),this.sheenRoughness=x.sheenRoughness,this.transmission=x.transmission,this.transmissionMap=x.transmissionMap,this.thickness=x.thickness,this.thicknessMap=x.thicknessMap,this.attenuationDistance=x.attenuationDistance,this.attenuationTint.copy(x.attenuationTint),this.specularIntensity=x.specularIntensity,this.specularIntensityMap=x.specularIntensityMap,this.specularTint.copy(x.specularTint),this.specularTintMap=x.specularTintMap,this}}MeshPhysicalMaterial.prototype.isMeshPhysicalMaterial=!0;class MeshPhongMaterial extends Material{constructor(x){super(),this.type="MeshPhongMaterial",this.color=new Color(16777215),this.specular=new Color(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Color(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=ai,this.normalScale=new Vector2(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=Oe,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.setValues(x)}copy(x){return super.copy(x),this.color.copy(x.color),this.specular.copy(x.specular),this.shininess=x.shininess,this.map=x.map,this.lightMap=x.lightMap,this.lightMapIntensity=x.lightMapIntensity,this.aoMap=x.aoMap,this.aoMapIntensity=x.aoMapIntensity,this.emissive.copy(x.emissive),this.emissiveMap=x.emissiveMap,this.emissiveIntensity=x.emissiveIntensity,this.bumpMap=x.bumpMap,this.bumpScale=x.bumpScale,this.normalMap=x.normalMap,this.normalMapType=x.normalMapType,this.normalScale.copy(x.normalScale),this.displacementMap=x.displacementMap,this.displacementScale=x.displacementScale,this.displacementBias=x.displacementBias,this.specularMap=x.specularMap,this.alphaMap=x.alphaMap,this.envMap=x.envMap,this.combine=x.combine,this.reflectivity=x.reflectivity,this.refractionRatio=x.refractionRatio,this.wireframe=x.wireframe,this.wireframeLinewidth=x.wireframeLinewidth,this.wireframeLinecap=x.wireframeLinecap,this.wireframeLinejoin=x.wireframeLinejoin,this.flatShading=x.flatShading,this}}MeshPhongMaterial.prototype.isMeshPhongMaterial=!0;class MeshToonMaterial extends Material{constructor(x){super(),this.defines={TOON:""},this.type="MeshToonMaterial",this.color=new Color(16777215),this.map=null,this.gradientMap=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Color(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=ai,this.normalScale=new Vector2(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.setValues(x)}copy(x){return super.copy(x),this.color.copy(x.color),this.map=x.map,this.gradientMap=x.gradientMap,this.lightMap=x.lightMap,this.lightMapIntensity=x.lightMapIntensity,this.aoMap=x.aoMap,this.aoMapIntensity=x.aoMapIntensity,this.emissive.copy(x.emissive),this.emissiveMap=x.emissiveMap,this.emissiveIntensity=x.emissiveIntensity,this.bumpMap=x.bumpMap,this.bumpScale=x.bumpScale,this.normalMap=x.normalMap,this.normalMapType=x.normalMapType,this.normalScale.copy(x.normalScale),this.displacementMap=x.displacementMap,this.displacementScale=x.displacementScale,this.displacementBias=x.displacementBias,this.alphaMap=x.alphaMap,this.wireframe=x.wireframe,this.wireframeLinewidth=x.wireframeLinewidth,this.wireframeLinecap=x.wireframeLinecap,this.wireframeLinejoin=x.wireframeLinejoin,this}}MeshToonMaterial.prototype.isMeshToonMaterial=!0;class MeshNormalMaterial extends Material{constructor(x){super(),this.type="MeshNormalMaterial",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=ai,this.normalScale=new Vector2(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.flatShading=!1,this.setValues(x)}copy(x){return super.copy(x),this.bumpMap=x.bumpMap,this.bumpScale=x.bumpScale,this.normalMap=x.normalMap,this.normalMapType=x.normalMapType,this.normalScale.copy(x.normalScale),this.displacementMap=x.displacementMap,this.displacementScale=x.displacementScale,this.displacementBias=x.displacementBias,this.wireframe=x.wireframe,this.wireframeLinewidth=x.wireframeLinewidth,this.flatShading=x.flatShading,this}}MeshNormalMaterial.prototype.isMeshNormalMaterial=!0;class MeshLambertMaterial extends Material{constructor(x){super(),this.type="MeshLambertMaterial",this.color=new Color(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Color(0),this.emissiveIntensity=1,this.emissiveMap=null,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=Oe,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.setValues(x)}copy(x){return super.copy(x),this.color.copy(x.color),this.map=x.map,this.lightMap=x.lightMap,this.lightMapIntensity=x.lightMapIntensity,this.aoMap=x.aoMap,this.aoMapIntensity=x.aoMapIntensity,this.emissive.copy(x.emissive),this.emissiveMap=x.emissiveMap,this.emissiveIntensity=x.emissiveIntensity,this.specularMap=x.specularMap,this.alphaMap=x.alphaMap,this.envMap=x.envMap,this.combine=x.combine,this.reflectivity=x.reflectivity,this.refractionRatio=x.refractionRatio,this.wireframe=x.wireframe,this.wireframeLinewidth=x.wireframeLinewidth,this.wireframeLinecap=x.wireframeLinecap,this.wireframeLinejoin=x.wireframeLinejoin,this}}MeshLambertMaterial.prototype.isMeshLambertMaterial=!0;class MeshMatcapMaterial extends Material{constructor(x){super(),this.defines={MATCAP:""},this.type="MeshMatcapMaterial",this.color=new Color(16777215),this.matcap=null,this.map=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=ai,this.normalScale=new Vector2(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.flatShading=!1,this.setValues(x)}copy(x){return super.copy(x),this.defines={MATCAP:""},this.color.copy(x.color),this.matcap=x.matcap,this.map=x.map,this.bumpMap=x.bumpMap,this.bumpScale=x.bumpScale,this.normalMap=x.normalMap,this.normalMapType=x.normalMapType,this.normalScale.copy(x.normalScale),this.displacementMap=x.displacementMap,this.displacementScale=x.displacementScale,this.displacementBias=x.displacementBias,this.alphaMap=x.alphaMap,this.flatShading=x.flatShading,this}}MeshMatcapMaterial.prototype.isMeshMatcapMaterial=!0;class LineDashedMaterial extends LineBasicMaterial{constructor(x){super(),this.type="LineDashedMaterial",this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(x)}copy(x){return super.copy(x),this.scale=x.scale,this.dashSize=x.dashSize,this.gapSize=x.gapSize,this}}LineDashedMaterial.prototype.isLineDashedMaterial=!0;var us=Object.freeze({__proto__:null,ShadowMaterial,SpriteMaterial,RawShaderMaterial,ShaderMaterial,PointsMaterial,MeshPhysicalMaterial,MeshStandardMaterial,MeshPhongMaterial,MeshToonMaterial,MeshNormalMaterial,MeshLambertMaterial,MeshDepthMaterial,MeshDistanceMaterial,MeshBasicMaterial,MeshMatcapMaterial,LineDashedMaterial,LineBasicMaterial,Material});const hs={arraySlice:function(x,S,w){return hs.isTypedArray(x)?new x.constructor(x.subarray(S,void 0!==w?w:x.length)):x.slice(S,w)},convertArray:function(x,S,w){return!x||!w&&x.constructor===S?x:"number"==typeof S.BYTES_PER_ELEMENT?new S(x):Array.prototype.slice.call(x)},isTypedArray:function(x){return ArrayBuffer.isView(x)&&!(x instanceof DataView)},getKeyframeOrder:function(x){const S=x.length,w=new Array(S);for(let x=0;x!==S;++x)w[x]=x;return w.sort((function compareTime(S,w){return x[S]-x[w]})),w},sortedArray:function(x,S,w){const U=x.length,G=new x.constructor(U);for(let H=0,z=0;z!==U;++H){const U=w[H]*S;for(let w=0;w!==S;++w)G[z++]=x[U+w]}return G},flattenJSON:function(x,S,w,U){let G=1,H=x[0];for(;void 0!==H&&void 0===H[U];)H=x[G++];if(void 0===H)return;let z=H[U];if(void 0!==z)if(Array.isArray(z))do{z=H[U],void 0!==z&&(S.push(H.time),w.push.apply(w,z)),H=x[G++]}while(void 0!==H);else if(void 0!==z.toArray)do{z=H[U],void 0!==z&&(S.push(H.time),z.toArray(w,w.length)),H=x[G++]}while(void 0!==H);else do{z=H[U],void 0!==z&&(S.push(H.time),w.push(z)),H=x[G++]}while(void 0!==H)},subclip:function(x,S,w,U,G=30){const H=x.clone();H.name=S;const z=[];for(let x=0;x=U)){X.push(S.times[x]);for(let w=0;wH.tracks[x].times[0]&&(j=H.tracks[x].times[0]);for(let x=0;x=U.times[Y]){const x=Y*X+j,S=x+X-j;Z=hs.arraySlice(U.values,x,S)}else{const x=U.createInterpolant(),S=j,w=X-j;x.evaluate(H),Z=hs.arraySlice(x.resultBuffer,S,w)}if("quaternion"===G){(new Quaternion).fromArray(Z).normalize().conjugate().toArray(Z)}const J=z.times.length;for(let x=0;x=G)break e;{const z=S[1];x=G)break t}H=w,w=0}}for(;w>>1;xS;)--H;if(++H,0!==G||H!==U){G>=H&&(H=Math.max(H,1),G=H-1);const x=this.getValueSize();this.times=hs.arraySlice(w,G,H),this.values=hs.arraySlice(this.values,G*x,H*x)}return this}validate(){let x=!0;const S=this.getValueSize();S-Math.floor(S)!=0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),x=!1);const w=this.times,U=this.values,G=w.length;0===G&&(console.error("THREE.KeyframeTrack: Track is empty.",this),x=!1);let H=null;for(let S=0;S!==G;S++){const U=w[S];if("number"==typeof U&&isNaN(U)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,S,U),x=!1;break}if(null!==H&&H>U){console.error("THREE.KeyframeTrack: Out of order keys.",this,S,U,H),x=!1;break}H=U}if(void 0!==U&&hs.isTypedArray(U))for(let S=0,w=U.length;S!==w;++S){const w=U[S];if(isNaN(w)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,S,w),x=!1;break}}return x}optimize(){const x=hs.arraySlice(this.times),S=hs.arraySlice(this.values),w=this.getValueSize(),U=this.getInterpolation()===Nn,G=x.length-1;let H=1;for(let z=1;z0){x[H]=x[G];for(let x=G*w,U=H*w,z=0;z!==w;++z)S[U+z]=S[x+z];++H}return H!==x.length?(this.times=hs.arraySlice(x,0,H),this.values=hs.arraySlice(S,0,H*w)):(this.times=x,this.values=S),this}clone(){const x=hs.arraySlice(this.times,0),S=hs.arraySlice(this.values,0),w=new(0,this.constructor)(this.name,x,S);return w.createInterpolant=this.createInterpolant,w}}KeyframeTrack.prototype.TimeBufferType=Float32Array,KeyframeTrack.prototype.ValueBufferType=Float32Array,KeyframeTrack.prototype.DefaultInterpolation=On;class BooleanKeyframeTrack extends KeyframeTrack{}BooleanKeyframeTrack.prototype.ValueTypeName="bool",BooleanKeyframeTrack.prototype.ValueBufferType=Array,BooleanKeyframeTrack.prototype.DefaultInterpolation=Fn,BooleanKeyframeTrack.prototype.InterpolantFactoryMethodLinear=void 0,BooleanKeyframeTrack.prototype.InterpolantFactoryMethodSmooth=void 0;class ColorKeyframeTrack extends KeyframeTrack{}ColorKeyframeTrack.prototype.ValueTypeName="color";class NumberKeyframeTrack extends KeyframeTrack{}NumberKeyframeTrack.prototype.ValueTypeName="number";class QuaternionLinearInterpolant extends Interpolant{constructor(x,S,w,U){super(x,S,w,U)}interpolate_(x,S,w,U){const G=this.resultBuffer,H=this.sampleValues,z=this.valueSize,j=(w-S)/(U-S);let X=x*z;for(let x=X+z;X!==x;X+=4)Quaternion.slerpFlat(G,0,H,X-z,H,X,j);return G}}class QuaternionKeyframeTrack extends KeyframeTrack{InterpolantFactoryMethodLinear(x){return new QuaternionLinearInterpolant(this.times,this.values,this.getValueSize(),x)}}QuaternionKeyframeTrack.prototype.ValueTypeName="quaternion",QuaternionKeyframeTrack.prototype.DefaultInterpolation=On,QuaternionKeyframeTrack.prototype.InterpolantFactoryMethodSmooth=void 0;class StringKeyframeTrack extends KeyframeTrack{}StringKeyframeTrack.prototype.ValueTypeName="string",StringKeyframeTrack.prototype.ValueBufferType=Array,StringKeyframeTrack.prototype.DefaultInterpolation=Fn,StringKeyframeTrack.prototype.InterpolantFactoryMethodLinear=void 0,StringKeyframeTrack.prototype.InterpolantFactoryMethodSmooth=void 0;class VectorKeyframeTrack extends KeyframeTrack{}VectorKeyframeTrack.prototype.ValueTypeName="vector";class AnimationClip{constructor(x,S=-1,w,U=Gn){this.name=x,this.tracks=w,this.duration=S,this.blendMode=U,this.uuid=generateUUID(),this.duration<0&&this.resetDuration()}static parse(x){const S=[],w=x.tracks,U=1/(x.fps||1);for(let x=0,G=w.length;x!==G;++x)S.push(parseKeyframeTrack(w[x]).scale(U));const G=new this(x.name,x.duration,S,x.blendMode);return G.uuid=x.uuid,G}static toJSON(x){const S=[],w=x.tracks,U={name:x.name,duration:x.duration,tracks:S,uuid:x.uuid,blendMode:x.blendMode};for(let x=0,U=w.length;x!==U;++x)S.push(KeyframeTrack.toJSON(w[x]));return U}static CreateFromMorphTargetSequence(x,S,w,U){const G=S.length,H=[];for(let x=0;x1){const x=H[1];let S=U[x];S||(U[x]=S=[]),S.push(w)}}const H=[];for(const x in U)H.push(this.CreateFromMorphTargetSequence(x,U[x],S,w));return H}static parseAnimation(x,S){if(!x)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;const addNonemptyTrack=function(x,S,w,U,G){if(0!==w.length){const H=[],z=[];hs.flattenJSON(w,H,z,U),0!==H.length&&G.push(new x(S,H,z))}},w=[],U=x.name||"default",G=x.fps||30,H=x.blendMode;let z=x.length||-1;const j=x.hierarchy||[];for(let x=0;x0:w.vertexColors=x.vertexColors),void 0!==x.uniforms)for(const S in x.uniforms){const U=x.uniforms[S];switch(w.uniforms[S]={},U.type){case"t":w.uniforms[S].value=getTexture(U.value);break;case"c":w.uniforms[S].value=(new Color).setHex(U.value);break;case"v2":w.uniforms[S].value=(new Vector2).fromArray(U.value);break;case"v3":w.uniforms[S].value=(new Vector3).fromArray(U.value);break;case"v4":w.uniforms[S].value=(new Vector4).fromArray(U.value);break;case"m3":w.uniforms[S].value=(new Matrix3).fromArray(U.value);break;case"m4":w.uniforms[S].value=(new Matrix4).fromArray(U.value);break;default:w.uniforms[S].value=U.value}}if(void 0!==x.defines&&(w.defines=x.defines),void 0!==x.vertexShader&&(w.vertexShader=x.vertexShader),void 0!==x.fragmentShader&&(w.fragmentShader=x.fragmentShader),void 0!==x.extensions)for(const S in x.extensions)w.extensions[S]=x.extensions[S];if(void 0!==x.shading&&(w.flatShading=1===x.shading),void 0!==x.size&&(w.size=x.size),void 0!==x.sizeAttenuation&&(w.sizeAttenuation=x.sizeAttenuation),void 0!==x.map&&(w.map=getTexture(x.map)),void 0!==x.matcap&&(w.matcap=getTexture(x.matcap)),void 0!==x.alphaMap&&(w.alphaMap=getTexture(x.alphaMap)),void 0!==x.bumpMap&&(w.bumpMap=getTexture(x.bumpMap)),void 0!==x.bumpScale&&(w.bumpScale=x.bumpScale),void 0!==x.normalMap&&(w.normalMap=getTexture(x.normalMap)),void 0!==x.normalMapType&&(w.normalMapType=x.normalMapType),void 0!==x.normalScale){let S=x.normalScale;!1===Array.isArray(S)&&(S=[S,S]),w.normalScale=(new Vector2).fromArray(S)}return void 0!==x.displacementMap&&(w.displacementMap=getTexture(x.displacementMap)),void 0!==x.displacementScale&&(w.displacementScale=x.displacementScale),void 0!==x.displacementBias&&(w.displacementBias=x.displacementBias),void 0!==x.roughnessMap&&(w.roughnessMap=getTexture(x.roughnessMap)),void 0!==x.metalnessMap&&(w.metalnessMap=getTexture(x.metalnessMap)),void 0!==x.emissiveMap&&(w.emissiveMap=getTexture(x.emissiveMap)),void 0!==x.emissiveIntensity&&(w.emissiveIntensity=x.emissiveIntensity),void 0!==x.specularMap&&(w.specularMap=getTexture(x.specularMap)),void 0!==x.specularIntensityMap&&(w.specularIntensityMap=getTexture(x.specularIntensityMap)),void 0!==x.specularTintMap&&(w.specularTintMap=getTexture(x.specularTintMap)),void 0!==x.envMap&&(w.envMap=getTexture(x.envMap)),void 0!==x.envMapIntensity&&(w.envMapIntensity=x.envMapIntensity),void 0!==x.reflectivity&&(w.reflectivity=x.reflectivity),void 0!==x.refractionRatio&&(w.refractionRatio=x.refractionRatio),void 0!==x.lightMap&&(w.lightMap=getTexture(x.lightMap)),void 0!==x.lightMapIntensity&&(w.lightMapIntensity=x.lightMapIntensity),void 0!==x.aoMap&&(w.aoMap=getTexture(x.aoMap)),void 0!==x.aoMapIntensity&&(w.aoMapIntensity=x.aoMapIntensity),void 0!==x.gradientMap&&(w.gradientMap=getTexture(x.gradientMap)),void 0!==x.clearcoatMap&&(w.clearcoatMap=getTexture(x.clearcoatMap)),void 0!==x.clearcoatRoughnessMap&&(w.clearcoatRoughnessMap=getTexture(x.clearcoatRoughnessMap)),void 0!==x.clearcoatNormalMap&&(w.clearcoatNormalMap=getTexture(x.clearcoatNormalMap)),void 0!==x.clearcoatNormalScale&&(w.clearcoatNormalScale=(new Vector2).fromArray(x.clearcoatNormalScale)),void 0!==x.transmissionMap&&(w.transmissionMap=getTexture(x.transmissionMap)),void 0!==x.thicknessMap&&(w.thicknessMap=getTexture(x.thicknessMap)),w}setTextures(x){return this.textures=x,this}}class LoaderUtils{static decodeText(x){if("undefined"!=typeof TextDecoder)return(new TextDecoder).decode(x);let S="";for(let w=0,U=x.length;w0){const w=new LoadingManager(S);G=new ImageLoader(w),G.setCrossOrigin(this.crossOrigin);for(let S=0,w=x.length;S0){U=new ImageLoader(this.manager),U.setCrossOrigin(this.crossOrigin);for(let S=0,U=x.length;S0){this.source.connect(this.filters[0]);for(let x=1,S=this.filters.length;x0){this.source.disconnect(this.filters[0]);for(let x=1,S=this.filters.length;x0&&this._mixBufferRegionAdditive(w,U,this._addIndex*S,1,S);for(let x=S,G=S+S;x!==G;++x)if(w[x]!==w[x+S]){z.setValue(w,U);break}}saveOriginalState(){const x=this.binding,S=this.buffer,w=this.valueSize,U=w*this._origIndex;x.getValue(S,U);for(let x=w,G=U;x!==G;++x)S[x]=S[U+x%w];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){const x=3*this.valueSize;this.binding.setValue(this.buffer,x)}_setAdditiveIdentityNumeric(){const x=this._addIndex*this.valueSize,S=x+this.valueSize;for(let w=x;w=.5)for(let U=0;U!==G;++U)x[S+U]=x[w+U]}_slerp(x,S,w,U){Quaternion.slerpFlat(x,S,x,S,x,w,U)}_slerpAdditive(x,S,w,U,G){const H=this._workIndex*G;Quaternion.multiplyQuaternionsFlat(x,H,x,S,x,w),Quaternion.slerpFlat(x,S,x,S,x,H,U)}_lerp(x,S,w,U,G){const H=1-U;for(let z=0;z!==G;++z){const G=S+z;x[G]=x[G]*H+x[w+z]*U}}_lerpAdditive(x,S,w,U,G){for(let H=0;H!==G;++H){const G=S+H;x[G]=x[G]+x[w+H]*U}}}const Bs="\\[\\]\\.:\\/",Ds=new RegExp("[\\[\\]\\.:\\/]","g"),ks="[^\\[\\]\\.:\\/]",Us="[^"+Bs.replace("\\.","")+"]",Gs=/((?:WC+[\/:])*)/.source.replace("WC",ks),Vs=/(WCOD+)?/.source.replace("WCOD",Us),Hs=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",ks),Ws=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",ks),$s=new RegExp("^"+Gs+Vs+Hs+Ws+"$"),zs=["material","materials","bones"];class PropertyBinding{constructor(x,S,w){this.path=S,this.parsedPath=w||PropertyBinding.parseTrackName(S),this.node=PropertyBinding.findNode(x,this.parsedPath.nodeName)||x,this.rootNode=x,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(x,S,w){return x&&x.isAnimationObjectGroup?new PropertyBinding.Composite(x,S,w):new PropertyBinding(x,S,w)}static sanitizeNodeName(x){return x.replace(/\s/g,"_").replace(Ds,"")}static parseTrackName(x){const S=$s.exec(x);if(!S)throw new Error("PropertyBinding: Cannot parse trackName: "+x);const w={nodeName:S[2],objectName:S[3],objectIndex:S[4],propertyName:S[5],propertyIndex:S[6]},U=w.nodeName&&w.nodeName.lastIndexOf(".");if(void 0!==U&&-1!==U){const x=w.nodeName.substring(U+1);-1!==zs.indexOf(x)&&(w.nodeName=w.nodeName.substring(0,U),w.objectName=x)}if(null===w.propertyName||0===w.propertyName.length)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+x);return w}static findNode(x,S){if(!S||""===S||"."===S||-1===S||S===x.name||S===x.uuid)return x;if(x.skeleton){const w=x.skeleton.getBoneByName(S);if(void 0!==w)return w}if(x.children){const searchNodeSubtree=function(x){for(let w=0;w=G){const H=G++,K=x[H];S[K.uuid]=X,x[X]=K,S[j]=H,x[H]=z;for(let x=0,S=U;x!==S;++x){const S=w[x],U=S[H],G=S[X];S[X]=U,S[H]=G}}}this.nCachedObjects_=G}uncache(){const x=this._objects,S=this._indicesByUUID,w=this._bindings,U=w.length;let G=this.nCachedObjects_,H=x.length;for(let z=0,j=arguments.length;z!==j;++z){const j=arguments[z].uuid,X=S[j];if(void 0!==X)if(delete S[j],X0&&(S[z.uuid]=X),x[X]=z,x.pop();for(let x=0,S=U;x!==S;++x){const S=w[x];S[X]=S[G],S.pop()}}}this.nCachedObjects_=G}subscribe_(x,S){const w=this._bindingsIndicesByPath;let U=w[x];const G=this._bindings;if(void 0!==U)return G[U];const H=this._paths,z=this._parsedPaths,j=this._objects,X=j.length,K=this.nCachedObjects_,q=new Array(X);U=G.length,w[x]=U,H.push(x),z.push(S),G.push(q);for(let w=K,U=j.length;w!==U;++w){const U=j[w];q[w]=new PropertyBinding(U,x,S)}return q}unsubscribe_(x){const S=this._bindingsIndicesByPath,w=S[x];if(void 0!==w){const U=this._paths,G=this._parsedPaths,H=this._bindings,z=H.length-1,j=H[z];S[x[z]]=w,H[w]=j,H.pop(),G[w]=G[z],G.pop(),U[w]=U[z],U.pop()}}}AnimationObjectGroup.prototype.isAnimationObjectGroup=!0;class AnimationAction{constructor(x,S,w=null,U=S.blendMode){this._mixer=x,this._clip=S,this._localRoot=w,this.blendMode=U;const G=S.tracks,H=G.length,z=new Array(H),j={endingStart:Bn,endingEnd:Bn};for(let x=0;x!==H;++x){const S=G[x].createInterpolant(null);z[x]=S,S.settings=j}this._interpolantSettings=j,this._interpolants=z,this._propertyBindings=new Array(H),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=Rn,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}play(){return this._mixer._activateAction(this),this}stop(){return this._mixer._deactivateAction(this),this.reset()}reset(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()}isRunning(){return this.enabled&&!this.paused&&0!==this.timeScale&&null===this._startTime&&this._mixer._isActiveAction(this)}isScheduled(){return this._mixer._isActiveAction(this)}startAt(x){return this._startTime=x,this}setLoop(x,S){return this.loop=x,this.repetitions=S,this}setEffectiveWeight(x){return this.weight=x,this._effectiveWeight=this.enabled?x:0,this.stopFading()}getEffectiveWeight(){return this._effectiveWeight}fadeIn(x){return this._scheduleFading(x,0,1)}fadeOut(x){return this._scheduleFading(x,1,0)}crossFadeFrom(x,S,w){if(x.fadeOut(S),this.fadeIn(S),w){const w=this._clip.duration,U=x._clip.duration,G=U/w,H=w/U;x.warp(1,G,S),this.warp(H,1,S)}return this}crossFadeTo(x,S,w){return x.crossFadeFrom(this,S,w)}stopFading(){const x=this._weightInterpolant;return null!==x&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(x)),this}setEffectiveTimeScale(x){return this.timeScale=x,this._effectiveTimeScale=this.paused?0:x,this.stopWarping()}getEffectiveTimeScale(){return this._effectiveTimeScale}setDuration(x){return this.timeScale=this._clip.duration/x,this.stopWarping()}syncWith(x){return this.time=x.time,this.timeScale=x.timeScale,this.stopWarping()}halt(x){return this.warp(this._effectiveTimeScale,0,x)}warp(x,S,w){const U=this._mixer,G=U.time,H=this.timeScale;let z=this._timeScaleInterpolant;null===z&&(z=U._lendControlInterpolant(),this._timeScaleInterpolant=z);const j=z.parameterPositions,X=z.sampleValues;return j[0]=G,j[1]=G+w,X[0]=x/H,X[1]=S/H,this}stopWarping(){const x=this._timeScaleInterpolant;return null!==x&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(x)),this}getMixer(){return this._mixer}getClip(){return this._clip}getRoot(){return this._localRoot||this._mixer._root}_update(x,S,w,U){if(!this.enabled)return void this._updateWeight(x);const G=this._startTime;if(null!==G){const U=(x-G)*w;if(U<0||0===w)return;this._startTime=null,S=w*U}S*=this._updateTimeScale(x);const H=this._updateTime(S),z=this._updateWeight(x);if(z>0){const x=this._interpolants,S=this._propertyBindings;if(this.blendMode===Hn)for(let w=0,U=x.length;w!==U;++w)x[w].evaluate(H),S[w].accumulateAdditive(z);else for(let w=0,G=x.length;w!==G;++w)x[w].evaluate(H),S[w].accumulate(U,z)}}_updateWeight(x){let S=0;if(this.enabled){S=this.weight;const w=this._weightInterpolant;if(null!==w){const U=w.evaluate(x)[0];S*=U,x>w.parameterPositions[1]&&(this.stopFading(),0===U&&(this.enabled=!1))}}return this._effectiveWeight=S,S}_updateTimeScale(x){let S=0;if(!this.paused){S=this.timeScale;const w=this._timeScaleInterpolant;if(null!==w){S*=w.evaluate(x)[0],x>w.parameterPositions[1]&&(this.stopWarping(),0===S?this.paused=!0:this.timeScale=S)}}return this._effectiveTimeScale=S,S}_updateTime(x){const S=this._clip.duration,w=this.loop;let U=this.time+x,G=this._loopCount;const H=w===In;if(0===x)return-1===G?U:H&&1==(1&G)?S-U:U;if(w===Mn){-1===G&&(this._loopCount=0,this._setEndings(!0,!0,!1));e:{if(U>=S)U=S;else{if(!(U<0)){this.time=U;break e}U=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=U,this._mixer.dispatchEvent({type:"finished",action:this,direction:x<0?-1:1})}}else{if(-1===G&&(x>=0?(G=0,this._setEndings(!0,0===this.repetitions,H)):this._setEndings(0===this.repetitions,!0,H)),U>=S||U<0){const w=Math.floor(U/S);U-=S*w,G+=Math.abs(w);const z=this.repetitions-G;if(z<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,U=x>0?S:0,this.time=U,this._mixer.dispatchEvent({type:"finished",action:this,direction:x>0?1:-1});else{if(1===z){const S=x<0;this._setEndings(S,!S,H)}else this._setEndings(!1,!1,H);this._loopCount=G,this.time=U,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:w})}}else this.time=U;if(H&&1==(1&G))return S-U}return U}_setEndings(x,S,w){const U=this._interpolantSettings;w?(U.endingStart=Dn,U.endingEnd=Dn):(U.endingStart=x?this.zeroSlopeAtStart?Dn:Bn:kn,U.endingEnd=S?this.zeroSlopeAtEnd?Dn:Bn:kn)}_scheduleFading(x,S,w){const U=this._mixer,G=U.time;let H=this._weightInterpolant;null===H&&(H=U._lendControlInterpolant(),this._weightInterpolant=H);const z=H.parameterPositions,j=H.sampleValues;return z[0]=G,j[0]=S,z[1]=G+x,j[1]=w,this}}class AnimationMixer extends EventDispatcher{constructor(x){super(),this._root=x,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}_bindAction(x,S){const w=x._localRoot||this._root,U=x._clip.tracks,G=U.length,H=x._propertyBindings,z=x._interpolants,j=w.uuid,X=this._bindingsByRootAndName;let K=X[j];void 0===K&&(K={},X[j]=K);for(let x=0;x!==G;++x){const G=U[x],X=G.name;let q=K[X];if(void 0!==q)H[x]=q;else{if(q=H[x],void 0!==q){null===q._cacheIndex&&(++q.referenceCount,this._addInactiveBinding(q,j,X));continue}const U=S&&S._propertyBindings[x].binding.parsedPath;q=new PropertyMixer(PropertyBinding.create(w,X,U),G.ValueTypeName,G.getValueSize()),++q.referenceCount,this._addInactiveBinding(q,j,X),H[x]=q}z[x].resultBuffer=q.buffer}}_activateAction(x){if(!this._isActiveAction(x)){if(null===x._cacheIndex){const S=(x._localRoot||this._root).uuid,w=x._clip.uuid,U=this._actionsByClip[w];this._bindAction(x,U&&U.knownActions[0]),this._addInactiveAction(x,w,S)}const S=x._propertyBindings;for(let x=0,w=S.length;x!==w;++x){const w=S[x];0==w.useCount++&&(this._lendBinding(w),w.saveOriginalState())}this._lendAction(x)}}_deactivateAction(x){if(this._isActiveAction(x)){const S=x._propertyBindings;for(let x=0,w=S.length;x!==w;++x){const w=S[x];0==--w.useCount&&(w.restoreOriginalState(),this._takeBackBinding(w))}this._takeBackAction(x)}}_initMemoryManager(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;const x=this;this.stats={actions:{get total(){return x._actions.length},get inUse(){return x._nActiveActions}},bindings:{get total(){return x._bindings.length},get inUse(){return x._nActiveBindings}},controlInterpolants:{get total(){return x._controlInterpolants.length},get inUse(){return x._nActiveControlInterpolants}}}}_isActiveAction(x){const S=x._cacheIndex;return null!==S&&S=0;--S)x[S].stop();return this}update(x){x*=this.timeScale;const S=this._actions,w=this._nActiveActions,U=this.time+=x,G=Math.sign(x),H=this._accuIndex^=1;for(let z=0;z!==w;++z){S[z]._update(U,x,G,H)}const z=this._bindings,j=this._nActiveBindings;for(let x=0;x!==j;++x)z[x].apply(H);return this}setTime(x){this.time=0;for(let x=0;xthis.max.x||x.ythis.max.y)}containsBox(x){return this.min.x<=x.min.x&&x.max.x<=this.max.x&&this.min.y<=x.min.y&&x.max.y<=this.max.y}getParameter(x,S){return S.set((x.x-this.min.x)/(this.max.x-this.min.x),(x.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(x){return!(x.max.xthis.max.x||x.max.ythis.max.y)}clampPoint(x,S){return S.copy(x).clamp(this.min,this.max)}distanceToPoint(x){return js.copy(x).clamp(this.min,this.max).sub(x).length()}intersect(x){return this.min.max(x.min),this.max.min(x.max),this}union(x){return this.min.min(x.min),this.max.max(x.max),this}translate(x){return this.min.add(x),this.max.add(x),this}equals(x){return x.min.equals(this.min)&&x.max.equals(this.max)}}Box2.prototype.isBox2=!0;const Xs=new Vector3,Ks=new Vector3;class Line3{constructor(x=new Vector3,S=new Vector3){this.start=x,this.end=S}set(x,S){return this.start.copy(x),this.end.copy(S),this}copy(x){return this.start.copy(x.start),this.end.copy(x.end),this}getCenter(x){return x.addVectors(this.start,this.end).multiplyScalar(.5)}delta(x){return x.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(x,S){return this.delta(S).multiplyScalar(x).add(this.start)}closestPointToPointParameter(x,S){Xs.subVectors(x,this.start),Ks.subVectors(this.end,this.start);const w=Ks.dot(Ks);let U=Ks.dot(Xs)/w;return S&&(U=clamp(U,0,1)),U}closestPointToPoint(x,S,w){const U=this.closestPointToPointParameter(x,S);return this.delta(w).multiplyScalar(U).add(this.start)}applyMatrix4(x){return this.start.applyMatrix4(x),this.end.applyMatrix4(x),this}equals(x){return x.start.equals(this.start)&&x.end.equals(this.end)}clone(){return(new this.constructor).copy(this)}}class ImmediateRenderObject extends Object3D{constructor(x){super(),this.material=x,this.render=function(){},this.hasPositions=!1,this.hasNormals=!1,this.hasColors=!1,this.hasUvs=!1,this.positionArray=null,this.normalArray=null,this.colorArray=null,this.uvArray=null,this.count=0}}ImmediateRenderObject.prototype.isImmediateRenderObject=!0;const qs=new Vector3;class SpotLightHelper extends Object3D{constructor(x,S){super(),this.light=x,this.light.updateMatrixWorld(),this.matrix=x.matrixWorld,this.matrixAutoUpdate=!1,this.color=S;const w=new BufferGeometry,U=[0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,-1,0,1,0,0,0,0,1,1,0,0,0,0,-1,1];for(let x=0,S=1,w=32;x.99999)this.quaternion.set(0,0,0,1);else if(x.y<-.99999)this.quaternion.set(1,0,0,0);else{ll.set(x.z,0,-x.x).normalize();const S=Math.acos(x.y);this.quaternion.setFromAxisAngle(ll,S)}}setLength(x,S=.2*x,w=.2*S){this.line.scale.set(1,Math.max(1e-4,x-S),1),this.line.updateMatrix(),this.cone.scale.set(w,S,w),this.cone.position.y=x,this.cone.updateMatrix()}setColor(x){this.line.material.color.set(x),this.cone.material.color.set(x)}copy(x){return super.copy(x,!1),this.line.copy(x.line),this.cone.copy(x.cone),this}}class AxesHelper extends LineSegments{constructor(x=1){const S=[0,0,0,x,0,0,0,0,0,0,x,0,0,0,0,0,0,x],w=new BufferGeometry;w.setAttribute("position",new Float32BufferAttribute(S,3)),w.setAttribute("color",new Float32BufferAttribute([1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1],3));super(w,new LineBasicMaterial({vertexColors:!0,toneMapped:!1})),this.type="AxesHelper"}setColors(x,S,w){const U=new Color,G=this.geometry.attributes.color.array;return U.set(x),U.toArray(G,0),U.toArray(G,3),U.set(S),U.toArray(G,6),U.toArray(G,9),U.set(w),U.toArray(G,12),U.toArray(G,15),this.geometry.attributes.color.needsUpdate=!0,this}dispose(){this.geometry.dispose(),this.material.dispose()}}class ShapePath{constructor(){this.type="ShapePath",this.color=new Color,this.subPaths=[],this.currentPath=null}moveTo(x,S){return this.currentPath=new Path,this.subPaths.push(this.currentPath),this.currentPath.moveTo(x,S),this}lineTo(x,S){return this.currentPath.lineTo(x,S),this}quadraticCurveTo(x,S,w,U){return this.currentPath.quadraticCurveTo(x,S,w,U),this}bezierCurveTo(x,S,w,U,G,H){return this.currentPath.bezierCurveTo(x,S,w,U,G,H),this}splineThru(x){return this.currentPath.splineThru(x),this}toShapes(x,S){function toShapesNoHoles(x){const S=[];for(let w=0,U=x.length;wNumber.EPSILON){if(X<0&&(w=S[H],j=-j,z=S[G],X=-X),x.yz.y)continue;if(x.y===w.y){if(x.x===w.x)return!0}else{const S=X*(x.x-w.x)-j*(x.y-w.y);if(0===S)return!0;if(S<0)continue;U=!U}}else{if(x.y!==w.y)continue;if(z.x<=x.x&&x.x<=w.x||w.x<=x.x&&x.x<=z.x)return!0}}return U}const w=ShapeUtils.isClockWise,U=this.subPaths;if(0===U.length)return[];if(!0===S)return toShapesNoHoles(U);let G,H,z;const j=[];if(1===U.length)return H=U[0],z=new Shape,z.curves=H.curves,j.push(z),j;let X=!w(U[0].getPoints());X=x?!X:X;const K=[],q=[];let Y,Z,J=[],Q=0;q[Q]=void 0,J[Q]=[];for(let S=0,z=U.length;S1){let x=!1;const S=[];for(let x=0,S=q.length;x0&&(x||(J=K))}for(let x=0,S=q.length;x65504&&(console.warn("THREE.DataUtils.toHalfFloat(): value exceeds 65504."),x=65504),hl[0]=x;const S=dl[0];let w=S>>16&32768,U=S>>12&2047;const G=S>>23&255;return G<103?w:G>142?(w|=31744,w|=(255==G?0:1)&&8388607&S,w):G<113?(U|=2048,w|=(U>>114-G)+(U>>113-G&1),w):(w|=G-112<<10|U>>1,w+=1&U,w)}}const pl=0,ml=1,fl=0,gl=1,vl=2;function MeshFaceMaterial(x){return console.warn("THREE.MeshFaceMaterial has been removed. Use an Array instead."),x}function MultiMaterial(x=[]){return console.warn("THREE.MultiMaterial has been removed. Use an Array instead."),x.isMultiMaterial=!0,x.materials=x,x.clone=function(){return x.slice()},x}function PointCloud(x,S){return console.warn("THREE.PointCloud has been renamed to THREE.Points."),new Points(x,S)}function Particle(x){return console.warn("THREE.Particle has been renamed to THREE.Sprite."),new Sprite(x)}function ParticleSystem(x,S){return console.warn("THREE.ParticleSystem has been renamed to THREE.Points."),new Points(x,S)}function PointCloudMaterial(x){return console.warn("THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial."),new PointsMaterial(x)}function ParticleBasicMaterial(x){return console.warn("THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial."),new PointsMaterial(x)}function ParticleSystemMaterial(x){return console.warn("THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial."),new PointsMaterial(x)}function Vertex(x,S,w){return console.warn("THREE.Vertex has been removed. Use THREE.Vector3 instead."),new Vector3(x,S,w)}function DynamicBufferAttribute(x,S){return console.warn("THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setUsage( THREE.DynamicDrawUsage ) instead."),new BufferAttribute(x,S).setUsage(Ri)}function Int8Attribute(x,S){return console.warn("THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead."),new Int8BufferAttribute(x,S)}function Uint8Attribute(x,S){return console.warn("THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead."),new Uint8BufferAttribute(x,S)}function Uint8ClampedAttribute(x,S){return console.warn("THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead."),new Uint8ClampedBufferAttribute(x,S)}function Int16Attribute(x,S){return console.warn("THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead."),new Int16BufferAttribute(x,S)}function Uint16Attribute(x,S){return console.warn("THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead."),new Uint16BufferAttribute(x,S)}function Int32Attribute(x,S){return console.warn("THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead."),new Int32BufferAttribute(x,S)}function Uint32Attribute(x,S){return console.warn("THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead."),new Uint32BufferAttribute(x,S)}function Float32Attribute(x,S){return console.warn("THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead."),new Float32BufferAttribute(x,S)}function Float64Attribute(x,S){return console.warn("THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead."),new Float64BufferAttribute(x,S)}function AxisHelper(x){return console.warn("THREE.AxisHelper has been renamed to THREE.AxesHelper."),new AxesHelper(x)}function BoundingBoxHelper(x,S){return console.warn("THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead."),new BoxHelper(x,S)}function EdgesHelper(x,S){return console.warn("THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead."),new LineSegments(new EdgesGeometry(x.geometry),new LineBasicMaterial({color:void 0!==S?S:16777215}))}function WireframeHelper(x,S){return console.warn("THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead."),new LineSegments(new WireframeGeometry(x.geometry),new LineBasicMaterial({color:void 0!==S?S:16777215}))}function XHRLoader(x){return console.warn("THREE.XHRLoader has been renamed to THREE.FileLoader."),new FileLoader(x)}function BinaryTextureLoader(x){return console.warn("THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader."),new DataTextureLoader(x)}function WebGLRenderTargetCube(x,S,w){return console.warn("THREE.WebGLRenderTargetCube( width, height, options ) is now WebGLCubeRenderTarget( size, options )."),new WebGLCubeRenderTarget(x,w)}function CanvasRenderer(){console.error("THREE.CanvasRenderer has been removed")}function JSONLoader(){console.error("THREE.JSONLoader has been removed.")}Curve.create=function(x,S){return console.log("THREE.Curve.create() has been deprecated"),x.prototype=Object.create(Curve.prototype),x.prototype.constructor=x,x.prototype.getPoint=S,x},Path.prototype.fromPoints=function(x){return console.warn("THREE.Path: .fromPoints() has been renamed to .setFromPoints()."),this.setFromPoints(x)},GridHelper.prototype.setColors=function(){console.error("THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.")},SkeletonHelper.prototype.update=function(){console.error("THREE.SkeletonHelper: update() no longer needs to be called.")},Loader.prototype.extractUrlBase=function(x){return console.warn("THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead."),LoaderUtils.extractUrlBase(x)},Loader.Handlers={add:function(){console.error("THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.")},get:function(){console.error("THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.")}},Box2.prototype.center=function(x){return console.warn("THREE.Box2: .center() has been renamed to .getCenter()."),this.getCenter(x)},Box2.prototype.empty=function(){return console.warn("THREE.Box2: .empty() has been renamed to .isEmpty()."),this.isEmpty()},Box2.prototype.isIntersectionBox=function(x){return console.warn("THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(x)},Box2.prototype.size=function(x){return console.warn("THREE.Box2: .size() has been renamed to .getSize()."),this.getSize(x)},Box3.prototype.center=function(x){return console.warn("THREE.Box3: .center() has been renamed to .getCenter()."),this.getCenter(x)},Box3.prototype.empty=function(){return console.warn("THREE.Box3: .empty() has been renamed to .isEmpty()."),this.isEmpty()},Box3.prototype.isIntersectionBox=function(x){return console.warn("THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(x)},Box3.prototype.isIntersectionSphere=function(x){return console.warn("THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere()."),this.intersectsSphere(x)},Box3.prototype.size=function(x){return console.warn("THREE.Box3: .size() has been renamed to .getSize()."),this.getSize(x)},Sphere.prototype.empty=function(){return console.warn("THREE.Sphere: .empty() has been renamed to .isEmpty()."),this.isEmpty()},Frustum.prototype.setFromMatrix=function(x){return console.warn("THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix()."),this.setFromProjectionMatrix(x)},Line3.prototype.center=function(x){return console.warn("THREE.Line3: .center() has been renamed to .getCenter()."),this.getCenter(x)},Matrix3.prototype.flattenToArrayOffset=function(x,S){return console.warn("THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."),this.toArray(x,S)},Matrix3.prototype.multiplyVector3=function(x){return console.warn("THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead."),x.applyMatrix3(this)},Matrix3.prototype.multiplyVector3Array=function(){console.error("THREE.Matrix3: .multiplyVector3Array() has been removed.")},Matrix3.prototype.applyToBufferAttribute=function(x){return console.warn("THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead."),x.applyMatrix3(this)},Matrix3.prototype.applyToVector3Array=function(){console.error("THREE.Matrix3: .applyToVector3Array() has been removed.")},Matrix3.prototype.getInverse=function(x){return console.warn("THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead."),this.copy(x).invert()},Matrix4.prototype.extractPosition=function(x){return console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition()."),this.copyPosition(x)},Matrix4.prototype.flattenToArrayOffset=function(x,S){return console.warn("THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."),this.toArray(x,S)},Matrix4.prototype.getPosition=function(){return console.warn("THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead."),(new Vector3).setFromMatrixColumn(this,3)},Matrix4.prototype.setRotationFromQuaternion=function(x){return console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion()."),this.makeRotationFromQuaternion(x)},Matrix4.prototype.multiplyToArray=function(){console.warn("THREE.Matrix4: .multiplyToArray() has been removed.")},Matrix4.prototype.multiplyVector3=function(x){return console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead."),x.applyMatrix4(this)},Matrix4.prototype.multiplyVector4=function(x){return console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead."),x.applyMatrix4(this)},Matrix4.prototype.multiplyVector3Array=function(){console.error("THREE.Matrix4: .multiplyVector3Array() has been removed.")},Matrix4.prototype.rotateAxis=function(x){console.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead."),x.transformDirection(this)},Matrix4.prototype.crossVector=function(x){return console.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead."),x.applyMatrix4(this)},Matrix4.prototype.translate=function(){console.error("THREE.Matrix4: .translate() has been removed.")},Matrix4.prototype.rotateX=function(){console.error("THREE.Matrix4: .rotateX() has been removed.")},Matrix4.prototype.rotateY=function(){console.error("THREE.Matrix4: .rotateY() has been removed.")},Matrix4.prototype.rotateZ=function(){console.error("THREE.Matrix4: .rotateZ() has been removed.")},Matrix4.prototype.rotateByAxis=function(){console.error("THREE.Matrix4: .rotateByAxis() has been removed.")},Matrix4.prototype.applyToBufferAttribute=function(x){return console.warn("THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead."),x.applyMatrix4(this)},Matrix4.prototype.applyToVector3Array=function(){console.error("THREE.Matrix4: .applyToVector3Array() has been removed.")},Matrix4.prototype.makeFrustum=function(x,S,w,U,G,H){return console.warn("THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead."),this.makePerspective(x,S,U,w,G,H)},Matrix4.prototype.getInverse=function(x){return console.warn("THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead."),this.copy(x).invert()},Plane.prototype.isIntersectionLine=function(x){return console.warn("THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine()."),this.intersectsLine(x)},Quaternion.prototype.multiplyVector3=function(x){return console.warn("THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead."),x.applyQuaternion(this)},Quaternion.prototype.inverse=function(){return console.warn("THREE.Quaternion: .inverse() has been renamed to invert()."),this.invert()},Ray.prototype.isIntersectionBox=function(x){return console.warn("THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(x)},Ray.prototype.isIntersectionPlane=function(x){return console.warn("THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane()."),this.intersectsPlane(x)},Ray.prototype.isIntersectionSphere=function(x){return console.warn("THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere()."),this.intersectsSphere(x)},Triangle.prototype.area=function(){return console.warn("THREE.Triangle: .area() has been renamed to .getArea()."),this.getArea()},Triangle.prototype.barycoordFromPoint=function(x,S){return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."),this.getBarycoord(x,S)},Triangle.prototype.midpoint=function(x){return console.warn("THREE.Triangle: .midpoint() has been renamed to .getMidpoint()."),this.getMidpoint(x)},Triangle.prototypenormal=function(x){return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."),this.getNormal(x)},Triangle.prototype.plane=function(x){return console.warn("THREE.Triangle: .plane() has been renamed to .getPlane()."),this.getPlane(x)},Triangle.barycoordFromPoint=function(x,S,w,U,G){return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."),Triangle.getBarycoord(x,S,w,U,G)},Triangle.normal=function(x,S,w,U){return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."),Triangle.getNormal(x,S,w,U)},Shape.prototype.extractAllPoints=function(x){return console.warn("THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead."),this.extractPoints(x)},Shape.prototype.extrude=function(x){return console.warn("THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead."),new ExtrudeGeometry(this,x)},Shape.prototype.makeGeometry=function(x){return console.warn("THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead."),new ShapeGeometry(this,x)},Vector2.prototype.fromAttribute=function(x,S,w){return console.warn("THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(x,S,w)},Vector2.prototype.distanceToManhattan=function(x){return console.warn("THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."),this.manhattanDistanceTo(x)},Vector2.prototype.lengthManhattan=function(){return console.warn("THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()},Vector3.prototype.setEulerFromRotationMatrix=function(){console.error("THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.")},Vector3.prototype.setEulerFromQuaternion=function(){console.error("THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.")},Vector3.prototype.getPositionFromMatrix=function(x){return console.warn("THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition()."),this.setFromMatrixPosition(x)},Vector3.prototype.getScaleFromMatrix=function(x){return console.warn("THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale()."),this.setFromMatrixScale(x)},Vector3.prototype.getColumnFromMatrix=function(x,S){return console.warn("THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn()."),this.setFromMatrixColumn(S,x)},Vector3.prototype.applyProjection=function(x){return console.warn("THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead."),this.applyMatrix4(x)},Vector3.prototype.fromAttribute=function(x,S,w){return console.warn("THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(x,S,w)},Vector3.prototype.distanceToManhattan=function(x){return console.warn("THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."),this.manhattanDistanceTo(x)},Vector3.prototype.lengthManhattan=function(){return console.warn("THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()},Vector4.prototype.fromAttribute=function(x,S,w){return console.warn("THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(x,S,w)},Vector4.prototype.lengthManhattan=function(){return console.warn("THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()},Object3D.prototype.getChildByName=function(x){return console.warn("THREE.Object3D: .getChildByName() has been renamed to .getObjectByName()."),this.getObjectByName(x)},Object3D.prototype.renderDepth=function(){console.warn("THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.")},Object3D.prototype.translate=function(x,S){return console.warn("THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead."),this.translateOnAxis(S,x)},Object3D.prototype.getWorldRotation=function(){console.error("THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.")},Object3D.prototype.applyMatrix=function(x){return console.warn("THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4()."),this.applyMatrix4(x)},Object.defineProperties(Object3D.prototype,{eulerOrder:{get:function(){return console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."),this.rotation.order},set:function(x){console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."),this.rotation.order=x}},useQuaternion:{get:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")},set:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")}}}),Mesh.prototype.setDrawMode=function(){console.error("THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.")},Object.defineProperties(Mesh.prototype,{drawMode:{get:function(){return console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode."),Wn},set:function(){console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.")}}}),SkinnedMesh.prototype.initBones=function(){console.error("THREE.SkinnedMesh: initBones() has been removed.")},PerspectiveCamera.prototype.setLens=function(x,S){console.warn("THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup."),void 0!==S&&(this.filmGauge=S),this.setFocalLength(x)},Object.defineProperties(Light.prototype,{onlyShadow:{set:function(){console.warn("THREE.Light: .onlyShadow has been removed.")}},shadowCameraFov:{set:function(x){console.warn("THREE.Light: .shadowCameraFov is now .shadow.camera.fov."),this.shadow.camera.fov=x}},shadowCameraLeft:{set:function(x){console.warn("THREE.Light: .shadowCameraLeft is now .shadow.camera.left."),this.shadow.camera.left=x}},shadowCameraRight:{set:function(x){console.warn("THREE.Light: .shadowCameraRight is now .shadow.camera.right."),this.shadow.camera.right=x}},shadowCameraTop:{set:function(x){console.warn("THREE.Light: .shadowCameraTop is now .shadow.camera.top."),this.shadow.camera.top=x}},shadowCameraBottom:{set:function(x){console.warn("THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom."),this.shadow.camera.bottom=x}},shadowCameraNear:{set:function(x){console.warn("THREE.Light: .shadowCameraNear is now .shadow.camera.near."),this.shadow.camera.near=x}},shadowCameraFar:{set:function(x){console.warn("THREE.Light: .shadowCameraFar is now .shadow.camera.far."),this.shadow.camera.far=x}},shadowCameraVisible:{set:function(){console.warn("THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.")}},shadowBias:{set:function(x){console.warn("THREE.Light: .shadowBias is now .shadow.bias."),this.shadow.bias=x}},shadowDarkness:{set:function(){console.warn("THREE.Light: .shadowDarkness has been removed.")}},shadowMapWidth:{set:function(x){console.warn("THREE.Light: .shadowMapWidth is now .shadow.mapSize.width."),this.shadow.mapSize.width=x}},shadowMapHeight:{set:function(x){console.warn("THREE.Light: .shadowMapHeight is now .shadow.mapSize.height."),this.shadow.mapSize.height=x}}}),Object.defineProperties(BufferAttribute.prototype,{length:{get:function(){return console.warn("THREE.BufferAttribute: .length has been deprecated. Use .count instead."),this.array.length}},dynamic:{get:function(){return console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."),this.usage===Ri},set:function(){console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."),this.setUsage(Ri)}}}),BufferAttribute.prototype.setDynamic=function(x){return console.warn("THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead."),this.setUsage(!0===x?Ri:Mi),this},BufferAttribute.prototype.copyIndicesArray=function(){console.error("THREE.BufferAttribute: .copyIndicesArray() has been removed.")},BufferAttribute.prototype.setArray=function(){console.error("THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers")},BufferGeometry.prototype.addIndex=function(x){console.warn("THREE.BufferGeometry: .addIndex() has been renamed to .setIndex()."),this.setIndex(x)},BufferGeometry.prototype.addAttribute=function(x,S){return console.warn("THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute()."),S&&S.isBufferAttribute||S&&S.isInterleavedBufferAttribute?"index"===x?(console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute."),this.setIndex(S),this):this.setAttribute(x,S):(console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )."),this.setAttribute(x,new BufferAttribute(arguments[1],arguments[2])))},BufferGeometry.prototype.addDrawCall=function(x,S,w){void 0!==w&&console.warn("THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset."),console.warn("THREE.BufferGeometry: .addDrawCall() is now .addGroup()."),this.addGroup(x,S)},BufferGeometry.prototype.clearDrawCalls=function(){console.warn("THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups()."),this.clearGroups()},BufferGeometry.prototype.computeOffsets=function(){console.warn("THREE.BufferGeometry: .computeOffsets() has been removed.")},BufferGeometry.prototype.removeAttribute=function(x){return console.warn("THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute()."),this.deleteAttribute(x)},BufferGeometry.prototype.applyMatrix=function(x){return console.warn("THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4()."),this.applyMatrix4(x)},Object.defineProperties(BufferGeometry.prototype,{drawcalls:{get:function(){return console.error("THREE.BufferGeometry: .drawcalls has been renamed to .groups."),this.groups}},offsets:{get:function(){return console.warn("THREE.BufferGeometry: .offsets has been renamed to .groups."),this.groups}}}),InterleavedBuffer.prototype.setDynamic=function(x){return console.warn("THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead."),this.setUsage(!0===x?Ri:Mi),this},InterleavedBuffer.prototype.setArray=function(){console.error("THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers")},ExtrudeGeometry.prototype.getArrays=function(){console.error("THREE.ExtrudeGeometry: .getArrays() has been removed.")},ExtrudeGeometry.prototype.addShapeList=function(){console.error("THREE.ExtrudeGeometry: .addShapeList() has been removed.")},ExtrudeGeometry.prototype.addShape=function(){console.error("THREE.ExtrudeGeometry: .addShape() has been removed.")},Scene.prototype.dispose=function(){console.error("THREE.Scene: .dispose() has been removed.")},Uniform.prototype.onUpdate=function(){return console.warn("THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead."),this},Object.defineProperties(Material.prototype,{wrapAround:{get:function(){console.warn("THREE.Material: .wrapAround has been removed.")},set:function(){console.warn("THREE.Material: .wrapAround has been removed.")}},overdraw:{get:function(){console.warn("THREE.Material: .overdraw has been removed.")},set:function(){console.warn("THREE.Material: .overdraw has been removed.")}},wrapRGB:{get:function(){return console.warn("THREE.Material: .wrapRGB has been removed."),new Color}},shading:{get:function(){console.error("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead.")},set:function(x){console.warn("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead."),this.flatShading=x===ne}},stencilMask:{get:function(){return console.warn("THREE."+this.type+": .stencilMask has been removed. Use .stencilFuncMask instead."),this.stencilFuncMask},set:function(x){console.warn("THREE."+this.type+": .stencilMask has been removed. Use .stencilFuncMask instead."),this.stencilFuncMask=x}},vertexTangents:{get:function(){console.warn("THREE."+this.type+": .vertexTangents has been removed.")},set:function(){console.warn("THREE."+this.type+": .vertexTangents has been removed.")}}}),Object.defineProperties(ShaderMaterial.prototype,{derivatives:{get:function(){return console.warn("THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives."),this.extensions.derivatives},set:function(x){console.warn("THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives."),this.extensions.derivatives=x}}}),WebGLRenderer.prototype.clearTarget=function(x,S,w,U){console.warn("THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead."),this.setRenderTarget(x),this.clear(S,w,U)},WebGLRenderer.prototype.animate=function(x){console.warn("THREE.WebGLRenderer: .animate() is now .setAnimationLoop()."),this.setAnimationLoop(x)},WebGLRenderer.prototype.getCurrentRenderTarget=function(){return console.warn("THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget()."),this.getRenderTarget()},WebGLRenderer.prototype.getMaxAnisotropy=function(){return console.warn("THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy()."),this.capabilities.getMaxAnisotropy()},WebGLRenderer.prototype.getPrecision=function(){return console.warn("THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision."),this.capabilities.precision},WebGLRenderer.prototype.resetGLState=function(){return console.warn("THREE.WebGLRenderer: .resetGLState() is now .state.reset()."),this.state.reset()},WebGLRenderer.prototype.supportsFloatTextures=function(){return console.warn("THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' )."),this.extensions.get("OES_texture_float")},WebGLRenderer.prototype.supportsHalfFloatTextures=function(){return console.warn("THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' )."),this.extensions.get("OES_texture_half_float")},WebGLRenderer.prototype.supportsStandardDerivatives=function(){return console.warn("THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' )."),this.extensions.get("OES_standard_derivatives")},WebGLRenderer.prototype.supportsCompressedTextureS3TC=function(){return console.warn("THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' )."),this.extensions.get("WEBGL_compressed_texture_s3tc")},WebGLRenderer.prototype.supportsCompressedTexturePVRTC=function(){return console.warn("THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' )."),this.extensions.get("WEBGL_compressed_texture_pvrtc")},WebGLRenderer.prototype.supportsBlendMinMax=function(){return console.warn("THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' )."),this.extensions.get("EXT_blend_minmax")},WebGLRenderer.prototype.supportsVertexTextures=function(){return console.warn("THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures."),this.capabilities.vertexTextures},WebGLRenderer.prototype.supportsInstancedArrays=function(){return console.warn("THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' )."),this.extensions.get("ANGLE_instanced_arrays")},WebGLRenderer.prototype.enableScissorTest=function(x){console.warn("THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest()."),this.setScissorTest(x)},WebGLRenderer.prototype.initMaterial=function(){console.warn("THREE.WebGLRenderer: .initMaterial() has been removed.")},WebGLRenderer.prototype.addPrePlugin=function(){console.warn("THREE.WebGLRenderer: .addPrePlugin() has been removed.")},WebGLRenderer.prototype.addPostPlugin=function(){console.warn("THREE.WebGLRenderer: .addPostPlugin() has been removed.")},WebGLRenderer.prototype.updateShadowMap=function(){console.warn("THREE.WebGLRenderer: .updateShadowMap() has been removed.")},WebGLRenderer.prototype.setFaceCulling=function(){console.warn("THREE.WebGLRenderer: .setFaceCulling() has been removed.")},WebGLRenderer.prototype.allocTextureUnit=function(){console.warn("THREE.WebGLRenderer: .allocTextureUnit() has been removed.")},WebGLRenderer.prototype.setTexture=function(){console.warn("THREE.WebGLRenderer: .setTexture() has been removed.")},WebGLRenderer.prototype.setTexture2D=function(){console.warn("THREE.WebGLRenderer: .setTexture2D() has been removed.")},WebGLRenderer.prototype.setTextureCube=function(){console.warn("THREE.WebGLRenderer: .setTextureCube() has been removed.")},WebGLRenderer.prototype.getActiveMipMapLevel=function(){return console.warn("THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel()."),this.getActiveMipmapLevel()},Object.defineProperties(WebGLRenderer.prototype,{shadowMapEnabled:{get:function(){return this.shadowMap.enabled},set:function(x){console.warn("THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled."),this.shadowMap.enabled=x}},shadowMapType:{get:function(){return this.shadowMap.type},set:function(x){console.warn("THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type."),this.shadowMap.type=x}},shadowMapCullFace:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")}},context:{get:function(){return console.warn("THREE.WebGLRenderer: .context has been removed. Use .getContext() instead."),this.getContext()}},vr:{get:function(){return console.warn("THREE.WebGLRenderer: .vr has been renamed to .xr"),this.xr}},gammaInput:{get:function(){return console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead."),!1},set:function(){console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.")}},gammaOutput:{get:function(){return console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."),!1},set:function(x){console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."),this.outputEncoding=!0===x?Kn:Xn}},toneMappingWhitePoint:{get:function(){return console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed."),1},set:function(){console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.")}}}),Object.defineProperties(WebGLShadowMap.prototype,{cullFace:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")}},renderReverseSided:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")}},renderSingleSided:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")}}}),Object.defineProperties(WebGLRenderTarget.prototype,{wrapS:{get:function(){return console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."),this.texture.wrapS},set:function(x){console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."),this.texture.wrapS=x}},wrapT:{get:function(){return console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."),this.texture.wrapT},set:function(x){console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."),this.texture.wrapT=x}},magFilter:{get:function(){return console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."),this.texture.magFilter},set:function(x){console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."),this.texture.magFilter=x}},minFilter:{get:function(){return console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."),this.texture.minFilter},set:function(x){console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."),this.texture.minFilter=x}},anisotropy:{get:function(){return console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."),this.texture.anisotropy},set:function(x){console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."),this.texture.anisotropy=x}},offset:{get:function(){return console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."),this.texture.offset},set:function(x){console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."),this.texture.offset=x}},repeat:{get:function(){return console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."),this.texture.repeat},set:function(x){console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."),this.texture.repeat=x}},format:{get:function(){return console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."),this.texture.format},set:function(x){console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."),this.texture.format=x}},type:{get:function(){return console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."),this.texture.type},set:function(x){console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."),this.texture.type=x}},generateMipmaps:{get:function(){return console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."),this.texture.generateMipmaps},set:function(x){console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."),this.texture.generateMipmaps=x}}}),Audio.prototype.load=function(x){console.warn("THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.");const S=this;return(new AudioLoader).load(x,(function(x){S.setBuffer(x)})),this},AudioAnalyser.prototype.getData=function(){return console.warn("THREE.AudioAnalyser: .getData() is now .getFrequencyData()."),this.getFrequencyData()},CubeCamera.prototype.updateCubeMap=function(x,S){return console.warn("THREE.CubeCamera: .updateCubeMap() is now .update()."),this.update(x,S)},CubeCamera.prototype.clear=function(x,S,w,U){return console.warn("THREE.CubeCamera: .clear() is now .renderTarget.clear()."),this.renderTarget.clear(x,S,w,U)},ImageUtils.crossOrigin=void 0,ImageUtils.loadTexture=function(x,S,w,U){console.warn("THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.");const G=new TextureLoader;G.setCrossOrigin(this.crossOrigin);const H=G.load(x,w,void 0,U);return S&&(H.mapping=S),H},ImageUtils.loadTextureCube=function(x,S,w,U){console.warn("THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.");const G=new CubeTextureLoader;G.setCrossOrigin(this.crossOrigin);const H=G.load(x,w,void 0,U);return S&&(H.mapping=S),H},ImageUtils.loadCompressedTexture=function(){console.error("THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.")},ImageUtils.loadCompressedTextureCube=function(){console.error("THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.")};const _l={createMultiMaterialObject:function(){console.error("THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js")},detach:function(){console.error("THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js")},attach:function(){console.error("THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js")}};function LensFlare(){console.error("THREE.LensFlare has been moved to /examples/jsm/objects/Lensflare.js")}function ParametricGeometry(){return console.error("THREE.ParametricGeometry has been moved to /examples/jsm/geometries/ParametricGeometry.js"),new BufferGeometry}function TextGeometry(){return console.error("THREE.TextGeometry has been moved to /examples/jsm/geometries/TextGeometry.js"),new BufferGeometry}function FontLoader(){console.error("THREE.FontLoader has been moved to /examples/jsm/loaders/FontLoader.js")}function Font(){console.error("THREE.Font has been moved to /examples/jsm/loaders/FontLoader.js")}"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:U}})),"undefined"!=typeof window&&(window.__THREE__?console.warn("WARNING: Multiple instances of Three.js being imported."):window.__THREE__=U)},557:(x,S,w)=>{WebGLDebugUtils=function(){var x;void 0===x&&(x=w.g);var error=function(S){x.console&&x.console.error?x.console.error(S):function(S){x.console&&x.console.log&&x.console.log(S)}(S)},S={enable:{1:{0:!0}},disable:{1:{0:!0}},getParameter:{1:{0:!0}},drawArrays:{3:{0:!0}},drawElements:{4:{0:!0,2:!0}},createShader:{1:{0:!0}},getShaderParameter:{2:{1:!0}},getProgramParameter:{2:{1:!0}},getShaderPrecisionFormat:{2:{0:!0,1:!0}},getVertexAttrib:{2:{1:!0}},vertexAttribPointer:{6:{2:!0}},bindTexture:{2:{0:!0}},activeTexture:{1:{0:!0}},getTexParameter:{2:{0:!0,1:!0}},texParameterf:{3:{0:!0,1:!0}},texParameteri:{3:{0:!0,1:!0,2:!0}},copyTexImage2D:{8:{0:!0,2:!0}},copyTexSubImage2D:{8:{0:!0}},generateMipmap:{1:{0:!0}},bindBuffer:{2:{0:!0}},getBufferParameter:{2:{0:!0,1:!0}},pixelStorei:{2:{0:!0,1:!0}},bindRenderbuffer:{2:{0:!0}},bindFramebuffer:{2:{0:!0}},checkFramebufferStatus:{1:{0:!0}},framebufferRenderbuffer:{4:{0:!0,1:!0,2:!0}},framebufferTexture2D:{5:{0:!0,1:!0,2:!0}},getFramebufferAttachmentParameter:{3:{0:!0,1:!0,2:!0}},getRenderbufferParameter:{2:{0:!0,1:!0}},renderbufferStorage:{4:{0:!0,1:!0}},clear:{1:{0:{enumBitwiseOr:["COLOR_BUFFER_BIT","DEPTH_BUFFER_BIT","STENCIL_BUFFER_BIT"]}}},depthFunc:{1:{0:!0}},blendFunc:{2:{0:!0,1:!0}},blendFuncSeparate:{4:{0:!0,1:!0,2:!0,3:!0}},blendEquation:{1:{0:!0}},blendEquationSeparate:{2:{0:!0,1:!0}},stencilFunc:{3:{0:!0}},stencilFuncSeparate:{4:{0:!0,1:!0}},stencilMaskSeparate:{2:{0:!0}},stencilOp:{3:{0:!0,1:!0,2:!0}},stencilOpSeparate:{4:{0:!0,1:!0,2:!0,3:!0}},cullFace:{1:{0:!0}},frontFace:{1:{0:!0}},drawArraysInstancedANGLE:{4:{0:!0}},drawElementsInstancedANGLE:{5:{0:!0,2:!0}},blendEquationEXT:{1:{0:!0}},bufferData:{3:{0:!0,2:!0},4:{0:!0,2:!0},5:{0:!0,2:!0}},bufferSubData:{3:{0:!0},4:{0:!0},5:{0:!0}},copyBufferSubData:{5:{0:!0,1:!0}},getBufferSubData:{3:{0:!0},4:{0:!0},5:{0:!0}},blitFramebuffer:{10:{8:{enumBitwiseOr:["COLOR_BUFFER_BIT","DEPTH_BUFFER_BIT","STENCIL_BUFFER_BIT"]},9:!0}},framebufferTextureLayer:{5:{0:!0,1:!0}},invalidateFramebuffer:{2:{0:!0}},invalidateSubFramebuffer:{6:{0:!0}},readBuffer:{1:{0:!0}},getInternalformatParameter:{3:{0:!0,1:!0,2:!0}},renderbufferStorageMultisample:{5:{0:!0,2:!0}},texStorage2D:{5:{0:!0,2:!0}},texStorage3D:{6:{0:!0,2:!0}},texImage2D:{9:{0:!0,2:!0,6:!0,7:!0},6:{0:!0,2:!0,3:!0,4:!0},10:{0:!0,2:!0,6:!0,7:!0}},texImage3D:{10:{0:!0,2:!0,7:!0,8:!0},11:{0:!0,2:!0,7:!0,8:!0}},texSubImage2D:{9:{0:!0,6:!0,7:!0},7:{0:!0,4:!0,5:!0},10:{0:!0,6:!0,7:!0}},texSubImage3D:{11:{0:!0,8:!0,9:!0},12:{0:!0,8:!0,9:!0}},copyTexSubImage3D:{9:{0:!0}},compressedTexImage2D:{7:{0:!0,2:!0},8:{0:!0,2:!0},9:{0:!0,2:!0}},compressedTexImage3D:{8:{0:!0,2:!0},9:{0:!0,2:!0},10:{0:!0,2:!0}},compressedTexSubImage2D:{8:{0:!0,6:!0},9:{0:!0,6:!0},10:{0:!0,6:!0}},compressedTexSubImage3D:{10:{0:!0,8:!0},11:{0:!0,8:!0},12:{0:!0,8:!0}},vertexAttribIPointer:{5:{2:!0}},drawArraysInstanced:{4:{0:!0}},drawElementsInstanced:{5:{0:!0,2:!0}},drawRangeElements:{6:{0:!0,4:!0}},readPixels:{7:{4:!0,5:!0},8:{4:!0,5:!0}},clearBufferfv:{3:{0:!0},4:{0:!0}},clearBufferiv:{3:{0:!0},4:{0:!0}},clearBufferuiv:{3:{0:!0},4:{0:!0}},clearBufferfi:{4:{0:!0}},beginQuery:{2:{0:!0}},endQuery:{1:{0:!0}},getQuery:{2:{0:!0,1:!0}},getQueryParameter:{2:{1:!0}},samplerParameteri:{3:{1:!0,2:!0}},samplerParameterf:{3:{1:!0}},getSamplerParameter:{2:{1:!0}},fenceSync:{2:{0:!0,1:{enumBitwiseOr:[]}}},clientWaitSync:{3:{1:{enumBitwiseOr:["SYNC_FLUSH_COMMANDS_BIT"]}}},waitSync:{3:{1:{enumBitwiseOr:[]}}},getSyncParameter:{2:{1:!0}},bindTransformFeedback:{2:{0:!0}},beginTransformFeedback:{1:{0:!0}},transformFeedbackVaryings:{3:{2:!0}},bindBufferBase:{3:{0:!0}},bindBufferRange:{5:{0:!0}},getIndexedParameter:{2:{0:!0}},getActiveUniforms:{3:{2:!0}},getActiveUniformBlockParameter:{3:{2:!0}}},U=null,G=null;function init(x){if(null==U)for(var S in U={},G={},x)"number"==typeof x[S]&&(U[x[S]]=S,G[S]=x[S])}function checkInit(){if(null==U)throw"WebGLDebugUtils.init(ctx) not called"}function glEnumToString(x){checkInit();var S=U[x];return void 0!==S?"gl."+S:"/*UNKNOWN WebGL ENUM*/ 0x"+x.toString(16)}function glFunctionArgToString(x,w,U,H){var z;if(void 0!==(z=S[x])&&(void 0!==(z=z[w])&&z[U])){if("object"==typeof z[U]&&void 0!==z[U].enumBitwiseOr){for(var j=z[U].enumBitwiseOr,X=0,K=[],q=0;q=0&&setTimeout((function(){S.restoreContext()}),Q)}),0)}},S.restoreContext=function(){K&&z.length&&setTimeout((function(){if(!J)throw"can not restore. webglcontestlost listener did not call event.preventDefault";!function freeResources(){for(var x=0;x{x.exports="#version 100\r\n#extension GL_EXT_draw_buffers: enable\r\nprecision highp float;\r\n\r\nuniform sampler2D u_colmap;\r\nuniform sampler2D u_normap;\r\n\r\nvarying vec3 v_position;\r\nvarying vec3 v_normal;\r\nvarying vec2 v_uv;\r\n\r\nvec3 applyNormalMap(vec3 geomnor, vec3 normap) {\r\n normap = normap * 2.0 - 1.0;\r\n vec3 up = normalize(vec3(0.001, 1, 0.001));\r\n vec3 surftan = normalize(cross(geomnor, up));\r\n vec3 surfbinor = cross(geomnor, surftan);\r\n return normap.y * surftan + normap.x * surfbinor + normap.z * geomnor;\r\n}\r\n\r\nvoid main() {\r\n vec3 norm = applyNormalMap(v_normal, vec3(texture2D(u_normap, v_uv)));\r\n vec3 col = vec3(texture2D(u_colmap, v_uv));\r\n\r\n // TODO: populate your g buffer\r\n gl_FragData[0] = vec4(v_position, 1.0);\r\n gl_FragData[1] = vec4(col, 1.0);\r\n gl_FragData[2] = vec4(norm, 1.0);\r\n // gl_FragData[3] = ?? // depth buffer\r\n}"},864:x=>{x.exports="#version 100\r\nprecision highp float;\r\n\r\nuniform mat4 u_viewProjectionMatrix;\r\n\r\nattribute vec3 a_position;\r\nattribute vec3 a_normal;\r\nattribute vec2 a_uv;\r\n\r\nvarying vec3 v_position;\r\nvarying vec3 v_normal;\r\nvarying vec2 v_uv;\r\n\r\nvoid main() {\r\n gl_Position = u_viewProjectionMatrix * vec4(a_position, 1.0);\r\n v_position = a_position;\r\n v_normal = a_normal;\r\n v_uv = a_uv;\r\n}"},594:x=>{x.exports="#version 100\r\nprecision highp float;\r\n\r\nuniform mat4 u_viewProjectionMatrix;\r\n\r\nattribute vec3 a_position;\r\nattribute vec3 a_normal;\r\nattribute vec2 a_uv;\r\n\r\nvarying vec3 v_position;\r\nvarying vec3 v_normal;\r\nvarying vec2 v_uv;\r\n\r\nvoid main() {\r\n gl_Position = u_viewProjectionMatrix * vec4(a_position, 1.0);\r\n v_position = a_position;\r\n v_normal = a_normal;\r\n v_uv = a_uv;\r\n}"},863:x=>{x.exports="#version 100\r\nprecision highp float;\r\n\r\nuniform mat4 u_viewProjectionMatrix;\r\n\r\nattribute vec3 a_position;\r\nattribute vec3 a_normal;\r\nattribute vec2 a_uv;\r\n\r\nvarying vec3 v_position;\r\nvarying vec3 v_normal;\r\nvarying vec2 v_uv;\r\n\r\nvoid main() {\r\n gl_Position = u_viewProjectionMatrix * vec4(a_position, 1.0);\r\n v_position = a_position;\r\n v_normal = a_normal;\r\n v_uv = a_uv;\r\n}"},999:x=>{x.exports="#version 100\r\nprecision highp float;\r\n\r\nattribute vec3 a_position;\r\n\r\nvarying vec2 v_uv;\r\n\r\nvoid main() {\r\n gl_Position = vec4(a_position, 1.0);\r\n v_uv = a_position.xy * 0.5 + 0.5;\r\n}"},355:x=>{x.exports="precision highp float;\r\n\r\nvarying vec3 v_color;\r\n\r\nvoid main() {\r\n gl_FragColor = vec4(v_color, 1.0);\r\n}\r\n"},7:x=>{x.exports="#version 100\r\nprecision highp float;\r\n\r\nuniform mat4 u_viewProjectionMatrix;\r\n\r\nattribute vec3 a_position;\r\nattribute vec3 a_color;\r\n\r\nvarying vec3 v_color;\r\n\r\nvoid main() {\r\n gl_Position = u_viewProjectionMatrix * vec4(a_position, 1.0);\r\n v_color = a_color;\r\n}\r\n"}},S={};function __webpack_require__(w){var U=S[w];if(void 0!==U)return U.exports;var G=S[w]={exports:{}};return x[w].call(G.exports,G,G.exports,__webpack_require__),G.exports}__webpack_require__.n=x=>{var S=x&&x.__esModule?()=>x.default:()=>x;return __webpack_require__.d(S,{a:S}),S},__webpack_require__.d=(x,S)=>{for(var w in S)__webpack_require__.o(S,w)&&!__webpack_require__.o(x,w)&&Object.defineProperty(x,w,{enumerable:!0,get:S[w]})},__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(x){if("object"==typeof window)return window}}(),__webpack_require__.o=(x,S)=>Object.prototype.hasOwnProperty.call(x,S),__webpack_require__.r=x=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(x,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(x,"__esModule",{value:!0})};__webpack_require__(943)})(); +//# sourceMappingURL=bundle.js.map \ No newline at end of file diff --git a/build/bundle.js.LICENSE.txt b/build/bundle.js.LICENSE.txt new file mode 100644 index 0000000..d8e0f3f --- /dev/null +++ b/build/bundle.js.LICENSE.txt @@ -0,0 +1,5 @@ +/** + * @license + * Copyright 2010-2021 Three.js Authors + * SPDX-License-Identifier: MIT + */ diff --git a/build/bundle.js.map b/build/bundle.js.map new file mode 100644 index 0000000..63acd8e --- /dev/null +++ b/build/bundle.js.map @@ -0,0 +1 @@ +{"version":3,"file":"bundle.js","mappings":"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GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAGj2B,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EA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I,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAA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AAE,KAAK,KAAK,GAAG,OAAO4R,EAAEjY,GAAGqG,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,IAAIA,EAAE,KAAK,KAAK,GAAG,OAAO4R,EAAEjY,GAAGqG,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,IAAIA,EAAE,IAAIA,EAAE,KAAK,KAAK,GAAG,OAAO4R,EAAEjY,GAAGqG,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,IAAIA,EAAE,IAAIA,EAAE,IAAIA,EAAE,KAAK,KAAK,GAAG,OAAO4R,EAAEjY,GAAGqG,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,IAAIA,EAAE,IAAIA,EAAE,IAAIA,EAAE,IAAIA,EAAE,KAAK,KAAK,GAAG,OAAO4R,EAAEjY,GAAGqG,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,IAAIA,EAAE,IAAIA,EAAE,IAAIA,EAAE,IAAIA,EAAE,IAAIA,EAAE,KAAK,KAAK,GAAG,OAAO4R,EAAEjY,GAAGqG,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,IAAIA,EAAE,IAAIA,EAAE,IAAIA,EAAE,IAAIA,EAAE,IAAIA,EAAE,IAAIA,EAAE,KAAK,KAAK,GAAG,OAAO4R,EAAEjY,GAAGqG,EAAE,GAAGA,EAAE,GAAGA,E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","sources":["webpack:///./node_modules/gl-matrix/esm/vec3.js","webpack:///./node_modules/gl-matrix/esm/mat3.js","webpack:///./node_modules/gl-matrix/esm/quat.js","webpack:///./lib/minimal-gltf-loader.js","webpack:///./node_modules/dat.gui/build/dat.gui.module.js","webpack:///./src/init.js","webpack:///./src/utils.js","webpack:///./src/scene.js","webpack:///./src/renderers/textureBuffer.js","webpack:///./src/renderers/forward.js","webpack:///./src/shaders/forward.frag.glsl.js","webpack:///./src/renderers/base.js","webpack:///./src/renderers/forwardPlus.js","webpack:///./src/shaders/forwardPlus.frag.glsl.js","webpack:///./src/renderers/clusteredDeferred.js","webpack:///./src/shaders/deferred.frag.glsl.js","webpack:///./src/wireframe.js","webpack:///./src/main.js","webpack:///./node_modules/gl-matrix/esm/common.js","webpack:///./node_modules/gl-matrix/esm/mat4.js","webpack:///./node_modules/gl-matrix/esm/vec4.js","webpack:///./node_modules/spectorjs/dist/spector.bundle.js","webpack:///./node_modules/stats-js/build/stats.min.js","webpack:///./node_modules/three-orbitcontrols/OrbitControls.js","webpack:///./node_modules/three/build/three.module.js","webpack:///./node_modules/webgl-debug/index.js","webpack:///./src/shaders/deferredToTexture.frag.glsl","webpack:///./src/shaders/deferredToTexture.vert.glsl","webpack:///./src/shaders/forward.vert.glsl","webpack:///./src/shaders/forwardPlus.vert.glsl","webpack:///./src/shaders/quad.vert.glsl","webpack:///./src/shaders/wireframe.frag.glsl","webpack:///./src/shaders/wireframe.vert.glsl","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/global","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///webpack/runtime/make namespace object","webpack:///webpack/startup"],"sourcesContent":["import * as glMatrix from \"./common.js\";\n/**\n * 3 Dimensional Vector\n * @module vec3\n */\n\n/**\n * Creates a new, empty vec3\n *\n * @returns {vec3} a new 3D vector\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(3);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n }\n\n return out;\n}\n/**\n * Creates a new vec3 initialized with values from an existing vector\n *\n * @param {ReadonlyVec3} a vector to clone\n * @returns {vec3} a new 3D vector\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(3);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n}\n/**\n * Calculates the length of a vec3\n *\n * @param {ReadonlyVec3} a vector to calculate length of\n * @returns {Number} length of a\n */\n\nexport function length(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n return Math.hypot(x, y, z);\n}\n/**\n * Creates a new vec3 initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @returns {vec3} a new 3D vector\n */\n\nexport function fromValues(x, y, z) {\n var out = new glMatrix.ARRAY_TYPE(3);\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n}\n/**\n * Copy the values from one vec3 to another\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the source vector\n * @returns {vec3} out\n */\n\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n}\n/**\n * Set the components of a vec3 to the given values\n *\n * @param {vec3} out the receiving vector\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @returns {vec3} out\n */\n\nexport function set(out, x, y, z) {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n}\n/**\n * Adds two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n return out;\n}\n/**\n * Subtracts vector b from vector a\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n return out;\n}\n/**\n * Multiplies two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n out[2] = a[2] * b[2];\n return out;\n}\n/**\n * Divides two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n out[2] = a[2] / b[2];\n return out;\n}\n/**\n * Math.ceil the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to ceil\n * @returns {vec3} out\n */\n\nexport function ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n out[2] = Math.ceil(a[2]);\n return out;\n}\n/**\n * Math.floor the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to floor\n * @returns {vec3} out\n */\n\nexport function floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n out[2] = Math.floor(a[2]);\n return out;\n}\n/**\n * Returns the minimum of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n out[2] = Math.min(a[2], b[2]);\n return out;\n}\n/**\n * Returns the maximum of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n out[2] = Math.max(a[2], b[2]);\n return out;\n}\n/**\n * Math.round the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to round\n * @returns {vec3} out\n */\n\nexport function round(out, a) {\n out[0] = Math.round(a[0]);\n out[1] = Math.round(a[1]);\n out[2] = Math.round(a[2]);\n return out;\n}\n/**\n * Scales a vec3 by a scalar number\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {vec3} out\n */\n\nexport function scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n return out;\n}\n/**\n * Adds two vec3's after scaling the second operand by a scalar value\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {Number} scale the amount to scale b by before adding\n * @returns {vec3} out\n */\n\nexport function scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n return out;\n}\n/**\n * Calculates the euclidian distance between two vec3's\n *\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {Number} distance between a and b\n */\n\nexport function distance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n return Math.hypot(x, y, z);\n}\n/**\n * Calculates the squared euclidian distance between two vec3's\n *\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {Number} squared distance between a and b\n */\n\nexport function squaredDistance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n return x * x + y * y + z * z;\n}\n/**\n * Calculates the squared length of a vec3\n *\n * @param {ReadonlyVec3} a vector to calculate squared length of\n * @returns {Number} squared length of a\n */\n\nexport function squaredLength(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n return x * x + y * y + z * z;\n}\n/**\n * Negates the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to negate\n * @returns {vec3} out\n */\n\nexport function negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n return out;\n}\n/**\n * Returns the inverse of the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to invert\n * @returns {vec3} out\n */\n\nexport function inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n out[2] = 1.0 / a[2];\n return out;\n}\n/**\n * Normalize a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to normalize\n * @returns {vec3} out\n */\n\nexport function normalize(out, a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var len = x * x + y * y + z * z;\n\n if (len > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len);\n }\n\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n out[2] = a[2] * len;\n return out;\n}\n/**\n * Calculates the dot product of two vec3's\n *\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {Number} dot product of a and b\n */\n\nexport function dot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n/**\n * Computes the cross product of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function cross(out, a, b) {\n var ax = a[0],\n ay = a[1],\n az = a[2];\n var bx = b[0],\n by = b[1],\n bz = b[2];\n out[0] = ay * bz - az * by;\n out[1] = az * bx - ax * bz;\n out[2] = ax * by - ay * bx;\n return out;\n}\n/**\n * Performs a linear interpolation between two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec3} out\n */\n\nexport function lerp(out, a, b, t) {\n var ax = a[0];\n var ay = a[1];\n var az = a[2];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n out[2] = az + t * (b[2] - az);\n return out;\n}\n/**\n * Performs a hermite interpolation with two control points\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {ReadonlyVec3} c the third operand\n * @param {ReadonlyVec3} d the fourth operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec3} out\n */\n\nexport function hermite(out, a, b, c, d, t) {\n var factorTimes2 = t * t;\n var factor1 = factorTimes2 * (2 * t - 3) + 1;\n var factor2 = factorTimes2 * (t - 2) + t;\n var factor3 = factorTimes2 * (t - 1);\n var factor4 = factorTimes2 * (3 - 2 * t);\n out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n return out;\n}\n/**\n * Performs a bezier interpolation with two control points\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {ReadonlyVec3} c the third operand\n * @param {ReadonlyVec3} d the fourth operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec3} out\n */\n\nexport function bezier(out, a, b, c, d, t) {\n var inverseFactor = 1 - t;\n var inverseFactorTimesTwo = inverseFactor * inverseFactor;\n var factorTimes2 = t * t;\n var factor1 = inverseFactorTimesTwo * inverseFactor;\n var factor2 = 3 * t * inverseFactorTimesTwo;\n var factor3 = 3 * factorTimes2 * inverseFactor;\n var factor4 = factorTimes2 * t;\n out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n return out;\n}\n/**\n * Generates a random vector with the given scale\n *\n * @param {vec3} out the receiving vector\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\n * @returns {vec3} out\n */\n\nexport function random(out, scale) {\n scale = scale || 1.0;\n var r = glMatrix.RANDOM() * 2.0 * Math.PI;\n var z = glMatrix.RANDOM() * 2.0 - 1.0;\n var zScale = Math.sqrt(1.0 - z * z) * scale;\n out[0] = Math.cos(r) * zScale;\n out[1] = Math.sin(r) * zScale;\n out[2] = z * scale;\n return out;\n}\n/**\n * Transforms the vec3 with a mat4.\n * 4th vector component is implicitly '1'\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to transform\n * @param {ReadonlyMat4} m matrix to transform with\n * @returns {vec3} out\n */\n\nexport function transformMat4(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2];\n var w = m[3] * x + m[7] * y + m[11] * z + m[15];\n w = w || 1.0;\n out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\n out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\n out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\n return out;\n}\n/**\n * Transforms the vec3 with a mat3.\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to transform\n * @param {ReadonlyMat3} m the 3x3 matrix to transform with\n * @returns {vec3} out\n */\n\nexport function transformMat3(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2];\n out[0] = x * m[0] + y * m[3] + z * m[6];\n out[1] = x * m[1] + y * m[4] + z * m[7];\n out[2] = x * m[2] + y * m[5] + z * m[8];\n return out;\n}\n/**\n * Transforms the vec3 with a quat\n * Can also be used for dual quaternions. (Multiply it with the real part)\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to transform\n * @param {ReadonlyQuat} q quaternion to transform with\n * @returns {vec3} out\n */\n\nexport function transformQuat(out, a, q) {\n // benchmarks: https://jsperf.com/quaternion-transform-vec3-implementations-fixed\n var qx = q[0],\n qy = q[1],\n qz = q[2],\n qw = q[3];\n var x = a[0],\n y = a[1],\n z = a[2]; // var qvec = [qx, qy, qz];\n // var uv = vec3.cross([], qvec, a);\n\n var uvx = qy * z - qz * y,\n uvy = qz * x - qx * z,\n uvz = qx * y - qy * x; // var uuv = vec3.cross([], qvec, uv);\n\n var uuvx = qy * uvz - qz * uvy,\n uuvy = qz * uvx - qx * uvz,\n uuvz = qx * uvy - qy * uvx; // vec3.scale(uv, uv, 2 * w);\n\n var w2 = qw * 2;\n uvx *= w2;\n uvy *= w2;\n uvz *= w2; // vec3.scale(uuv, uuv, 2);\n\n uuvx *= 2;\n uuvy *= 2;\n uuvz *= 2; // return vec3.add(out, a, vec3.add(out, uv, uuv));\n\n out[0] = x + uvx + uuvx;\n out[1] = y + uvy + uuvy;\n out[2] = z + uvz + uuvz;\n return out;\n}\n/**\n * Rotate a 3D vector around the x-axis\n * @param {vec3} out The receiving vec3\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @returns {vec3} out\n */\n\nexport function rotateX(out, a, b, rad) {\n var p = [],\n r = []; //Translate point to the origin\n\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2]; //perform rotation\n\n r[0] = p[0];\n r[1] = p[1] * Math.cos(rad) - p[2] * Math.sin(rad);\n r[2] = p[1] * Math.sin(rad) + p[2] * Math.cos(rad); //translate to correct position\n\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n/**\n * Rotate a 3D vector around the y-axis\n * @param {vec3} out The receiving vec3\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @returns {vec3} out\n */\n\nexport function rotateY(out, a, b, rad) {\n var p = [],\n r = []; //Translate point to the origin\n\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2]; //perform rotation\n\n r[0] = p[2] * Math.sin(rad) + p[0] * Math.cos(rad);\n r[1] = p[1];\n r[2] = p[2] * Math.cos(rad) - p[0] * Math.sin(rad); //translate to correct position\n\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n/**\n * Rotate a 3D vector around the z-axis\n * @param {vec3} out The receiving vec3\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @returns {vec3} out\n */\n\nexport function rotateZ(out, a, b, rad) {\n var p = [],\n r = []; //Translate point to the origin\n\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2]; //perform rotation\n\n r[0] = p[0] * Math.cos(rad) - p[1] * Math.sin(rad);\n r[1] = p[0] * Math.sin(rad) + p[1] * Math.cos(rad);\n r[2] = p[2]; //translate to correct position\n\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n/**\n * Get the angle between two 3D vectors\n * @param {ReadonlyVec3} a The first operand\n * @param {ReadonlyVec3} b The second operand\n * @returns {Number} The angle in radians\n */\n\nexport function angle(a, b) {\n var ax = a[0],\n ay = a[1],\n az = a[2],\n bx = b[0],\n by = b[1],\n bz = b[2],\n mag1 = Math.sqrt(ax * ax + ay * ay + az * az),\n mag2 = Math.sqrt(bx * bx + by * by + bz * bz),\n mag = mag1 * mag2,\n cosine = mag && dot(a, b) / mag;\n return Math.acos(Math.min(Math.max(cosine, -1), 1));\n}\n/**\n * Set the components of a vec3 to zero\n *\n * @param {vec3} out the receiving vector\n * @returns {vec3} out\n */\n\nexport function zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n out[2] = 0.0;\n return out;\n}\n/**\n * Returns a string representation of a vector\n *\n * @param {ReadonlyVec3} a vector to represent as a string\n * @returns {String} string representation of the vector\n */\n\nexport function str(a) {\n return \"vec3(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \")\";\n}\n/**\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyVec3} a The first vector.\n * @param {ReadonlyVec3} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];\n}\n/**\n * Returns whether or not the vectors have approximately the same elements in the same position.\n *\n * @param {ReadonlyVec3} a The first vector.\n * @param {ReadonlyVec3} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2));\n}\n/**\n * Alias for {@link vec3.subtract}\n * @function\n */\n\nexport var sub = subtract;\n/**\n * Alias for {@link vec3.multiply}\n * @function\n */\n\nexport var mul = multiply;\n/**\n * Alias for {@link vec3.divide}\n * @function\n */\n\nexport var div = divide;\n/**\n * Alias for {@link vec3.distance}\n * @function\n */\n\nexport var dist = distance;\n/**\n * Alias for {@link vec3.squaredDistance}\n * @function\n */\n\nexport var sqrDist = squaredDistance;\n/**\n * Alias for {@link vec3.length}\n * @function\n */\n\nexport var len = length;\n/**\n * Alias for {@link vec3.squaredLength}\n * @function\n */\n\nexport var sqrLen = squaredLength;\n/**\n * Perform some operation over an array of vec3s.\n *\n * @param {Array} a the array of vectors to iterate over\n * @param {Number} stride Number of elements between the start of each vec3. If 0 assumes tightly packed\n * @param {Number} offset Number of elements to skip at the beginning of the array\n * @param {Number} count Number of vec3s to iterate over. If 0 iterates over entire array\n * @param {Function} fn Function to call for each vector in the array\n * @param {Object} [arg] additional argument to pass to fn\n * @returns {Array} a\n * @function\n */\n\nexport var forEach = function () {\n var vec = create();\n return function (a, stride, offset, count, fn, arg) {\n var i, l;\n\n if (!stride) {\n stride = 3;\n }\n\n if (!offset) {\n offset = 0;\n }\n\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\n\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n vec[2] = a[i + 2];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n a[i + 2] = vec[2];\n }\n\n return a;\n };\n}();","import * as glMatrix from \"./common.js\";\n/**\n * 3x3 Matrix\n * @module mat3\n */\n\n/**\n * Creates a new identity mat3\n *\n * @returns {mat3} a new 3x3 matrix\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(9);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n }\n\n out[0] = 1;\n out[4] = 1;\n out[8] = 1;\n return out;\n}\n/**\n * Copies the upper-left 3x3 values into the given mat3.\n *\n * @param {mat3} out the receiving 3x3 matrix\n * @param {ReadonlyMat4} a the source 4x4 matrix\n * @returns {mat3} out\n */\n\nexport function fromMat4(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[4];\n out[4] = a[5];\n out[5] = a[6];\n out[6] = a[8];\n out[7] = a[9];\n out[8] = a[10];\n return out;\n}\n/**\n * Creates a new mat3 initialized with values from an existing matrix\n *\n * @param {ReadonlyMat3} a matrix to clone\n * @returns {mat3} a new 3x3 matrix\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(9);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n}\n/**\n * Copy the values from one mat3 to another\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the source matrix\n * @returns {mat3} out\n */\n\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n}\n/**\n * Create a new mat3 with the given values\n *\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\n * @param {Number} m10 Component in column 1, row 0 position (index 3)\n * @param {Number} m11 Component in column 1, row 1 position (index 4)\n * @param {Number} m12 Component in column 1, row 2 position (index 5)\n * @param {Number} m20 Component in column 2, row 0 position (index 6)\n * @param {Number} m21 Component in column 2, row 1 position (index 7)\n * @param {Number} m22 Component in column 2, row 2 position (index 8)\n * @returns {mat3} A new mat3\n */\n\nexport function fromValues(m00, m01, m02, m10, m11, m12, m20, m21, m22) {\n var out = new glMatrix.ARRAY_TYPE(9);\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m10;\n out[4] = m11;\n out[5] = m12;\n out[6] = m20;\n out[7] = m21;\n out[8] = m22;\n return out;\n}\n/**\n * Set the components of a mat3 to the given values\n *\n * @param {mat3} out the receiving matrix\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\n * @param {Number} m10 Component in column 1, row 0 position (index 3)\n * @param {Number} m11 Component in column 1, row 1 position (index 4)\n * @param {Number} m12 Component in column 1, row 2 position (index 5)\n * @param {Number} m20 Component in column 2, row 0 position (index 6)\n * @param {Number} m21 Component in column 2, row 1 position (index 7)\n * @param {Number} m22 Component in column 2, row 2 position (index 8)\n * @returns {mat3} out\n */\n\nexport function set(out, m00, m01, m02, m10, m11, m12, m20, m21, m22) {\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m10;\n out[4] = m11;\n out[5] = m12;\n out[6] = m20;\n out[7] = m21;\n out[8] = m22;\n return out;\n}\n/**\n * Set a mat3 to the identity matrix\n *\n * @param {mat3} out the receiving matrix\n * @returns {mat3} out\n */\n\nexport function identity(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 1;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n}\n/**\n * Transpose the values of a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the source matrix\n * @returns {mat3} out\n */\n\nexport function transpose(out, a) {\n // If we are transposing ourselves we can skip a few steps but have to cache some values\n if (out === a) {\n var a01 = a[1],\n a02 = a[2],\n a12 = a[5];\n out[1] = a[3];\n out[2] = a[6];\n out[3] = a01;\n out[5] = a[7];\n out[6] = a02;\n out[7] = a12;\n } else {\n out[0] = a[0];\n out[1] = a[3];\n out[2] = a[6];\n out[3] = a[1];\n out[4] = a[4];\n out[5] = a[7];\n out[6] = a[2];\n out[7] = a[5];\n out[8] = a[8];\n }\n\n return out;\n}\n/**\n * Inverts a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the source matrix\n * @returns {mat3} out\n */\n\nexport function invert(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n var b01 = a22 * a11 - a12 * a21;\n var b11 = -a22 * a10 + a12 * a20;\n var b21 = a21 * a10 - a11 * a20; // Calculate the determinant\n\n var det = a00 * b01 + a01 * b11 + a02 * b21;\n\n if (!det) {\n return null;\n }\n\n det = 1.0 / det;\n out[0] = b01 * det;\n out[1] = (-a22 * a01 + a02 * a21) * det;\n out[2] = (a12 * a01 - a02 * a11) * det;\n out[3] = b11 * det;\n out[4] = (a22 * a00 - a02 * a20) * det;\n out[5] = (-a12 * a00 + a02 * a10) * det;\n out[6] = b21 * det;\n out[7] = (-a21 * a00 + a01 * a20) * det;\n out[8] = (a11 * a00 - a01 * a10) * det;\n return out;\n}\n/**\n * Calculates the adjugate of a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the source matrix\n * @returns {mat3} out\n */\n\nexport function adjoint(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n out[0] = a11 * a22 - a12 * a21;\n out[1] = a02 * a21 - a01 * a22;\n out[2] = a01 * a12 - a02 * a11;\n out[3] = a12 * a20 - a10 * a22;\n out[4] = a00 * a22 - a02 * a20;\n out[5] = a02 * a10 - a00 * a12;\n out[6] = a10 * a21 - a11 * a20;\n out[7] = a01 * a20 - a00 * a21;\n out[8] = a00 * a11 - a01 * a10;\n return out;\n}\n/**\n * Calculates the determinant of a mat3\n *\n * @param {ReadonlyMat3} a the source matrix\n * @returns {Number} determinant of a\n */\n\nexport function determinant(a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n return a00 * (a22 * a11 - a12 * a21) + a01 * (-a22 * a10 + a12 * a20) + a02 * (a21 * a10 - a11 * a20);\n}\n/**\n * Multiplies two mat3's\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the first operand\n * @param {ReadonlyMat3} b the second operand\n * @returns {mat3} out\n */\n\nexport function multiply(out, a, b) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n var b00 = b[0],\n b01 = b[1],\n b02 = b[2];\n var b10 = b[3],\n b11 = b[4],\n b12 = b[5];\n var b20 = b[6],\n b21 = b[7],\n b22 = b[8];\n out[0] = b00 * a00 + b01 * a10 + b02 * a20;\n out[1] = b00 * a01 + b01 * a11 + b02 * a21;\n out[2] = b00 * a02 + b01 * a12 + b02 * a22;\n out[3] = b10 * a00 + b11 * a10 + b12 * a20;\n out[4] = b10 * a01 + b11 * a11 + b12 * a21;\n out[5] = b10 * a02 + b11 * a12 + b12 * a22;\n out[6] = b20 * a00 + b21 * a10 + b22 * a20;\n out[7] = b20 * a01 + b21 * a11 + b22 * a21;\n out[8] = b20 * a02 + b21 * a12 + b22 * a22;\n return out;\n}\n/**\n * Translate a mat3 by the given vector\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to translate\n * @param {ReadonlyVec2} v vector to translate by\n * @returns {mat3} out\n */\n\nexport function translate(out, a, v) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a10 = a[3],\n a11 = a[4],\n a12 = a[5],\n a20 = a[6],\n a21 = a[7],\n a22 = a[8],\n x = v[0],\n y = v[1];\n out[0] = a00;\n out[1] = a01;\n out[2] = a02;\n out[3] = a10;\n out[4] = a11;\n out[5] = a12;\n out[6] = x * a00 + y * a10 + a20;\n out[7] = x * a01 + y * a11 + a21;\n out[8] = x * a02 + y * a12 + a22;\n return out;\n}\n/**\n * Rotates a mat3 by the given angle\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat3} out\n */\n\nexport function rotate(out, a, rad) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a10 = a[3],\n a11 = a[4],\n a12 = a[5],\n a20 = a[6],\n a21 = a[7],\n a22 = a[8],\n s = Math.sin(rad),\n c = Math.cos(rad);\n out[0] = c * a00 + s * a10;\n out[1] = c * a01 + s * a11;\n out[2] = c * a02 + s * a12;\n out[3] = c * a10 - s * a00;\n out[4] = c * a11 - s * a01;\n out[5] = c * a12 - s * a02;\n out[6] = a20;\n out[7] = a21;\n out[8] = a22;\n return out;\n}\n/**\n * Scales the mat3 by the dimensions in the given vec2\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to rotate\n * @param {ReadonlyVec2} v the vec2 to scale the matrix by\n * @returns {mat3} out\n **/\n\nexport function scale(out, a, v) {\n var x = v[0],\n y = v[1];\n out[0] = x * a[0];\n out[1] = x * a[1];\n out[2] = x * a[2];\n out[3] = y * a[3];\n out[4] = y * a[4];\n out[5] = y * a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n}\n/**\n * Creates a matrix from a vector translation\n * This is equivalent to (but much faster than):\n *\n * mat3.identity(dest);\n * mat3.translate(dest, dest, vec);\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {ReadonlyVec2} v Translation vector\n * @returns {mat3} out\n */\n\nexport function fromTranslation(out, v) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 1;\n out[5] = 0;\n out[6] = v[0];\n out[7] = v[1];\n out[8] = 1;\n return out;\n}\n/**\n * Creates a matrix from a given angle\n * This is equivalent to (but much faster than):\n *\n * mat3.identity(dest);\n * mat3.rotate(dest, dest, rad);\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat3} out\n */\n\nexport function fromRotation(out, rad) {\n var s = Math.sin(rad),\n c = Math.cos(rad);\n out[0] = c;\n out[1] = s;\n out[2] = 0;\n out[3] = -s;\n out[4] = c;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n}\n/**\n * Creates a matrix from a vector scaling\n * This is equivalent to (but much faster than):\n *\n * mat3.identity(dest);\n * mat3.scale(dest, dest, vec);\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {ReadonlyVec2} v Scaling vector\n * @returns {mat3} out\n */\n\nexport function fromScaling(out, v) {\n out[0] = v[0];\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = v[1];\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n}\n/**\n * Copies the values from a mat2d into a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat2d} a the matrix to copy\n * @returns {mat3} out\n **/\n\nexport function fromMat2d(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = 0;\n out[3] = a[2];\n out[4] = a[3];\n out[5] = 0;\n out[6] = a[4];\n out[7] = a[5];\n out[8] = 1;\n return out;\n}\n/**\n * Calculates a 3x3 matrix from the given quaternion\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {ReadonlyQuat} q Quaternion to create matrix from\n *\n * @returns {mat3} out\n */\n\nexport function fromQuat(out, q) {\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var yx = y * x2;\n var yy = y * y2;\n var zx = z * x2;\n var zy = z * y2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n out[0] = 1 - yy - zz;\n out[3] = yx - wz;\n out[6] = zx + wy;\n out[1] = yx + wz;\n out[4] = 1 - xx - zz;\n out[7] = zy - wx;\n out[2] = zx - wy;\n out[5] = zy + wx;\n out[8] = 1 - xx - yy;\n return out;\n}\n/**\n * Calculates a 3x3 normal matrix (transpose inverse) from the 4x4 matrix\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {ReadonlyMat4} a Mat4 to derive the normal matrix from\n *\n * @returns {mat3} out\n */\n\nexport function normalFromMat4(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n var b00 = a00 * a11 - a01 * a10;\n var b01 = a00 * a12 - a02 * a10;\n var b02 = a00 * a13 - a03 * a10;\n var b03 = a01 * a12 - a02 * a11;\n var b04 = a01 * a13 - a03 * a11;\n var b05 = a02 * a13 - a03 * a12;\n var b06 = a20 * a31 - a21 * a30;\n var b07 = a20 * a32 - a22 * a30;\n var b08 = a20 * a33 - a23 * a30;\n var b09 = a21 * a32 - a22 * a31;\n var b10 = a21 * a33 - a23 * a31;\n var b11 = a22 * a33 - a23 * a32; // Calculate the determinant\n\n var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n if (!det) {\n return null;\n }\n\n det = 1.0 / det;\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n out[1] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n out[2] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n out[3] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n out[4] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n out[5] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n out[6] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n out[7] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n out[8] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n return out;\n}\n/**\n * Generates a 2D projection matrix with the given bounds\n *\n * @param {mat3} out mat3 frustum matrix will be written into\n * @param {number} width Width of your gl context\n * @param {number} height Height of gl context\n * @returns {mat3} out\n */\n\nexport function projection(out, width, height) {\n out[0] = 2 / width;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = -2 / height;\n out[5] = 0;\n out[6] = -1;\n out[7] = 1;\n out[8] = 1;\n return out;\n}\n/**\n * Returns a string representation of a mat3\n *\n * @param {ReadonlyMat3} a matrix to represent as a string\n * @returns {String} string representation of the matrix\n */\n\nexport function str(a) {\n return \"mat3(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \", \" + a[4] + \", \" + a[5] + \", \" + a[6] + \", \" + a[7] + \", \" + a[8] + \")\";\n}\n/**\n * Returns Frobenius norm of a mat3\n *\n * @param {ReadonlyMat3} a the matrix to calculate Frobenius norm of\n * @returns {Number} Frobenius norm\n */\n\nexport function frob(a) {\n return Math.hypot(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);\n}\n/**\n * Adds two mat3's\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the first operand\n * @param {ReadonlyMat3} b the second operand\n * @returns {mat3} out\n */\n\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n out[4] = a[4] + b[4];\n out[5] = a[5] + b[5];\n out[6] = a[6] + b[6];\n out[7] = a[7] + b[7];\n out[8] = a[8] + b[8];\n return out;\n}\n/**\n * Subtracts matrix b from matrix a\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the first operand\n * @param {ReadonlyMat3} b the second operand\n * @returns {mat3} out\n */\n\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n out[4] = a[4] - b[4];\n out[5] = a[5] - b[5];\n out[6] = a[6] - b[6];\n out[7] = a[7] - b[7];\n out[8] = a[8] - b[8];\n return out;\n}\n/**\n * Multiply each element of the matrix by a scalar.\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to scale\n * @param {Number} b amount to scale the matrix's elements by\n * @returns {mat3} out\n */\n\nexport function multiplyScalar(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n out[4] = a[4] * b;\n out[5] = a[5] * b;\n out[6] = a[6] * b;\n out[7] = a[7] * b;\n out[8] = a[8] * b;\n return out;\n}\n/**\n * Adds two mat3's after multiplying each element of the second operand by a scalar value.\n *\n * @param {mat3} out the receiving vector\n * @param {ReadonlyMat3} a the first operand\n * @param {ReadonlyMat3} b the second operand\n * @param {Number} scale the amount to scale b's elements by before adding\n * @returns {mat3} out\n */\n\nexport function multiplyScalarAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n out[3] = a[3] + b[3] * scale;\n out[4] = a[4] + b[4] * scale;\n out[5] = a[5] + b[5] * scale;\n out[6] = a[6] + b[6] * scale;\n out[7] = a[7] + b[7] * scale;\n out[8] = a[8] + b[8] * scale;\n return out;\n}\n/**\n * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyMat3} a The first matrix.\n * @param {ReadonlyMat3} b The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n */\n\nexport function exactEquals(a, b) {\n return 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];\n}\n/**\n * Returns whether or not the matrices have approximately the same elements in the same position.\n *\n * @param {ReadonlyMat3} a The first matrix.\n * @param {ReadonlyMat3} b The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3],\n a4 = a[4],\n a5 = a[5],\n a6 = a[6],\n a7 = a[7],\n a8 = a[8];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7)) && Math.abs(a8 - b8) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a8), Math.abs(b8));\n}\n/**\n * Alias for {@link mat3.multiply}\n * @function\n */\n\nexport var mul = multiply;\n/**\n * Alias for {@link mat3.subtract}\n * @function\n */\n\nexport var sub = subtract;","import * as glMatrix from \"./common.js\";\nimport * as mat3 from \"./mat3.js\";\nimport * as vec3 from \"./vec3.js\";\nimport * as vec4 from \"./vec4.js\";\n/**\n * Quaternion\n * @module quat\n */\n\n/**\n * Creates a new identity quat\n *\n * @returns {quat} a new quaternion\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(4);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n }\n\n out[3] = 1;\n return out;\n}\n/**\n * Set a quat to the identity quaternion\n *\n * @param {quat} out the receiving quaternion\n * @returns {quat} out\n */\n\nexport function identity(out) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n return out;\n}\n/**\n * Sets a quat from the given angle and rotation axis,\n * then returns it.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyVec3} axis the axis around which to rotate\n * @param {Number} rad the angle in radians\n * @returns {quat} out\n **/\n\nexport function setAxisAngle(out, axis, rad) {\n rad = rad * 0.5;\n var s = Math.sin(rad);\n out[0] = s * axis[0];\n out[1] = s * axis[1];\n out[2] = s * axis[2];\n out[3] = Math.cos(rad);\n return out;\n}\n/**\n * Gets the rotation axis and angle for a given\n * quaternion. If a quaternion is created with\n * setAxisAngle, this method will return the same\n * values as providied in the original parameter list\n * OR functionally equivalent values.\n * Example: The quaternion formed by axis [0, 0, 1] and\n * angle -90 is the same as the quaternion formed by\n * [0, 0, 1] and 270. This method favors the latter.\n * @param {vec3} out_axis Vector receiving the axis of rotation\n * @param {ReadonlyQuat} q Quaternion to be decomposed\n * @return {Number} Angle, in radians, of the rotation\n */\n\nexport function getAxisAngle(out_axis, q) {\n var rad = Math.acos(q[3]) * 2.0;\n var s = Math.sin(rad / 2.0);\n\n if (s > glMatrix.EPSILON) {\n out_axis[0] = q[0] / s;\n out_axis[1] = q[1] / s;\n out_axis[2] = q[2] / s;\n } else {\n // If s is zero, return any axis (no rotation - axis does not matter)\n out_axis[0] = 1;\n out_axis[1] = 0;\n out_axis[2] = 0;\n }\n\n return rad;\n}\n/**\n * Gets the angular distance between two unit quaternions\n *\n * @param {ReadonlyQuat} a Origin unit quaternion\n * @param {ReadonlyQuat} b Destination unit quaternion\n * @return {Number} Angle, in radians, between the two quaternions\n */\n\nexport function getAngle(a, b) {\n var dotproduct = dot(a, b);\n return Math.acos(2 * dotproduct * dotproduct - 1);\n}\n/**\n * Multiplies two quat's\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a the first operand\n * @param {ReadonlyQuat} b the second operand\n * @returns {quat} out\n */\n\nexport function multiply(out, a, b) {\n var ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3];\n var bx = b[0],\n by = b[1],\n bz = b[2],\n bw = b[3];\n out[0] = ax * bw + aw * bx + ay * bz - az * by;\n out[1] = ay * bw + aw * by + az * bx - ax * bz;\n out[2] = az * bw + aw * bz + ax * by - ay * bx;\n out[3] = aw * bw - ax * bx - ay * by - az * bz;\n return out;\n}\n/**\n * Rotates a quaternion by the given angle about the X axis\n *\n * @param {quat} out quat receiving operation result\n * @param {ReadonlyQuat} a quat to rotate\n * @param {number} rad angle (in radians) to rotate\n * @returns {quat} out\n */\n\nexport function rotateX(out, a, rad) {\n rad *= 0.5;\n var ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3];\n var bx = Math.sin(rad),\n bw = Math.cos(rad);\n out[0] = ax * bw + aw * bx;\n out[1] = ay * bw + az * bx;\n out[2] = az * bw - ay * bx;\n out[3] = aw * bw - ax * bx;\n return out;\n}\n/**\n * Rotates a quaternion by the given angle about the Y axis\n *\n * @param {quat} out quat receiving operation result\n * @param {ReadonlyQuat} a quat to rotate\n * @param {number} rad angle (in radians) to rotate\n * @returns {quat} out\n */\n\nexport function rotateY(out, a, rad) {\n rad *= 0.5;\n var ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3];\n var by = Math.sin(rad),\n bw = Math.cos(rad);\n out[0] = ax * bw - az * by;\n out[1] = ay * bw + aw * by;\n out[2] = az * bw + ax * by;\n out[3] = aw * bw - ay * by;\n return out;\n}\n/**\n * Rotates a quaternion by the given angle about the Z axis\n *\n * @param {quat} out quat receiving operation result\n * @param {ReadonlyQuat} a quat to rotate\n * @param {number} rad angle (in radians) to rotate\n * @returns {quat} out\n */\n\nexport function rotateZ(out, a, rad) {\n rad *= 0.5;\n var ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3];\n var bz = Math.sin(rad),\n bw = Math.cos(rad);\n out[0] = ax * bw + ay * bz;\n out[1] = ay * bw - ax * bz;\n out[2] = az * bw + aw * bz;\n out[3] = aw * bw - az * bz;\n return out;\n}\n/**\n * Calculates the W component of a quat from the X, Y, and Z components.\n * Assumes that quaternion is 1 unit in length.\n * Any existing W component will be ignored.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quat to calculate W component of\n * @returns {quat} out\n */\n\nexport function calculateW(out, a) {\n var x = a[0],\n y = a[1],\n z = a[2];\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = Math.sqrt(Math.abs(1.0 - x * x - y * y - z * z));\n return out;\n}\n/**\n * Calculate the exponential of a unit quaternion.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quat to calculate the exponential of\n * @returns {quat} out\n */\n\nexport function exp(out, a) {\n var x = a[0],\n y = a[1],\n z = a[2],\n w = a[3];\n var r = Math.sqrt(x * x + y * y + z * z);\n var et = Math.exp(w);\n var s = r > 0 ? et * Math.sin(r) / r : 0;\n out[0] = x * s;\n out[1] = y * s;\n out[2] = z * s;\n out[3] = et * Math.cos(r);\n return out;\n}\n/**\n * Calculate the natural logarithm of a unit quaternion.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quat to calculate the exponential of\n * @returns {quat} out\n */\n\nexport function ln(out, a) {\n var x = a[0],\n y = a[1],\n z = a[2],\n w = a[3];\n var r = Math.sqrt(x * x + y * y + z * z);\n var t = r > 0 ? Math.atan2(r, w) / r : 0;\n out[0] = x * t;\n out[1] = y * t;\n out[2] = z * t;\n out[3] = 0.5 * Math.log(x * x + y * y + z * z + w * w);\n return out;\n}\n/**\n * Calculate the scalar power of a unit quaternion.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quat to calculate the exponential of\n * @param {Number} b amount to scale the quaternion by\n * @returns {quat} out\n */\n\nexport function pow(out, a, b) {\n ln(out, a);\n scale(out, out, b);\n exp(out, out);\n return out;\n}\n/**\n * Performs a spherical linear interpolation between two quat\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a the first operand\n * @param {ReadonlyQuat} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {quat} out\n */\n\nexport function slerp(out, a, b, t) {\n // benchmarks:\n // http://jsperf.com/quaternion-slerp-implementations\n var ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3];\n var bx = b[0],\n by = b[1],\n bz = b[2],\n bw = b[3];\n var omega, cosom, sinom, scale0, scale1; // calc cosine\n\n cosom = ax * bx + ay * by + az * bz + aw * bw; // adjust signs (if necessary)\n\n if (cosom < 0.0) {\n cosom = -cosom;\n bx = -bx;\n by = -by;\n bz = -bz;\n bw = -bw;\n } // calculate coefficients\n\n\n if (1.0 - cosom > glMatrix.EPSILON) {\n // standard case (slerp)\n omega = Math.acos(cosom);\n sinom = Math.sin(omega);\n scale0 = Math.sin((1.0 - t) * omega) / sinom;\n scale1 = Math.sin(t * omega) / sinom;\n } else {\n // \"from\" and \"to\" quaternions are very close\n // ... so we can do a linear interpolation\n scale0 = 1.0 - t;\n scale1 = t;\n } // calculate final values\n\n\n out[0] = scale0 * ax + scale1 * bx;\n out[1] = scale0 * ay + scale1 * by;\n out[2] = scale0 * az + scale1 * bz;\n out[3] = scale0 * aw + scale1 * bw;\n return out;\n}\n/**\n * Generates a random unit quaternion\n *\n * @param {quat} out the receiving quaternion\n * @returns {quat} out\n */\n\nexport function random(out) {\n // Implementation of http://planning.cs.uiuc.edu/node198.html\n // TODO: Calling random 3 times is probably not the fastest solution\n var u1 = glMatrix.RANDOM();\n var u2 = glMatrix.RANDOM();\n var u3 = glMatrix.RANDOM();\n var sqrt1MinusU1 = Math.sqrt(1 - u1);\n var sqrtU1 = Math.sqrt(u1);\n out[0] = sqrt1MinusU1 * Math.sin(2.0 * Math.PI * u2);\n out[1] = sqrt1MinusU1 * Math.cos(2.0 * Math.PI * u2);\n out[2] = sqrtU1 * Math.sin(2.0 * Math.PI * u3);\n out[3] = sqrtU1 * Math.cos(2.0 * Math.PI * u3);\n return out;\n}\n/**\n * Calculates the inverse of a quat\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quat to calculate inverse of\n * @returns {quat} out\n */\n\nexport function invert(out, a) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3];\n var dot = a0 * a0 + a1 * a1 + a2 * a2 + a3 * a3;\n var invDot = dot ? 1.0 / dot : 0; // TODO: Would be faster to return [0,0,0,0] immediately if dot == 0\n\n out[0] = -a0 * invDot;\n out[1] = -a1 * invDot;\n out[2] = -a2 * invDot;\n out[3] = a3 * invDot;\n return out;\n}\n/**\n * Calculates the conjugate of a quat\n * If the quaternion is normalized, this function is faster than quat.inverse and produces the same result.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quat to calculate conjugate of\n * @returns {quat} out\n */\n\nexport function conjugate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n out[3] = a[3];\n return out;\n}\n/**\n * Creates a quaternion from the given 3x3 rotation matrix.\n *\n * NOTE: The resultant quaternion is not normalized, so you should be sure\n * to renormalize the quaternion yourself where necessary.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyMat3} m rotation matrix\n * @returns {quat} out\n * @function\n */\n\nexport function fromMat3(out, m) {\n // Algorithm in Ken Shoemake's article in 1987 SIGGRAPH course notes\n // article \"Quaternion Calculus and Fast Animation\".\n var fTrace = m[0] + m[4] + m[8];\n var fRoot;\n\n if (fTrace > 0.0) {\n // |w| > 1/2, may as well choose w > 1/2\n fRoot = Math.sqrt(fTrace + 1.0); // 2w\n\n out[3] = 0.5 * fRoot;\n fRoot = 0.5 / fRoot; // 1/(4w)\n\n out[0] = (m[5] - m[7]) * fRoot;\n out[1] = (m[6] - m[2]) * fRoot;\n out[2] = (m[1] - m[3]) * fRoot;\n } else {\n // |w| <= 1/2\n var i = 0;\n if (m[4] > m[0]) i = 1;\n if (m[8] > m[i * 3 + i]) i = 2;\n var j = (i + 1) % 3;\n var k = (i + 2) % 3;\n fRoot = Math.sqrt(m[i * 3 + i] - m[j * 3 + j] - m[k * 3 + k] + 1.0);\n out[i] = 0.5 * fRoot;\n fRoot = 0.5 / fRoot;\n out[3] = (m[j * 3 + k] - m[k * 3 + j]) * fRoot;\n out[j] = (m[j * 3 + i] + m[i * 3 + j]) * fRoot;\n out[k] = (m[k * 3 + i] + m[i * 3 + k]) * fRoot;\n }\n\n return out;\n}\n/**\n * Creates a quaternion from the given euler angle x, y, z.\n *\n * @param {quat} out the receiving quaternion\n * @param {x} Angle to rotate around X axis in degrees.\n * @param {y} Angle to rotate around Y axis in degrees.\n * @param {z} Angle to rotate around Z axis in degrees.\n * @returns {quat} out\n * @function\n */\n\nexport function fromEuler(out, x, y, z) {\n var halfToRad = 0.5 * Math.PI / 180.0;\n x *= halfToRad;\n y *= halfToRad;\n z *= halfToRad;\n var sx = Math.sin(x);\n var cx = Math.cos(x);\n var sy = Math.sin(y);\n var cy = Math.cos(y);\n var sz = Math.sin(z);\n var cz = Math.cos(z);\n out[0] = sx * cy * cz - cx * sy * sz;\n out[1] = cx * sy * cz + sx * cy * sz;\n out[2] = cx * cy * sz - sx * sy * cz;\n out[3] = cx * cy * cz + sx * sy * sz;\n return out;\n}\n/**\n * Returns a string representation of a quatenion\n *\n * @param {ReadonlyQuat} a vector to represent as a string\n * @returns {String} string representation of the vector\n */\n\nexport function str(a) {\n return \"quat(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \")\";\n}\n/**\n * Creates a new quat initialized with values from an existing quaternion\n *\n * @param {ReadonlyQuat} a quaternion to clone\n * @returns {quat} a new quaternion\n * @function\n */\n\nexport var clone = vec4.clone;\n/**\n * Creates a new quat initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {quat} a new quaternion\n * @function\n */\n\nexport var fromValues = vec4.fromValues;\n/**\n * Copy the values from one quat to another\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a the source quaternion\n * @returns {quat} out\n * @function\n */\n\nexport var copy = vec4.copy;\n/**\n * Set the components of a quat to the given values\n *\n * @param {quat} out the receiving quaternion\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {quat} out\n * @function\n */\n\nexport var set = vec4.set;\n/**\n * Adds two quat's\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a the first operand\n * @param {ReadonlyQuat} b the second operand\n * @returns {quat} out\n * @function\n */\n\nexport var add = vec4.add;\n/**\n * Alias for {@link quat.multiply}\n * @function\n */\n\nexport var mul = multiply;\n/**\n * Scales a quat by a scalar number\n *\n * @param {quat} out the receiving vector\n * @param {ReadonlyQuat} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {quat} out\n * @function\n */\n\nexport var scale = vec4.scale;\n/**\n * Calculates the dot product of two quat's\n *\n * @param {ReadonlyQuat} a the first operand\n * @param {ReadonlyQuat} b the second operand\n * @returns {Number} dot product of a and b\n * @function\n */\n\nexport var dot = vec4.dot;\n/**\n * Performs a linear interpolation between two quat's\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a the first operand\n * @param {ReadonlyQuat} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {quat} out\n * @function\n */\n\nexport var lerp = vec4.lerp;\n/**\n * Calculates the length of a quat\n *\n * @param {ReadonlyQuat} a vector to calculate length of\n * @returns {Number} length of a\n */\n\nexport var length = vec4.length;\n/**\n * Alias for {@link quat.length}\n * @function\n */\n\nexport var len = length;\n/**\n * Calculates the squared length of a quat\n *\n * @param {ReadonlyQuat} a vector to calculate squared length of\n * @returns {Number} squared length of a\n * @function\n */\n\nexport var squaredLength = vec4.squaredLength;\n/**\n * Alias for {@link quat.squaredLength}\n * @function\n */\n\nexport var sqrLen = squaredLength;\n/**\n * Normalize a quat\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quaternion to normalize\n * @returns {quat} out\n * @function\n */\n\nexport var normalize = vec4.normalize;\n/**\n * Returns whether or not the quaternions have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyQuat} a The first quaternion.\n * @param {ReadonlyQuat} b The second quaternion.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport var exactEquals = vec4.exactEquals;\n/**\n * Returns whether or not the quaternions have approximately the same elements in the same position.\n *\n * @param {ReadonlyQuat} a The first vector.\n * @param {ReadonlyQuat} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport var equals = vec4.equals;\n/**\n * Sets a quaternion to represent the shortest rotation from one\n * vector to another.\n *\n * Both vectors are assumed to be unit length.\n *\n * @param {quat} out the receiving quaternion.\n * @param {ReadonlyVec3} a the initial vector\n * @param {ReadonlyVec3} b the destination vector\n * @returns {quat} out\n */\n\nexport var rotationTo = function () {\n var tmpvec3 = vec3.create();\n var xUnitVec3 = vec3.fromValues(1, 0, 0);\n var yUnitVec3 = vec3.fromValues(0, 1, 0);\n return function (out, a, b) {\n var dot = vec3.dot(a, b);\n\n if (dot < -0.999999) {\n vec3.cross(tmpvec3, xUnitVec3, a);\n if (vec3.len(tmpvec3) < 0.000001) vec3.cross(tmpvec3, yUnitVec3, a);\n vec3.normalize(tmpvec3, tmpvec3);\n setAxisAngle(out, tmpvec3, Math.PI);\n return out;\n } else if (dot > 0.999999) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n return out;\n } else {\n vec3.cross(tmpvec3, a, b);\n out[0] = tmpvec3[0];\n out[1] = tmpvec3[1];\n out[2] = tmpvec3[2];\n out[3] = 1 + dot;\n return normalize(out, out);\n }\n };\n}();\n/**\n * Performs a spherical linear interpolation with two control points\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a the first operand\n * @param {ReadonlyQuat} b the second operand\n * @param {ReadonlyQuat} c the third operand\n * @param {ReadonlyQuat} d the fourth operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {quat} out\n */\n\nexport var sqlerp = function () {\n var temp1 = create();\n var temp2 = create();\n return function (out, a, b, c, d, t) {\n slerp(temp1, a, d, t);\n slerp(temp2, b, c, t);\n slerp(out, temp1, temp2, 2 * t * (1 - t));\n return out;\n };\n}();\n/**\n * Sets the specified quaternion with values corresponding to the given\n * axes. Each axis is a vec3 and is expected to be unit length and\n * perpendicular to all other specified axes.\n *\n * @param {ReadonlyVec3} view the vector representing the viewing direction\n * @param {ReadonlyVec3} right the vector representing the local \"right\" direction\n * @param {ReadonlyVec3} up the vector representing the local \"up\" direction\n * @returns {quat} out\n */\n\nexport var setAxes = function () {\n var matr = mat3.create();\n return function (out, view, right, up) {\n matr[0] = right[0];\n matr[3] = right[1];\n matr[6] = right[2];\n matr[1] = up[0];\n matr[4] = up[1];\n matr[7] = up[2];\n matr[2] = -view[0];\n matr[5] = -view[1];\n matr[8] = -view[2];\n return normalize(out, fromMat3(out, matr));\n };\n}();","// From https://github.com/shrekshao/minimal-gltf-loader\r\nimport {vec3, vec4, quat, mat4} from 'gl-matrix';\r\n\r\nvar MinimalGLTFLoader = MinimalGLTFLoader || {};\r\n\r\n// Data classes\r\nvar Scene = MinimalGLTFLoader.Scene = function () {\r\n // not 1-1 to meshes in json file\r\n // each mesh with a different node hierarchy is a new instance\r\n this.meshes = [];\r\n //this.meshes = {};\r\n};\r\n\r\n// Node\r\n\r\nvar Mesh = MinimalGLTFLoader.Mesh = function () {\r\n this.meshID = ''; // mesh id name in glTF json meshes\r\n this.primitives = [];\r\n};\r\n\r\nvar Primitive = MinimalGLTFLoader.Primitive = function () {\r\n this.mode = 4; // default: gl.TRIANGLES\r\n \r\n this.matrix = mat4.create();\r\n\r\n this.indices = null;\r\n this.indicesComponentType = 5123; // default: gl.UNSIGNED_SHORT\r\n\r\n // !!: assume vertex buffer is interleaved\r\n // see discussion https://github.com/KhronosGroup/glTF/issues/21\r\n this.vertexBuffer = null;\r\n\r\n // attribute info (stride, offset, etc)\r\n this.attributes = {};\r\n\r\n // cur glTF spec supports only one material per primitive\r\n this.material = null;\r\n this.technique = null;\r\n\r\n\r\n\r\n // // Program gl buffer name \r\n // // ?? reconsider if it's suitable to put it here\r\n // this.indicesWebGLBufferName = null;\r\n // this.vertexWebGLBufferName = null;\r\n\r\n};\r\n\r\n\r\n/**\r\n* \r\n*/\r\nvar glTFModel = MinimalGLTFLoader.glTFModel = function () {\r\n this.defaultScene = '';\r\n this.scenes = {};\r\n\r\n this.nodeMatrix = {};\r\n\r\n this.json = null;\r\n\r\n this.shaders = {};\r\n this.programs = {};\r\n\r\n this.images = {};\r\n\r\n};\r\n\r\n\r\n\r\nvar gl;\r\n\r\nvar glTFLoader = MinimalGLTFLoader.glTFLoader = function (glContext) {\r\n gl = glContext;\r\n this._init();\r\n this.glTF = null;\r\n};\r\n\r\nglTFLoader.prototype._init = function() {\r\n this._parseDone = false;\r\n this._loadDone = false;\r\n\r\n this._bufferRequested = 0;\r\n this._bufferLoaded = 0;\r\n this._buffers = {};\r\n this._bufferTasks = {};\r\n\r\n // ?? Move to glTFModel to avoid collected by GC ?? \r\n this._bufferViews = {};\r\n\r\n this._shaderRequested = 0;\r\n this._shaderLoaded = 0;\r\n\r\n this._imageRequested = 0;\r\n this._imageLoaded = 0;\r\n\r\n this._pendingTasks = 0;\r\n this._finishedPendingTasks = 0;\r\n\r\n this.onload = null;\r\n\r\n};\r\n\r\n\r\nglTFLoader.prototype._getBufferViewData = function(json, bufferViewID, callback) {\r\n var bufferViewData = this._bufferViews[bufferViewID];\r\n if(!bufferViewData) {\r\n // load bufferView for the first time\r\n var bufferView = json.bufferViews[bufferViewID];\r\n var bufferData = this._buffers[bufferView.buffer];\r\n if (bufferData) {\r\n // buffer already loaded\r\n //console.log(\"dependent buffer ready, create bufferView\" + bufferViewID);\r\n this._bufferViews[bufferViewID] = bufferData.slice(bufferView.byteOffset, bufferView.byteOffset + bufferView.byteLength);\r\n callback(bufferViewData);\r\n } else {\r\n // buffer not yet loaded\r\n // add pending task to _bufferTasks\r\n //console.log(\"pending Task: wait for buffer to load bufferView \" + bufferViewID);\r\n this._pendingTasks++;\r\n var bufferTask = this._bufferTasks[bufferView.buffer];\r\n if (!bufferTask) {\r\n this._bufferTasks[bufferView.buffer] = [];\r\n bufferTask = this._bufferTasks[bufferView.buffer];\r\n }\r\n var loader = this;\r\n bufferTask.push(function(newBufferData) {\r\n // share same bufferView\r\n // hierarchy needs to be post processed in the renderer\r\n var curBufferViewData = loader._bufferViews[bufferViewID];\r\n if (!curBufferViewData) {\r\n console.log('create new BufferView Data for ' + bufferViewID);\r\n curBufferViewData = loader._bufferViews[bufferViewID] = newBufferData.slice(bufferView.byteOffset, bufferView.byteOffset + bufferView.byteLength);\r\n }\r\n loader._finishedPendingTasks++;\r\n callback(curBufferViewData);\r\n\r\n // // create new bufferView for each mesh access with a different hierarchy\r\n // // hierarchy transformation will be prepared in this way\r\n // console.log('create new BufferView Data for ' + bufferViewID);\r\n // loader._bufferViews[bufferViewID] = newBufferData.slice(bufferView.byteOffset, bufferView.byteOffset + bufferView.byteLength);\r\n // loader._finishedPendingTasks++;\r\n // callback(loader._bufferViews[bufferViewID]);\r\n });\r\n }\r\n\r\n } else {\r\n // no need to load buffer from file\r\n // use cached ones\r\n //console.log(\"use cached bufferView \" + bufferViewID);\r\n callback(bufferViewData);\r\n }\r\n};\r\n\r\n// glTFLoader.prototype._doNextLoadTaskInList = function () {\r\n// };\r\n\r\nglTFLoader.prototype._checkComplete = function () {\r\n if (this._bufferRequested == this._bufferLoaded && \r\n this._shaderRequested == this._shaderLoaded && \r\n this._imageRequested == this._imageLoaded \r\n // && other resources finish loading\r\n ) {\r\n this._loadDone = true;\r\n }\r\n\r\n if (this._loadDone && this._parseDone && this._pendingTasks == this._finishedPendingTasks) {\r\n this.onload(this.glTF);\r\n }\r\n};\r\n\r\n\r\nglTFLoader.prototype._parseGLTF = function (json) {\r\n\r\n this.glTF.json = json;\r\n this.glTF.defaultScene = json.scene;\r\n\r\n // Iterate through every scene\r\n if (json.scenes) {\r\n for (var sceneID in json.scenes) {\r\n var newScene = new Scene();\r\n this.glTF.scenes[sceneID] = newScene;\r\n\r\n var scene = json.scenes[sceneID];\r\n var nodes = scene.nodes;\r\n var nodeLen = nodes.length;\r\n\r\n // Iterate through every node within scene\r\n for (var n = 0; n < nodeLen; ++n) {\r\n var nodeID = nodes[n];\r\n //var node = json.nodes[nodeName];\r\n\r\n // Traverse node\r\n this._parseNode(json, nodeID, newScene);\r\n }\r\n }\r\n }\r\n\r\n this._parseDone = true;\r\n this._checkComplete();\r\n};\r\n\r\n\r\nvar translationVec3 = vec3.create();\r\nvar rotationQuat = quat.create();\r\nvar scaleVec3 = vec3.create();\r\nvar TRMatrix = mat4.create();\r\n\r\nglTFLoader.prototype._parseNode = function(json, nodeID, newScene, matrix) {\r\n var node = json.nodes[nodeID];\r\n\r\n if (matrix === undefined) {\r\n matrix = mat4.create();\r\n }\r\n\r\n var curMatrix = mat4.create();\r\n \r\n if (node.hasOwnProperty('matrix')) {\r\n // matrix\r\n for(var i = 0; i < 16; ++i) {\r\n curMatrix[i] = node.matrix[i];\r\n }\r\n mat4.multiply(curMatrix, matrix, curMatrix);\r\n //mat4.multiply(curMatrix, curMatrix, matrix);\r\n } else {\r\n // translation, rotation, scale (TRS)\r\n // TODO: these labels are optional\r\n vec3.set(translationVec3, node.translation[0], node.translation[1], node.translation[2]);\r\n quat.set(rotationQuat, node.rotation[0], node.rotation[1], node.rotation[2], node.rotation[3]);\r\n mat4.fromRotationTranslation(TRMatrix, rotationQuat, translationVec3);\r\n mat4.multiply(curMatrix, curMatrix, TRMatrix);\r\n vec3.set(scaleVec3, node.scale[0], node.scale[1], node.scale[2]);\r\n mat4.scale(curMatrix, curMatrix, scaleVec3);\r\n }\r\n\r\n // store node matrix\r\n this.glTF.nodeMatrix[nodeID] = curMatrix;\r\n\r\n\r\n \r\n // Iterate through every mesh within node\r\n var meshes = node.meshes;\r\n if(!!meshes) {\r\n var meshLen = meshes.length;\r\n for (var m = 0; m < meshLen; ++m) {\r\n var newMesh = new Mesh();\r\n newScene.meshes.push(newMesh);\r\n\r\n var meshName = meshes[m];\r\n var mesh = json.meshes[meshName];\r\n\r\n newMesh.meshID = meshName;\r\n\r\n // Iterate through primitives\r\n var primitives = mesh.primitives;\r\n var primitiveLen = primitives.length;\r\n\r\n for (var p = 0; p < primitiveLen; ++p) {\r\n var newPrimitive = new Primitive();\r\n newMesh.primitives.push(newPrimitive);\r\n\r\n var primitive = primitives[p];\r\n \r\n if (primitive.indices) {\r\n this._parseIndices(json, primitive, newPrimitive);\r\n }\r\n \r\n this._parseAttributes(json, primitive, newPrimitive, curMatrix);\r\n\r\n // required\r\n newPrimitive.material = json.materials[primitive.material];\r\n \r\n if (newPrimitive.material.technique) {\r\n newPrimitive.technique = json.techniques[newPrimitive.material.technique];\r\n } else {\r\n // TODO: use default technique in glTF spec Appendix A\r\n }\r\n \r\n }\r\n }\r\n }\r\n\r\n\r\n // Go through all the children recursively\r\n var children = node.children;\r\n var childreLen = children.length;\r\n for (var c = 0; c < childreLen; ++c) {\r\n var childNodeID = children[c];\r\n this._parseNode(json, childNodeID, newScene, curMatrix);\r\n }\r\n\r\n};\r\n\r\n\r\nglTFLoader.prototype._parseIndices = function(json, primitive, newPrimitive) {\r\n\r\n var accessorName = primitive.indices;\r\n var accessor = json.accessors[accessorName];\r\n\r\n newPrimitive.mode = primitive.mode || 4;\r\n newPrimitive.indicesComponentType = accessor.componentType;\r\n\r\n var loader = this;\r\n this._getBufferViewData(json, accessor.bufferView, function(bufferViewData) {\r\n newPrimitive.indices = _getAccessorData(bufferViewData, accessor);\r\n loader._checkComplete();\r\n });\r\n};\r\n\r\n\r\n\r\n\r\n//var tmpVec4 = vec4.create();\r\n//var inverseTransposeMatrix = mat4.create();\r\n\r\nglTFLoader.prototype._parseAttributes = function(json, primitive, newPrimitive, matrix) {\r\n // !! Assume interleaved vertex attributes\r\n // i.e., all attributes share one bufferView\r\n\r\n\r\n // vertex buffer processing\r\n var firstSemantic = Object.keys(primitive.attributes)[0];\r\n var firstAccessor = json.accessors[primitive.attributes[firstSemantic]];\r\n var vertexBufferViewID = firstAccessor.bufferView;\r\n var bufferView = json.bufferViews[vertexBufferViewID];\r\n\r\n var loader = this;\r\n\r\n this._getBufferViewData(json, vertexBufferViewID, function(bufferViewData) {\r\n var data = newPrimitive.vertexBuffer = _arrayBuffer2TypedArray(\r\n bufferViewData, \r\n 0, \r\n bufferView.byteLength / ComponentType2ByteSize[firstAccessor.componentType],\r\n firstAccessor.componentType\r\n );\r\n \r\n for (var attributeName in primitive.attributes) {\r\n var accessorName = primitive.attributes[attributeName];\r\n var accessor = json.accessors[accessorName];\r\n \r\n var componentTypeByteSize = ComponentType2ByteSize[accessor.componentType];\r\n \r\n var stride = accessor.byteStride / componentTypeByteSize;\r\n var offset = accessor.byteOffset / componentTypeByteSize;\r\n var count = accessor.count;\r\n\r\n // // Matrix transformation\r\n // if (attributeName === 'POSITION') {\r\n // for (var i = 0; i < count; ++i) {\r\n // // TODO: add vec2 and other(needed?) support \r\n // vec4.set(tmpVec4, data[stride * i + offset]\r\n // , data[stride * i + offset + 1]\r\n // , data[stride * i + offset + 2]\r\n // , 1);\r\n // vec4.transformMat4(tmpVec4, tmpVec4, matrix);\r\n // vec4.scale(tmpVec4, tmpVec4, 1 / tmpVec4[3]);\r\n // data[stride * i + offset] = tmpVec4[0];\r\n // data[stride * i + offset + 1] = tmpVec4[1];\r\n // data[stride * i + offset + 2] = tmpVec4[2];\r\n // }\r\n // } \r\n // else if (attributeName === 'NORMAL') {\r\n // mat4.invert(inverseTransposeMatrix, matrix);\r\n // mat4.transpose(inverseTransposeMatrix, inverseTransposeMatrix); \r\n\r\n // for (var i = 0; i < count; ++i) {\r\n // // @todo: add vec2 and other(needed?) support\r\n // vec4.set(tmpVec4, data[stride * i + offset]\r\n // , data[stride * i + offset + 1]\r\n // , data[stride * i + offset + 2]\r\n // , 0);\r\n // vec4.transformMat4(tmpVec4, tmpVec4, inverseTransposeMatrix);\r\n // vec4.normalize(tmpVec4, tmpVec4);\r\n // data[stride * i + offset] = tmpVec4[0];\r\n // data[stride * i + offset + 1] = tmpVec4[1];\r\n // data[stride * i + offset + 2] = tmpVec4[2];\r\n // }\r\n // }\r\n\r\n\r\n // local transform matrix\r\n\r\n mat4.copy(newPrimitive.matrix, matrix);\r\n \r\n \r\n\r\n // for vertexAttribPointer\r\n newPrimitive.attributes[attributeName] = {\r\n //GLuint program location,\r\n size: Type2NumOfComponent[accessor.type],\r\n type: accessor.componentType,\r\n //GLboolean normalized\r\n stride: accessor.byteStride,\r\n offset: accessor.byteOffset\r\n };\r\n\r\n }\r\n\r\n loader._checkComplete();\r\n });\r\n\r\n};\r\n\r\n/**\r\n* load a glTF model\r\n* \r\n* @param {String} uri uri of the .glTF file. Other resources (bins, images) are assumed to be in the same base path\r\n* @param {Function} callback the onload callback function\r\n*/\r\nglTFLoader.prototype.loadGLTF = function (uri, callback) {\r\n\r\n this._init();\r\n\r\n this.onload = callback || function(glTF) {\r\n console.log('glTF model loaded.');\r\n console.log(glTF);\r\n };\r\n\r\n \r\n this.glTF = new glTFModel();\r\n\r\n this.baseUri = _getBaseUri(uri);\r\n\r\n var loader = this;\r\n\r\n _loadJSON(uri, function (response) {\r\n // Parse JSON string into object\r\n var json = JSON.parse(response);\r\n\r\n var bid;\r\n\r\n var loadArrayBufferCallback = function (resource) {\r\n \r\n loader._buffers[bid] = resource;\r\n loader._bufferLoaded++;\r\n if (loader._bufferTasks[bid]) {\r\n var i,len;\r\n for (i = 0, len = loader._bufferTasks[bid].length; i < len; ++i) {\r\n (loader._bufferTasks[bid][i])(resource);\r\n }\r\n }\r\n loader._checkComplete();\r\n\r\n };\r\n\r\n // Launch loading resources task: buffers, etc.\r\n if (json.buffers) {\r\n for (bid in json.buffers) {\r\n\r\n loader._bufferRequested++;\r\n\r\n _loadArrayBuffer(loader.baseUri + json.buffers[bid].uri, loadArrayBufferCallback);\r\n\r\n }\r\n }\r\n\r\n // load images\r\n \r\n\r\n var loadImageCallback = function (img, iid) {\r\n loader._imageLoaded++;\r\n loader.glTF.images[iid] = img;\r\n loader._checkComplete();\r\n };\r\n\r\n var iid;\r\n\r\n if (json.images) {\r\n for (iid in json.images) {\r\n loader._imageRequested++;\r\n _loadImage(loader.baseUri + json.images[iid].uri, iid, loadImageCallback);\r\n }\r\n }\r\n\r\n\r\n // load shaders\r\n var pid;\r\n var newProgram;\r\n\r\n var loadVertexShaderFileCallback = function (resource) {\r\n loader._shaderLoaded++;\r\n newProgram.vertexShader = resource;\r\n if (newProgram.fragmentShader) {\r\n // create Program\r\n newProgram.program = _createProgram(gl, newProgram.vertexShader, newProgram.fragmentShader);\r\n loader._checkComplete();\r\n }\r\n };\r\n var loadFragmentShaderFileCallback = function (resource) {\r\n loader._shaderLoaded++;\r\n newProgram.fragmentShader = resource;\r\n if (newProgram.vertexShader) {\r\n // create Program\r\n newProgram.program = _createProgram(gl, newProgram.vertexShader, newProgram.fragmentShader);\r\n loader._checkComplete();\r\n }\r\n };\r\n\r\n if (json.programs) {\r\n for (pid in json.programs) {\r\n newProgram = loader.glTF.programs[pid] = {\r\n vertexShader: null,\r\n fragmentShader: null,\r\n program: null\r\n };\r\n var program = json.programs[pid];\r\n loader._shaderRequested += 2;\r\n\r\n _loadShaderFile(loader.baseUri + json.shaders[program.vertexShader].uri, loadVertexShaderFileCallback);\r\n _loadShaderFile(loader.baseUri + json.shaders[program.fragmentShader].uri, loadFragmentShaderFileCallback);\r\n }\r\n }\r\n\r\n\r\n\r\n\r\n // start glTF scene parsing\r\n loader._parseGLTF(json);\r\n });\r\n};\r\n\r\n\r\n\r\n\r\n// TODO: get from gl context\r\nvar ComponentType2ByteSize = {\r\n 5120: 1, // BYTE\r\n 5121: 1, // UNSIGNED_BYTE\r\n 5122: 2, // SHORT\r\n 5123: 2, // UNSIGNED_SHORT\r\n 5126: 4 // FLOAT\r\n};\r\n\r\nvar Type2NumOfComponent = {\r\n 'SCALAR': 1,\r\n 'VEC2': 2,\r\n 'VEC3': 3,\r\n 'VEC4': 4,\r\n 'MAT2': 4,\r\n 'MAT3': 9,\r\n 'MAT4': 16\r\n};\r\n\r\nMinimalGLTFLoader.Attributes = [\r\n 'POSITION',\r\n 'NORMAL', \r\n 'TEXCOORD', \r\n 'COLOR', \r\n 'JOINT', \r\n 'WEIGHT'\r\n];\r\n\r\n// MinimalGLTFLoader.UniformFunctionsBind = {\r\n// 35676: gl.uniformMatrix4fv // FLOAT_MAT4 \r\n// };\r\n\r\n\r\n// ------ Scope limited private util functions---------------\r\n\r\nfunction _arrayBuffer2TypedArray(resource, byteOffset, countOfComponentType, componentType) {\r\n switch(componentType) {\r\n // @todo: finish\r\n case 5122: return new Int16Array(resource, byteOffset, countOfComponentType);\r\n case 5123: return new Uint16Array(resource, byteOffset, countOfComponentType);\r\n case 5124: return new Int32Array(resource, byteOffset, countOfComponentType);\r\n case 5125: return new Uint32Array(resource, byteOffset, countOfComponentType);\r\n case 5126: return new Float32Array(resource, byteOffset, countOfComponentType);\r\n default: return null; \r\n }\r\n}\r\n\r\nfunction _getAccessorData(bufferViewData, accessor) {\r\n return _arrayBuffer2TypedArray(\r\n bufferViewData, \r\n accessor.byteOffset, \r\n accessor.count * Type2NumOfComponent[accessor.type],\r\n accessor.componentType\r\n );\r\n}\r\n\r\nfunction _getBaseUri(uri) {\r\n \r\n // https://github.com/AnalyticalGraphicsInc/cesium/blob/master/Source/Core/getBaseUri.js\r\n \r\n var basePath = '';\r\n var i = uri.lastIndexOf('/');\r\n if(i !== -1) {\r\n basePath = uri.substring(0, i + 1);\r\n }\r\n \r\n return basePath;\r\n}\r\n\r\nfunction _loadJSON(src, callback) {\r\n\r\n // native json loading technique from @KryptoniteDove:\r\n // http://codepen.io/KryptoniteDove/post/load-json-file-locally-using-pure-javascript\r\n\r\n var xobj = new XMLHttpRequest();\r\n xobj.overrideMimeType(\"application/json\");\r\n xobj.open('GET', src, true);\r\n xobj.onreadystatechange = function () {\r\n if (xobj.readyState == 4 && // Request finished, response ready\r\n xobj.status == \"200\") { // Status OK\r\n callback(xobj.responseText, this);\r\n }\r\n };\r\n xobj.send(null);\r\n}\r\n\r\nfunction _loadArrayBuffer(url, callback) {\r\n var xobj = new XMLHttpRequest();\r\n xobj.responseType = 'arraybuffer';\r\n xobj.open('GET', url, true);\r\n xobj.onreadystatechange = function () {\r\n if (xobj.readyState == 4 && // Request finished, response ready\r\n xobj.status == \"200\") { // Status OK\r\n var arrayBuffer = xobj.response;\r\n if (arrayBuffer && callback) {\r\n callback(arrayBuffer);\r\n }\r\n }\r\n };\r\n xobj.send(null);\r\n}\r\n\r\nfunction _loadShaderFile(url, callback) {\r\n var xobj = new XMLHttpRequest();\r\n xobj.responseType = 'text';\r\n xobj.open('GET', url, true);\r\n xobj.onreadystatechange = function () {\r\n if (xobj.readyState == 4 && // Request finished, response ready\r\n xobj.status == \"200\") { // Status OK\r\n var file = xobj.response;\r\n if (file && callback) {\r\n callback(file);\r\n }\r\n }\r\n };\r\n xobj.send(null);\r\n}\r\n\r\nfunction _loadImage(url, iid, onload) {\r\n var img = new Image();\r\n img.src = url;\r\n img.onload = function() {\r\n onload(img, iid);\r\n };\r\n}\r\n\r\n\r\nfunction _createShader(gl, source, type) {\r\n var shader = gl.createShader(type);\r\n gl.shaderSource(shader, source);\r\n gl.compileShader(shader);\r\n return shader;\r\n}\r\n\r\nfunction _createProgram(gl, vertexShaderSource, fragmentShaderSource) {\r\n var program = gl.createProgram();\r\n var vshader = _createShader(gl, vertexShaderSource, gl.VERTEX_SHADER);\r\n var fshader = _createShader(gl, fragmentShaderSource, gl.FRAGMENT_SHADER);\r\n gl.attachShader(program, vshader);\r\n gl.deleteShader(vshader);\r\n gl.attachShader(program, fshader);\r\n gl.deleteShader(fshader);\r\n gl.linkProgram(program);\r\n\r\n var log = gl.getProgramInfoLog(program);\r\n if (log) {\r\n console.log(log);\r\n }\r\n\r\n log = gl.getShaderInfoLog(vshader);\r\n if (log) {\r\n console.log(log);\r\n }\r\n\r\n log = gl.getShaderInfoLog(fshader);\r\n if (log) {\r\n console.log(log);\r\n }\r\n\r\n return program;\r\n}\r\n\r\nexport { glTFLoader };","/**\n * dat-gui JavaScript Controller Library\n * http://code.google.com/p/dat-gui\n *\n * Copyright 2011 Data Arts Team, Google Creative Lab\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n\nfunction ___$insertStyle(css) {\n if (!css) {\n return;\n }\n if (typeof window === 'undefined') {\n return;\n }\n\n var style = document.createElement('style');\n\n style.setAttribute('type', 'text/css');\n style.innerHTML = css;\n document.head.appendChild(style);\n\n return css;\n}\n\nfunction colorToString (color, forceCSSHex) {\n var colorFormat = color.__state.conversionName.toString();\n var r = Math.round(color.r);\n var g = Math.round(color.g);\n var b = Math.round(color.b);\n var a = color.a;\n var h = Math.round(color.h);\n var s = color.s.toFixed(1);\n var v = color.v.toFixed(1);\n if (forceCSSHex || colorFormat === 'THREE_CHAR_HEX' || colorFormat === 'SIX_CHAR_HEX') {\n var str = color.hex.toString(16);\n while (str.length < 6) {\n str = '0' + str;\n }\n return '#' + str;\n } else if (colorFormat === 'CSS_RGB') {\n return 'rgb(' + r + ',' + g + ',' + b + ')';\n } else if (colorFormat === 'CSS_RGBA') {\n return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\n } else if (colorFormat === 'HEX') {\n return '0x' + color.hex.toString(16);\n } else if (colorFormat === 'RGB_ARRAY') {\n return '[' + r + ',' + g + ',' + b + ']';\n } else if (colorFormat === 'RGBA_ARRAY') {\n return '[' + r + ',' + g + ',' + b + ',' + a + ']';\n } else if (colorFormat === 'RGB_OBJ') {\n return '{r:' + r + ',g:' + g + ',b:' + b + '}';\n } else if (colorFormat === 'RGBA_OBJ') {\n return '{r:' + r + ',g:' + g + ',b:' + b + ',a:' + a + '}';\n } else if (colorFormat === 'HSV_OBJ') {\n return '{h:' + h + ',s:' + s + ',v:' + v + '}';\n } else if (colorFormat === 'HSVA_OBJ') {\n return '{h:' + h + ',s:' + s + ',v:' + v + ',a:' + a + '}';\n }\n return 'unknown format';\n}\n\nvar ARR_EACH = Array.prototype.forEach;\nvar ARR_SLICE = Array.prototype.slice;\nvar Common = {\n BREAK: {},\n extend: function extend(target) {\n this.each(ARR_SLICE.call(arguments, 1), function (obj) {\n var keys = this.isObject(obj) ? Object.keys(obj) : [];\n keys.forEach(function (key) {\n if (!this.isUndefined(obj[key])) {\n target[key] = obj[key];\n }\n }.bind(this));\n }, this);\n return target;\n },\n defaults: function defaults(target) {\n this.each(ARR_SLICE.call(arguments, 1), function (obj) {\n var keys = this.isObject(obj) ? Object.keys(obj) : [];\n keys.forEach(function (key) {\n if (this.isUndefined(target[key])) {\n target[key] = obj[key];\n }\n }.bind(this));\n }, this);\n return target;\n },\n compose: function compose() {\n var toCall = ARR_SLICE.call(arguments);\n return function () {\n var args = ARR_SLICE.call(arguments);\n for (var i = toCall.length - 1; i >= 0; i--) {\n args = [toCall[i].apply(this, args)];\n }\n return args[0];\n };\n },\n each: function each(obj, itr, scope) {\n if (!obj) {\n return;\n }\n if (ARR_EACH && obj.forEach && obj.forEach === ARR_EACH) {\n obj.forEach(itr, scope);\n } else if (obj.length === obj.length + 0) {\n var key = void 0;\n var l = void 0;\n for (key = 0, l = obj.length; key < l; key++) {\n if (key in obj && itr.call(scope, obj[key], key) === this.BREAK) {\n return;\n }\n }\n } else {\n for (var _key in obj) {\n if (itr.call(scope, obj[_key], _key) === this.BREAK) {\n return;\n }\n }\n }\n },\n defer: function defer(fnc) {\n setTimeout(fnc, 0);\n },\n debounce: function debounce(func, threshold, callImmediately) {\n var timeout = void 0;\n return function () {\n var obj = this;\n var args = arguments;\n function delayed() {\n timeout = null;\n if (!callImmediately) func.apply(obj, args);\n }\n var callNow = callImmediately || !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(delayed, threshold);\n if (callNow) {\n func.apply(obj, args);\n }\n };\n },\n toArray: function toArray(obj) {\n if (obj.toArray) return obj.toArray();\n return ARR_SLICE.call(obj);\n },\n isUndefined: function isUndefined(obj) {\n return obj === undefined;\n },\n isNull: function isNull(obj) {\n return obj === null;\n },\n isNaN: function (_isNaN) {\n function isNaN(_x) {\n return _isNaN.apply(this, arguments);\n }\n isNaN.toString = function () {\n return _isNaN.toString();\n };\n return isNaN;\n }(function (obj) {\n return isNaN(obj);\n }),\n isArray: Array.isArray || function (obj) {\n return obj.constructor === Array;\n },\n isObject: function isObject(obj) {\n return obj === Object(obj);\n },\n isNumber: function isNumber(obj) {\n return obj === obj + 0;\n },\n isString: function isString(obj) {\n return obj === obj + '';\n },\n isBoolean: function isBoolean(obj) {\n return obj === false || obj === true;\n },\n isFunction: function isFunction(obj) {\n return obj instanceof Function;\n }\n};\n\nvar INTERPRETATIONS = [\n{\n litmus: Common.isString,\n conversions: {\n THREE_CHAR_HEX: {\n read: function read(original) {\n var test = original.match(/^#([A-F0-9])([A-F0-9])([A-F0-9])$/i);\n if (test === null) {\n return false;\n }\n return {\n space: 'HEX',\n hex: parseInt('0x' + test[1].toString() + test[1].toString() + test[2].toString() + test[2].toString() + test[3].toString() + test[3].toString(), 0)\n };\n },\n write: colorToString\n },\n SIX_CHAR_HEX: {\n read: function read(original) {\n var test = original.match(/^#([A-F0-9]{6})$/i);\n if (test === null) {\n return false;\n }\n return {\n space: 'HEX',\n hex: parseInt('0x' + test[1].toString(), 0)\n };\n },\n write: colorToString\n },\n CSS_RGB: {\n read: function read(original) {\n var test = original.match(/^rgb\\(\\s*(.+)\\s*,\\s*(.+)\\s*,\\s*(.+)\\s*\\)/);\n if (test === null) {\n return false;\n }\n return {\n space: 'RGB',\n r: parseFloat(test[1]),\n g: parseFloat(test[2]),\n b: parseFloat(test[3])\n };\n },\n write: colorToString\n },\n CSS_RGBA: {\n read: function read(original) {\n var test = original.match(/^rgba\\(\\s*(.+)\\s*,\\s*(.+)\\s*,\\s*(.+)\\s*,\\s*(.+)\\s*\\)/);\n if (test === null) {\n return false;\n }\n return {\n space: 'RGB',\n r: parseFloat(test[1]),\n g: parseFloat(test[2]),\n b: parseFloat(test[3]),\n a: parseFloat(test[4])\n };\n },\n write: colorToString\n }\n }\n},\n{\n litmus: Common.isNumber,\n conversions: {\n HEX: {\n read: function read(original) {\n return {\n space: 'HEX',\n hex: original,\n conversionName: 'HEX'\n };\n },\n write: function write(color) {\n return color.hex;\n }\n }\n }\n},\n{\n litmus: Common.isArray,\n conversions: {\n RGB_ARRAY: {\n read: function read(original) {\n if (original.length !== 3) {\n return false;\n }\n return {\n space: 'RGB',\n r: original[0],\n g: original[1],\n b: original[2]\n };\n },\n write: function write(color) {\n return [color.r, color.g, color.b];\n }\n },\n RGBA_ARRAY: {\n read: function read(original) {\n if (original.length !== 4) return false;\n return {\n space: 'RGB',\n r: original[0],\n g: original[1],\n b: original[2],\n a: original[3]\n };\n },\n write: function write(color) {\n return [color.r, color.g, color.b, color.a];\n }\n }\n }\n},\n{\n litmus: Common.isObject,\n conversions: {\n RGBA_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.r) && Common.isNumber(original.g) && Common.isNumber(original.b) && Common.isNumber(original.a)) {\n return {\n space: 'RGB',\n r: original.r,\n g: original.g,\n b: original.b,\n a: original.a\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n r: color.r,\n g: color.g,\n b: color.b,\n a: color.a\n };\n }\n },\n RGB_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.r) && Common.isNumber(original.g) && Common.isNumber(original.b)) {\n return {\n space: 'RGB',\n r: original.r,\n g: original.g,\n b: original.b\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n r: color.r,\n g: color.g,\n b: color.b\n };\n }\n },\n HSVA_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.h) && Common.isNumber(original.s) && Common.isNumber(original.v) && Common.isNumber(original.a)) {\n return {\n space: 'HSV',\n h: original.h,\n s: original.s,\n v: original.v,\n a: original.a\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n h: color.h,\n s: color.s,\n v: color.v,\n a: color.a\n };\n }\n },\n HSV_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.h) && Common.isNumber(original.s) && Common.isNumber(original.v)) {\n return {\n space: 'HSV',\n h: original.h,\n s: original.s,\n v: original.v\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n h: color.h,\n s: color.s,\n v: color.v\n };\n }\n }\n }\n}];\nvar result = void 0;\nvar toReturn = void 0;\nvar interpret = function interpret() {\n toReturn = false;\n var original = arguments.length > 1 ? Common.toArray(arguments) : arguments[0];\n Common.each(INTERPRETATIONS, function (family) {\n if (family.litmus(original)) {\n Common.each(family.conversions, function (conversion, conversionName) {\n result = conversion.read(original);\n if (toReturn === false && result !== false) {\n toReturn = result;\n result.conversionName = conversionName;\n result.conversion = conversion;\n return Common.BREAK;\n }\n });\n return Common.BREAK;\n }\n });\n return toReturn;\n};\n\nvar tmpComponent = void 0;\nvar ColorMath = {\n hsv_to_rgb: function hsv_to_rgb(h, s, v) {\n var hi = Math.floor(h / 60) % 6;\n var f = h / 60 - Math.floor(h / 60);\n var p = v * (1.0 - s);\n var q = v * (1.0 - f * s);\n var t = v * (1.0 - (1.0 - f) * s);\n var c = [[v, t, p], [q, v, p], [p, v, t], [p, q, v], [t, p, v], [v, p, q]][hi];\n return {\n r: c[0] * 255,\n g: c[1] * 255,\n b: c[2] * 255\n };\n },\n rgb_to_hsv: function rgb_to_hsv(r, g, b) {\n var min = Math.min(r, g, b);\n var max = Math.max(r, g, b);\n var delta = max - min;\n var h = void 0;\n var s = void 0;\n if (max !== 0) {\n s = delta / max;\n } else {\n return {\n h: NaN,\n s: 0,\n v: 0\n };\n }\n if (r === max) {\n h = (g - b) / delta;\n } else if (g === max) {\n h = 2 + (b - r) / delta;\n } else {\n h = 4 + (r - g) / delta;\n }\n h /= 6;\n if (h < 0) {\n h += 1;\n }\n return {\n h: h * 360,\n s: s,\n v: max / 255\n };\n },\n rgb_to_hex: function rgb_to_hex(r, g, b) {\n var hex = this.hex_with_component(0, 2, r);\n hex = this.hex_with_component(hex, 1, g);\n hex = this.hex_with_component(hex, 0, b);\n return hex;\n },\n component_from_hex: function component_from_hex(hex, componentIndex) {\n return hex >> componentIndex * 8 & 0xFF;\n },\n hex_with_component: function hex_with_component(hex, componentIndex, value) {\n return value << (tmpComponent = componentIndex * 8) | hex & ~(0xFF << tmpComponent);\n }\n};\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\n\n\nvar get = function get(object, property, receiver) {\n if (object === null) object = Function.prototype;\n var desc = Object.getOwnPropertyDescriptor(object, property);\n\n if (desc === undefined) {\n var parent = Object.getPrototypeOf(object);\n\n if (parent === null) {\n return undefined;\n } else {\n return get(parent, property, receiver);\n }\n } else if (\"value\" in desc) {\n return desc.value;\n } else {\n var getter = desc.get;\n\n if (getter === undefined) {\n return undefined;\n }\n\n return getter.call(receiver);\n }\n};\n\nvar inherits = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar possibleConstructorReturn = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar Color = function () {\n function Color() {\n classCallCheck(this, Color);\n this.__state = interpret.apply(this, arguments);\n if (this.__state === false) {\n throw new Error('Failed to interpret color arguments');\n }\n this.__state.a = this.__state.a || 1;\n }\n createClass(Color, [{\n key: 'toString',\n value: function toString() {\n return colorToString(this);\n }\n }, {\n key: 'toHexString',\n value: function toHexString() {\n return colorToString(this, true);\n }\n }, {\n key: 'toOriginal',\n value: function toOriginal() {\n return this.__state.conversion.write(this);\n }\n }]);\n return Color;\n}();\nfunction defineRGBComponent(target, component, componentHexIndex) {\n Object.defineProperty(target, component, {\n get: function get$$1() {\n if (this.__state.space === 'RGB') {\n return this.__state[component];\n }\n Color.recalculateRGB(this, component, componentHexIndex);\n return this.__state[component];\n },\n set: function set$$1(v) {\n if (this.__state.space !== 'RGB') {\n Color.recalculateRGB(this, component, componentHexIndex);\n this.__state.space = 'RGB';\n }\n this.__state[component] = v;\n }\n });\n}\nfunction defineHSVComponent(target, component) {\n Object.defineProperty(target, component, {\n get: function get$$1() {\n if (this.__state.space === 'HSV') {\n return this.__state[component];\n }\n Color.recalculateHSV(this);\n return this.__state[component];\n },\n set: function set$$1(v) {\n if (this.__state.space !== 'HSV') {\n Color.recalculateHSV(this);\n this.__state.space = 'HSV';\n }\n this.__state[component] = v;\n }\n });\n}\nColor.recalculateRGB = function (color, component, componentHexIndex) {\n if (color.__state.space === 'HEX') {\n color.__state[component] = ColorMath.component_from_hex(color.__state.hex, componentHexIndex);\n } else if (color.__state.space === 'HSV') {\n Common.extend(color.__state, ColorMath.hsv_to_rgb(color.__state.h, color.__state.s, color.__state.v));\n } else {\n throw new Error('Corrupted color state');\n }\n};\nColor.recalculateHSV = function (color) {\n var result = ColorMath.rgb_to_hsv(color.r, color.g, color.b);\n Common.extend(color.__state, {\n s: result.s,\n v: result.v\n });\n if (!Common.isNaN(result.h)) {\n color.__state.h = result.h;\n } else if (Common.isUndefined(color.__state.h)) {\n color.__state.h = 0;\n }\n};\nColor.COMPONENTS = ['r', 'g', 'b', 'h', 's', 'v', 'hex', 'a'];\ndefineRGBComponent(Color.prototype, 'r', 2);\ndefineRGBComponent(Color.prototype, 'g', 1);\ndefineRGBComponent(Color.prototype, 'b', 0);\ndefineHSVComponent(Color.prototype, 'h');\ndefineHSVComponent(Color.prototype, 's');\ndefineHSVComponent(Color.prototype, 'v');\nObject.defineProperty(Color.prototype, 'a', {\n get: function get$$1() {\n return this.__state.a;\n },\n set: function set$$1(v) {\n this.__state.a = v;\n }\n});\nObject.defineProperty(Color.prototype, 'hex', {\n get: function get$$1() {\n if (this.__state.space !== 'HEX') {\n this.__state.hex = ColorMath.rgb_to_hex(this.r, this.g, this.b);\n this.__state.space = 'HEX';\n }\n return this.__state.hex;\n },\n set: function set$$1(v) {\n this.__state.space = 'HEX';\n this.__state.hex = v;\n }\n});\n\nvar Controller = function () {\n function Controller(object, property) {\n classCallCheck(this, Controller);\n this.initialValue = object[property];\n this.domElement = document.createElement('div');\n this.object = object;\n this.property = property;\n this.__onChange = undefined;\n this.__onFinishChange = undefined;\n }\n createClass(Controller, [{\n key: 'onChange',\n value: function onChange(fnc) {\n this.__onChange = fnc;\n return this;\n }\n }, {\n key: 'onFinishChange',\n value: function onFinishChange(fnc) {\n this.__onFinishChange = fnc;\n return this;\n }\n }, {\n key: 'setValue',\n value: function setValue(newValue) {\n this.object[this.property] = newValue;\n if (this.__onChange) {\n this.__onChange.call(this, newValue);\n }\n this.updateDisplay();\n return this;\n }\n }, {\n key: 'getValue',\n value: function getValue() {\n return this.object[this.property];\n }\n }, {\n key: 'updateDisplay',\n value: function updateDisplay() {\n return this;\n }\n }, {\n key: 'isModified',\n value: function isModified() {\n return this.initialValue !== this.getValue();\n }\n }]);\n return Controller;\n}();\n\nvar EVENT_MAP = {\n HTMLEvents: ['change'],\n MouseEvents: ['click', 'mousemove', 'mousedown', 'mouseup', 'mouseover'],\n KeyboardEvents: ['keydown']\n};\nvar EVENT_MAP_INV = {};\nCommon.each(EVENT_MAP, function (v, k) {\n Common.each(v, function (e) {\n EVENT_MAP_INV[e] = k;\n });\n});\nvar CSS_VALUE_PIXELS = /(\\d+(\\.\\d+)?)px/;\nfunction cssValueToPixels(val) {\n if (val === '0' || Common.isUndefined(val)) {\n return 0;\n }\n var match = val.match(CSS_VALUE_PIXELS);\n if (!Common.isNull(match)) {\n return parseFloat(match[1]);\n }\n return 0;\n}\nvar dom = {\n makeSelectable: function makeSelectable(elem, selectable) {\n if (elem === undefined || elem.style === undefined) return;\n elem.onselectstart = selectable ? function () {\n return false;\n } : function () {};\n elem.style.MozUserSelect = selectable ? 'auto' : 'none';\n elem.style.KhtmlUserSelect = selectable ? 'auto' : 'none';\n elem.unselectable = selectable ? 'on' : 'off';\n },\n makeFullscreen: function makeFullscreen(elem, hor, vert) {\n var vertical = vert;\n var horizontal = hor;\n if (Common.isUndefined(horizontal)) {\n horizontal = true;\n }\n if (Common.isUndefined(vertical)) {\n vertical = true;\n }\n elem.style.position = 'absolute';\n if (horizontal) {\n elem.style.left = 0;\n elem.style.right = 0;\n }\n if (vertical) {\n elem.style.top = 0;\n elem.style.bottom = 0;\n }\n },\n fakeEvent: function fakeEvent(elem, eventType, pars, aux) {\n var params = pars || {};\n var className = EVENT_MAP_INV[eventType];\n if (!className) {\n throw new Error('Event type ' + eventType + ' not supported.');\n }\n var evt = document.createEvent(className);\n switch (className) {\n case 'MouseEvents':\n {\n var clientX = params.x || params.clientX || 0;\n var clientY = params.y || params.clientY || 0;\n evt.initMouseEvent(eventType, params.bubbles || false, params.cancelable || true, window, params.clickCount || 1, 0,\n 0,\n clientX,\n clientY,\n false, false, false, false, 0, null);\n break;\n }\n case 'KeyboardEvents':\n {\n var init = evt.initKeyboardEvent || evt.initKeyEvent;\n Common.defaults(params, {\n cancelable: true,\n ctrlKey: false,\n altKey: false,\n shiftKey: false,\n metaKey: false,\n keyCode: undefined,\n charCode: undefined\n });\n init(eventType, params.bubbles || false, params.cancelable, window, params.ctrlKey, params.altKey, params.shiftKey, params.metaKey, params.keyCode, params.charCode);\n break;\n }\n default:\n {\n evt.initEvent(eventType, params.bubbles || false, params.cancelable || true);\n break;\n }\n }\n Common.defaults(evt, aux);\n elem.dispatchEvent(evt);\n },\n bind: function bind(elem, event, func, newBool) {\n var bool = newBool || false;\n if (elem.addEventListener) {\n elem.addEventListener(event, func, bool);\n } else if (elem.attachEvent) {\n elem.attachEvent('on' + event, func);\n }\n return dom;\n },\n unbind: function unbind(elem, event, func, newBool) {\n var bool = newBool || false;\n if (elem.removeEventListener) {\n elem.removeEventListener(event, func, bool);\n } else if (elem.detachEvent) {\n elem.detachEvent('on' + event, func);\n }\n return dom;\n },\n addClass: function addClass(elem, className) {\n if (elem.className === undefined) {\n elem.className = className;\n } else if (elem.className !== className) {\n var classes = elem.className.split(/ +/);\n if (classes.indexOf(className) === -1) {\n classes.push(className);\n elem.className = classes.join(' ').replace(/^\\s+/, '').replace(/\\s+$/, '');\n }\n }\n return dom;\n },\n removeClass: function removeClass(elem, className) {\n if (className) {\n if (elem.className === className) {\n elem.removeAttribute('class');\n } else {\n var classes = elem.className.split(/ +/);\n var index = classes.indexOf(className);\n if (index !== -1) {\n classes.splice(index, 1);\n elem.className = classes.join(' ');\n }\n }\n } else {\n elem.className = undefined;\n }\n return dom;\n },\n hasClass: function hasClass(elem, className) {\n return new RegExp('(?:^|\\\\s+)' + className + '(?:\\\\s+|$)').test(elem.className) || false;\n },\n getWidth: function getWidth(elem) {\n var style = getComputedStyle(elem);\n return cssValueToPixels(style['border-left-width']) + cssValueToPixels(style['border-right-width']) + cssValueToPixels(style['padding-left']) + cssValueToPixels(style['padding-right']) + cssValueToPixels(style.width);\n },\n getHeight: function getHeight(elem) {\n var style = getComputedStyle(elem);\n return cssValueToPixels(style['border-top-width']) + cssValueToPixels(style['border-bottom-width']) + cssValueToPixels(style['padding-top']) + cssValueToPixels(style['padding-bottom']) + cssValueToPixels(style.height);\n },\n getOffset: function getOffset(el) {\n var elem = el;\n var offset = { left: 0, top: 0 };\n if (elem.offsetParent) {\n do {\n offset.left += elem.offsetLeft;\n offset.top += elem.offsetTop;\n elem = elem.offsetParent;\n } while (elem);\n }\n return offset;\n },\n isActive: function isActive(elem) {\n return elem === document.activeElement && (elem.type || elem.href);\n }\n};\n\nvar BooleanController = function (_Controller) {\n inherits(BooleanController, _Controller);\n function BooleanController(object, property) {\n classCallCheck(this, BooleanController);\n var _this2 = possibleConstructorReturn(this, (BooleanController.__proto__ || Object.getPrototypeOf(BooleanController)).call(this, object, property));\n var _this = _this2;\n _this2.__prev = _this2.getValue();\n _this2.__checkbox = document.createElement('input');\n _this2.__checkbox.setAttribute('type', 'checkbox');\n function onChange() {\n _this.setValue(!_this.__prev);\n }\n dom.bind(_this2.__checkbox, 'change', onChange, false);\n _this2.domElement.appendChild(_this2.__checkbox);\n _this2.updateDisplay();\n return _this2;\n }\n createClass(BooleanController, [{\n key: 'setValue',\n value: function setValue(v) {\n var toReturn = get(BooleanController.prototype.__proto__ || Object.getPrototypeOf(BooleanController.prototype), 'setValue', this).call(this, v);\n if (this.__onFinishChange) {\n this.__onFinishChange.call(this, this.getValue());\n }\n this.__prev = this.getValue();\n return toReturn;\n }\n }, {\n key: 'updateDisplay',\n value: function updateDisplay() {\n if (this.getValue() === true) {\n this.__checkbox.setAttribute('checked', 'checked');\n this.__checkbox.checked = true;\n this.__prev = true;\n } else {\n this.__checkbox.checked = false;\n this.__prev = false;\n }\n return get(BooleanController.prototype.__proto__ || Object.getPrototypeOf(BooleanController.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return BooleanController;\n}(Controller);\n\nvar OptionController = function (_Controller) {\n inherits(OptionController, _Controller);\n function OptionController(object, property, opts) {\n classCallCheck(this, OptionController);\n var _this2 = possibleConstructorReturn(this, (OptionController.__proto__ || Object.getPrototypeOf(OptionController)).call(this, object, property));\n var options = opts;\n var _this = _this2;\n _this2.__select = document.createElement('select');\n if (Common.isArray(options)) {\n var map = {};\n Common.each(options, function (element) {\n map[element] = element;\n });\n options = map;\n }\n Common.each(options, function (value, key) {\n var opt = document.createElement('option');\n opt.innerHTML = key;\n opt.setAttribute('value', value);\n _this.__select.appendChild(opt);\n });\n _this2.updateDisplay();\n dom.bind(_this2.__select, 'change', function () {\n var desiredValue = this.options[this.selectedIndex].value;\n _this.setValue(desiredValue);\n });\n _this2.domElement.appendChild(_this2.__select);\n return _this2;\n }\n createClass(OptionController, [{\n key: 'setValue',\n value: function setValue(v) {\n var toReturn = get(OptionController.prototype.__proto__ || Object.getPrototypeOf(OptionController.prototype), 'setValue', this).call(this, v);\n if (this.__onFinishChange) {\n this.__onFinishChange.call(this, this.getValue());\n }\n return toReturn;\n }\n }, {\n key: 'updateDisplay',\n value: function updateDisplay() {\n if (dom.isActive(this.__select)) return this;\n this.__select.value = this.getValue();\n return get(OptionController.prototype.__proto__ || Object.getPrototypeOf(OptionController.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return OptionController;\n}(Controller);\n\nvar StringController = function (_Controller) {\n inherits(StringController, _Controller);\n function StringController(object, property) {\n classCallCheck(this, StringController);\n var _this2 = possibleConstructorReturn(this, (StringController.__proto__ || Object.getPrototypeOf(StringController)).call(this, object, property));\n var _this = _this2;\n function onChange() {\n _this.setValue(_this.__input.value);\n }\n function onBlur() {\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n _this2.__input = document.createElement('input');\n _this2.__input.setAttribute('type', 'text');\n dom.bind(_this2.__input, 'keyup', onChange);\n dom.bind(_this2.__input, 'change', onChange);\n dom.bind(_this2.__input, 'blur', onBlur);\n dom.bind(_this2.__input, 'keydown', function (e) {\n if (e.keyCode === 13) {\n this.blur();\n }\n });\n _this2.updateDisplay();\n _this2.domElement.appendChild(_this2.__input);\n return _this2;\n }\n createClass(StringController, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n if (!dom.isActive(this.__input)) {\n this.__input.value = this.getValue();\n }\n return get(StringController.prototype.__proto__ || Object.getPrototypeOf(StringController.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return StringController;\n}(Controller);\n\nfunction numDecimals(x) {\n var _x = x.toString();\n if (_x.indexOf('.') > -1) {\n return _x.length - _x.indexOf('.') - 1;\n }\n return 0;\n}\nvar NumberController = function (_Controller) {\n inherits(NumberController, _Controller);\n function NumberController(object, property, params) {\n classCallCheck(this, NumberController);\n var _this = possibleConstructorReturn(this, (NumberController.__proto__ || Object.getPrototypeOf(NumberController)).call(this, object, property));\n var _params = params || {};\n _this.__min = _params.min;\n _this.__max = _params.max;\n _this.__step = _params.step;\n if (Common.isUndefined(_this.__step)) {\n if (_this.initialValue === 0) {\n _this.__impliedStep = 1;\n } else {\n _this.__impliedStep = Math.pow(10, Math.floor(Math.log(Math.abs(_this.initialValue)) / Math.LN10)) / 10;\n }\n } else {\n _this.__impliedStep = _this.__step;\n }\n _this.__precision = numDecimals(_this.__impliedStep);\n return _this;\n }\n createClass(NumberController, [{\n key: 'setValue',\n value: function setValue(v) {\n var _v = v;\n if (this.__min !== undefined && _v < this.__min) {\n _v = this.__min;\n } else if (this.__max !== undefined && _v > this.__max) {\n _v = this.__max;\n }\n if (this.__step !== undefined && _v % this.__step !== 0) {\n _v = Math.round(_v / this.__step) * this.__step;\n }\n return get(NumberController.prototype.__proto__ || Object.getPrototypeOf(NumberController.prototype), 'setValue', this).call(this, _v);\n }\n }, {\n key: 'min',\n value: function min(minValue) {\n this.__min = minValue;\n return this;\n }\n }, {\n key: 'max',\n value: function max(maxValue) {\n this.__max = maxValue;\n return this;\n }\n }, {\n key: 'step',\n value: function step(stepValue) {\n this.__step = stepValue;\n this.__impliedStep = stepValue;\n this.__precision = numDecimals(stepValue);\n return this;\n }\n }]);\n return NumberController;\n}(Controller);\n\nfunction roundToDecimal(value, decimals) {\n var tenTo = Math.pow(10, decimals);\n return Math.round(value * tenTo) / tenTo;\n}\nvar NumberControllerBox = function (_NumberController) {\n inherits(NumberControllerBox, _NumberController);\n function NumberControllerBox(object, property, params) {\n classCallCheck(this, NumberControllerBox);\n var _this2 = possibleConstructorReturn(this, (NumberControllerBox.__proto__ || Object.getPrototypeOf(NumberControllerBox)).call(this, object, property, params));\n _this2.__truncationSuspended = false;\n var _this = _this2;\n var prevY = void 0;\n function onChange() {\n var attempted = parseFloat(_this.__input.value);\n if (!Common.isNaN(attempted)) {\n _this.setValue(attempted);\n }\n }\n function onFinish() {\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n function onBlur() {\n onFinish();\n }\n function onMouseDrag(e) {\n var diff = prevY - e.clientY;\n _this.setValue(_this.getValue() + diff * _this.__impliedStep);\n prevY = e.clientY;\n }\n function onMouseUp() {\n dom.unbind(window, 'mousemove', onMouseDrag);\n dom.unbind(window, 'mouseup', onMouseUp);\n onFinish();\n }\n function onMouseDown(e) {\n dom.bind(window, 'mousemove', onMouseDrag);\n dom.bind(window, 'mouseup', onMouseUp);\n prevY = e.clientY;\n }\n _this2.__input = document.createElement('input');\n _this2.__input.setAttribute('type', 'text');\n dom.bind(_this2.__input, 'change', onChange);\n dom.bind(_this2.__input, 'blur', onBlur);\n dom.bind(_this2.__input, 'mousedown', onMouseDown);\n dom.bind(_this2.__input, 'keydown', function (e) {\n if (e.keyCode === 13) {\n _this.__truncationSuspended = true;\n this.blur();\n _this.__truncationSuspended = false;\n onFinish();\n }\n });\n _this2.updateDisplay();\n _this2.domElement.appendChild(_this2.__input);\n return _this2;\n }\n createClass(NumberControllerBox, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n this.__input.value = this.__truncationSuspended ? this.getValue() : roundToDecimal(this.getValue(), this.__precision);\n return get(NumberControllerBox.prototype.__proto__ || Object.getPrototypeOf(NumberControllerBox.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return NumberControllerBox;\n}(NumberController);\n\nfunction map(v, i1, i2, o1, o2) {\n return o1 + (o2 - o1) * ((v - i1) / (i2 - i1));\n}\nvar NumberControllerSlider = function (_NumberController) {\n inherits(NumberControllerSlider, _NumberController);\n function NumberControllerSlider(object, property, min, max, step) {\n classCallCheck(this, NumberControllerSlider);\n var _this2 = possibleConstructorReturn(this, (NumberControllerSlider.__proto__ || Object.getPrototypeOf(NumberControllerSlider)).call(this, object, property, { min: min, max: max, step: step }));\n var _this = _this2;\n _this2.__background = document.createElement('div');\n _this2.__foreground = document.createElement('div');\n dom.bind(_this2.__background, 'mousedown', onMouseDown);\n dom.bind(_this2.__background, 'touchstart', onTouchStart);\n dom.addClass(_this2.__background, 'slider');\n dom.addClass(_this2.__foreground, 'slider-fg');\n function onMouseDown(e) {\n document.activeElement.blur();\n dom.bind(window, 'mousemove', onMouseDrag);\n dom.bind(window, 'mouseup', onMouseUp);\n onMouseDrag(e);\n }\n function onMouseDrag(e) {\n e.preventDefault();\n var bgRect = _this.__background.getBoundingClientRect();\n _this.setValue(map(e.clientX, bgRect.left, bgRect.right, _this.__min, _this.__max));\n return false;\n }\n function onMouseUp() {\n dom.unbind(window, 'mousemove', onMouseDrag);\n dom.unbind(window, 'mouseup', onMouseUp);\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n function onTouchStart(e) {\n if (e.touches.length !== 1) {\n return;\n }\n dom.bind(window, 'touchmove', onTouchMove);\n dom.bind(window, 'touchend', onTouchEnd);\n onTouchMove(e);\n }\n function onTouchMove(e) {\n var clientX = e.touches[0].clientX;\n var bgRect = _this.__background.getBoundingClientRect();\n _this.setValue(map(clientX, bgRect.left, bgRect.right, _this.__min, _this.__max));\n }\n function onTouchEnd() {\n dom.unbind(window, 'touchmove', onTouchMove);\n dom.unbind(window, 'touchend', onTouchEnd);\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n _this2.updateDisplay();\n _this2.__background.appendChild(_this2.__foreground);\n _this2.domElement.appendChild(_this2.__background);\n return _this2;\n }\n createClass(NumberControllerSlider, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n var pct = (this.getValue() - this.__min) / (this.__max - this.__min);\n this.__foreground.style.width = pct * 100 + '%';\n return get(NumberControllerSlider.prototype.__proto__ || Object.getPrototypeOf(NumberControllerSlider.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return NumberControllerSlider;\n}(NumberController);\n\nvar FunctionController = function (_Controller) {\n inherits(FunctionController, _Controller);\n function FunctionController(object, property, text) {\n classCallCheck(this, FunctionController);\n var _this2 = possibleConstructorReturn(this, (FunctionController.__proto__ || Object.getPrototypeOf(FunctionController)).call(this, object, property));\n var _this = _this2;\n _this2.__button = document.createElement('div');\n _this2.__button.innerHTML = text === undefined ? 'Fire' : text;\n dom.bind(_this2.__button, 'click', function (e) {\n e.preventDefault();\n _this.fire();\n return false;\n });\n dom.addClass(_this2.__button, 'button');\n _this2.domElement.appendChild(_this2.__button);\n return _this2;\n }\n createClass(FunctionController, [{\n key: 'fire',\n value: function fire() {\n if (this.__onChange) {\n this.__onChange.call(this);\n }\n this.getValue().call(this.object);\n if (this.__onFinishChange) {\n this.__onFinishChange.call(this, this.getValue());\n }\n }\n }]);\n return FunctionController;\n}(Controller);\n\nvar ColorController = function (_Controller) {\n inherits(ColorController, _Controller);\n function ColorController(object, property) {\n classCallCheck(this, ColorController);\n var _this2 = possibleConstructorReturn(this, (ColorController.__proto__ || Object.getPrototypeOf(ColorController)).call(this, object, property));\n _this2.__color = new Color(_this2.getValue());\n _this2.__temp = new Color(0);\n var _this = _this2;\n _this2.domElement = document.createElement('div');\n dom.makeSelectable(_this2.domElement, false);\n _this2.__selector = document.createElement('div');\n _this2.__selector.className = 'selector';\n _this2.__saturation_field = document.createElement('div');\n _this2.__saturation_field.className = 'saturation-field';\n _this2.__field_knob = document.createElement('div');\n _this2.__field_knob.className = 'field-knob';\n _this2.__field_knob_border = '2px solid ';\n _this2.__hue_knob = document.createElement('div');\n _this2.__hue_knob.className = 'hue-knob';\n _this2.__hue_field = document.createElement('div');\n _this2.__hue_field.className = 'hue-field';\n _this2.__input = document.createElement('input');\n _this2.__input.type = 'text';\n _this2.__input_textShadow = '0 1px 1px ';\n dom.bind(_this2.__input, 'keydown', function (e) {\n if (e.keyCode === 13) {\n onBlur.call(this);\n }\n });\n dom.bind(_this2.__input, 'blur', onBlur);\n dom.bind(_this2.__selector, 'mousedown', function () {\n dom.addClass(this, 'drag').bind(window, 'mouseup', function () {\n dom.removeClass(_this.__selector, 'drag');\n });\n });\n dom.bind(_this2.__selector, 'touchstart', function () {\n dom.addClass(this, 'drag').bind(window, 'touchend', function () {\n dom.removeClass(_this.__selector, 'drag');\n });\n });\n var valueField = document.createElement('div');\n Common.extend(_this2.__selector.style, {\n width: '122px',\n height: '102px',\n padding: '3px',\n backgroundColor: '#222',\n boxShadow: '0px 1px 3px rgba(0,0,0,0.3)'\n });\n Common.extend(_this2.__field_knob.style, {\n position: 'absolute',\n width: '12px',\n height: '12px',\n border: _this2.__field_knob_border + (_this2.__color.v < 0.5 ? '#fff' : '#000'),\n boxShadow: '0px 1px 3px rgba(0,0,0,0.5)',\n borderRadius: '12px',\n zIndex: 1\n });\n Common.extend(_this2.__hue_knob.style, {\n position: 'absolute',\n width: '15px',\n height: '2px',\n borderRight: '4px solid #fff',\n zIndex: 1\n });\n Common.extend(_this2.__saturation_field.style, {\n width: '100px',\n height: '100px',\n border: '1px solid #555',\n marginRight: '3px',\n display: 'inline-block',\n cursor: 'pointer'\n });\n Common.extend(valueField.style, {\n width: '100%',\n height: '100%',\n background: 'none'\n });\n linearGradient(valueField, 'top', 'rgba(0,0,0,0)', '#000');\n Common.extend(_this2.__hue_field.style, {\n width: '15px',\n height: '100px',\n border: '1px solid #555',\n cursor: 'ns-resize',\n position: 'absolute',\n top: '3px',\n right: '3px'\n });\n hueGradient(_this2.__hue_field);\n Common.extend(_this2.__input.style, {\n outline: 'none',\n textAlign: 'center',\n color: '#fff',\n border: 0,\n fontWeight: 'bold',\n textShadow: _this2.__input_textShadow + 'rgba(0,0,0,0.7)'\n });\n dom.bind(_this2.__saturation_field, 'mousedown', fieldDown);\n dom.bind(_this2.__saturation_field, 'touchstart', fieldDown);\n dom.bind(_this2.__field_knob, 'mousedown', fieldDown);\n dom.bind(_this2.__field_knob, 'touchstart', fieldDown);\n dom.bind(_this2.__hue_field, 'mousedown', fieldDownH);\n dom.bind(_this2.__hue_field, 'touchstart', fieldDownH);\n function fieldDown(e) {\n setSV(e);\n dom.bind(window, 'mousemove', setSV);\n dom.bind(window, 'touchmove', setSV);\n dom.bind(window, 'mouseup', fieldUpSV);\n dom.bind(window, 'touchend', fieldUpSV);\n }\n function fieldDownH(e) {\n setH(e);\n dom.bind(window, 'mousemove', setH);\n dom.bind(window, 'touchmove', setH);\n dom.bind(window, 'mouseup', fieldUpH);\n dom.bind(window, 'touchend', fieldUpH);\n }\n function fieldUpSV() {\n dom.unbind(window, 'mousemove', setSV);\n dom.unbind(window, 'touchmove', setSV);\n dom.unbind(window, 'mouseup', fieldUpSV);\n dom.unbind(window, 'touchend', fieldUpSV);\n onFinish();\n }\n function fieldUpH() {\n dom.unbind(window, 'mousemove', setH);\n dom.unbind(window, 'touchmove', setH);\n dom.unbind(window, 'mouseup', fieldUpH);\n dom.unbind(window, 'touchend', fieldUpH);\n onFinish();\n }\n function onBlur() {\n var i = interpret(this.value);\n if (i !== false) {\n _this.__color.__state = i;\n _this.setValue(_this.__color.toOriginal());\n } else {\n this.value = _this.__color.toString();\n }\n }\n function onFinish() {\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.__color.toOriginal());\n }\n }\n _this2.__saturation_field.appendChild(valueField);\n _this2.__selector.appendChild(_this2.__field_knob);\n _this2.__selector.appendChild(_this2.__saturation_field);\n _this2.__selector.appendChild(_this2.__hue_field);\n _this2.__hue_field.appendChild(_this2.__hue_knob);\n _this2.domElement.appendChild(_this2.__input);\n _this2.domElement.appendChild(_this2.__selector);\n _this2.updateDisplay();\n function setSV(e) {\n if (e.type.indexOf('touch') === -1) {\n e.preventDefault();\n }\n var fieldRect = _this.__saturation_field.getBoundingClientRect();\n var _ref = e.touches && e.touches[0] || e,\n clientX = _ref.clientX,\n clientY = _ref.clientY;\n var s = (clientX - fieldRect.left) / (fieldRect.right - fieldRect.left);\n var v = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top);\n if (v > 1) {\n v = 1;\n } else if (v < 0) {\n v = 0;\n }\n if (s > 1) {\n s = 1;\n } else if (s < 0) {\n s = 0;\n }\n _this.__color.v = v;\n _this.__color.s = s;\n _this.setValue(_this.__color.toOriginal());\n return false;\n }\n function setH(e) {\n if (e.type.indexOf('touch') === -1) {\n e.preventDefault();\n }\n var fieldRect = _this.__hue_field.getBoundingClientRect();\n var _ref2 = e.touches && e.touches[0] || e,\n clientY = _ref2.clientY;\n var h = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top);\n if (h > 1) {\n h = 1;\n } else if (h < 0) {\n h = 0;\n }\n _this.__color.h = h * 360;\n _this.setValue(_this.__color.toOriginal());\n return false;\n }\n return _this2;\n }\n createClass(ColorController, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n var i = interpret(this.getValue());\n if (i !== false) {\n var mismatch = false;\n Common.each(Color.COMPONENTS, function (component) {\n if (!Common.isUndefined(i[component]) && !Common.isUndefined(this.__color.__state[component]) && i[component] !== this.__color.__state[component]) {\n mismatch = true;\n return {};\n }\n }, this);\n if (mismatch) {\n Common.extend(this.__color.__state, i);\n }\n }\n Common.extend(this.__temp.__state, this.__color.__state);\n this.__temp.a = 1;\n var flip = this.__color.v < 0.5 || this.__color.s > 0.5 ? 255 : 0;\n var _flip = 255 - flip;\n Common.extend(this.__field_knob.style, {\n marginLeft: 100 * this.__color.s - 7 + 'px',\n marginTop: 100 * (1 - this.__color.v) - 7 + 'px',\n backgroundColor: this.__temp.toHexString(),\n border: this.__field_knob_border + 'rgb(' + flip + ',' + flip + ',' + flip + ')'\n });\n this.__hue_knob.style.marginTop = (1 - this.__color.h / 360) * 100 + 'px';\n this.__temp.s = 1;\n this.__temp.v = 1;\n linearGradient(this.__saturation_field, 'left', '#fff', this.__temp.toHexString());\n this.__input.value = this.__color.toString();\n Common.extend(this.__input.style, {\n backgroundColor: this.__color.toHexString(),\n color: 'rgb(' + flip + ',' + flip + ',' + flip + ')',\n textShadow: this.__input_textShadow + 'rgba(' + _flip + ',' + _flip + ',' + _flip + ',.7)'\n });\n }\n }]);\n return ColorController;\n}(Controller);\nvar vendors = ['-moz-', '-o-', '-webkit-', '-ms-', ''];\nfunction linearGradient(elem, x, a, b) {\n elem.style.background = '';\n Common.each(vendors, function (vendor) {\n elem.style.cssText += 'background: ' + vendor + 'linear-gradient(' + x + ', ' + a + ' 0%, ' + b + ' 100%); ';\n });\n}\nfunction hueGradient(elem) {\n elem.style.background = '';\n elem.style.cssText += 'background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);';\n elem.style.cssText += 'background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n elem.style.cssText += 'background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n elem.style.cssText += 'background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n elem.style.cssText += 'background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n}\n\nvar css = {\n load: function load(url, indoc) {\n var doc = indoc || document;\n var link = doc.createElement('link');\n link.type = 'text/css';\n link.rel = 'stylesheet';\n link.href = url;\n doc.getElementsByTagName('head')[0].appendChild(link);\n },\n inject: function inject(cssContent, indoc) {\n var doc = indoc || document;\n var injected = document.createElement('style');\n injected.type = 'text/css';\n injected.innerHTML = cssContent;\n var head = doc.getElementsByTagName('head')[0];\n try {\n head.appendChild(injected);\n } catch (e) {\n }\n }\n};\n\nvar saveDialogContents = \"
                      \\n\\n Here's the new load parameter for your GUI's constructor:\\n\\n \\n\\n
                      \\n\\n Automatically save\\n values to localStorage on exit.\\n\\n
                      The values saved to localStorage will\\n override those passed to dat.GUI's constructor. This makes it\\n easier to work incrementally, but localStorage is fragile,\\n and your friends may not see the same values you do.\\n\\n
                      \\n\\n
                      \\n\\n
                      \";\n\nvar ControllerFactory = function ControllerFactory(object, property) {\n var initialValue = object[property];\n if (Common.isArray(arguments[2]) || Common.isObject(arguments[2])) {\n return new OptionController(object, property, arguments[2]);\n }\n if (Common.isNumber(initialValue)) {\n if (Common.isNumber(arguments[2]) && Common.isNumber(arguments[3])) {\n if (Common.isNumber(arguments[4])) {\n return new NumberControllerSlider(object, property, arguments[2], arguments[3], arguments[4]);\n }\n return new NumberControllerSlider(object, property, arguments[2], arguments[3]);\n }\n if (Common.isNumber(arguments[4])) {\n return new NumberControllerBox(object, property, { min: arguments[2], max: arguments[3], step: arguments[4] });\n }\n return new NumberControllerBox(object, property, { min: arguments[2], max: arguments[3] });\n }\n if (Common.isString(initialValue)) {\n return new StringController(object, property);\n }\n if (Common.isFunction(initialValue)) {\n return new FunctionController(object, property, '');\n }\n if (Common.isBoolean(initialValue)) {\n return new BooleanController(object, property);\n }\n return null;\n};\n\nfunction requestAnimationFrame(callback) {\n setTimeout(callback, 1000 / 60);\n}\nvar requestAnimationFrame$1 = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || requestAnimationFrame;\n\nvar CenteredDiv = function () {\n function CenteredDiv() {\n classCallCheck(this, CenteredDiv);\n this.backgroundElement = document.createElement('div');\n Common.extend(this.backgroundElement.style, {\n backgroundColor: 'rgba(0,0,0,0.8)',\n top: 0,\n left: 0,\n display: 'none',\n zIndex: '1000',\n opacity: 0,\n WebkitTransition: 'opacity 0.2s linear',\n transition: 'opacity 0.2s linear'\n });\n dom.makeFullscreen(this.backgroundElement);\n this.backgroundElement.style.position = 'fixed';\n this.domElement = document.createElement('div');\n Common.extend(this.domElement.style, {\n position: 'fixed',\n display: 'none',\n zIndex: '1001',\n opacity: 0,\n WebkitTransition: '-webkit-transform 0.2s ease-out, opacity 0.2s linear',\n transition: 'transform 0.2s ease-out, opacity 0.2s linear'\n });\n document.body.appendChild(this.backgroundElement);\n document.body.appendChild(this.domElement);\n var _this = this;\n dom.bind(this.backgroundElement, 'click', function () {\n _this.hide();\n });\n }\n createClass(CenteredDiv, [{\n key: 'show',\n value: function show() {\n var _this = this;\n this.backgroundElement.style.display = 'block';\n this.domElement.style.display = 'block';\n this.domElement.style.opacity = 0;\n this.domElement.style.webkitTransform = 'scale(1.1)';\n this.layout();\n Common.defer(function () {\n _this.backgroundElement.style.opacity = 1;\n _this.domElement.style.opacity = 1;\n _this.domElement.style.webkitTransform = 'scale(1)';\n });\n }\n }, {\n key: 'hide',\n value: function hide() {\n var _this = this;\n var hide = function hide() {\n _this.domElement.style.display = 'none';\n _this.backgroundElement.style.display = 'none';\n dom.unbind(_this.domElement, 'webkitTransitionEnd', hide);\n dom.unbind(_this.domElement, 'transitionend', hide);\n dom.unbind(_this.domElement, 'oTransitionEnd', hide);\n };\n dom.bind(this.domElement, 'webkitTransitionEnd', hide);\n dom.bind(this.domElement, 'transitionend', hide);\n dom.bind(this.domElement, 'oTransitionEnd', hide);\n this.backgroundElement.style.opacity = 0;\n this.domElement.style.opacity = 0;\n this.domElement.style.webkitTransform = 'scale(1.1)';\n }\n }, {\n key: 'layout',\n value: function layout() {\n this.domElement.style.left = window.innerWidth / 2 - dom.getWidth(this.domElement) / 2 + 'px';\n this.domElement.style.top = window.innerHeight / 2 - dom.getHeight(this.domElement) / 2 + 'px';\n }\n }]);\n return CenteredDiv;\n}();\n\nvar styleSheet = ___$insertStyle(\".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear;border:0;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button.close-top{position:relative}.dg.main .close-button.close-bottom{position:absolute}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-y:visible}.dg.a.has-save>ul.close-top{margin-top:0}.dg.a.has-save>ul.close-bottom{margin-top:27px}.dg.a.has-save>ul.closed{margin-top:0}.dg.a .save-row{top:0;z-index:1002}.dg.a .save-row.close-top{position:relative}.dg.a .save-row.close-bottom{position:fixed}.dg li{-webkit-transition:height .1s ease-out;-o-transition:height .1s ease-out;-moz-transition:height .1s ease-out;transition:height .1s ease-out;-webkit-transition:overflow .1s linear;-o-transition:overflow .1s linear;-moz-transition:overflow .1s linear;transition:overflow .1s linear}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li>*{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px;overflow:hidden}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .c{float:left;width:60%;position:relative}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:7px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .cr.color{overflow:visible}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.color{border-left:3px solid}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2FA1D6}.dg .cr.number input[type=text]{color:#2FA1D6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2FA1D6;max-width:100%}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\\n\");\n\ncss.inject(styleSheet);\nvar CSS_NAMESPACE = 'dg';\nvar HIDE_KEY_CODE = 72;\nvar CLOSE_BUTTON_HEIGHT = 20;\nvar DEFAULT_DEFAULT_PRESET_NAME = 'Default';\nvar SUPPORTS_LOCAL_STORAGE = function () {\n try {\n return !!window.localStorage;\n } catch (e) {\n return false;\n }\n}();\nvar SAVE_DIALOGUE = void 0;\nvar autoPlaceVirgin = true;\nvar autoPlaceContainer = void 0;\nvar hide = false;\nvar hideableGuis = [];\nvar GUI = function GUI(pars) {\n var _this = this;\n var params = pars || {};\n this.domElement = document.createElement('div');\n this.__ul = document.createElement('ul');\n this.domElement.appendChild(this.__ul);\n dom.addClass(this.domElement, CSS_NAMESPACE);\n this.__folders = {};\n this.__controllers = [];\n this.__rememberedObjects = [];\n this.__rememberedObjectIndecesToControllers = [];\n this.__listening = [];\n params = Common.defaults(params, {\n closeOnTop: false,\n autoPlace: true,\n width: GUI.DEFAULT_WIDTH\n });\n params = Common.defaults(params, {\n resizable: params.autoPlace,\n hideable: params.autoPlace\n });\n if (!Common.isUndefined(params.load)) {\n if (params.preset) {\n params.load.preset = params.preset;\n }\n } else {\n params.load = { preset: DEFAULT_DEFAULT_PRESET_NAME };\n }\n if (Common.isUndefined(params.parent) && params.hideable) {\n hideableGuis.push(this);\n }\n params.resizable = Common.isUndefined(params.parent) && params.resizable;\n if (params.autoPlace && Common.isUndefined(params.scrollable)) {\n params.scrollable = true;\n }\n var useLocalStorage = SUPPORTS_LOCAL_STORAGE && localStorage.getItem(getLocalStorageHash(this, 'isLocal')) === 'true';\n var saveToLocalStorage = void 0;\n var titleRow = void 0;\n Object.defineProperties(this,\n {\n parent: {\n get: function get$$1() {\n return params.parent;\n }\n },\n scrollable: {\n get: function get$$1() {\n return params.scrollable;\n }\n },\n autoPlace: {\n get: function get$$1() {\n return params.autoPlace;\n }\n },\n closeOnTop: {\n get: function get$$1() {\n return params.closeOnTop;\n }\n },\n preset: {\n get: function get$$1() {\n if (_this.parent) {\n return _this.getRoot().preset;\n }\n return params.load.preset;\n },\n set: function set$$1(v) {\n if (_this.parent) {\n _this.getRoot().preset = v;\n } else {\n params.load.preset = v;\n }\n setPresetSelectIndex(this);\n _this.revert();\n }\n },\n width: {\n get: function get$$1() {\n return params.width;\n },\n set: function set$$1(v) {\n params.width = v;\n setWidth(_this, v);\n }\n },\n name: {\n get: function get$$1() {\n return params.name;\n },\n set: function set$$1(v) {\n params.name = v;\n if (titleRow) {\n titleRow.innerHTML = params.name;\n }\n }\n },\n closed: {\n get: function get$$1() {\n return params.closed;\n },\n set: function set$$1(v) {\n params.closed = v;\n if (params.closed) {\n dom.addClass(_this.__ul, GUI.CLASS_CLOSED);\n } else {\n dom.removeClass(_this.__ul, GUI.CLASS_CLOSED);\n }\n this.onResize();\n if (_this.__closeButton) {\n _this.__closeButton.innerHTML = v ? GUI.TEXT_OPEN : GUI.TEXT_CLOSED;\n }\n }\n },\n load: {\n get: function get$$1() {\n return params.load;\n }\n },\n useLocalStorage: {\n get: function get$$1() {\n return useLocalStorage;\n },\n set: function set$$1(bool) {\n if (SUPPORTS_LOCAL_STORAGE) {\n useLocalStorage = bool;\n if (bool) {\n dom.bind(window, 'unload', saveToLocalStorage);\n } else {\n dom.unbind(window, 'unload', saveToLocalStorage);\n }\n localStorage.setItem(getLocalStorageHash(_this, 'isLocal'), bool);\n }\n }\n }\n });\n if (Common.isUndefined(params.parent)) {\n this.closed = params.closed || false;\n dom.addClass(this.domElement, GUI.CLASS_MAIN);\n dom.makeSelectable(this.domElement, false);\n if (SUPPORTS_LOCAL_STORAGE) {\n if (useLocalStorage) {\n _this.useLocalStorage = true;\n var savedGui = localStorage.getItem(getLocalStorageHash(this, 'gui'));\n if (savedGui) {\n params.load = JSON.parse(savedGui);\n }\n }\n }\n this.__closeButton = document.createElement('div');\n this.__closeButton.innerHTML = GUI.TEXT_CLOSED;\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_BUTTON);\n if (params.closeOnTop) {\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_TOP);\n this.domElement.insertBefore(this.__closeButton, this.domElement.childNodes[0]);\n } else {\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_BOTTOM);\n this.domElement.appendChild(this.__closeButton);\n }\n dom.bind(this.__closeButton, 'click', function () {\n _this.closed = !_this.closed;\n });\n } else {\n if (params.closed === undefined) {\n params.closed = true;\n }\n var titleRowName = document.createTextNode(params.name);\n dom.addClass(titleRowName, 'controller-name');\n titleRow = addRow(_this, titleRowName);\n var onClickTitle = function onClickTitle(e) {\n e.preventDefault();\n _this.closed = !_this.closed;\n return false;\n };\n dom.addClass(this.__ul, GUI.CLASS_CLOSED);\n dom.addClass(titleRow, 'title');\n dom.bind(titleRow, 'click', onClickTitle);\n if (!params.closed) {\n this.closed = false;\n }\n }\n if (params.autoPlace) {\n if (Common.isUndefined(params.parent)) {\n if (autoPlaceVirgin) {\n autoPlaceContainer = document.createElement('div');\n dom.addClass(autoPlaceContainer, CSS_NAMESPACE);\n dom.addClass(autoPlaceContainer, GUI.CLASS_AUTO_PLACE_CONTAINER);\n document.body.appendChild(autoPlaceContainer);\n autoPlaceVirgin = false;\n }\n autoPlaceContainer.appendChild(this.domElement);\n dom.addClass(this.domElement, GUI.CLASS_AUTO_PLACE);\n }\n if (!this.parent) {\n setWidth(_this, params.width);\n }\n }\n this.__resizeHandler = function () {\n _this.onResizeDebounced();\n };\n dom.bind(window, 'resize', this.__resizeHandler);\n dom.bind(this.__ul, 'webkitTransitionEnd', this.__resizeHandler);\n dom.bind(this.__ul, 'transitionend', this.__resizeHandler);\n dom.bind(this.__ul, 'oTransitionEnd', this.__resizeHandler);\n this.onResize();\n if (params.resizable) {\n addResizeHandle(this);\n }\n saveToLocalStorage = function saveToLocalStorage() {\n if (SUPPORTS_LOCAL_STORAGE && localStorage.getItem(getLocalStorageHash(_this, 'isLocal')) === 'true') {\n localStorage.setItem(getLocalStorageHash(_this, 'gui'), JSON.stringify(_this.getSaveObject()));\n }\n };\n this.saveToLocalStorageIfPossible = saveToLocalStorage;\n function resetWidth() {\n var root = _this.getRoot();\n root.width += 1;\n Common.defer(function () {\n root.width -= 1;\n });\n }\n if (!params.parent) {\n resetWidth();\n }\n};\nGUI.toggleHide = function () {\n hide = !hide;\n Common.each(hideableGuis, function (gui) {\n gui.domElement.style.display = hide ? 'none' : '';\n });\n};\nGUI.CLASS_AUTO_PLACE = 'a';\nGUI.CLASS_AUTO_PLACE_CONTAINER = 'ac';\nGUI.CLASS_MAIN = 'main';\nGUI.CLASS_CONTROLLER_ROW = 'cr';\nGUI.CLASS_TOO_TALL = 'taller-than-window';\nGUI.CLASS_CLOSED = 'closed';\nGUI.CLASS_CLOSE_BUTTON = 'close-button';\nGUI.CLASS_CLOSE_TOP = 'close-top';\nGUI.CLASS_CLOSE_BOTTOM = 'close-bottom';\nGUI.CLASS_DRAG = 'drag';\nGUI.DEFAULT_WIDTH = 245;\nGUI.TEXT_CLOSED = 'Close Controls';\nGUI.TEXT_OPEN = 'Open Controls';\nGUI._keydownHandler = function (e) {\n if (document.activeElement.type !== 'text' && (e.which === HIDE_KEY_CODE || e.keyCode === HIDE_KEY_CODE)) {\n GUI.toggleHide();\n }\n};\ndom.bind(window, 'keydown', GUI._keydownHandler, false);\nCommon.extend(GUI.prototype,\n{\n add: function add(object, property) {\n return _add(this, object, property, {\n factoryArgs: Array.prototype.slice.call(arguments, 2)\n });\n },\n addColor: function addColor(object, property) {\n return _add(this, object, property, {\n color: true\n });\n },\n remove: function remove(controller) {\n this.__ul.removeChild(controller.__li);\n this.__controllers.splice(this.__controllers.indexOf(controller), 1);\n var _this = this;\n Common.defer(function () {\n _this.onResize();\n });\n },\n destroy: function destroy() {\n if (this.parent) {\n throw new Error('Only the root GUI should be removed with .destroy(). ' + 'For subfolders, use gui.removeFolder(folder) instead.');\n }\n if (this.autoPlace) {\n autoPlaceContainer.removeChild(this.domElement);\n }\n var _this = this;\n Common.each(this.__folders, function (subfolder) {\n _this.removeFolder(subfolder);\n });\n dom.unbind(window, 'keydown', GUI._keydownHandler, false);\n removeListeners(this);\n },\n addFolder: function addFolder(name) {\n if (this.__folders[name] !== undefined) {\n throw new Error('You already have a folder in this GUI by the' + ' name \"' + name + '\"');\n }\n var newGuiParams = { name: name, parent: this };\n newGuiParams.autoPlace = this.autoPlace;\n if (this.load &&\n this.load.folders &&\n this.load.folders[name]) {\n newGuiParams.closed = this.load.folders[name].closed;\n newGuiParams.load = this.load.folders[name];\n }\n var gui = new GUI(newGuiParams);\n this.__folders[name] = gui;\n var li = addRow(this, gui.domElement);\n dom.addClass(li, 'folder');\n return gui;\n },\n removeFolder: function removeFolder(folder) {\n this.__ul.removeChild(folder.domElement.parentElement);\n delete this.__folders[folder.name];\n if (this.load &&\n this.load.folders &&\n this.load.folders[folder.name]) {\n delete this.load.folders[folder.name];\n }\n removeListeners(folder);\n var _this = this;\n Common.each(folder.__folders, function (subfolder) {\n folder.removeFolder(subfolder);\n });\n Common.defer(function () {\n _this.onResize();\n });\n },\n open: function open() {\n this.closed = false;\n },\n close: function close() {\n this.closed = true;\n },\n hide: function hide() {\n this.domElement.style.display = 'none';\n },\n show: function show() {\n this.domElement.style.display = '';\n },\n onResize: function onResize() {\n var root = this.getRoot();\n if (root.scrollable) {\n var top = dom.getOffset(root.__ul).top;\n var h = 0;\n Common.each(root.__ul.childNodes, function (node) {\n if (!(root.autoPlace && node === root.__save_row)) {\n h += dom.getHeight(node);\n }\n });\n if (window.innerHeight - top - CLOSE_BUTTON_HEIGHT < h) {\n dom.addClass(root.domElement, GUI.CLASS_TOO_TALL);\n root.__ul.style.height = window.innerHeight - top - CLOSE_BUTTON_HEIGHT + 'px';\n } else {\n dom.removeClass(root.domElement, GUI.CLASS_TOO_TALL);\n root.__ul.style.height = 'auto';\n }\n }\n if (root.__resize_handle) {\n Common.defer(function () {\n root.__resize_handle.style.height = root.__ul.offsetHeight + 'px';\n });\n }\n if (root.__closeButton) {\n root.__closeButton.style.width = root.width + 'px';\n }\n },\n onResizeDebounced: Common.debounce(function () {\n this.onResize();\n }, 50),\n remember: function remember() {\n if (Common.isUndefined(SAVE_DIALOGUE)) {\n SAVE_DIALOGUE = new CenteredDiv();\n SAVE_DIALOGUE.domElement.innerHTML = saveDialogContents;\n }\n if (this.parent) {\n throw new Error('You can only call remember on a top level GUI.');\n }\n var _this = this;\n Common.each(Array.prototype.slice.call(arguments), function (object) {\n if (_this.__rememberedObjects.length === 0) {\n addSaveMenu(_this);\n }\n if (_this.__rememberedObjects.indexOf(object) === -1) {\n _this.__rememberedObjects.push(object);\n }\n });\n if (this.autoPlace) {\n setWidth(this, this.width);\n }\n },\n getRoot: function getRoot() {\n var gui = this;\n while (gui.parent) {\n gui = gui.parent;\n }\n return gui;\n },\n getSaveObject: function getSaveObject() {\n var toReturn = this.load;\n toReturn.closed = this.closed;\n if (this.__rememberedObjects.length > 0) {\n toReturn.preset = this.preset;\n if (!toReturn.remembered) {\n toReturn.remembered = {};\n }\n toReturn.remembered[this.preset] = getCurrentPreset(this);\n }\n toReturn.folders = {};\n Common.each(this.__folders, function (element, key) {\n toReturn.folders[key] = element.getSaveObject();\n });\n return toReturn;\n },\n save: function save() {\n if (!this.load.remembered) {\n this.load.remembered = {};\n }\n this.load.remembered[this.preset] = getCurrentPreset(this);\n markPresetModified(this, false);\n this.saveToLocalStorageIfPossible();\n },\n saveAs: function saveAs(presetName) {\n if (!this.load.remembered) {\n this.load.remembered = {};\n this.load.remembered[DEFAULT_DEFAULT_PRESET_NAME] = getCurrentPreset(this, true);\n }\n this.load.remembered[presetName] = getCurrentPreset(this);\n this.preset = presetName;\n addPresetOption(this, presetName, true);\n this.saveToLocalStorageIfPossible();\n },\n revert: function revert(gui) {\n Common.each(this.__controllers, function (controller) {\n if (!this.getRoot().load.remembered) {\n controller.setValue(controller.initialValue);\n } else {\n recallSavedValue(gui || this.getRoot(), controller);\n }\n if (controller.__onFinishChange) {\n controller.__onFinishChange.call(controller, controller.getValue());\n }\n }, this);\n Common.each(this.__folders, function (folder) {\n folder.revert(folder);\n });\n if (!gui) {\n markPresetModified(this.getRoot(), false);\n }\n },\n listen: function listen(controller) {\n var init = this.__listening.length === 0;\n this.__listening.push(controller);\n if (init) {\n updateDisplays(this.__listening);\n }\n },\n updateDisplay: function updateDisplay() {\n Common.each(this.__controllers, function (controller) {\n controller.updateDisplay();\n });\n Common.each(this.__folders, function (folder) {\n folder.updateDisplay();\n });\n }\n});\nfunction addRow(gui, newDom, liBefore) {\n var li = document.createElement('li');\n if (newDom) {\n li.appendChild(newDom);\n }\n if (liBefore) {\n gui.__ul.insertBefore(li, liBefore);\n } else {\n gui.__ul.appendChild(li);\n }\n gui.onResize();\n return li;\n}\nfunction removeListeners(gui) {\n dom.unbind(window, 'resize', gui.__resizeHandler);\n if (gui.saveToLocalStorageIfPossible) {\n dom.unbind(window, 'unload', gui.saveToLocalStorageIfPossible);\n }\n}\nfunction markPresetModified(gui, modified) {\n var opt = gui.__preset_select[gui.__preset_select.selectedIndex];\n if (modified) {\n opt.innerHTML = opt.value + '*';\n } else {\n opt.innerHTML = opt.value;\n }\n}\nfunction augmentController(gui, li, controller) {\n controller.__li = li;\n controller.__gui = gui;\n Common.extend(controller, {\n options: function options(_options) {\n if (arguments.length > 1) {\n var nextSibling = controller.__li.nextElementSibling;\n controller.remove();\n return _add(gui, controller.object, controller.property, {\n before: nextSibling,\n factoryArgs: [Common.toArray(arguments)]\n });\n }\n if (Common.isArray(_options) || Common.isObject(_options)) {\n var _nextSibling = controller.__li.nextElementSibling;\n controller.remove();\n return _add(gui, controller.object, controller.property, {\n before: _nextSibling,\n factoryArgs: [_options]\n });\n }\n },\n name: function name(_name) {\n controller.__li.firstElementChild.firstElementChild.innerHTML = _name;\n return controller;\n },\n listen: function listen() {\n controller.__gui.listen(controller);\n return controller;\n },\n remove: function remove() {\n controller.__gui.remove(controller);\n return controller;\n }\n });\n if (controller instanceof NumberControllerSlider) {\n var box = new NumberControllerBox(controller.object, controller.property, { min: controller.__min, max: controller.__max, step: controller.__step });\n Common.each(['updateDisplay', 'onChange', 'onFinishChange', 'step', 'min', 'max'], function (method) {\n var pc = controller[method];\n var pb = box[method];\n controller[method] = box[method] = function () {\n var args = Array.prototype.slice.call(arguments);\n pb.apply(box, args);\n return pc.apply(controller, args);\n };\n });\n dom.addClass(li, 'has-slider');\n controller.domElement.insertBefore(box.domElement, controller.domElement.firstElementChild);\n } else if (controller instanceof NumberControllerBox) {\n var r = function r(returned) {\n if (Common.isNumber(controller.__min) && Common.isNumber(controller.__max)) {\n var oldName = controller.__li.firstElementChild.firstElementChild.innerHTML;\n var wasListening = controller.__gui.__listening.indexOf(controller) > -1;\n controller.remove();\n var newController = _add(gui, controller.object, controller.property, {\n before: controller.__li.nextElementSibling,\n factoryArgs: [controller.__min, controller.__max, controller.__step]\n });\n newController.name(oldName);\n if (wasListening) newController.listen();\n return newController;\n }\n return returned;\n };\n controller.min = Common.compose(r, controller.min);\n controller.max = Common.compose(r, controller.max);\n } else if (controller instanceof BooleanController) {\n dom.bind(li, 'click', function () {\n dom.fakeEvent(controller.__checkbox, 'click');\n });\n dom.bind(controller.__checkbox, 'click', function (e) {\n e.stopPropagation();\n });\n } else if (controller instanceof FunctionController) {\n dom.bind(li, 'click', function () {\n dom.fakeEvent(controller.__button, 'click');\n });\n dom.bind(li, 'mouseover', function () {\n dom.addClass(controller.__button, 'hover');\n });\n dom.bind(li, 'mouseout', function () {\n dom.removeClass(controller.__button, 'hover');\n });\n } else if (controller instanceof ColorController) {\n dom.addClass(li, 'color');\n controller.updateDisplay = Common.compose(function (val) {\n li.style.borderLeftColor = controller.__color.toString();\n return val;\n }, controller.updateDisplay);\n controller.updateDisplay();\n }\n controller.setValue = Common.compose(function (val) {\n if (gui.getRoot().__preset_select && controller.isModified()) {\n markPresetModified(gui.getRoot(), true);\n }\n return val;\n }, controller.setValue);\n}\nfunction recallSavedValue(gui, controller) {\n var root = gui.getRoot();\n var matchedIndex = root.__rememberedObjects.indexOf(controller.object);\n if (matchedIndex !== -1) {\n var controllerMap = root.__rememberedObjectIndecesToControllers[matchedIndex];\n if (controllerMap === undefined) {\n controllerMap = {};\n root.__rememberedObjectIndecesToControllers[matchedIndex] = controllerMap;\n }\n controllerMap[controller.property] = controller;\n if (root.load && root.load.remembered) {\n var presetMap = root.load.remembered;\n var preset = void 0;\n if (presetMap[gui.preset]) {\n preset = presetMap[gui.preset];\n } else if (presetMap[DEFAULT_DEFAULT_PRESET_NAME]) {\n preset = presetMap[DEFAULT_DEFAULT_PRESET_NAME];\n } else {\n return;\n }\n if (preset[matchedIndex] && preset[matchedIndex][controller.property] !== undefined) {\n var value = preset[matchedIndex][controller.property];\n controller.initialValue = value;\n controller.setValue(value);\n }\n }\n }\n}\nfunction _add(gui, object, property, params) {\n if (object[property] === undefined) {\n throw new Error('Object \"' + object + '\" has no property \"' + property + '\"');\n }\n var controller = void 0;\n if (params.color) {\n controller = new ColorController(object, property);\n } else {\n var factoryArgs = [object, property].concat(params.factoryArgs);\n controller = ControllerFactory.apply(gui, factoryArgs);\n }\n if (params.before instanceof Controller) {\n params.before = params.before.__li;\n }\n recallSavedValue(gui, controller);\n dom.addClass(controller.domElement, 'c');\n var name = document.createElement('span');\n dom.addClass(name, 'property-name');\n name.innerHTML = controller.property;\n var container = document.createElement('div');\n container.appendChild(name);\n container.appendChild(controller.domElement);\n var li = addRow(gui, container, params.before);\n dom.addClass(li, GUI.CLASS_CONTROLLER_ROW);\n if (controller instanceof ColorController) {\n dom.addClass(li, 'color');\n } else {\n dom.addClass(li, _typeof(controller.getValue()));\n }\n augmentController(gui, li, controller);\n gui.__controllers.push(controller);\n return controller;\n}\nfunction getLocalStorageHash(gui, key) {\n return document.location.href + '.' + key;\n}\nfunction addPresetOption(gui, name, setSelected) {\n var opt = document.createElement('option');\n opt.innerHTML = name;\n opt.value = name;\n gui.__preset_select.appendChild(opt);\n if (setSelected) {\n gui.__preset_select.selectedIndex = gui.__preset_select.length - 1;\n }\n}\nfunction showHideExplain(gui, explain) {\n explain.style.display = gui.useLocalStorage ? 'block' : 'none';\n}\nfunction addSaveMenu(gui) {\n var div = gui.__save_row = document.createElement('li');\n dom.addClass(gui.domElement, 'has-save');\n gui.__ul.insertBefore(div, gui.__ul.firstChild);\n dom.addClass(div, 'save-row');\n var gears = document.createElement('span');\n gears.innerHTML = ' ';\n dom.addClass(gears, 'button gears');\n var button = document.createElement('span');\n button.innerHTML = 'Save';\n dom.addClass(button, 'button');\n dom.addClass(button, 'save');\n var button2 = document.createElement('span');\n button2.innerHTML = 'New';\n dom.addClass(button2, 'button');\n dom.addClass(button2, 'save-as');\n var button3 = document.createElement('span');\n button3.innerHTML = 'Revert';\n dom.addClass(button3, 'button');\n dom.addClass(button3, 'revert');\n var select = gui.__preset_select = document.createElement('select');\n if (gui.load && gui.load.remembered) {\n Common.each(gui.load.remembered, function (value, key) {\n addPresetOption(gui, key, key === gui.preset);\n });\n } else {\n addPresetOption(gui, DEFAULT_DEFAULT_PRESET_NAME, false);\n }\n dom.bind(select, 'change', function () {\n for (var index = 0; index < gui.__preset_select.length; index++) {\n gui.__preset_select[index].innerHTML = gui.__preset_select[index].value;\n }\n gui.preset = this.value;\n });\n div.appendChild(select);\n div.appendChild(gears);\n div.appendChild(button);\n div.appendChild(button2);\n div.appendChild(button3);\n if (SUPPORTS_LOCAL_STORAGE) {\n var explain = document.getElementById('dg-local-explain');\n var localStorageCheckBox = document.getElementById('dg-local-storage');\n var saveLocally = document.getElementById('dg-save-locally');\n saveLocally.style.display = 'block';\n if (localStorage.getItem(getLocalStorageHash(gui, 'isLocal')) === 'true') {\n localStorageCheckBox.setAttribute('checked', 'checked');\n }\n showHideExplain(gui, explain);\n dom.bind(localStorageCheckBox, 'change', function () {\n gui.useLocalStorage = !gui.useLocalStorage;\n showHideExplain(gui, explain);\n });\n }\n var newConstructorTextArea = document.getElementById('dg-new-constructor');\n dom.bind(newConstructorTextArea, 'keydown', function (e) {\n if (e.metaKey && (e.which === 67 || e.keyCode === 67)) {\n SAVE_DIALOGUE.hide();\n }\n });\n dom.bind(gears, 'click', function () {\n newConstructorTextArea.innerHTML = JSON.stringify(gui.getSaveObject(), undefined, 2);\n SAVE_DIALOGUE.show();\n newConstructorTextArea.focus();\n newConstructorTextArea.select();\n });\n dom.bind(button, 'click', function () {\n gui.save();\n });\n dom.bind(button2, 'click', function () {\n var presetName = prompt('Enter a new preset name.');\n if (presetName) {\n gui.saveAs(presetName);\n }\n });\n dom.bind(button3, 'click', function () {\n gui.revert();\n });\n}\nfunction addResizeHandle(gui) {\n var pmouseX = void 0;\n gui.__resize_handle = document.createElement('div');\n Common.extend(gui.__resize_handle.style, {\n width: '6px',\n marginLeft: '-3px',\n height: '200px',\n cursor: 'ew-resize',\n position: 'absolute'\n });\n function drag(e) {\n e.preventDefault();\n gui.width += pmouseX - e.clientX;\n gui.onResize();\n pmouseX = e.clientX;\n return false;\n }\n function dragStop() {\n dom.removeClass(gui.__closeButton, GUI.CLASS_DRAG);\n dom.unbind(window, 'mousemove', drag);\n dom.unbind(window, 'mouseup', dragStop);\n }\n function dragStart(e) {\n e.preventDefault();\n pmouseX = e.clientX;\n dom.addClass(gui.__closeButton, GUI.CLASS_DRAG);\n dom.bind(window, 'mousemove', drag);\n dom.bind(window, 'mouseup', dragStop);\n return false;\n }\n dom.bind(gui.__resize_handle, 'mousedown', dragStart);\n dom.bind(gui.__closeButton, 'mousedown', dragStart);\n gui.domElement.insertBefore(gui.__resize_handle, gui.domElement.firstElementChild);\n}\nfunction setWidth(gui, w) {\n gui.domElement.style.width = w + 'px';\n if (gui.__save_row && gui.autoPlace) {\n gui.__save_row.style.width = w + 'px';\n }\n if (gui.__closeButton) {\n gui.__closeButton.style.width = w + 'px';\n }\n}\nfunction getCurrentPreset(gui, useInitialValues) {\n var toReturn = {};\n Common.each(gui.__rememberedObjects, function (val, index) {\n var savedValues = {};\n var controllerMap = gui.__rememberedObjectIndecesToControllers[index];\n Common.each(controllerMap, function (controller, property) {\n savedValues[property] = useInitialValues ? controller.initialValue : controller.getValue();\n });\n toReturn[index] = savedValues;\n });\n return toReturn;\n}\nfunction setPresetSelectIndex(gui) {\n for (var index = 0; index < gui.__preset_select.length; index++) {\n if (gui.__preset_select[index].value === gui.preset) {\n gui.__preset_select.selectedIndex = index;\n }\n }\n}\nfunction updateDisplays(controllerArray) {\n if (controllerArray.length !== 0) {\n requestAnimationFrame$1.call(window, function () {\n updateDisplays(controllerArray);\n });\n }\n Common.each(controllerArray, function (c) {\n c.updateDisplay();\n });\n}\n\nvar color = {\n Color: Color,\n math: ColorMath,\n interpret: interpret\n};\nvar controllers = {\n Controller: Controller,\n BooleanController: BooleanController,\n OptionController: OptionController,\n StringController: StringController,\n NumberController: NumberController,\n NumberControllerBox: NumberControllerBox,\n NumberControllerSlider: NumberControllerSlider,\n FunctionController: FunctionController,\n ColorController: ColorController\n};\nvar dom$1 = { dom: dom };\nvar gui = { GUI: GUI };\nvar GUI$1 = GUI;\nvar index = {\n color: color,\n controllers: controllers,\n dom: dom$1,\n gui: gui,\n GUI: GUI$1\n};\n\nexport { color, controllers, dom$1 as dom, gui, GUI$1 as GUI };\nexport default index;\n//# sourceMappingURL=dat.gui.module.js.map\n","// TODO: Change this to enable / disable debug mode\r\nexport const DEBUG = false && process.env.NODE_ENV === 'development';\r\n\r\nimport DAT from 'dat.gui';\r\nimport WebGLDebug from 'webgl-debug';\r\nimport Stats from 'stats-js';\r\nimport { PerspectiveCamera } from 'three';\r\nimport OrbitControls from 'three-orbitcontrols';\r\nimport { Spector } from 'spectorjs';\r\n\r\nexport var ABORTED = false;\r\nexport function abort(message) {\r\n ABORTED = true; \r\n throw message;\r\n}\r\n\r\n// Get the canvas element\r\nexport const canvas = document.getElementById('canvas');\r\n\r\n// Initialize the WebGL context\r\nconst glContext = canvas.getContext('webgl');\r\n\r\n// Get a debug context\r\nexport const gl = DEBUG ? WebGLDebug.makeDebugContext(glContext, (err, funcName, args) => {\r\n abort(WebGLDebug.glEnumToString(err) + ' was caused by call to: ' + funcName);\r\n}) : glContext;\r\n\r\nconst supportedExtensions = gl.getSupportedExtensions();\r\nconst requiredExtensions = [\r\n 'OES_texture_float',\r\n 'OES_texture_float_linear',\r\n 'OES_element_index_uint',\r\n 'WEBGL_depth_texture',\r\n 'WEBGL_draw_buffers',\r\n];\r\n\r\n// Check that all required extensions are supported\r\nfor (let i = 0; i < requiredExtensions.length; ++i) {\r\n if (supportedExtensions.indexOf(requiredExtensions[i]) < 0) {\r\n throw 'Unable to load extension ' + requiredExtensions[i];\r\n }\r\n}\r\n\r\n// Get the maximum number of draw buffers\r\ngl.getExtension('OES_texture_float');\r\ngl.getExtension('OES_texture_float_linear');\r\ngl.getExtension('OES_element_index_uint');\r\ngl.getExtension('WEBGL_depth_texture');\r\nexport const WEBGL_draw_buffers = gl.getExtension('WEBGL_draw_buffers');\r\nexport const MAX_DRAW_BUFFERS_WEBGL = gl.getParameter(WEBGL_draw_buffers.MAX_DRAW_BUFFERS_WEBGL);\r\n\r\nexport const gui = new DAT.GUI();\r\n\r\n// initialize statistics widget\r\nconst stats = new Stats();\r\nstats.setMode(1); // 0: fps, 1: ms\r\nstats.domElement.style.position = 'absolute';\r\nstats.domElement.style.left = '0px';\r\nstats.domElement.style.top = '0px';\r\ndocument.body.appendChild(stats.domElement);\r\n\r\n// Initialize camera\r\nexport const camera = new PerspectiveCamera(75, canvas.clientWidth / canvas.clientHeight, 0.1, 1000);\r\n\r\n// Initialize camera controls\r\nexport const cameraControls = new OrbitControls(camera, canvas);\r\ncameraControls.enableDamping = true;\r\ncameraControls.enableZoom = true;\r\ncameraControls.rotateSpeed = 0.3;\r\ncameraControls.zoomSpeed = 1.0;\r\ncameraControls.panSpeed = 2.0;\r\n\r\nfunction setSize(width, height) {\r\n canvas.width = width;\r\n canvas.height = height;\r\n camera.aspect = width / height;\r\n camera.updateProjectionMatrix();\r\n}\r\n\r\nsetSize(canvas.clientWidth, canvas.clientHeight);\r\nwindow.addEventListener('resize', () => setSize(canvas.clientWidth, canvas.clientHeight));\r\n\r\nif (DEBUG) {\r\n const spector = new Spector();\r\n spector.displayUI();\r\n}\r\n\r\n// Creates a render loop that is wrapped with camera update and stats logging\r\nexport function makeRenderLoop(render) {\r\n return function tick() {\r\n cameraControls.update();\r\n stats.begin();\r\n render();\r\n stats.end();\r\n if (!ABORTED) {\r\n requestAnimationFrame(tick)\r\n }\r\n }\r\n}\r\n\r\n// import the main application\r\nrequire('./main');\r\n","import { gl, canvas, abort } from './init';\r\nimport QuadVertSource from './shaders/quad.vert.glsl';\r\n\r\nfunction downloadURI(uri, name) {\r\n var link = document.createElement('a');\r\n link.download = name;\r\n link.href = uri;\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n};\r\n\r\nexport function saveCanvas() {\r\n downloadURI(canvas.toDataURL('image/png'), 'webgl-canvas-' + Date.now() + '.png');\r\n}\r\n\r\nfunction compileShader(shaderSource, shaderType) {\r\n var shader = gl.createShader(shaderType);\r\n gl.shaderSource(shader, shaderSource);\r\n gl.compileShader(shader);\r\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\r\n console.error(shaderSource);\r\n abort('shader compiler error:\\n' + gl.getShaderInfoLog(shader));\r\n }\r\n\r\n return shader;\r\n};\r\n\r\nfunction linkShader(vs, fs) {\r\n var prog = gl.createProgram();\r\n gl.attachShader(prog, vs);\r\n gl.attachShader(prog, fs);\r\n gl.linkProgram(prog);\r\n if (!gl.getProgramParameter(prog, gl.LINK_STATUS)) {\r\n abort('shader linker error:\\n' + gl.getProgramInfoLog(prog));\r\n }\r\n return prog;\r\n};\r\n\r\nfunction addShaderLocations(result, shaderLocations) {\r\n if (shaderLocations && shaderLocations.uniforms && shaderLocations.uniforms.length) {\r\n for (let i = 0; i < shaderLocations.uniforms.length; ++i) {\r\n Object.assign(result, {\r\n [shaderLocations.uniforms[i]]: gl.getUniformLocation(result.glShaderProgram, shaderLocations.uniforms[i]),\r\n });\r\n }\r\n }\r\n\r\n if (shaderLocations && shaderLocations.attribs && shaderLocations.attribs.length) {\r\n for (let i = 0; i < shaderLocations.attribs.length; ++i) {\r\n Object.assign(result, {\r\n [shaderLocations.attribs[i]]: gl.getAttribLocation(result.glShaderProgram, shaderLocations.attribs[i]),\r\n });\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\n// So this is returning an object containing the actual shader program, along with\r\n// mapping from uniform and attrib names to the pointer to those things on the GPU.\r\nexport function loadShaderProgram(vsSource, fsSource, shaderLocations) {\r\n const vs = compileShader(vsSource, gl.VERTEX_SHADER);\r\n const fs = compileShader(fsSource, gl.FRAGMENT_SHADER);\r\n\r\n return addShaderLocations({ glShaderProgram: linkShader(vs, fs) }, shaderLocations);\r\n}\r\n\r\nconst quadPositions = new Float32Array([\r\n -1.0, -1.0, 0.0,\r\n 1.0, -1.0, 0.0,\r\n -1.0, 1.0, 0.0,\r\n 1.0, 1.0, 0.0\r\n]);\r\n\r\nconst quadBuffer = gl.createBuffer();\r\ngl.bindBuffer(gl.ARRAY_BUFFER, quadBuffer);\r\ngl.bufferData(gl.ARRAY_BUFFER, quadPositions, gl.STATIC_DRAW);\r\n\r\nexport function renderFullscreenQuad(program) {\r\n // Bind the program to use to draw the quad\r\n gl.useProgram(program.glShaderProgram);\r\n\r\n // Bind the VBO as the gl.ARRAY_BUFFER\r\n gl.bindBuffer(gl.ARRAY_BUFFER, quadBuffer);\r\n\r\n // Enable the bound buffer as the vertex attrib array for\r\n // program.a_position, using gl.enableVertexAttribArray\r\n gl.enableVertexAttribArray(program.a_position);\r\n \r\n // Use gl.vertexAttribPointer to tell WebGL the type/layout for\r\n // program.a_position's access pattern.\r\n gl.vertexAttribPointer(program.a_position, 3, gl.FLOAT, gl.FALSE, 0, 0);\r\n\r\n // Use gl.drawArrays to draw the quad\r\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\r\n\r\n // Disable the enabled vertex attrib array\r\n gl.disableVertexAttribArray(program.a_position);\r\n\r\n // Unbind the array buffer.\r\n gl.bindBuffer(gl.ARRAY_BUFFER, null);\r\n}","const MinimalGLTFLoader = require('../lib/minimal-gltf-loader');\r\nimport { gl } from './init';\r\n\r\n// TODO: Edit if you want to change the light initial positions \r\nexport const LIGHT_MIN = [-14, 0, -6];\r\nexport const LIGHT_MAX = [14, 20, 6];\r\nexport const LIGHT_RADIUS = 5.0;\r\nexport const LIGHT_DT = -0.03;\r\n\r\n// TODO: This controls the number of lights\r\nexport const NUM_LIGHTS = 100;\r\n\r\nclass Scene {\r\n constructor() {\r\n this.lights = [];\r\n this.models = [];\r\n\r\n for (let i = 0; i < NUM_LIGHTS; ++i) {\r\n this.lights.push({\r\n position: new Float32Array([\r\n Math.random() * (LIGHT_MAX[0] - LIGHT_MIN[0]) + LIGHT_MIN[0],\r\n Math.random() * (LIGHT_MAX[1] - LIGHT_MIN[1]) + LIGHT_MIN[1],\r\n Math.random() * (LIGHT_MAX[2] - LIGHT_MIN[2]) + LIGHT_MIN[2],\r\n ]),\r\n color: new Float32Array([\r\n 0.5 + 0.5 * Math.random(),\r\n 0.5 + 0.5 * Math.random(),\r\n 0.5 + Math.random(),\r\n ]),\r\n radius: LIGHT_RADIUS,\r\n });\r\n }\r\n }\r\n\r\n loadGLTF(url) {\r\n var glTFLoader = new MinimalGLTFLoader.glTFLoader(gl);\r\n glTFLoader.loadGLTF(url, glTF => {\r\n var curScene = glTF.scenes[glTF.defaultScene];\r\n \r\n var webGLTextures = {};\r\n \r\n // temp var\r\n var i,len;\r\n var primitiveOrderID;\r\n \r\n var mesh;\r\n var primitive;\r\n var vertexBuffer;\r\n var indicesBuffer;\r\n \r\n // textures setting\r\n var textureID = 0;\r\n var textureInfo;\r\n var samplerInfo;\r\n var target, format, internalFormat, type; // texture info\r\n var magFilter, minFilter, wrapS, wrapT;\r\n var image;\r\n var texture;\r\n \r\n // temp for sponza\r\n var colorTextureName = 'texture_color';\r\n var normalTextureName = 'texture_normal';\r\n \r\n for (var tid in glTF.json.textures) {\r\n textureInfo = glTF.json.textures[tid];\r\n target = textureInfo.target || gl.TEXTURE_2D;\r\n format = textureInfo.format || gl.RGBA;\r\n internalFormat = textureInfo.format || gl.RGBA;\r\n type = textureInfo.type || gl.UNSIGNED_BYTE;\r\n \r\n image = glTF.images[textureInfo.source];\r\n \r\n texture = gl.createTexture();\r\n gl.activeTexture(gl.TEXTURE0 + textureID);\r\n gl.bindTexture(target, texture);\r\n \r\n switch(target) {\r\n case 3553: // gl.TEXTURE_2D\r\n gl.texImage2D(target, 0, internalFormat, format, type, image);\r\n break;\r\n }\r\n \r\n // !! Sampler\r\n // raw WebGL 1, no sampler object, set magfilter, wrapS, etc\r\n samplerInfo = glTF.json.samplers[textureInfo.sampler];\r\n minFilter = samplerInfo.minFilter || gl.NEAREST_MIPMAP_LINEAR;\r\n magFilter = samplerInfo.magFilter || gl.LINEAR;\r\n wrapS = samplerInfo.wrapS || gl.REPEAT;\r\n wrapT = samplerInfo.wrapT || gl.REPEAT;\r\n gl.texParameteri(target, gl.TEXTURE_MIN_FILTER, minFilter);\r\n gl.texParameteri(target, gl.TEXTURE_MAG_FILTER, magFilter);\r\n gl.texParameteri(target, gl.TEXTURE_WRAP_S, wrapS);\r\n gl.texParameteri(target, gl.TEXTURE_WRAP_T, wrapT);\r\n if (minFilter == gl.NEAREST_MIPMAP_NEAREST || \r\n minFilter == gl.NEAREST_MIPMAP_LINEAR || \r\n minFilter == gl.LINEAR_MIPMAP_NEAREST ||\r\n minFilter == gl.LINEAR_MIPMAP_LINEAR ) {\r\n gl.generateMipmap(target);\r\n }\r\n \r\n \r\n gl.bindTexture(target, null);\r\n \r\n webGLTextures[tid] = {\r\n texture: texture,\r\n target: target,\r\n id: textureID\r\n };\r\n \r\n textureID++;\r\n }\r\n\r\n // vertex attributes\r\n for (var mid in curScene.meshes) {\r\n mesh = curScene.meshes[mid];\r\n\r\n for (i = 0, len = mesh.primitives.length; i < len; ++i) {\r\n primitive = mesh.primitives[i];\r\n\r\n vertexBuffer = gl.createBuffer();\r\n indicesBuffer = gl.createBuffer();\r\n\r\n // initialize buffer\r\n var vertices = primitive.vertexBuffer;\r\n gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);\r\n gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);\r\n gl.bindBuffer(gl.ARRAY_BUFFER, null);\r\n\r\n var indices = primitive.indices;\r\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indicesBuffer);\r\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indices, gl.STATIC_DRAW);\r\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);\r\n\r\n var posInfo = primitive.attributes[primitive.technique.parameters['position'].semantic];\r\n var norInfo = primitive.attributes[primitive.technique.parameters['normal'].semantic];\r\n var uvInfo = primitive.attributes[primitive.technique.parameters['texcoord_0'].semantic];\r\n\r\n this.models.push({\r\n gltf: primitive,\r\n\r\n idx: indicesBuffer,\r\n\r\n attributes: vertexBuffer,\r\n posInfo: {size: posInfo.size, type: posInfo.type, stride: posInfo.stride, offset: posInfo.offset},\r\n norInfo: {size: norInfo.size, type: norInfo.type, stride: norInfo.stride, offset: norInfo.offset},\r\n uvInfo: {size: uvInfo.size, type: uvInfo.type, stride: uvInfo.stride, offset: uvInfo.offset},\r\n\r\n // specific textures temp test\r\n colmap: webGLTextures[colorTextureName].texture, \r\n normap: webGLTextures[normalTextureName].texture\r\n });\r\n }\r\n }\r\n\r\n });\r\n }\r\n\r\n update() {\r\n for (let i = 0; i < NUM_LIGHTS; i++) {\r\n // OPTIONAL TODO: Edit if you want to change how lights move\r\n this.lights[i].position[1] += LIGHT_DT;\r\n // wrap lights from bottom to top\r\n this.lights[i].position[1] = (this.lights[i].position[1] + LIGHT_MAX[1] - LIGHT_MIN[1]) % LIGHT_MAX[1] + LIGHT_MIN[1];\r\n }\r\n }\r\n\r\n draw(shaderProgram) {\r\n for (let i = 0; i < this.models.length; ++i) {\r\n const model = this.models[i];\r\n if (model.colmap) {\r\n gl.activeTexture(gl.TEXTURE0);\r\n gl.bindTexture(gl.TEXTURE_2D, model.colmap);\r\n gl.uniform1i(shaderProgram.u_colmap, 0);\r\n }\r\n\r\n if (model.normap) {\r\n gl.activeTexture(gl.TEXTURE1);\r\n gl.bindTexture(gl.TEXTURE_2D, model.normap);\r\n gl.uniform1i(shaderProgram.u_normap, 1);\r\n }\r\n\r\n gl.bindBuffer(gl.ARRAY_BUFFER, model.attributes);\r\n \r\n gl.enableVertexAttribArray(shaderProgram.a_position);\r\n gl.vertexAttribPointer(shaderProgram.a_position, model.posInfo.size, model.posInfo.type, false, model.posInfo.stride, model.posInfo.offset);\r\n \r\n gl.enableVertexAttribArray(shaderProgram.a_normal);\r\n gl.vertexAttribPointer(shaderProgram.a_normal, model.norInfo.size, model.norInfo.type, false, model.norInfo.stride, model.norInfo.offset);\r\n \r\n gl.enableVertexAttribArray(shaderProgram.a_uv);\r\n gl.vertexAttribPointer(shaderProgram.a_uv, model.uvInfo.size, model.uvInfo.type, false, model.uvInfo.stride, model.uvInfo.offset);\r\n \r\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, model.idx);\r\n\r\n gl.drawElements(model.gltf.mode, model.gltf.indices.length, model.gltf.indicesComponentType, 0);\r\n }\r\n }\r\n}\r\n\r\nexport default Scene;","import { gl } from '../init';\r\n\r\nexport default class TextureBuffer {\r\n /**\r\n * This class represents a buffer in a shader. Unforunately we can't bind arbitrary buffers so we need to pack the data as a texture\r\n * @param {Number} elementCount The number of items in the buffer\r\n * @param {Number} elementSize The number of values in each item of the buffer\r\n */\r\n\r\n constructor(elementCount, elementSize) {\r\n // Initialize the texture. We use gl.NEAREST for texture filtering because we don't want to blend between values in the buffer. We want the exact value\r\n this._glTexture = gl.createTexture();\r\n gl.bindTexture(gl.TEXTURE_2D, this._glTexture);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\r\n\r\n // The texture stores 4 values in each \"pixel\". Thus, the texture we create is elementCount x ceil(elementSize / 4)\r\n this._pixelsPerElement = Math.ceil(elementSize / 4);\r\n this._elementCount = elementCount;\r\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, elementCount, this._pixelsPerElement, 0, gl.RGBA, gl.FLOAT, null);\r\n gl.bindTexture(gl.TEXTURE_2D, null);\r\n\r\n // Create a buffer to use to upload to the texture\r\n this._buffer = new Float32Array(elementCount * 4 * this._pixelsPerElement);\r\n }\r\n\r\n get glTexture() {\r\n return this._glTexture;\r\n }\r\n\r\n get buffer() {\r\n return this._buffer;\r\n }\r\n\r\n /**\r\n * Computes the starting buffer index to a particular item.\r\n * @param {*} index The index of the item\r\n * @param {*} component The ith float of an element is located in the (i/4)th pixel\r\n */\r\n bufferIndex(index, component) {\r\n return 4 * index + 4 * component * this._elementCount;\r\n }\r\n\r\n /**\r\n * Update the texture with the data in the buffer\r\n */\r\n update() {\r\n gl.bindTexture(gl.TEXTURE_2D, this._glTexture);\r\n gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, this._elementCount, this._pixelsPerElement, gl.RGBA, gl.FLOAT, this._buffer);\r\n gl.bindTexture(gl.TEXTURE_2D, null);\r\n }\r\n};","import { gl } from '../init';\r\nimport { mat4, vec4 } from 'gl-matrix';\r\nimport { loadShaderProgram } from '../utils';\r\nimport { NUM_LIGHTS } from '../scene';\r\nimport vsSource from '../shaders/forward.vert.glsl';\r\nimport fsSource from '../shaders/forward.frag.glsl.js';\r\nimport TextureBuffer from './textureBuffer';\r\n\r\nexport default class ForwardRenderer {\r\n constructor() {\r\n // Create a texture to store light data\r\n // We can't sanely upload arbitrary data to the shader, so we pack this light information into\r\n // a texture. The TextureBuffer parameters are saying that there are 100 lights, and each one\r\n // is defined by 8 values. Under the covers of TextureBuffer, we say that because each \"pixel\"\r\n // stores only four values, then each light's data will end up spread across two pixels worth.\r\n this._lightTexture = new TextureBuffer(NUM_LIGHTS, 8);\r\n\r\n // Initialize a shader program. The fragment shader source is compiled based on the number of lights\r\n // This shader program object contains both the actual shader program as well as mappings from the\r\n // attrib and uniform names to their locations on the GPU.\r\n this._shaderProgram = loadShaderProgram(\r\n vsSource,\r\n fsSource({ numLights: NUM_LIGHTS }),\r\n {\r\n uniforms: ['u_viewProjectionMatrix', 'u_colmap', 'u_normap', 'u_lightbuffer'],\r\n attribs: ['a_position', 'a_normal', 'a_uv'],\r\n }\r\n );\r\n\r\n this._projectionMatrix = mat4.create();\r\n this._viewMatrix = mat4.create();\r\n this._viewProjectionMatrix = mat4.create();\r\n }\r\n\r\n render(camera, scene) {\r\n // Update the camera matrices\r\n camera.updateMatrixWorld();\r\n mat4.invert(this._viewMatrix, camera.matrixWorld.elements);\r\n mat4.copy(this._projectionMatrix, camera.projectionMatrix.elements);\r\n mat4.multiply(this._viewProjectionMatrix, this._projectionMatrix, this._viewMatrix);\r\n\r\n // Update the buffer used to populate the texture packed with light data\r\n // For each light, upate the values inside the lightTexture buffer using this\r\n // insane indexing scheme.\r\n for (let i = 0; i < NUM_LIGHTS; ++i) {\r\n this._lightTexture.buffer[this._lightTexture.bufferIndex(i, 0) + 0] = scene.lights[i].position[0];\r\n this._lightTexture.buffer[this._lightTexture.bufferIndex(i, 0) + 1] = scene.lights[i].position[1];\r\n this._lightTexture.buffer[this._lightTexture.bufferIndex(i, 0) + 2] = scene.lights[i].position[2];\r\n this._lightTexture.buffer[this._lightTexture.bufferIndex(i, 0) + 3] = scene.lights[i].radius;\r\n\r\n this._lightTexture.buffer[this._lightTexture.bufferIndex(i, 1) + 0] = scene.lights[i].color[0];\r\n this._lightTexture.buffer[this._lightTexture.bufferIndex(i, 1) + 1] = scene.lights[i].color[1];\r\n this._lightTexture.buffer[this._lightTexture.bufferIndex(i, 1) + 2] = scene.lights[i].color[2];\r\n }\r\n\r\n // Update the light texture\r\n // Flush these updates out to the GPU\r\n this._lightTexture.update();\r\n\r\n // Bind the default null framebuffer which is the screen\r\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\r\n\r\n // Render to the whole screen\r\n gl.viewport(0, 0, canvas.width, canvas.height);\r\n\r\n // Clear the frame\r\n gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);\r\n\r\n // Use this shader program\r\n gl.useProgram(this._shaderProgram.glShaderProgram);\r\n\r\n // Upload the camera matrix\r\n gl.uniformMatrix4fv(this._shaderProgram.u_viewProjectionMatrix, false, this._viewProjectionMatrix);\r\n\r\n // Set the light texture as a uniform input to the shader\r\n gl.activeTexture(gl.TEXTURE2);\r\n gl.bindTexture(gl.TEXTURE_2D, this._lightTexture.glTexture);\r\n gl.uniform1i(this._shaderProgram.u_lightbuffer, 2);\r\n\r\n // Draw the scene. This function takes the shader program so that the model's textures can be bound to the right inputs\r\n scene.draw(this._shaderProgram);\r\n }\r\n};\r\n","export default function(params) {\r\n return `\r\n #version 100\r\n precision highp float;\r\n\r\n uniform sampler2D u_colmap;\r\n uniform sampler2D u_normap;\r\n uniform sampler2D u_lightbuffer;\r\n\r\n varying vec3 v_position;\r\n varying vec3 v_normal;\r\n varying vec2 v_uv;\r\n\r\n vec3 applyNormalMap(vec3 geomnor, vec3 normap) {\r\n normap = normap * 2.0 - 1.0;\r\n vec3 up = normalize(vec3(0.001, 1, 0.001));\r\n vec3 surftan = normalize(cross(geomnor, up));\r\n vec3 surfbinor = cross(geomnor, surftan);\r\n return normap.y * surftan + normap.x * surfbinor + normap.z * geomnor;\r\n }\r\n\r\n float ExtractFloat(sampler2D texture, int textureWidth, int textureHeight, int index, int component) {\r\n float u = float(index + 1) / float(textureWidth + 1);\r\n int pixel = component / 4;\r\n float v = float(pixel + 1) / float(textureHeight + 1);\r\n vec4 texel = texture2D(texture, vec2(u, v));\r\n int pixelComponent = component - pixel * 4;\r\n if (pixelComponent == 0) {\r\n return texel[0];\r\n } else if (pixelComponent == 1) {\r\n return texel[1];\r\n } else if (pixelComponent == 2) {\r\n return texel[2];\r\n } else if (pixelComponent == 3) {\r\n return texel[3];\r\n }\r\n }\r\n\r\n struct Light {\r\n vec3 position;\r\n float radius;\r\n vec3 color;\r\n };\r\n\r\n Light UnpackLight(int index) {\r\n Light light;\r\n\r\n float u = float(index + 1) / float(${params.numLights + 1});\r\n vec4 v1 = texture2D(u_lightbuffer, vec2(u, 0.0));\r\n vec4 v2 = texture2D(u_lightbuffer, vec2(u, 0.5));\r\n light.position = v1.xyz;\r\n\r\n // LOOK: This extracts the 4th float (radius) of the (index)th light in the buffer\r\n // Note that this is just an example implementation to extract one float.\r\n // There are more efficient ways if you need adjacent values\r\n light.radius = ExtractFloat(u_lightbuffer, ${params.numLights}, 2, index, 3);\r\n\r\n light.color = v2.rgb;\r\n return light;\r\n }\r\n\r\n // Cubic approximation of gaussian curve so we falloff to exactly 0 at the light radius\r\n float cubicGaussian(float h) {\r\n if (h < 1.0) {\r\n return 0.25 * pow(2.0 - h, 3.0) - pow(1.0 - h, 3.0);\r\n } else if (h < 2.0) {\r\n return 0.25 * pow(2.0 - h, 3.0);\r\n } else {\r\n return 0.0;\r\n }\r\n }\r\n\r\n void main() {\r\n vec3 albedo = texture2D(u_colmap, v_uv).rgb;\r\n vec3 normap = texture2D(u_normap, v_uv).xyz;\r\n vec3 normal = applyNormalMap(v_normal, normap);\r\n\r\n vec3 fragColor = vec3(0.0);\r\n\r\n for (int i = 0; i < ${params.numLights}; ++i) {\r\n Light light = UnpackLight(i);\r\n float lightDistance = distance(light.position, v_position);\r\n vec3 L = (light.position - v_position) / lightDistance;\r\n\r\n float lightIntensity = cubicGaussian(2.0 * lightDistance / light.radius);\r\n float lambertTerm = max(dot(L, normal), 0.0);\r\n\r\n fragColor += albedo * lambertTerm * light.color * vec3(lightIntensity);\r\n }\r\n\r\n const vec3 ambientLight = vec3(0.025);\r\n fragColor += albedo * ambientLight;\r\n\r\n gl_FragColor = vec4(fragColor, 1.0);\r\n }\r\n `;\r\n}\r\n","import TextureBuffer from './textureBuffer';\r\nimport { vec3, vec4, subtract, mat4 } from 'gl-matrix';\r\nimport { NUM_LIGHTS } from '../scene';\r\nimport { Vector3, Vector4, Matrix4, Plane, Sphere, Frustum } from 'three';\r\n\r\nexport const MAX_LIGHTS_PER_CLUSTER = 100;\r\n\r\nclass Side {\r\n constructor(p1, p2, p3, p4) {\r\n this.p1 = p1\r\n this.p2 = p2\r\n this.p3 = p3\r\n this.p4 = p4\r\n\r\n this.generateNormal()\r\n }\r\n\r\n generateNormal() {\r\n var line1 = vec3.create()\r\n line1 = vec3.subtract(line1, this.p2, this.p1)\r\n\r\n var line2 = vec3.create()\r\n line2 = vec3.subtract(line2, this.p2, this.p3)\r\n\r\n this.normal = vec3.create()\r\n \r\n this.normal = vec3.cross(this.normal, line1, line2)\r\n this.normal = vec3.multiply(this.normal, vec3.fromValues(-1, -1, -1), this.normal)\r\n this.normal = vec3.normalize(this.normal, this.normal);\r\n }\r\n\r\n intersectsSphere(center, radius) {\r\n var v = vec3.create();\r\n v = vec3.subtract(v , center, this.p1);\r\n\r\n var d = vec3.dot(v, this.normal);\r\n\r\n // console.log('Distance from ', center, ' to plane ', this.normal, ' at point ', this.p1, ' is ', d)\r\n }\r\n}\r\n\r\nexport class BaseRenderer {\r\n constructor(xSlices, ySlices, zSlices) {\r\n // Create a texture to store cluster data. Each cluster stores the number of lights followed by the light indices\r\n \r\n // This stores one element per miniFrustum (in row) and each miniFrustum's data has to get packed\r\n // into \"pixels\", where each \"pixel\" stores four floats. In this case, we want to store\r\n // MAX_LIGHTS_PER_CLUSTER + 1 floats, which can fit in (MAX_LIGHTS_PER_CLUSTER + 1) / 4 pixels.\r\n this._clusterTexture = new TextureBuffer(xSlices * ySlices * zSlices, MAX_LIGHTS_PER_CLUSTER + 1);\r\n this._xSlices = xSlices;\r\n this._ySlices = ySlices;\r\n this._zSlices = zSlices;\r\n }\r\n\r\n computeLightSphereAndCenter(light, viewMatrix) {\r\n var center = vec4.fromValues(\r\n light.position[0],\r\n light.position[1],\r\n light.position[2],\r\n 1.0);\r\n\r\n vec4.transformMat4(center, center, viewMatrix);\r\n center = new Vector3(center[0], center[1], center[2]);\r\n var sphere = new Sphere(center, light.radius);\r\n\r\n return sphere;\r\n }\r\n\r\n computeMiniFrustum(xNearLeft, xNearRight, yNearBottom, yNearTop, xFarLeft, xFarRight, yFarBottom, yFarTop, zNear, zFar) {\r\n var frontPlane = new Plane();\r\n frontPlane.setFromCoplanarPoints(\r\n new Vector3(xNearLeft, yNearBottom, zNear),\r\n new Vector3(xNearRight, yNearBottom, zNear),\r\n new Vector3(xNearRight, yNearTop, zNear)\r\n );\r\n // vec3.fromValues(xNearLeft, yNearTop, zNear)\r\n\r\n var backPlane = new Plane();\r\n backPlane.setFromCoplanarPoints(\r\n new Vector3(xFarLeft, yFarBottom, zFar),\r\n new Vector3(xFarLeft, yFarTop, zFar),\r\n new Vector3(xFarRight, yFarTop, zFar)\r\n );\r\n // vec3.fromValues(xFarRight, yFarBottom, zFar)\r\n\r\n var leftPlane = new Plane();\r\n leftPlane.setFromCoplanarPoints(\r\n new Vector3(xNearLeft, yNearBottom, zNear),\r\n new Vector3(xNearLeft, yNearTop, zNear),\r\n new Vector3(xFarLeft, yFarTop, zFar)\r\n );\r\n // vec3.fromValues(xFarLeft, yFarBottom, zFar)\r\n\r\n\r\n var rightPlane = new Plane();\r\n rightPlane.setFromCoplanarPoints(\r\n new Vector3(xNearRight, yNearBottom, zNear),\r\n new Vector3(xFarRight, yFarBottom, zFar),\r\n new Vector3(xFarRight, yFarTop, zFar)\r\n );\r\n // vec3.fromValues(xNearRight, yNearTop, zNear)\r\n\r\n var topPlane = new Plane();\r\n topPlane.setFromCoplanarPoints(\r\n new Vector3(xNearLeft, yNearTop, zNear),\r\n new Vector3(xNearRight, yNearTop, zNear),\r\n new Vector3(xFarRight, yFarTop, zFar)\r\n );\r\n // vec3.fromValues(xFarLeft, yFarTop, zFar)\r\n\r\n var bottomPlane = new Plane();\r\n bottomPlane.setFromCoplanarPoints(\r\n new Vector3(xNearLeft, yNearBottom, zNear),\r\n new Vector3(xFarLeft, yFarBottom, zFar),\r\n new Vector3(xFarRight, yFarBottom, zFar)\r\n );\r\n // vec3.fromValues(xNearRight, yNearBottom, zNear)\r\n\r\n // https://threejs.org/docs/#api/en/math/Frustum\r\n return new Frustum(frontPlane, backPlane, leftPlane, rightPlane, topPlane, bottomPlane);\r\n }\r\n\r\n initializeMiniFrustums(camera) {\r\n this.index2MiniFrustum = {}\r\n\r\n const aspect = camera.aspect;\r\n\r\n const nearClip = camera.near;\r\n const farClip = camera.far;\r\n const fullDepth = farClip - nearClip;\r\n\r\n const vertFov = camera.fov;\r\n const tanFovDiv2 = Math.tan((vertFov/2) * Math.PI / 180.0);\r\n\r\n // xWidth, yHeight, and zDepth\r\n const zDepth = fullDepth / this._zSlices;\r\n\r\n for (let z = 0; z < this._zSlices; ++z) {\r\n // Knowing z allows us to compute the dimensions of both near and far\r\n // ends of the frustum, using CIS560: tan(FOV/2) = (screen.height/2)/screen.z\r\n\r\n const zNear = z * zDepth;\r\n const zFar = zNear + zDepth;\r\n const nearScreenHeight = tanFovDiv2 * zNear * 2;\r\n const farScreenHeight = tanFovDiv2 * zFar * 2;\r\n\r\n // aspect = width / height\r\n const nearScreenWidth = aspect * nearScreenHeight;\r\n const farScreenWidth = aspect * farScreenHeight;\r\n\r\n const xNearWidth = nearScreenWidth / this._xSlices;\r\n const yNearHeight = nearScreenHeight / this._ySlices;\r\n\r\n const xFarWidth = farScreenWidth / this._xSlices;\r\n const yFarHeight = farScreenHeight / this._ySlices;\r\n\r\n for (let y = 0; y < this._ySlices; ++y) {\r\n const yNearBottom = y * yNearHeight;\r\n const yNearTop = yNearBottom + yNearHeight;\r\n\r\n const yFarBottom = y * yFarHeight;\r\n const yFarTop = yFarBottom + yFarHeight;\r\n\r\n for (let x = 0; x < this._xSlices; ++x) {\r\n const xNearLeft = x * xNearWidth;\r\n const xNearRight = xNearLeft + xNearWidth;\r\n \r\n const xFarLeft = x * xFarWidth;\r\n const xFarRight = xFarLeft + xFarWidth;\r\n\r\n let miniFrustumIndex = x + y * this._xSlices + z * this._xSlices * this._ySlices;\r\n const miniFrustum = this.computeMiniFrustum(\r\n xNearLeft, xNearRight, yNearBottom, yNearTop,\r\n xFarLeft, xFarRight, yFarBottom, yFarTop,\r\n zNear, zFar\r\n );\r\n\r\n this.index2MiniFrustum[miniFrustumIndex] = miniFrustum;\r\n }\r\n }\r\n }\r\n }\r\n\r\n updateClustersEfficient(scene, viewMatrix) {\r\n var lightIndex2Sphere = {};\r\n\r\n for (let lightIndex = 0; lightIndex < NUM_LIGHTS; lightIndex++) {\r\n var center = vec4.fromValues(\r\n scene.lights[lightIndex].position[0],\r\n scene.lights[lightIndex].position[1],\r\n scene.lights[lightIndex].position[2],\r\n 1.0);\r\n \r\n vec4.transformMat4(center, center, viewMatrix);\r\n center = new Vector3(center[0], center[1], center[2]);\r\n lightIndex2Sphere[lightIndex] = new Sphere(center, scene.lights[lightIndex].radius);\r\n }\r\n\r\n Object.entries(this.index2MiniFrustum).forEach(([index, miniFrustum]) => {\r\n this._clusterTexture.buffer[this._clusterTexture.bufferIndex(index, 0)] = 0;\r\n\r\n var bufferPtr = 1;\r\n for (let lightIndex = 0; lightIndex < NUM_LIGHTS; lightIndex++) {\r\n var sphere = lightIndex2Sphere[lightIndex];\r\n\r\n if (miniFrustum.intersectsSphere(sphere)) {\r\n let componentOffset = Math.floor(bufferPtr / 4);\r\n let floatOffset = bufferPtr % 4;\r\n\r\n this._clusterTexture.buffer[this._clusterTexture.bufferIndex(index, componentOffset) + floatOffset] = lightIndex;\r\n this._clusterTexture.buffer[this._clusterTexture.bufferIndex(index, 0)]++;\r\n\r\n bufferPtr++;\r\n }\r\n }\r\n });\r\n\r\n this._clusterTexture.update();\r\n }\r\n\r\n // Inefficient\r\n updateClusters(camera, viewMatrix, scene) {\r\n // TODO: Update the cluster texture with the count and indices of the lights in each cluster\r\n // This will take some time. The math is nontrivial...\r\n\r\n const aspect = camera.aspect;\r\n\r\n const nearClip = camera.near;\r\n const farClip = camera.far;\r\n const fullDepth = farClip - nearClip;\r\n\r\n const vertFov = camera.fov;\r\n const tanFovDiv2 = Math.tan((vertFov/2) * Math.PI / 180.0);\r\n\r\n // xWidth, yHeight, and zDepth\r\n const zDepth = fullDepth / this._zSlices;\r\n\r\n // var threeViewMatrix = new Matrix4();\r\n // // console.log(viewMatrix)\r\n\r\n // var m = mat4.create();\r\n // m = mat4.invert(m, viewMatrix)\r\n // // console.log(m)\r\n // threeViewMatrix.set(...m);\r\n // // console.log(threeViewMatrix)\r\n\r\n for (let z = 0; z < this._zSlices; ++z) {\r\n // Knowing z allows us to compute the dimensions of both near and far\r\n // ends of the frustum, using CIS560: tan(FOV/2) = (screen.height/2)/screen.z\r\n\r\n const zNear = z * zDepth;\r\n const zFar = zNear + zDepth;\r\n const nearScreenHeight = tanFovDiv2 * zNear * 2;\r\n const farScreenHeight = tanFovDiv2 * zFar * 2;\r\n\r\n // aspect = width / height\r\n const nearScreenWidth = aspect * nearScreenHeight;\r\n const farScreenWidth = aspect * farScreenHeight;\r\n\r\n const xNearWidth = nearScreenWidth / this._xSlices;\r\n const yNearHeight = nearScreenHeight / this._ySlices;\r\n\r\n const xFarWidth = farScreenWidth / this._xSlices;\r\n const yFarHeight = farScreenHeight / this._ySlices;\r\n\r\n for (let y = 0; y < this._ySlices; ++y) {\r\n const yNearBottom = y * yNearHeight;\r\n const yNearTop = yNearBottom + yNearHeight;\r\n\r\n const yFarBottom = y * yFarHeight;\r\n const yFarTop = yFarBottom + yFarHeight;\r\n\r\n for (let x = 0; x < this._xSlices; ++x) {\r\n const xNearLeft = x * xNearWidth;\r\n const xNearRight = xNearLeft + xNearWidth;\r\n \r\n const xFarLeft = x * xFarWidth;\r\n const xFarRight = xFarLeft + xFarWidth;\r\n\r\n let miniFrustumIndex = x + y * this._xSlices + z * this._xSlices * this._ySlices;\r\n const miniFrustum = this.computeMiniFrustum(\r\n xNearLeft, xNearRight, yNearBottom, yNearTop,\r\n xFarLeft, xFarRight, yFarBottom, yFarTop,\r\n zNear, zFar\r\n );\r\n\r\n // Reset the light count to 0 for every cluster\r\n this._clusterTexture.buffer[this._clusterTexture.bufferIndex(miniFrustumIndex, 0)] = 0;\r\n\r\n var bufferPtr = 1;\r\n for (let lightIndex = 0; lightIndex < NUM_LIGHTS; ++lightIndex) {\r\n const sphere = this.computeLightSphereAndCenter(scene.lights[lightIndex], viewMatrix);\r\n const center = sphere.center;\r\n\r\n if (miniFrustum.intersectsSphere(sphere)) {\r\n const componentOffset = Math.floor(bufferPtr / 4);\r\n const floatOffset = bufferPtr % 4;\r\n\r\n this._clusterTexture.buffer[this._clusterTexture.bufferIndex(miniFrustumIndex, componentOffset) + floatOffset] = lightIndex;\r\n this._clusterTexture.buffer[this._clusterTexture.bufferIndex(miniFrustumIndex, 0)]++;\r\n\r\n bufferPtr++;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n this._clusterTexture.update();\r\n }\r\n}","import { gl } from '../init';\r\nimport { mat4, vec4, vec3 } from 'gl-matrix';\r\nimport { loadShaderProgram } from '../utils';\r\nimport { NUM_LIGHTS } from '../scene';\r\nimport vsSource from '../shaders/forwardPlus.vert.glsl';\r\nimport fsSource from '../shaders/forwardPlus.frag.glsl.js';\r\nimport TextureBuffer from './textureBuffer';\r\nimport {BaseRenderer, MAX_LIGHTS_PER_CLUSTER } from './base';\r\nimport { Matrix4 } from 'three';\r\n\r\nexport default class ForwardPlusRenderer extends BaseRenderer {\r\n constructor(xSlices, ySlices, zSlices, camera) {\r\n super(xSlices, ySlices, zSlices);\r\n\r\n // Create a texture to store light data\r\n this._lightTexture = new TextureBuffer(NUM_LIGHTS, 8);\r\n \r\n this._shaderProgram = loadShaderProgram(vsSource, fsSource({\r\n numLights: NUM_LIGHTS,\r\n }), {\r\n uniforms: [\r\n 'u_viewProjectionMatrix', 'u_colmap', 'u_normap', 'u_lightbuffer', 'u_clusterbuffer',\r\n 'u_xSlices', 'u_ySlices', 'u_zSlices', 'u_nearClip', 'u_farClip', 'u_viewMatrix',\r\n 'u_clusterTextureWidth', 'u_clusterTextureHeight', 'u_cameraPosition'],\r\n attribs: ['a_position', 'a_normal', 'a_uv'],\r\n });\r\n\r\n this._projectionMatrix = mat4.create();\r\n this._viewMatrix = mat4.create();\r\n this._viewProjectionMatrix = mat4.create();\r\n\r\n this.initializeMiniFrustums(camera);\r\n }\r\n\r\n render(camera, scene) {\r\n camera.updateMatrixWorld();\r\n mat4.invert(this._viewMatrix, camera.matrixWorld.elements);\r\n mat4.copy(this._projectionMatrix, camera.projectionMatrix.elements);\r\n mat4.multiply(this._viewProjectionMatrix, this._projectionMatrix, this._viewMatrix);\r\n\r\n this.updateClustersEfficient(scene, this._viewMatrix);\r\n // this.updateClusters(camera, this._viewMatrix, scene);\r\n\r\n // Update the buffer used to populate the texture packed with light data\r\n for (let i = 0; i < NUM_LIGHTS; ++i) {\r\n this._lightTexture.buffer[this._lightTexture.bufferIndex(i, 0) + 0] = scene.lights[i].position[0];\r\n this._lightTexture.buffer[this._lightTexture.bufferIndex(i, 0) + 1] = scene.lights[i].position[1];\r\n this._lightTexture.buffer[this._lightTexture.bufferIndex(i, 0) + 2] = scene.lights[i].position[2];\r\n this._lightTexture.buffer[this._lightTexture.bufferIndex(i, 0) + 3] = scene.lights[i].radius;\r\n\r\n this._lightTexture.buffer[this._lightTexture.bufferIndex(i, 1) + 0] = scene.lights[i].color[0];\r\n this._lightTexture.buffer[this._lightTexture.bufferIndex(i, 1) + 1] = scene.lights[i].color[1];\r\n this._lightTexture.buffer[this._lightTexture.bufferIndex(i, 1) + 2] = scene.lights[i].color[2];\r\n }\r\n\r\n // Update the light texture\r\n this._lightTexture.update();\r\n\r\n // Bind the default null framebuffer which is the screen\r\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\r\n\r\n // Render to the whole screen\r\n gl.viewport(0, 0, canvas.width, canvas.height);\r\n\r\n // Clear the frame\r\n gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);\r\n\r\n // Use this shader program\r\n gl.useProgram(this._shaderProgram.glShaderProgram);\r\n\r\n // Upload the camera matrix\r\n gl.uniformMatrix4fv(this._shaderProgram.u_viewProjectionMatrix, false, this._viewProjectionMatrix);\r\n\r\n // Set the light texture as a uniform input to the shader\r\n gl.activeTexture(gl.TEXTURE2);\r\n gl.bindTexture(gl.TEXTURE_2D, this._lightTexture.glTexture);\r\n gl.uniform1i(this._shaderProgram.u_lightbuffer, 2);\r\n\r\n // Set the cluster texture as a uniform input to the shader\r\n gl.activeTexture(gl.TEXTURE3);\r\n gl.bindTexture(gl.TEXTURE_2D, this._clusterTexture.glTexture);\r\n gl.uniform1i(this._shaderProgram.u_clusterbuffer, 3);\r\n\r\n // TODO: Bind any other shader inputs\r\n\r\n // Pass viewMatrix to convert depth into camera space\r\n gl.uniformMatrix4fv(this._shaderProgram.u_viewMatrix, false, this._viewMatrix);\r\n\r\n gl.uniform1f(this._shaderProgram.u_nearClip, camera.near);\r\n gl.uniform1f(this._shaderProgram.u_farClip, camera.far);\r\n\r\n // These are really integers, but have to convert to float in the\r\n // shader for math, so might as well make them a float here.\r\n gl.uniform1f(this._shaderProgram.u_canvasHeight, canvas.height);\r\n gl.uniform1f(this._shaderProgram.u_canvasWidth, canvas.width);\r\n gl.uniform1f(this._shaderProgram.u_xSlices, this._xSlices);\r\n gl.uniform1f(this._shaderProgram.u_ySlices, this._ySlices);\r\n gl.uniform1f(this._shaderProgram.u_zSlices, this._zSlices);\r\n\r\n var width = this._xSlices * this._ySlices * this._zSlices;\r\n var height = Math.ceil((MAX_LIGHTS_PER_CLUSTER + 1) / 4);\r\n gl.uniform1i(this._shaderProgram.u_clusterTextureWidth, width);\r\n gl.uniform1i(this._shaderProgram.u_clusterTextureHeight, height);\r\n\r\n // For Blinn-Phong\r\n gl.uniform3fv(this._shaderProgram.u_cameraPosition, camera.position);\r\n\r\n // Draw the scene. This function takes the shader program so that the model's textures can be bound to the right inputs\r\n scene.draw(this._shaderProgram);\r\n }\r\n};","export default function(params) {\r\n return `\r\n #version 100\r\n precision highp float;\r\n\r\n uniform sampler2D u_colmap;\r\n uniform sampler2D u_normap;\r\n uniform sampler2D u_lightbuffer;\r\n\r\n // Read this buffer to determine the lights influencing a cluster\r\n uniform sampler2D u_clusterbuffer;\r\n uniform int u_clusterTextureWidth;\r\n uniform int u_clusterTextureHeight;\r\n\r\n uniform float u_xSlices;\r\n uniform float u_ySlices;\r\n uniform float u_zSlices;\r\n\r\n uniform float u_nearClip;\r\n uniform float u_farClip;\r\n\r\n uniform float u_canvasWidth;\r\n uniform float u_canvasHeight;\r\n\r\n uniform mat4 u_viewMatrix;\r\n\r\n varying vec3 v_position;\r\n varying vec3 v_normal;\r\n varying vec2 v_uv;\r\n\r\n uniform vec3 u_cameraPosition;\r\n\r\n vec3 applyNormalMap(vec3 geomnor, vec3 normap) {\r\n normap = normap * 2.0 - 1.0;\r\n vec3 up = normalize(vec3(0.001, 1, 0.001));\r\n vec3 surftan = normalize(cross(geomnor, up));\r\n vec3 surfbinor = cross(geomnor, surftan);\r\n return normap.y * surftan + normap.x * surfbinor + normap.z * geomnor;\r\n }\r\n\r\n struct Light {\r\n vec3 position;\r\n float radius;\r\n vec3 color;\r\n };\r\n\r\n // For the cluster texture, the width is the number of miniFrustums (aka clusters) and height is the\r\n // number of pixels\r\n float ExtractFloat(sampler2D texture, int textureWidth, int textureHeight, int index, int component) {\r\n float u = float(index + 1) / float(textureWidth + 1);\r\n int pixel = component / 4;\r\n float v = float(pixel + 1) / float(textureHeight + 1);\r\n vec4 texel = texture2D(texture, vec2(u, v));\r\n int pixelComponent = component - pixel * 4;\r\n\r\n if (pixelComponent == 0) {\r\n return texel[0];\r\n } else if (pixelComponent == 1) {\r\n return texel[1];\r\n } else if (pixelComponent == 2) {\r\n return texel[2];\r\n } else if (pixelComponent == 3) {\r\n return texel[3];\r\n }\r\n }\r\n\r\n Light UnpackLight(int index) {\r\n Light light;\r\n float u = float(index + 1) / float(${params.numLights + 1});\r\n vec4 v1 = texture2D(u_lightbuffer, vec2(u, 0.3));\r\n vec4 v2 = texture2D(u_lightbuffer, vec2(u, 0.6));\r\n light.position = v1.xyz;\r\n\r\n // LOOK: This extracts the 4th float (radius) of the (index)th light in the buffer\r\n // Note that this is just an example implementation to extract one float.\r\n // There are more efficient ways if you need adjacent values\r\n light.radius = ExtractFloat(u_lightbuffer, ${params.numLights}, 2, index, 3);\r\n\r\n light.color = v2.rgb;\r\n return light;\r\n }\r\n\r\n // Cubic approximation of gaussian curve so we falloff to exactly 0 at the light radius\r\n float cubicGaussian(float h) {\r\n if (h < 1.0) {\r\n return 0.25 * pow(2.0 - h, 3.0) - pow(1.0 - h, 3.0);\r\n } else if (h < 2.0) {\r\n return 0.25 * pow(2.0 - h, 3.0);\r\n } else {\r\n return 0.0;\r\n }\r\n }\r\n\r\n void main() {\r\n vec3 albedo = texture2D(u_colmap, v_uv).rgb;\r\n vec3 normap = texture2D(u_normap, v_uv).xyz;\r\n vec3 normal = applyNormalMap(v_normal, normap);\r\n\r\n vec3 diffuseColor = albedo;\r\n\r\n // So the idea is to figure out which miniFrustum this fragment is inside\r\n // and then only check against the lights associated with that miniFrustum.\r\n // gl_FragCoord represents the pixel's position in screen space.\r\n // These are the same units as u_canvasWidth and u_canvasHeight,\r\n // namely raw pixels. Dividing gives percent across the screen,\r\n // which can be used in conjunction with numSlices to obtain coord.\r\n\r\n int x = int(float(gl_FragCoord.x) / u_canvasWidth * u_xSlices);\r\n int y = int(float(gl_FragCoord.y) / u_canvasHeight * u_ySlices);\r\n\r\n vec4 fragPosInCameraCoords = u_viewMatrix * vec4(v_position, 1.0);\r\n float fragDepthInCameraCoords = -1.0 * fragPosInCameraCoords.z - u_nearClip;\r\n\r\n float fullDepth = u_farClip - u_nearClip;\r\n int z = int(fragDepthInCameraCoords / fullDepth * u_zSlices);\r\n\r\n // Cannot iterate over miniFrustumNumLights because\r\n // ERROR: 0:125: 'i' : Loop index cannot be compared with non-constant expression\r\n // We're still good to iterate over all lights, since no miniFrustum can have\r\n // more than params.numLights lights.\r\n\r\n int miniFrustumIndex = x + y * int(u_xSlices) + z * int(u_xSlices) * int(u_ySlices);\r\n int miniFrustumNumLights = int(ExtractFloat(u_clusterbuffer, u_clusterTextureWidth, u_clusterTextureHeight, miniFrustumIndex, 0));\r\n\r\n vec3 fragColor = vec3(0.0);\r\n\r\n for (int i = 0; i < ${params.numLights}; ++i) {\r\n if (i > miniFrustumNumLights) {\r\n break;\r\n }\r\n\r\n int lightIndex = int(ExtractFloat(u_clusterbuffer, u_clusterTextureWidth, u_clusterTextureHeight, miniFrustumIndex, i+1));\r\n\r\n Light light = UnpackLight(lightIndex);\r\n float lightDistance = distance(light.position, v_position);\r\n vec3 L = (light.position - v_position) / lightDistance;\r\n\r\n float lightIntensity = cubicGaussian(2.0 * lightDistance / light.radius);\r\n float lambertTerm = max(dot(L, normal), 0.0);\r\n\r\n float diffuseTerm = clamp(dot(normalize(normal), normalize(L)), 0.0, 1.0);\r\n\r\n float shininessExponent = 50.0;\r\n float specularIntensity = max(pow(dot(normalize((u_cameraPosition + L) / 2.0), normal), shininessExponent), 0.0);\r\n\r\n fragColor += albedo * lambertTerm * light.color * vec3(lightIntensity) + specularIntensity;\r\n }\r\n\r\n gl_FragColor = vec4(fragColor, 1.0);\r\n }\r\n `;\r\n}\r\n","import { gl, WEBGL_draw_buffers, canvas } from '../init';\r\nimport { mat4, vec4 } from 'gl-matrix';\r\nimport { loadShaderProgram, renderFullscreenQuad } from '../utils';\r\nimport { NUM_LIGHTS } from '../scene';\r\nimport toTextureVert from '../shaders/deferredToTexture.vert.glsl';\r\nimport toTextureFrag from '../shaders/deferredToTexture.frag.glsl';\r\nimport QuadVertSource from '../shaders/quad.vert.glsl';\r\nimport fsSource from '../shaders/deferred.frag.glsl.js';\r\nimport TextureBuffer from './textureBuffer';\r\nimport { BaseRenderer, MAX_LIGHTS_PER_CLUSTER } from './base';\r\n\r\nexport const NUM_GBUFFERS = 4;\r\n\r\nexport default class ClusteredDeferredRenderer extends BaseRenderer {\r\n constructor(xSlices, ySlices, zSlices, camera) {\r\n super(xSlices, ySlices, zSlices);\r\n \r\n this.setupDrawBuffers(canvas.width, canvas.height);\r\n \r\n // Create a texture to store light data\r\n this._lightTexture = new TextureBuffer(NUM_LIGHTS, 8);\r\n \r\n this._progCopy = loadShaderProgram(toTextureVert, toTextureFrag, {\r\n uniforms: ['u_viewProjectionMatrix', 'u_colmap', 'u_normap'],\r\n attribs: ['a_position', 'a_normal', 'a_uv'],\r\n });\r\n\r\n this._progShade = loadShaderProgram(QuadVertSource, fsSource({\r\n numLights: NUM_LIGHTS,\r\n numGBuffers: NUM_GBUFFERS,\r\n }), {\r\n uniforms: [\r\n 'u_gbuffers[0]', 'u_gbuffers[1]', 'u_gbuffers[2]', 'u_gbuffers[3]', \r\n 'u_lightbuffer', 'u_clusterbuffer',\r\n 'u_xSlices', 'u_ySlices', 'u_zSlices', 'u_nearClip', 'u_farClip', 'u_viewMatrix',\r\n 'u_clusterTextureWidth', 'u_clusterTextureHeight'],\r\n attribs: ['a_uv'],\r\n });\r\n\r\n this._projectionMatrix = mat4.create();\r\n this._viewMatrix = mat4.create();\r\n this._viewProjectionMatrix = mat4.create();\r\n\r\n this.initializeMiniFrustums(camera);\r\n }\r\n\r\n setupDrawBuffers(width, height) {\r\n this._width = width;\r\n this._height = height;\r\n\r\n this._fbo = gl.createFramebuffer();\r\n \r\n //Create, bind, and store a depth target texture for the FBO\r\n this._depthTex = gl.createTexture();\r\n gl.bindTexture(gl.TEXTURE_2D, this._depthTex);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\r\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.DEPTH_COMPONENT, width, height, 0, gl.DEPTH_COMPONENT, gl.UNSIGNED_SHORT, null);\r\n gl.bindTexture(gl.TEXTURE_2D, null);\r\n\r\n gl.bindFramebuffer(gl.FRAMEBUFFER, this._fbo);\r\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.TEXTURE_2D, this._depthTex, 0);\r\n\r\n // Create, bind, and store \"color\" target textures for the FBO\r\n this._gbuffers = new Array(NUM_GBUFFERS);\r\n let attachments = new Array(NUM_GBUFFERS);\r\n for (let i = 0; i < NUM_GBUFFERS; i++) {\r\n attachments[i] = WEBGL_draw_buffers[`COLOR_ATTACHMENT${i}_WEBGL`];\r\n this._gbuffers[i] = gl.createTexture();\r\n gl.bindTexture(gl.TEXTURE_2D, this._gbuffers[i]);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\r\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.FLOAT, null);\r\n gl.bindTexture(gl.TEXTURE_2D, null);\r\n\r\n gl.framebufferTexture2D(gl.FRAMEBUFFER, attachments[i], gl.TEXTURE_2D, this._gbuffers[i], 0); \r\n }\r\n\r\n if (gl.checkFramebufferStatus(gl.FRAMEBUFFER) != gl.FRAMEBUFFER_COMPLETE) {\r\n throw \"Framebuffer incomplete\";\r\n }\r\n\r\n // Tell the WEBGL_draw_buffers extension which FBO attachments are\r\n // being used. (This extension allows for multiple render targets.)\r\n WEBGL_draw_buffers.drawBuffersWEBGL(attachments);\r\n\r\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\r\n }\r\n\r\n resize(width, height) {\r\n this._width = width;\r\n this._height = height;\r\n\r\n gl.bindTexture(gl.TEXTURE_2D, this._depthTex);\r\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.DEPTH_COMPONENT, width, height, 0, gl.DEPTH_COMPONENT, gl.UNSIGNED_SHORT, null);\r\n\r\n for (let i = 0; i < NUM_GBUFFERS; i++) {\r\n gl.bindTexture(gl.TEXTURE_2D, this._gbuffers[i]);\r\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.FLOAT, null);\r\n }\r\n\r\n gl.bindTexture(gl.TEXTURE_2D, null);\r\n }\r\n\r\n render(camera, scene) {\r\n if (canvas.width != this._width || canvas.height != this._height) {\r\n this.resize(canvas.width, canvas.height);\r\n }\r\n\r\n // Update the camera matrices\r\n camera.updateMatrixWorld();\r\n mat4.invert(this._viewMatrix, camera.matrixWorld.elements);\r\n mat4.copy(this._projectionMatrix, camera.projectionMatrix.elements);\r\n mat4.multiply(this._viewProjectionMatrix, this._projectionMatrix, this._viewMatrix);\r\n\r\n // Render to the whole screen\r\n gl.viewport(0, 0, canvas.width, canvas.height);\r\n\r\n // Bind the framebuffer\r\n gl.bindFramebuffer(gl.FRAMEBUFFER, this._fbo);\r\n\r\n // Clear the frame\r\n gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);\r\n\r\n // Use the shader program to copy to the draw buffers\r\n gl.useProgram(this._progCopy.glShaderProgram);\r\n\r\n // Upload the camera matrix\r\n gl.uniformMatrix4fv(this._progCopy.u_viewProjectionMatrix, false, this._viewProjectionMatrix);\r\n\r\n // Draw the scene. This function takes the shader program so that the model's textures can be bound to the right inputs\r\n scene.draw(this._progCopy);\r\n \r\n // Update the buffer used to populate the texture packed with light data\r\n for (let i = 0; i < NUM_LIGHTS; ++i) {\r\n this._lightTexture.buffer[this._lightTexture.bufferIndex(i, 0) + 0] = scene.lights[i].position[0];\r\n this._lightTexture.buffer[this._lightTexture.bufferIndex(i, 0) + 1] = scene.lights[i].position[1];\r\n this._lightTexture.buffer[this._lightTexture.bufferIndex(i, 0) + 2] = scene.lights[i].position[2];\r\n this._lightTexture.buffer[this._lightTexture.bufferIndex(i, 0) + 3] = scene.lights[i].radius;\r\n\r\n this._lightTexture.buffer[this._lightTexture.bufferIndex(i, 1) + 0] = scene.lights[i].color[0];\r\n this._lightTexture.buffer[this._lightTexture.bufferIndex(i, 1) + 1] = scene.lights[i].color[1];\r\n this._lightTexture.buffer[this._lightTexture.bufferIndex(i, 1) + 2] = scene.lights[i].color[2];\r\n }\r\n // Update the light texture\r\n this._lightTexture.update();\r\n\r\n // Update the clusters for the frame\r\n this.updateClustersEfficient(scene, this._viewMatrix);\r\n // this.updateClusters(camera, this._viewMatrix, scene);\r\n\r\n // Bind the default null framebuffer which is the screen\r\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\r\n\r\n // Clear the frame\r\n gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);\r\n\r\n // Use this shader program\r\n gl.useProgram(this._progShade.glShaderProgram);\r\n\r\n // TODO: Bind any other shader inputs\r\n\r\n // Bind g-buffers\r\n const firstGBufferBinding = 0; // You may have to change this if you use other texture slots\r\n for (let i = 0; i < NUM_GBUFFERS; i++) {\r\n gl.activeTexture(gl[`TEXTURE${i + firstGBufferBinding}`]);\r\n gl.bindTexture(gl.TEXTURE_2D, this._gbuffers[i]);\r\n gl.uniform1i(this._progShade[`u_gbuffers[${i}]`], i + firstGBufferBinding);\r\n }\r\n\r\n // Set the light texture as a uniform input to the shader\r\n gl.activeTexture(gl[`TEXTURE${NUM_GBUFFERS}`]);\r\n gl.bindTexture(gl.TEXTURE_2D, this._lightTexture.glTexture);\r\n gl.uniform1i(this._progShade.u_lightbuffer, NUM_GBUFFERS);\r\n\r\n // Set the cluster texture as a uniform input to the shader\r\n gl.activeTexture(gl[`TEXTURE${NUM_GBUFFERS+1}`]);\r\n gl.bindTexture(gl.TEXTURE_2D, this._clusterTexture.glTexture);\r\n gl.uniform1i(this._progShade.u_clusterbuffer, NUM_GBUFFERS+1);\r\n\r\n \r\n // Pass viewMatrix to convert depth into camera space\r\n gl.uniformMatrix4fv(this._progShade.u_viewMatrix, false, this._viewMatrix);\r\n\r\n gl.uniform1f(this._progShade.u_nearClip, camera.near);\r\n gl.uniform1f(this._progShade.u_farClip, camera.far);\r\n\r\n // These are really integers, but have to convert to float in the\r\n // shader for math, so might as well make them a float here.\r\n gl.uniform1f(this._progShade.u_canvasHeight, canvas.height);\r\n gl.uniform1f(this._progShade.u_canvasWidth, canvas.width);\r\n gl.uniform1f(this._progShade.u_xSlices, this._xSlices);\r\n gl.uniform1f(this._progShade.u_ySlices, this._ySlices);\r\n gl.uniform1f(this._progShade.u_zSlices, this._zSlices);\r\n\r\n var width = this._xSlices * this._ySlices * this._zSlices;\r\n var height = Math.ceil((MAX_LIGHTS_PER_CLUSTER + 1) / 4);\r\n gl.uniform1i(this._progShade.u_clusterTextureWidth, width);\r\n gl.uniform1i(this._progShade.u_clusterTextureHeight, height);\r\n\r\n renderFullscreenQuad(this._progShade);\r\n }\r\n};\r\n","export default function(params) {\r\n return `\r\n #version 100\r\n precision highp float;\r\n\r\n uniform sampler2D u_gbuffers[${params.numGBuffers}];\r\n\r\n varying vec2 v_uv;\r\n\r\n uniform sampler2D u_lightbuffer;\r\n uniform sampler2D u_clusterbuffer;\r\n\r\n uniform int u_clusterTextureWidth;\r\n uniform int u_clusterTextureHeight;\r\n\r\n uniform float u_xSlices;\r\n uniform float u_ySlices;\r\n uniform float u_zSlices;\r\n\r\n uniform float u_nearClip;\r\n uniform float u_farClip;\r\n\r\n uniform float u_canvasWidth;\r\n uniform float u_canvasHeight;\r\n\r\n uniform mat4 u_viewMatrix;\r\n\r\n vec3 applyNormalMap(vec3 geomnor, vec3 normap) {\r\n normap = normap * 2.0 - 1.0;\r\n vec3 up = normalize(vec3(0.001, 1, 0.001));\r\n vec3 surftan = normalize(cross(geomnor, up));\r\n vec3 surfbinor = cross(geomnor, surftan);\r\n return normap.y * surftan + normap.x * surfbinor + normap.z * geomnor;\r\n }\r\n\r\n struct Light {\r\n vec3 position;\r\n float radius;\r\n vec3 color;\r\n };\r\n\r\n // For the cluster texture, the width is the number of miniFrustums (aka clusters) and height is the\r\n // number of pixels\r\n float ExtractFloat(sampler2D texture, int textureWidth, int textureHeight, int index, int component) {\r\n float u = float(index + 1) / float(textureWidth + 1);\r\n int pixel = component / 4;\r\n float v = float(pixel + 1) / float(textureHeight + 1);\r\n vec4 texel = texture2D(texture, vec2(u, v));\r\n int pixelComponent = component - pixel * 4;\r\n\r\n if (pixelComponent == 0) {\r\n return texel[0];\r\n } else if (pixelComponent == 1) {\r\n return texel[1];\r\n } else if (pixelComponent == 2) {\r\n return texel[2];\r\n } else if (pixelComponent == 3) {\r\n return texel[3];\r\n }\r\n }\r\n\r\n Light UnpackLight(int index) {\r\n Light light;\r\n float u = float(index + 1) / float(${params.numLights + 1});\r\n vec4 v1 = texture2D(u_lightbuffer, vec2(u, 0.3));\r\n vec4 v2 = texture2D(u_lightbuffer, vec2(u, 0.6));\r\n light.position = v1.xyz;\r\n\r\n // LOOK: This extracts the 4th float (radius) of the (index)th light in the buffer\r\n // Note that this is just an example implementation to extract one float.\r\n // There are more efficient ways if you need adjacent values\r\n light.radius = ExtractFloat(u_lightbuffer, ${params.numLights}, 2, index, 3);\r\n\r\n light.color = v2.rgb;\r\n return light;\r\n }\r\n\r\n // Cubic approximation of gaussian curve so we falloff to exactly 0 at the light radius\r\n float cubicGaussian(float h) {\r\n if (h < 1.0) {\r\n return 0.25 * pow(2.0 - h, 3.0) - pow(1.0 - h, 3.0);\r\n } else if (h < 2.0) {\r\n return 0.25 * pow(2.0 - h, 3.0);\r\n } else {\r\n return 0.0;\r\n }\r\n }\r\n\r\n void main() {\r\n // TODO: extract data from g buffers and do lighting\r\n\r\n // pos\r\n vec4 gb0 = texture2D(u_gbuffers[0], v_uv);\r\n\r\n // col\r\n vec4 gb1 = texture2D(u_gbuffers[1], v_uv);\r\n\r\n // norm\r\n vec4 gb2 = texture2D(u_gbuffers[2], v_uv);\r\n\r\n // unused\r\n vec4 gb3 = texture2D(u_gbuffers[3], v_uv);\r\n\r\n vec3 v_position = gb0.xyz;\r\n vec3 albedo = gb1.rgb;\r\n vec3 normal = gb2.xyz;\r\n\r\n vec3 fragColor = vec3(0.0);\r\n\r\n // So the idea is to figure out which miniFrustum this fragment is inside\r\n // and then only check against the lights associated with that miniFrustum\r\n // Obtain pixel's camera space position\r\n \r\n // gl_FragCoord represents the pixel's position in screen space\r\n // These are the same units as u_canvasWidth and u_canvasHeight,\r\n // namely raw pixels. Dividing gives percent across the screen,\r\n // which can be used in conjunction with numSlices to obtain coord.\r\n\r\n int x = int(float(gl_FragCoord.x) / u_canvasWidth * u_xSlices);\r\n int y = int(float(gl_FragCoord.y) / u_canvasHeight * u_ySlices);\r\n\r\n vec4 fragPosInCameraCoords = u_viewMatrix * vec4(v_position, 1.0);\r\n float fullDepth = u_farClip - u_nearClip;\r\n float fragDepthInCameraCoords = fragPosInCameraCoords.z - u_nearClip;\r\n int z = int(fragDepthInCameraCoords / fullDepth * u_zSlices);\r\n\r\n int miniFrustumIndex = x + y * int(u_xSlices) + z * int(u_xSlices) * int(u_ySlices);\r\n\r\n // Cannot iterate over miniFrustumNumLights because\r\n // ERROR: 0:125: 'i' : Loop index cannot be compared with non-constant expression\r\n // We're still good to iterate over all lights, since no miniFrustum can have\r\n // more than params.numLights lights.\r\n\r\n // ExtractFloat(sampler2D texture, int textureWidth, int textureHeight, int index, int component)\r\n int miniFrustumNumLights = int(ExtractFloat(u_clusterbuffer, u_clusterTextureWidth, u_clusterTextureHeight, miniFrustumIndex, 0));\r\n\r\n for (int i = 0; i < ${params.numLights}; ++i) {\r\n if (i > miniFrustumNumLights) {\r\n break;\r\n }\r\n\r\n int lightIndex = int(ExtractFloat(u_clusterbuffer, u_clusterTextureWidth, u_clusterTextureHeight, miniFrustumIndex, i+1));\r\n\r\n Light light = UnpackLight(lightIndex);\r\n float lightDistance = distance(light.position, v_position);\r\n vec3 L = (light.position - v_position) / lightDistance;\r\n\r\n float lightIntensity = cubicGaussian(2.0 * lightDistance / light.radius);\r\n float lambertTerm = max(dot(L, normal), 0.0);\r\n\r\n fragColor += albedo * lambertTerm * light.color * vec3(lightIntensity);\r\n }\r\n\r\n const vec3 ambientLight = vec3(0.025);\r\n fragColor += albedo * ambientLight;\r\n\r\n gl_FragColor = vec4(fragColor, 1.0);\r\n }\r\n `;\r\n}\r\n","import { gl } from './init';\r\nimport { mat4 } from 'gl-matrix';\r\nimport { loadShaderProgram } from './utils';\r\nimport vsSource from './shaders/wireframe.vert.glsl';\r\nimport fsSource from './shaders/wireframe.frag.glsl';\r\n\r\n// LOOK: use the Wireframe class to draw arbitrary lines in your scene.\r\n// This can be helpful for visual debugging.\r\nexport default class Wireframe {\r\n constructor() {\r\n // Initialize a shader program.\r\n this._shaderProgram = loadShaderProgram(vsSource, fsSource, {\r\n uniforms: ['u_viewProjectionMatrix'],\r\n attribs: ['a_position', 'a_color'],\r\n });\r\n\r\n this._projectionMatrix = mat4.create();\r\n this._viewMatrix = mat4.create();\r\n this._viewProjectionMatrix = mat4.create();\r\n\r\n this._attributesNeedUpdate = false;\r\n this._positions = [];\r\n this._colors = [];\r\n this._vertexAttributes;\r\n }\r\n\r\n addLineSegment(startPosition, endPosition, color) {\r\n this._positions.push(startPosition.slice()); // copy the input arrays\r\n this._positions.push(endPosition.slice());\r\n this._colors.push(color.slice());\r\n this._colors.push(color.slice());\r\n this._attributesNeedUpdate = true;\r\n }\r\n\r\n _updateVertexData() {\r\n var flatVertices = [];\r\n for (var i = 0; i < this._positions.length; i++) {\r\n flatVertices.push(this._positions[i][0]);\r\n flatVertices.push(this._positions[i][1]);\r\n flatVertices.push(this._positions[i][2]);\r\n\r\n flatVertices.push(this._colors[i][0]);\r\n flatVertices.push(this._colors[i][1]);\r\n flatVertices.push(this._colors[i][2]);\r\n }\r\n\r\n var vertexAttributes = gl.createBuffer();\r\n gl.bindBuffer(gl.ARRAY_BUFFER, vertexAttributes);\r\n gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(flatVertices), gl.STATIC_DRAW);\r\n\r\n this._vertexAttributes = vertexAttributes;\r\n this._attributesNeedUpdate = false;\r\n }\r\n\r\n render(camera) {\r\n if (this._positions.length === 0) {\r\n return; // don't bother with all the GL calls\r\n }\r\n\r\n if (this._attributesNeedUpdate) {\r\n this._updateVertexData();\r\n }\r\n\r\n // Update the camera matrices\r\n camera.updateMatrixWorld();\r\n mat4.invert(this._viewMatrix, camera.matrixWorld.elements);\r\n mat4.copy(this._projectionMatrix, camera.projectionMatrix.elements);\r\n mat4.multiply(this._viewProjectionMatrix, this._projectionMatrix, this._viewMatrix); \r\n\r\n // Bind the default null framebuffer which is the screen\r\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\r\n\r\n // Render to the whole screen\r\n gl.viewport(0, 0, canvas.width, canvas.height);\r\n\r\n // DON'T Clear the frame - we want to draw the wireframe on the scene.\r\n //gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);\r\n\r\n // Use this shader program\r\n gl.useProgram(this._shaderProgram.glShaderProgram);\r\n\r\n // Upload the camera matrix\r\n gl.uniformMatrix4fv(this._shaderProgram.u_viewProjectionMatrix, false, this._viewProjectionMatrix);\r\n\r\n // set up vertex attributes\r\n gl.bindBuffer(gl.ARRAY_BUFFER, this._vertexAttributes);\r\n gl.enableVertexAttribArray(this._shaderProgram.a_position);\r\n gl.enableVertexAttribArray(this._shaderProgram.a_color);\r\n\r\n // https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/vertexAttribPointer\r\n gl.vertexAttribPointer(\r\n this._shaderProgram.a_position, \r\n 3, // number of components\r\n gl.FLOAT, // data type of each component\r\n false, // normalized?\r\n 3 * 2 * 4, // byte stride of each position - 6 floats, 4 bytes each\r\n 0 // byte offset\r\n );\r\n\r\n gl.vertexAttribPointer(\r\n this._shaderProgram.a_color, \r\n 3, // number of components\r\n gl.FLOAT, // data type of each component\r\n false, // normalized?\r\n 3 * 2 * 4, // byte stride of each position - 6 floats, 4 bytes each\r\n 3 * 4 // byte offset - colors and positions are interleaved\r\n );\r\n\r\n // Drawing without indices\r\n // https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/drawArrays\r\n gl.drawArrays(gl.LINES, 0, this._positions.length);\r\n }\r\n}\r\n","import { makeRenderLoop, camera, cameraControls, gui, gl } from './init';\r\nimport ForwardRenderer from './renderers/forward';\r\nimport ForwardPlusRenderer from './renderers/forwardPlus';\r\nimport ClusteredDeferredRenderer from './renderers/clusteredDeferred';\r\nimport Scene from './scene';\r\nimport Wireframe from './wireframe';\r\nimport { vec3 } from 'gl-matrix';\r\n\r\nconst FORWARD = 'Forward';\r\nconst FORWARD_PLUS = 'Forward+';\r\nconst CLUSTERED = 'Clustered Deferred';\r\n\r\nconst params = {\r\n renderer: FORWARD_PLUS,\r\n _renderer: null,\r\n};\r\n\r\nsetRenderer(params.renderer);\r\n\r\nfunction setRenderer(renderer) {\r\n switch(renderer) {\r\n case FORWARD:\r\n params._renderer = new ForwardRenderer();\r\n break;\r\n case FORWARD_PLUS:\r\n params._renderer = new ForwardPlusRenderer(15, 15, 15, camera);\r\n break;\r\n case CLUSTERED:\r\n params._renderer = new ClusteredDeferredRenderer(15, 15, 15, camera);\r\n break;\r\n }\r\n}\r\n\r\ngui.add(params, 'renderer', [FORWARD, FORWARD_PLUS, CLUSTERED]).onChange(setRenderer);\r\n\r\nconst scene = new Scene();\r\nscene.loadGLTF('models/sponza/sponza.gltf');\r\n\r\n// LOOK: The Wireframe class is for debugging.\r\n// It lets you draw arbitrary lines in the scene.\r\n// This may be helpful for visualizing your frustum clusters so you can make\r\n// sure that they are in the right place.\r\nconst wireframe = new Wireframe();\r\n\r\nvar segmentStart = [-14.0, 0.0, -6.0];\r\nvar segmentEnd = [14.0, 20.0, 6.0];\r\nvar segmentColor = [1.0, 0.0, 0.0];\r\n// wireframe.addLineSegment(segmentStart, segmentEnd, segmentColor);\r\n// wireframe.addLineSegment([-14.0, 1.0, -6.0], [14.0, 21.0, 6.0], [0.0, 1.0, 0.0]);\r\n\r\ncamera.position.set(-10, 8, 0);\r\ncameraControls.target.set(0, 2, 0);\r\ngl.enable(gl.DEPTH_TEST);\r\n\r\nfunction render() {\r\n scene.update(); \r\n params._renderer.render(camera, scene, wireframe);\r\n\r\n // LOOK: Render wireframe \"in front\" of everything else.\r\n // If you would like the wireframe to render behind and in front\r\n // of objects based on relative depths in the scene, comment out /\r\n //the gl.disable(gl.DEPTH_TEST) and gl.enable(gl.DEPTH_TEST) lines.\r\n gl.disable(gl.DEPTH_TEST);\r\n wireframe.render(camera);\r\n gl.enable(gl.DEPTH_TEST);\r\n}\r\n\r\nmakeRenderLoop(render)();","/**\n * Common utilities\n * @module glMatrix\n */\n// Configuration Constants\nexport var EPSILON = 0.000001;\nexport var ARRAY_TYPE = typeof Float32Array !== 'undefined' ? Float32Array : Array;\nexport var RANDOM = Math.random;\n/**\n * Sets the type of array used when creating new vectors and matrices\n *\n * @param {Float32ArrayConstructor | ArrayConstructor} type Array type, such as Float32Array or Array\n */\n\nexport function setMatrixArrayType(type) {\n ARRAY_TYPE = type;\n}\nvar degree = Math.PI / 180;\n/**\n * Convert Degree To Radian\n *\n * @param {Number} a Angle in Degrees\n */\n\nexport function toRadian(a) {\n return a * degree;\n}\n/**\n * Tests whether or not the arguments have approximately the same value, within an absolute\n * or relative tolerance of glMatrix.EPSILON (an absolute tolerance is used for values less\n * than or equal to 1.0, and a relative tolerance is used for larger values)\n *\n * @param {Number} a The first number to test.\n * @param {Number} b The second number to test.\n * @returns {Boolean} True if the numbers are approximately equal, false otherwise.\n */\n\nexport function equals(a, b) {\n return Math.abs(a - b) <= EPSILON * Math.max(1.0, Math.abs(a), Math.abs(b));\n}\nif (!Math.hypot) Math.hypot = function () {\n var y = 0,\n i = arguments.length;\n\n while (i--) {\n y += arguments[i] * arguments[i];\n }\n\n return Math.sqrt(y);\n};","import * as glMatrix from \"./common.js\";\n/**\n * 4x4 Matrix
                      Format: column-major, when typed out it looks like row-major
                      The matrices are being post multiplied.\n * @module mat4\n */\n\n/**\n * Creates a new identity mat4\n *\n * @returns {mat4} a new 4x4 matrix\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(16);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n }\n\n out[0] = 1;\n out[5] = 1;\n out[10] = 1;\n out[15] = 1;\n return out;\n}\n/**\n * Creates a new mat4 initialized with values from an existing matrix\n *\n * @param {ReadonlyMat4} a matrix to clone\n * @returns {mat4} a new 4x4 matrix\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(16);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n/**\n * Copy the values from one mat4 to another\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the source matrix\n * @returns {mat4} out\n */\n\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n/**\n * Create a new mat4 with the given values\n *\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\n * @param {Number} m03 Component in column 0, row 3 position (index 3)\n * @param {Number} m10 Component in column 1, row 0 position (index 4)\n * @param {Number} m11 Component in column 1, row 1 position (index 5)\n * @param {Number} m12 Component in column 1, row 2 position (index 6)\n * @param {Number} m13 Component in column 1, row 3 position (index 7)\n * @param {Number} m20 Component in column 2, row 0 position (index 8)\n * @param {Number} m21 Component in column 2, row 1 position (index 9)\n * @param {Number} m22 Component in column 2, row 2 position (index 10)\n * @param {Number} m23 Component in column 2, row 3 position (index 11)\n * @param {Number} m30 Component in column 3, row 0 position (index 12)\n * @param {Number} m31 Component in column 3, row 1 position (index 13)\n * @param {Number} m32 Component in column 3, row 2 position (index 14)\n * @param {Number} m33 Component in column 3, row 3 position (index 15)\n * @returns {mat4} A new mat4\n */\n\nexport function fromValues(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {\n var out = new glMatrix.ARRAY_TYPE(16);\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m03;\n out[4] = m10;\n out[5] = m11;\n out[6] = m12;\n out[7] = m13;\n out[8] = m20;\n out[9] = m21;\n out[10] = m22;\n out[11] = m23;\n out[12] = m30;\n out[13] = m31;\n out[14] = m32;\n out[15] = m33;\n return out;\n}\n/**\n * Set the components of a mat4 to the given values\n *\n * @param {mat4} out the receiving matrix\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\n * @param {Number} m03 Component in column 0, row 3 position (index 3)\n * @param {Number} m10 Component in column 1, row 0 position (index 4)\n * @param {Number} m11 Component in column 1, row 1 position (index 5)\n * @param {Number} m12 Component in column 1, row 2 position (index 6)\n * @param {Number} m13 Component in column 1, row 3 position (index 7)\n * @param {Number} m20 Component in column 2, row 0 position (index 8)\n * @param {Number} m21 Component in column 2, row 1 position (index 9)\n * @param {Number} m22 Component in column 2, row 2 position (index 10)\n * @param {Number} m23 Component in column 2, row 3 position (index 11)\n * @param {Number} m30 Component in column 3, row 0 position (index 12)\n * @param {Number} m31 Component in column 3, row 1 position (index 13)\n * @param {Number} m32 Component in column 3, row 2 position (index 14)\n * @param {Number} m33 Component in column 3, row 3 position (index 15)\n * @returns {mat4} out\n */\n\nexport function set(out, m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m03;\n out[4] = m10;\n out[5] = m11;\n out[6] = m12;\n out[7] = m13;\n out[8] = m20;\n out[9] = m21;\n out[10] = m22;\n out[11] = m23;\n out[12] = m30;\n out[13] = m31;\n out[14] = m32;\n out[15] = m33;\n return out;\n}\n/**\n * Set a mat4 to the identity matrix\n *\n * @param {mat4} out the receiving matrix\n * @returns {mat4} out\n */\n\nexport function identity(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Transpose the values of a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the source matrix\n * @returns {mat4} out\n */\n\nexport function transpose(out, a) {\n // If we are transposing ourselves we can skip a few steps but have to cache some values\n if (out === a) {\n var a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a12 = a[6],\n a13 = a[7];\n var a23 = a[11];\n out[1] = a[4];\n out[2] = a[8];\n out[3] = a[12];\n out[4] = a01;\n out[6] = a[9];\n out[7] = a[13];\n out[8] = a02;\n out[9] = a12;\n out[11] = a[14];\n out[12] = a03;\n out[13] = a13;\n out[14] = a23;\n } else {\n out[0] = a[0];\n out[1] = a[4];\n out[2] = a[8];\n out[3] = a[12];\n out[4] = a[1];\n out[5] = a[5];\n out[6] = a[9];\n out[7] = a[13];\n out[8] = a[2];\n out[9] = a[6];\n out[10] = a[10];\n out[11] = a[14];\n out[12] = a[3];\n out[13] = a[7];\n out[14] = a[11];\n out[15] = a[15];\n }\n\n return out;\n}\n/**\n * Inverts a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the source matrix\n * @returns {mat4} out\n */\n\nexport function invert(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n var b00 = a00 * a11 - a01 * a10;\n var b01 = a00 * a12 - a02 * a10;\n var b02 = a00 * a13 - a03 * a10;\n var b03 = a01 * a12 - a02 * a11;\n var b04 = a01 * a13 - a03 * a11;\n var b05 = a02 * a13 - a03 * a12;\n var b06 = a20 * a31 - a21 * a30;\n var b07 = a20 * a32 - a22 * a30;\n var b08 = a20 * a33 - a23 * a30;\n var b09 = a21 * a32 - a22 * a31;\n var b10 = a21 * a33 - a23 * a31;\n var b11 = a22 * a33 - a23 * a32; // Calculate the determinant\n\n var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n if (!det) {\n return null;\n }\n\n det = 1.0 / det;\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;\n out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;\n out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;\n out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;\n out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;\n out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;\n out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;\n return out;\n}\n/**\n * Calculates the adjugate of a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the source matrix\n * @returns {mat4} out\n */\n\nexport function adjoint(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n out[0] = a11 * (a22 * a33 - a23 * a32) - a21 * (a12 * a33 - a13 * a32) + a31 * (a12 * a23 - a13 * a22);\n out[1] = -(a01 * (a22 * a33 - a23 * a32) - a21 * (a02 * a33 - a03 * a32) + a31 * (a02 * a23 - a03 * a22));\n out[2] = a01 * (a12 * a33 - a13 * a32) - a11 * (a02 * a33 - a03 * a32) + a31 * (a02 * a13 - a03 * a12);\n out[3] = -(a01 * (a12 * a23 - a13 * a22) - a11 * (a02 * a23 - a03 * a22) + a21 * (a02 * a13 - a03 * a12));\n out[4] = -(a10 * (a22 * a33 - a23 * a32) - a20 * (a12 * a33 - a13 * a32) + a30 * (a12 * a23 - a13 * a22));\n out[5] = a00 * (a22 * a33 - a23 * a32) - a20 * (a02 * a33 - a03 * a32) + a30 * (a02 * a23 - a03 * a22);\n out[6] = -(a00 * (a12 * a33 - a13 * a32) - a10 * (a02 * a33 - a03 * a32) + a30 * (a02 * a13 - a03 * a12));\n out[7] = a00 * (a12 * a23 - a13 * a22) - a10 * (a02 * a23 - a03 * a22) + a20 * (a02 * a13 - a03 * a12);\n out[8] = a10 * (a21 * a33 - a23 * a31) - a20 * (a11 * a33 - a13 * a31) + a30 * (a11 * a23 - a13 * a21);\n out[9] = -(a00 * (a21 * a33 - a23 * a31) - a20 * (a01 * a33 - a03 * a31) + a30 * (a01 * a23 - a03 * a21));\n out[10] = a00 * (a11 * a33 - a13 * a31) - a10 * (a01 * a33 - a03 * a31) + a30 * (a01 * a13 - a03 * a11);\n out[11] = -(a00 * (a11 * a23 - a13 * a21) - a10 * (a01 * a23 - a03 * a21) + a20 * (a01 * a13 - a03 * a11));\n out[12] = -(a10 * (a21 * a32 - a22 * a31) - a20 * (a11 * a32 - a12 * a31) + a30 * (a11 * a22 - a12 * a21));\n out[13] = a00 * (a21 * a32 - a22 * a31) - a20 * (a01 * a32 - a02 * a31) + a30 * (a01 * a22 - a02 * a21);\n out[14] = -(a00 * (a11 * a32 - a12 * a31) - a10 * (a01 * a32 - a02 * a31) + a30 * (a01 * a12 - a02 * a11));\n out[15] = a00 * (a11 * a22 - a12 * a21) - a10 * (a01 * a22 - a02 * a21) + a20 * (a01 * a12 - a02 * a11);\n return out;\n}\n/**\n * Calculates the determinant of a mat4\n *\n * @param {ReadonlyMat4} a the source matrix\n * @returns {Number} determinant of a\n */\n\nexport function determinant(a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n var b00 = a00 * a11 - a01 * a10;\n var b01 = a00 * a12 - a02 * a10;\n var b02 = a00 * a13 - a03 * a10;\n var b03 = a01 * a12 - a02 * a11;\n var b04 = a01 * a13 - a03 * a11;\n var b05 = a02 * a13 - a03 * a12;\n var b06 = a20 * a31 - a21 * a30;\n var b07 = a20 * a32 - a22 * a30;\n var b08 = a20 * a33 - a23 * a30;\n var b09 = a21 * a32 - a22 * a31;\n var b10 = a21 * a33 - a23 * a31;\n var b11 = a22 * a33 - a23 * a32; // Calculate the determinant\n\n return b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n}\n/**\n * Multiplies two mat4s\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @returns {mat4} out\n */\n\nexport function multiply(out, a, b) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15]; // Cache only the current line of the second matrix\n\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3];\n out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[4];\n b1 = b[5];\n b2 = b[6];\n b3 = b[7];\n out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[8];\n b1 = b[9];\n b2 = b[10];\n b3 = b[11];\n out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[12];\n b1 = b[13];\n b2 = b[14];\n b3 = b[15];\n out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n return out;\n}\n/**\n * Translate a mat4 by the given vector\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to translate\n * @param {ReadonlyVec3} v vector to translate by\n * @returns {mat4} out\n */\n\nexport function translate(out, a, v) {\n var x = v[0],\n y = v[1],\n z = v[2];\n var a00, a01, a02, a03;\n var a10, a11, a12, a13;\n var a20, a21, a22, a23;\n\n if (a === out) {\n out[12] = a[0] * x + a[4] * y + a[8] * z + a[12];\n out[13] = a[1] * x + a[5] * y + a[9] * z + a[13];\n out[14] = a[2] * x + a[6] * y + a[10] * z + a[14];\n out[15] = a[3] * x + a[7] * y + a[11] * z + a[15];\n } else {\n a00 = a[0];\n a01 = a[1];\n a02 = a[2];\n a03 = a[3];\n a10 = a[4];\n a11 = a[5];\n a12 = a[6];\n a13 = a[7];\n a20 = a[8];\n a21 = a[9];\n a22 = a[10];\n a23 = a[11];\n out[0] = a00;\n out[1] = a01;\n out[2] = a02;\n out[3] = a03;\n out[4] = a10;\n out[5] = a11;\n out[6] = a12;\n out[7] = a13;\n out[8] = a20;\n out[9] = a21;\n out[10] = a22;\n out[11] = a23;\n out[12] = a00 * x + a10 * y + a20 * z + a[12];\n out[13] = a01 * x + a11 * y + a21 * z + a[13];\n out[14] = a02 * x + a12 * y + a22 * z + a[14];\n out[15] = a03 * x + a13 * y + a23 * z + a[15];\n }\n\n return out;\n}\n/**\n * Scales the mat4 by the dimensions in the given vec3 not using vectorization\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to scale\n * @param {ReadonlyVec3} v the vec3 to scale the matrix by\n * @returns {mat4} out\n **/\n\nexport function scale(out, a, v) {\n var x = v[0],\n y = v[1],\n z = v[2];\n out[0] = a[0] * x;\n out[1] = a[1] * x;\n out[2] = a[2] * x;\n out[3] = a[3] * x;\n out[4] = a[4] * y;\n out[5] = a[5] * y;\n out[6] = a[6] * y;\n out[7] = a[7] * y;\n out[8] = a[8] * z;\n out[9] = a[9] * z;\n out[10] = a[10] * z;\n out[11] = a[11] * z;\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n/**\n * Rotates a mat4 by the given angle around the given axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @param {ReadonlyVec3} axis the axis to rotate around\n * @returns {mat4} out\n */\n\nexport function rotate(out, a, rad, axis) {\n var x = axis[0],\n y = axis[1],\n z = axis[2];\n var len = Math.hypot(x, y, z);\n var s, c, t;\n var a00, a01, a02, a03;\n var a10, a11, a12, a13;\n var a20, a21, a22, a23;\n var b00, b01, b02;\n var b10, b11, b12;\n var b20, b21, b22;\n\n if (len < glMatrix.EPSILON) {\n return null;\n }\n\n len = 1 / len;\n x *= len;\n y *= len;\n z *= len;\n s = Math.sin(rad);\n c = Math.cos(rad);\n t = 1 - c;\n a00 = a[0];\n a01 = a[1];\n a02 = a[2];\n a03 = a[3];\n a10 = a[4];\n a11 = a[5];\n a12 = a[6];\n a13 = a[7];\n a20 = a[8];\n a21 = a[9];\n a22 = a[10];\n a23 = a[11]; // Construct the elements of the rotation matrix\n\n b00 = x * x * t + c;\n b01 = y * x * t + z * s;\n b02 = z * x * t - y * s;\n b10 = x * y * t - z * s;\n b11 = y * y * t + c;\n b12 = z * y * t + x * s;\n b20 = x * z * t + y * s;\n b21 = y * z * t - x * s;\n b22 = z * z * t + c; // Perform rotation-specific matrix multiplication\n\n out[0] = a00 * b00 + a10 * b01 + a20 * b02;\n out[1] = a01 * b00 + a11 * b01 + a21 * b02;\n out[2] = a02 * b00 + a12 * b01 + a22 * b02;\n out[3] = a03 * b00 + a13 * b01 + a23 * b02;\n out[4] = a00 * b10 + a10 * b11 + a20 * b12;\n out[5] = a01 * b10 + a11 * b11 + a21 * b12;\n out[6] = a02 * b10 + a12 * b11 + a22 * b12;\n out[7] = a03 * b10 + a13 * b11 + a23 * b12;\n out[8] = a00 * b20 + a10 * b21 + a20 * b22;\n out[9] = a01 * b20 + a11 * b21 + a21 * b22;\n out[10] = a02 * b20 + a12 * b21 + a22 * b22;\n out[11] = a03 * b20 + a13 * b21 + a23 * b22;\n\n if (a !== out) {\n // If the source and destination differ, copy the unchanged last row\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n\n return out;\n}\n/**\n * Rotates a matrix by the given angle around the X axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\n\nexport function rotateX(out, a, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n var a10 = a[4];\n var a11 = a[5];\n var a12 = a[6];\n var a13 = a[7];\n var a20 = a[8];\n var a21 = a[9];\n var a22 = a[10];\n var a23 = a[11];\n\n if (a !== out) {\n // If the source and destination differ, copy the unchanged rows\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n } // Perform axis-specific matrix multiplication\n\n\n out[4] = a10 * c + a20 * s;\n out[5] = a11 * c + a21 * s;\n out[6] = a12 * c + a22 * s;\n out[7] = a13 * c + a23 * s;\n out[8] = a20 * c - a10 * s;\n out[9] = a21 * c - a11 * s;\n out[10] = a22 * c - a12 * s;\n out[11] = a23 * c - a13 * s;\n return out;\n}\n/**\n * Rotates a matrix by the given angle around the Y axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\n\nexport function rotateY(out, a, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n var a00 = a[0];\n var a01 = a[1];\n var a02 = a[2];\n var a03 = a[3];\n var a20 = a[8];\n var a21 = a[9];\n var a22 = a[10];\n var a23 = a[11];\n\n if (a !== out) {\n // If the source and destination differ, copy the unchanged rows\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n } // Perform axis-specific matrix multiplication\n\n\n out[0] = a00 * c - a20 * s;\n out[1] = a01 * c - a21 * s;\n out[2] = a02 * c - a22 * s;\n out[3] = a03 * c - a23 * s;\n out[8] = a00 * s + a20 * c;\n out[9] = a01 * s + a21 * c;\n out[10] = a02 * s + a22 * c;\n out[11] = a03 * s + a23 * c;\n return out;\n}\n/**\n * Rotates a matrix by the given angle around the Z axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\n\nexport function rotateZ(out, a, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n var a00 = a[0];\n var a01 = a[1];\n var a02 = a[2];\n var a03 = a[3];\n var a10 = a[4];\n var a11 = a[5];\n var a12 = a[6];\n var a13 = a[7];\n\n if (a !== out) {\n // If the source and destination differ, copy the unchanged last row\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n } // Perform axis-specific matrix multiplication\n\n\n out[0] = a00 * c + a10 * s;\n out[1] = a01 * c + a11 * s;\n out[2] = a02 * c + a12 * s;\n out[3] = a03 * c + a13 * s;\n out[4] = a10 * c - a00 * s;\n out[5] = a11 * c - a01 * s;\n out[6] = a12 * c - a02 * s;\n out[7] = a13 * c - a03 * s;\n return out;\n}\n/**\n * Creates a matrix from a vector translation\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, dest, vec);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {ReadonlyVec3} v Translation vector\n * @returns {mat4} out\n */\n\nexport function fromTranslation(out, v) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from a vector scaling\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.scale(dest, dest, vec);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {ReadonlyVec3} v Scaling vector\n * @returns {mat4} out\n */\n\nexport function fromScaling(out, v) {\n out[0] = v[0];\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = v[1];\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = v[2];\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from a given angle around a given axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotate(dest, dest, rad, axis);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @param {ReadonlyVec3} axis the axis to rotate around\n * @returns {mat4} out\n */\n\nexport function fromRotation(out, rad, axis) {\n var x = axis[0],\n y = axis[1],\n z = axis[2];\n var len = Math.hypot(x, y, z);\n var s, c, t;\n\n if (len < glMatrix.EPSILON) {\n return null;\n }\n\n len = 1 / len;\n x *= len;\n y *= len;\n z *= len;\n s = Math.sin(rad);\n c = Math.cos(rad);\n t = 1 - c; // Perform rotation-specific matrix multiplication\n\n out[0] = x * x * t + c;\n out[1] = y * x * t + z * s;\n out[2] = z * x * t - y * s;\n out[3] = 0;\n out[4] = x * y * t - z * s;\n out[5] = y * y * t + c;\n out[6] = z * y * t + x * s;\n out[7] = 0;\n out[8] = x * z * t + y * s;\n out[9] = y * z * t - x * s;\n out[10] = z * z * t + c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from the given angle around the X axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotateX(dest, dest, rad);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\n\nexport function fromXRotation(out, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad); // Perform axis-specific matrix multiplication\n\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = c;\n out[6] = s;\n out[7] = 0;\n out[8] = 0;\n out[9] = -s;\n out[10] = c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from the given angle around the Y axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotateY(dest, dest, rad);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\n\nexport function fromYRotation(out, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad); // Perform axis-specific matrix multiplication\n\n out[0] = c;\n out[1] = 0;\n out[2] = -s;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = s;\n out[9] = 0;\n out[10] = c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from the given angle around the Z axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotateZ(dest, dest, rad);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\n\nexport function fromZRotation(out, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad); // Perform axis-specific matrix multiplication\n\n out[0] = c;\n out[1] = s;\n out[2] = 0;\n out[3] = 0;\n out[4] = -s;\n out[5] = c;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from a quaternion rotation and vector translation\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, vec);\n * let quatMat = mat4.create();\n * quat4.toMat4(quat, quatMat);\n * mat4.multiply(dest, quatMat);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {quat4} q Rotation quaternion\n * @param {ReadonlyVec3} v Translation vector\n * @returns {mat4} out\n */\n\nexport function fromRotationTranslation(out, q, v) {\n // Quaternion math\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var xy = x * y2;\n var xz = x * z2;\n var yy = y * y2;\n var yz = y * z2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n out[0] = 1 - (yy + zz);\n out[1] = xy + wz;\n out[2] = xz - wy;\n out[3] = 0;\n out[4] = xy - wz;\n out[5] = 1 - (xx + zz);\n out[6] = yz + wx;\n out[7] = 0;\n out[8] = xz + wy;\n out[9] = yz - wx;\n out[10] = 1 - (xx + yy);\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n}\n/**\n * Creates a new mat4 from a dual quat.\n *\n * @param {mat4} out Matrix\n * @param {ReadonlyQuat2} a Dual Quaternion\n * @returns {mat4} mat4 receiving operation result\n */\n\nexport function fromQuat2(out, a) {\n var translation = new glMatrix.ARRAY_TYPE(3);\n var bx = -a[0],\n by = -a[1],\n bz = -a[2],\n bw = a[3],\n ax = a[4],\n ay = a[5],\n az = a[6],\n aw = a[7];\n var magnitude = bx * bx + by * by + bz * bz + bw * bw; //Only scale if it makes sense\n\n if (magnitude > 0) {\n translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2 / magnitude;\n translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2 / magnitude;\n translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2 / magnitude;\n } else {\n translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2;\n translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2;\n translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2;\n }\n\n fromRotationTranslation(out, a, translation);\n return out;\n}\n/**\n * Returns the translation vector component of a transformation\n * matrix. If a matrix is built with fromRotationTranslation,\n * the returned vector will be the same as the translation vector\n * originally supplied.\n * @param {vec3} out Vector to receive translation component\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\n * @return {vec3} out\n */\n\nexport function getTranslation(out, mat) {\n out[0] = mat[12];\n out[1] = mat[13];\n out[2] = mat[14];\n return out;\n}\n/**\n * Returns the scaling factor component of a transformation\n * matrix. If a matrix is built with fromRotationTranslationScale\n * with a normalized Quaternion paramter, the returned vector will be\n * the same as the scaling vector\n * originally supplied.\n * @param {vec3} out Vector to receive scaling factor component\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\n * @return {vec3} out\n */\n\nexport function getScaling(out, mat) {\n var m11 = mat[0];\n var m12 = mat[1];\n var m13 = mat[2];\n var m21 = mat[4];\n var m22 = mat[5];\n var m23 = mat[6];\n var m31 = mat[8];\n var m32 = mat[9];\n var m33 = mat[10];\n out[0] = Math.hypot(m11, m12, m13);\n out[1] = Math.hypot(m21, m22, m23);\n out[2] = Math.hypot(m31, m32, m33);\n return out;\n}\n/**\n * Returns a quaternion representing the rotational component\n * of a transformation matrix. If a matrix is built with\n * fromRotationTranslation, the returned quaternion will be the\n * same as the quaternion originally supplied.\n * @param {quat} out Quaternion to receive the rotation component\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\n * @return {quat} out\n */\n\nexport function getRotation(out, mat) {\n var scaling = new glMatrix.ARRAY_TYPE(3);\n getScaling(scaling, mat);\n var is1 = 1 / scaling[0];\n var is2 = 1 / scaling[1];\n var is3 = 1 / scaling[2];\n var sm11 = mat[0] * is1;\n var sm12 = mat[1] * is2;\n var sm13 = mat[2] * is3;\n var sm21 = mat[4] * is1;\n var sm22 = mat[5] * is2;\n var sm23 = mat[6] * is3;\n var sm31 = mat[8] * is1;\n var sm32 = mat[9] * is2;\n var sm33 = mat[10] * is3;\n var trace = sm11 + sm22 + sm33;\n var S = 0;\n\n if (trace > 0) {\n S = Math.sqrt(trace + 1.0) * 2;\n out[3] = 0.25 * S;\n out[0] = (sm23 - sm32) / S;\n out[1] = (sm31 - sm13) / S;\n out[2] = (sm12 - sm21) / S;\n } else if (sm11 > sm22 && sm11 > sm33) {\n S = Math.sqrt(1.0 + sm11 - sm22 - sm33) * 2;\n out[3] = (sm23 - sm32) / S;\n out[0] = 0.25 * S;\n out[1] = (sm12 + sm21) / S;\n out[2] = (sm31 + sm13) / S;\n } else if (sm22 > sm33) {\n S = Math.sqrt(1.0 + sm22 - sm11 - sm33) * 2;\n out[3] = (sm31 - sm13) / S;\n out[0] = (sm12 + sm21) / S;\n out[1] = 0.25 * S;\n out[2] = (sm23 + sm32) / S;\n } else {\n S = Math.sqrt(1.0 + sm33 - sm11 - sm22) * 2;\n out[3] = (sm12 - sm21) / S;\n out[0] = (sm31 + sm13) / S;\n out[1] = (sm23 + sm32) / S;\n out[2] = 0.25 * S;\n }\n\n return out;\n}\n/**\n * Creates a matrix from a quaternion rotation, vector translation and vector scale\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, vec);\n * let quatMat = mat4.create();\n * quat4.toMat4(quat, quatMat);\n * mat4.multiply(dest, quatMat);\n * mat4.scale(dest, scale)\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {quat4} q Rotation quaternion\n * @param {ReadonlyVec3} v Translation vector\n * @param {ReadonlyVec3} s Scaling vector\n * @returns {mat4} out\n */\n\nexport function fromRotationTranslationScale(out, q, v, s) {\n // Quaternion math\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var xy = x * y2;\n var xz = x * z2;\n var yy = y * y2;\n var yz = y * z2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n var sx = s[0];\n var sy = s[1];\n var sz = s[2];\n out[0] = (1 - (yy + zz)) * sx;\n out[1] = (xy + wz) * sx;\n out[2] = (xz - wy) * sx;\n out[3] = 0;\n out[4] = (xy - wz) * sy;\n out[5] = (1 - (xx + zz)) * sy;\n out[6] = (yz + wx) * sy;\n out[7] = 0;\n out[8] = (xz + wy) * sz;\n out[9] = (yz - wx) * sz;\n out[10] = (1 - (xx + yy)) * sz;\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from a quaternion rotation, vector translation and vector scale, rotating and scaling around the given origin\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, vec);\n * mat4.translate(dest, origin);\n * let quatMat = mat4.create();\n * quat4.toMat4(quat, quatMat);\n * mat4.multiply(dest, quatMat);\n * mat4.scale(dest, scale)\n * mat4.translate(dest, negativeOrigin);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {quat4} q Rotation quaternion\n * @param {ReadonlyVec3} v Translation vector\n * @param {ReadonlyVec3} s Scaling vector\n * @param {ReadonlyVec3} o The origin vector around which to scale and rotate\n * @returns {mat4} out\n */\n\nexport function fromRotationTranslationScaleOrigin(out, q, v, s, o) {\n // Quaternion math\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var xy = x * y2;\n var xz = x * z2;\n var yy = y * y2;\n var yz = y * z2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n var sx = s[0];\n var sy = s[1];\n var sz = s[2];\n var ox = o[0];\n var oy = o[1];\n var oz = o[2];\n var out0 = (1 - (yy + zz)) * sx;\n var out1 = (xy + wz) * sx;\n var out2 = (xz - wy) * sx;\n var out4 = (xy - wz) * sy;\n var out5 = (1 - (xx + zz)) * sy;\n var out6 = (yz + wx) * sy;\n var out8 = (xz + wy) * sz;\n var out9 = (yz - wx) * sz;\n var out10 = (1 - (xx + yy)) * sz;\n out[0] = out0;\n out[1] = out1;\n out[2] = out2;\n out[3] = 0;\n out[4] = out4;\n out[5] = out5;\n out[6] = out6;\n out[7] = 0;\n out[8] = out8;\n out[9] = out9;\n out[10] = out10;\n out[11] = 0;\n out[12] = v[0] + ox - (out0 * ox + out4 * oy + out8 * oz);\n out[13] = v[1] + oy - (out1 * ox + out5 * oy + out9 * oz);\n out[14] = v[2] + oz - (out2 * ox + out6 * oy + out10 * oz);\n out[15] = 1;\n return out;\n}\n/**\n * Calculates a 4x4 matrix from the given quaternion\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {ReadonlyQuat} q Quaternion to create matrix from\n *\n * @returns {mat4} out\n */\n\nexport function fromQuat(out, q) {\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var yx = y * x2;\n var yy = y * y2;\n var zx = z * x2;\n var zy = z * y2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n out[0] = 1 - yy - zz;\n out[1] = yx + wz;\n out[2] = zx - wy;\n out[3] = 0;\n out[4] = yx - wz;\n out[5] = 1 - xx - zz;\n out[6] = zy + wx;\n out[7] = 0;\n out[8] = zx + wy;\n out[9] = zy - wx;\n out[10] = 1 - xx - yy;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Generates a frustum matrix with the given bounds\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {Number} left Left bound of the frustum\n * @param {Number} right Right bound of the frustum\n * @param {Number} bottom Bottom bound of the frustum\n * @param {Number} top Top bound of the frustum\n * @param {Number} near Near bound of the frustum\n * @param {Number} far Far bound of the frustum\n * @returns {mat4} out\n */\n\nexport function frustum(out, left, right, bottom, top, near, far) {\n var rl = 1 / (right - left);\n var tb = 1 / (top - bottom);\n var nf = 1 / (near - far);\n out[0] = near * 2 * rl;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = near * 2 * tb;\n out[6] = 0;\n out[7] = 0;\n out[8] = (right + left) * rl;\n out[9] = (top + bottom) * tb;\n out[10] = (far + near) * nf;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[14] = far * near * 2 * nf;\n out[15] = 0;\n return out;\n}\n/**\n * Generates a perspective projection matrix with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],\n * which matches WebGL/OpenGL's clip volume.\n * Passing null/undefined/no value for far will generate infinite projection matrix.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} fovy Vertical field of view in radians\n * @param {number} aspect Aspect ratio. typically viewport width/height\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum, can be null or Infinity\n * @returns {mat4} out\n */\n\nexport function perspectiveNO(out, fovy, aspect, near, far) {\n var f = 1.0 / Math.tan(fovy / 2),\n nf;\n out[0] = f / aspect;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = f;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[15] = 0;\n\n if (far != null && far !== Infinity) {\n nf = 1 / (near - far);\n out[10] = (far + near) * nf;\n out[14] = 2 * far * near * nf;\n } else {\n out[10] = -1;\n out[14] = -2 * near;\n }\n\n return out;\n}\n/**\n * Alias for {@link mat4.perspectiveNO}\n * @function\n */\n\nexport var perspective = perspectiveNO;\n/**\n * Generates a perspective projection matrix suitable for WebGPU with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],\n * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.\n * Passing null/undefined/no value for far will generate infinite projection matrix.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} fovy Vertical field of view in radians\n * @param {number} aspect Aspect ratio. typically viewport width/height\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum, can be null or Infinity\n * @returns {mat4} out\n */\n\nexport function perspectiveZO(out, fovy, aspect, near, far) {\n var f = 1.0 / Math.tan(fovy / 2),\n nf;\n out[0] = f / aspect;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = f;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[15] = 0;\n\n if (far != null && far !== Infinity) {\n nf = 1 / (near - far);\n out[10] = far * nf;\n out[14] = far * near * nf;\n } else {\n out[10] = -1;\n out[14] = -near;\n }\n\n return out;\n}\n/**\n * Generates a perspective projection matrix with the given field of view.\n * This is primarily useful for generating projection matrices to be used\n * with the still experiemental WebVR API.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {Object} fov Object containing the following values: upDegrees, downDegrees, leftDegrees, rightDegrees\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\n\nexport function perspectiveFromFieldOfView(out, fov, near, far) {\n var upTan = Math.tan(fov.upDegrees * Math.PI / 180.0);\n var downTan = Math.tan(fov.downDegrees * Math.PI / 180.0);\n var leftTan = Math.tan(fov.leftDegrees * Math.PI / 180.0);\n var rightTan = Math.tan(fov.rightDegrees * Math.PI / 180.0);\n var xScale = 2.0 / (leftTan + rightTan);\n var yScale = 2.0 / (upTan + downTan);\n out[0] = xScale;\n out[1] = 0.0;\n out[2] = 0.0;\n out[3] = 0.0;\n out[4] = 0.0;\n out[5] = yScale;\n out[6] = 0.0;\n out[7] = 0.0;\n out[8] = -((leftTan - rightTan) * xScale * 0.5);\n out[9] = (upTan - downTan) * yScale * 0.5;\n out[10] = far / (near - far);\n out[11] = -1.0;\n out[12] = 0.0;\n out[13] = 0.0;\n out[14] = far * near / (near - far);\n out[15] = 0.0;\n return out;\n}\n/**\n * Generates a orthogonal projection matrix with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],\n * which matches WebGL/OpenGL's clip volume.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} left Left bound of the frustum\n * @param {number} right Right bound of the frustum\n * @param {number} bottom Bottom bound of the frustum\n * @param {number} top Top bound of the frustum\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\n\nexport function orthoNO(out, left, right, bottom, top, near, far) {\n var lr = 1 / (left - right);\n var bt = 1 / (bottom - top);\n var nf = 1 / (near - far);\n out[0] = -2 * lr;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -2 * bt;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 2 * nf;\n out[11] = 0;\n out[12] = (left + right) * lr;\n out[13] = (top + bottom) * bt;\n out[14] = (far + near) * nf;\n out[15] = 1;\n return out;\n}\n/**\n * Alias for {@link mat4.orthoNO}\n * @function\n */\n\nexport var ortho = orthoNO;\n/**\n * Generates a orthogonal projection matrix with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],\n * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} left Left bound of the frustum\n * @param {number} right Right bound of the frustum\n * @param {number} bottom Bottom bound of the frustum\n * @param {number} top Top bound of the frustum\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\n\nexport function orthoZO(out, left, right, bottom, top, near, far) {\n var lr = 1 / (left - right);\n var bt = 1 / (bottom - top);\n var nf = 1 / (near - far);\n out[0] = -2 * lr;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -2 * bt;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = nf;\n out[11] = 0;\n out[12] = (left + right) * lr;\n out[13] = (top + bottom) * bt;\n out[14] = near * nf;\n out[15] = 1;\n return out;\n}\n/**\n * Generates a look-at matrix with the given eye position, focal point, and up axis.\n * If you want a matrix that actually makes an object look at another object, you should use targetTo instead.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {ReadonlyVec3} eye Position of the viewer\n * @param {ReadonlyVec3} center Point the viewer is looking at\n * @param {ReadonlyVec3} up vec3 pointing up\n * @returns {mat4} out\n */\n\nexport function lookAt(out, eye, center, up) {\n var x0, x1, x2, y0, y1, y2, z0, z1, z2, len;\n var eyex = eye[0];\n var eyey = eye[1];\n var eyez = eye[2];\n var upx = up[0];\n var upy = up[1];\n var upz = up[2];\n var centerx = center[0];\n var centery = center[1];\n var centerz = center[2];\n\n if (Math.abs(eyex - centerx) < glMatrix.EPSILON && Math.abs(eyey - centery) < glMatrix.EPSILON && Math.abs(eyez - centerz) < glMatrix.EPSILON) {\n return identity(out);\n }\n\n z0 = eyex - centerx;\n z1 = eyey - centery;\n z2 = eyez - centerz;\n len = 1 / Math.hypot(z0, z1, z2);\n z0 *= len;\n z1 *= len;\n z2 *= len;\n x0 = upy * z2 - upz * z1;\n x1 = upz * z0 - upx * z2;\n x2 = upx * z1 - upy * z0;\n len = Math.hypot(x0, x1, x2);\n\n if (!len) {\n x0 = 0;\n x1 = 0;\n x2 = 0;\n } else {\n len = 1 / len;\n x0 *= len;\n x1 *= len;\n x2 *= len;\n }\n\n y0 = z1 * x2 - z2 * x1;\n y1 = z2 * x0 - z0 * x2;\n y2 = z0 * x1 - z1 * x0;\n len = Math.hypot(y0, y1, y2);\n\n if (!len) {\n y0 = 0;\n y1 = 0;\n y2 = 0;\n } else {\n len = 1 / len;\n y0 *= len;\n y1 *= len;\n y2 *= len;\n }\n\n out[0] = x0;\n out[1] = y0;\n out[2] = z0;\n out[3] = 0;\n out[4] = x1;\n out[5] = y1;\n out[6] = z1;\n out[7] = 0;\n out[8] = x2;\n out[9] = y2;\n out[10] = z2;\n out[11] = 0;\n out[12] = -(x0 * eyex + x1 * eyey + x2 * eyez);\n out[13] = -(y0 * eyex + y1 * eyey + y2 * eyez);\n out[14] = -(z0 * eyex + z1 * eyey + z2 * eyez);\n out[15] = 1;\n return out;\n}\n/**\n * Generates a matrix that makes something look at something else.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {ReadonlyVec3} eye Position of the viewer\n * @param {ReadonlyVec3} center Point the viewer is looking at\n * @param {ReadonlyVec3} up vec3 pointing up\n * @returns {mat4} out\n */\n\nexport function targetTo(out, eye, target, up) {\n var eyex = eye[0],\n eyey = eye[1],\n eyez = eye[2],\n upx = up[0],\n upy = up[1],\n upz = up[2];\n var z0 = eyex - target[0],\n z1 = eyey - target[1],\n z2 = eyez - target[2];\n var len = z0 * z0 + z1 * z1 + z2 * z2;\n\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n z0 *= len;\n z1 *= len;\n z2 *= len;\n }\n\n var x0 = upy * z2 - upz * z1,\n x1 = upz * z0 - upx * z2,\n x2 = upx * z1 - upy * z0;\n len = x0 * x0 + x1 * x1 + x2 * x2;\n\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n x0 *= len;\n x1 *= len;\n x2 *= len;\n }\n\n out[0] = x0;\n out[1] = x1;\n out[2] = x2;\n out[3] = 0;\n out[4] = z1 * x2 - z2 * x1;\n out[5] = z2 * x0 - z0 * x2;\n out[6] = z0 * x1 - z1 * x0;\n out[7] = 0;\n out[8] = z0;\n out[9] = z1;\n out[10] = z2;\n out[11] = 0;\n out[12] = eyex;\n out[13] = eyey;\n out[14] = eyez;\n out[15] = 1;\n return out;\n}\n/**\n * Returns a string representation of a mat4\n *\n * @param {ReadonlyMat4} a matrix to represent as a string\n * @returns {String} string representation of the matrix\n */\n\nexport function str(a) {\n return \"mat4(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \", \" + a[4] + \", \" + a[5] + \", \" + a[6] + \", \" + a[7] + \", \" + a[8] + \", \" + a[9] + \", \" + a[10] + \", \" + a[11] + \", \" + a[12] + \", \" + a[13] + \", \" + a[14] + \", \" + a[15] + \")\";\n}\n/**\n * Returns Frobenius norm of a mat4\n *\n * @param {ReadonlyMat4} a the matrix to calculate Frobenius norm of\n * @returns {Number} Frobenius norm\n */\n\nexport function frob(a) {\n return Math.hypot(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15]);\n}\n/**\n * Adds two mat4's\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @returns {mat4} out\n */\n\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n out[4] = a[4] + b[4];\n out[5] = a[5] + b[5];\n out[6] = a[6] + b[6];\n out[7] = a[7] + b[7];\n out[8] = a[8] + b[8];\n out[9] = a[9] + b[9];\n out[10] = a[10] + b[10];\n out[11] = a[11] + b[11];\n out[12] = a[12] + b[12];\n out[13] = a[13] + b[13];\n out[14] = a[14] + b[14];\n out[15] = a[15] + b[15];\n return out;\n}\n/**\n * Subtracts matrix b from matrix a\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @returns {mat4} out\n */\n\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n out[4] = a[4] - b[4];\n out[5] = a[5] - b[5];\n out[6] = a[6] - b[6];\n out[7] = a[7] - b[7];\n out[8] = a[8] - b[8];\n out[9] = a[9] - b[9];\n out[10] = a[10] - b[10];\n out[11] = a[11] - b[11];\n out[12] = a[12] - b[12];\n out[13] = a[13] - b[13];\n out[14] = a[14] - b[14];\n out[15] = a[15] - b[15];\n return out;\n}\n/**\n * Multiply each element of the matrix by a scalar.\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to scale\n * @param {Number} b amount to scale the matrix's elements by\n * @returns {mat4} out\n */\n\nexport function multiplyScalar(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n out[4] = a[4] * b;\n out[5] = a[5] * b;\n out[6] = a[6] * b;\n out[7] = a[7] * b;\n out[8] = a[8] * b;\n out[9] = a[9] * b;\n out[10] = a[10] * b;\n out[11] = a[11] * b;\n out[12] = a[12] * b;\n out[13] = a[13] * b;\n out[14] = a[14] * b;\n out[15] = a[15] * b;\n return out;\n}\n/**\n * Adds two mat4's after multiplying each element of the second operand by a scalar value.\n *\n * @param {mat4} out the receiving vector\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @param {Number} scale the amount to scale b's elements by before adding\n * @returns {mat4} out\n */\n\nexport function multiplyScalarAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n out[3] = a[3] + b[3] * scale;\n out[4] = a[4] + b[4] * scale;\n out[5] = a[5] + b[5] * scale;\n out[6] = a[6] + b[6] * scale;\n out[7] = a[7] + b[7] * scale;\n out[8] = a[8] + b[8] * scale;\n out[9] = a[9] + b[9] * scale;\n out[10] = a[10] + b[10] * scale;\n out[11] = a[11] + b[11] * scale;\n out[12] = a[12] + b[12] * scale;\n out[13] = a[13] + b[13] * scale;\n out[14] = a[14] + b[14] * scale;\n out[15] = a[15] + b[15] * scale;\n return out;\n}\n/**\n * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyMat4} a The first matrix.\n * @param {ReadonlyMat4} b The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n */\n\nexport function exactEquals(a, b) {\n return 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];\n}\n/**\n * Returns whether or not the matrices have approximately the same elements in the same position.\n *\n * @param {ReadonlyMat4} a The first matrix.\n * @param {ReadonlyMat4} b The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3];\n var a4 = a[4],\n a5 = a[5],\n a6 = a[6],\n a7 = a[7];\n var a8 = a[8],\n a9 = a[9],\n a10 = a[10],\n a11 = a[11];\n var a12 = a[12],\n a13 = a[13],\n a14 = a[14],\n a15 = a[15];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3];\n var b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7];\n var b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11];\n var b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7)) && Math.abs(a8 - b8) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a8), Math.abs(b8)) && Math.abs(a9 - b9) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a9), Math.abs(b9)) && Math.abs(a10 - b10) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a10), Math.abs(b10)) && Math.abs(a11 - b11) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a11), Math.abs(b11)) && Math.abs(a12 - b12) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a12), Math.abs(b12)) && Math.abs(a13 - b13) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a13), Math.abs(b13)) && Math.abs(a14 - b14) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a14), Math.abs(b14)) && Math.abs(a15 - b15) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a15), Math.abs(b15));\n}\n/**\n * Alias for {@link mat4.multiply}\n * @function\n */\n\nexport var mul = multiply;\n/**\n * Alias for {@link mat4.subtract}\n * @function\n */\n\nexport var sub = subtract;","import * as glMatrix from \"./common.js\";\n/**\n * 4 Dimensional Vector\n * @module vec4\n */\n\n/**\n * Creates a new, empty vec4\n *\n * @returns {vec4} a new 4D vector\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(4);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n }\n\n return out;\n}\n/**\n * Creates a new vec4 initialized with values from an existing vector\n *\n * @param {ReadonlyVec4} a vector to clone\n * @returns {vec4} a new 4D vector\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(4);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n}\n/**\n * Creates a new vec4 initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {vec4} a new 4D vector\n */\n\nexport function fromValues(x, y, z, w) {\n var out = new glMatrix.ARRAY_TYPE(4);\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = w;\n return out;\n}\n/**\n * Copy the values from one vec4 to another\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the source vector\n * @returns {vec4} out\n */\n\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n}\n/**\n * Set the components of a vec4 to the given values\n *\n * @param {vec4} out the receiving vector\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {vec4} out\n */\n\nexport function set(out, x, y, z, w) {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = w;\n return out;\n}\n/**\n * Adds two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\n\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n return out;\n}\n/**\n * Subtracts vector b from vector a\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\n\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n return out;\n}\n/**\n * Multiplies two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\n\nexport function multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n out[2] = a[2] * b[2];\n out[3] = a[3] * b[3];\n return out;\n}\n/**\n * Divides two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\n\nexport function divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n out[2] = a[2] / b[2];\n out[3] = a[3] / b[3];\n return out;\n}\n/**\n * Math.ceil the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to ceil\n * @returns {vec4} out\n */\n\nexport function ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n out[2] = Math.ceil(a[2]);\n out[3] = Math.ceil(a[3]);\n return out;\n}\n/**\n * Math.floor the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to floor\n * @returns {vec4} out\n */\n\nexport function floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n out[2] = Math.floor(a[2]);\n out[3] = Math.floor(a[3]);\n return out;\n}\n/**\n * Returns the minimum of two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\n\nexport function min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n out[2] = Math.min(a[2], b[2]);\n out[3] = Math.min(a[3], b[3]);\n return out;\n}\n/**\n * Returns the maximum of two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\n\nexport function max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n out[2] = Math.max(a[2], b[2]);\n out[3] = Math.max(a[3], b[3]);\n return out;\n}\n/**\n * Math.round the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to round\n * @returns {vec4} out\n */\n\nexport function round(out, a) {\n out[0] = Math.round(a[0]);\n out[1] = Math.round(a[1]);\n out[2] = Math.round(a[2]);\n out[3] = Math.round(a[3]);\n return out;\n}\n/**\n * Scales a vec4 by a scalar number\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {vec4} out\n */\n\nexport function scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n return out;\n}\n/**\n * Adds two vec4's after scaling the second operand by a scalar value\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @param {Number} scale the amount to scale b by before adding\n * @returns {vec4} out\n */\n\nexport function scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n out[3] = a[3] + b[3] * scale;\n return out;\n}\n/**\n * Calculates the euclidian distance between two vec4's\n *\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {Number} distance between a and b\n */\n\nexport function distance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n var w = b[3] - a[3];\n return Math.hypot(x, y, z, w);\n}\n/**\n * Calculates the squared euclidian distance between two vec4's\n *\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {Number} squared distance between a and b\n */\n\nexport function squaredDistance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n var w = b[3] - a[3];\n return x * x + y * y + z * z + w * w;\n}\n/**\n * Calculates the length of a vec4\n *\n * @param {ReadonlyVec4} a vector to calculate length of\n * @returns {Number} length of a\n */\n\nexport function length(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var w = a[3];\n return Math.hypot(x, y, z, w);\n}\n/**\n * Calculates the squared length of a vec4\n *\n * @param {ReadonlyVec4} a vector to calculate squared length of\n * @returns {Number} squared length of a\n */\n\nexport function squaredLength(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var w = a[3];\n return x * x + y * y + z * z + w * w;\n}\n/**\n * Negates the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to negate\n * @returns {vec4} out\n */\n\nexport function negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n out[3] = -a[3];\n return out;\n}\n/**\n * Returns the inverse of the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to invert\n * @returns {vec4} out\n */\n\nexport function inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n out[2] = 1.0 / a[2];\n out[3] = 1.0 / a[3];\n return out;\n}\n/**\n * Normalize a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to normalize\n * @returns {vec4} out\n */\n\nexport function normalize(out, a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var w = a[3];\n var len = x * x + y * y + z * z + w * w;\n\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n }\n\n out[0] = x * len;\n out[1] = y * len;\n out[2] = z * len;\n out[3] = w * len;\n return out;\n}\n/**\n * Calculates the dot product of two vec4's\n *\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {Number} dot product of a and b\n */\n\nexport function dot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\n}\n/**\n * Returns the cross-product of three vectors in a 4-dimensional space\n *\n * @param {ReadonlyVec4} result the receiving vector\n * @param {ReadonlyVec4} U the first vector\n * @param {ReadonlyVec4} V the second vector\n * @param {ReadonlyVec4} W the third vector\n * @returns {vec4} result\n */\n\nexport function cross(out, u, v, w) {\n var A = v[0] * w[1] - v[1] * w[0],\n B = v[0] * w[2] - v[2] * w[0],\n C = v[0] * w[3] - v[3] * w[0],\n D = v[1] * w[2] - v[2] * w[1],\n E = v[1] * w[3] - v[3] * w[1],\n F = v[2] * w[3] - v[3] * w[2];\n var G = u[0];\n var H = u[1];\n var I = u[2];\n var J = u[3];\n out[0] = H * F - I * E + J * D;\n out[1] = -(G * F) + I * C - J * B;\n out[2] = G * E - H * C + J * A;\n out[3] = -(G * D) + H * B - I * A;\n return out;\n}\n/**\n * Performs a linear interpolation between two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec4} out\n */\n\nexport function lerp(out, a, b, t) {\n var ax = a[0];\n var ay = a[1];\n var az = a[2];\n var aw = a[3];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n out[2] = az + t * (b[2] - az);\n out[3] = aw + t * (b[3] - aw);\n return out;\n}\n/**\n * Generates a random vector with the given scale\n *\n * @param {vec4} out the receiving vector\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\n * @returns {vec4} out\n */\n\nexport function random(out, scale) {\n scale = scale || 1.0; // Marsaglia, George. Choosing a Point from the Surface of a\n // Sphere. Ann. Math. Statist. 43 (1972), no. 2, 645--646.\n // http://projecteuclid.org/euclid.aoms/1177692644;\n\n var v1, v2, v3, v4;\n var s1, s2;\n\n do {\n v1 = glMatrix.RANDOM() * 2 - 1;\n v2 = glMatrix.RANDOM() * 2 - 1;\n s1 = v1 * v1 + v2 * v2;\n } while (s1 >= 1);\n\n do {\n v3 = glMatrix.RANDOM() * 2 - 1;\n v4 = glMatrix.RANDOM() * 2 - 1;\n s2 = v3 * v3 + v4 * v4;\n } while (s2 >= 1);\n\n var d = Math.sqrt((1 - s1) / s2);\n out[0] = scale * v1;\n out[1] = scale * v2;\n out[2] = scale * v3 * d;\n out[3] = scale * v4 * d;\n return out;\n}\n/**\n * Transforms the vec4 with a mat4.\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the vector to transform\n * @param {ReadonlyMat4} m matrix to transform with\n * @returns {vec4} out\n */\n\nexport function transformMat4(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2],\n w = a[3];\n out[0] = m[0] * x + m[4] * y + m[8] * z + m[12] * w;\n out[1] = m[1] * x + m[5] * y + m[9] * z + m[13] * w;\n out[2] = m[2] * x + m[6] * y + m[10] * z + m[14] * w;\n out[3] = m[3] * x + m[7] * y + m[11] * z + m[15] * w;\n return out;\n}\n/**\n * Transforms the vec4 with a quat\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the vector to transform\n * @param {ReadonlyQuat} q quaternion to transform with\n * @returns {vec4} out\n */\n\nexport function transformQuat(out, a, q) {\n var x = a[0],\n y = a[1],\n z = a[2];\n var qx = q[0],\n qy = q[1],\n qz = q[2],\n qw = q[3]; // calculate quat * vec\n\n var ix = qw * x + qy * z - qz * y;\n var iy = qw * y + qz * x - qx * z;\n var iz = qw * z + qx * y - qy * x;\n var iw = -qx * x - qy * y - qz * z; // calculate result * inverse quat\n\n out[0] = ix * qw + iw * -qx + iy * -qz - iz * -qy;\n out[1] = iy * qw + iw * -qy + iz * -qx - ix * -qz;\n out[2] = iz * qw + iw * -qz + ix * -qy - iy * -qx;\n out[3] = a[3];\n return out;\n}\n/**\n * Set the components of a vec4 to zero\n *\n * @param {vec4} out the receiving vector\n * @returns {vec4} out\n */\n\nexport function zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n out[2] = 0.0;\n out[3] = 0.0;\n return out;\n}\n/**\n * Returns a string representation of a vector\n *\n * @param {ReadonlyVec4} a vector to represent as a string\n * @returns {String} string representation of the vector\n */\n\nexport function str(a) {\n return \"vec4(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \")\";\n}\n/**\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyVec4} a The first vector.\n * @param {ReadonlyVec4} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n}\n/**\n * Returns whether or not the vectors have approximately the same elements in the same position.\n *\n * @param {ReadonlyVec4} a The first vector.\n * @param {ReadonlyVec4} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3));\n}\n/**\n * Alias for {@link vec4.subtract}\n * @function\n */\n\nexport var sub = subtract;\n/**\n * Alias for {@link vec4.multiply}\n * @function\n */\n\nexport var mul = multiply;\n/**\n * Alias for {@link vec4.divide}\n * @function\n */\n\nexport var div = divide;\n/**\n * Alias for {@link vec4.distance}\n * @function\n */\n\nexport var dist = distance;\n/**\n * Alias for {@link vec4.squaredDistance}\n * @function\n */\n\nexport var sqrDist = squaredDistance;\n/**\n * Alias for {@link vec4.length}\n * @function\n */\n\nexport var len = length;\n/**\n * Alias for {@link vec4.squaredLength}\n * @function\n */\n\nexport var sqrLen = squaredLength;\n/**\n * Perform some operation over an array of vec4s.\n *\n * @param {Array} a the array of vectors to iterate over\n * @param {Number} stride Number of elements between the start of each vec4. If 0 assumes tightly packed\n * @param {Number} offset Number of elements to skip at the beginning of the array\n * @param {Number} count Number of vec4s to iterate over. If 0 iterates over entire array\n * @param {Function} fn Function to call for each vector in the array\n * @param {Object} [arg] additional argument to pass to fn\n * @returns {Array} a\n * @function\n */\n\nexport var forEach = function () {\n var vec = create();\n return function (a, stride, offset, count, fn, arg) {\n var i, l;\n\n if (!stride) {\n stride = 4;\n }\n\n if (!offset) {\n offset = 0;\n }\n\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\n\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n vec[2] = a[i + 2];\n vec[3] = a[i + 3];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n a[i + 2] = vec[2];\n a[i + 3] = vec[3];\n }\n\n return a;\n };\n}();","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(\"SPECTOR\",[],t):\"object\"==typeof exports?exports.SPECTOR=t():e.SPECTOR=t()}(window,(function(){return function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,\"a\",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=\"/\",n(n.s=4)}([function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,\"loaded\",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,\"id\",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t,n){\"use strict\";var i,r=function(){return void 0===i&&(i=Boolean(window&&document&&document.all&&!window.atob)),i},o=function(){var e={};return function(t){if(void 0===e[t]){var n=document.querySelector(t);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}e[t]=n}return e[t]}}(),s=[];function a(e){for(var t=-1,n=0;n1&&c(i,\"\")>-1&&(n=RegExp(this.source,r.replace.call(a(this),\"g\",\"\")),r.replace.call(e.slice(i.index),n,(function(){for(var e=1;ei.index&&this.lastIndex--}return i},s||(RegExp.prototype.test=function(e){var t=r.exec.call(this,e);return t&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--,!!t}))})),ace.define(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"],(function(e,t,n){function i(){}Function.prototype.bind||(Function.prototype.bind=function(e){var t=this;if(\"function\"!=typeof t)throw new TypeError(\"Function.prototype.bind called on incompatible \"+t);var n=d.call(arguments,1),r=function(){if(this instanceof r){var i=t.apply(this,n.concat(d.call(arguments)));return Object(i)===i?i:this}return t.apply(e,n.concat(d.call(arguments)))};return t.prototype&&(i.prototype=t.prototype,r.prototype=new i,i.prototype=null),r});var r,o,s,a,c,l=Function.prototype.call,u=Array.prototype,h=Object.prototype,d=u.slice,p=l.bind(h.toString),m=l.bind(h.hasOwnProperty);if((c=m(h,\"__defineGetter__\"))&&(r=l.bind(h.__defineGetter__),o=l.bind(h.__defineSetter__),s=l.bind(h.__lookupGetter__),a=l.bind(h.__lookupSetter__)),2!=[1,2].splice(0).length)if(function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t,n=[];if(n.splice.apply(n,e(20)),n.splice.apply(n,e(26)),t=n.length,n.splice(5,0,\"XXX\"),n.length,t+1==n.length)return!0}()){var f=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?f.apply(this,[void 0===e?0:e,void 0===t?this.length-e:t].concat(d.call(arguments,2))):[]}}else Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):null==e?e=0:e<0&&(e=Math.max(n+e,0)),e+ta)for(h=l;h--;)this[c+h]=this[a+h];if(o&&e===u)this.length=u,this.push.apply(this,r);else for(this.length=u+o,h=0;h>>0;if(\"[object Function]\"!=p(e))throw new TypeError;for(;++r>>0,r=Array(i),o=arguments[1];if(\"[object Function]\"!=p(e))throw new TypeError(e+\" is not a function\");for(var s=0;s>>0,o=[],s=arguments[1];if(\"[object Function]\"!=p(e))throw new TypeError(e+\" is not a function\");for(var a=0;a>>0,r=arguments[1];if(\"[object Function]\"!=p(e))throw new TypeError(e+\" is not a function\");for(var o=0;o>>0,r=arguments[1];if(\"[object Function]\"!=p(e))throw new TypeError(e+\" is not a function\");for(var o=0;o>>0;if(\"[object Function]\"!=p(e))throw new TypeError(e+\" is not a function\");if(!i&&1==arguments.length)throw new TypeError(\"reduce of empty array with no initial value\");var r,o=0;if(arguments.length>=2)r=arguments[1];else for(;;){if(o in n){r=n[o++];break}if(++o>=i)throw new TypeError(\"reduce of empty array with no initial value\")}for(;o>>0;if(\"[object Function]\"!=p(e))throw new TypeError(e+\" is not a function\");if(!i&&1==arguments.length)throw new TypeError(\"reduceRight of empty array with no initial value\");var r,o=i-1;if(arguments.length>=2)r=arguments[1];else for(;;){if(o in n){r=n[o--];break}if(--o<0)throw new TypeError(\"reduceRight of empty array with no initial value\")}do{o in this&&(r=e.call(void 0,r,n[o],o,t))}while(o--);return r}),Array.prototype.indexOf&&-1==[0,1].indexOf(1,2)||(Array.prototype.indexOf=function(e){var t=E&&\"[object String]\"==p(this)?this.split(\"\"):F(this),n=t.length>>>0;if(!n)return-1;var i=0;for(arguments.length>1&&(i=O(arguments[1])),i=i>=0?i:Math.max(0,n+i);i>>0;if(!n)return-1;var i=n-1;for(arguments.length>1&&(i=Math.min(i,O(arguments[1]))),i=i>=0?i:n-Math.abs(i);i>=0;i--)if(i in t&&e===t[i])return i;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(e){return e.__proto__||(e.constructor?e.constructor.prototype:h)}),!Object.getOwnPropertyDescriptor){Object.getOwnPropertyDescriptor=function(e,t){if(\"object\"!=typeof e&&\"function\"!=typeof e||null===e)throw new TypeError(\"Object.getOwnPropertyDescriptor called on a non-object: \"+e);if(m(e,t)){var n;if(n={enumerable:!0,configurable:!0},c){var i=e.__proto__;e.__proto__=h;var r=s(e,t),o=a(e,t);if(e.__proto__=i,r||o)return r&&(n.get=r),o&&(n.set=o),n}return n.value=e[t],n}}}(Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(e){return Object.keys(e)}),Object.create)||(g=null===Object.prototype.__proto__?function(){return{__proto__:null}}:function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(e,t){var n;if(null===e)n=g();else{if(\"object\"!=typeof e)throw new TypeError(\"typeof prototype[\"+typeof e+\"] != 'object'\");var i=function(){};i.prototype=e,(n=new i).__proto__=e}return void 0!==t&&Object.defineProperties(n,t),n});function C(e){try{return Object.defineProperty(e,\"sentinel\",{}),\"sentinel\"in e}catch(e){}}if(Object.defineProperty){var A=C({}),R=\"undefined\"==typeof document||C(document.createElement(\"div\"));if(!A||!R)var S=Object.defineProperty}if(!Object.defineProperty||S){Object.defineProperty=function(e,t,n){if(\"object\"!=typeof e&&\"function\"!=typeof e||null===e)throw new TypeError(\"Object.defineProperty called on non-object: \"+e);if(\"object\"!=typeof n&&\"function\"!=typeof n||null===n)throw new TypeError(\"Property description must be an object: \"+n);if(S)try{return S.call(Object,e,t,n)}catch(e){}if(m(n,\"value\"))if(c&&(s(e,t)||a(e,t))){var i=e.__proto__;e.__proto__=h,delete e[t],e[t]=n.value,e.__proto__=i}else e[t]=n.value;else{if(!c)throw new TypeError(\"getters & setters can not be defined on this javascript engine\");m(n,\"get\")&&r(e,t,n.get),m(n,\"set\")&&o(e,t,n.set)}return e}}Object.defineProperties||(Object.defineProperties=function(e,t){for(var n in t)m(t,n)&&Object.defineProperty(e,n,t[n]);return e}),Object.seal||(Object.seal=function(e){return e}),Object.freeze||(Object.freeze=function(e){return e});try{Object.freeze((function(){}))}catch(e){Object.freeze=(v=Object.freeze,function(e){return\"function\"==typeof e?e:v(e)})}if(Object.preventExtensions||(Object.preventExtensions=function(e){return e}),Object.isSealed||(Object.isSealed=function(e){return!1}),Object.isFrozen||(Object.isFrozen=function(e){return!1}),Object.isExtensible||(Object.isExtensible=function(e){if(Object(e)===e)throw new TypeError;for(var t=\"\";m(e,t);)t+=\"?\";e[t]=!0;var n=m(e,t);return delete e[t],n}),!Object.keys){var y=!0,T=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],b=T.length;for(var w in{toString:null})y=!1;Object.keys=function(e){if(\"object\"!=typeof e&&\"function\"!=typeof e||null===e)throw new TypeError(\"Object.keys called on a non-object\");var t=[];for(var n in e)m(e,n)&&t.push(n);if(y)for(var i=0,r=b;i0||-1)*Math.floor(Math.abs(e))),e}var F=function(e){if(null==e)throw new TypeError(\"can't convert \"+e+\" to object\");return Object(e)}})),ace.define(\"ace/lib/fixoldbrowsers\",[\"require\",\"exports\",\"module\",\"ace/lib/regexp\",\"ace/lib/es5-shim\"],(function(e,t,n){\"use strict\";e(\"./regexp\"),e(\"./es5-shim\"),\"undefined\"==typeof Element||Element.prototype.remove||Object.defineProperty(Element.prototype,\"remove\",{enumerable:!1,writable:!0,configurable:!0,value:function(){this.parentNode&&this.parentNode.removeChild(this)}})})),ace.define(\"ace/lib/useragent\",[\"require\",\"exports\",\"module\"],(function(e,t,n){\"use strict\";t.OS={LINUX:\"LINUX\",MAC:\"MAC\",WINDOWS:\"WINDOWS\"},t.getOS=function(){return t.isMac?t.OS.MAC:t.isLinux?t.OS.LINUX:t.OS.WINDOWS};var i=\"object\"==typeof navigator?navigator:{},r=(/mac|win|linux/i.exec(i.platform)||[\"other\"])[0].toLowerCase(),o=i.userAgent||\"\",s=i.appName||\"\";t.isWin=\"win\"==r,t.isMac=\"mac\"==r,t.isLinux=\"linux\"==r,t.isIE=\"Microsoft Internet Explorer\"==s||s.indexOf(\"MSAppHost\")>=0?parseFloat((o.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1]):parseFloat((o.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1]),t.isOldIE=t.isIE&&t.isIE<9,t.isGecko=t.isMozilla=o.match(/ Gecko\\/\\d+/),t.isOpera=\"object\"==typeof opera&&\"[object Opera]\"==Object.prototype.toString.call(window.opera),t.isWebKit=parseFloat(o.split(\"WebKit/\")[1])||void 0,t.isChrome=parseFloat(o.split(\" Chrome/\")[1])||void 0,t.isEdge=parseFloat(o.split(\" Edge/\")[1])||void 0,t.isAIR=o.indexOf(\"AdobeAIR\")>=0,t.isAndroid=o.indexOf(\"Android\")>=0,t.isChromeOS=o.indexOf(\" CrOS \")>=0,t.isIOS=/iPad|iPhone|iPod/.test(o)&&!window.MSStream,t.isIOS&&(t.isMac=!0),t.isMobile=t.isIOS||t.isAndroid})),ace.define(\"ace/lib/dom\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"],(function(e,t,n){\"use strict\";var i=e(\"./useragent\");if(t.buildDom=function e(t,n,i){if(\"string\"==typeof t&&t){var r=document.createTextNode(t);return n&&n.appendChild(r),r}if(!Array.isArray(t))return t;if(\"string\"!=typeof t[0]||!t[0]){for(var o=[],s=0;s=1.5,\"undefined\"!=typeof document){var r=document.createElement(\"div\");t.HI_DPI&&void 0!==r.style.transform&&(t.HAS_CSS_TRANSFORMS=!0),i.isEdge||void 0===r.style.animationName||(t.HAS_CSS_ANIMATION=!0),r=null}t.HAS_CSS_TRANSFORMS?t.translate=function(e,t,n){e.style.transform=\"translate(\"+Math.round(t)+\"px, \"+Math.round(n)+\"px)\"}:t.translate=function(e,t,n){e.style.top=Math.round(n)+\"px\",e.style.left=Math.round(t)+\"px\"}})),ace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"],(function(e,t,n){\"use strict\";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}})),ace.define(\"ace/lib/keys\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\"],(function(e,t,n){\"use strict\";var i=e(\"./oop\"),r=function(){var e,t,n={MODIFIER_KEYS:{16:\"Shift\",17:\"Ctrl\",18:\"Alt\",224:\"Meta\",91:\"MetaLeft\",92:\"MetaRight\",93:\"ContextMenu\"},KEY_MODS:{ctrl:1,alt:2,option:2,shift:4,super:8,meta:8,command:8,cmd:8},FUNCTION_KEYS:{8:\"Backspace\",9:\"Tab\",13:\"Return\",19:\"Pause\",27:\"Esc\",32:\"Space\",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"Left\",38:\"Up\",39:\"Right\",40:\"Down\",44:\"Print\",45:\"Insert\",46:\"Delete\",96:\"Numpad0\",97:\"Numpad1\",98:\"Numpad2\",99:\"Numpad3\",100:\"Numpad4\",101:\"Numpad5\",102:\"Numpad6\",103:\"Numpad7\",104:\"Numpad8\",105:\"Numpad9\",\"-13\":\"NumpadEnter\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",116:\"F5\",117:\"F6\",118:\"F7\",119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"Numlock\",145:\"Scrolllock\"},PRINTABLE_KEYS:{32:\" \",48:\"0\",49:\"1\",50:\"2\",51:\"3\",52:\"4\",53:\"5\",54:\"6\",55:\"7\",56:\"8\",57:\"9\",59:\";\",61:\"=\",65:\"a\",66:\"b\",67:\"c\",68:\"d\",69:\"e\",70:\"f\",71:\"g\",72:\"h\",73:\"i\",74:\"j\",75:\"k\",76:\"l\",77:\"m\",78:\"n\",79:\"o\",80:\"p\",81:\"q\",82:\"r\",83:\"s\",84:\"t\",85:\"u\",86:\"v\",87:\"w\",88:\"x\",89:\"y\",90:\"z\",107:\"+\",109:\"-\",110:\".\",186:\";\",187:\"=\",188:\",\",189:\"-\",190:\".\",191:\"/\",192:\"`\",219:\"[\",220:\"\\\\\",221:\"]\",222:\"'\",111:\"/\",106:\"*\"}};for(t in n.FUNCTION_KEYS)e=n.FUNCTION_KEYS[t].toLowerCase(),n[e]=parseInt(t,10);for(t in n.PRINTABLE_KEYS)e=n.PRINTABLE_KEYS[t].toLowerCase(),n[e]=parseInt(t,10);return i.mixin(n,n.MODIFIER_KEYS),i.mixin(n,n.PRINTABLE_KEYS),i.mixin(n,n.FUNCTION_KEYS),n.enter=n.return,n.escape=n.esc,n.del=n.delete,n[173]=\"-\",function(){for(var e=[\"cmd\",\"ctrl\",\"alt\",\"shift\"],t=Math.pow(2,e.length);t--;)n.KEY_MODS[t]=e.filter((function(e){return t&n.KEY_MODS[e]})).join(\"-\")+\"-\"}(),n.KEY_MODS[0]=\"\",n.KEY_MODS[-1]=\"input-\",n}();i.mixin(t,r),t.keyCodeToString=function(e){var t=r[e];return\"string\"!=typeof t&&(t=String.fromCharCode(e)),t.toLowerCase()}})),ace.define(\"ace/lib/event\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"],(function(e,t,n){\"use strict\";var i=e(\"./keys\"),r=e(\"./useragent\"),o=null,s=0;t.addListener=function(e,t,n){if(e.addEventListener)return e.addEventListener(t,n,!1);if(e.attachEvent){var i=function(){n.call(e,window.event)};n._wrapper=i,e.attachEvent(\"on\"+t,i)}},t.removeListener=function(e,t,n){if(e.removeEventListener)return e.removeEventListener(t,n,!1);e.detachEvent&&e.detachEvent(\"on\"+t,n._wrapper||n)},t.stopEvent=function(e){return t.stopPropagation(e),t.preventDefault(e),!1},t.stopPropagation=function(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},t.preventDefault=function(e){e.preventDefault?e.preventDefault():e.returnValue=!1},t.getButton=function(e){return\"dblclick\"==e.type?0:\"contextmenu\"==e.type||r.isMac&&e.ctrlKey&&!e.altKey&&!e.shiftKey?2:e.preventDefault?e.button:{1:0,2:2,4:1}[e.button]},t.capture=function(e,n,i){function r(e){n&&n(e),i&&i(e),t.removeListener(document,\"mousemove\",n,!0),t.removeListener(document,\"mouseup\",r,!0),t.removeListener(document,\"dragstart\",r,!0)}return t.addListener(document,\"mousemove\",n,!0),t.addListener(document,\"mouseup\",r,!0),t.addListener(document,\"dragstart\",r,!0),r},t.addMouseWheelListener=function(e,n){\"onmousewheel\"in e?t.addListener(e,\"mousewheel\",(function(e){void 0!==e.wheelDeltaX?(e.wheelX=-e.wheelDeltaX/8,e.wheelY=-e.wheelDeltaY/8):(e.wheelX=0,e.wheelY=-e.wheelDelta/8),n(e)})):\"onwheel\"in e?t.addListener(e,\"wheel\",(function(e){switch(e.deltaMode){case e.DOM_DELTA_PIXEL:e.wheelX=.35*e.deltaX||0,e.wheelY=.35*e.deltaY||0;break;case e.DOM_DELTA_LINE:case e.DOM_DELTA_PAGE:e.wheelX=5*(e.deltaX||0),e.wheelY=5*(e.deltaY||0)}n(e)})):t.addListener(e,\"DOMMouseScroll\",(function(e){e.axis&&e.axis==e.HORIZONTAL_AXIS?(e.wheelX=5*(e.detail||0),e.wheelY=0):(e.wheelX=0,e.wheelY=5*(e.detail||0)),n(e)}))},t.addMultiMouseDownListener=function(e,n,i,o){var s,a,c,l=0,u={2:\"dblclick\",3:\"tripleclick\",4:\"quadclick\"};function h(e){if(0!==t.getButton(e)?l=0:e.detail>1?++l>4&&(l=1):l=1,r.isIE){var h=Math.abs(e.clientX-s)>5||Math.abs(e.clientY-a)>5;c&&!h||(l=1),c&&clearTimeout(c),c=setTimeout((function(){c=null}),n[l-1]||600),1==l&&(s=e.clientX,a=e.clientY)}if(e._clicks=l,i[o](\"mousedown\",e),l>4)l=0;else if(l>1)return i[o](u[l],e)}function d(e){l=2,c&&clearTimeout(c),c=setTimeout((function(){c=null}),n[l-1]||600),i[o](\"mousedown\",e),i[o](u[l],e)}Array.isArray(e)||(e=[e]),e.forEach((function(e){t.addListener(e,\"mousedown\",h),r.isOldIE&&t.addListener(e,\"dblclick\",d)}))};var a=!r.isMac||!r.isOpera||\"KeyboardEvent\"in window?function(e){return 0|(e.ctrlKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.metaKey?8:0)}:function(e){return 0|(e.metaKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.ctrlKey?8:0)};function c(e,t,n){var c=a(t);if(!r.isMac&&o){if(t.getModifierState&&(t.getModifierState(\"OS\")||t.getModifierState(\"Win\"))&&(c|=8),o.altGr){if(3==(3&c))return;o.altGr=0}if(18===n||17===n){var l=\"location\"in t?t.location:t.keyLocation;if(17===n&&1===l)1==o[n]&&(s=t.timeStamp);else if(18===n&&3===c&&2===l){t.timeStamp-s<50&&(o.altGr=!0)}}}if((n in i.MODIFIER_KEYS&&(n=-1),!c&&13===n)&&(3===(l=\"location\"in t?t.location:t.keyLocation)&&(e(t,c,-n),t.defaultPrevented)))return;if(r.isChromeOS&&8&c){if(e(t,c,n),t.defaultPrevented)return;c&=-9}return!!(c||n in i.FUNCTION_KEYS||n in i.PRINTABLE_KEYS)&&e(t,c,n)}function l(){o=Object.create(null)}if(t.getModifierString=function(e){return i.KEY_MODS[a(e)]},t.addCommandKeyListener=function(e,n){var i=t.addListener;if(r.isOldGecko||r.isOpera&&!(\"KeyboardEvent\"in window)){var s=null;i(e,\"keydown\",(function(e){s=e.keyCode})),i(e,\"keypress\",(function(e){return c(n,e,s)}))}else{var a=null;i(e,\"keydown\",(function(e){o[e.keyCode]=(o[e.keyCode]||0)+1;var t=c(n,e,e.keyCode);return a=e.defaultPrevented,t})),i(e,\"keypress\",(function(e){a&&(e.ctrlKey||e.altKey||e.shiftKey||e.metaKey)&&(t.stopEvent(e),a=null)})),i(e,\"keyup\",(function(e){o[e.keyCode]=null})),o||(l(),i(window,\"focus\",l))}},\"object\"==typeof window&&window.postMessage&&!r.isOldIE){var u=1;t.nextTick=function(e,n){n=n||window;var i=\"zero-timeout-message-\"+u++,r=function(o){o.data==i&&(t.stopPropagation(o),t.removeListener(n,\"message\",r),e())};t.addListener(n,\"message\",r),n.postMessage(i,\"*\")}}t.$idleBlocked=!1,t.onIdle=function(e,n){return setTimeout((function n(){t.$idleBlocked?setTimeout(n,100):e()}),n)},t.$idleBlockId=null,t.blockIdle=function(e){t.$idleBlockId&&clearTimeout(t.$idleBlockId),t.$idleBlocked=!0,t.$idleBlockId=setTimeout((function(){t.$idleBlocked=!1}),e||100)},t.nextFrame=\"object\"==typeof window&&(window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame),t.nextFrame?t.nextFrame=t.nextFrame.bind(window):t.nextFrame=function(e){setTimeout(e,17)}})),ace.define(\"ace/range\",[\"require\",\"exports\",\"module\"],(function(e,t,n){\"use strict\";var i=function(e,t,n,i){this.start={row:e,column:t},this.end={row:n,column:i}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(e,t){return 0==this.compare(e,t)},this.compareRange=function(e){var t,n=e.end,i=e.start;return 1==(t=this.compare(n.row,n.column))?1==(t=this.compare(i.row,i.column))?2:0==t?1:0:-1==t?-2:-1==(t=this.compare(i.row,i.column))?-1:1==t?42:0},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return 0==this.comparePoint(e.start)&&0==this.comparePoint(e.end)},this.intersects=function(e){var t=this.compareRange(e);return-1==t||0==t||1==t},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){\"object\"==typeof e?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){\"object\"==typeof e?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return 0==this.compare(e,t)&&(!this.isEnd(e,t)&&!this.isStart(e,t))},this.insideStart=function(e,t){return 0==this.compare(e,t)&&!this.isEnd(e,t)},this.insideEnd=function(e,t){return 0==this.compare(e,t)&&!this.isStart(e,t)},this.compare=function(e,t){return this.isMultiLine()||e!==this.start.row?ethis.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0:tthis.end.column?1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.rowt)var r={row:t+1,column:0};else if(this.start.row0;)1&t&&(n+=e),(t>>=1)&&(e+=e);return n};var i=/^\\s\\s*/,r=/\\s\\s*$/;t.stringTrimLeft=function(e){return e.replace(i,\"\")},t.stringTrimRight=function(e){return e.replace(r,\"\")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){for(var t=[],n=0,i=e.length;nDate.now()-50)||(i=!1)},cancel:function(){i=Date.now()}}})),ace.define(\"ace/keyboard/textinput\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/clipboard\",\"ace/lib/keys\"],(function(e,t,n){\"use strict\";var i=e(\"../lib/event\"),r=e(\"../lib/useragent\"),o=e(\"../lib/dom\"),s=e(\"../lib/lang\"),a=e(\"../clipboard\"),c=r.isChrome<18,l=r.isIE,u=r.isChrome>63,h=e(\"../lib/keys\"),d=h.KEY_MODS,p=r.isIOS,m=p?/\\s/:/\\n/;t.TextInput=function(e,t){var n=o.createElement(\"textarea\");n.className=\"ace_text-input\",n.setAttribute(\"wrap\",\"off\"),n.setAttribute(\"autocorrect\",\"off\"),n.setAttribute(\"autocapitalize\",\"off\"),n.setAttribute(\"spellcheck\",!1),n.style.opacity=\"0\",e.insertBefore(n,e.firstChild);var f=!1,g=!1,v=!1,_=!1,E=\"\";r.isMobile||(n.style.fontSize=\"1px\");var C=!1,A=!1,R=\"\",S=0,y=0,T=0;try{var b=document.activeElement===n}catch(e){}i.addListener(n,\"blur\",(function(e){A||(t.onBlur(e),b=!1)})),i.addListener(n,\"focus\",(function(e){if(!A){if(b=!0,r.isEdge)try{if(!document.hasFocus())return}catch(e){}t.onFocus(e),r.isEdge?setTimeout(w):w()}})),this.$focusScroll=!1,this.focus=function(){if(E||u||\"browser\"==this.$focusScroll)return n.focus({preventScroll:!0});var e=n.style.top;n.style.position=\"fixed\",n.style.top=\"0px\";try{var t=0!=n.getBoundingClientRect().top}catch(e){return}var i=[];if(t)for(var r=n.parentElement;r&&1==r.nodeType;)i.push(r),r.setAttribute(\"ace_nocontext\",!0),r=!r.parentElement&&r.getRootNode?r.getRootNode().host:r.parentElement;n.focus({preventScroll:!0}),t&&i.forEach((function(e){e.removeAttribute(\"ace_nocontext\")})),setTimeout((function(){n.style.position=\"\",\"0px\"==n.style.top&&(n.style.top=e)}),0)},this.blur=function(){n.blur()},this.isFocused=function(){return b},t.on(\"beforeEndOperation\",(function(){t.curOp&&\"insertstring\"==t.curOp.command.name||(v&&(R=n.value=\"\",k()),w())}));var w=p?function(e){if(b&&(!f||e)&&!_){e||(e=\"\");var i=\"\\n ab\"+e+\"cde fg\\n\";i!=n.value&&(n.value=R=i);var r=4+(e.length||(t.selection.isEmpty()?0:1));4==S&&y==r||n.setSelectionRange(4,r),S=4,y=r}}:function(){if(!v&&!_&&(b||L)){v=!0;var e=t.selection,i=e.getRange(),r=e.cursor.row,o=i.start.column,s=i.end.column,a=t.session.getLine(r);if(i.start.row!=r){var c=t.session.getLine(r-1);o=i.start.rowr+1?l.length:s,s+=a.length+1,a=a+\"\\n\"+l}a.length>400&&(o<400&&s<400?a=a.slice(0,400):(a=\"\\n\",o=0,s=1));var u=a+\"\\n\\n\";if(u!=R&&(n.value=R=u,S=y=u.length),L&&(S=n.selectionStart,y=n.selectionEnd),y!=s||S!=o||n.selectionEnd!=y)try{n.setSelectionRange(o,s),S=o,y=s}catch(e){}v=!1}};b&&t.onFocus();var x=null;this.setInputHandler=function(e){x=e},this.getInputHandler=function(){return x};var L=!1,I=function(e,i){if(L&&(L=!1),g)return w(),e&&t.onPaste(e),g=!1,\"\";for(var r=n.selectionStart,o=n.selectionEnd,s=S,a=R.length-y,c=e,l=e.length-r,u=e.length-o,h=0;s>0&&R[h]==e[h];)h++,s--;for(c=c.slice(h),h=1;a>0&&R.length-h>S-1&&R[R.length-h]==e[e.length-h];)h++,a--;l-=h-1,u-=h-1;var d=c.length-h+1;return d<0&&(s=-d,d=0),c=c.slice(0,d),i||c||l||s||a||u?(_=!0,c&&!s&&!a&&!l&&!u||C?t.onTextInput(c):t.onTextInput(c,{extendLeft:s,extendRight:a,restoreStart:l,restoreEnd:u}),_=!1,R=e,S=r,y=o,T=u,c):\"\"},O=function(e){if(v)return $();if(e&&e.inputType){if(\"historyUndo\"==e.inputType)return t.execCommand(\"undo\");if(\"historyRedo\"==e.inputType)return t.execCommand(\"redo\")}var i=n.value,r=I(i,!0);(i.length>500||m.test(r))&&w()},F=function(e,t,n){var i=e.clipboardData||window.clipboardData;if(i&&!c){var r=l||n?\"Text\":\"text/plain\";try{return t?!1!==i.setData(r,t):i.getData(r)}catch(e){if(!n)return F(e,t,!0)}}},M=function(e,r){var o=t.getCopyText();if(!o)return i.preventDefault(e);F(e,o)?(p&&(w(o),f=o,setTimeout((function(){f=!1}),10)),r?t.onCut():t.onCopy(),i.preventDefault(e)):(f=!0,n.value=o,n.select(),setTimeout((function(){f=!1,w(),r?t.onCut():t.onCopy()})))},N=function(e){M(e,!0)},P=function(e){M(e,!1)},B=function(e){var o=F(e);a.pasteCancelled()||(\"string\"==typeof o?(o&&t.onPaste(o,e),r.isIE&&setTimeout(w),i.preventDefault(e)):(n.value=\"\",g=!0))};i.addCommandKeyListener(n,t.onCommandKey.bind(t)),i.addListener(n,\"select\",(function(e){v||(f?f=!1:function(e){return 0===e.selectionStart&&e.selectionEnd>=R.length&&e.value===R&&R&&e.selectionEnd!==y}(n)&&(t.selectAll(),w()))})),i.addListener(n,\"input\",O),i.addListener(n,\"cut\",N),i.addListener(n,\"copy\",P),i.addListener(n,\"paste\",B),\"oncut\"in n&&\"oncopy\"in n&&\"onpaste\"in n||i.addListener(e,\"keydown\",(function(e){if((!r.isMac||e.metaKey)&&e.ctrlKey)switch(e.keyCode){case 67:P(e);break;case 86:B(e);break;case 88:N(e)}}));var $=function(){if(v&&t.onCompositionUpdate&&!t.$readOnly){if(C)return D();if(v.useTextareaForIME)t.onCompositionUpdate(n.value);else{var e=n.value;I(e),v.markerRange&&(v.context&&(v.markerRange.start.column=v.selectionStart=v.context.compositionStartOffset),v.markerRange.end.column=v.markerRange.start.column+y-v.selectionStart+T)}}},k=function(e){t.onCompositionEnd&&!t.$readOnly&&(v=!1,t.onCompositionEnd(),t.off(\"mousedown\",D),e&&O())};function D(){A=!0,n.blur(),n.focus(),A=!1}var U,G=s.delayedCall($,50).schedule.bind(null,null);function W(){clearTimeout(U),U=setTimeout((function(){E&&(n.style.cssText=E,E=\"\"),t.renderer.$isMousePressed=!1,t.renderer.$keepTextAreaAtCursor&&t.renderer.$moveTextAreaToCursor()}),0)}i.addListener(n,\"compositionstart\",(function(e){if(!v&&t.onCompositionStart&&!t.$readOnly&&(v={},!C)){setTimeout($,0),t.on(\"mousedown\",D);var i=t.getSelectionRange();i.end.row=i.start.row,i.end.column=i.start.column,v.markerRange=i,v.selectionStart=S,t.onCompositionStart(v),v.useTextareaForIME?(n.value=\"\",R=\"\",S=0,y=0):(n.msGetInputContext&&(v.context=n.msGetInputContext()),n.getInputContext&&(v.context=n.getInputContext()))}})),i.addListener(n,\"compositionupdate\",$),i.addListener(n,\"keyup\",(function(e){27==e.keyCode&&n.value.lengthy&&\"\\n\"==R[o]?s=h.end:iy&&R.slice(0,o).split(\"\\n\").length>2?s=h.down:o>y&&\" \"==R[o-1]?(s=h.right,a=d.option):(o>y||o==y&&y!=S&&i==o)&&(s=h.right),i!==o&&(a|=d.shift),s){if(!t.onCommandKey({},a,s)&&t.commands){s=h.keyCodeToString(s);var c=t.commands.findKeyCommand(a,s);c&&t.execCommand(c)}S=i,y=o,w(\"\")}}};document.addEventListener(\"selectionchange\",o),t.on(\"destroy\",(function(){document.removeEventListener(\"selectionchange\",o)}))}(0,t,n)}})),ace.define(\"ace/mouse/default_handlers\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"],(function(e,t,n){\"use strict\";var i=e(\"../lib/useragent\");function r(e){e.$clickSelection=null;var t=e.editor;t.setDefaultHandler(\"mousedown\",this.onMouseDown.bind(e)),t.setDefaultHandler(\"dblclick\",this.onDoubleClick.bind(e)),t.setDefaultHandler(\"tripleclick\",this.onTripleClick.bind(e)),t.setDefaultHandler(\"quadclick\",this.onQuadClick.bind(e)),t.setDefaultHandler(\"mousewheel\",this.onMouseWheel.bind(e));[\"select\",\"startSelect\",\"selectEnd\",\"selectAllEnd\",\"selectByWordsEnd\",\"selectByLinesEnd\",\"dragWait\",\"dragWaitEnd\",\"focusWait\"].forEach((function(t){e[t]=this[t]}),this),e.selectByLines=this.extendSelectionBy.bind(e,\"getLineRange\"),e.selectByWords=this.extendSelectionBy.bind(e,\"getWordRange\")}function o(e,t){if(e.start.row==e.end.row)var n=2*t.column-e.start.column-e.end.column;else if(e.start.row!=e.end.row-1||e.start.column||e.end.column)n=2*t.row-e.start.row-e.end.row;else var n=t.column-4;return n<0?{cursor:e.start,anchor:e.end}:{cursor:e.end,anchor:e.start}}(function(){this.onMouseDown=function(e){var t=e.inSelection(),n=e.getDocumentPosition();this.mousedownEvent=e;var r=this.editor,o=e.getButton();return 0!==o?((r.getSelectionRange().isEmpty()||1==o)&&r.selection.moveToPosition(n),void(2==o&&(r.textInput.onContextMenu(e.domEvent),i.isMozilla||e.preventDefault()))):(this.mousedownEvent.time=Date.now(),!t||r.isFocused()||(r.focus(),!this.$focusTimeout||this.$clickSelection||r.inMultiSelectMode)?(this.captureMouse(e),this.startSelect(n,e.domEvent._clicks>1),e.preventDefault()):(this.setState(\"focusWait\"),void this.captureMouse(e)))},this.startSelect=function(e,t){e=e||this.editor.renderer.screenToTextCoordinates(this.x,this.y);var n=this.editor;this.mousedownEvent&&(this.mousedownEvent.getShiftKey()?n.selection.selectToPosition(e):t||n.selection.moveToPosition(e),t||this.select(),n.renderer.scroller.setCapture&&n.renderer.scroller.setCapture(),n.setStyle(\"ace_selecting\"),this.setState(\"select\"))},this.select=function(){var e,t=this.editor,n=t.renderer.screenToTextCoordinates(this.x,this.y);if(this.$clickSelection){var i=this.$clickSelection.comparePoint(n);if(-1==i)e=this.$clickSelection.end;else if(1==i)e=this.$clickSelection.start;else{var r=o(this.$clickSelection,n);n=r.cursor,e=r.anchor}t.selection.setSelectionAnchor(e.row,e.column)}t.selection.selectToPosition(n),t.renderer.scrollCursorIntoView()},this.extendSelectionBy=function(e){var t,n=this.editor,i=n.renderer.screenToTextCoordinates(this.x,this.y),r=n.selection[e](i.row,i.column);if(this.$clickSelection){var s=this.$clickSelection.comparePoint(r.start),a=this.$clickSelection.comparePoint(r.end);if(-1==s&&a<=0)t=this.$clickSelection.end,r.end.row==i.row&&r.end.column==i.column||(i=r.start);else if(1==a&&s>=0)t=this.$clickSelection.start,r.start.row==i.row&&r.start.column==i.column||(i=r.end);else if(-1==s&&1==a)i=r.end,t=r.start;else{var c=o(this.$clickSelection,i);i=c.cursor,t=c.anchor}n.selection.setSelectionAnchor(t.row,t.column)}n.selection.selectToPosition(i),n.renderer.scrollCursorIntoView()},this.selectEnd=this.selectAllEnd=this.selectByWordsEnd=this.selectByLinesEnd=function(){this.$clickSelection=null,this.editor.unsetStyle(\"ace_selecting\"),this.editor.renderer.scroller.releaseCapture&&this.editor.renderer.scroller.releaseCapture()},this.focusWait=function(){var e,t,n,i,r=(e=this.mousedownEvent.x,t=this.mousedownEvent.y,n=this.x,i=this.y,Math.sqrt(Math.pow(n-e,2)+Math.pow(i-t,2))),o=Date.now();(r>0||o-this.mousedownEvent.time>this.$focusTimeout)&&this.startSelect(this.mousedownEvent.getDocumentPosition())},this.onDoubleClick=function(e){var t=e.getDocumentPosition(),n=this.editor,i=n.session.getBracketRange(t);i?(i.isEmpty()&&(i.start.column--,i.end.column++),this.setState(\"select\")):(i=n.selection.getWordRange(t.row,t.column),this.setState(\"selectByWords\")),this.$clickSelection=i,this.select()},this.onTripleClick=function(e){var t=e.getDocumentPosition(),n=this.editor;this.setState(\"selectByLines\");var i=n.getSelectionRange();i.isMultiLine()&&i.contains(t.row,t.column)?(this.$clickSelection=n.selection.getLineRange(i.start.row),this.$clickSelection.end=n.selection.getLineRange(i.end.row).end):this.$clickSelection=n.selection.getLineRange(t.row),this.select()},this.onQuadClick=function(e){var t=this.editor;t.selectAll(),this.$clickSelection=t.getSelectionRange(),this.setState(\"selectAll\")},this.onMouseWheel=function(e){if(!e.getAccelKey()){e.getShiftKey()&&e.wheelY&&!e.wheelX&&(e.wheelX=e.wheelY,e.wheelY=0);var t=this.editor;this.$lastScroll||(this.$lastScroll={t:0,vx:0,vy:0,allowed:0});var n=this.$lastScroll,i=e.domEvent.timeStamp,r=i-n.t,o=r?e.wheelX/r:n.vx,s=r?e.wheelY/r:n.vy;r<550&&(o=(o+n.vx)/2,s=(s+n.vy)/2);var a=Math.abs(o/s),c=!1;if(a>=1&&t.renderer.isScrollableBy(e.wheelX*e.speed,0)&&(c=!0),a<=1&&t.renderer.isScrollableBy(0,e.wheelY*e.speed)&&(c=!0),c)n.allowed=i;else if(i-n.allowed<550){Math.abs(o)<=1.5*Math.abs(n.vx)&&Math.abs(s)<=1.5*Math.abs(n.vy)?(c=!0,n.allowed=i):n.allowed=0}return n.t=i,n.vx=o,n.vy=s,c?(t.renderer.scrollBy(e.wheelX*e.speed,e.wheelY*e.speed),e.stop()):void 0}}}).call(r.prototype),t.DefaultHandlers=r})),ace.define(\"ace/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\"],(function(e,t,n){\"use strict\";e(\"./lib/oop\");var i=e(\"./lib/dom\");function r(e){this.isOpen=!1,this.$element=null,this.$parentNode=e}(function(){this.$init=function(){return this.$element=i.createElement(\"div\"),this.$element.className=\"ace_tooltip\",this.$element.style.display=\"none\",this.$parentNode.appendChild(this.$element),this.$element},this.getElement=function(){return this.$element||this.$init()},this.setText=function(e){this.getElement().textContent=e},this.setHtml=function(e){this.getElement().innerHTML=e},this.setPosition=function(e,t){this.getElement().style.left=e+\"px\",this.getElement().style.top=t+\"px\"},this.setClassName=function(e){i.addCssClass(this.getElement(),e)},this.show=function(e,t,n){null!=e&&this.setText(e),null!=t&&null!=n&&this.setPosition(t,n),this.isOpen||(this.getElement().style.display=\"block\",this.isOpen=!0)},this.hide=function(){this.isOpen&&(this.getElement().style.display=\"none\",this.isOpen=!1)},this.getHeight=function(){return this.getElement().offsetHeight},this.getWidth=function(){return this.getElement().offsetWidth},this.destroy=function(){this.isOpen=!1,this.$element&&this.$element.parentNode&&this.$element.parentNode.removeChild(this.$element)}}).call(r.prototype),t.Tooltip=r})),ace.define(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event\",\"ace/tooltip\"],(function(e,t,n){\"use strict\";var i=e(\"../lib/dom\"),r=e(\"../lib/oop\"),o=e(\"../lib/event\"),s=e(\"../tooltip\").Tooltip;function a(e){s.call(this,e)}r.inherits(a,s),function(){this.setPosition=function(e,t){var n=window.innerWidth||document.documentElement.clientWidth,i=window.innerHeight||document.documentElement.clientHeight,r=this.getWidth(),o=this.getHeight();(e+=15)+r>n&&(e-=e+r-n),(t+=15)+o>i&&(t-=20+o),s.prototype.setPosition.call(this,e,t)}}.call(a.prototype),t.GutterHandler=function(e){var t,n,r,s=e.editor,c=s.renderer.$gutterLayer,l=new a(s.container);function u(){t&&(t=clearTimeout(t)),r&&(l.hide(),r=null,s._signal(\"hideGutterTooltip\",l),s.removeEventListener(\"mousewheel\",u))}function h(e){l.setPosition(e.x,e.y)}e.editor.setDefaultHandler(\"guttermousedown\",(function(t){if(s.isFocused()&&0==t.getButton()&&\"foldWidgets\"!=c.getRegion(t)){var n=t.getDocumentPosition().row,i=s.session.selection;if(t.getShiftKey())i.selectTo(n,0);else{if(2==t.domEvent.detail)return s.selectAll(),t.preventDefault();e.$clickSelection=s.selection.getLineRange(n)}return e.setState(\"selectByLines\"),e.captureMouse(t),t.preventDefault()}})),e.editor.setDefaultHandler(\"guttermousemove\",(function(o){var a=o.domEvent.target||o.domEvent.srcElement;if(i.hasCssClass(a,\"ace_fold-widget\"))return u();r&&e.$tooltipFollowsMouse&&h(o),n=o,t||(t=setTimeout((function(){t=null,n&&!e.isMousePressed?function(){var t=n.getDocumentPosition().row,i=c.$annotations[t];if(!i)return u();if(t==s.session.getLength()){var o=s.renderer.pixelToScreenCoordinates(0,n.y).row,a=n.$pos;if(o>s.session.documentToScreenRow(a.row,a.column))return u()}if(r!=i)if(r=i.text.join(\"
                      \"),l.setHtml(r),l.show(),s._signal(\"showGutterTooltip\",l),s.on(\"mousewheel\",u),e.$tooltipFollowsMouse)h(n);else{var d=n.domEvent.target.getBoundingClientRect(),p=l.getElement().style;p.left=d.right+\"px\",p.top=d.bottom+\"px\"}}():u()}),50))})),o.addListener(s.renderer.$gutter,\"mouseout\",(function(e){n=null,r&&!t&&(t=setTimeout((function(){t=null,u()}),50))})),s.on(\"changeSession\",u)}})),ace.define(\"ace/mouse/mouse_event\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"],(function(e,t,n){\"use strict\";var i=e(\"../lib/event\"),r=e(\"../lib/useragent\"),o=t.MouseEvent=function(e,t){this.domEvent=e,this.editor=t,this.x=this.clientX=e.clientX,this.y=this.clientY=e.clientY,this.$pos=null,this.$inSelection=null,this.propagationStopped=!1,this.defaultPrevented=!1};(function(){this.stopPropagation=function(){i.stopPropagation(this.domEvent),this.propagationStopped=!0},this.preventDefault=function(){i.preventDefault(this.domEvent),this.defaultPrevented=!0},this.stop=function(){this.stopPropagation(),this.preventDefault()},this.getDocumentPosition=function(){return this.$pos||(this.$pos=this.editor.renderer.screenToTextCoordinates(this.clientX,this.clientY)),this.$pos},this.inSelection=function(){if(null!==this.$inSelection)return this.$inSelection;var e=this.editor.getSelectionRange();if(e.isEmpty())this.$inSelection=!1;else{var t=this.getDocumentPosition();this.$inSelection=e.contains(t.row,t.column)}return this.$inSelection},this.getButton=function(){return i.getButton(this.domEvent)},this.getShiftKey=function(){return this.domEvent.shiftKey},this.getAccelKey=r.isMac?function(){return this.domEvent.metaKey}:function(){return this.domEvent.ctrlKey}}).call(o.prototype)})),ace.define(\"ace/mouse/dragdrop_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"],(function(e,t,n){\"use strict\";var i=e(\"../lib/dom\"),r=e(\"../lib/event\"),o=e(\"../lib/useragent\");function s(e){var t=e.editor,n=i.createElement(\"img\");n.src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\",o.isOpera&&(n.style.cssText=\"width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;\");[\"dragWait\",\"dragWaitEnd\",\"startDrag\",\"dragReadyEnd\",\"onMouseDrag\"].forEach((function(t){e[t]=this[t]}),this),t.addEventListener(\"mousedown\",this.onMouseDown.bind(e));var s,c,l,u,h,d,p,m,f,g,v,_=t.container,E=0;function C(){var e=d;(function(e,n){var i=Date.now(),r=!n||e.row!=n.row,o=!n||e.column!=n.column;!g||r||o?(t.moveCursorToPosition(e),g=i,v={x:c,y:l}):a(v.x,v.y,c,l)>5?g=null:i-g>=200&&(t.renderer.scrollCursorIntoView(),g=null)})(d=t.renderer.screenToTextCoordinates(c,l),e),function(e,n){var i=Date.now(),r=t.renderer.layerConfig.lineHeight,o=t.renderer.layerConfig.characterWidth,s=t.renderer.scroller.getBoundingClientRect(),a={x:{left:c-s.left,right:s.right-c},y:{top:l-s.top,bottom:s.bottom-l}},u=Math.min(a.x.left,a.x.right),h=Math.min(a.y.top,a.y.bottom),d={row:e.row,column:e.column};u/o<=2&&(d.column+=a.x.left=200&&t.renderer.scrollCursorIntoView(d):f=i:f=null}(d,e)}function A(){h=t.selection.toOrientedRange(),s=t.session.addMarker(h,\"ace_selection\",t.getSelectionStyle()),t.clearSelection(),t.isFocused()&&t.renderer.$cursorLayer.setBlinking(!1),clearInterval(u),C(),u=setInterval(C,20),E=0,r.addListener(document,\"mousemove\",y)}function R(){clearInterval(u),t.session.removeMarker(s),s=null,t.selection.fromOrientedRange(h),t.isFocused()&&!m&&t.$resetCursorStyle(),h=null,d=null,E=0,f=null,g=null,r.removeListener(document,\"mousemove\",y)}this.onDragStart=function(e){if(this.cancelDrag||!_.draggable){var i=this;return setTimeout((function(){i.startSelect(),i.captureMouse(e)}),0),e.preventDefault()}h=t.getSelectionRange();var r=e.dataTransfer;r.effectAllowed=t.getReadOnly()?\"copy\":\"copyMove\",o.isOpera&&(t.container.appendChild(n),n.scrollTop=0),r.setDragImage&&r.setDragImage(n,0,0),o.isOpera&&t.container.removeChild(n),r.clearData(),r.setData(\"Text\",t.session.getTextRange()),m=!0,this.setState(\"drag\")},this.onDragEnd=function(e){if(_.draggable=!1,m=!1,this.setState(null),!t.getReadOnly()){var n=e.dataTransfer.dropEffect;p||\"move\"!=n||t.session.remove(t.getSelectionRange()),t.$resetCursorStyle()}this.editor.unsetStyle(\"ace_dragging\"),this.editor.renderer.setCursorStyle(\"\")},this.onDragEnter=function(e){if(!t.getReadOnly()&&T(e.dataTransfer))return c=e.clientX,l=e.clientY,s||A(),E++,e.dataTransfer.dropEffect=p=b(e),r.preventDefault(e)},this.onDragOver=function(e){if(!t.getReadOnly()&&T(e.dataTransfer))return c=e.clientX,l=e.clientY,s||(A(),E++),null!==S&&(S=null),e.dataTransfer.dropEffect=p=b(e),r.preventDefault(e)},this.onDragLeave=function(e){if(--E<=0&&s)return R(),p=null,r.preventDefault(e)},this.onDrop=function(e){if(d){var n=e.dataTransfer;if(m)switch(p){case\"move\":h=h.contains(d.row,d.column)?{start:d,end:d}:t.moveText(h,d);break;case\"copy\":h=t.moveText(h,d,!0)}else{var i=n.getData(\"Text\");h={start:d,end:t.session.insert(d,i)},t.focus(),p=null}return R(),r.preventDefault(e)}},r.addListener(_,\"dragstart\",this.onDragStart.bind(e)),r.addListener(_,\"dragend\",this.onDragEnd.bind(e)),r.addListener(_,\"dragenter\",this.onDragEnter.bind(e)),r.addListener(_,\"dragover\",this.onDragOver.bind(e)),r.addListener(_,\"dragleave\",this.onDragLeave.bind(e)),r.addListener(_,\"drop\",this.onDrop.bind(e));var S=null;function y(){null==S&&(S=setTimeout((function(){null!=S&&s&&R()}),20))}function T(e){var t=e.types;return!t||Array.prototype.some.call(t,(function(e){return\"text/plain\"==e||\"Text\"==e}))}function b(e){var t=[\"copy\",\"copymove\",\"all\",\"uninitialized\"],n=o.isMac?e.altKey:e.ctrlKey,i=\"uninitialized\";try{i=e.dataTransfer.effectAllowed.toLowerCase()}catch(e){}var r=\"none\";return n&&t.indexOf(i)>=0?r=\"copy\":[\"move\",\"copymove\",\"linkmove\",\"all\",\"uninitialized\"].indexOf(i)>=0?r=\"move\":t.indexOf(i)>=0&&(r=\"copy\"),r}}function a(e,t,n,i){return Math.sqrt(Math.pow(n-e,2)+Math.pow(i-t,2))}(function(){this.dragWait=function(){Date.now()-this.mousedownEvent.time>this.editor.getDragDelay()&&this.startDrag()},this.dragWaitEnd=function(){this.editor.container.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()),this.selectEnd()},this.dragReadyEnd=function(e){this.editor.$resetCursorStyle(),this.editor.unsetStyle(\"ace_dragging\"),this.editor.renderer.setCursorStyle(\"\"),this.dragWaitEnd()},this.startDrag=function(){this.cancelDrag=!1;var e=this.editor;e.container.draggable=!0,e.renderer.$cursorLayer.setBlinking(!1),e.setStyle(\"ace_dragging\");var t=o.isWin?\"default\":\"move\";e.renderer.setCursorStyle(t),this.setState(\"dragReady\")},this.onMouseDrag=function(e){var t=this.editor.container;o.isIE&&\"dragReady\"==this.state&&(a(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y)>3&&t.dragDrop());\"dragWait\"===this.state&&(a(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y)>0&&(t.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition())))},this.onMouseDown=function(e){if(this.$dragEnabled){this.mousedownEvent=e;var t=this.editor,n=e.inSelection(),i=e.getButton();if(1===(e.domEvent.detail||1)&&0===i&&n){if(e.editor.inMultiSelectMode&&(e.getAccelKey()||e.getShiftKey()))return;this.mousedownEvent.time=Date.now();var r=e.domEvent.target||e.domEvent.srcElement;if(\"unselectable\"in r&&(r.unselectable=\"on\"),t.getDragDelay()){if(o.isWebKit)this.cancelDrag=!0,t.container.draggable=!0;this.setState(\"dragWait\")}else this.startDrag();this.captureMouse(e,this.onMouseDrag.bind(this)),e.defaultPrevented=!0}}}}).call(s.prototype),t.DragdropHandler=s})),ace.define(\"ace/mouse/touch_handler\",[\"require\",\"exports\",\"module\",\"ace/mouse/mouse_event\",\"ace/lib/dom\"],(function(e,t,n){\"use strict\";var i=e(\"./mouse_event\").MouseEvent,r=e(\"../lib/dom\");t.addTouchListeners=function(e,t){var n,o,s,a,c,l,u,h,d,p=\"scroll\",m=0,f=0,g=0,v=0;function _(){var e=window.navigator&&window.navigator.clipboard,n=!1,i=function(i){var o,s,a=i.target.getAttribute(\"action\");if(\"more\"==a||!n)return n=!n,o=t.getCopyText(),s=t.session.getUndoManager().hasUndo(),void d.replaceChild(r.buildDom(n?[\"span\",!o&&[\"span\",{class:\"ace_mobile-button\",action:\"selectall\"},\"Select All\"],o&&[\"span\",{class:\"ace_mobile-button\",action:\"copy\"},\"Copy\"],o&&[\"span\",{class:\"ace_mobile-button\",action:\"cut\"},\"Cut\"],e&&[\"span\",{class:\"ace_mobile-button\",action:\"paste\"},\"Paste\"],s&&[\"span\",{class:\"ace_mobile-button\",action:\"undo\"},\"Undo\"],[\"span\",{class:\"ace_mobile-button\",action:\"find\"},\"Find\"],[\"span\",{class:\"ace_mobile-button\",action:\"openCommandPallete\"},\"Pallete\"]]:[\"span\"]),d.firstChild);\"paste\"==a?e.readText().then((function(e){t.execCommand(a,e)})):a&&(\"cut\"!=a&&\"copy\"!=a||(e?e.writeText(t.getCopyText()):document.execCommand(\"copy\")),t.execCommand(a)),d.firstChild.style.display=\"none\",n=!1,\"openCommandPallete\"!=a&&t.focus()};d=r.buildDom([\"div\",{class:\"ace_mobile-menu\",ontouchstart:function(e){p=\"menu\",e.stopPropagation(),e.preventDefault(),t.textInput.focus()},ontouchend:function(e){e.stopPropagation(),e.preventDefault(),i(e)},onclick:i},[\"span\"],[\"span\",{class:\"ace_mobile-button\",action:\"more\"},\"...\"]],t.container)}function E(){d||_();var e=t.selection.cursor,n=t.renderer.textToScreenCoordinates(e.row,e.column),i=t.container.getBoundingClientRect();d.style.top=n.pageY-i.top-3+\"px\",d.style.right=\"10px\",d.style.display=\"\",d.firstChild.style.display=\"none\",t.on(\"input\",C)}function C(e){d&&(d.style.display=\"none\"),t.off(\"input\",C)}function A(){c=null,clearTimeout(c);var e=t.selection.getRange(),n=e.contains(u.row,u.column);!e.isEmpty()&&n||(t.selection.moveToPosition(u),t.selection.selectWord()),p=\"wait\",E()}e.addEventListener(\"contextmenu\",(function(e){h&&t.textInput.getElement().focus()})),e.addEventListener(\"touchstart\",(function(e){var r=e.touches;if(c||r.length>1)return clearTimeout(c),c=null,s=-1,void(p=\"zoom\");h=t.$mouseHandler.isMousePressed=!0;var l=t.renderer.layerConfig.lineHeight,d=t.renderer.layerConfig.lineHeight,_=e.timeStamp;a=_;var E=r[0],C=E.clientX,R=E.clientY;Math.abs(n-C)+Math.abs(o-R)>l&&(s=-1),n=e.clientX=C,o=e.clientY=R,g=v=0;var S=new i(e,t);if(u=S.getDocumentPosition(),_-s<500&&1==r.length&&!m)f++,e.preventDefault(),e.button=0,function(){c=null,clearTimeout(c),t.selection.moveToPosition(u);var e=f>=2?t.selection.getLineRange(u.row):t.session.getBracketRange(u);e&&!e.isEmpty()?t.selection.setRange(e):t.selection.selectWord(),p=\"wait\"}();else{f=0;var y=t.selection.cursor,T=t.selection.isEmpty()?y:t.selection.anchor,b=t.renderer.$cursorLayer.getPixelPosition(y,!0),w=t.renderer.$cursorLayer.getPixelPosition(T,!0),x=t.renderer.scroller.getBoundingClientRect(),L=function(e,t){return(e/=d)*e+(t=t/l-.75)*t};if(e.clientXO?\"cursor\":\"anchor\"),p=O<3.5?\"anchor\":I<3.5?\"cursor\":\"scroll\",c=setTimeout(A,450)}s=_})),e.addEventListener(\"touchend\",(function(e){h=t.$mouseHandler.isMousePressed=!1,l&&clearInterval(l),\"zoom\"==p?(p=\"\",m=0):c?(t.selection.moveToPosition(u),m=0,E()):\"scroll\"==p?(m+=60,l=setInterval((function(){m--<=0&&(clearInterval(l),l=null),Math.abs(g)<.01&&(g=0),Math.abs(v)<.01&&(v=0),m<20&&(g*=.9),m<20&&(v*=.9);var e=t.session.getScrollTop();t.renderer.scrollBy(10*g,10*v),e==t.session.getScrollTop()&&(m=0)}),10),e.preventDefault(),C()):E(),clearTimeout(c),c=null})),e.addEventListener(\"touchmove\",(function(e){c&&(clearTimeout(c),c=null);var r=e.touches;if(!(r.length>1||\"zoom\"==p)){var s=r[0],l=n-s.clientX,u=o-s.clientY;if(\"wait\"==p){if(!(l*l+u*u>4))return e.preventDefault();p=\"cursor\"}n=s.clientX,o=s.clientY,e.clientX=s.clientX,e.clientY=s.clientY;var h=e.timeStamp,d=h-a;if(a=h,\"scroll\"==p){var m=new i(e,t);m.speed=1,m.wheelX=l,m.wheelY=u,10*Math.abs(l)1&&(r=n[n.length-2]);var s=c[t+\"Path\"];return null==s?s=c.basePath:\"/\"==i&&(t=i=\"\"),s&&\"/\"!=s.slice(-1)&&(s+=\"/\"),s+t+i+r+this.get(\"suffix\")},t.setModuleUrl=function(e,t){return c.$moduleUrls[e]=t},t.$loading={},t.loadModule=function(n,i){var r,s;Array.isArray(n)&&(s=n[0],n=n[1]);try{r=e(n)}catch(e){}if(r&&!t.$loading[n])return i&&i(r);if(t.$loading[n]||(t.$loading[n]=[]),t.$loading[n].push(i),!(t.$loading[n].length>1)){var a=function(){e([n],(function(e){t._emit(\"load.module\",{name:n,module:e});var i=t.$loading[n];t.$loading[n]=null,i.forEach((function(t){t&&t(e)}))}))};if(!t.get(\"packaged\"))return a();o.loadScript(t.moduleUrl(n,s),a),l()}};var l=function(){c.basePath||c.workerPath||c.modePath||c.themePath||Object.keys(c.$moduleUrls).length||(console.error(\"Unable to infer path to ace from script src,\",\"use ace.config.set('basePath', 'path') to enable dynamic loading of modes and themes\",\"or with webpack use ace/webpack-resolver\"),l=function(){})};function u(r){if(a&&a.document){c.packaged=r||e.packaged||i.packaged||a.define&&n(3).packaged;for(var o,s={},l=\"\",u=document.currentScript||document._currentScript,h=(u&&u.ownerDocument||document).getElementsByTagName(\"script\"),d=0;d=e){for(o=h+1;o=e;)o++;for(a=h,c=o-1;a=t.length||2!=(c=n[r-1])&&3!=c||2!=(l=t[r+1])&&3!=l?4:(o&&(l=3),l==c?l:4);case 10:return 2==(c=r>0?n[r-1]:5)&&r+10&&2==n[r-1])return 2;if(o)return 4;for(h=r+1,u=t.length;h=1425&&p<=2303||64286==p;if(c=t[h],m&&(1==c||7==c))return 1}return r<1||5==(c=t[r-1])?4:n[r-1];case 5:return o=!1,s=!0,i;case 6:return a=!0,4;case 13:case 14:case 16:case 17:case 15:o=!1;case 18:return 4}}function m(e){var t=e.charCodeAt(0),n=t>>8;return 0==n?t>191?0:u[t]:5==n?/[\\u0591-\\u05f4]/.test(e)?1:0:6==n?/[\\u0610-\\u061a\\u064b-\\u065f\\u06d6-\\u06e4\\u06e7-\\u06ed]/.test(e)?12:/[\\u0660-\\u0669\\u066b-\\u066c]/.test(e)?3:1642==t?11:/[\\u06f0-\\u06f9]/.test(e)?2:7:32==n&&t<=8287?h[255&t]:254==n&&t>=65136?7:4}t.L=0,t.R=1,t.EN=2,t.ON_R=3,t.AN=4,t.R_H=5,t.B=6,t.RLE=7,t.DOT=\"·\",t.doBidiReorder=function(e,n,u){if(e.length<2)return{};var h=e.split(\"\"),f=new Array(h.length),g=new Array(h.length),v=[];i=u?1:0,function(e,t,n,u){var h=i?l:c,d=null,f=null,g=null,v=0,_=null,E=-1,C=null,A=null,R=[];if(!u)for(C=0,u=[];C0)if(16==_){for(C=E;C-1){for(C=E;C=0&&8==u[S];S--)t[S]=i}}(h,v,h.length,n);for(var _=0;_7&&n[_]<13||4===n[_]||18===n[_])?v[_]=t.ON_R:_>0&&\"ل\"===h[_-1]&&/\\u0622|\\u0623|\\u0625|\\u0627/.test(h[_])&&(v[_-1]=v[_]=t.R_H,_++);h[h.length-1]===t.DOT&&(v[h.length-1]=t.B),\"‫\"===h[0]&&(v[0]=t.RLE);for(_=0;_=0&&(e=this.session.$docRowCache[n])}return e},this.getSplitIndex=function(){var e=0,t=this.session.$screenRowCache;if(t.length)for(var n,i=this.session.$getRowCacheIndex(t,this.currentRow);this.currentRow-e>0&&(n=this.session.$getRowCacheIndex(t,this.currentRow-e-1))===i;)i=n,e++;else e=this.currentRow;return e},this.updateRowLine=function(e,t){void 0===e&&(e=this.getDocumentRow());var n=e===this.session.getLength()-1?this.EOF:this.EOL;if(this.wrapIndent=0,this.line=this.session.getLine(e),this.isRtlDir=this.$isRtl||this.line.charAt(0)===this.RLE,this.session.$useWrapMode){var o=this.session.$wrapData[e];o&&(void 0===t&&(t=this.getSplitIndex()),t>0&&o.length?(this.wrapIndent=o.indent,this.wrapOffset=this.wrapIndent*this.charWidths[i.L],this.line=tt?this.session.getOverwrite()?e:e-1:t,r=i.getVisualFromLogicalIdx(n,this.bidiMap),o=this.bidiMap.bidiLevels,s=0;!this.session.getOverwrite()&&e<=t&&o[r]%2!=0&&r++;for(var a=0;at&&o[r]%2==0&&(s+=this.charWidths[o[r]]),this.wrapIndent&&(s+=this.isRtlDir?-1*this.wrapOffset:this.wrapOffset),this.isRtlDir&&(s+=this.rtlLineOffset),s},this.getSelections=function(e,t){var n,i=this.bidiMap,r=i.bidiLevels,o=[],s=0,a=Math.min(e,t)-this.wrapIndent,c=Math.max(e,t)-this.wrapIndent,l=!1,u=!1,h=0;this.wrapIndent&&(s+=this.isRtlDir?-1*this.wrapOffset:this.wrapOffset);for(var d,p=0;p=a&&dn+o/2;){if(n+=o,i===r.length-1){o=0;break}o=this.charWidths[r[++i]]}return i>0&&r[i-1]%2!=0&&r[i]%2==0?(e0&&r[i-1]%2==0&&r[i]%2!=0?t=1+(e>n?this.bidiMap.logicalFromVisual[i]:this.bidiMap.logicalFromVisual[i-1]):this.isRtlDir&&i===r.length-1&&0===o&&r[i-1]%2==0||!this.isRtlDir&&0===i&&r[i]%2!=0?t=1+this.bidiMap.logicalFromVisual[i]:(i>0&&r[i-1]%2!=0&&0!==o&&i--,t=this.bidiMap.logicalFromVisual[i]),0===t&&this.isRtlDir&&t++,t+this.wrapIndent}}).call(s.prototype),t.BidiHandler=s})),ace.define(\"ace/selection\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/range\"],(function(e,t,n){\"use strict\";var i=e(\"./lib/oop\"),r=e(\"./lib/lang\"),o=e(\"./lib/event_emitter\").EventEmitter,s=e(\"./range\").Range,a=function(e){this.session=e,this.doc=e.getDocument(),this.clearSelection(),this.cursor=this.lead=this.doc.createAnchor(0,0),this.anchor=this.doc.createAnchor(0,0),this.$silent=!1;var t=this;this.cursor.on(\"change\",(function(e){t.$cursorChanged=!0,t.$silent||t._emit(\"changeCursor\"),t.$isEmpty||t.$silent||t._emit(\"changeSelection\"),t.$keepDesiredColumnOnChange||e.old.column==e.value.column||(t.$desiredColumn=null)})),this.anchor.on(\"change\",(function(){t.$anchorChanged=!0,t.$isEmpty||t.$silent||t._emit(\"changeSelection\")}))};(function(){i.implement(this,o),this.isEmpty=function(){return this.$isEmpty||this.anchor.row==this.lead.row&&this.anchor.column==this.lead.column},this.isMultiLine=function(){return!this.$isEmpty&&this.anchor.row!=this.cursor.row},this.getCursor=function(){return this.lead.getPosition()},this.setSelectionAnchor=function(e,t){this.$isEmpty=!1,this.anchor.setPosition(e,t)},this.getAnchor=this.getSelectionAnchor=function(){return this.$isEmpty?this.getSelectionLead():this.anchor.getPosition()},this.getSelectionLead=function(){return this.lead.getPosition()},this.isBackwards=function(){var e=this.anchor,t=this.lead;return e.row>t.row||e.row==t.row&&e.column>t.column},this.getRange=function(){var e=this.anchor,t=this.lead;return this.$isEmpty?s.fromPoints(t,t):this.isBackwards()?s.fromPoints(t,e):s.fromPoints(e,t)},this.clearSelection=function(){this.$isEmpty||(this.$isEmpty=!0,this._emit(\"changeSelection\"))},this.selectAll=function(){this.$setSelection(0,0,Number.MAX_VALUE,Number.MAX_VALUE)},this.setRange=this.setSelectionRange=function(e,t){var n=t?e.end:e.start,i=t?e.start:e.end;this.$setSelection(n.row,n.column,i.row,i.column)},this.$setSelection=function(e,t,n,i){var r=this.$isEmpty,o=this.inMultiSelectMode;this.$silent=!0,this.$cursorChanged=this.$anchorChanged=!1,this.anchor.setPosition(e,t),this.cursor.setPosition(n,i),this.$isEmpty=!s.comparePoints(this.anchor,this.cursor),this.$silent=!1,this.$cursorChanged&&this._emit(\"changeCursor\"),(this.$cursorChanged||this.$anchorChanged||r!=this.$isEmpty||o)&&this._emit(\"changeSelection\")},this.$moveSelection=function(e){var t=this.lead;this.$isEmpty&&this.setSelectionAnchor(t.row,t.column),e.call(this)},this.selectTo=function(e,t){this.$moveSelection((function(){this.moveCursorTo(e,t)}))},this.selectToPosition=function(e){this.$moveSelection((function(){this.moveCursorToPosition(e)}))},this.moveTo=function(e,t){this.clearSelection(),this.moveCursorTo(e,t)},this.moveToPosition=function(e){this.clearSelection(),this.moveCursorToPosition(e)},this.selectUp=function(){this.$moveSelection(this.moveCursorUp)},this.selectDown=function(){this.$moveSelection(this.moveCursorDown)},this.selectRight=function(){this.$moveSelection(this.moveCursorRight)},this.selectLeft=function(){this.$moveSelection(this.moveCursorLeft)},this.selectLineStart=function(){this.$moveSelection(this.moveCursorLineStart)},this.selectLineEnd=function(){this.$moveSelection(this.moveCursorLineEnd)},this.selectFileEnd=function(){this.$moveSelection(this.moveCursorFileEnd)},this.selectFileStart=function(){this.$moveSelection(this.moveCursorFileStart)},this.selectWordRight=function(){this.$moveSelection(this.moveCursorWordRight)},this.selectWordLeft=function(){this.$moveSelection(this.moveCursorWordLeft)},this.getWordRange=function(e,t){if(void 0===t){var n=e||this.lead;e=n.row,t=n.column}return this.session.getWordRange(e,t)},this.selectWord=function(){this.setSelectionRange(this.getWordRange())},this.selectAWord=function(){var e=this.getCursor(),t=this.session.getAWordRange(e.row,e.column);this.setSelectionRange(t)},this.getLineRange=function(e,t){var n,i=\"number\"==typeof e?e:this.lead.row,r=this.session.getFoldLine(i);return r?(i=r.start.row,n=r.end.row):n=i,!0===t?new s(i,0,n,this.session.getLine(n).length):new s(i,0,n+1,0)},this.selectLine=function(){this.setSelectionRange(this.getLineRange())},this.moveCursorUp=function(){this.moveCursorBy(-1,0)},this.moveCursorDown=function(){this.moveCursorBy(1,0)},this.wouldMoveIntoSoftTab=function(e,t,n){var i=e.column,r=e.column+t;return n<0&&(i=e.column-t,r=e.column),this.session.isTabStop(e)&&this.doc.getLine(e.row).slice(i,r).split(\" \").length-1==t},this.moveCursorLeft=function(){var e,t=this.lead.getPosition();if(e=this.session.getFoldAt(t.row,t.column,-1))this.moveCursorTo(e.start.row,e.start.column);else if(0===t.column)t.row>0&&this.moveCursorTo(t.row-1,this.doc.getLine(t.row-1).length);else{var n=this.session.getTabSize();this.wouldMoveIntoSoftTab(t,n,-1)&&!this.session.getNavigateWithinSoftTabs()?this.moveCursorBy(0,-n):this.moveCursorBy(0,-1)}},this.moveCursorRight=function(){var e,t=this.lead.getPosition();if(e=this.session.getFoldAt(t.row,t.column,1))this.moveCursorTo(e.end.row,e.end.column);else if(this.lead.column==this.doc.getLine(this.lead.row).length)this.lead.row0&&(t.column=i)}}this.moveCursorTo(t.row,t.column)},this.moveCursorFileEnd=function(){var e=this.doc.getLength()-1,t=this.doc.getLine(e).length;this.moveCursorTo(e,t)},this.moveCursorFileStart=function(){this.moveCursorTo(0,0)},this.moveCursorLongWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),i=n.substring(t);this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;var r=this.session.getFoldAt(e,t,1);if(r)this.moveCursorTo(r.end.row,r.end.column);else{if(this.session.nonTokenRe.exec(i)&&(t+=this.session.nonTokenRe.lastIndex,this.session.nonTokenRe.lastIndex=0,i=n.substring(t)),t>=n.length)return this.moveCursorTo(e,n.length),this.moveCursorRight(),void(e0&&this.moveCursorWordLeft());this.session.tokenRe.exec(o)&&(n-=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0),this.moveCursorTo(t,n)}},this.$shortWordEndIndex=function(e){var t,n=0,i=/\\s/,r=this.session.tokenRe;if(r.lastIndex=0,this.session.tokenRe.exec(e))n=this.session.tokenRe.lastIndex;else{for(;(t=e[n])&&i.test(t);)n++;if(n<1)for(r.lastIndex=0;(t=e[n])&&!r.test(t);)if(r.lastIndex=0,n++,i.test(t)){if(n>2){n--;break}for(;(t=e[n])&&i.test(t);)n++;if(n>2)break}}return r.lastIndex=0,n},this.moveCursorShortWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),i=n.substring(t),r=this.session.getFoldAt(e,t,1);if(r)return this.moveCursorTo(r.end.row,r.end.column);if(t==n.length){var o=this.doc.getLength();do{e++,i=this.doc.getLine(e)}while(e0&&/^\\s*$/.test(i));n=i.length,/\\s+$/.test(i)||(i=\"\")}var o=r.stringReverse(i),s=this.$shortWordEndIndex(o);return this.moveCursorTo(t,n-s)},this.moveCursorWordRight=function(){this.session.$selectLongWords?this.moveCursorLongWordRight():this.moveCursorShortWordRight()},this.moveCursorWordLeft=function(){this.session.$selectLongWords?this.moveCursorLongWordLeft():this.moveCursorShortWordLeft()},this.moveCursorBy=function(e,t){var n,i=this.session.documentToScreenPosition(this.lead.row,this.lead.column);0===t&&(0!==e&&(this.session.$bidiHandler.isBidiRow(i.row,this.lead.row)?(n=this.session.$bidiHandler.getPosLeft(i.column),i.column=Math.round(n/this.session.$bidiHandler.charWidths[0])):n=i.column*this.session.$bidiHandler.charWidths[0]),this.$desiredColumn?i.column=this.$desiredColumn:this.$desiredColumn=i.column);var r=this.session.screenToDocumentPosition(i.row+e,i.column,n);0!==e&&0===t&&r.row===this.lead.row&&r.column===this.lead.column&&this.session.lineWidgets&&this.session.lineWidgets[r.row]&&(r.row>0||e>0)&&r.row++,this.moveCursorTo(r.row,r.column+t,0===t)},this.moveCursorToPosition=function(e){this.moveCursorTo(e.row,e.column)},this.moveCursorTo=function(e,t,n){var i=this.session.getFoldAt(e,t,1);i&&(e=i.start.row,t=i.start.column),this.$keepDesiredColumnOnChange=!0;var r=this.session.getLine(e);/[\\uDC00-\\uDFFF]/.test(r.charAt(t))&&r.charAt(t-1)&&(this.lead.row==e&&this.lead.column==t+1?t-=1:t+=1),this.lead.setPosition(e,t),this.$keepDesiredColumnOnChange=!1,n||(this.$desiredColumn=null)},this.moveCursorToScreen=function(e,t,n){var i=this.session.screenToDocumentPosition(e,t);this.moveCursorTo(i.row,i.column,n)},this.detach=function(){this.lead.detach(),this.anchor.detach(),this.session=this.doc=null},this.fromOrientedRange=function(e){this.setSelectionRange(e,e.cursor==e.start),this.$desiredColumn=e.desiredColumn||this.$desiredColumn},this.toOrientedRange=function(e){var t=this.getRange();return e?(e.start.column=t.start.column,e.start.row=t.start.row,e.end.column=t.end.column,e.end.row=t.end.row):e=t,e.cursor=this.isBackwards()?e.start:e.end,e.desiredColumn=this.$desiredColumn,e},this.getRangeOfMovements=function(e){var t=this.getCursor();try{e(this);var n=this.getCursor();return s.fromPoints(t,n)}catch(e){return s.fromPoints(t,t)}finally{this.moveCursorToPosition(t)}},this.toJSON=function(){if(this.rangeCount)var e=this.ranges.map((function(e){var t=e.clone();return t.isBackwards=e.cursor==e.start,t}));else(e=this.getRange()).isBackwards=this.isBackwards();return e},this.fromJSON=function(e){if(null==e.start){if(this.rangeList&&e.length>1){this.toSingleRange(e[0]);for(var t=e.length;t--;){var n=s.fromPoints(e[t].start,e[t].end);e[t].isBackwards&&(n.cursor=n.start),this.addRange(n,!0)}return}e=e[0]}this.rangeList&&this.toSingleRange(e),this.setSelectionRange(e,e.isBackwards)},this.isEqual=function(e){if((e.length||this.rangeCount)&&e.length!=this.rangeCount)return!1;if(!e.length||!this.ranges)return this.getRange().isEqual(e);for(var t=this.ranges.length;t--;)if(!this.ranges[t].isEqual(e[t]))return!1;return!0}}).call(a.prototype),t.Selection=a})),ace.define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/config\"],(function(e,t,n){\"use strict\";var i=e(\"./config\"),r=2e3,o=function(e){for(var t in this.states=e,this.regExps={},this.matchMappings={},this.states){for(var n=this.states[t],i=[],r=0,o=this.matchMappings[t]={defaultToken:\"text\"},s=\"g\",a=[],c=0;c1?this.$applyToken:l.token),h>1&&(/\\\\\\d/.test(l.regex)?u=l.regex.replace(/\\\\([0-9]+)/g,(function(e,t){return\"\\\\\"+(parseInt(t,10)+r+1)})):(h=1,u=this.removeCapturingGroups(l.regex)),l.splitRegex||\"string\"==typeof l.token||a.push(l)),o[r]=c,r+=h,i.push(u),l.onMatch||(l.onMatch=null)}}i.length||(o[0]=0,i.push(\"$\")),a.forEach((function(e){e.splitRegex=this.createSplitterRegexp(e.regex,s)}),this),this.regExps[t]=new RegExp(\"(\"+i.join(\")|(\")+\")|($)\",s)}};(function(){this.$setMaxTokenCount=function(e){r=0|e},this.$applyToken=function(e){var t=this.splitRegex.exec(e).slice(1),n=this.token.apply(this,t);if(\"string\"==typeof n)return[{type:n,value:e}];for(var i=[],r=0,o=n.length;ru){var v=e.substring(u,g-f.length);d.type==p?d.value+=v:(d.type&&l.push(d),d={type:p,value:v})}for(var _=0;_r){for(h>2*e.length&&this.reportError(\"infinite loop with in ace tokenizer\",{startState:t,line:e});u1&&n[0]!==i&&n.unshift(\"#tmp\",i),{tokens:l,state:n.length?n:i}},this.reportError=i.reportError}).call(o.prototype),t.Tokenizer=o})),ace.define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\"],(function(e,t,n){\"use strict\";var i=e(\"../lib/lang\"),r=function(){this.$rules={start:[{token:\"empty_line\",regex:\"^$\"},{defaultToken:\"text\"}]}};(function(){this.addRules=function(e,t){if(t)for(var n in e){for(var i=e[n],r=0;r=this.$rowTokens.length;){if(this.$row+=1,e||(e=this.$session.getLength()),this.$row>=e)return this.$row=e-1,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=0}return this.$rowTokens[this.$tokenIndex]},this.getCurrentToken=function(){return this.$rowTokens[this.$tokenIndex]},this.getCurrentTokenRow=function(){return this.$row},this.getCurrentTokenColumn=function(){var e=this.$rowTokens,t=this.$tokenIndex,n=e[t].start;if(void 0!==n)return n;for(n=0;t>0;)n+=e[t-=1].value.length;return n},this.getCurrentTokenPosition=function(){return{row:this.$row,column:this.getCurrentTokenColumn()}},this.getCurrentTokenRange=function(){var e=this.$rowTokens[this.$tokenIndex],t=this.getCurrentTokenColumn();return new i(this.$row,t,this.$row,t+e.value.length)}}).call(r.prototype),t.TokenIterator=r})),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],(function(e,t,n){\"use strict\";var i,r=e(\"../../lib/oop\"),o=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,a=e(\"../../lib/lang\"),c=[\"text\",\"paren.rparen\",\"rparen\",\"paren\",\"punctuation.operator\"],l=[\"text\",\"paren.rparen\",\"rparen\",\"paren\",\"punctuation.operator\",\"comment\"],u={},h={'\"':'\"',\"'\":\"'\"},d=function(e){var t=-1;if(e.multiSelect&&(t=e.selection.index,u.rangeCount!=e.multiSelect.rangeCount&&(u={rangeCount:e.multiSelect.rangeCount})),u[t])return i=u[t];i=u[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},p=function(e,t,n,i){var r=e.end.row-e.start.row;return{text:n+t+i,selection:[0,e.start.column+1,r,e.end.column+(r?0:1)]}},m=function(e){this.add(\"braces\",\"insertion\",(function(t,n,r,o,s){var c=r.getCursorPosition(),l=o.doc.getLine(c.row);if(\"{\"==s){d(r);var u=r.getSelectionRange(),h=o.doc.getTextRange(u);if(\"\"!==h&&\"{\"!==h&&r.getWrapBehavioursEnabled())return p(u,h,\"{\",\"}\");if(m.isSaneInsertion(r,o))return/[\\]\\}\\)]/.test(l[c.column])||r.inMultiSelectMode||e&&e.braces?(m.recordAutoInsert(r,o,\"}\"),{text:\"{}\",selection:[1,1]}):(m.recordMaybeInsert(r,o,\"{\"),{text:\"{\",selection:[1,1]})}else if(\"}\"==s){if(d(r),\"}\"==l.substring(c.column,c.column+1))if(null!==o.$findOpeningBracket(\"}\",{column:c.column+1,row:c.row})&&m.isAutoInsertedClosing(c,l,s))return m.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}else{if(\"\\n\"==s||\"\\r\\n\"==s){d(r);var f=\"\";if(m.isMaybeInsertedClosing(c,l)&&(f=a.stringRepeat(\"}\",i.maybeInsertedBrackets),m.clearMaybeInsertedClosing()),\"}\"===l.substring(c.column,c.column+1)){var g=o.findMatchingBracket({row:c.row,column:c.column+1},\"}\");if(!g)return null;var v=this.$getIndent(o.getLine(g.row))}else{if(!f)return void m.clearMaybeInsertedClosing();v=this.$getIndent(l)}var _=v+o.getTabString();return{text:\"\\n\"+_+\"\\n\"+v+f,selection:[1,_.length,1,_.length]}}m.clearMaybeInsertedClosing()}})),this.add(\"braces\",\"deletion\",(function(e,t,n,r,o){var s=r.doc.getTextRange(o);if(!o.isMultiLine()&&\"{\"==s){if(d(n),\"}\"==r.doc.getLine(o.start.row).substring(o.end.column,o.end.column+1))return o.end.column++,o;i.maybeInsertedBrackets--}})),this.add(\"parens\",\"insertion\",(function(e,t,n,i,r){if(\"(\"==r){d(n);var o=n.getSelectionRange(),s=i.doc.getTextRange(o);if(\"\"!==s&&n.getWrapBehavioursEnabled())return p(o,s,\"(\",\")\");if(m.isSaneInsertion(n,i))return m.recordAutoInsert(n,i,\")\"),{text:\"()\",selection:[1,1]}}else if(\")\"==r){d(n);var a=n.getCursorPosition(),c=i.doc.getLine(a.row);if(\")\"==c.substring(a.column,a.column+1))if(null!==i.$findOpeningBracket(\")\",{column:a.column+1,row:a.row})&&m.isAutoInsertedClosing(a,c,r))return m.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}})),this.add(\"parens\",\"deletion\",(function(e,t,n,i,r){var o=i.doc.getTextRange(r);if(!r.isMultiLine()&&\"(\"==o&&(d(n),\")\"==i.doc.getLine(r.start.row).substring(r.start.column+1,r.start.column+2)))return r.end.column++,r})),this.add(\"brackets\",\"insertion\",(function(e,t,n,i,r){if(\"[\"==r){d(n);var o=n.getSelectionRange(),s=i.doc.getTextRange(o);if(\"\"!==s&&n.getWrapBehavioursEnabled())return p(o,s,\"[\",\"]\");if(m.isSaneInsertion(n,i))return m.recordAutoInsert(n,i,\"]\"),{text:\"[]\",selection:[1,1]}}else if(\"]\"==r){d(n);var a=n.getCursorPosition(),c=i.doc.getLine(a.row);if(\"]\"==c.substring(a.column,a.column+1))if(null!==i.$findOpeningBracket(\"]\",{column:a.column+1,row:a.row})&&m.isAutoInsertedClosing(a,c,r))return m.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}})),this.add(\"brackets\",\"deletion\",(function(e,t,n,i,r){var o=i.doc.getTextRange(r);if(!r.isMultiLine()&&\"[\"==o&&(d(n),\"]\"==i.doc.getLine(r.start.row).substring(r.start.column+1,r.start.column+2)))return r.end.column++,r})),this.add(\"string_dquotes\",\"insertion\",(function(e,t,n,i,r){var o=i.$mode.$quotes||h;if(1==r.length&&o[r]){if(this.lineCommentStart&&-1!=this.lineCommentStart.indexOf(r))return;d(n);var s=r,a=n.getSelectionRange(),c=i.doc.getTextRange(a);if(!(\"\"===c||1==c.length&&o[c])&&n.getWrapBehavioursEnabled())return p(a,c,s,s);if(!c){var l=n.getCursorPosition(),u=i.doc.getLine(l.row),m=u.substring(l.column-1,l.column),f=u.substring(l.column,l.column+1),g=i.getTokenAt(l.row,l.column),v=i.getTokenAt(l.row,l.column+1);if(\"\\\\\"==m&&g&&/escape/.test(g.type))return null;var _,E=g&&/string|escape/.test(g.type),C=!v||/string|escape/.test(v.type);if(f==s)(_=E!==C)&&/string\\.end/.test(v.type)&&(_=!1);else{if(E&&!C)return null;if(E&&C)return null;var A=i.$mode.tokenRe;A.lastIndex=0;var R=A.test(m);A.lastIndex=0;var S=A.test(m);if(R||S)return null;if(f&&!/[\\s;,.})\\]\\\\]/.test(f))return null;var y=u[l.column-2];if(m==s&&(y==s||A.test(y)))return null;_=!0}return{text:_?s+s:\"\",selection:[1,1]}}}})),this.add(\"string_dquotes\",\"deletion\",(function(e,t,n,i,r){var o=i.$mode.$quotes||h,s=i.doc.getTextRange(r);if(!r.isMultiLine()&&o.hasOwnProperty(s)&&(d(n),i.doc.getLine(r.start.row).substring(r.start.column+1,r.start.column+2)==s))return r.end.column++,r}))};m.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),i=new s(t,n.row,n.column);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",c)){if(/[)}\\]]/.test(e.session.getLine(n.row)[n.column]))return!0;var r=new s(t,n.row,n.column+1);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",c))return!1}return i.stepForward(),i.getCurrentTokenRow()!==n.row||this.$matchTokenType(i.getCurrentToken()||\"text\",l)},m.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},m.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),o=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,o,i.autoInsertedLineEnd[0])||(i.autoInsertedBrackets=0),i.autoInsertedRow=r.row,i.autoInsertedLineEnd=n+o.substr(r.column),i.autoInsertedBrackets++},m.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),o=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,o)||(i.maybeInsertedBrackets=0),i.maybeInsertedRow=r.row,i.maybeInsertedLineStart=o.substr(0,r.column)+n,i.maybeInsertedLineEnd=o.substr(r.column),i.maybeInsertedBrackets++},m.isAutoInsertedClosing=function(e,t,n){return i.autoInsertedBrackets>0&&e.row===i.autoInsertedRow&&n===i.autoInsertedLineEnd[0]&&t.substr(e.column)===i.autoInsertedLineEnd},m.isMaybeInsertedClosing=function(e,t){return i.maybeInsertedBrackets>0&&e.row===i.maybeInsertedRow&&t.substr(e.column)===i.maybeInsertedLineEnd&&t.substr(0,e.column)==i.maybeInsertedLineStart},m.popAutoInsertedClosing=function(){i.autoInsertedLineEnd=i.autoInsertedLineEnd.substr(1),i.autoInsertedBrackets--},m.clearMaybeInsertedClosing=function(){i&&(i.maybeInsertedBrackets=0,i.maybeInsertedRow=-1)},r.inherits(m,o),t.CstyleBehaviour=m})),ace.define(\"ace/unicode\",[\"require\",\"exports\",\"module\"],(function(e,t,n){\"use strict\";for(var i=[48,9,8,25,5,0,2,25,48,0,11,0,5,0,6,22,2,30,2,457,5,11,15,4,8,0,2,0,18,116,2,1,3,3,9,0,2,2,2,0,2,19,2,82,2,138,2,4,3,155,12,37,3,0,8,38,10,44,2,0,2,1,2,1,2,0,9,26,6,2,30,10,7,61,2,9,5,101,2,7,3,9,2,18,3,0,17,58,3,100,15,53,5,0,6,45,211,57,3,18,2,5,3,11,3,9,2,1,7,6,2,2,2,7,3,1,3,21,2,6,2,0,4,3,3,8,3,1,3,3,9,0,5,1,2,4,3,11,16,2,2,5,5,1,3,21,2,6,2,1,2,1,2,1,3,0,2,4,5,1,3,2,4,0,8,3,2,0,8,15,12,2,2,8,2,2,2,21,2,6,2,1,2,4,3,9,2,2,2,2,3,0,16,3,3,9,18,2,2,7,3,1,3,21,2,6,2,1,2,4,3,8,3,1,3,2,9,1,5,1,2,4,3,9,2,0,17,1,2,5,4,2,2,3,4,1,2,0,2,1,4,1,4,2,4,11,5,4,4,2,2,3,3,0,7,0,15,9,18,2,2,7,2,2,2,22,2,9,2,4,4,7,2,2,2,3,8,1,2,1,7,3,3,9,19,1,2,7,2,2,2,22,2,9,2,4,3,8,2,2,2,3,8,1,8,0,2,3,3,9,19,1,2,7,2,2,2,22,2,15,4,7,2,2,2,3,10,0,9,3,3,9,11,5,3,1,2,17,4,23,2,8,2,0,3,6,4,0,5,5,2,0,2,7,19,1,14,57,6,14,2,9,40,1,2,0,3,1,2,0,3,0,7,3,2,6,2,2,2,0,2,0,3,1,2,12,2,2,3,4,2,0,2,5,3,9,3,1,35,0,24,1,7,9,12,0,2,0,2,0,5,9,2,35,5,19,2,5,5,7,2,35,10,0,58,73,7,77,3,37,11,42,2,0,4,328,2,3,3,6,2,0,2,3,3,40,2,3,3,32,2,3,3,6,2,0,2,3,3,14,2,56,2,3,3,66,5,0,33,15,17,84,13,619,3,16,2,25,6,74,22,12,2,6,12,20,12,19,13,12,2,2,2,1,13,51,3,29,4,0,5,1,3,9,34,2,3,9,7,87,9,42,6,69,11,28,4,11,5,11,11,39,3,4,12,43,5,25,7,10,38,27,5,62,2,28,3,10,7,9,14,0,89,75,5,9,18,8,13,42,4,11,71,55,9,9,4,48,83,2,2,30,14,230,23,280,3,5,3,37,3,5,3,7,2,0,2,0,2,0,2,30,3,52,2,6,2,0,4,2,2,6,4,3,3,5,5,12,6,2,2,6,67,1,20,0,29,0,14,0,17,4,60,12,5,0,4,11,18,0,5,0,3,9,2,0,4,4,7,0,2,0,2,0,2,3,2,10,3,3,6,4,5,0,53,1,2684,46,2,46,2,132,7,6,15,37,11,53,10,0,17,22,10,6,2,6,2,6,2,6,2,6,2,6,2,6,2,6,2,31,48,0,470,1,36,5,2,4,6,1,5,85,3,1,3,2,2,89,2,3,6,40,4,93,18,23,57,15,513,6581,75,20939,53,1164,68,45,3,268,4,27,21,31,3,13,13,1,2,24,9,69,11,1,38,8,3,102,3,1,111,44,25,51,13,68,12,9,7,23,4,0,5,45,3,35,13,28,4,64,15,10,39,54,10,13,3,9,7,22,4,1,5,66,25,2,227,42,2,1,3,9,7,11171,13,22,5,48,8453,301,3,61,3,105,39,6,13,4,6,11,2,12,2,4,2,0,2,1,2,1,2,107,34,362,19,63,3,53,41,11,5,15,17,6,13,1,25,2,33,4,2,134,20,9,8,25,5,0,2,25,12,88,4,5,3,5,3,5,3,2],r=0,o=[],s=0;s2?i%l!=l-1:i%l==0})}else{if(!this.blockComment)return!1;var p=this.blockComment.start,m=this.blockComment.end,f=new RegExp(\"^(\\\\s*)(?:\"+c.escapeRegExp(p)+\")\"),g=new RegExp(\"(?:\"+c.escapeRegExp(m)+\")\\\\s*$\"),v=function(e,t){E(e,t)||o&&!/\\S/.test(e)||(r.insertInLine({row:t,column:e.length},m),r.insertInLine({row:t,column:a},p))},_=function(e,t){var n;(n=e.match(g))&&r.removeInLine(t,e.length-n[0].length,e.length),(n=e.match(f))&&r.removeInLine(t,n[1].length,n[0].length)},E=function(e,n){if(f.test(e))return!0;for(var i=t.getTokens(n),r=0;re.length&&(A=e.length)})),a==1/0&&(a=A,o=!1,s=!1),u&&a%l!=0&&(a=Math.floor(a/l)*l),C(s?_:v)},this.toggleBlockComment=function(e,t,n,i){var r=this.blockComment;if(r){!r.start&&r[0]&&(r=r[0]);var o,s,a=(f=new l(t,i.row,i.column)).getCurrentToken(),c=(t.selection,t.selection.toOrientedRange());if(a&&/comment/.test(a.type)){for(var h,d;a&&/comment/.test(a.type);){if(-1!=(g=a.value.indexOf(r.start))){var p=f.getCurrentTokenRow(),m=f.getCurrentTokenColumn()+g;h=new u(p,m,p,m+r.start.length);break}a=f.stepBackward()}var f;for(a=(f=new l(t,i.row,i.column)).getCurrentToken();a&&/comment/.test(a.type);){var g;if(-1!=(g=a.value.indexOf(r.end))){p=f.getCurrentTokenRow(),m=f.getCurrentTokenColumn()+g;d=new u(p,m,p,m+r.end.length);break}a=f.stepForward()}d&&t.remove(d),h&&(t.remove(h),o=h.start.row,s=-r.start.length)}else s=r.start.length,o=n.start.row,t.insert(n.end,r.end),t.insert(n.start,r.start);c.start.row==o&&(c.start.column+=s),c.end.row==o&&(c.end.column+=s),t.selection.fromOrientedRange(c)}},this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.autoOutdent=function(e,t,n){},this.$getIndent=function(e){return e.match(/^\\s*/)[0]},this.createWorker=function(e){return null},this.createModeDelegates=function(e){for(var t in this.$embeds=[],this.$modes={},e)if(e[t]){var n=e[t],r=n.prototype.$id,o=i.$modes[r];o||(i.$modes[r]=o=new n),i.$modes[t]||(i.$modes[t]=o),this.$embeds.push(t),this.$modes[t]=o}var s=[\"toggleBlockComment\",\"toggleCommentLines\",\"getNextLineIndent\",\"checkOutdent\",\"autoOutdent\",\"transformAction\",\"getCompletions\"];for(t=0;tthis.row)){var n=function(t,n,i){var r=\"insert\"==t.action,o=(r?1:-1)*(t.end.row-t.start.row),s=(r?1:-1)*(t.end.column-t.start.column),a=t.start,c=r?a:t.end;if(e(n,a,i))return{row:n.row,column:n.column};if(e(c,n,!i))return{row:n.row+o,column:n.column+(n.row==c.row?s:0)};return{row:a.row,column:a.column}}(t,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)}},this.setPosition=function(e,t,n){var i;if(i=n?{row:e,column:t}:this.$clipPositionToDocument(e,t),this.row!=i.row||this.column!=i.column){var r={row:this.row,column:this.column};this.row=i.row,this.column=i.column,this._signal(\"change\",{old:r,value:i})}},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(o.prototype)})),ace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"],(function(e,t,n){\"use strict\";var i=e(\"./lib/oop\"),r=e(\"./apply_delta\").applyDelta,o=e(\"./lib/event_emitter\").EventEmitter,s=e(\"./range\").Range,a=e(\"./anchor\").Anchor,c=function(e){this.$lines=[\"\"],0===e.length?this.$lines=[\"\"]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){i.implement(this,o),this.setValue=function(e){var t=this.getLength()-1;this.remove(new s(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new a(this,e,t)},0===\"aaa\".split(/a/).length?this.$split=function(e){return e.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:this.$split=function(e){return e.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=t?t[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(e){this.$newLineMode!==e&&(this.$newLineMode=e,this._signal(\"changeNewLineMode\"))},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return\"\\r\\n\"==e||\"\\r\"==e||\"\\n\"==e},this.getLine=function(e){return this.$lines[e]||\"\"},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{(t=this.getLines(e.start.row,e.end.row))[0]=(t[0]||\"\").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(e,[\"\",\"\"])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),i=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:i,action:\"insert\",lines:[t]},!0),this.clonePos(i)},this.clippedPos=function(e,t){var n=this.getLength();void 0===e?e=n:e<0?e=0:e>=n&&(e=n-1,t=void 0);var i=this.getLine(e);return null==t&&(t=i.length),{row:e,column:t=Math.min(Math.max(t,0),i.length)}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){var n=0;(e=Math.min(Math.max(e,0),this.getLength()))0,i=t=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(e,t){return e instanceof s||(e=s.fromPoints(e.start,e.end)),0===t.length&&e.isEmpty()?e.start:t==this.getTextRange(e)?e.end:(this.remove(e),t?this.insert(e.start,t):e.start)},this.applyDeltas=function(e){for(var t=0;t=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=\"insert\"==e.action;(n?e.lines.length<=1&&!e.lines[0]:!s.comparePoints(e.start,e.end))||(n&&e.lines.length>2e4?this.$splitAndapplyLargeDelta(e,2e4):(r(this.$lines,e,t),this._signal(\"change\",e)))},this.$splitAndapplyLargeDelta=function(e,t){for(var n=e.lines,i=n.length-t+1,r=e.start.row,o=e.start.column,s=0,a=0;s20){n.running=setTimeout(n.$worker,20);break}}n.currentLine=t,-1==i&&(i=t),o<=i&&n.fireUpdateEvent(o,i)}}};(function(){i.implement(this,r),this.setTokenizer=function(e){this.tokenizer=e,this.lines=[],this.states=[],this.start(0)},this.setDocument=function(e){this.doc=e,this.lines=[],this.states=[],this.stop()},this.fireUpdateEvent=function(e,t){var n={first:e,last:t};this._signal(\"update\",{data:n})},this.start=function(e){this.currentLine=Math.min(e||0,this.currentLine,this.doc.getLength()),this.lines.splice(this.currentLine,this.lines.length),this.states.splice(this.currentLine,this.states.length),this.stop(),this.running=setTimeout(this.$worker,700)},this.scheduleStart=function(){this.running||(this.running=setTimeout(this.$worker,700))},this.$updateOnChange=function(e){var t=e.start.row,n=e.end.row-t;if(0===n)this.lines[t]=null;else if(\"remove\"==e.action)this.lines.splice(t,n+1,null),this.states.splice(t,n+1,null);else{var i=Array(n+1);i.unshift(t,1),this.lines.splice.apply(this.lines,i),this.states.splice.apply(this.states,i)}this.currentLine=Math.min(t,this.currentLine,this.doc.getLength()),this.stop()},this.stop=function(){this.running&&clearTimeout(this.running),this.running=!1},this.getTokens=function(e){return this.lines[e]||this.$tokenizeRow(e)},this.getState=function(e){return this.currentLine==e&&this.$tokenizeRow(e),this.states[e]||\"start\"},this.$tokenizeRow=function(e){var t=this.doc.getLine(e),n=this.states[e-1],i=this.tokenizer.getLineTokens(t,n,e);return this.states[e]+\"\"!=i.state+\"\"?(this.states[e]=i.state,this.lines[e+1]=null,this.currentLine>e+1&&(this.currentLine=e+1)):this.currentLine==e&&(this.currentLine=e+1),this.lines[e]=i.tokens}}).call(o.prototype),t.BackgroundTokenizer=o})),ace.define(\"ace/search_highlight\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"],(function(e,t,n){\"use strict\";var i=e(\"./lib/lang\"),r=(e(\"./lib/oop\"),e(\"./range\").Range),o=function(e,t,n){this.setRegexp(e),this.clazz=t,this.type=n||\"text\"};(function(){this.MAX_RANGES=500,this.setRegexp=function(e){this.regExp+\"\"!=e+\"\"&&(this.regExp=e,this.cache=[])},this.update=function(e,t,n,o){if(this.regExp)for(var s=o.firstRow,a=o.lastRow,c=s;c<=a;c++){var l=this.cache[c];null==l&&((l=i.getMatchOffsets(n.getLine(c),this.regExp)).length>this.MAX_RANGES&&(l=l.slice(0,this.MAX_RANGES)),l=l.map((function(e){return new r(c,e.offset,c,e.offset+e.length)})),this.cache[c]=l.length?l:\"\");for(var u=l.length;u--;)t.drawSingleLineMarker(e,l[u].toScreenRange(n),this.clazz,o)}}}).call(o.prototype),t.SearchHighlight=o})),ace.define(\"ace/edit_session/fold_line\",[\"require\",\"exports\",\"module\",\"ace/range\"],(function(e,t,n){\"use strict\";var i=e(\"../range\").Range;function r(e,t){this.foldData=e,Array.isArray(t)?this.folds=t:t=this.folds=[t];var n=t[t.length-1];this.range=new i(t[0].start.row,t[0].start.column,n.end.row,n.end.column),this.start=this.range.start,this.end=this.range.end,this.folds.forEach((function(e){e.setFoldLine(this)}),this)}(function(){this.shiftRow=function(e){this.start.row+=e,this.end.row+=e,this.folds.forEach((function(t){t.start.row+=e,t.end.row+=e}))},this.addFold=function(e){if(e.sameRow){if(e.start.rowthis.endRow)throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");this.folds.push(e),this.folds.sort((function(e,t){return-e.range.compareEnd(t.start.row,t.start.column)})),this.range.compareEnd(e.start.row,e.start.column)>0?(this.end.row=e.end.row,this.end.column=e.end.column):this.range.compareStart(e.end.row,e.end.column)<0&&(this.start.row=e.start.row,this.start.column=e.start.column)}else if(e.start.row==this.end.row)this.folds.push(e),this.end.row=e.end.row,this.end.column=e.end.column;else{if(e.end.row!=this.start.row)throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");this.folds.unshift(e),this.start.row=e.start.row,this.start.column=e.start.column}e.foldLine=this},this.containsRow=function(e){return e>=this.start.row&&e<=this.end.row},this.walk=function(e,t,n){var i,r,o=0,s=this.folds,a=!0;null==t&&(t=this.end.row,n=this.end.column);for(var c=0;c0)){var c=i(e,s.start);return 0===a?t&&0!==c?-o-2:o:c>0||0===c&&!t?o:-o-1}}return-o-1},this.add=function(e){var t=!e.isEmpty(),n=this.pointIndex(e.start,t);n<0&&(n=-n-1);var i=this.pointIndex(e.end,t,n);return i<0?i=-i-1:i++,this.ranges.splice(n,i-n,e)},this.addList=function(e){for(var t=[],n=e.length;n--;)t.push.apply(t,this.add(e[n]));return t},this.substractPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges.splice(t,1)},this.merge=function(){for(var e,t=[],n=this.ranges,r=(n=n.sort((function(e,t){return i(e.start,t.start)})))[0],o=1;o=0},this.containsPoint=function(e){return this.pointIndex(e)>=0},this.rangeAtPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges[t]},this.clipRows=function(e,t){var n=this.ranges;if(n[0].start.row>t||n[n.length-1].start.row=i)break}if(\"insert\"==e.action)for(var c=r-i,l=-t.column+n.column;si)break;if(u.start.row==i&&u.start.column>=t.column&&(u.start.column==t.column&&this.$bias<=0||(u.start.column+=l,u.start.row+=c)),u.end.row==i&&u.end.column>=t.column){if(u.end.column==t.column&&this.$bias<0)continue;u.end.column==t.column&&l>0&&su.start.column&&u.end.column==o[s+1].start.column&&(u.end.column-=l),u.end.column+=l,u.end.row+=c}}else for(c=i-r,l=t.column-n.column;sr)break;u.end.rowt.column)&&(u.end.column=t.column,u.end.row=t.row):(u.end.column+=l,u.end.row+=c):u.end.row>r&&(u.end.row+=c),u.start.rowt.column)&&(u.start.column=t.column,u.start.row=t.row):(u.start.column+=l,u.start.row+=c):u.start.row>r&&(u.start.row+=c)}if(0!=c&&s=e)return r;if(r.end.row>e)return null}return null},this.getNextFoldLine=function(e,t){var n=this.$foldData,i=0;for(t&&(i=n.indexOf(t)),-1==i&&(i=0);i=e)return r}return null},this.getFoldedRowCount=function(e,t){for(var n=this.$foldData,i=t-e+1,r=0;r=t){a=e?i-=t-a:i=0);break}s>=e&&(i-=a>=e?s-a:s-e+1)}return i},this.$addFoldLine=function(e){return this.$foldData.push(e),this.$foldData.sort((function(e,t){return e.start.row-t.start.row})),e},this.addFold=function(e,t){var n,i=this.$foldData,s=!1;e instanceof o?n=e:(n=new o(t,e)).collapseChildren=t.collapseChildren,this.$clipRangeToDocument(n.range);var a=n.start.row,c=n.start.column,l=n.end.row,u=n.end.column,h=this.getFoldAt(a,c,1),d=this.getFoldAt(l,u,-1);if(h&&d==h)return h.addSubFold(n);h&&!h.range.isStart(a,c)&&this.removeFold(h),d&&!d.range.isEnd(l,u)&&this.removeFold(d);var p=this.getFoldsInRange(n.range);p.length>0&&(this.removeFolds(p),p.forEach((function(e){n.addSubFold(e)})));for(var m=0;m0&&this.foldAll(e.start.row+1,e.end.row,e.collapseChildren-1),e.subFolds=[]},this.expandFolds=function(e){e.forEach((function(e){this.expandFold(e)}),this)},this.unfold=function(e,t){var n,r;if(null==e?(n=new i(0,0,this.getLength(),0),t=!0):n=\"number\"==typeof e?new i(e,0,e,this.getLine(e).length):\"row\"in e?i.fromPoints(e,e):e,r=this.getFoldsInRangeList(n),t)this.removeFolds(r);else for(var o=r;o.length;)this.expandFolds(o),o=this.getFoldsInRangeList(n);if(r.length)return r},this.isRowFolded=function(e,t){return!!this.getFoldLine(e,t)},this.getRowFoldEnd=function(e,t){var n=this.getFoldLine(e,t);return n?n.end.row:e},this.getRowFoldStart=function(e,t){var n=this.getFoldLine(e,t);return n?n.start.row:e},this.getFoldDisplayLine=function(e,t,n,i,r){null==i&&(i=e.start.row),null==r&&(r=0),null==t&&(t=e.end.row),null==n&&(n=this.getLine(t).length);var o=this.doc,s=\"\";return e.walk((function(e,t,n,a){if(!(tu)break}while(o&&c.test(o.type));o=r.stepBackward()}else o=r.getCurrentToken();return l.end.row=r.getCurrentTokenRow(),l.end.column=r.getCurrentTokenColumn()+o.value.length-2,l}},this.foldAll=function(e,t,n){null==n&&(n=1e5);var i=this.foldWidgets;if(i){t=t||this.getLength();for(var r=e=e||0;r=e){r=o.end.row;try{var s=this.addFold(\"...\",o);s&&(s.collapseChildren=n)}catch(e){}}}}},this.$foldStyles={manual:1,markbegin:1,markbeginend:1},this.$foldStyle=\"markbegin\",this.setFoldStyle=function(e){if(!this.$foldStyles[e])throw new Error(\"invalid fold style: \"+e+\"[\"+Object.keys(this.$foldStyles).join(\", \")+\"]\");if(this.$foldStyle!=e){this.$foldStyle=e,\"manual\"==e&&this.unfold();var t=this.$foldMode;this.$setFolding(null),this.$setFolding(t)}},this.$setFolding=function(e){this.$foldMode!=e&&(this.$foldMode=e,this.off(\"change\",this.$updateFoldWidgets),this.off(\"tokenizerUpdate\",this.$tokenizerUpdateFoldWidgets),this._signal(\"changeAnnotation\"),e&&\"manual\"!=this.$foldStyle?(this.foldWidgets=[],this.getFoldWidget=e.getFoldWidget.bind(e,this,this.$foldStyle),this.getFoldWidgetRange=e.getFoldWidgetRange.bind(e,this,this.$foldStyle),this.$updateFoldWidgets=this.updateFoldWidgets.bind(this),this.$tokenizerUpdateFoldWidgets=this.tokenizerUpdateFoldWidgets.bind(this),this.on(\"change\",this.$updateFoldWidgets),this.on(\"tokenizerUpdate\",this.$tokenizerUpdateFoldWidgets)):this.foldWidgets=null)},this.getParentFoldRangeData=function(e,t){var n=this.foldWidgets;if(!n||t&&n[e])return{};for(var i,r=e-1;r>=0;){var o=n[r];if(null==o&&(o=n[r]=this.getFoldWidget(r)),\"start\"==o){var s=this.getFoldWidgetRange(r);if(i||(i=s),s&&s.end.row>=e)break}r--}return{range:-1!==r&&s,firstRange:i}},this.onFoldWidgetClick=function(e,t){var n={children:(t=t.domEvent).shiftKey,all:t.ctrlKey||t.metaKey,siblings:t.altKey};if(!this.$toggleFoldWidget(e,n)){var i=t.target||t.srcElement;i&&/ace_fold-widget/.test(i.className)&&(i.className+=\" ace_invalid\")}},this.$toggleFoldWidget=function(e,t){if(this.getFoldWidget){var n=this.getFoldWidget(e),i=this.getLine(e),r=\"end\"===n?-1:1,o=this.getFoldAt(e,-1===r?0:i.length,r);if(o)return t.children||t.all?this.removeFold(o):this.expandFold(o),o;var s=this.getFoldWidgetRange(e,!0);if(s&&!s.isMultiLine()&&(o=this.getFoldAt(s.start.row,s.start.column,1))&&s.isEqual(o.range))return this.removeFold(o),o;if(t.siblings){var a=this.getParentFoldRangeData(e);if(a.range)var c=a.range.start.row+1,l=a.range.end.row;this.foldAll(c,l,t.all?1e4:0)}else t.children?(l=s?s.end.row:this.getLength(),this.foldAll(e+1,l,t.all?1e4:0)):s&&(t.all&&(s.collapseChildren=1e4),this.addFold(\"...\",s));return s}},this.toggleFoldWidget=function(e){var t=this.selection.getCursor().row;t=this.getRowFoldStart(t);var n=this.$toggleFoldWidget(t,{});if(!n){var i=this.getParentFoldRangeData(t,!0);if(n=i.range||i.firstRange){t=n.start.row;var r=this.getFoldAt(t,this.getLine(t).length,1);r?this.removeFold(r):this.addFold(\"...\",n)}}},this.updateFoldWidgets=function(e){var t=e.start.row,n=e.end.row-t;if(0===n)this.foldWidgets[t]=null;else if(\"remove\"==e.action)this.foldWidgets.splice(t,n+1,null);else{var i=Array(n+1);i.unshift(t,1),this.foldWidgets.splice.apply(this.foldWidgets,i)}},this.tokenizerUpdateFoldWidgets=function(e){var t=e.data;t.first!=t.last&&this.foldWidgets.length>t.first&&this.foldWidgets.splice(t.first,this.foldWidgets.length)}}})),ace.define(\"ace/edit_session/bracket_match\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\",\"ace/range\"],(function(e,t,n){\"use strict\";var i=e(\"../token_iterator\").TokenIterator,r=e(\"../range\").Range;t.BracketMatch=function(){this.findMatchingBracket=function(e,t){if(0==e.column)return null;var n=t||this.getLine(e.row).charAt(e.column-1);if(\"\"==n)return null;var i=n.match(/([\\(\\[\\{])|([\\)\\]\\}])/);return i?i[1]?this.$findClosingBracket(i[1],e):this.$findOpeningBracket(i[2],e):null},this.getBracketRange=function(e){var t,n=this.getLine(e.row),i=!0,o=n.charAt(e.column-1),s=o&&o.match(/([\\(\\[\\{])|([\\)\\]\\}])/);if(s||(o=n.charAt(e.column),e={row:e.row,column:e.column+1},s=o&&o.match(/([\\(\\[\\{])|([\\)\\]\\}])/),i=!1),!s)return null;if(s[1]){if(!(a=this.$findClosingBracket(s[1],e)))return null;t=r.fromPoints(e,a),i||(t.end.column++,t.start.column--),t.cursor=t.end}else{var a;if(!(a=this.$findOpeningBracket(s[2],e)))return null;t=r.fromPoints(a,e),i||(t.start.column++,t.end.column--),t.cursor=t.start}return t},this.$brackets={\")\":\"(\",\"(\":\")\",\"]\":\"[\",\"[\":\"]\",\"{\":\"}\",\"}\":\"{\",\"<\":\">\",\">\":\"<\"},this.$findOpeningBracket=function(e,t,n){var r=this.$brackets[e],o=1,s=new i(this,t.row,t.column),a=s.getCurrentToken();if(a||(a=s.stepForward()),a){n||(n=new RegExp(\"(\\\\.?\"+a.type.replace(\".\",\"\\\\.\").replace(\"rparen\",\".paren\").replace(/\\b(?:end)\\b/,\"(?:start|begin|end)\")+\")+\"));for(var c=t.column-s.getCurrentTokenColumn()-2,l=a.value;;){for(;c>=0;){var u=l.charAt(c);if(u==r){if(0==(o-=1))return{row:s.getCurrentTokenRow(),column:c+s.getCurrentTokenColumn()}}else u==e&&(o+=1);c-=1}do{a=s.stepBackward()}while(a&&!n.test(a.type));if(null==a)break;c=(l=a.value).length-1}return null}},this.$findClosingBracket=function(e,t,n){var r=this.$brackets[e],o=1,s=new i(this,t.row,t.column),a=s.getCurrentToken();if(a||(a=s.stepForward()),a){n||(n=new RegExp(\"(\\\\.?\"+a.type.replace(\".\",\"\\\\.\").replace(\"lparen\",\".paren\").replace(/\\b(?:start|begin)\\b/,\"(?:start|begin|end)\")+\")+\"));for(var c=t.column-s.getCurrentTokenColumn();;){for(var l=a.value,u=l.length;cn&&(this.$docRowCache.splice(n,t),this.$screenRowCache.splice(n,t))},this.$getRowCacheIndex=function(e,t){for(var n=0,i=e.length-1;n<=i;){var r=n+i>>1,o=e[r];if(t>o)n=r+1;else{if(!(t=t);o++);return(n=i[o])?(n.index=o,n.start=r-n.value.length,n):null},this.setUndoManager=function(e){if(this.$undoManager=e,this.$informUndoManager&&this.$informUndoManager.cancel(),e){var t=this;e.addSession(this),this.$syncInformUndoManager=function(){t.$informUndoManager.cancel(),t.mergeUndoDeltas=!1},this.$informUndoManager=r.delayedCall(this.$syncInformUndoManager)}else this.$syncInformUndoManager=function(){}},this.markUndoGroup=function(){this.$syncInformUndoManager&&this.$syncInformUndoManager()},this.$defaultUndoManager={undo:function(){},redo:function(){},hasUndo:function(){},hasRedo:function(){},reset:function(){},add:function(){},addSelection:function(){},startNewGroup:function(){},addSession:function(){}},this.getUndoManager=function(){return this.$undoManager||this.$defaultUndoManager},this.getTabString=function(){return this.getUseSoftTabs()?r.stringRepeat(\" \",this.getTabSize()):\"\\t\"},this.setUseSoftTabs=function(e){this.setOption(\"useSoftTabs\",e)},this.getUseSoftTabs=function(){return this.$useSoftTabs&&!this.$mode.$indentWithTabs},this.setTabSize=function(e){this.setOption(\"tabSize\",e)},this.getTabSize=function(){return this.$tabSize},this.isTabStop=function(e){return this.$useSoftTabs&&e.column%this.$tabSize==0},this.setNavigateWithinSoftTabs=function(e){this.setOption(\"navigateWithinSoftTabs\",e)},this.getNavigateWithinSoftTabs=function(){return this.$navigateWithinSoftTabs},this.$overwrite=!1,this.setOverwrite=function(e){this.setOption(\"overwrite\",e)},this.getOverwrite=function(){return this.$overwrite},this.toggleOverwrite=function(){this.setOverwrite(!this.$overwrite)},this.addGutterDecoration=function(e,t){this.$decorations[e]||(this.$decorations[e]=\"\"),this.$decorations[e]+=\" \"+t,this._signal(\"changeBreakpoint\",{})},this.removeGutterDecoration=function(e,t){this.$decorations[e]=(this.$decorations[e]||\"\").replace(\" \"+t,\"\"),this._signal(\"changeBreakpoint\",{})},this.getBreakpoints=function(){return this.$breakpoints},this.setBreakpoints=function(e){this.$breakpoints=[];for(var t=0;t0&&(i=!!n.charAt(t-1).match(this.tokenRe)),i||(i=!!n.charAt(t).match(this.tokenRe)),i)var r=this.tokenRe;else if(/^\\s+$/.test(n.slice(t-1,t+1)))r=/\\s/;else r=this.nonTokenRe;var o=t;if(o>0){do{o--}while(o>=0&&n.charAt(o).match(r));o++}for(var s=t;se&&(e=t.screenWidth)})),this.lineWidgetWidth=e},this.$computeWidth=function(e){if(this.$modified||e){if(this.$modified=!1,this.$useWrapMode)return this.screenWidth=this.$wrapLimit;for(var t=this.doc.getAllLines(),n=this.$rowLengthCache,i=0,r=0,o=this.$foldData[r],s=o?o.start.row:1/0,a=t.length,c=0;cs){if((c=o.end.row+1)>=a)break;s=(o=this.$foldData[r++])?o.start.row:1/0}null==n[c]&&(n[c]=this.$getStringScreenWidth(t[c])[0]),n[c]>i&&(i=n[c])}this.screenWidth=i}},this.getLine=function(e){return this.doc.getLine(e)},this.getLines=function(e,t){return this.doc.getLines(e,t)},this.getLength=function(){return this.doc.getLength()},this.getTextRange=function(e){return this.doc.getTextRange(e||this.selection.getRange())},this.insert=function(e,t){return this.doc.insert(e,t)},this.remove=function(e){return this.doc.remove(e)},this.removeFullLines=function(e,t){return this.doc.removeFullLines(e,t)},this.undoChanges=function(e,t){if(e.length){this.$fromUndo=!0;for(var n=e.length-1;-1!=n;n--){var i=e[n];\"insert\"==i.action||\"remove\"==i.action?this.doc.revertDelta(i):i.folds&&this.addFolds(i.folds)}!t&&this.$undoSelect&&(e.selectionBefore?this.selection.fromJSON(e.selectionBefore):this.selection.setRange(this.$getUndoSelection(e,!0))),this.$fromUndo=!1}},this.redoChanges=function(e,t){if(e.length){this.$fromUndo=!0;for(var n=0;ne.end.column&&(o.start.column+=l),o.end.row==e.end.row&&o.end.column>e.end.column&&(o.end.column+=l)),s&&o.start.row>=e.end.row&&(o.start.row+=s,o.end.row+=s)}if(o.end=this.insert(o.start,i),r.length){var a=e.start,c=o.start,l=(s=c.row-a.row,c.column-a.column);this.addFolds(r.map((function(e){return(e=e.clone()).start.row==a.row&&(e.start.column+=l),e.end.row==a.row&&(e.end.column+=l),e.start.row+=s,e.end.row+=s,e})))}return o},this.indentRows=function(e,t,n){n=n.replace(/\\t/g,this.getTabString());for(var i=e;i<=t;i++)this.doc.insertInLine({row:i,column:0},n)},this.outdentRows=function(e){for(var t=e.collapseRows(),n=new u(0,0,0,0),i=this.getTabSize(),r=t.start.row;r<=t.end.row;++r){var o=this.getLine(r);n.start.row=r,n.end.row=r;for(var s=0;s0){var r;if((r=this.getRowFoldEnd(t+n))>this.doc.getLength()-1)return 0;i=r-t}else{e=this.$clipRowToDocument(e);i=(t=this.$clipRowToDocument(t))-e+1}var o=new u(e,0,t,Number.MAX_VALUE),s=this.getFoldsInRange(o).map((function(e){return(e=e.clone()).start.row+=i,e.end.row+=i,e})),a=0==n?this.doc.getLines(e,t):this.doc.removeFullLines(e,t);return this.doc.insertFullLines(e+i,a),s.length&&this.addFolds(s),i},this.moveLinesUp=function(e,t){return this.$moveLines(e,t,-1)},this.moveLinesDown=function(e,t){return this.$moveLines(e,t,1)},this.duplicateLines=function(e,t){return this.$moveLines(e,t,0)},this.$clipRowToDocument=function(e){return Math.max(0,Math.min(e,this.doc.getLength()-1))},this.$clipColumnToRow=function(e,t){return t<0?0:Math.min(this.doc.getLine(e).length,t)},this.$clipPositionToDocument=function(e,t){if(t=Math.max(0,t),e<0)e=0,t=0;else{var n=this.doc.getLength();e>=n?(e=n-1,t=this.doc.getLine(n-1).length):t=Math.min(this.doc.getLine(e).length,t)}return{row:e,column:t}},this.$clipRangeToDocument=function(e){e.start.row<0?(e.start.row=0,e.start.column=0):e.start.column=this.$clipColumnToRow(e.start.row,e.start.column);var t=this.doc.getLength()-1;return e.end.row>t?(e.end.row=t,e.end.column=this.doc.getLine(t).length):e.end.column=this.$clipColumnToRow(e.end.row,e.end.column),e},this.$wrapLimit=80,this.$useWrapMode=!1,this.$wrapLimitRange={min:null,max:null},this.setUseWrapMode=function(e){if(e!=this.$useWrapMode){if(this.$useWrapMode=e,this.$modified=!0,this.$resetRowCache(0),e){var t=this.getLength();this.$wrapData=Array(t),this.$updateWrapData(0,t-1)}this._signal(\"changeWrapMode\")}},this.getUseWrapMode=function(){return this.$useWrapMode},this.setWrapLimitRange=function(e,t){this.$wrapLimitRange.min===e&&this.$wrapLimitRange.max===t||(this.$wrapLimitRange={min:e,max:t},this.$modified=!0,this.$bidiHandler.markAsDirty(),this.$useWrapMode&&this._signal(\"changeWrapMode\"))},this.adjustWrapLimit=function(e,t){var n=this.$wrapLimitRange;n.max<0&&(n={min:t,max:t});var i=this.$constrainWrapLimit(e,n.min,n.max);return i!=this.$wrapLimit&&i>1&&(this.$wrapLimit=i,this.$modified=!0,this.$useWrapMode&&(this.$updateWrapData(0,this.getLength()-1),this.$resetRowCache(0),this._signal(\"changeWrapLimit\")),!0)},this.$constrainWrapLimit=function(e,t,n){return t&&(e=Math.max(t,e)),n&&(e=Math.min(n,e)),e},this.getWrapLimit=function(){return this.$wrapLimit},this.setWrapLimit=function(e){this.setWrapLimitRange(e,e)},this.getWrapLimitRange=function(){return{min:this.$wrapLimitRange.min,max:this.$wrapLimitRange.max}},this.$updateInternalDataOnChange=function(e){var t=this.$useWrapMode,n=e.action,i=e.start,r=e.end,o=i.row,s=r.row,a=s-o,c=null;if(this.$updating=!0,0!=a)if(\"remove\"===n){this[t?\"$wrapData\":\"$rowLengthCache\"].splice(o,a);var l=this.$foldData;c=this.getFoldsInRange(e),this.removeFolds(c);var u=0;if(f=this.getFoldLine(r.row)){f.addRemoveChars(r.row,r.column,i.column-r.column),f.shiftRow(-a);var h=this.getFoldLine(o);h&&h!==f&&(h.merge(f),f=h),u=l.indexOf(f)+1}for(;u=r.row&&f.shiftRow(-a)}s=o}else{var d=Array(a);d.unshift(o,0);var p=t?this.$wrapData:this.$rowLengthCache;p.splice.apply(p,d);l=this.$foldData,u=0;if(f=this.getFoldLine(o)){var m=f.range.compareInside(i.row,i.column);0==m?(f=f.split(i.row,i.column))&&(f.shiftRow(a),f.addRemoveChars(s,0,r.column-i.column)):-1==m&&(f.addRemoveChars(o,0,r.column-i.column),f.shiftRow(a)),u=l.indexOf(f)+1}for(;u=o&&f.shiftRow(a)}}else a=Math.abs(e.start.column-e.end.column),\"remove\"===n&&(c=this.getFoldsInRange(e),this.removeFolds(c),a=-a),(f=this.getFoldLine(o))&&f.addRemoveChars(o,i.column,a);return t&&this.$wrapData.length!=this.doc.getLength()&&console.error(\"doc.getLength() and $wrapData.length have to be the same!\"),this.$updating=!1,t?this.$updateWrapData(o,s):this.$updateRowLengthCache(o,s),c},this.$updateRowLengthCache=function(e,t,n){this.$rowLengthCache[e]=null,this.$rowLengthCache[t]=null},this.$updateWrapData=function(n,i){var r,o,s=this.doc.getAllLines(),a=this.getTabSize(),c=this.$wrapData,l=this.$wrapLimit,u=n;for(i=Math.min(i,s.length-1);u<=i;)(o=this.getFoldLine(u,o))?(r=[],o.walk(function(n,i,o,a){var c;if(null!=n){(c=this.$getDisplayTokens(n,r.length))[0]=e;for(var l=1;l=4352&&e<=4447||e>=4515&&e<=4519||e>=4602&&e<=4607||e>=9001&&e<=9002||e>=11904&&e<=11929||e>=11931&&e<=12019||e>=12032&&e<=12245||e>=12272&&e<=12283||e>=12288&&e<=12350||e>=12353&&e<=12438||e>=12441&&e<=12543||e>=12549&&e<=12589||e>=12593&&e<=12686||e>=12688&&e<=12730||e>=12736&&e<=12771||e>=12784&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=13054||e>=13056&&e<=19903||e>=19968&&e<=42124||e>=42128&&e<=42182||e>=43360&&e<=43388||e>=44032&&e<=55203||e>=55216&&e<=55238||e>=55243&&e<=55291||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=65281&&e<=65376||e>=65504&&e<=65510)}this.$computeWrapSplits=function(n,i,r){if(0==n.length)return[];var o=[],s=n.length,a=0,c=0,l=this.$wrapAsCode,u=this.$indentedSoftWrap,h=i<=Math.max(2*r,8)||!1===u?0:Math.floor(i/2);function d(e){for(var t=e-a,i=a;ii-p;){var m=a+i-p;if(n[m-1]>=10&&n[m]>=10)d(m);else if(n[m]!=e&&n[m]!=t){for(var f=Math.max(m-(i-(i>>2)),a-1);m>f&&n[m]f&&n[m]f&&9==n[m];)m--}else for(;m>f&&n[m]<10;)m--;m>f?d(++m):(2==n[m=a+i]&&m--,d(m-p))}else{for(;m!=a-1&&n[m]!=e;m--);if(m>a){d(m);continue}for(m=a+i;m39&&s<48||s>57&&s<64?r.push(9):s>=4352&&n(s)?r.push(1,2):r.push(1)}return r},this.$getStringScreenWidth=function(e,t,i){if(0==t)return[0,0];var r,o;for(null==t&&(t=1/0),i=i||0,o=0;o=4352&&n(r)?i+=2:i+=1,!(i>t));o++);return[i,o]},this.lineWidgets=null,this.getRowLength=function(e){if(this.lineWidgets)var t=this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0;else t=0;return this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+1+t:1+t},this.getRowLineCount=function(e){return this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+1:1},this.getRowWrapIndent=function(e){if(this.$useWrapMode){var t=this.screenToDocumentPosition(e,Number.MAX_VALUE),n=this.$wrapData[t.row];return n.length&&n[0]=0){a=l[u],o=this.$docRowCache[u];var d=e>l[h-1]}else d=!h;for(var p=this.getLength()-1,m=this.getNextFoldLine(o),f=m?m.start.row:1/0;a<=e&&!(a+(c=this.getRowLength(o))>e||o>=p);)a+=c,++o>f&&(o=m.end.row+1,f=(m=this.getNextFoldLine(o,m))?m.start.row:1/0),d&&(this.$docRowCache.push(o),this.$screenRowCache.push(a));if(m&&m.start.row<=o)i=this.getFoldDisplayLine(m),o=m.start.row;else{if(a+c<=e||o>p)return{row:p,column:this.getLine(p).length};i=this.getLine(o),m=null}var g=0,v=Math.floor(e-a);if(this.$useWrapMode){var _=this.$wrapData[o];_&&(r=_[v],v>0&&_.length&&(g=_.indent,s=_[v-1]||_[_.length-1],i=i.substring(s)))}return void 0!==n&&this.$bidiHandler.isBidiRow(a+v,o,v)&&(t=this.$bidiHandler.offsetToCol(n)),s+=this.$getStringScreenWidth(i,t-g)[1],this.$useWrapMode&&s>=r&&(s=r-1),m?m.idxToPosition(s):{row:o,column:s}},this.documentToScreenPosition=function(e,t){if(void 0===t)var n=this.$clipPositionToDocument(e.row,e.column);else n=this.$clipPositionToDocument(e,t);e=n.row,t=n.column;var i,r=0,o=null;(i=this.getFoldAt(e,t,1))&&(e=i.start.row,t=i.start.column);var s,a=0,c=this.$docRowCache,l=this.$getRowCacheIndex(c,e),u=c.length;if(u&&l>=0){a=c[l],r=this.$screenRowCache[l];var h=e>c[u-1]}else h=!u;for(var d=this.getNextFoldLine(a),p=d?d.start.row:1/0;a=p){if((s=d.end.row+1)>e)break;p=(d=this.getNextFoldLine(s,d))?d.start.row:1/0}else s=a+1;r+=this.getRowLength(a),a=s,h&&(this.$docRowCache.push(a),this.$screenRowCache.push(r))}var m=\"\";d&&a>=p?(m=this.getFoldDisplayLine(d,e,t),o=d.start.row):(m=this.getLine(e).substring(0,t),o=e);var f=0;if(this.$useWrapMode){var g=this.$wrapData[o];if(g){for(var v=0;m.length>=g[v];)r++,v++;m=m.substring(g[v-1]||0,m.length),f=v>0?g.indent:0}}return{row:r,column:f+this.$getStringScreenWidth(m)[0]}},this.documentToScreenColumn=function(e,t){return this.documentToScreenPosition(e,t).column},this.documentToScreenRow=function(e,t){return this.documentToScreenPosition(e,t).row},this.getScreenLength=function(){var e=0,t=null;if(this.$useWrapMode)for(var n=this.$wrapData.length,i=0,r=(a=0,(t=this.$foldData[a++])?t.start.row:1/0);ir&&(i=t.end.row+1,r=(t=this.$foldData[a++])?t.start.row:1/0)}else{e=this.getLength();for(var s=this.$foldData,a=0;an);o++);return[i,o]})},this.destroy=function(){this.bgTokenizer&&(this.bgTokenizer.setDocument(null),this.bgTokenizer=null),this.$stopWorker()},this.isFullWidth=n}.call(m.prototype),e(\"./edit_session/folding\").Folding.call(m.prototype),e(\"./edit_session/bracket_match\").BracketMatch.call(m.prototype),s.defineOptions(m.prototype,\"session\",{wrap:{set:function(e){if(e&&\"off\"!=e?\"free\"==e?e=!0:\"printMargin\"==e?e=-1:\"string\"==typeof e&&(e=parseInt(e,10)||!1):e=!1,this.$wrap!=e)if(this.$wrap=e,e){var t=\"number\"==typeof e?e:null;this.setWrapLimitRange(t,t),this.setUseWrapMode(!0)}else this.setUseWrapMode(!1)},get:function(){return this.getUseWrapMode()?-1==this.$wrap?\"printMargin\":this.getWrapLimitRange().min?this.$wrap:\"free\":\"off\"},handlesSet:!0},wrapMethod:{set:function(e){(e=\"auto\"==e?\"text\"!=this.$mode.type:\"text\"!=e)!=this.$wrapAsCode&&(this.$wrapAsCode=e,this.$useWrapMode&&(this.$useWrapMode=!1,this.setUseWrapMode(!0)))},initialValue:\"auto\"},indentedSoftWrap:{set:function(){this.$useWrapMode&&(this.$useWrapMode=!1,this.setUseWrapMode(!0))},initialValue:!0},firstLineNumber:{set:function(){this._signal(\"changeBreakpoint\")},initialValue:1},useWorker:{set:function(e){this.$useWorker=e,this.$stopWorker(),e&&this.$startWorker()},initialValue:!0},useSoftTabs:{initialValue:!0},tabSize:{set:function(e){(e=parseInt(e))>0&&this.$tabSize!==e&&(this.$modified=!0,this.$rowLengthCache=[],this.$tabSize=e,this._signal(\"changeTabSize\"))},initialValue:4,handlesSet:!0},navigateWithinSoftTabs:{initialValue:!1},foldStyle:{set:function(e){this.setFoldStyle(e)},handlesSet:!0},overwrite:{set:function(e){this._signal(\"changeOverwrite\")},initialValue:!1},newLineMode:{set:function(e){this.doc.setNewLineMode(e)},get:function(){return this.doc.getNewLineMode()},handlesSet:!0},mode:{set:function(e){this.setMode(e)},get:function(){return this.$modeId},handlesSet:!0}}),t.EditSession=m})),ace.define(\"ace/search\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"],(function(e,t,n){\"use strict\";var i=e(\"./lib/lang\"),r=e(\"./lib/oop\"),o=e(\"./range\").Range,s=function(){this.$options={}};(function(){this.set=function(e){return r.mixin(this.$options,e),this},this.getOptions=function(){return i.copyObject(this.$options)},this.setOptions=function(e){this.$options=e},this.find=function(e){var t=this.$options,n=this.$matchIterator(e,t);if(!n)return!1;var i=null;return n.forEach((function(e,n,r,s){return i=new o(e,n,r,s),!(n==s&&t.start&&t.start.start&&0!=t.skipCurrent&&i.isEqual(t.start))||(i=null,!1)})),i},this.findAll=function(e){var t=this.$options;if(!t.needle)return[];this.$assembleRegExp(t);var n=t.range,r=n?e.getLines(n.start.row,n.end.row):e.doc.getAllLines(),s=[],a=t.re;if(t.$isMultiLine){var c,l=a.length,u=r.length-l;e:for(var h=a.offset||0;h<=u;h++){for(var d=0;df||(s.push(c=new o(h,f,h+l-1,g)),l>2&&(h=h+l-2))}}else for(var v=0;vA&&s[d].end.row==n.end.row;)d--;for(s=s.slice(v,d+1),v=0,d=s.length;v=a;n--)if(h(n,Number.MAX_VALUE,e))return;if(0!=t.wrap)for(n=c,a=s.row;n>=a;n--)if(h(n,Number.MAX_VALUE,e))return}};else l=function(e){var n=s.row;if(!h(n,s.column,e)){for(n+=1;n<=c;n++)if(h(n,0,e))return;if(0!=t.wrap)for(n=a,c=s.row;n<=c;n++)if(h(n,0,e))return}};if(t.$isMultiLine)var u=n.length,h=function(t,r,o){var s=i?t-u+1:t;if(!(s<0)){var a=e.getLine(s),c=a.search(n[0]);if(!(!i&&cr))return!!o(s,c,s+u-1,h)||void 0}}};else if(i)h=function(t,i,r){var o,s=e.getLine(t),a=[],c=0;for(n.lastIndex=0;o=n.exec(s);){var l=o[0].length;if(c=o.index,!l){if(c>=s.length)break;n.lastIndex=c+=1}if(o.index+l>i)break;a.push(o.index,l)}for(var u=a.length-1;u>=0;u-=2){var h=a[u-1];if(r(t,h,t,h+(l=a[u])))return!0}};else h=function(t,i,r){var o,s,a=e.getLine(t);for(n.lastIndex=i;s=n.exec(a);){var c=s[0].length;if(r(t,o=s.index,t,o+c))return!0;if(!c&&(n.lastIndex=o+=1,o>=a.length))return!1}};return{forEach:l}}}).call(s.prototype),t.Search=s})),ace.define(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"],(function(e,t,n){\"use strict\";var i=e(\"../lib/keys\"),r=e(\"../lib/useragent\"),o=i.KEY_MODS;function s(e,t){this.platform=t||(r.isMac?\"mac\":\"win\"),this.commands={},this.commandKeyBinding={},this.addCommands(e),this.$singleCommand=!0}function a(e,t){s.call(this,e,t),this.$singleCommand=!1}a.prototype=s.prototype,function(){function e(e){return\"object\"==typeof e&&e.bindKey&&e.bindKey.position||(e.isDefault?-100:0)}this.addCommand=function(e){this.commands[e.name]&&this.removeCommand(e),this.commands[e.name]=e,e.bindKey&&this._buildKeyHash(e)},this.removeCommand=function(e,t){var n=e&&(\"string\"==typeof e?e:e.name);e=this.commands[n],t||delete this.commands[n];var i=this.commandKeyBinding;for(var r in i){var o=i[r];if(o==e)delete i[r];else if(Array.isArray(o)){var s=o.indexOf(e);-1!=s&&(o.splice(s,1),1==o.length&&(i[r]=o[0]))}}},this.bindKey=function(e,t,n){if(\"object\"==typeof e&&e&&(null==n&&(n=e.position),e=e[this.platform]),e)return\"function\"==typeof t?this.addCommand({exec:t,bindKey:e,name:t.name||e}):void e.split(\"|\").forEach((function(e){var i=\"\";if(-1!=e.indexOf(\" \")){var r=e.split(/\\s+/);e=r.pop(),r.forEach((function(e){var t=this.parseKeys(e),n=o[t.hashId]+t.key;i+=(i?\" \":\"\")+n,this._addCommandToBinding(i,\"chainKeys\")}),this),i+=\" \"}var s=this.parseKeys(e),a=o[s.hashId]+s.key;this._addCommandToBinding(i+a,t,n)}),this)},this._addCommandToBinding=function(t,n,i){var r,o=this.commandKeyBinding;if(n)if(!o[t]||this.$singleCommand)o[t]=n;else{Array.isArray(o[t])?-1!=(r=o[t].indexOf(n))&&o[t].splice(r,1):o[t]=[o[t]],\"number\"!=typeof i&&(i=e(n));var s=o[t];for(r=0;ri)break}s.splice(r,0,n)}else delete o[t]},this.addCommands=function(e){e&&Object.keys(e).forEach((function(t){var n=e[t];if(n){if(\"string\"==typeof n)return this.bindKey(n,t);\"function\"==typeof n&&(n={exec:n}),\"object\"==typeof n&&(n.name||(n.name=t),this.addCommand(n))}}),this)},this.removeCommands=function(e){Object.keys(e).forEach((function(t){this.removeCommand(e[t])}),this)},this.bindKeys=function(e){Object.keys(e).forEach((function(t){this.bindKey(t,e[t])}),this)},this._buildKeyHash=function(e){this.bindKey(e.bindKey,e)},this.parseKeys=function(e){var t=e.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter((function(e){return e})),n=t.pop(),r=i[n];if(i.FUNCTION_KEYS[r])n=i.FUNCTION_KEYS[r].toLowerCase();else{if(!t.length)return{key:n,hashId:-1};if(1==t.length&&\"shift\"==t[0])return{key:n.toUpperCase(),hashId:-1}}for(var o=0,s=t.length;s--;){var a=i.KEY_MODS[t[s]];if(null==a)return\"undefined\"!=typeof console&&console.error(\"invalid modifier \"+t[s]+\" in \"+e),!1;o|=a}return{key:n,hashId:o}},this.findKeyCommand=function(e,t){var n=o[e]+t;return this.commandKeyBinding[n]},this.handleKeyboard=function(e,t,n,i){if(!(i<0)){var r=o[t]+n,s=this.commandKeyBinding[r];return e.$keyChain&&(e.$keyChain+=\" \"+r,s=this.commandKeyBinding[e.$keyChain]||s),!s||\"chainKeys\"!=s&&\"chainKeys\"!=s[s.length-1]?(e.$keyChain&&(t&&4!=t||1!=n.length?(-1==t||i>0)&&(e.$keyChain=\"\"):e.$keyChain=e.$keyChain.slice(0,-r.length-1)),{command:s}):(e.$keyChain=e.$keyChain||r,{command:\"null\"})}},this.getStatusText=function(e,t){return t.$keyChain||\"\"}}.call(s.prototype),t.HashHandler=s,t.MultiHashHandler=a})),ace.define(\"ace/commands/command_manager\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/lib/event_emitter\"],(function(e,t,n){\"use strict\";var i=e(\"../lib/oop\"),r=e(\"../keyboard/hash_handler\").MultiHashHandler,o=e(\"../lib/event_emitter\").EventEmitter,s=function(e,t){r.call(this,t,e),this.byName=this.commands,this.setDefaultHandler(\"exec\",(function(e){return e.command.exec(e.editor,e.args||{})}))};i.inherits(s,r),function(){i.implement(this,o),this.exec=function(e,t,n){if(Array.isArray(e)){for(var i=e.length;i--;)if(this.exec(e[i],t,n))return!0;return!1}if(\"string\"==typeof e&&(e=this.commands[e]),!e)return!1;if(t&&t.$readOnly&&!e.readOnly)return!1;if(0!=this.$checkCommandState&&e.isAvailable&&!e.isAvailable(t))return!1;var r={editor:t,command:e,args:n};return r.returnValue=this._emit(\"exec\",r),this._signal(\"afterExec\",r),!1!==r.returnValue},this.toggleRecording=function(e){if(!this.$inReplay)return e&&e._emit(\"changeStatus\"),this.recording?(this.macro.pop(),this.removeEventListener(\"exec\",this.$addCommandToMacro),this.macro.length||(this.macro=this.oldMacro),this.recording=!1):(this.$addCommandToMacro||(this.$addCommandToMacro=function(e){this.macro.push([e.command,e.args])}.bind(this)),this.oldMacro=this.macro,this.macro=[],this.on(\"exec\",this.$addCommandToMacro),this.recording=!0)},this.replay=function(e){if(!this.$inReplay&&this.macro){if(this.recording)return this.toggleRecording(e);try{this.$inReplay=!0,this.macro.forEach((function(t){\"string\"==typeof t?this.exec(t,e):this.exec(t[0],e,t[1])}),this)}finally{this.$inReplay=!1}}},this.trimMacro=function(e){return e.map((function(e){return\"string\"!=typeof e[0]&&(e[0]=e[0].name),e[1]||(e=e[0]),e}))}}.call(s.prototype),t.CommandManager=s})),ace.define(\"ace/commands/default_commands\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/config\",\"ace/range\"],(function(e,t,n){\"use strict\";var i=e(\"../lib/lang\"),r=e(\"../config\"),o=e(\"../range\").Range;function s(e,t){return{win:e,mac:t}}t.commands=[{name:\"showSettingsMenu\",bindKey:s(\"Ctrl-,\",\"Command-,\"),exec:function(e){r.loadModule(\"ace/ext/settings_menu\",(function(t){t.init(e),e.showSettingsMenu()}))},readOnly:!0},{name:\"goToNextError\",bindKey:s(\"Alt-E\",\"F4\"),exec:function(e){r.loadModule(\"./ext/error_marker\",(function(t){t.showErrorMarker(e,1)}))},scrollIntoView:\"animate\",readOnly:!0},{name:\"goToPreviousError\",bindKey:s(\"Alt-Shift-E\",\"Shift-F4\"),exec:function(e){r.loadModule(\"./ext/error_marker\",(function(t){t.showErrorMarker(e,-1)}))},scrollIntoView:\"animate\",readOnly:!0},{name:\"selectall\",description:\"Select all\",bindKey:s(\"Ctrl-A\",\"Command-A\"),exec:function(e){e.selectAll()},readOnly:!0},{name:\"centerselection\",description:\"Center selection\",bindKey:s(null,\"Ctrl-L\"),exec:function(e){e.centerSelection()},readOnly:!0},{name:\"gotoline\",description:\"Go to line...\",bindKey:s(\"Ctrl-L\",\"Command-L\"),exec:function(e,t){\"number\"!=typeof t||isNaN(t)||e.gotoLine(t),e.prompt({$type:\"gotoLine\"})},readOnly:!0},{name:\"fold\",bindKey:s(\"Alt-L|Ctrl-F1\",\"Command-Alt-L|Command-F1\"),exec:function(e){e.session.toggleFold(!1)},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"unfold\",bindKey:s(\"Alt-Shift-L|Ctrl-Shift-F1\",\"Command-Alt-Shift-L|Command-Shift-F1\"),exec:function(e){e.session.toggleFold(!0)},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"toggleFoldWidget\",bindKey:s(\"F2\",\"F2\"),exec:function(e){e.session.toggleFoldWidget()},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"toggleParentFoldWidget\",bindKey:s(\"Alt-F2\",\"Alt-F2\"),exec:function(e){e.session.toggleFoldWidget(!0)},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"foldall\",description:\"Fold all\",bindKey:s(null,\"Ctrl-Command-Option-0\"),exec:function(e){e.session.foldAll()},scrollIntoView:\"center\",readOnly:!0},{name:\"foldOther\",description:\"Fold other\",bindKey:s(\"Alt-0\",\"Command-Option-0\"),exec:function(e){e.session.foldAll(),e.session.unfold(e.selection.getAllRanges())},scrollIntoView:\"center\",readOnly:!0},{name:\"unfoldall\",description:\"Unfold all\",bindKey:s(\"Alt-Shift-0\",\"Command-Option-Shift-0\"),exec:function(e){e.session.unfold()},scrollIntoView:\"center\",readOnly:!0},{name:\"findnext\",description:\"Find next\",bindKey:s(\"Ctrl-K\",\"Command-G\"),exec:function(e){e.findNext()},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"findprevious\",description:\"Find previous\",bindKey:s(\"Ctrl-Shift-K\",\"Command-Shift-G\"),exec:function(e){e.findPrevious()},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"selectOrFindNext\",description:\"Select or find next\",bindKey:s(\"Alt-K\",\"Ctrl-G\"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findNext()},readOnly:!0},{name:\"selectOrFindPrevious\",description:\"Select or find previous\",bindKey:s(\"Alt-Shift-K\",\"Ctrl-Shift-G\"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findPrevious()},readOnly:!0},{name:\"find\",description:\"Find\",bindKey:s(\"Ctrl-F\",\"Command-F\"),exec:function(e){r.loadModule(\"ace/ext/searchbox\",(function(t){t.Search(e)}))},readOnly:!0},{name:\"overwrite\",description:\"Overwrite\",bindKey:\"Insert\",exec:function(e){e.toggleOverwrite()},readOnly:!0},{name:\"selecttostart\",description:\"Select to start\",bindKey:s(\"Ctrl-Shift-Home\",\"Command-Shift-Home|Command-Shift-Up\"),exec:function(e){e.getSelection().selectFileStart()},multiSelectAction:\"forEach\",readOnly:!0,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"gotostart\",description:\"Go to start\",bindKey:s(\"Ctrl-Home\",\"Command-Home|Command-Up\"),exec:function(e){e.navigateFileStart()},multiSelectAction:\"forEach\",readOnly:!0,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"selectup\",description:\"Select up\",bindKey:s(\"Shift-Up\",\"Shift-Up|Ctrl-Shift-P\"),exec:function(e){e.getSelection().selectUp()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"golineup\",description:\"Go line up\",bindKey:s(\"Up\",\"Up|Ctrl-P\"),exec:function(e,t){e.navigateUp(t.times)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selecttoend\",description:\"Select to end\",bindKey:s(\"Ctrl-Shift-End\",\"Command-Shift-End|Command-Shift-Down\"),exec:function(e){e.getSelection().selectFileEnd()},multiSelectAction:\"forEach\",readOnly:!0,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"gotoend\",description:\"Go to end\",bindKey:s(\"Ctrl-End\",\"Command-End|Command-Down\"),exec:function(e){e.navigateFileEnd()},multiSelectAction:\"forEach\",readOnly:!0,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"selectdown\",description:\"Select down\",bindKey:s(\"Shift-Down\",\"Shift-Down|Ctrl-Shift-N\"),exec:function(e){e.getSelection().selectDown()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"golinedown\",description:\"Go line down\",bindKey:s(\"Down\",\"Down|Ctrl-N\"),exec:function(e,t){e.navigateDown(t.times)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectwordleft\",description:\"Select word left\",bindKey:s(\"Ctrl-Shift-Left\",\"Option-Shift-Left\"),exec:function(e){e.getSelection().selectWordLeft()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotowordleft\",description:\"Go to word left\",bindKey:s(\"Ctrl-Left\",\"Option-Left\"),exec:function(e){e.navigateWordLeft()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selecttolinestart\",description:\"Select to line start\",bindKey:s(\"Alt-Shift-Left\",\"Command-Shift-Left|Ctrl-Shift-A\"),exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotolinestart\",description:\"Go to line start\",bindKey:s(\"Alt-Left|Home\",\"Command-Left|Home|Ctrl-A\"),exec:function(e){e.navigateLineStart()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectleft\",description:\"Select left\",bindKey:s(\"Shift-Left\",\"Shift-Left|Ctrl-Shift-B\"),exec:function(e){e.getSelection().selectLeft()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotoleft\",description:\"Go to left\",bindKey:s(\"Left\",\"Left|Ctrl-B\"),exec:function(e,t){e.navigateLeft(t.times)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectwordright\",description:\"Select word right\",bindKey:s(\"Ctrl-Shift-Right\",\"Option-Shift-Right\"),exec:function(e){e.getSelection().selectWordRight()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotowordright\",description:\"Go to word right\",bindKey:s(\"Ctrl-Right\",\"Option-Right\"),exec:function(e){e.navigateWordRight()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selecttolineend\",description:\"Select to line end\",bindKey:s(\"Alt-Shift-Right\",\"Command-Shift-Right|Shift-End|Ctrl-Shift-E\"),exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotolineend\",description:\"Go to line end\",bindKey:s(\"Alt-Right|End\",\"Command-Right|End|Ctrl-E\"),exec:function(e){e.navigateLineEnd()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectright\",description:\"Select right\",bindKey:s(\"Shift-Right\",\"Shift-Right\"),exec:function(e){e.getSelection().selectRight()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotoright\",description:\"Go to right\",bindKey:s(\"Right\",\"Right|Ctrl-F\"),exec:function(e,t){e.navigateRight(t.times)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectpagedown\",description:\"Select page down\",bindKey:\"Shift-PageDown\",exec:function(e){e.selectPageDown()},readOnly:!0},{name:\"pagedown\",description:\"Page down\",bindKey:s(null,\"Option-PageDown\"),exec:function(e){e.scrollPageDown()},readOnly:!0},{name:\"gotopagedown\",description:\"Go to page down\",bindKey:s(\"PageDown\",\"PageDown|Ctrl-V\"),exec:function(e){e.gotoPageDown()},readOnly:!0},{name:\"selectpageup\",description:\"Select page up\",bindKey:\"Shift-PageUp\",exec:function(e){e.selectPageUp()},readOnly:!0},{name:\"pageup\",description:\"Page up\",bindKey:s(null,\"Option-PageUp\"),exec:function(e){e.scrollPageUp()},readOnly:!0},{name:\"gotopageup\",description:\"Go to page up\",bindKey:\"PageUp\",exec:function(e){e.gotoPageUp()},readOnly:!0},{name:\"scrollup\",description:\"Scroll up\",bindKey:s(\"Ctrl-Up\",null),exec:function(e){e.renderer.scrollBy(0,-2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:\"scrolldown\",description:\"Scroll down\",bindKey:s(\"Ctrl-Down\",null),exec:function(e){e.renderer.scrollBy(0,2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:\"selectlinestart\",description:\"Select line start\",bindKey:\"Shift-Home\",exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectlineend\",description:\"Select line end\",bindKey:\"Shift-End\",exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"togglerecording\",description:\"Toggle recording\",bindKey:s(\"Ctrl-Alt-E\",\"Command-Option-E\"),exec:function(e){e.commands.toggleRecording(e)},readOnly:!0},{name:\"replaymacro\",description:\"Replay macro\",bindKey:s(\"Ctrl-Shift-E\",\"Command-Shift-E\"),exec:function(e){e.commands.replay(e)},readOnly:!0},{name:\"jumptomatching\",description:\"Jump to matching\",bindKey:s(\"Ctrl-\\\\|Ctrl-P\",\"Command-\\\\\"),exec:function(e){e.jumpToMatching()},multiSelectAction:\"forEach\",scrollIntoView:\"animate\",readOnly:!0},{name:\"selecttomatching\",description:\"Select to matching\",bindKey:s(\"Ctrl-Shift-\\\\|Ctrl-Shift-P\",\"Command-Shift-\\\\\"),exec:function(e){e.jumpToMatching(!0)},multiSelectAction:\"forEach\",scrollIntoView:\"animate\",readOnly:!0},{name:\"expandToMatching\",description:\"Expand to matching\",bindKey:s(\"Ctrl-Shift-M\",\"Ctrl-Shift-M\"),exec:function(e){e.jumpToMatching(!0,!0)},multiSelectAction:\"forEach\",scrollIntoView:\"animate\",readOnly:!0},{name:\"passKeysToBrowser\",description:\"Pass keys to browser\",bindKey:s(null,null),exec:function(){},passEvent:!0,readOnly:!0},{name:\"copy\",description:\"Copy\",exec:function(e){},readOnly:!0},{name:\"cut\",description:\"Cut\",exec:function(e){var t=e.$copyWithEmptySelection&&e.selection.isEmpty()?e.selection.getLineRange():e.selection.getRange();e._emit(\"cut\",t),t.isEmpty()||e.session.remove(t),e.clearSelection()},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"paste\",description:\"Paste\",exec:function(e,t){e.$handlePaste(t)},scrollIntoView:\"cursor\"},{name:\"removeline\",description:\"Remove line\",bindKey:s(\"Ctrl-D\",\"Command-D\"),exec:function(e){e.removeLines()},scrollIntoView:\"cursor\",multiSelectAction:\"forEachLine\"},{name:\"duplicateSelection\",description:\"Duplicate selection\",bindKey:s(\"Ctrl-Shift-D\",\"Command-Shift-D\"),exec:function(e){e.duplicateSelection()},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"sortlines\",description:\"Sort lines\",bindKey:s(\"Ctrl-Alt-S\",\"Command-Alt-S\"),exec:function(e){e.sortLines()},scrollIntoView:\"selection\",multiSelectAction:\"forEachLine\"},{name:\"togglecomment\",description:\"Toggle comment\",bindKey:s(\"Ctrl-/\",\"Command-/\"),exec:function(e){e.toggleCommentLines()},multiSelectAction:\"forEachLine\",scrollIntoView:\"selectionPart\"},{name:\"toggleBlockComment\",description:\"Toggle block comment\",bindKey:s(\"Ctrl-Shift-/\",\"Command-Shift-/\"),exec:function(e){e.toggleBlockComment()},multiSelectAction:\"forEach\",scrollIntoView:\"selectionPart\"},{name:\"modifyNumberUp\",description:\"Modify number up\",bindKey:s(\"Ctrl-Shift-Up\",\"Alt-Shift-Up\"),exec:function(e){e.modifyNumber(1)},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"modifyNumberDown\",description:\"Modify number down\",bindKey:s(\"Ctrl-Shift-Down\",\"Alt-Shift-Down\"),exec:function(e){e.modifyNumber(-1)},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"replace\",description:\"Replace\",bindKey:s(\"Ctrl-H\",\"Command-Option-F\"),exec:function(e){r.loadModule(\"ace/ext/searchbox\",(function(t){t.Search(e,!0)}))}},{name:\"undo\",description:\"Undo\",bindKey:s(\"Ctrl-Z\",\"Command-Z\"),exec:function(e){e.undo()}},{name:\"redo\",description:\"Redo\",bindKey:s(\"Ctrl-Shift-Z|Ctrl-Y\",\"Command-Shift-Z|Command-Y\"),exec:function(e){e.redo()}},{name:\"copylinesup\",description:\"Copy lines up\",bindKey:s(\"Alt-Shift-Up\",\"Command-Option-Up\"),exec:function(e){e.copyLinesUp()},scrollIntoView:\"cursor\"},{name:\"movelinesup\",description:\"Move lines up\",bindKey:s(\"Alt-Up\",\"Option-Up\"),exec:function(e){e.moveLinesUp()},scrollIntoView:\"cursor\"},{name:\"copylinesdown\",description:\"Copy lines down\",bindKey:s(\"Alt-Shift-Down\",\"Command-Option-Down\"),exec:function(e){e.copyLinesDown()},scrollIntoView:\"cursor\"},{name:\"movelinesdown\",description:\"Move lines down\",bindKey:s(\"Alt-Down\",\"Option-Down\"),exec:function(e){e.moveLinesDown()},scrollIntoView:\"cursor\"},{name:\"del\",description:\"Delete\",bindKey:s(\"Delete\",\"Delete|Ctrl-D|Shift-Delete\"),exec:function(e){e.remove(\"right\")},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"backspace\",description:\"Backspace\",bindKey:s(\"Shift-Backspace|Backspace\",\"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"),exec:function(e){e.remove(\"left\")},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"cut_or_delete\",description:\"Cut or delete\",bindKey:s(\"Shift-Delete\",null),exec:function(e){if(!e.selection.isEmpty())return!1;e.remove(\"left\")},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removetolinestart\",description:\"Remove to line start\",bindKey:s(\"Alt-Backspace\",\"Command-Backspace\"),exec:function(e){e.removeToLineStart()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removetolineend\",description:\"Remove to line end\",bindKey:s(\"Alt-Delete\",\"Ctrl-K|Command-Delete\"),exec:function(e){e.removeToLineEnd()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removetolinestarthard\",description:\"Remove to line start hard\",bindKey:s(\"Ctrl-Shift-Backspace\",null),exec:function(e){var t=e.selection.getRange();t.start.column=0,e.session.remove(t)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removetolineendhard\",description:\"Remove to line end hard\",bindKey:s(\"Ctrl-Shift-Delete\",null),exec:function(e){var t=e.selection.getRange();t.end.column=Number.MAX_VALUE,e.session.remove(t)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removewordleft\",description:\"Remove word left\",bindKey:s(\"Ctrl-Backspace\",\"Alt-Backspace|Ctrl-Alt-Backspace\"),exec:function(e){e.removeWordLeft()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removewordright\",description:\"Remove word right\",bindKey:s(\"Ctrl-Delete\",\"Alt-Delete\"),exec:function(e){e.removeWordRight()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"outdent\",description:\"Outdent\",bindKey:s(\"Shift-Tab\",\"Shift-Tab\"),exec:function(e){e.blockOutdent()},multiSelectAction:\"forEach\",scrollIntoView:\"selectionPart\"},{name:\"indent\",description:\"Indent\",bindKey:s(\"Tab\",\"Tab\"),exec:function(e){e.indent()},multiSelectAction:\"forEach\",scrollIntoView:\"selectionPart\"},{name:\"blockoutdent\",description:\"Block outdent\",bindKey:s(\"Ctrl-[\",\"Ctrl-[\"),exec:function(e){e.blockOutdent()},multiSelectAction:\"forEachLine\",scrollIntoView:\"selectionPart\"},{name:\"blockindent\",description:\"Block indent\",bindKey:s(\"Ctrl-]\",\"Ctrl-]\"),exec:function(e){e.blockIndent()},multiSelectAction:\"forEachLine\",scrollIntoView:\"selectionPart\"},{name:\"insertstring\",description:\"Insert string\",exec:function(e,t){e.insert(t)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"inserttext\",description:\"Insert text\",exec:function(e,t){e.insert(i.stringRepeat(t.text||\"\",t.times||1))},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"splitline\",description:\"Split line\",bindKey:s(null,\"Ctrl-O\"),exec:function(e){e.splitLine()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"transposeletters\",description:\"Transpose letters\",bindKey:s(\"Alt-Shift-X\",\"Ctrl-T\"),exec:function(e){e.transposeLetters()},multiSelectAction:function(e){e.transposeSelections(1)},scrollIntoView:\"cursor\"},{name:\"touppercase\",description:\"To uppercase\",bindKey:s(\"Ctrl-U\",\"Ctrl-U\"),exec:function(e){e.toUpperCase()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"tolowercase\",description:\"To lowercase\",bindKey:s(\"Ctrl-Shift-U\",\"Ctrl-Shift-U\"),exec:function(e){e.toLowerCase()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"expandtoline\",description:\"Expand to line\",bindKey:s(\"Ctrl-Shift-L\",\"Command-Shift-L\"),exec:function(e){var t=e.selection.getRange();t.start.column=t.end.column=0,t.end.row++,e.selection.setRange(t,!1)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"joinlines\",description:\"Join lines\",bindKey:s(null,null),exec:function(e){for(var t=e.selection.isBackwards(),n=t?e.selection.getSelectionLead():e.selection.getSelectionAnchor(),r=t?e.selection.getSelectionAnchor():e.selection.getSelectionLead(),s=e.session.doc.getLine(n.row).length,a=e.session.doc.getTextRange(e.selection.getRange()).replace(/\\n\\s*/,\" \").length,c=e.session.doc.getLine(n.row),l=n.row+1;l<=r.row+1;l++){var u=i.stringTrimLeft(i.stringTrimRight(e.session.doc.getLine(l)));0!==u.length&&(u=\" \"+u),c+=u}r.row+10?(e.selection.moveCursorTo(n.row,n.column),e.selection.selectTo(n.row,n.column+a)):(s=e.session.doc.getLine(n.row).length>s?s+1:s,e.selection.moveCursorTo(n.row,s))},multiSelectAction:\"forEach\",readOnly:!0},{name:\"invertSelection\",description:\"Invert selection\",bindKey:s(null,null),exec:function(e){var t=e.session.doc.getLength()-1,n=e.session.doc.getLine(t).length,i=e.selection.rangeList.ranges,r=[];i.length<1&&(i=[e.selection.getRange()]);for(var s=0;s=r.lastRow||i.end.row<=r.firstRow)&&this.renderer.scrollSelectionIntoView(this.selection.anchor,this.selection.lead)}\"animate\"==n&&this.renderer.animateScrolling(this.curOp.scrollTop)}var o=this.selection.toJSON();this.curOp.selectionAfter=o,this.$lastSel=this.selection.toJSON(),this.session.getUndoManager().addSelection(o),this.prevOp=this.curOp,this.curOp=null}},this.$mergeableCommands=[\"backspace\",\"del\",\"insertstring\"],this.$historyTracker=function(e){if(this.$mergeUndoDeltas){var t=this.prevOp,n=this.$mergeableCommands,i=t.command&&e.command.name==t.command.name;if(\"insertstring\"==e.command.name){var r=e.args;void 0===this.mergeNextCommand&&(this.mergeNextCommand=!0),i=i&&this.mergeNextCommand&&(!/\\s/.test(r)||/\\s/.test(t.args)),this.mergeNextCommand=!0}else i=i&&-1!==n.indexOf(e.command.name);\"always\"!=this.$mergeUndoDeltas&&Date.now()-this.sequenceStartTime>2e3&&(i=!1),i?this.session.mergeUndoDeltas=!0:-1!==n.indexOf(e.command.name)&&(this.sequenceStartTime=Date.now())}},this.setKeyboardHandler=function(e,t){if(e&&\"string\"==typeof e&&\"ace\"!=e){this.$keybindingId=e;var n=this;v.loadModule([\"keybinding\",e],(function(i){n.$keybindingId==e&&n.keyBinding.setKeyboardHandler(i&&i.handler),t&&t()}))}else this.$keybindingId=null,this.keyBinding.setKeyboardHandler(e),t&&t()},this.getKeyboardHandler=function(){return this.keyBinding.getKeyboardHandler()},this.setSession=function(e){if(this.session!=e){this.curOp&&this.endOperation(),this.curOp={};var t=this.session;if(t){this.session.off(\"change\",this.$onDocumentChange),this.session.off(\"changeMode\",this.$onChangeMode),this.session.off(\"tokenizerUpdate\",this.$onTokenizerUpdate),this.session.off(\"changeTabSize\",this.$onChangeTabSize),this.session.off(\"changeWrapLimit\",this.$onChangeWrapLimit),this.session.off(\"changeWrapMode\",this.$onChangeWrapMode),this.session.off(\"changeFold\",this.$onChangeFold),this.session.off(\"changeFrontMarker\",this.$onChangeFrontMarker),this.session.off(\"changeBackMarker\",this.$onChangeBackMarker),this.session.off(\"changeBreakpoint\",this.$onChangeBreakpoint),this.session.off(\"changeAnnotation\",this.$onChangeAnnotation),this.session.off(\"changeOverwrite\",this.$onCursorChange),this.session.off(\"changeScrollTop\",this.$onScrollTopChange),this.session.off(\"changeScrollLeft\",this.$onScrollLeftChange);var n=this.session.getSelection();n.off(\"changeCursor\",this.$onCursorChange),n.off(\"changeSelection\",this.$onSelectionChange)}this.session=e,e?(this.$onDocumentChange=this.onDocumentChange.bind(this),e.on(\"change\",this.$onDocumentChange),this.renderer.setSession(e),this.$onChangeMode=this.onChangeMode.bind(this),e.on(\"changeMode\",this.$onChangeMode),this.$onTokenizerUpdate=this.onTokenizerUpdate.bind(this),e.on(\"tokenizerUpdate\",this.$onTokenizerUpdate),this.$onChangeTabSize=this.renderer.onChangeTabSize.bind(this.renderer),e.on(\"changeTabSize\",this.$onChangeTabSize),this.$onChangeWrapLimit=this.onChangeWrapLimit.bind(this),e.on(\"changeWrapLimit\",this.$onChangeWrapLimit),this.$onChangeWrapMode=this.onChangeWrapMode.bind(this),e.on(\"changeWrapMode\",this.$onChangeWrapMode),this.$onChangeFold=this.onChangeFold.bind(this),e.on(\"changeFold\",this.$onChangeFold),this.$onChangeFrontMarker=this.onChangeFrontMarker.bind(this),this.session.on(\"changeFrontMarker\",this.$onChangeFrontMarker),this.$onChangeBackMarker=this.onChangeBackMarker.bind(this),this.session.on(\"changeBackMarker\",this.$onChangeBackMarker),this.$onChangeBreakpoint=this.onChangeBreakpoint.bind(this),this.session.on(\"changeBreakpoint\",this.$onChangeBreakpoint),this.$onChangeAnnotation=this.onChangeAnnotation.bind(this),this.session.on(\"changeAnnotation\",this.$onChangeAnnotation),this.$onCursorChange=this.onCursorChange.bind(this),this.session.on(\"changeOverwrite\",this.$onCursorChange),this.$onScrollTopChange=this.onScrollTopChange.bind(this),this.session.on(\"changeScrollTop\",this.$onScrollTopChange),this.$onScrollLeftChange=this.onScrollLeftChange.bind(this),this.session.on(\"changeScrollLeft\",this.$onScrollLeftChange),this.selection=e.getSelection(),this.selection.on(\"changeCursor\",this.$onCursorChange),this.$onSelectionChange=this.onSelectionChange.bind(this),this.selection.on(\"changeSelection\",this.$onSelectionChange),this.onChangeMode(),this.onCursorChange(),this.onScrollTopChange(),this.onScrollLeftChange(),this.onSelectionChange(),this.onChangeFrontMarker(),this.onChangeBackMarker(),this.onChangeBreakpoint(),this.onChangeAnnotation(),this.session.getUseWrapMode()&&this.renderer.adjustWrapLimit(),this.renderer.updateFull()):(this.selection=null,this.renderer.setSession(e)),this._signal(\"changeSession\",{session:e,oldSession:t}),this.curOp=null,t&&t._signal(\"changeEditor\",{oldEditor:this}),e&&e._signal(\"changeEditor\",{editor:this}),e&&e.bgTokenizer&&e.bgTokenizer.scheduleStart()}},this.getSession=function(){return this.session},this.setValue=function(e,t){return this.session.doc.setValue(e),t?1==t?this.navigateFileEnd():-1==t&&this.navigateFileStart():this.selectAll(),e},this.getValue=function(){return this.session.getValue()},this.getSelection=function(){return this.selection},this.resize=function(e){this.renderer.onResize(e)},this.setTheme=function(e,t){this.renderer.setTheme(e,t)},this.getTheme=function(){return this.renderer.getTheme()},this.setStyle=function(e){this.renderer.setStyle(e)},this.unsetStyle=function(e){this.renderer.unsetStyle(e)},this.getFontSize=function(){return this.getOption(\"fontSize\")||r.computedStyle(this.container).fontSize},this.setFontSize=function(e){this.setOption(\"fontSize\",e)},this.$highlightBrackets=function(){if(this.session.$bracketHighlight&&(this.session.removeMarker(this.session.$bracketHighlight),this.session.$bracketHighlight=null),!this.$highlightPending){var e=this;this.$highlightPending=!0,setTimeout((function(){e.$highlightPending=!1;var t=e.session;if(t&&t.bgTokenizer){var n=t.findMatchingBracket(e.getCursorPosition());if(n)var i=new p(n.row,n.column,n.row,n.column+1);else if(t.$mode.getMatching)i=t.$mode.getMatching(e.session);i&&(t.$bracketHighlight=t.addMarker(i,\"ace_bracket\",\"text\"))}}),50)}},this.$highlightTags=function(){if(!this.$highlightTagPending){var e=this;this.$highlightTagPending=!0,setTimeout((function(){e.$highlightTagPending=!1;var t=e.session;if(t&&t.bgTokenizer){var n=e.getCursorPosition(),i=new _(e.session,n.row,n.column),r=i.getCurrentToken();if(!r||!/\\b(?:tag-open|tag-name)/.test(r.type))return t.removeMarker(t.$tagHighlight),void(t.$tagHighlight=null);if(-1==r.type.indexOf(\"tag-open\")||(r=i.stepForward())){var o=r.value,s=0,a=i.stepBackward();if(\"<\"==a.value)do{a=r,(r=i.stepForward())&&r.value===o&&-1!==r.type.indexOf(\"tag-name\")&&(\"<\"===a.value?s++:\"=0);else{do{r=a,a=i.stepBackward(),r&&r.value===o&&-1!==r.type.indexOf(\"tag-name\")&&(\"<\"===a.value?s++:\"1||(e=!1)),t.$highlightLineMarker&&!e)t.removeMarker(t.$highlightLineMarker.id),t.$highlightLineMarker=null;else if(!t.$highlightLineMarker&&e){var n=new p(e.row,e.column,e.row,1/0);n.id=t.addMarker(n,\"ace_active-line\",\"screenLine\"),t.$highlightLineMarker=n}else e&&(t.$highlightLineMarker.start.row=e.row,t.$highlightLineMarker.end.row=e.row,t.$highlightLineMarker.start.column=e.column,t._signal(\"changeBackMarker\"))},this.onSelectionChange=function(e){var t=this.session;if(t.$selectionMarker&&t.removeMarker(t.$selectionMarker),t.$selectionMarker=null,this.selection.isEmpty())this.$updateHighlightActiveLine();else{var n=this.selection.getRange(),i=this.getSelectionStyle();t.$selectionMarker=t.addMarker(n,\"ace_selection\",i)}var r=this.$highlightSelectedWord&&this.$getSelectionHighLightRegexp();this.session.highlight(r),this._signal(\"changeSelection\")},this.$getSelectionHighLightRegexp=function(){var e=this.session,t=this.getSelectionRange();if(!t.isEmpty()&&!t.isMultiLine()){var n=t.start.column,i=t.end.column,r=e.getLine(t.start.row),o=r.substring(n,i);if(!(o.length>5e3)&&/[\\w\\d]/.test(o)){var s=this.$search.$assembleRegExp({wholeWord:!0,caseSensitive:!0,needle:o}),a=r.substring(n-1,i+1);if(s.test(a))return s}}},this.onChangeFrontMarker=function(){this.renderer.updateFrontMarkers()},this.onChangeBackMarker=function(){this.renderer.updateBackMarkers()},this.onChangeBreakpoint=function(){this.renderer.updateBreakpoints()},this.onChangeAnnotation=function(){this.renderer.setAnnotations(this.session.getAnnotations())},this.onChangeMode=function(e){this.renderer.updateText(),this._emit(\"changeMode\",e)},this.onChangeWrapLimit=function(){this.renderer.updateFull()},this.onChangeWrapMode=function(){this.renderer.onResize(!0)},this.onChangeFold=function(){this.$updateHighlightActiveLine(),this.renderer.updateFull()},this.getSelectedText=function(){return this.session.getTextRange(this.getSelectionRange())},this.getCopyText=function(){var e=this.getSelectedText(),t=this.session.doc.getNewLineCharacter(),n=!1;if(!e&&this.$copyWithEmptySelection){n=!0;for(var i=this.selection.getAllRanges(),r=0;ra.search(/\\S|$/)){var c=a.substr(r.column).search(/\\S|$/);n.doc.removeInLine(r.row,r.column,r.column+c)}}this.clearSelection();var l=r.column,u=n.getState(r.row),h=(a=n.getLine(r.row),i.checkOutdent(u,a,e));if(n.insert(r,e),o&&o.selection&&(2==o.selection.length?this.selection.setSelectionRange(new p(r.row,l+o.selection[0],r.row,l+o.selection[1])):this.selection.setSelectionRange(new p(r.row+o.selection[0],o.selection[1],r.row+o.selection[2],o.selection[3]))),n.getDocument().isNewLine(e)){var d=i.getNextLineIndent(u,a.slice(0,r.column),n.getTabString());n.insert({row:r.row+1,column:0},d)}h&&i.autoOutdent(u,n,r.row)},this.onTextInput=function(e,t){if(!t)return this.keyBinding.onTextInput(e);this.startOperation({command:{name:\"insertstring\"}});var n=this.applyComposition.bind(this,e,t);this.selection.rangeCount?this.forEachSelection(n):n(),this.endOperation()},this.applyComposition=function(e,t){var n;(t.extendLeft||t.extendRight)&&((n=this.selection.getRange()).start.column-=t.extendLeft,n.end.column+=t.extendRight,this.selection.setRange(n),e||n.isEmpty()||this.remove());(!e&&this.selection.isEmpty()||this.insert(e,!0),t.restoreStart||t.restoreEnd)&&((n=this.selection.getRange()).start.column-=t.restoreStart,n.end.column-=t.restoreEnd,this.selection.setRange(n))},this.onCommandKey=function(e,t,n){return this.keyBinding.onCommandKey(e,t,n)},this.setOverwrite=function(e){this.session.setOverwrite(e)},this.getOverwrite=function(){return this.session.getOverwrite()},this.toggleOverwrite=function(){this.session.toggleOverwrite()},this.setScrollSpeed=function(e){this.setOption(\"scrollSpeed\",e)},this.getScrollSpeed=function(){return this.getOption(\"scrollSpeed\")},this.setDragDelay=function(e){this.setOption(\"dragDelay\",e)},this.getDragDelay=function(){return this.getOption(\"dragDelay\")},this.setSelectionStyle=function(e){this.setOption(\"selectionStyle\",e)},this.getSelectionStyle=function(){return this.getOption(\"selectionStyle\")},this.setHighlightActiveLine=function(e){this.setOption(\"highlightActiveLine\",e)},this.getHighlightActiveLine=function(){return this.getOption(\"highlightActiveLine\")},this.setHighlightGutterLine=function(e){this.setOption(\"highlightGutterLine\",e)},this.getHighlightGutterLine=function(){return this.getOption(\"highlightGutterLine\")},this.setHighlightSelectedWord=function(e){this.setOption(\"highlightSelectedWord\",e)},this.getHighlightSelectedWord=function(){return this.$highlightSelectedWord},this.setAnimatedScroll=function(e){this.renderer.setAnimatedScroll(e)},this.getAnimatedScroll=function(){return this.renderer.getAnimatedScroll()},this.setShowInvisibles=function(e){this.renderer.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.renderer.getShowInvisibles()},this.setDisplayIndentGuides=function(e){this.renderer.setDisplayIndentGuides(e)},this.getDisplayIndentGuides=function(){return this.renderer.getDisplayIndentGuides()},this.setShowPrintMargin=function(e){this.renderer.setShowPrintMargin(e)},this.getShowPrintMargin=function(){return this.renderer.getShowPrintMargin()},this.setPrintMarginColumn=function(e){this.renderer.setPrintMarginColumn(e)},this.getPrintMarginColumn=function(){return this.renderer.getPrintMarginColumn()},this.setReadOnly=function(e){this.setOption(\"readOnly\",e)},this.getReadOnly=function(){return this.getOption(\"readOnly\")},this.setBehavioursEnabled=function(e){this.setOption(\"behavioursEnabled\",e)},this.getBehavioursEnabled=function(){return this.getOption(\"behavioursEnabled\")},this.setWrapBehavioursEnabled=function(e){this.setOption(\"wrapBehavioursEnabled\",e)},this.getWrapBehavioursEnabled=function(){return this.getOption(\"wrapBehavioursEnabled\")},this.setShowFoldWidgets=function(e){this.setOption(\"showFoldWidgets\",e)},this.getShowFoldWidgets=function(){return this.getOption(\"showFoldWidgets\")},this.setFadeFoldWidgets=function(e){this.setOption(\"fadeFoldWidgets\",e)},this.getFadeFoldWidgets=function(){return this.getOption(\"fadeFoldWidgets\")},this.remove=function(e){this.selection.isEmpty()&&(\"left\"==e?this.selection.selectLeft():this.selection.selectRight());var t=this.getSelectionRange();if(this.getBehavioursEnabled()){var n=this.session,i=n.getState(t.start.row),r=n.getMode().transformAction(i,\"deletion\",this,n,t);if(0===t.end.column){var o=n.getTextRange(t);if(\"\\n\"==o[o.length-1]){var s=n.getLine(t.end.row);/^\\s+$/.test(s)&&(t.end.column=s.length)}}r&&(t=r)}this.session.remove(t),this.clearSelection()},this.removeWordRight=function(){this.selection.isEmpty()&&this.selection.selectWordRight(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeWordLeft=function(){this.selection.isEmpty()&&this.selection.selectWordLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineStart=function(){this.selection.isEmpty()&&this.selection.selectLineStart(),this.selection.isEmpty()&&this.selection.selectLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineEnd=function(){this.selection.isEmpty()&&this.selection.selectLineEnd();var e=this.getSelectionRange();e.start.column==e.end.column&&e.start.row==e.end.row&&(e.end.column=0,e.end.row++),this.session.remove(e),this.clearSelection()},this.splitLine=function(){this.selection.isEmpty()||(this.session.remove(this.getSelectionRange()),this.clearSelection());var e=this.getCursorPosition();this.insert(\"\\n\"),this.moveCursorToPosition(e)},this.transposeLetters=function(){if(this.selection.isEmpty()){var e=this.getCursorPosition(),t=e.column;if(0!==t){var n,i,r=this.session.getLine(e.row);tt.toLowerCase()?1:0}));var r=new p(0,0,0,0);for(i=e.first;i<=e.last;i++){var o=t.getLine(i);r.start.row=i,r.end.row=i,r.end.column=o.length,t.replace(r,n[i-e.first])}},this.toggleCommentLines=function(){var e=this.session.getState(this.getCursorPosition().row),t=this.$getSelectedRows();this.session.getMode().toggleCommentLines(e,this.session,t.first,t.last)},this.toggleBlockComment=function(){var e=this.getCursorPosition(),t=this.session.getState(e.row),n=this.getSelectionRange();this.session.getMode().toggleBlockComment(t,this.session,n,e)},this.getNumberAt=function(e,t){var n=/[\\-]?[0-9]+(?:\\.[0-9]+)?/g;n.lastIndex=0;for(var i=this.session.getLine(e);n.lastIndex=t)return{value:r[0],start:r.index,end:r.index+r[0].length}}return null},this.modifyNumber=function(e){var t=this.selection.getCursor().row,n=this.selection.getCursor().column,i=new p(t,n-1,t,n),r=this.session.getTextRange(i);if(!isNaN(parseFloat(r))&&isFinite(r)){var o=this.getNumberAt(t,n);if(o){var s=o.value.indexOf(\".\")>=0?o.start+o.value.indexOf(\".\")+1:o.end,a=o.start+o.value.length-s,c=parseFloat(o.value);c*=Math.pow(10,a),s!==o.end&&n=a&&s<=c&&(n=t,l.selection.clearSelection(),l.moveCursorTo(e,a+i),l.selection.selectTo(e,c+i)),a=c}));for(var u,h=this.$toggleWordPairs,d=0;dp+1)break;p=m.last}for(u--,a=this.session.$moveLines(d,p,t?0:e),t&&-1==e&&(h=u+1);h<=u;)s[h].moveBy(a,0),h++;t||(a=0),c+=a}r.fromOrientedRange(r.ranges[0]),r.rangeList.attach(this.session),this.inVirtualSelectionMode=!1}},this.$getSelectedRows=function(e){return e=(e||this.getSelectionRange()).collapseRows(),{first:this.session.getRowFoldStart(e.start.row),last:this.session.getRowFoldEnd(e.end.row)}},this.onCompositionStart=function(e){this.renderer.showComposition(e)},this.onCompositionUpdate=function(e){this.renderer.setCompositionText(e)},this.onCompositionEnd=function(){this.renderer.hideComposition()},this.getFirstVisibleRow=function(){return this.renderer.getFirstVisibleRow()},this.getLastVisibleRow=function(){return this.renderer.getLastVisibleRow()},this.isRowVisible=function(e){return e>=this.getFirstVisibleRow()&&e<=this.getLastVisibleRow()},this.isRowFullyVisible=function(e){return e>=this.renderer.getFirstFullyVisibleRow()&&e<=this.renderer.getLastFullyVisibleRow()},this.$getVisibleRowCount=function(){return this.renderer.getScrollBottomRow()-this.renderer.getScrollTopRow()+1},this.$moveByPage=function(e,t){var n=this.renderer,i=this.renderer.layerConfig,r=e*Math.floor(i.height/i.lineHeight);!0===t?this.selection.$moveSelection((function(){this.moveCursorBy(r,0)})):!1===t&&(this.selection.moveCursorBy(r,0),this.selection.clearSelection());var o=n.scrollTop;n.scrollBy(0,r*i.lineHeight),null!=t&&n.scrollCursorIntoView(null,.5),n.animateScrolling(o)},this.selectPageDown=function(){this.$moveByPage(1,!0)},this.selectPageUp=function(){this.$moveByPage(-1,!0)},this.gotoPageDown=function(){this.$moveByPage(1,!1)},this.gotoPageUp=function(){this.$moveByPage(-1,!1)},this.scrollPageDown=function(){this.$moveByPage(1)},this.scrollPageUp=function(){this.$moveByPage(-1)},this.scrollToRow=function(e){this.renderer.scrollToRow(e)},this.scrollToLine=function(e,t,n,i){this.renderer.scrollToLine(e,t,n,i)},this.centerSelection=function(){var e=this.getSelectionRange(),t={row:Math.floor(e.start.row+(e.end.row-e.start.row)/2),column:Math.floor(e.start.column+(e.end.column-e.start.column)/2)};this.renderer.alignCursor(t,.5)},this.getCursorPosition=function(){return this.selection.getCursor()},this.getCursorPositionScreen=function(){return this.session.documentToScreenPosition(this.getCursorPosition())},this.getSelectionRange=function(){return this.selection.getRange()},this.selectAll=function(){this.selection.selectAll()},this.clearSelection=function(){this.selection.clearSelection()},this.moveCursorTo=function(e,t){this.selection.moveCursorTo(e,t)},this.moveCursorToPosition=function(e){this.selection.moveCursorToPosition(e)},this.jumpToMatching=function(e,t){var n=this.getCursorPosition(),i=new _(this.session,n.row,n.column),r=i.getCurrentToken(),o=r||i.stepForward();if(o){var s,a,c=!1,l={},u=n.column-o.start,h={\")\":\"(\",\"(\":\"(\",\"]\":\"[\",\"[\":\"[\",\"{\":\"{\",\"}\":\"{\"};do{if(o.value.match(/[{}()\\[\\]]/g)){for(;u=0;--o)this.$tryReplace(n[o],e)&&i++;return this.selection.setSelectionRange(r),i},this.$tryReplace=function(e,t){var n=this.session.getTextRange(e);return null!==(t=this.$search.replace(n,t))?(e.end=this.session.replace(e,t),e):null},this.getLastSearchOptions=function(){return this.$search.getOptions()},this.find=function(e,t,n){t||(t={}),\"string\"==typeof e||e instanceof RegExp?t.needle=e:\"object\"==typeof e&&i.mixin(t,e);var r=this.selection.getRange();null==t.needle&&((e=this.session.getTextRange(r)||this.$search.$options.needle)||(r=this.session.getWordRange(r.start.row,r.start.column),e=this.session.getTextRange(r)),this.$search.set({needle:e})),this.$search.set(t),t.start||this.$search.set({start:r});var o=this.$search.find(this.session);return t.preventScroll?o:o?(this.revealRange(o,n),o):(t.backwards?r.start=r.end:r.end=r.start,void this.selection.setRange(r))},this.findNext=function(e,t){this.find({skipCurrent:!0,backwards:!1},e,t)},this.findPrevious=function(e,t){this.find(e,{skipCurrent:!0,backwards:!0},t)},this.revealRange=function(e,t){this.session.unfold(e),this.selection.setSelectionRange(e);var n=this.renderer.scrollTop;this.renderer.scrollSelectionIntoView(e.start,e.end,.5),!1!==t&&this.renderer.animateScrolling(n)},this.undo=function(){this.session.getUndoManager().undo(this.session),this.renderer.scrollCursorIntoView(null,.5)},this.redo=function(){this.session.getUndoManager().redo(this.session),this.renderer.scrollCursorIntoView(null,.5)},this.destroy=function(){this.renderer.destroy(),this._signal(\"destroy\",this),this.session&&this.session.destroy()},this.setAutoScrollEditorIntoView=function(e){if(e){var t,n=this,i=!1;this.$scrollAnchor||(this.$scrollAnchor=document.createElement(\"div\"));var r=this.$scrollAnchor;r.style.cssText=\"position:absolute\",this.container.insertBefore(r,this.container.firstChild);var o=this.on(\"changeSelection\",(function(){i=!0})),s=this.renderer.on(\"beforeRender\",(function(){i&&(t=n.renderer.container.getBoundingClientRect())})),a=this.renderer.on(\"afterRender\",(function(){if(i&&t&&(n.isFocused()||n.searchBox&&n.searchBox.isFocused())){var e=n.renderer,o=e.$cursorLayer.$pixelPos,s=e.layerConfig,a=o.top-s.offset;null!=(i=o.top>=0&&a+t.top<0||!(o.topwindow.innerHeight)&&null)&&(r.style.top=a+\"px\",r.style.left=o.left+\"px\",r.style.height=s.lineHeight+\"px\",r.scrollIntoView(i)),i=t=null}}));this.setAutoScrollEditorIntoView=function(e){e||(delete this.setAutoScrollEditorIntoView,this.off(\"changeSelection\",o),this.renderer.off(\"afterRender\",a),this.renderer.off(\"beforeRender\",s))}}},this.$resetCursorStyle=function(){var e=this.$cursorStyle||\"ace\",t=this.renderer.$cursorLayer;t&&(t.setSmoothBlinking(/smooth/.test(e)),t.isBlinking=!this.$readOnly&&\"wide\"!=e,r.setCssClass(t.element,\"ace_slim-cursors\",/slim/.test(e)))},this.prompt=function(e,t,n){var i=this;v.loadModule(\"./ext/prompt\",(function(r){r.prompt(i,e,t,n)}))}}.call(C.prototype),v.defineOptions(C.prototype,\"editor\",{selectionStyle:{set:function(e){this.onSelectionChange(),this._signal(\"changeSelectionStyle\",{data:e})},initialValue:\"line\"},highlightActiveLine:{set:function(){this.$updateHighlightActiveLine()},initialValue:!0},highlightSelectedWord:{set:function(e){this.$onSelectionChange()},initialValue:!0},readOnly:{set:function(e){this.textInput.setReadOnly(e),this.$resetCursorStyle()},initialValue:!1},copyWithEmptySelection:{set:function(e){this.textInput.setCopyWithEmptySelection(e)},initialValue:!1},cursorStyle:{set:function(e){this.$resetCursorStyle()},values:[\"ace\",\"slim\",\"smooth\",\"wide\"],initialValue:\"ace\"},mergeUndoDeltas:{values:[!1,!0,\"always\"],initialValue:!0},behavioursEnabled:{initialValue:!0},wrapBehavioursEnabled:{initialValue:!0},autoScrollEditorIntoView:{set:function(e){this.setAutoScrollEditorIntoView(e)}},keyboardHandler:{set:function(e){this.setKeyboardHandler(e)},get:function(){return this.$keybindingId},handlesSet:!0},value:{set:function(e){this.session.setValue(e)},get:function(){return this.getValue()},handlesSet:!0,hidden:!0},session:{set:function(e){this.setSession(e)},get:function(){return this.session},handlesSet:!0,hidden:!0},showLineNumbers:{set:function(e){this.renderer.$gutterLayer.setShowLineNumbers(e),this.renderer.$loop.schedule(this.renderer.CHANGE_GUTTER),e&&this.$relativeLineNumbers?A.attach(this):A.detach(this)},initialValue:!0},relativeLineNumbers:{set:function(e){this.$showLineNumbers&&e?A.attach(this):A.detach(this)}},placeholder:{set:function(e){this.$updatePlaceholder||(this.$updatePlaceholder=function(){var e=this.renderer.$composition||this.getValue();if(e&&this.renderer.placeholderNode)this.renderer.off(\"afterRender\",this.$updatePlaceholder),r.removeCssClass(this.container,\"ace_hasPlaceholder\"),this.renderer.placeholderNode.remove(),this.renderer.placeholderNode=null;else if(!e&&!this.renderer.placeholderNode){this.renderer.on(\"afterRender\",this.$updatePlaceholder),r.addCssClass(this.container,\"ace_hasPlaceholder\");var t=r.createElement(\"div\");t.className=\"ace_placeholder\",t.textContent=this.$placeholder||\"\",this.renderer.placeholderNode=t,this.renderer.content.appendChild(this.renderer.placeholderNode)}}.bind(this),this.on(\"input\",this.$updatePlaceholder)),this.$updatePlaceholder()}},hScrollBarAlwaysVisible:\"renderer\",vScrollBarAlwaysVisible:\"renderer\",highlightGutterLine:\"renderer\",animatedScroll:\"renderer\",showInvisibles:\"renderer\",showPrintMargin:\"renderer\",printMarginColumn:\"renderer\",printMargin:\"renderer\",fadeFoldWidgets:\"renderer\",showFoldWidgets:\"renderer\",displayIndentGuides:\"renderer\",showGutter:\"renderer\",fontSize:\"renderer\",fontFamily:\"renderer\",maxLines:\"renderer\",minLines:\"renderer\",scrollPastEnd:\"renderer\",fixedWidthGutter:\"renderer\",theme:\"renderer\",hasCssTransforms:\"renderer\",maxPixelHeight:\"renderer\",useTextareaForIME:\"renderer\",scrollSpeed:\"$mouseHandler\",dragDelay:\"$mouseHandler\",dragEnabled:\"$mouseHandler\",focusTimeout:\"$mouseHandler\",tooltipFollowsMouse:\"$mouseHandler\",firstLineNumber:\"session\",overwrite:\"session\",newLineMode:\"session\",useWorker:\"session\",useSoftTabs:\"session\",navigateWithinSoftTabs:\"session\",tabSize:\"session\",wrap:\"session\",indentedSoftWrap:\"session\",foldStyle:\"session\",mode:\"session\"});var A={getText:function(e,t){return(Math.abs(e.selection.lead.row-t)||t+1+(t<9?\"·\":\"\"))+\"\"},getWidth:function(e,t,n){return Math.max(t.toString().length,(n.lastRow+1).toString().length,2)*n.characterWidth},update:function(e,t){t.renderer.$loop.schedule(t.renderer.CHANGE_GUTTER)},attach:function(e){e.renderer.$gutterLayer.$renderer=this,e.on(\"changeSelection\",this.update),this.update(null,e)},detach:function(e){e.renderer.$gutterLayer.$renderer==this&&(e.renderer.$gutterLayer.$renderer=null),e.off(\"changeSelection\",this.update),this.update(null,e)}};t.Editor=C})),ace.define(\"ace/undomanager\",[\"require\",\"exports\",\"module\",\"ace/range\"],(function(e,t,n){\"use strict\";var i=function(){this.$maxRev=0,this.$fromUndo=!1,this.reset()};(function(){this.addSession=function(e){this.$session=e},this.add=function(e,t,n){this.$fromUndo||e!=this.$lastDelta&&(!1!==t&&this.lastDeltas||(this.lastDeltas=[],this.$undoStack.push(this.lastDeltas),e.id=this.$rev=++this.$maxRev),\"remove\"!=e.action&&\"insert\"!=e.action||(this.$lastDelta=e),this.lastDeltas.push(e))},this.addSelection=function(e,t){this.selections.push({value:e,rev:t||this.$rev})},this.startNewGroup=function(){return this.lastDeltas=null,this.$rev},this.markIgnored=function(e,t){null==t&&(t=this.$rev+1);for(var n=this.$undoStack,i=n.length;i--;){var r=n[i][0];if(r.id<=e)break;r.id0},this.canRedo=function(){return this.$redoStack.length>0},this.bookmark=function(e){null==e&&(e=this.$rev),this.mark=e},this.isAtBookmark=function(){return this.$rev===this.mark},this.toJSON=function(){},this.fromJSON=function(){},this.hasUndo=this.canUndo,this.hasRedo=this.canRedo,this.isClean=this.isAtBookmark,this.markClean=this.bookmark,this.$prettyPrint=function(e){return e?a(e):a(this.$undoStack)+\"\\n---\\n\"+a(this.$redoStack)}}).call(i.prototype);var r=e(\"./range\").Range,o=r.comparePoints;r.comparePoints;function s(e){return{row:e.row,column:e.column}}function a(e){if(e=e||this,Array.isArray(e))return e.map(a).join(\"\\n\");var t=\"\";return e.action?(t=\"insert\"==e.action?\"+\":\"-\",t+=\"[\"+e.lines+\"]\"):e.value&&(t=Array.isArray(e.value)?e.value.map(c).join(\"\\n\"):c(e.value)),e.start&&(t+=c(e)),(e.id||e.rev)&&(t+=\"\\t(\"+(e.id||e.rev)+\")\"),t}function c(e){return e.start.row+\":\"+e.start.column+\"=>\"+e.end.row+\":\"+e.end.column}function l(e,t){var n=\"insert\"==e.action,i=\"insert\"==t.action;if(n&&i)if(o(t.start,e.end)>=0)d(t,e,-1);else{if(!(o(t.start,e.start)<=0))return null;d(e,t,1)}else if(n&&!i)if(o(t.start,e.end)>=0)d(t,e,-1);else{if(!(o(t.end,e.start)<=0))return null;d(e,t,-1)}else if(!n&&i)if(o(t.start,e.start)>=0)d(t,e,1);else{if(!(o(t.start,e.start)<=0))return null;d(e,t,1)}else if(!n&&!i)if(o(t.start,e.start)>=0)d(t,e,1);else{if(!(o(t.end,e.start)<=0))return null;d(e,t,-1)}return[t,e]}function u(e,t){for(var n=e.length;n--;)for(var i=0;i=0?d(e,t,-1):(o(e.start,t.start)<=0||d(e,r.fromPoints(t.start,e.start),-1),d(t,e,1));else if(!n&&i)o(t.start,e.end)>=0?d(t,e,-1):(o(t.start,e.start)<=0||d(t,r.fromPoints(e.start,t.start),-1),d(e,t,1));else if(!n&&!i)if(o(t.start,e.end)>=0)d(t,e,-1);else{var s,a;if(!(o(t.end,e.start)<=0))return o(e.start,t.start)<0&&(s=e,e=m(e,t.start)),o(e.end,t.end)>0&&(a=m(e,t.end)),p(t.end,e.start,e.end,-1),a&&!s&&(e.lines=a.lines,e.start=a.start,e.end=a.end,a=e),[t,s,a].filter(Boolean);d(e,t,-1)}return[t,e]}function d(e,t,n){p(e.start,t.start,t.end,n),p(e.end,t.start,t.end,n)}function p(e,t,n,i){e.row==(1==i?t:n).row&&(e.column+=i*(n.column-t.column)),e.row+=i*(n.row-t.row)}function m(e,t){var n=e.lines,i=e.end;e.end=s(t);var r=e.end.row-e.start.row,o=n.splice(r,n.length),a=r?t.column:t.column-e.start.column;return n.push(o[0].substring(0,a)),o[0]=o[0].substr(a),{start:s(t),end:i,lines:o,action:e.action}}function f(e,t){t=function(e){return{start:s(e.start),end:s(e.end),action:e.action,lines:e.lines.slice()}}(t);for(var n=e.length;n--;){for(var i=e[n],r=0;ro&&(c=r.end.row+1,o=(r=t.getNextFoldLine(c,r))?r.start.row:1/0),c>i){for(;this.$lines.getLength()>a+1;)this.$lines.pop();break}(s=this.$lines.get(++a))?s.row=c:(s=this.$lines.createCell(c,e,this.session,l),this.$lines.push(s)),this.$renderCell(s,e,r,c),c++}this._signal(\"afterRender\"),this.$updateGutterWidth(e)},this.$updateGutterWidth=function(e){var t=this.session,n=t.gutterRenderer||this.$renderer,i=t.$firstLineNumber,r=this.$lines.last()?this.$lines.last().text:\"\";(this.$fixedWidth||t.$useWrapMode)&&(r=t.getLength()+i-1);var o=n?n.getWidth(t,r,e):r.toString().length*e.characterWidth,s=this.$padding||this.$computePadding();(o+=s.left+s.right)===this.gutterWidth||isNaN(o)||(this.gutterWidth=o,this.element.parentNode.style.width=this.element.style.width=Math.ceil(this.gutterWidth)+\"px\",this._signal(\"changeGutterWidth\",o))},this.$updateCursorRow=function(){if(this.$highlightGutterLine){var e=this.session.selection.getCursor();this.$cursorRow!==e.row&&(this.$cursorRow=e.row)}},this.updateLineHighlight=function(){if(this.$highlightGutterLine){var e=this.session.selection.cursor.row;if(this.$cursorRow=e,!this.$cursorCell||this.$cursorCell.row!=e){this.$cursorCell&&(this.$cursorCell.element.className=this.$cursorCell.element.className.replace(\"ace_gutter-active-line \",\"\"));var t=this.$lines.cells;this.$cursorCell=null;for(var n=0;n=this.$cursorRow){if(i.row>this.$cursorRow){var r=this.session.getFoldLine(this.$cursorRow);if(!(n>0&&r&&r.start.row==t[n-1].row))break;i=t[n-1]}i.element.className=\"ace_gutter-active-line \"+i.element.className,this.$cursorCell=i;break}}}}},this.scrollLines=function(e){var t=this.config;if(this.config=e,this.$updateCursorRow(),this.$lines.pageChanged(t,e))return this.update(e);this.$lines.moveContainer(e);var n=Math.min(e.lastRow+e.gutterOffset,this.session.getLength()-1),i=this.oldLastRow;if(this.oldLastRow=n,!t||i0;r--)this.$lines.shift();if(i>n)for(r=this.session.getFoldedRowCount(n+1,i);r>0;r--)this.$lines.pop();e.firstRowi&&this.$lines.push(this.$renderLines(e,i+1,n)),this.updateLineHighlight(),this._signal(\"afterRender\"),this.$updateGutterWidth(e)},this.$renderLines=function(e,t,n){for(var i=[],r=t,o=this.session.getNextFoldLine(r),s=o?o.start.row:1/0;r>s&&(r=o.end.row+1,s=(o=this.session.getNextFoldLine(r,o))?o.start.row:1/0),!(r>n);){var a=this.$lines.createCell(r,e,this.session,l);this.$renderCell(a,e,o,r),i.push(a),r++}return i},this.$renderCell=function(e,t,n,r){var o=e.element,s=this.session,a=o.childNodes[0],c=o.childNodes[1],l=s.$firstLineNumber,u=s.$breakpoints,h=s.$decorations,d=s.gutterRenderer||this.$renderer,p=this.$showFoldWidgets&&s.foldWidgets,m=n?n.start.row:Number.MAX_VALUE,f=\"ace_gutter-cell \";if(this.$highlightGutterLine&&(r==this.$cursorRow||n&&r=m&&this.$cursorRow<=n.end.row)&&(f+=\"ace_gutter-active-line \",this.$cursorCell!=e&&(this.$cursorCell&&(this.$cursorCell.element.className=this.$cursorCell.element.className.replace(\"ace_gutter-active-line \",\"\")),this.$cursorCell=e)),u[r]&&(f+=u[r]),h[r]&&(f+=h[r]),this.$annotations[r]&&(f+=this.$annotations[r].className),o.className!=f&&(o.className=f),p){var g=p[r];null==g&&(g=p[r]=s.getFoldWidget(r))}if(g){f=\"ace_fold-widget ace_\"+g;\"start\"==g&&r==m&&rn.right-t.right?\"foldWidgets\":void 0}}).call(c.prototype),t.Gutter=c})),ace.define(\"ace/layer/marker\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\"],(function(e,t,n){\"use strict\";var i=e(\"../range\").Range,r=e(\"../lib/dom\"),o=function(e){this.element=r.createElement(\"div\"),this.element.className=\"ace_layer ace_marker-layer\",e.appendChild(this.element)};(function(){this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setMarkers=function(e){this.markers=e},this.elt=function(e,t){var n=-1!=this.i&&this.element.childNodes[this.i];n?this.i++:(n=document.createElement(\"div\"),this.element.appendChild(n),this.i=-1),n.style.cssText=t,n.className=e},this.update=function(e){if(e){var t;for(var n in this.config=e,this.i=0,this.markers){var i=this.markers[n];if(i.range){var r=i.range.clipRows(e.firstRow,e.lastRow);if(!r.isEmpty())if(r=r.toScreenRange(this.session),i.renderer){var o=this.$getTop(r.start.row,e),s=this.$padding+r.start.column*e.characterWidth;i.renderer(t,r,s,o,e)}else\"fullLine\"==i.type?this.drawFullLineMarker(t,r,i.clazz,e):\"screenLine\"==i.type?this.drawScreenLineMarker(t,r,i.clazz,e):r.isMultiLine()?\"text\"==i.type?this.drawTextMarker(t,r,i.clazz,e):this.drawMultiLineMarker(t,r,i.clazz,e):this.drawSingleLineMarker(t,r,i.clazz+\" ace_start ace_br15\",e)}else i.update(t,this,this.session,e)}if(-1!=this.i)for(;this.id?4:0)|(l==c?8:0)),r,l==c?0:1,o)},this.drawMultiLineMarker=function(e,t,n,i,r){var o=this.$padding,s=i.lineHeight,a=this.$getTop(t.start.row,i),c=o+t.start.column*i.characterWidth;(r=r||\"\",this.session.$bidiHandler.isBidiRow(t.start.row))?((l=t.clone()).end.row=l.start.row,l.end.column=this.session.getLine(l.start.row).length,this.drawBidiSingleLineMarker(e,l,n+\" ace_br1 ace_start\",i,null,r)):this.elt(n+\" ace_br1 ace_start\",\"height:\"+s+\"px;right:0;top:\"+a+\"px;left:\"+c+\"px;\"+(r||\"\"));if(this.session.$bidiHandler.isBidiRow(t.end.row)){var l;(l=t.clone()).start.row=l.end.row,l.start.column=0,this.drawBidiSingleLineMarker(e,l,n+\" ace_br12\",i,null,r)}else{a=this.$getTop(t.end.row,i);var u=t.end.column*i.characterWidth;this.elt(n+\" ace_br12\",\"height:\"+s+\"px;width:\"+u+\"px;top:\"+a+\"px;left:\"+o+\"px;\"+(r||\"\"))}if(!((s=(t.end.row-t.start.row-1)*i.lineHeight)<=0)){a=this.$getTop(t.start.row+1,i);var h=(t.start.column?1:0)|(t.end.column?0:8);this.elt(n+(h?\" ace_br\"+h:\"\"),\"height:\"+s+\"px;right:0;top:\"+a+\"px;left:\"+o+\"px;\"+(r||\"\"))}},this.drawSingleLineMarker=function(e,t,n,i,r,o){if(this.session.$bidiHandler.isBidiRow(t.start.row))return this.drawBidiSingleLineMarker(e,t,n,i,r,o);var s=i.lineHeight,a=(t.end.column+(r||0)-t.start.column)*i.characterWidth,c=this.$getTop(t.start.row,i),l=this.$padding+t.start.column*i.characterWidth;this.elt(n,\"height:\"+s+\"px;width:\"+a+\"px;top:\"+c+\"px;left:\"+l+\"px;\"+(o||\"\"))},this.drawBidiSingleLineMarker=function(e,t,n,i,r,o){var s=i.lineHeight,a=this.$getTop(t.start.row,i),c=this.$padding;this.session.$bidiHandler.getSelections(t.start.column,t.end.column).forEach((function(e){this.elt(n,\"height:\"+s+\"px;width:\"+e.width+(r||0)+\"px;top:\"+a+\"px;left:\"+(c+e.left)+\"px;\"+(o||\"\"))}),this)},this.drawFullLineMarker=function(e,t,n,i,r){var o=this.$getTop(t.start.row,i),s=i.lineHeight;t.start.row!=t.end.row&&(s+=this.$getTop(t.end.row,i)-o),this.elt(n,\"height:\"+s+\"px;top:\"+o+\"px;left:0;right:0;\"+(r||\"\"))},this.drawScreenLineMarker=function(e,t,n,i,r){var o=this.$getTop(t.start.row,i),s=i.lineHeight;this.elt(n,\"height:\"+s+\"px;top:\"+o+\"px;left:0;right:0;\"+(r||\"\"))}}).call(o.prototype),t.Marker=o})),ace.define(\"ace/layer/text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/layer/lines\",\"ace/lib/event_emitter\"],(function(e,t,n){\"use strict\";var i=e(\"../lib/oop\"),r=e(\"../lib/dom\"),o=e(\"../lib/lang\"),s=e(\"./lines\").Lines,a=e(\"../lib/event_emitter\").EventEmitter,c=function(e){this.dom=r,this.element=this.dom.createElement(\"div\"),this.element.className=\"ace_layer ace_text-layer\",e.appendChild(this.element),this.$updateEolChar=this.$updateEolChar.bind(this),this.$lines=new s(this.element)};(function(){i.implement(this,a),this.EOF_CHAR=\"¶\",this.EOL_CHAR_LF=\"¬\",this.EOL_CHAR_CRLF=\"¤\",this.EOL_CHAR=this.EOL_CHAR_LF,this.TAB_CHAR=\"—\",this.SPACE_CHAR=\"·\",this.$padding=0,this.MAX_LINE_LENGTH=1e4,this.$updateEolChar=function(){var e=this.session.doc,t=\"\\n\"==e.getNewLineCharacter()&&\"windows\"!=e.getNewLineMode()?this.EOL_CHAR_LF:this.EOL_CHAR_CRLF;if(this.EOL_CHAR!=t)return this.EOL_CHAR=t,!0},this.setPadding=function(e){this.$padding=e,this.element.style.margin=\"0 \"+e+\"px\"},this.getLineHeight=function(){return this.$fontMetrics.$characterSize.height||0},this.getCharacterWidth=function(){return this.$fontMetrics.$characterSize.width||0},this.$setFontMetrics=function(e){this.$fontMetrics=e,this.$fontMetrics.on(\"changeCharacterSize\",function(e){this._signal(\"changeCharacterSize\",e)}.bind(this)),this.$pollSizeChanges()},this.checkForSizeChanges=function(){this.$fontMetrics.checkForSizeChanges()},this.$pollSizeChanges=function(){return this.$pollSizeChangesTimer=this.$fontMetrics.$pollSizeChanges()},this.setSession=function(e){this.session=e,e&&this.$computeTabString()},this.showInvisibles=!1,this.setShowInvisibles=function(e){return this.showInvisibles!=e&&(this.showInvisibles=e,this.$computeTabString(),!0)},this.displayIndentGuides=!0,this.setDisplayIndentGuides=function(e){return this.displayIndentGuides!=e&&(this.displayIndentGuides=e,this.$computeTabString(),!0)},this.$tabStrings=[],this.onChangeTabSize=this.$computeTabString=function(){var e=this.session.getTabSize();this.tabSize=e;for(var t=this.$tabStrings=[0],n=1;nu&&(a=c.end.row+1,u=(c=this.session.getNextFoldLine(a,c))?c.start.row:1/0),!(a>r);){var h=o[s++];if(h){this.dom.removeChildren(h),this.$renderLine(h,a,a==u&&c),l&&(h.style.top=this.$lines.computeLineTop(a,e,this.session)+\"px\");var d=e.lineHeight*this.session.getRowLength(a)+\"px\";h.style.height!=d&&(l=!0,h.style.height=d)}a++}if(l)for(;s0;r--)this.$lines.shift();if(t.lastRow>e.lastRow)for(r=this.session.getFoldedRowCount(e.lastRow+1,t.lastRow);r>0;r--)this.$lines.pop();e.firstRowt.lastRow&&this.$lines.push(this.$renderLinesFragment(e,t.lastRow+1,e.lastRow))},this.$renderLinesFragment=function(e,t,n){for(var i=[],o=t,s=this.session.getNextFoldLine(o),a=s?s.start.row:1/0;o>a&&(o=s.end.row+1,a=(s=this.session.getNextFoldLine(o,s))?s.start.row:1/0),!(o>n);){var c=this.$lines.createCell(o,e,this.session),l=c.element;this.dom.removeChildren(l),r.setStyle(l.style,\"height\",this.$lines.computeLineHeight(o,e,this.session)+\"px\"),r.setStyle(l.style,\"top\",this.$lines.computeLineTop(o,e,this.session)+\"px\"),this.$renderLine(l,o,o==a&&s),this.$useLineGroups()?l.className=\"ace_line_group\":l.className=\"ace_line\",i.push(c),o++}return i},this.update=function(e){this.$lines.moveContainer(e),this.config=e;for(var t=e.firstRow,n=e.lastRow,i=this.$lines;i.getLength();)i.pop();i.push(this.$renderLinesFragment(e,t,n))},this.$textToken={text:!0,rparen:!0,lparen:!0},this.$renderToken=function(e,t,n,i){for(var r,s=/(\\t)|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\uFEFF\\uFFF9-\\uFFFC]+)|(\\u3000)|([\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3001-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF])/g,a=this.dom.createFragment(this.element),c=0;r=s.exec(i);){var l=r[1],u=r[2],h=r[3],d=r[4],p=r[5];if(this.showInvisibles||!u){var m=c!=r.index?i.slice(c,r.index):\"\";if(c=r.index+r[0].length,m&&a.appendChild(this.dom.createTextNode(m,this.element)),l){var f=this.session.getScreenTabSize(t+r.index);a.appendChild(this.$tabStrings[f].cloneNode(!0)),t+=f-1}else if(u){if(this.showInvisibles)(v=this.dom.createElement(\"span\")).className=\"ace_invisible ace_invisible_space\",v.textContent=o.stringRepeat(this.SPACE_CHAR,u.length),a.appendChild(v);else a.appendChild(this.com.createTextNode(u,this.element))}else if(h){(v=this.dom.createElement(\"span\")).className=\"ace_invisible ace_invisible_space ace_invalid\",v.textContent=o.stringRepeat(this.SPACE_CHAR,h.length),a.appendChild(v)}else if(d){t+=1,(v=this.dom.createElement(\"span\")).style.width=2*this.config.characterWidth+\"px\",v.className=this.showInvisibles?\"ace_cjk ace_invisible ace_invisible_space\":\"ace_cjk\",v.textContent=this.showInvisibles?this.SPACE_CHAR:d,a.appendChild(v)}else if(p){t+=1,(v=this.dom.createElement(\"span\")).style.width=2*this.config.characterWidth+\"px\",v.className=\"ace_cjk\",v.textContent=p,a.appendChild(v)}}}if(a.appendChild(this.dom.createTextNode(c?i.slice(c):i,this.element)),this.$textToken[n.type])e.appendChild(a);else{var g=\"ace_\"+n.type.replace(/\\./g,\" ace_\"),v=this.dom.createElement(\"span\");\"fold\"==n.type&&(v.style.width=n.value.length*this.config.characterWidth+\"px\"),v.className=g,v.appendChild(a),e.appendChild(v)}return t+i.length},this.renderIndentGuide=function(e,t,n){var i=t.search(this.$indentGuideRe);if(i<=0||i>=n)return t;if(\" \"==t[0]){for(var r=(i-=i%this.tabSize)/this.tabSize,o=0;o=s;)a=this.$renderToken(c,a,u,h.substring(0,s-i)),h=h.substring(s-i),i=s,c=this.$createLineElement(),e.appendChild(c),c.appendChild(this.dom.createTextNode(o.stringRepeat(\" \",n.indent),this.element)),a=0,s=n[++r]||Number.MAX_VALUE;0!=h.length&&(i+=h.length,a=this.$renderToken(c,a,u,h))}}n[n.length-1]>this.MAX_LINE_LENGTH&&this.$renderOverflowMessage(c,a,null,\"\",!0)},this.$renderSimpleLine=function(e,t){var n=0,i=t[0],r=i.value;this.displayIndentGuides&&(r=this.renderIndentGuide(e,r)),r&&(n=this.$renderToken(e,n,i,r));for(var o=1;othis.MAX_LINE_LENGTH)return this.$renderOverflowMessage(e,n,i,r);n=this.$renderToken(e,n,i,r)}},this.$renderOverflowMessage=function(e,t,n,i,r){n&&this.$renderToken(e,t,n,i.slice(0,this.MAX_LINE_LENGTH-t));var o=this.dom.createElement(\"span\");o.className=\"ace_inline_button ace_keyword ace_toggle_wrap\",o.textContent=r?\"\":\"\",e.appendChild(o)},this.$renderLine=function(e,t,n){if(n||0==n||(n=this.session.getFoldLine(t)),n)var i=this.$getFoldLineTokens(t,n);else i=this.session.getTokens(t);var r=e;if(i.length){var o=this.session.getRowSplitData(t);if(o&&o.length){this.$renderWrappedLine(e,i,o);r=e.lastChild}else{r=e;this.$useLineGroups()&&(r=this.$createLineElement(),e.appendChild(r)),this.$renderSimpleLine(r,i)}}else this.$useLineGroups()&&(r=this.$createLineElement(),e.appendChild(r));if(this.showInvisibles&&r){n&&(t=n.end.row);var s=this.dom.createElement(\"span\");s.className=\"ace_invisible ace_invisible_eol\",s.textContent=t==this.session.getLength()-1?this.EOF_CHAR:this.EOL_CHAR,r.appendChild(s)}},this.$getFoldLineTokens=function(e,t){var n=this.session,i=[];var r=n.getTokens(e);return t.walk((function(e,t,o,s,a){null!=e?i.push({type:\"fold\",value:e}):(a&&(r=n.getTokens(t)),r.length&&function(e,t,n){for(var r=0,o=0;o+e[r].value.lengthn-t&&(s=s.substring(0,n-t)),i.push({type:e[r].type,value:s}),o=t+s.length,r+=1);on?i.push({type:e[r].type,value:s.substring(0,n-o)}):i.push(e[r]),o+=s.length,r+=1}}(r,s,o))}),t.end.row,this.session.getLine(t.end.row).length),i},this.$useLineGroups=function(){return this.session.getUseWrapMode()},this.destroy=function(){}}).call(c.prototype),t.Text=c})),ace.define(\"ace/layer/cursor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],(function(e,t,n){\"use strict\";var i=e(\"../lib/dom\"),r=function(e){this.element=i.createElement(\"div\"),this.element.className=\"ace_layer ace_cursor-layer\",e.appendChild(this.element),this.isVisible=!1,this.isBlinking=!0,this.blinkInterval=1e3,this.smoothBlinking=!1,this.cursors=[],this.cursor=this.addCursor(),i.addCssClass(this.element,\"ace_hidden-cursors\"),this.$updateCursors=this.$updateOpacity.bind(this)};(function(){this.$updateOpacity=function(e){for(var t=this.cursors,n=t.length;n--;)i.setStyle(t[n].style,\"opacity\",e?\"\":\"0\")},this.$startCssAnimation=function(){for(var e=this.cursors,t=e.length;t--;)e[t].style.animationDuration=this.blinkInterval+\"ms\";setTimeout(function(){i.addCssClass(this.element,\"ace_animate-blinking\")}.bind(this))},this.$stopCssAnimation=function(){i.removeCssClass(this.element,\"ace_animate-blinking\")},this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setBlinking=function(e){e!=this.isBlinking&&(this.isBlinking=e,this.restartTimer())},this.setBlinkInterval=function(e){e!=this.blinkInterval&&(this.blinkInterval=e,this.restartTimer())},this.setSmoothBlinking=function(e){e!=this.smoothBlinking&&(this.smoothBlinking=e,i.setCssClass(this.element,\"ace_smooth-blinking\",e),this.$updateCursors(!0),this.restartTimer())},this.addCursor=function(){var e=i.createElement(\"div\");return e.className=\"ace_cursor\",this.element.appendChild(e),this.cursors.push(e),e},this.removeCursor=function(){if(this.cursors.length>1){var e=this.cursors.pop();return e.parentNode.removeChild(e),e}},this.hideCursor=function(){this.isVisible=!1,i.addCssClass(this.element,\"ace_hidden-cursors\"),this.restartTimer()},this.showCursor=function(){this.isVisible=!0,i.removeCssClass(this.element,\"ace_hidden-cursors\"),this.restartTimer()},this.restartTimer=function(){var e=this.$updateCursors;if(clearInterval(this.intervalId),clearTimeout(this.timeoutId),this.$stopCssAnimation(),this.smoothBlinking&&i.removeCssClass(this.element,\"ace_smooth-blinking\"),e(!0),this.isBlinking&&this.blinkInterval&&this.isVisible)if(this.smoothBlinking&&setTimeout(function(){i.addCssClass(this.element,\"ace_smooth-blinking\")}.bind(this)),i.HAS_CSS_ANIMATION)this.$startCssAnimation();else{var t=function(){this.timeoutId=setTimeout((function(){e(!1)}),.6*this.blinkInterval)}.bind(this);this.intervalId=setInterval((function(){e(!0),t()}),this.blinkInterval),t()}else this.$stopCssAnimation()},this.getPixelPosition=function(e,t){if(!this.config||!this.session)return{left:0,top:0};e||(e=this.session.selection.getCursor());var n=this.session.documentToScreenPosition(e);return{left:this.$padding+(this.session.$bidiHandler.isBidiRow(n.row,e.row)?this.session.$bidiHandler.getPosLeft(n.column):n.column*this.config.characterWidth),top:(n.row-(t?this.config.firstRowScreen:0))*this.config.lineHeight}},this.isCursorInView=function(e,t){return e.top>=0&&e.tope.height+e.offset||s.top<0)&&n>1)){var a=this.cursors[r++]||this.addCursor(),c=a.style;this.drawCursor?this.drawCursor(a,s,e,t[n],this.session):this.isCursorInView(s,e)?(i.setStyle(c,\"display\",\"block\"),i.translate(a,s.left,s.top),i.setStyle(c,\"width\",Math.round(e.characterWidth)+\"px\"),i.setStyle(c,\"height\",e.lineHeight+\"px\")):i.setStyle(c,\"display\",\"none\")}}for(;this.cursors.length>r;)this.removeCursor();var l=this.session.getOverwrite();this.$setOverwrite(l),this.$pixelPos=s,this.restartTimer()},this.drawCursor=null,this.$setOverwrite=function(e){e!=this.overwrite&&(this.overwrite=e,e?i.addCssClass(this.element,\"ace_overwrite-cursors\"):i.removeCssClass(this.element,\"ace_overwrite-cursors\"))},this.destroy=function(){clearInterval(this.intervalId),clearTimeout(this.timeoutId)}}).call(r.prototype),t.Cursor=r})),ace.define(\"ace/scrollbar\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"],(function(e,t,n){\"use strict\";var i=e(\"./lib/oop\"),r=e(\"./lib/dom\"),o=e(\"./lib/event\"),s=e(\"./lib/event_emitter\").EventEmitter,a=function(e){this.element=r.createElement(\"div\"),this.element.className=\"ace_scrollbar ace_scrollbar\"+this.classSuffix,this.inner=r.createElement(\"div\"),this.inner.className=\"ace_scrollbar-inner\",this.inner.textContent=\" \",this.element.appendChild(this.inner),e.appendChild(this.element),this.setVisible(!1),this.skipEvent=!1,o.addListener(this.element,\"scroll\",this.onScroll.bind(this)),o.addListener(this.element,\"mousedown\",o.preventDefault)};(function(){i.implement(this,s),this.setVisible=function(e){this.element.style.display=e?\"\":\"none\",this.isVisible=e,this.coeff=1}}).call(a.prototype);var c=function(e,t){a.call(this,e),this.scrollTop=0,this.scrollHeight=0,t.$scrollbarWidth=this.width=r.scrollbarWidth(e.ownerDocument),this.inner.style.width=this.element.style.width=(this.width||15)+5+\"px\",this.$minWidth=0};i.inherits(c,a),function(){this.classSuffix=\"-v\",this.onScroll=function(){if(!this.skipEvent){if(this.scrollTop=this.element.scrollTop,1!=this.coeff){var e=this.element.clientHeight/this.scrollHeight;this.scrollTop=this.scrollTop*(1-e)/(this.coeff-e)}this._emit(\"scroll\",{data:this.scrollTop})}this.skipEvent=!1},this.getWidth=function(){return Math.max(this.isVisible?this.width:0,this.$minWidth||0)},this.setHeight=function(e){this.element.style.height=e+\"px\"},this.setInnerHeight=this.setScrollHeight=function(e){this.scrollHeight=e,e>32768?(this.coeff=32768/e,e=32768):1!=this.coeff&&(this.coeff=1),this.inner.style.height=e+\"px\"},this.setScrollTop=function(e){this.scrollTop!=e&&(this.skipEvent=!0,this.scrollTop=e,this.element.scrollTop=e*this.coeff)}}.call(c.prototype);var l=function(e,t){a.call(this,e),this.scrollLeft=0,this.height=t.$scrollbarWidth,this.inner.style.height=this.element.style.height=(this.height||15)+5+\"px\"};i.inherits(l,a),function(){this.classSuffix=\"-h\",this.onScroll=function(){this.skipEvent||(this.scrollLeft=this.element.scrollLeft,this._emit(\"scroll\",{data:this.scrollLeft})),this.skipEvent=!1},this.getHeight=function(){return this.isVisible?this.height:0},this.setWidth=function(e){this.element.style.width=e+\"px\"},this.setInnerWidth=function(e){this.inner.style.width=e+\"px\"},this.setScrollWidth=function(e){this.inner.style.width=e+\"px\"},this.setScrollLeft=function(e){this.scrollLeft!=e&&(this.skipEvent=!0,this.scrollLeft=this.element.scrollLeft=e)}}.call(l.prototype),t.ScrollBar=c,t.ScrollBarV=c,t.ScrollBarH=l,t.VScrollBar=c,t.HScrollBar=l})),ace.define(\"ace/renderloop\",[\"require\",\"exports\",\"module\",\"ace/lib/event\"],(function(e,t,n){\"use strict\";var i=e(\"./lib/event\"),r=function(e,t){this.onRender=e,this.pending=!1,this.changes=0,this.$recursionLimit=2,this.window=t||window;var n=this;this._flush=function(e){n.pending=!1;var t=n.changes;if(t&&(i.blockIdle(100),n.changes=0,n.onRender(t)),n.changes){if(n.$recursionLimit--<0)return;n.schedule()}else n.$recursionLimit=2}};(function(){this.schedule=function(e){this.changes=this.changes|e,this.changes&&!this.pending&&(i.nextFrame(this._flush),this.pending=!0)},this.clear=function(e){var t=this.changes;return this.changes=0,t}}).call(r.prototype),t.RenderLoop=r})),ace.define(\"ace/layer/font_metrics\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"],(function(e,t,n){var i=e(\"../lib/oop\"),r=e(\"../lib/dom\"),o=e(\"../lib/lang\"),s=e(\"../lib/event\"),a=e(\"../lib/useragent\"),c=e(\"../lib/event_emitter\").EventEmitter,l=\"function\"==typeof ResizeObserver,u=200,h=t.FontMetrics=function(e){this.el=r.createElement(\"div\"),this.$setMeasureNodeStyles(this.el.style,!0),this.$main=r.createElement(\"div\"),this.$setMeasureNodeStyles(this.$main.style),this.$measureNode=r.createElement(\"div\"),this.$setMeasureNodeStyles(this.$measureNode.style),this.el.appendChild(this.$main),this.el.appendChild(this.$measureNode),e.appendChild(this.el),this.$measureNode.innerHTML=o.stringRepeat(\"X\",256),this.$characterSize={width:0,height:0},l?this.$addObserver():this.checkForSizeChanges()};(function(){i.implement(this,c),this.$characterSize={width:0,height:0},this.$setMeasureNodeStyles=function(e,t){e.width=e.height=\"auto\",e.left=e.top=\"0px\",e.visibility=\"hidden\",e.position=\"absolute\",e.whiteSpace=\"pre\",a.isIE<8?e[\"font-family\"]=\"inherit\":e.font=\"inherit\",e.overflow=t?\"hidden\":\"visible\"},this.checkForSizeChanges=function(e){if(void 0===e&&(e=this.$measureSizes()),e&&(this.$characterSize.width!==e.width||this.$characterSize.height!==e.height)){this.$measureNode.style.fontWeight=\"bold\";var t=this.$measureSizes();this.$measureNode.style.fontWeight=\"\",this.$characterSize=e,this.charSizes=Object.create(null),this.allowBoldFonts=t&&t.width===e.width&&t.height===e.height,this._emit(\"changeCharacterSize\",{data:e})}},this.$addObserver=function(){var e=this;this.$observer=new window.ResizeObserver((function(t){var n=t[0].contentRect;e.checkForSizeChanges({height:n.height,width:n.width/256})})),this.$observer.observe(this.$measureNode)},this.$pollSizeChanges=function(){if(this.$pollSizeChangesTimer||this.$observer)return this.$pollSizeChangesTimer;var e=this;return this.$pollSizeChangesTimer=s.onIdle((function t(){e.checkForSizeChanges(),s.onIdle(t,500)}),500)},this.setPolling=function(e){e?this.$pollSizeChanges():this.$pollSizeChangesTimer&&(clearInterval(this.$pollSizeChangesTimer),this.$pollSizeChangesTimer=0)},this.$measureSizes=function(e){var t={height:(e||this.$measureNode).clientHeight,width:(e||this.$measureNode).clientWidth/256};return 0===t.width||0===t.height?null:t},this.$measureCharWidth=function(e){return this.$main.innerHTML=o.stringRepeat(e,256),this.$main.getBoundingClientRect().width/256},this.getCharacterWidth=function(e){var t=this.charSizes[e];return void 0===t&&(t=this.charSizes[e]=this.$measureCharWidth(e)/this.$characterSize.width),t},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.$observer&&this.$observer.disconnect(),this.el&&this.el.parentNode&&this.el.parentNode.removeChild(this.el)},this.$getZoom=function e(t){return t?(window.getComputedStyle(t).zoom||1)*e(t.parentElement):1},this.$initTransformMeasureNodes=function(){var e=function(e,t){return[\"div\",{style:\"position: absolute;top:\"+e+\"px;left:\"+t+\"px;\"}]};this.els=r.buildDom([e(0,0),e(u,0),e(0,u),e(u,u)],this.el)},this.transformCoordinates=function(e,t){e&&(e=o(1/this.$getZoom(this.el),e));function n(e,t,n){var i=e[1]*t[0]-e[0]*t[1];return[(-t[1]*n[0]+t[0]*n[1])/i,(+e[1]*n[0]-e[0]*n[1])/i]}function i(e,t){return[e[0]-t[0],e[1]-t[1]]}function r(e,t){return[e[0]+t[0],e[1]+t[1]]}function o(e,t){return[e*t[0],e*t[1]]}function s(e){var t=e.getBoundingClientRect();return[t.left,t.top]}this.els||this.$initTransformMeasureNodes();var a=s(this.els[0]),c=s(this.els[1]),l=s(this.els[2]),h=s(this.els[3]),d=n(i(h,c),i(h,l),i(r(c,l),r(h,a))),p=o(1+d[0],i(c,a)),m=o(1+d[1],i(l,a));if(t){var f=t,g=d[0]*f[0]/u+d[1]*f[1]/u+1,v=r(o(f[0],p),o(f[1],m));return r(o(1/g/u,v),a)}var _=i(e,a),E=n(i(p,o(d[0],_)),i(m,o(d[1],_)),_);return o(u,E)}}).call(h.prototype)})),ace.define(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/config\",\"ace/layer/gutter\",\"ace/layer/marker\",\"ace/layer/text\",\"ace/layer/cursor\",\"ace/scrollbar\",\"ace/scrollbar\",\"ace/renderloop\",\"ace/layer/font_metrics\",\"ace/lib/event_emitter\",\"ace/lib/useragent\"],(function(e,t,n){\"use strict\";var i=e(\"./lib/oop\"),r=e(\"./lib/dom\"),o=e(\"./config\"),s=e(\"./layer/gutter\").Gutter,a=e(\"./layer/marker\").Marker,c=e(\"./layer/text\").Text,l=e(\"./layer/cursor\").Cursor,u=e(\"./scrollbar\").HScrollBar,h=e(\"./scrollbar\").VScrollBar,d=e(\"./renderloop\").RenderLoop,p=e(\"./layer/font_metrics\").FontMetrics,m=e(\"./lib/event_emitter\").EventEmitter,f='.ace_br1 {border-top-left-radius : 3px;}.ace_br2 {border-top-right-radius : 3px;}.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}.ace_br4 {border-bottom-right-radius: 3px;}.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}.ace_br8 {border-bottom-left-radius : 3px;}.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_editor {position: relative;overflow: hidden;font: 12px/normal \\'Monaco\\', \\'Menlo\\', \\'Ubuntu Mono\\', \\'Consolas\\', \\'source-code-pro\\', monospace;direction: ltr;text-align: left;-webkit-tap-highlight-color: rgba(0, 0, 0, 0);}.ace_scroller {position: absolute;overflow: hidden;top: 0;bottom: 0;background-color: inherit;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;cursor: text;}.ace_content {position: absolute;box-sizing: border-box;min-width: 100%;contain: style size layout;}.ace_dragging .ace_scroller:before{position: absolute;top: 0;left: 0;right: 0;bottom: 0;content: \\'\\';background: rgba(250, 250, 250, 0.01);z-index: 1000;}.ace_dragging.ace_dark .ace_scroller:before{background: rgba(0, 0, 0, 0.01);}.ace_selecting, .ace_selecting * {cursor: text !important;}.ace_gutter {position: absolute;overflow : hidden;width: auto;top: 0;bottom: 0;left: 0;cursor: default;z-index: 4;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;contain: style size layout;}.ace_gutter-active-line {position: absolute;left: 0;right: 0;}.ace_scroller.ace_scroll-left {box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;}.ace_gutter-cell {position: absolute;top: 0;left: 0;right: 0;padding-left: 19px;padding-right: 6px;background-repeat: no-repeat;}.ace_gutter-cell.ace_error {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==\");background-repeat: no-repeat;background-position: 2px center;}.ace_gutter-cell.ace_warning {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==\");background-position: 2px center;}.ace_gutter-cell.ace_info {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\");background-position: 2px center;}.ace_dark .ace_gutter-cell.ace_info {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\");}.ace_scrollbar {contain: strict;position: absolute;right: 0;bottom: 0;z-index: 6;}.ace_scrollbar-inner {position: absolute;cursor: text;left: 0;top: 0;}.ace_scrollbar-v{overflow-x: hidden;overflow-y: scroll;top: 0;}.ace_scrollbar-h {overflow-x: scroll;overflow-y: hidden;left: 0;}.ace_print-margin {position: absolute;height: 100%;}.ace_text-input {position: absolute;z-index: 0;width: 0.5em;height: 1em;opacity: 0;background: transparent;-moz-appearance: none;appearance: none;border: none;resize: none;outline: none;overflow: hidden;font: inherit;padding: 0 1px;margin: 0 -1px;contain: strict;-ms-user-select: text;-moz-user-select: text;-webkit-user-select: text;user-select: text;white-space: pre!important;}.ace_text-input.ace_composition {background: transparent;color: inherit;z-index: 1000;opacity: 1;}.ace_composition_placeholder { color: transparent }.ace_composition_marker { border-bottom: 1px solid;position: absolute;border-radius: 0;margin-top: 1px;}[ace_nocontext=true] {transform: none!important;filter: none!important;perspective: none!important;clip-path: none!important;mask : none!important;contain: none!important;perspective: none!important;mix-blend-mode: initial!important;z-index: auto;}.ace_layer {z-index: 1;position: absolute;overflow: hidden;word-wrap: normal;white-space: pre;height: 100%;width: 100%;box-sizing: border-box;pointer-events: none;}.ace_gutter-layer {position: relative;width: auto;text-align: right;pointer-events: auto;height: 1000000px;contain: style size layout;}.ace_text-layer {font: inherit !important;position: absolute;height: 1000000px;width: 1000000px;contain: style size layout;}.ace_text-layer > .ace_line, .ace_text-layer > .ace_line_group {contain: style size layout;position: absolute;top: 0;left: 0;right: 0;}.ace_hidpi .ace_text-layer,.ace_hidpi .ace_gutter-layer,.ace_hidpi .ace_content,.ace_hidpi .ace_gutter {contain: strict;will-change: transform;}.ace_hidpi .ace_text-layer > .ace_line, .ace_hidpi .ace_text-layer > .ace_line_group {contain: strict;}.ace_cjk {display: inline-block;text-align: center;}.ace_cursor-layer {z-index: 4;}.ace_cursor {z-index: 4;position: absolute;box-sizing: border-box;border-left: 2px solid;transform: translatez(0);}.ace_multiselect .ace_cursor {border-left-width: 1px;}.ace_slim-cursors .ace_cursor {border-left-width: 1px;}.ace_overwrite-cursors .ace_cursor {border-left-width: 0;border-bottom: 1px solid;}.ace_hidden-cursors .ace_cursor {opacity: 0.2;}.ace_hasPlaceholder .ace_hidden-cursors .ace_cursor {opacity: 0;}.ace_smooth-blinking .ace_cursor {transition: opacity 0.18s;}.ace_animate-blinking .ace_cursor {animation-duration: 1000ms;animation-timing-function: step-end;animation-name: blink-ace-animate;animation-iteration-count: infinite;}.ace_animate-blinking.ace_smooth-blinking .ace_cursor {animation-duration: 1000ms;animation-timing-function: ease-in-out;animation-name: blink-ace-animate-smooth;}@keyframes blink-ace-animate {from, to { opacity: 1; }60% { opacity: 0; }}@keyframes blink-ace-animate-smooth {from, to { opacity: 1; }45% { opacity: 1; }60% { opacity: 0; }85% { opacity: 0; }}.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {position: absolute;z-index: 3;}.ace_marker-layer .ace_selection {position: absolute;z-index: 5;}.ace_marker-layer .ace_bracket {position: absolute;z-index: 6;}.ace_marker-layer .ace_active-line {position: absolute;z-index: 2;}.ace_marker-layer .ace_selected-word {position: absolute;z-index: 4;box-sizing: border-box;}.ace_line .ace_fold {box-sizing: border-box;display: inline-block;height: 11px;margin-top: -2px;vertical-align: middle;background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\");background-repeat: no-repeat, repeat-x;background-position: center center, top left;color: transparent;border: 1px solid black;border-radius: 2px;cursor: pointer;pointer-events: auto;}.ace_dark .ace_fold {}.ace_fold:hover{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\");}.ace_tooltip {background-color: #FFF;background-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));border: 1px solid gray;border-radius: 1px;box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);color: black;max-width: 100%;padding: 3px 4px;position: fixed;z-index: 999999;box-sizing: border-box;cursor: default;white-space: pre;word-wrap: break-word;line-height: normal;font-style: normal;font-weight: normal;letter-spacing: normal;pointer-events: none;}.ace_folding-enabled > .ace_gutter-cell {padding-right: 13px;}.ace_fold-widget {box-sizing: border-box;margin: 0 -12px 0 1px;display: none;width: 11px;vertical-align: top;background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\");background-repeat: no-repeat;background-position: center;border-radius: 3px;border: 1px solid transparent;cursor: pointer;}.ace_folding-enabled .ace_fold-widget {display: inline-block; }.ace_fold-widget.ace_end {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\");}.ace_fold-widget.ace_closed {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\");}.ace_fold-widget:hover {border: 1px solid rgba(0, 0, 0, 0.3);background-color: rgba(255, 255, 255, 0.2);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);}.ace_fold-widget:active {border: 1px solid rgba(0, 0, 0, 0.4);background-color: rgba(0, 0, 0, 0.05);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);}.ace_dark .ace_fold-widget {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\");}.ace_dark .ace_fold-widget.ace_end {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\");}.ace_dark .ace_fold-widget.ace_closed {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\");}.ace_dark .ace_fold-widget:hover {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);background-color: rgba(255, 255, 255, 0.1);}.ace_dark .ace_fold-widget:active {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);}.ace_inline_button {border: 1px solid lightgray;display: inline-block;margin: -1px 8px;padding: 0 5px;pointer-events: auto;cursor: pointer;}.ace_inline_button:hover {border-color: gray;background: rgba(200,200,200,0.2);display: inline-block;pointer-events: auto;}.ace_fold-widget.ace_invalid {background-color: #FFB4B4;border-color: #DE5555;}.ace_fade-fold-widgets .ace_fold-widget {transition: opacity 0.4s ease 0.05s;opacity: 0;}.ace_fade-fold-widgets:hover .ace_fold-widget {transition: opacity 0.05s ease 0.05s;opacity:1;}.ace_underline {text-decoration: underline;}.ace_bold {font-weight: bold;}.ace_nobold .ace_bold {font-weight: normal;}.ace_italic {font-style: italic;}.ace_error-marker {background-color: rgba(255, 0, 0,0.2);position: absolute;z-index: 9;}.ace_highlight-marker {background-color: rgba(255, 255, 0,0.2);position: absolute;z-index: 8;}.ace_mobile-menu {position: absolute;line-height: 1.5;border-radius: 4px;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;background: white;box-shadow: 1px 3px 2px grey;border: 1px solid #dcdcdc;color: black;}.ace_dark > .ace_mobile-menu {background: #333;color: #ccc;box-shadow: 1px 3px 2px grey;border: 1px solid #444;}.ace_mobile-button {padding: 2px;cursor: pointer;overflow: hidden;}.ace_mobile-button:hover {background-color: #eee;opacity:1;}.ace_mobile-button:active {background-color: #ddd;}.ace_placeholder {font-family: arial;transform: scale(0.9);opacity: 0.7;transform-origin: left;text-indent: 10px;}',g=e(\"./lib/useragent\"),v=g.isIE;r.importCssString(f,\"ace_editor.css\");var _=function(e,t){var n=this;this.container=e||r.createElement(\"div\"),r.addCssClass(this.container,\"ace_editor\"),r.HI_DPI&&r.addCssClass(this.container,\"ace_hidpi\"),this.setTheme(t),this.$gutter=r.createElement(\"div\"),this.$gutter.className=\"ace_gutter\",this.container.appendChild(this.$gutter),this.$gutter.setAttribute(\"aria-hidden\",!0),this.scroller=r.createElement(\"div\"),this.scroller.className=\"ace_scroller\",this.container.appendChild(this.scroller),this.content=r.createElement(\"div\"),this.content.className=\"ace_content\",this.scroller.appendChild(this.content),this.$gutterLayer=new s(this.$gutter),this.$gutterLayer.on(\"changeGutterWidth\",this.onGutterResize.bind(this)),this.$markerBack=new a(this.content);var i=this.$textLayer=new c(this.content);this.canvas=i.element,this.$markerFront=new a(this.content),this.$cursorLayer=new l(this.content),this.$horizScroll=!1,this.$vScroll=!1,this.scrollBar=this.scrollBarV=new h(this.container,this),this.scrollBarH=new u(this.container,this),this.scrollBarV.addEventListener(\"scroll\",(function(e){n.$scrollAnimation||n.session.setScrollTop(e.data-n.scrollMargin.top)})),this.scrollBarH.addEventListener(\"scroll\",(function(e){n.$scrollAnimation||n.session.setScrollLeft(e.data-n.scrollMargin.left)})),this.scrollTop=0,this.scrollLeft=0,this.cursorPos={row:0,column:0},this.$fontMetrics=new p(this.container),this.$textLayer.$setFontMetrics(this.$fontMetrics),this.$textLayer.addEventListener(\"changeCharacterSize\",(function(e){n.updateCharacterSize(),n.onResize(!0,n.gutterWidth,n.$size.width,n.$size.height),n._signal(\"changeCharacterSize\",e)})),this.$size={width:0,height:0,scrollerHeight:0,scrollerWidth:0,$dirty:!0},this.layerConfig={width:1,padding:0,firstRow:0,firstRowScreen:0,lastRow:0,lineHeight:0,characterWidth:0,minHeight:1,maxHeight:1,offset:0,height:1,gutterOffset:1},this.scrollMargin={left:0,right:0,top:0,bottom:0,v:0,h:0},this.margin={left:0,right:0,top:0,bottom:0,v:0,h:0},this.$keepTextAreaAtCursor=!g.isIOS,this.$loop=new d(this.$renderChanges.bind(this),this.container.ownerDocument.defaultView),this.$loop.schedule(this.CHANGE_FULL),this.updateCharacterSize(),this.setPadding(4),o.resetOptions(this),o._signal(\"renderer\",this)};(function(){this.CHANGE_CURSOR=1,this.CHANGE_MARKER=2,this.CHANGE_GUTTER=4,this.CHANGE_SCROLL=8,this.CHANGE_LINES=16,this.CHANGE_TEXT=32,this.CHANGE_SIZE=64,this.CHANGE_MARKER_BACK=128,this.CHANGE_MARKER_FRONT=256,this.CHANGE_FULL=512,this.CHANGE_H_SCROLL=1024,i.implement(this,m),this.updateCharacterSize=function(){this.$textLayer.allowBoldFonts!=this.$allowBoldFonts&&(this.$allowBoldFonts=this.$textLayer.allowBoldFonts,this.setStyle(\"ace_nobold\",!this.$allowBoldFonts)),this.layerConfig.characterWidth=this.characterWidth=this.$textLayer.getCharacterWidth(),this.layerConfig.lineHeight=this.lineHeight=this.$textLayer.getLineHeight(),this.$updatePrintMargin(),r.setStyle(this.scroller.style,\"line-height\",this.lineHeight+\"px\")},this.setSession=function(e){this.session&&this.session.doc.off(\"changeNewLineMode\",this.onChangeNewLineMode),this.session=e,e&&this.scrollMargin.top&&e.getScrollTop()<=0&&e.setScrollTop(-this.scrollMargin.top),this.$cursorLayer.setSession(e),this.$markerBack.setSession(e),this.$markerFront.setSession(e),this.$gutterLayer.setSession(e),this.$textLayer.setSession(e),e&&(this.$loop.schedule(this.CHANGE_FULL),this.session.$setFontMetrics(this.$fontMetrics),this.scrollBarH.scrollLeft=this.scrollBarV.scrollTop=null,this.onChangeNewLineMode=this.onChangeNewLineMode.bind(this),this.onChangeNewLineMode(),this.session.doc.on(\"changeNewLineMode\",this.onChangeNewLineMode))},this.updateLines=function(e,t,n){if(void 0===t&&(t=1/0),this.$changedLines?(this.$changedLines.firstRow>e&&(this.$changedLines.firstRow=e),this.$changedLines.lastRowthis.layerConfig.lastRow||this.$loop.schedule(this.CHANGE_LINES)},this.onChangeNewLineMode=function(){this.$loop.schedule(this.CHANGE_TEXT),this.$textLayer.$updateEolChar(),this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR)},this.onChangeTabSize=function(){this.$loop.schedule(this.CHANGE_TEXT|this.CHANGE_MARKER),this.$textLayer.onChangeTabSize()},this.updateText=function(){this.$loop.schedule(this.CHANGE_TEXT)},this.updateFull=function(e){e?this.$renderChanges(this.CHANGE_FULL,!0):this.$loop.schedule(this.CHANGE_FULL)},this.updateFontSize=function(){this.$textLayer.checkForSizeChanges()},this.$changes=0,this.$updateSizeAsync=function(){this.$loop.pending?this.$size.$dirty=!0:this.onResize()},this.onResize=function(e,t,n,i){if(!(this.resizing>2)){this.resizing>0?this.resizing++:this.resizing=e?1:0;var r=this.container;i||(i=r.clientHeight||r.scrollHeight),n||(n=r.clientWidth||r.scrollWidth);var o=this.$updateCachedSize(e,t,n,i);if(!this.$size.scrollerHeight||!n&&!i)return this.resizing=0;e&&(this.$gutterLayer.$padding=null),e?this.$renderChanges(o|this.$changes,!0):this.$loop.schedule(o|this.$changes),this.resizing&&(this.resizing=0),this.scrollBarV.scrollLeft=this.scrollBarV.scrollTop=null}},this.$updateCachedSize=function(e,t,n,i){i-=this.$extraHeight||0;var o=0,s=this.$size,a={width:s.width,height:s.height,scrollerHeight:s.scrollerHeight,scrollerWidth:s.scrollerWidth};if(i&&(e||s.height!=i)&&(s.height=i,o|=this.CHANGE_SIZE,s.scrollerHeight=s.height,this.$horizScroll&&(s.scrollerHeight-=this.scrollBarH.getHeight()),this.scrollBarV.element.style.bottom=this.scrollBarH.getHeight()+\"px\",o|=this.CHANGE_SCROLL),n&&(e||s.width!=n)){o|=this.CHANGE_SIZE,s.width=n,null==t&&(t=this.$showGutter?this.$gutter.offsetWidth:0),this.gutterWidth=t,r.setStyle(this.scrollBarH.element.style,\"left\",t+\"px\"),r.setStyle(this.scroller.style,\"left\",t+this.margin.left+\"px\"),s.scrollerWidth=Math.max(0,n-t-this.scrollBarV.getWidth()-this.margin.h),r.setStyle(this.$gutter.style,\"left\",this.margin.left+\"px\");var c=this.scrollBarV.getWidth()+\"px\";r.setStyle(this.scrollBarH.element.style,\"right\",c),r.setStyle(this.scroller.style,\"right\",c),r.setStyle(this.scroller.style,\"bottom\",this.scrollBarH.getHeight()),(this.session&&this.session.getUseWrapMode()&&this.adjustWrapLimit()||e)&&(o|=this.CHANGE_FULL)}return s.$dirty=!n||!i,o&&this._signal(\"resize\",a),o},this.onGutterResize=function(e){var t=this.$showGutter?e:0;t!=this.gutterWidth&&(this.$changes|=this.$updateCachedSize(!0,t,this.$size.width,this.$size.height)),this.session.getUseWrapMode()&&this.adjustWrapLimit()||this.$size.$dirty?this.$loop.schedule(this.CHANGE_FULL):this.$computeLayerConfig()},this.adjustWrapLimit=function(){var e=this.$size.scrollerWidth-2*this.$padding,t=Math.floor(e/this.characterWidth);return this.session.adjustWrapLimit(t,this.$showPrintMargin&&this.$printMarginColumn)},this.setAnimatedScroll=function(e){this.setOption(\"animatedScroll\",e)},this.getAnimatedScroll=function(){return this.$animatedScroll},this.setShowInvisibles=function(e){this.setOption(\"showInvisibles\",e),this.session.$bidiHandler.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.getOption(\"showInvisibles\")},this.getDisplayIndentGuides=function(){return this.getOption(\"displayIndentGuides\")},this.setDisplayIndentGuides=function(e){this.setOption(\"displayIndentGuides\",e)},this.setShowPrintMargin=function(e){this.setOption(\"showPrintMargin\",e)},this.getShowPrintMargin=function(){return this.getOption(\"showPrintMargin\")},this.setPrintMarginColumn=function(e){this.setOption(\"printMarginColumn\",e)},this.getPrintMarginColumn=function(){return this.getOption(\"printMarginColumn\")},this.getShowGutter=function(){return this.getOption(\"showGutter\")},this.setShowGutter=function(e){return this.setOption(\"showGutter\",e)},this.getFadeFoldWidgets=function(){return this.getOption(\"fadeFoldWidgets\")},this.setFadeFoldWidgets=function(e){this.setOption(\"fadeFoldWidgets\",e)},this.setHighlightGutterLine=function(e){this.setOption(\"highlightGutterLine\",e)},this.getHighlightGutterLine=function(){return this.getOption(\"highlightGutterLine\")},this.$updatePrintMargin=function(){if(this.$showPrintMargin||this.$printMarginEl){if(!this.$printMarginEl){var e=r.createElement(\"div\");e.className=\"ace_layer ace_print-margin-layer\",this.$printMarginEl=r.createElement(\"div\"),this.$printMarginEl.className=\"ace_print-margin\",e.appendChild(this.$printMarginEl),this.content.insertBefore(e,this.content.firstChild)}var t=this.$printMarginEl.style;t.left=Math.round(this.characterWidth*this.$printMarginColumn+this.$padding)+\"px\",t.visibility=this.$showPrintMargin?\"visible\":\"hidden\",this.session&&-1==this.session.$wrap&&this.adjustWrapLimit()}},this.getContainerElement=function(){return this.container},this.getMouseEventTarget=function(){return this.scroller},this.getTextAreaContainer=function(){return this.container},this.$moveTextAreaToCursor=function(){if(!this.$isMousePressed){var e=this.textarea.style,t=this.$composition;if(this.$keepTextAreaAtCursor||t){var n=this.$cursorLayer.$pixelPos;if(n){t&&t.markerRange&&(n=this.$cursorLayer.getPixelPosition(t.markerRange.start,!0));var i=this.layerConfig,o=n.top,s=n.left;o-=i.offset;var a=t&&t.useTextareaForIME?this.lineHeight:v?0:1;if(o<0||o>i.height-a)r.translate(this.textarea,0,0);else{var c=1,l=this.$size.height-a;if(t)if(t.useTextareaForIME){var u=this.textarea.value;c=this.characterWidth*this.session.$getStringScreenWidth(u)[0]}else o+=this.lineHeight+2;else o+=this.lineHeight;(s-=this.scrollLeft)>this.$size.scrollerWidth-c&&(s=this.$size.scrollerWidth-c),s+=this.gutterWidth+this.margin.left,r.setStyle(e,\"height\",a+\"px\"),r.setStyle(e,\"width\",c+\"px\"),r.translate(this.textarea,Math.min(s,this.$size.scrollerWidth-c),Math.min(o,l))}}}else r.translate(this.textarea,-100,0)}},this.getFirstVisibleRow=function(){return this.layerConfig.firstRow},this.getFirstFullyVisibleRow=function(){return this.layerConfig.firstRow+(0===this.layerConfig.offset?0:1)},this.getLastFullyVisibleRow=function(){var e=this.layerConfig,t=e.lastRow;return this.session.documentToScreenRow(t,0)*e.lineHeight-this.session.getScrollTop()>e.height-e.lineHeight?t-1:t},this.getLastVisibleRow=function(){return this.layerConfig.lastRow},this.$padding=null,this.setPadding=function(e){this.$padding=e,this.$textLayer.setPadding(e),this.$cursorLayer.setPadding(e),this.$markerFront.setPadding(e),this.$markerBack.setPadding(e),this.$loop.schedule(this.CHANGE_FULL),this.$updatePrintMargin()},this.setScrollMargin=function(e,t,n,i){var r=this.scrollMargin;r.top=0|e,r.bottom=0|t,r.right=0|i,r.left=0|n,r.v=r.top+r.bottom,r.h=r.left+r.right,r.top&&this.scrollTop<=0&&this.session&&this.session.setScrollTop(-r.top),this.updateFull()},this.setMargin=function(e,t,n,i){var r=this.margin;r.top=0|e,r.bottom=0|t,r.right=0|i,r.left=0|n,r.v=r.top+r.bottom,r.h=r.left+r.right,this.$updateCachedSize(!0,this.gutterWidth,this.$size.width,this.$size.height),this.updateFull()},this.getHScrollBarAlwaysVisible=function(){return this.$hScrollBarAlwaysVisible},this.setHScrollBarAlwaysVisible=function(e){this.setOption(\"hScrollBarAlwaysVisible\",e)},this.getVScrollBarAlwaysVisible=function(){return this.$vScrollBarAlwaysVisible},this.setVScrollBarAlwaysVisible=function(e){this.setOption(\"vScrollBarAlwaysVisible\",e)},this.$updateScrollBarV=function(){var e=this.layerConfig.maxHeight,t=this.$size.scrollerHeight;!this.$maxLines&&this.$scrollPastEnd&&(e-=(t-this.lineHeight)*this.$scrollPastEnd,this.scrollTop>e-t&&(e=this.scrollTop+t,this.scrollBarV.scrollTop=null)),this.scrollBarV.setScrollHeight(e+this.scrollMargin.v),this.scrollBarV.setScrollTop(this.scrollTop+this.scrollMargin.top)},this.$updateScrollBarH=function(){this.scrollBarH.setScrollWidth(this.layerConfig.width+2*this.$padding+this.scrollMargin.h),this.scrollBarH.setScrollLeft(this.scrollLeft+this.scrollMargin.left)},this.$frozen=!1,this.freeze=function(){this.$frozen=!0},this.unfreeze=function(){this.$frozen=!1},this.$renderChanges=function(e,t){if(this.$changes&&(e|=this.$changes,this.$changes=0),this.session&&this.container.offsetWidth&&!this.$frozen&&(e||t)){if(this.$size.$dirty)return this.$changes|=e,this.onResize(!0);this.lineHeight||this.$textLayer.checkForSizeChanges(),this._signal(\"beforeRender\"),this.session&&this.session.$bidiHandler&&this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);var n=this.layerConfig;if(e&this.CHANGE_FULL||e&this.CHANGE_SIZE||e&this.CHANGE_TEXT||e&this.CHANGE_LINES||e&this.CHANGE_SCROLL||e&this.CHANGE_H_SCROLL){if(e|=this.$computeLayerConfig()|this.$loop.clear(),n.firstRow!=this.layerConfig.firstRow&&n.firstRowScreen==this.layerConfig.firstRowScreen){var i=this.scrollTop+(n.firstRow-this.layerConfig.firstRow)*this.lineHeight;i>0&&(this.scrollTop=i,e|=this.CHANGE_SCROLL,e|=this.$computeLayerConfig()|this.$loop.clear())}n=this.layerConfig,this.$updateScrollBarV(),e&this.CHANGE_H_SCROLL&&this.$updateScrollBarH(),r.translate(this.content,-this.scrollLeft,-n.offset);var o=n.width+2*this.$padding+\"px\",s=n.minHeight+\"px\";r.setStyle(this.content.style,\"width\",o),r.setStyle(this.content.style,\"height\",s)}if(e&this.CHANGE_H_SCROLL&&(r.translate(this.content,-this.scrollLeft,-n.offset),this.scroller.className=this.scrollLeft<=0?\"ace_scroller\":\"ace_scroller ace_scroll-left\"),e&this.CHANGE_FULL)return this.$changedLines=null,this.$textLayer.update(n),this.$showGutter&&this.$gutterLayer.update(n),this.$markerBack.update(n),this.$markerFront.update(n),this.$cursorLayer.update(n),this.$moveTextAreaToCursor(),void this._signal(\"afterRender\");if(e&this.CHANGE_SCROLL)return this.$changedLines=null,e&this.CHANGE_TEXT||e&this.CHANGE_LINES?this.$textLayer.update(n):this.$textLayer.scrollLines(n),this.$showGutter&&(e&this.CHANGE_GUTTER||e&this.CHANGE_LINES?this.$gutterLayer.update(n):this.$gutterLayer.scrollLines(n)),this.$markerBack.update(n),this.$markerFront.update(n),this.$cursorLayer.update(n),this.$moveTextAreaToCursor(),void this._signal(\"afterRender\");e&this.CHANGE_TEXT?(this.$changedLines=null,this.$textLayer.update(n),this.$showGutter&&this.$gutterLayer.update(n)):e&this.CHANGE_LINES?(this.$updateLines()||e&this.CHANGE_GUTTER&&this.$showGutter)&&this.$gutterLayer.update(n):e&this.CHANGE_TEXT||e&this.CHANGE_GUTTER?this.$showGutter&&this.$gutterLayer.update(n):e&this.CHANGE_CURSOR&&this.$highlightGutterLine&&this.$gutterLayer.updateLineHighlight(n),e&this.CHANGE_CURSOR&&(this.$cursorLayer.update(n),this.$moveTextAreaToCursor()),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_FRONT)&&this.$markerFront.update(n),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_BACK)&&this.$markerBack.update(n),this._signal(\"afterRender\")}else this.$changes|=e},this.$autosize=function(){var e=this.session.getScreenLength()*this.lineHeight,t=this.$maxLines*this.lineHeight,n=Math.min(t,Math.max((this.$minLines||1)*this.lineHeight,e))+this.scrollMargin.v+(this.$extraHeight||0);this.$horizScroll&&(n+=this.scrollBarH.getHeight()),this.$maxPixelHeight&&n>this.$maxPixelHeight&&(n=this.$maxPixelHeight);var i=!(n<=2*this.lineHeight)&&e>t;if(n!=this.desiredHeight||this.$size.height!=this.desiredHeight||i!=this.$vScroll){i!=this.$vScroll&&(this.$vScroll=i,this.scrollBarV.setVisible(i));var r=this.container.clientWidth;this.container.style.height=n+\"px\",this.$updateCachedSize(!0,this.$gutterWidth,r,n),this.desiredHeight=n,this._signal(\"autosize\")}},this.$computeLayerConfig=function(){var e=this.session,t=this.$size,n=t.height<=2*this.lineHeight,i=this.session.getScreenLength()*this.lineHeight,r=this.$getLongestLine(),o=!n&&(this.$hScrollBarAlwaysVisible||t.scrollerWidth-r-2*this.$padding<0),s=this.$horizScroll!==o;s&&(this.$horizScroll=o,this.scrollBarH.setVisible(o));var a=this.$vScroll;this.$maxLines&&this.lineHeight>1&&this.$autosize();var c=t.scrollerHeight+this.lineHeight,l=!this.$maxLines&&this.$scrollPastEnd?(t.scrollerHeight-this.lineHeight)*this.$scrollPastEnd:0;i+=l;var u=this.scrollMargin;this.session.setScrollTop(Math.max(-u.top,Math.min(this.scrollTop,i-t.scrollerHeight+u.bottom))),this.session.setScrollLeft(Math.max(-u.left,Math.min(this.scrollLeft,r+2*this.$padding-t.scrollerWidth+u.right)));var h=!n&&(this.$vScrollBarAlwaysVisible||t.scrollerHeight-i+l<0||this.scrollTop>u.top),d=a!==h;d&&(this.$vScroll=h,this.scrollBarV.setVisible(h));var p,m,f=this.scrollTop%this.lineHeight,g=Math.ceil(c/this.lineHeight)-1,v=Math.max(0,Math.round((this.scrollTop-f)/this.lineHeight)),_=v+g,E=this.lineHeight;v=e.screenToDocumentRow(v,0);var C=e.getFoldLine(v);C&&(v=C.start.row),p=e.documentToScreenRow(v,0),m=e.getRowLength(v)*E,_=Math.min(e.screenToDocumentRow(_,0),e.getLength()-1),c=t.scrollerHeight+e.getRowLength(_)*E+m,f=this.scrollTop-p*E;var A=0;return(this.layerConfig.width!=r||s)&&(A=this.CHANGE_H_SCROLL),(s||d)&&(A|=this.$updateCachedSize(!0,this.gutterWidth,t.width,t.height),this._signal(\"scrollbarVisibilityChanged\"),d&&(r=this.$getLongestLine())),this.layerConfig={width:r,padding:this.$padding,firstRow:v,firstRowScreen:p,lastRow:_,lineHeight:E,characterWidth:this.characterWidth,minHeight:c,maxHeight:i,offset:f,gutterOffset:E?Math.max(0,Math.ceil((f+t.height-t.scrollerHeight)/E)):0,height:this.$size.scrollerHeight},this.session.$bidiHandler&&this.session.$bidiHandler.setContentWidth(r-this.$padding),A},this.$updateLines=function(){if(this.$changedLines){var e=this.$changedLines.firstRow,t=this.$changedLines.lastRow;this.$changedLines=null;var n=this.layerConfig;if(!(e>n.lastRow+1||tthis.$textLayer.MAX_LINE_LENGTH&&(e=this.$textLayer.MAX_LINE_LENGTH+30),Math.max(this.$size.scrollerWidth-2*this.$padding,Math.round(e*this.characterWidth))},this.updateFrontMarkers=function(){this.$markerFront.setMarkers(this.session.getMarkers(!0)),this.$loop.schedule(this.CHANGE_MARKER_FRONT)},this.updateBackMarkers=function(){this.$markerBack.setMarkers(this.session.getMarkers()),this.$loop.schedule(this.CHANGE_MARKER_BACK)},this.addGutterDecoration=function(e,t){this.$gutterLayer.addGutterDecoration(e,t)},this.removeGutterDecoration=function(e,t){this.$gutterLayer.removeGutterDecoration(e,t)},this.updateBreakpoints=function(e){this.$loop.schedule(this.CHANGE_GUTTER)},this.setAnnotations=function(e){this.$gutterLayer.setAnnotations(e),this.$loop.schedule(this.CHANGE_GUTTER)},this.updateCursor=function(){this.$loop.schedule(this.CHANGE_CURSOR)},this.hideCursor=function(){this.$cursorLayer.hideCursor()},this.showCursor=function(){this.$cursorLayer.showCursor()},this.scrollSelectionIntoView=function(e,t,n){this.scrollCursorIntoView(e,n),this.scrollCursorIntoView(t,n)},this.scrollCursorIntoView=function(e,t,n){if(0!==this.$size.scrollerHeight){var i=this.$cursorLayer.getPixelPosition(e),r=i.left,o=i.top,s=n&&n.top||0,a=n&&n.bottom||0,c=this.$scrollAnimation?this.session.getScrollTop():this.scrollTop;c+s>o?(t&&c+s>o+this.lineHeight&&(o-=t*this.$size.scrollerHeight),0===o&&(o=-this.scrollMargin.top),this.session.setScrollTop(o)):c+this.$size.scrollerHeight-ar?(r=1-this.scrollMargin.top||(t>0&&this.session.getScrollTop()+this.$size.scrollerHeight-this.layerConfig.maxHeight<-1+this.scrollMargin.bottom||(e<0&&this.session.getScrollLeft()>=1-this.scrollMargin.left||(e>0&&this.session.getScrollLeft()+this.$size.scrollerWidth-this.layerConfig.width<-1+this.scrollMargin.right||void 0)))},this.pixelToScreenCoordinates=function(e,t){var n;if(this.$hasCssTransforms){n={top:0,left:0};var i=this.$fontMetrics.transformCoordinates([e,t]);e=i[1]-this.gutterWidth-this.margin.left,t=i[0]}else n=this.scroller.getBoundingClientRect();var r=e+this.scrollLeft-n.left-this.$padding,o=r/this.characterWidth,s=Math.floor((t+this.scrollTop-n.top)/this.lineHeight),a=this.$blockCursor?Math.floor(o):Math.round(o);return{row:s,column:a,side:o-a>0?1:-1,offsetX:r}},this.screenToTextCoordinates=function(e,t){var n;if(this.$hasCssTransforms){n={top:0,left:0};var i=this.$fontMetrics.transformCoordinates([e,t]);e=i[1]-this.gutterWidth-this.margin.left,t=i[0]}else n=this.scroller.getBoundingClientRect();var r=e+this.scrollLeft-n.left-this.$padding,o=r/this.characterWidth,s=this.$blockCursor?Math.floor(o):Math.round(o),a=Math.floor((t+this.scrollTop-n.top)/this.lineHeight);return this.session.screenToDocumentPosition(a,Math.max(s,0),r)},this.textToScreenCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),i=this.session.documentToScreenPosition(e,t),r=this.$padding+(this.session.$bidiHandler.isBidiRow(i.row,e)?this.session.$bidiHandler.getPosLeft(i.column):Math.round(i.column*this.characterWidth)),o=i.row*this.lineHeight;return{pageX:n.left+r-this.scrollLeft,pageY:n.top+o-this.scrollTop}},this.visualizeFocus=function(){r.addCssClass(this.container,\"ace_focus\")},this.visualizeBlur=function(){r.removeCssClass(this.container,\"ace_focus\")},this.showComposition=function(e){this.$composition=e,e.cssText||(e.cssText=this.textarea.style.cssText),e.useTextareaForIME=this.$useTextareaForIME,this.$useTextareaForIME?(r.addCssClass(this.textarea,\"ace_composition\"),this.textarea.style.cssText=\"\",this.$moveTextAreaToCursor(),this.$cursorLayer.element.style.display=\"none\"):e.markerId=this.session.addMarker(e.markerRange,\"ace_composition_marker\",\"text\")},this.setCompositionText=function(e){var t=this.session.selection.cursor;this.addToken(e,\"composition_placeholder\",t.row,t.column),this.$moveTextAreaToCursor()},this.hideComposition=function(){this.$composition&&(this.$composition.markerId&&this.session.removeMarker(this.$composition.markerId),r.removeCssClass(this.textarea,\"ace_composition\"),this.textarea.style.cssText=this.$composition.cssText,this.$composition=null,this.$cursorLayer.element.style.display=\"\")},this.addToken=function(e,t,n,i){var r=this.session;r.bgTokenizer.lines[n]=null;var o={type:t,value:e},s=r.getTokens(n);if(null==i)s.push(o);else for(var a=0,c=0;c50&&e.length>this.$doc.getLength()>>1?this.call(\"setValue\",[this.$doc.getValue()]):this.emit(\"change\",{data:e}))}}).call(c.prototype);t.UIWorkerClient=function(e,t,n){var i=null,r=!1,a=Object.create(o),l=[],u=new c({messageBuffer:l,terminate:function(){},postMessage:function(e){l.push(e),i&&(r?setTimeout(h):h())}});u.setEmitSync=function(e){r=e};var h=function(){var e=l.shift();e.command?i[e.command].apply(i,e.args):e.event&&a._signal(e.event,e.data)};return a.postMessage=function(e){u.onMessage({data:e})},a.callback=function(e,t){this.postMessage({type:\"call\",id:t,data:e})},a.emit=function(e,t){this.postMessage({type:\"event\",name:e,data:t})},s.loadModule([\"worker\",t],(function(e){for(i=new e[n](a);l.length;)h()})),u},t.WorkerClient=c,t.createWorker=a})),ace.define(\"ace/placeholder\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/oop\"],(function(e,t,n){\"use strict\";var i=e(\"./range\").Range,r=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./lib/oop\"),s=function(e,t,n,i,r,o){var s=this;this.length=t,this.session=e,this.doc=e.getDocument(),this.mainClass=r,this.othersClass=o,this.$onUpdate=this.onUpdate.bind(this),this.doc.on(\"change\",this.$onUpdate),this.$others=i,this.$onCursorChange=function(){setTimeout((function(){s.onCursorChange()}))},this.$pos=n;var a=e.getUndoManager().$undoStack||e.getUndoManager().$undostack||{length:-1};this.$undoStackDepth=a.length,this.setup(),e.selection.on(\"changeCursor\",this.$onCursorChange)};(function(){o.implement(this,r),this.setup=function(){var e=this,t=this.doc,n=this.session;this.selectionBefore=n.selection.toJSON(),n.selection.inMultiSelectMode&&n.selection.toSingleRange(),this.pos=t.createAnchor(this.$pos.row,this.$pos.column);var r=this.pos;r.$insertRight=!0,r.detach(),r.markerId=n.addMarker(new i(r.row,r.column,r.row,r.column+this.length),this.mainClass,null,!1),this.others=[],this.$others.forEach((function(n){var i=t.createAnchor(n.row,n.column);i.$insertRight=!0,i.detach(),e.others.push(i)})),n.setUndoSelect(!1)},this.showOtherMarkers=function(){if(!this.othersActive){var e=this.session,t=this;this.othersActive=!0,this.others.forEach((function(n){n.markerId=e.addMarker(new i(n.row,n.column,n.row,n.column+t.length),t.othersClass,null,!1)}))}},this.hideOtherMarkers=function(){if(this.othersActive){this.othersActive=!1;for(var e=0;e=this.pos.column&&t.start.column<=this.pos.column+this.length+1,o=t.start.column-this.pos.column;if(this.updateAnchors(e),r&&(this.length+=n),r&&!this.session.$fromUndo)if(\"insert\"===e.action)for(var s=this.others.length-1;s>=0;s--){var a={row:(c=this.others[s]).row,column:c.column+o};this.doc.insertMergedLines(a,e.lines)}else if(\"remove\"===e.action)for(s=this.others.length-1;s>=0;s--){var c;a={row:(c=this.others[s]).row,column:c.column+o};this.doc.remove(new i(a.row,a.column,a.row,a.column-n))}this.$updating=!1,this.updateMarkers()}},this.updateAnchors=function(e){this.pos.onChange(e);for(var t=this.others.length;t--;)this.others[t].onChange(e);this.updateMarkers()},this.updateMarkers=function(){if(!this.$updating){var e=this,t=this.session,n=function(n,r){t.removeMarker(n.markerId),n.markerId=t.addMarker(new i(n.row,n.column,n.row,n.column+e.length),r,null,!1)};n(this.pos,this.mainClass);for(var r=this.others.length;r--;)n(this.others[r],this.othersClass)}},this.onCursorChange=function(e){if(!this.$updating&&this.session){var t=this.session.selection.getCursor();t.row===this.pos.row&&t.column>=this.pos.column&&t.column<=this.pos.column+this.length?(this.showOtherMarkers(),this._emit(\"cursorEnter\",e)):(this.hideOtherMarkers(),this._emit(\"cursorLeave\",e))}},this.detach=function(){this.session.removeMarker(this.pos&&this.pos.markerId),this.hideOtherMarkers(),this.doc.removeEventListener(\"change\",this.$onUpdate),this.session.selection.removeEventListener(\"changeCursor\",this.$onCursorChange),this.session.setUndoSelect(!0),this.session=null},this.cancel=function(){if(-1!==this.$undoStackDepth){for(var e=this.session.getUndoManager(),t=(e.$undoStack||e.$undostack).length-this.$undoStackDepth,n=0;n1&&!this.inMultiSelectMode&&(this._signal(\"multiSelect\"),this.inMultiSelectMode=!0,this.session.$undoSelect=!1,this.rangeList.attach(this.session)),t||this.fromOrientedRange(e)}},this.toSingleRange=function(e){e=e||this.ranges[0];var t=this.rangeList.removeAll();t.length&&this.$onRemoveRange(t),e&&this.fromOrientedRange(e)},this.substractPoint=function(e){var t=this.rangeList.substractPoint(e);if(t)return this.$onRemoveRange(t),t[0]},this.mergeOverlappingRanges=function(){var e=this.rangeList.merge();e.length&&this.$onRemoveRange(e)},this.$onAddRange=function(e){this.rangeCount=this.rangeList.ranges.length,this.ranges.unshift(e),this._signal(\"addRange\",{range:e})},this.$onRemoveRange=function(e){if(this.rangeCount=this.rangeList.ranges.length,1==this.rangeCount&&this.inMultiSelectMode){var t=this.rangeList.ranges.pop();e.push(t),this.rangeCount=0}for(var n=e.length;n--;){var i=this.ranges.indexOf(e[n]);this.ranges.splice(i,1)}this._signal(\"removeRange\",{ranges:e}),0===this.rangeCount&&this.inMultiSelectMode&&(this.inMultiSelectMode=!1,this._signal(\"singleSelect\"),this.session.$undoSelect=!0,this.rangeList.detach(this.session)),(t=t||this.ranges[0])&&!t.isEqual(this.getRange())&&this.fromOrientedRange(t)},this.$initRangeList=function(){this.rangeList||(this.rangeList=new i,this.ranges=[],this.rangeCount=0)},this.getAllRanges=function(){return this.rangeCount?this.rangeList.ranges.concat():[this.getRange()]},this.splitIntoLines=function(){if(this.rangeCount>1){var e=this.rangeList.ranges,t=e[e.length-1],n=r.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{n=this.getRange();var i=this.isBackwards(),o=n.start.row,s=n.end.row;if(o==s){if(i)var a=n.end,c=n.start;else a=n.start,c=n.end;return this.addRange(r.fromPoints(c,c)),void this.addRange(r.fromPoints(a,a))}var l=[],u=this.getLineRange(o,!0);u.start.column=n.start.column,l.push(u);for(var h=o+1;h1){var e=this.rangeList.ranges,t=e[e.length-1],n=r.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{var i=this.session.documentToScreenPosition(this.cursor),o=this.session.documentToScreenPosition(this.anchor);this.rectangularRangeBlock(i,o).forEach(this.addRange,this)}},this.rectangularRangeBlock=function(e,t,n){var i=[],o=e.column0;)_--;if(_>0)for(var E=0;i[E].isEmpty();)E++;for(var C=_;C>=E;C--)i[C].isEmpty()&&i.splice(C,1)}return i}}.call(o.prototype);var d=e(\"./editor\").Editor;function p(e){e.$multiselectOnSessionChange||(e.$onAddRange=e.$onAddRange.bind(e),e.$onRemoveRange=e.$onRemoveRange.bind(e),e.$onMultiSelect=e.$onMultiSelect.bind(e),e.$onSingleSelect=e.$onSingleSelect.bind(e),e.$multiselectOnSessionChange=t.onSessionChange.bind(e),e.$checkMultiselectChange=e.$checkMultiselectChange.bind(e),e.$multiselectOnSessionChange(e),e.on(\"changeSession\",e.$multiselectOnSessionChange),e.on(\"mousedown\",s),e.commands.addCommands(l.defaultCommands),function(e){if(!e.textInput)return;var t=e.textInput.getElement(),n=!1;function i(t){n&&(e.renderer.setMouseCursor(\"\"),n=!1)}a.addListener(t,\"keydown\",(function(t){var r=18==t.keyCode&&!(t.ctrlKey||t.shiftKey||t.metaKey);e.$blockSelectEnabled&&r?n||(e.renderer.setMouseCursor(\"crosshair\"),n=!0):n&&i()})),a.addListener(t,\"keyup\",i),a.addListener(t,\"blur\",i)}(e))}(function(){this.updateSelectionMarkers=function(){this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.addSelectionMarker=function(e){e.cursor||(e.cursor=e.end);var t=this.getSelectionStyle();return e.marker=this.session.addMarker(e,\"ace_selection\",t),this.session.$selectionMarkers.push(e),this.session.selectionMarkerCount=this.session.$selectionMarkers.length,e},this.removeSelectionMarker=function(e){if(e.marker){this.session.removeMarker(e.marker);var t=this.session.$selectionMarkers.indexOf(e);-1!=t&&this.session.$selectionMarkers.splice(t,1),this.session.selectionMarkerCount=this.session.$selectionMarkers.length}},this.removeSelectionMarkers=function(e){for(var t=this.session.$selectionMarkers,n=e.length;n--;){var i=e[n];if(i.marker){this.session.removeMarker(i.marker);var r=t.indexOf(i);-1!=r&&t.splice(r,1)}}this.session.selectionMarkerCount=t.length},this.$onAddRange=function(e){this.addSelectionMarker(e.range),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onRemoveRange=function(e){this.removeSelectionMarkers(e.ranges),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onMultiSelect=function(e){this.inMultiSelectMode||(this.inMultiSelectMode=!0,this.setStyle(\"ace_multiselect\"),this.keyBinding.addKeyboardHandler(l.keyboardHandler),this.commands.setDefaultHandler(\"exec\",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers())},this.$onSingleSelect=function(e){this.session.multiSelect.inVirtualMode||(this.inMultiSelectMode=!1,this.unsetStyle(\"ace_multiselect\"),this.keyBinding.removeKeyboardHandler(l.keyboardHandler),this.commands.removeDefaultHandler(\"exec\",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers(),this._emit(\"changeSelection\"))},this.$onMultiSelectExec=function(e){var t=e.command,n=e.editor;if(n.multiSelect){if(t.multiSelectAction)\"forEach\"==t.multiSelectAction?i=n.forEachSelection(t,e.args):\"forEachLine\"==t.multiSelectAction?i=n.forEachSelection(t,e.args,!0):\"single\"==t.multiSelectAction?(n.exitMultiSelectMode(),i=t.exec(n,e.args||{})):i=t.multiSelectAction(n,e.args||{});else{var i=t.exec(n,e.args||{});n.multiSelect.addRange(n.multiSelect.toOrientedRange()),n.multiSelect.mergeOverlappingRanges()}return i}},this.forEachSelection=function(e,t,n){if(!this.inVirtualSelectionMode){var i,r=n&&n.keepOrder,s=1==n||n&&n.$byLines,a=this.session,c=this.selection,l=c.rangeList,u=(r?c:l).ranges;if(!u.length)return e.exec?e.exec(this,t||{}):e(this,t||{});var h=c._eventRegistry;c._eventRegistry={};var d=new o(a);this.inVirtualSelectionMode=!0;for(var p=u.length;p--;){if(s)for(;p>0&&u[p].start.row==u[p-1].end.row;)p--;d.fromOrientedRange(u[p]),d.index=p,this.selection=a.selection=d;var m=e.exec?e.exec(this,t||{}):e(this,t||{});i||void 0===m||(i=m),d.toOrientedRange(u[p])}d.detach(),this.selection=a.selection=c,this.inVirtualSelectionMode=!1,c._eventRegistry=h,c.mergeOverlappingRanges(),c.ranges[0]&&c.fromOrientedRange(c.ranges[0]);var f=this.renderer.$scrollAnimation;return this.onCursorChange(),this.onSelectionChange(),f&&f.from==f.to&&this.renderer.animateScrolling(f.from),i}},this.exitMultiSelectMode=function(){this.inMultiSelectMode&&!this.inVirtualSelectionMode&&this.multiSelect.toSingleRange()},this.getSelectedText=function(){var e=\"\";if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){for(var t=this.multiSelect.rangeList.ranges,n=[],i=0;is&&(s=n.column),iu?e.insert(i,c.stringRepeat(\" \",o-u)):e.remove(new r(i.row,i.column,i.row,i.column-o+u)),t.start.column=t.end.column=s,t.start.row=t.end.row=i.row,t.cursor=t.end})),t.fromOrientedRange(n[0]),this.renderer.updateCursor(),this.renderer.updateBackMarkers()}else{var u=this.selection.getRange(),h=u.start.row,d=u.end.row,p=h==d;if(p){var m,f=this.session.getLength();do{m=this.session.getLine(d)}while(/[=:]/.test(m)&&++d0);h<0&&(h=0),d>=f&&(d=f-1)}var g=this.session.removeFullLines(h,d);g=this.$reAlignText(g,p),this.session.insert({row:h,column:0},g.join(\"\\n\")+\"\\n\"),p||(u.start.column=0,u.end.column=g[g.length-1].length),this.selection.setRange(u)}},this.$reAlignText=function(e,t){var n,i,r,o=!0,s=!0;return e.map((function(e){var t=e.match(/(\\s*)(.*?)(\\s*)([=:].*)/);return t?null==n?(n=t[1].length,i=t[2].length,r=t[3].length,t):(n+i+r!=t[1].length+t[2].length+t[3].length&&(s=!1),n!=t[1].length&&(o=!1),n>t[1].length&&(n=t[1].length),it[3].length&&(r=t[3].length),t):[e]})).map(t?l:o?s?function(e){return e[2]?a(n+i-e[2].length)+e[2]+a(r)+e[4].replace(/^([=:])\\s+/,\"$1 \"):e[0]}:l:function(e){return e[2]?a(n)+e[2]+a(r)+e[4].replace(/^([=:])\\s+/,\"$1 \"):e[0]});function a(e){return c.stringRepeat(\" \",e)}function l(e){return e[2]?a(n)+e[2]+a(i-e[2].length+r)+e[4].replace(/^([=:])\\s+/,\"$1 \"):e[0]}}}).call(d.prototype),t.onSessionChange=function(e){var t=e.session;t&&!t.multiSelect&&(t.$selectionMarkers=[],t.selection.$initRangeList(),t.multiSelect=t.selection),this.multiSelect=t&&t.multiSelect;var n=e.oldSession;n&&(n.multiSelect.off(\"addRange\",this.$onAddRange),n.multiSelect.off(\"removeRange\",this.$onRemoveRange),n.multiSelect.off(\"multiSelect\",this.$onMultiSelect),n.multiSelect.off(\"singleSelect\",this.$onSingleSelect),n.multiSelect.lead.off(\"change\",this.$checkMultiselectChange),n.multiSelect.anchor.off(\"change\",this.$checkMultiselectChange)),t&&(t.multiSelect.on(\"addRange\",this.$onAddRange),t.multiSelect.on(\"removeRange\",this.$onRemoveRange),t.multiSelect.on(\"multiSelect\",this.$onMultiSelect),t.multiSelect.on(\"singleSelect\",this.$onSingleSelect),t.multiSelect.lead.on(\"change\",this.$checkMultiselectChange),t.multiSelect.anchor.on(\"change\",this.$checkMultiselectChange)),t&&this.inMultiSelectMode!=t.selection.inMultiSelectMode&&(t.selection.inMultiSelectMode?this.$onMultiSelect():this.$onSingleSelect())},t.MultiSelect=p,e(\"./config\").defineOptions(d.prototype,\"editor\",{enableMultiselect:{set:function(e){p(this),e?(this.on(\"changeSession\",this.$multiselectOnSessionChange),this.on(\"mousedown\",s)):(this.off(\"changeSession\",this.$multiselectOnSessionChange),this.off(\"mousedown\",s))},value:!0},enableBlockSelect:{set:function(e){this.$blockSelectEnabled=e},value:!0}})})),ace.define(\"ace/mode/folding/fold_mode\",[\"require\",\"exports\",\"module\",\"ace/range\"],(function(e,t,n){\"use strict\";var i=e(\"../../range\").Range,r=t.FoldMode=function(){};(function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(e,t,n){var i=e.getLine(n);return this.foldingStartMarker.test(i)?\"start\":\"markbeginend\"==t&&this.foldingStopMarker&&this.foldingStopMarker.test(i)?\"end\":\"\"},this.getFoldWidgetRange=function(e,t,n){return null},this.indentationBlock=function(e,t,n){var r=/\\S/,o=e.getLine(t),s=o.search(r);if(-1!=s){for(var a=n||o.length,c=e.getLength(),l=t,u=t;++tl){var p=e.getLine(u).length;return new i(l,a,u,p)}}},this.openingBracketBlock=function(e,t,n,r,o){var s={row:n,column:r+1},a=e.$findClosingBracket(t,s,o);if(a){var c=e.foldWidgets[a.row];return null==c&&(c=e.getFoldWidget(a.row)),\"start\"==c&&a.row>s.row&&(a.row--,a.column=e.getLine(a.row).length),i.fromPoints(s,a)}},this.closingBracketBlock=function(e,t,n,r,o){var s={row:n,column:r},a=e.$findOpeningBracket(t,s);if(a)return a.column++,s.column--,i.fromPoints(a,s)}}).call(r.prototype)})),ace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],(function(e,t,n){\"use strict\";t.isDark=!1,t.cssClass=\"ace-tm\",t.cssText='.ace-tm .ace_gutter {background: #f0f0f0;color: #333;}.ace-tm .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-tm .ace_fold {background-color: #6B72E6;}.ace-tm {background-color: #FFFFFF;color: black;}.ace-tm .ace_cursor {color: black;}.ace-tm .ace_invisible {color: rgb(191, 191, 191);}.ace-tm .ace_storage,.ace-tm .ace_keyword {color: blue;}.ace-tm .ace_constant {color: rgb(197, 6, 11);}.ace-tm .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-tm .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-tm .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-tm .ace_invalid {background-color: rgba(255, 0, 0, 0.1);color: red;}.ace-tm .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-tm .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-tm .ace_support.ace_type,.ace-tm .ace_support.ace_class {color: rgb(109, 121, 222);}.ace-tm .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-tm .ace_string {color: rgb(3, 106, 7);}.ace-tm .ace_comment {color: rgb(76, 136, 107);}.ace-tm .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-tm .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-tm .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-tm .ace_variable {color: rgb(49, 132, 149);}.ace-tm .ace_xml-pe {color: rgb(104, 104, 91);}.ace-tm .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-tm .ace_heading {color: rgb(12, 7, 255);}.ace-tm .ace_list {color:rgb(185, 6, 144);}.ace-tm .ace_meta.ace_tag {color:rgb(0, 22, 142);}.ace-tm .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-tm .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-tm.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;}.ace-tm .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-tm .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-tm .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-tm .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-tm .ace_gutter-active-line {background-color : #dcdcdc;}.ace-tm .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-tm .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;}',t.$id=\"ace/theme/textmate\",e(\"../lib/dom\").importCssString(t.cssText,t.cssClass)})),ace.define(\"ace/line_widgets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/range\"],(function(e,t,n){\"use strict\";e(\"./lib/oop\");var i=e(\"./lib/dom\");e(\"./range\").Range;function r(e){this.session=e,this.session.widgetManager=this,this.session.getRowLength=this.getRowLength,this.session.$getWidgetScreenLength=this.$getWidgetScreenLength,this.updateOnChange=this.updateOnChange.bind(this),this.renderWidgets=this.renderWidgets.bind(this),this.measureWidgets=this.measureWidgets.bind(this),this.session._changedWidgets=[],this.$onChangeEditor=this.$onChangeEditor.bind(this),this.session.on(\"change\",this.updateOnChange),this.session.on(\"changeFold\",this.updateOnFold),this.session.on(\"changeEditor\",this.$onChangeEditor)}(function(){this.getRowLength=function(e){var t;return t=this.lineWidgets&&this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0,this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+1+t:1+t},this.$getWidgetScreenLength=function(){var e=0;return this.lineWidgets.forEach((function(t){t&&t.rowCount&&!t.hidden&&(e+=t.rowCount)})),e},this.$onChangeEditor=function(e){this.attach(e.editor)},this.attach=function(e){e&&e.widgetManager&&e.widgetManager!=this&&e.widgetManager.detach(),this.editor!=e&&(this.detach(),this.editor=e,e&&(e.widgetManager=this,e.renderer.on(\"beforeRender\",this.measureWidgets),e.renderer.on(\"afterRender\",this.renderWidgets)))},this.detach=function(e){var t=this.editor;if(t){this.editor=null,t.widgetManager=null,t.renderer.off(\"beforeRender\",this.measureWidgets),t.renderer.off(\"afterRender\",this.renderWidgets);var n=this.session.lineWidgets;n&&n.forEach((function(e){e&&e.el&&e.el.parentNode&&(e._inDocument=!1,e.el.parentNode.removeChild(e.el))}))}},this.updateOnFold=function(e,t){var n=t.lineWidgets;if(n&&e.action){for(var i=e.data,r=i.start.row,o=i.end.row,s=\"add\"==e.action,a=r+1;a0&&!i[r];)r--;this.firstRow=n.firstRow,this.lastRow=n.lastRow,t.$cursorLayer.config=n;for(var s=r;s<=o;s++){var a=i[s];if(a&&a.el)if(a.hidden)a.el.style.top=-100-(a.pixelHeight||0)+\"px\";else{a._inDocument||(a._inDocument=!0,t.container.appendChild(a.el));var c=t.$cursorLayer.getPixelPosition({row:s,column:0},!0).top;a.coverLine||(c+=n.lineHeight*this.session.getRowLineCount(a.row)),a.el.style.top=c-n.offset+\"px\";var l=a.coverGutter?0:t.gutterWidth;a.fixedWidth||(l-=t.scrollLeft),a.el.style.left=l+\"px\",a.fullWidth&&a.screenWidth&&(a.el.style.minWidth=n.width+2*n.padding+\"px\"),a.fixedWidth?a.el.style.right=t.scrollBar.getWidth()+\"px\":a.el.style.right=\"\"}}}}}).call(r.prototype),t.LineWidgets=r})),ace.define(\"ace/ext/error_marker\",[\"require\",\"exports\",\"module\",\"ace/line_widgets\",\"ace/lib/dom\",\"ace/range\"],(function(e,t,n){\"use strict\";var i=e(\"../line_widgets\").LineWidgets,r=e(\"../lib/dom\"),o=e(\"../range\").Range;t.showErrorMarker=function(e,t){var n=e.session;n.widgetManager||(n.widgetManager=new i(n),n.widgetManager.attach(e));var s=e.getCursorPosition(),a=s.row,c=n.widgetManager.getWidgetsAtRow(a).filter((function(e){return\"errorMarker\"==e.type}))[0];c?c.destroy():a-=t;var l,u=function(e,t,n){var i=e.getAnnotations().sort(o.comparePoints);if(i.length){var r=function(e,t,n){for(var i=0,r=e.length-1;i<=r;){var o=i+r>>1,s=n(t,e[o]);if(s>0)i=o+1;else{if(!(s<0))return o;r=o-1}}return-(i+1)}(i,{row:t,column:-1},o.comparePoints);r<0&&(r=-r-1),r>=i.length?r=n>0?0:i.length-1:0===r&&n<0&&(r=i.length-1);var s=i[r];if(s&&n){if(s.row===t){do{s=i[r+=n]}while(s&&s.row===t);if(!s)return i.slice()}var a=[];t=s.row;do{a[n<0?\"unshift\":\"push\"](s),s=i[r+=n]}while(s&&s.row==t);return a.length&&a}}}(n,a,t);if(u){var h=u[0];s.column=(h.pos&&\"number\"!=typeof h.column?h.pos.sc:h.column)||0,s.row=h.row,l=e.renderer.$gutterLayer.$annotations[s.row]}else{if(c)return;l={text:[\"Looks good!\"],className:\"ace_ok\"}}e.session.unfold(s.row),e.selection.moveToPosition(s);var d={row:s.row,fixedWidth:!0,coverGutter:!0,el:r.createElement(\"div\"),type:\"errorMarker\"},p=d.el.appendChild(r.createElement(\"div\")),m=d.el.appendChild(r.createElement(\"div\"));m.className=\"error_widget_arrow \"+l.className;var f=e.renderer.$cursorLayer.getPixelPosition(s).left;m.style.left=f+e.renderer.gutterWidth-5+\"px\",d.el.className=\"error_widget_wrapper\",p.className=\"error_widget \"+l.className,p.innerHTML=l.text.join(\"
                      \"),p.appendChild(r.createElement(\"div\"));var g=function(e,t,n){if(0===t&&(\"esc\"===n||\"return\"===n))return d.destroy(),{command:\"null\"}};d.destroy=function(){e.$mouseHandler.isMousePressed||(e.keyBinding.removeKeyboardHandler(g),n.widgetManager.removeLineWidget(d),e.off(\"changeSelection\",d.destroy),e.off(\"changeSession\",d.destroy),e.off(\"mouseup\",d.destroy),e.off(\"change\",d.destroy))},e.keyBinding.addKeyboardHandler(g),e.on(\"changeSelection\",d.destroy),e.on(\"changeSession\",d.destroy),e.on(\"mouseup\",d.destroy),e.on(\"change\",d.destroy),e.session.widgetManager.addLineWidget(d),d.el.onmousedown=e.focus.bind(e),e.renderer.scrollCursorIntoView(null,.5,{bottom:d.el.offsetHeight})},r.importCssString(\" .error_widget_wrapper { background: inherit; color: inherit; border:none } .error_widget { border-top: solid 2px; border-bottom: solid 2px; margin: 5px 0; padding: 10px 40px; white-space: pre-wrap; } .error_widget.ace_error, .error_widget_arrow.ace_error{ border-color: #ff5a5a } .error_widget.ace_warning, .error_widget_arrow.ace_warning{ border-color: #F1D817 } .error_widget.ace_info, .error_widget_arrow.ace_info{ border-color: #5a5a5a } .error_widget.ace_ok, .error_widget_arrow.ace_ok{ border-color: #5aaa5a } .error_widget_arrow { position: absolute; border: solid 5px; border-top-color: transparent!important; border-right-color: transparent!important; border-left-color: transparent!important; top: -5px; }\",\"\")})),ace.define(\"ace/ace\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/range\",\"ace/editor\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/worker/worker_client\",\"ace/keyboard/hash_handler\",\"ace/placeholder\",\"ace/multi_select\",\"ace/mode/folding/fold_mode\",\"ace/theme/textmate\",\"ace/ext/error_marker\",\"ace/config\"],(function(e,t,i){\"use strict\";e(\"./lib/fixoldbrowsers\");var r=e(\"./lib/dom\"),o=e(\"./lib/event\"),s=e(\"./range\").Range,a=e(\"./editor\").Editor,c=e(\"./edit_session\").EditSession,l=e(\"./undomanager\").UndoManager,u=e(\"./virtual_renderer\").VirtualRenderer;e(\"./worker/worker_client\"),e(\"./keyboard/hash_handler\"),e(\"./placeholder\"),e(\"./multi_select\"),e(\"./mode/folding/fold_mode\"),e(\"./theme/textmate\"),e(\"./ext/error_marker\"),t.config=e(\"./config\"),t.require=e,t.define=n(3),t.edit=function(e,n){if(\"string\"==typeof e){var i=e;if(!(e=document.getElementById(i)))throw new Error(\"ace.edit can't find div #\"+i)}if(e&&e.env&&e.env.editor instanceof a)return e.env.editor;var s=\"\";if(e&&/input|textarea/i.test(e.tagName)){var c=e;s=c.value,e=r.createElement(\"pre\"),c.parentNode.replaceChild(e,c)}else e&&(s=e.textContent,e.innerHTML=\"\");var l=t.createEditSession(s),h=new a(new u(e),l,n),d={document:l,editor:h,onResize:h.resize.bind(h,null)};return c&&(d.textarea=c),o.addListener(window,\"resize\",d.onResize),h.on(\"destroy\",(function(){o.removeListener(window,\"resize\",d.onResize),d.editor.container.env=null})),h.container.env=h.env=d,h},t.createEditSession=function(e,t){var n=new c(e,t);return n.setUndoManager(new l),n},t.Range=s,t.Editor=a,t.EditSession=c,t.UndoManager=l,t.VirtualRenderer=u,t.version=t.config.version})),ace.require([\"ace/ace\"],(function(t){for(var n in t&&(t.config.init(!0),t.define=ace.define),window.ace||(window.ace=t),t)t.hasOwnProperty(n)&&(window.ace[n]=t[n]);window.ace.default=window.ace,e&&(e.exports=window.ace)})),e.exports=ace}).call(this,n(0)(e))},function(e,t,n){(function(e){ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],(function(e,t,n){\"use strict\";var i=e(\"../lib/oop\"),r=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},o.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};i.inherits(o,r),o.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},o.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},o.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=o})),ace.define(\"ace/mode/c_cpp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],(function(e,t,n){\"use strict\";var i=e(\"../lib/oop\"),r=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,o=e(\"./text_highlight_rules\").TextHighlightRules,s=t.cFunctions=\"\\\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\\\b\",a=function(){var e=this.$keywords=this.createKeywordMapper({\"keyword.control\":\"break|case|continue|default|do|else|for|goto|if|_Pragma|return|switch|while|catch|operator|try|throw|using\",\"storage.type\":\"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|class|wchar_t|template|char16_t|char32_t\",\"storage.modifier\":\"const|extern|register|restrict|static|volatile|inline|private|protected|public|friend|explicit|virtual|export|mutable|typename|constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local\",\"keyword.operator\":\"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace\",\"variable.language\":\"this\",\"constant.language\":\"NULL|true|false|TRUE|FALSE|nullptr\"},\"identifier\"),t=/\\\\(?:['\"?\\\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\\d]{2}|u[a-fA-F\\d]{4}U[a-fA-F\\d]{8}|.)/.source,n=\"%\"+/(\\d+\\$)?/.source+/[#0\\- +']*/.source+/[,;:_]?/.source+/((-?\\d+)|\\*(-?\\d+\\$)?)?/.source+/(\\.((-?\\d+)|\\*(-?\\d+\\$)?)?)?/.source+/(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source+/(\\[[^\"\\]]+\\]|[diouxXDOUeEfFgGaACcSspn%])/.source;this.$rules={start:[{token:\"comment\",regex:\"//$\",next:\"start\"},{token:\"comment\",regex:\"//\",next:\"singleLineComment\"},r.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:\"'(?:\"+t+\"|.)?'\"},{token:\"string.start\",regex:'\"',stateName:\"qqstring\",next:[{token:\"string\",regex:/\\\\\\s*$/,next:\"qqstring\"},{token:\"constant.language.escape\",regex:t},{token:\"constant.language.escape\",regex:n},{token:\"string.end\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:'R\"\\\\(',stateName:\"rawString\",next:[{token:\"string.end\",regex:'\\\\)\"',next:\"start\"},{defaultToken:\"string\"}]},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"keyword\",regex:\"#\\\\s*(?:include|import|pragma|line|define|undef|version)\\\\b\",next:\"directive\"},{token:\"keyword\",regex:\"#\\\\s*(?:endif|if|ifdef|else|elif|ifndef)\\\\b\"},{token:\"support.function.C99.c\",regex:s},{token:e,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\"},{token:\"keyword.operator\",regex:/--|\\+\\+|<<=|>>=|>>>=|<>|&&|\\|\\||\\?:|[*%\\/+\\-&\\^|~!<>=]=?/},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],singleLineComment:[{token:\"comment\",regex:/\\\\$/,next:\"singleLineComment\"},{token:\"comment\",regex:/$/,next:\"start\"},{defaultToken:\"comment\"}],directive:[{token:\"constant.other.multiline\",regex:/\\\\/},{token:\"constant.other.multiline\",regex:/.*\\\\/},{token:\"constant.other\",regex:\"\\\\s*<.+?>\",next:\"start\"},{token:\"constant.other\",regex:'\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]',next:\"start\"},{token:\"constant.other\",regex:\"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",next:\"start\"},{token:\"constant.other\",regex:/[^\\\\\\/]+/,next:\"start\"}]},this.embedRules(r,\"doc-\",[r.getEndRule(\"start\")]),this.normalizeRules()};i.inherits(a,o),t.c_cppHighlightRules=a})),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],(function(e,t,n){\"use strict\";var i=e(\"../range\").Range,r=function(){};(function(){this.checkOutdent=function(e,t){return!!/^\\s+$/.test(e)&&/^\\s*\\}/.test(t)},this.autoOutdent=function(e,t){var n=e.getLine(t).match(/^(\\s*\\})/);if(!n)return 0;var r=n[1].length,o=e.findMatchingBracket({row:t,column:r});if(!o||o.row==t)return 0;var s=this.$getIndent(e.getLine(o.row));e.replace(new i(t,0,t,r-1),s)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(r.prototype),t.MatchingBraceOutdent=r})),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],(function(e,t,n){\"use strict\";var i=e(\"../../lib/oop\"),r=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};i.inherits(s,o),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var i=e.getLine(n);if(this.singleLineBlockCommentRe.test(i)&&!this.startRegionRe.test(i)&&!this.tripleStarBlockCommentRe.test(i))return\"\";var r=this._getFoldWidgetBase(e,t,n);return!r&&this.startRegionRe.test(i)?\"start\":r},this.getFoldWidgetRange=function(e,t,n,i){var r,o=e.getLine(n);if(this.startRegionRe.test(o))return this.getCommentRegionBlock(e,o,n);if(r=o.match(this.foldingStartMarker)){var s=r.index;if(r[1])return this.openingBracketBlock(e,r[1],n,s);var a=e.getCommentFoldRange(n,s+r[0].length,1);return a&&!a.isMultiLine()&&(i?a=this.getSectionRange(e,n):\"all\"!=t&&(a=null)),a}if(\"markbegin\"!==t&&(r=o.match(this.foldingStopMarker))){s=r.index+r[0].length;return r[1]?this.closingBracketBlock(e,r[1],n,s):e.getCommentFoldRange(n,s,-1)}},this.getSectionRange=function(e,t){for(var n=e.getLine(t),i=n.search(/\\S/),o=t,s=n.length,a=t+=1,c=e.getLength();++tl)break;var u=this.getFoldWidgetRange(e,\"all\",t);if(u){if(u.start.row<=o)break;if(u.isMultiLine())t=u.end.row;else if(i==l)break}a=t}}return new r(o,s,a,e.getLine(a).length)},this.getCommentRegionBlock=function(e,t,n){for(var i=t.search(/\\s*$/),o=e.getLength(),s=n,a=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,c=1;++ns)return new r(s,i,n,t.length)}}.call(s.prototype)})),ace.define(\"ace/mode/c_cpp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/c_cpp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],(function(e,t,n){\"use strict\";var i=e(\"../lib/oop\"),r=e(\"./text\").Mode,o=e(\"./c_cpp_highlight_rules\").c_cppHighlightRules,s=e(\"./matching_brace_outdent\").MatchingBraceOutdent,a=(e(\"../range\").Range,e(\"./behaviour/cstyle\").CstyleBehaviour),c=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=o,this.$outdent=new s,this.$behaviour=new a,this.foldingRules=new c};i.inherits(l,r),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var i=this.$getIndent(t),r=this.getTokenizer().getLineTokens(t,e),o=r.tokens,s=r.state;if(o.length&&\"comment\"==o[o.length-1].type)return i;if(\"start\"==e)(a=t.match(/^.*[\\{\\(\\[]\\s*$/))&&(i+=n);else if(\"doc-start\"==e){if(\"start\"==s)return\"\";var a;(a=t.match(/^\\s*(\\/?)\\*/))&&(a[1]&&(i+=\" \"),i+=\"* \")}return i},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/c_cpp\"}.call(l.prototype),t.Mode=l})),ace.define(\"ace/mode/glsl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/c_cpp_highlight_rules\"],(function(e,t,n){\"use strict\";var i=e(\"../lib/oop\"),r=e(\"./c_cpp_highlight_rules\").c_cppHighlightRules,o=function(){var e=this.createKeywordMapper({\"variable.language\":\"this\",keyword:\"layout|attribute|const|uniform|varying|break|continue|do|for|while|if|else|in|out|inout|float|int|void|bool|true|false|lowp|mediump|highp|precision|invariant|discard|return|mat2|mat3|mat4|vec2|vec3|vec4|ivec2|ivec3|ivec4|bvec2|bvec3|bvec4|sampler2D|samplerCube|struct\",\"constant.language\":\"radians|degrees|sin|cos|tan|asin|acos|atan|pow|exp|log|exp2|log2|sqrt|inversesqrt|abs|sign|floor|ceil|fract|mod|min|max|clamp|mix|step|smoothstep|length|distance|dot|cross|normalize|faceforward|reflect|refract|matrixCompMult|lessThan|lessThanEqual|greaterThan|greaterThanEqual|equal|notEqual|any|all|not|dFdx|dFdy|fwidth|texture2D|texture2DProj|texture2DLod|texture2DProjLod|textureCube|textureCubeLod|gl_MaxVertexAttribs|gl_MaxVertexUniformVectors|gl_MaxVaryingVectors|gl_MaxVertexTextureImageUnits|gl_MaxCombinedTextureImageUnits|gl_MaxTextureImageUnits|gl_MaxFragmentUniformVectors|gl_MaxDrawBuffers|gl_DepthRangeParameters|gl_DepthRange|gl_Position|gl_PointSize|gl_FragCoord|gl_FrontFacing|gl_PointCoord|gl_FragColor|gl_FragData\"},\"identifier\");this.$rules=(new r).$rules,this.$rules.start.forEach((function(t){\"function\"==typeof t.token&&(t.token=e)}))};i.inherits(o,r),t.glslHighlightRules=o})),ace.define(\"ace/mode/glsl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/c_cpp\",\"ace/mode/glsl_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],(function(e,t,n){\"use strict\";var i=e(\"../lib/oop\"),r=e(\"./c_cpp\").Mode,o=e(\"./glsl_highlight_rules\").glslHighlightRules,s=e(\"./matching_brace_outdent\").MatchingBraceOutdent,a=(e(\"../range\").Range,e(\"./behaviour/cstyle\").CstyleBehaviour),c=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=o,this.$outdent=new s,this.$behaviour=new a,this.foldingRules=new c};i.inherits(l,r),function(){this.$id=\"ace/mode/glsl\"}.call(l.prototype),t.Mode=l})),ace.require([\"ace/mode/glsl\"],(function(t){e&&(e.exports=t)}))}).call(this,n(0)(e))},function(e,t,n){(function(e){ace.define(\"ace/theme/monokai\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],(function(e,t,n){t.isDark=!0,t.cssClass=\"ace-monokai\",t.cssText=\".ace-monokai .ace_gutter {background: #2F3129;color: #8F908A}.ace-monokai .ace_print-margin {width: 1px;background: #555651}.ace-monokai {background-color: #272822;color: #F8F8F2}.ace-monokai .ace_cursor {color: #F8F8F0}.ace-monokai .ace_marker-layer .ace_selection {background: #49483E}.ace-monokai.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #272822;}.ace-monokai .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-monokai .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #49483E}.ace-monokai .ace_marker-layer .ace_active-line {background: #202020}.ace-monokai .ace_gutter-active-line {background-color: #272727}.ace-monokai .ace_marker-layer .ace_selected-word {border: 1px solid #49483E}.ace-monokai .ace_invisible {color: #52524d}.ace-monokai .ace_entity.ace_name.ace_tag,.ace-monokai .ace_keyword,.ace-monokai .ace_meta.ace_tag,.ace-monokai .ace_storage {color: #F92672}.ace-monokai .ace_punctuation,.ace-monokai .ace_punctuation.ace_tag {color: #fff}.ace-monokai .ace_constant.ace_character,.ace-monokai .ace_constant.ace_language,.ace-monokai .ace_constant.ace_numeric,.ace-monokai .ace_constant.ace_other {color: #AE81FF}.ace-monokai .ace_invalid {color: #F8F8F0;background-color: #F92672}.ace-monokai .ace_invalid.ace_deprecated {color: #F8F8F0;background-color: #AE81FF}.ace-monokai .ace_support.ace_constant,.ace-monokai .ace_support.ace_function {color: #66D9EF}.ace-monokai .ace_fold {background-color: #A6E22E;border-color: #F8F8F2}.ace-monokai .ace_storage.ace_type,.ace-monokai .ace_support.ace_class,.ace-monokai .ace_support.ace_type {font-style: italic;color: #66D9EF}.ace-monokai .ace_entity.ace_name.ace_function,.ace-monokai .ace_entity.ace_other,.ace-monokai .ace_entity.ace_other.ace_attribute-name,.ace-monokai .ace_variable {color: #A6E22E}.ace-monokai .ace_variable.ace_parameter {font-style: italic;color: #FD971F}.ace-monokai .ace_string {color: #E6DB74}.ace-monokai .ace_comment {color: #75715E}.ace-monokai .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ0FD0ZXBzd/wPAAjVAoxeSgNeAAAAAElFTkSuQmCC) right repeat-y}\",e(\"../lib/dom\").importCssString(t.cssText,t.cssClass)})),ace.require([\"ace/theme/monokai\"],(function(t){e&&(e.exports=t)}))}).call(this,n(0)(e))},function(e,t,n){var i=n(1),r=n(9);\"string\"==typeof(r=r.__esModule?r.default:r)&&(r=[[e.i,r,\"\"]]);var o={insert:(\"html\",\"html\"),singleton:!1},s=(i(r,o),r.locals?r.locals:{});e.exports=s},function(e,t,n){(t=n(2)(!1)).push([e.i,\".ace-monokai {\\r\\n color: #f9f9f9;\\r\\n font-size: 14px;\\r\\n}\\r\\n\\r\\n.ace-monokai .ace_entity.ace_name.ace_tag,\\r\\n.ace-monokai .ace_keyword,\\r\\n.ace-monokai .ace_meta.ace_tag,\\r\\n.ace-monokai .ace_storage {\\r\\n color: #F0640D\\r\\n}\\r\\n\\r\\n.ace-monokai .ace_constant.ace_character,\\r\\n.ace-monokai .ace_constant.ace_other {\\r\\n color: #5db0d7;\\r\\n}\\r\\n\\r\\n.ace-monokai .ace_marker-layer .ace_selection {\\r\\n background: #a6e22e\\r\\n}\\r\\n\\r\\n.ace-monokai .ace_marker-layer .ace_bracket {\\r\\n margin: -1px 0 0 -1px;\\r\\n border: 1px solid #a6e22e;\\r\\n}\\r\\n\\r\\n.ace-monokai .ace_marker-layer .ace_active-line {\\r\\n background: #2c2c2c\\r\\n}\\r\\n.ace-monokai .ace_gutter-active-line {\\r\\n background-color: #2c2c2c\\r\\n}\\r\\n.ace-monokai .ace_marker-layer .ace_selected-word {\\r\\n border: 1px solid #a6e22e\\r\\n}\\r\\n\\r\\n.ace-monokai .ace_constant.ace_language {\\r\\n color: #e6db74\\r\\n}\\r\\n.ace-monokai .ace_constant.ace_numeric {\\r\\n color: #ae81ff\\r\\n}\\r\\n\\r\\n.ace-monokai .ace_gutter {\\r\\n background: #222;\\r\\n color: #8F908A;\\r\\n}\",\"\"]),e.exports=t},function(e,t,n){(function(e){ace.define(\"ace/ext/searchbox\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/keyboard/hash_handler\",\"ace/lib/keys\"],(function(e,t,n){\"use strict\";var i=e(\"../lib/dom\"),r=e(\"../lib/lang\"),o=e(\"../lib/event\"),s='.ace_search {background-color: #ddd;color: #666;border: 1px solid #cbcbcb;border-top: 0 none;overflow: hidden;margin: 0;padding: 4px 6px 0 4px;position: absolute;top: 0;z-index: 99;white-space: normal;}.ace_search.left {border-left: 0 none;border-radius: 0px 0px 5px 0px;left: 0;}.ace_search.right {border-radius: 0px 0px 0px 5px;border-right: 0 none;right: 0;}.ace_search_form, .ace_replace_form {margin: 0 20px 4px 0;overflow: hidden;line-height: 1.9;}.ace_replace_form {margin-right: 0;}.ace_search_form.ace_nomatch {outline: 1px solid red;}.ace_search_field {border-radius: 3px 0 0 3px;background-color: white;color: black;border: 1px solid #cbcbcb;border-right: 0 none;outline: 0;padding: 0;font-size: inherit;margin: 0;line-height: inherit;padding: 0 6px;min-width: 17em;vertical-align: top;min-height: 1.8em;box-sizing: content-box;}.ace_searchbtn {border: 1px solid #cbcbcb;line-height: inherit;display: inline-block;padding: 0 6px;background: #fff;border-right: 0 none;border-left: 1px solid #dcdcdc;cursor: pointer;margin: 0;position: relative;color: #666;}.ace_searchbtn:last-child {border-radius: 0 3px 3px 0;border-right: 1px solid #cbcbcb;}.ace_searchbtn:disabled {background: none;cursor: default;}.ace_searchbtn:hover {background-color: #eef1f6;}.ace_searchbtn.prev, .ace_searchbtn.next {padding: 0px 0.7em}.ace_searchbtn.prev:after, .ace_searchbtn.next:after {content: \"\";border: solid 2px #888;width: 0.5em;height: 0.5em;border-width: 2px 0 0 2px;display:inline-block;transform: rotate(-45deg);}.ace_searchbtn.next:after {border-width: 0 2px 2px 0 ;}.ace_searchbtn_close {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;border-radius: 50%;border: 0 none;color: #656565;cursor: pointer;font: 16px/16px Arial;padding: 0;height: 14px;width: 14px;top: 9px;right: 7px;position: absolute;}.ace_searchbtn_close:hover {background-color: #656565;background-position: 50% 100%;color: white;}.ace_button {margin-left: 2px;cursor: pointer;-webkit-user-select: none;-moz-user-select: none;-o-user-select: none;-ms-user-select: none;user-select: none;overflow: hidden;opacity: 0.7;border: 1px solid rgba(100,100,100,0.23);padding: 1px;box-sizing: border-box!important;color: black;}.ace_button:hover {background-color: #eee;opacity:1;}.ace_button:active {background-color: #ddd;}.ace_button.checked {border-color: #3399ff;opacity:1;}.ace_search_options{margin-bottom: 3px;text-align: right;-webkit-user-select: none;-moz-user-select: none;-o-user-select: none;-ms-user-select: none;user-select: none;clear: both;}.ace_search_counter {float: left;font-family: arial;padding: 0 8px;}',a=e(\"../keyboard/hash_handler\").HashHandler,c=e(\"../lib/keys\");i.importCssString(s,\"ace_searchbox\");var l=function(e,t,n){var r=i.createElement(\"div\");i.buildDom([\"div\",{class:\"ace_search right\"},[\"span\",{action:\"hide\",class:\"ace_searchbtn_close\"}],[\"div\",{class:\"ace_search_form\"},[\"input\",{class:\"ace_search_field\",placeholder:\"Search for\",spellcheck:\"false\"}],[\"span\",{action:\"findPrev\",class:\"ace_searchbtn prev\"},\"​\"],[\"span\",{action:\"findNext\",class:\"ace_searchbtn next\"},\"​\"],[\"span\",{action:\"findAll\",class:\"ace_searchbtn\",title:\"Alt-Enter\"},\"All\"]],[\"div\",{class:\"ace_replace_form\"},[\"input\",{class:\"ace_search_field\",placeholder:\"Replace with\",spellcheck:\"false\"}],[\"span\",{action:\"replaceAndFindNext\",class:\"ace_searchbtn\"},\"Replace\"],[\"span\",{action:\"replaceAll\",class:\"ace_searchbtn\"},\"All\"]],[\"div\",{class:\"ace_search_options\"},[\"span\",{action:\"toggleReplace\",class:\"ace_button\",title:\"Toggle Replace mode\",style:\"float:left;margin-top:-2px;padding:0 5px;\"},\"+\"],[\"span\",{class:\"ace_search_counter\"}],[\"span\",{action:\"toggleRegexpMode\",class:\"ace_button\",title:\"RegExp Search\"},\".*\"],[\"span\",{action:\"toggleCaseSensitive\",class:\"ace_button\",title:\"CaseSensitive Search\"},\"Aa\"],[\"span\",{action:\"toggleWholeWords\",class:\"ace_button\",title:\"Whole Word Search\"},\"\\\\b\"],[\"span\",{action:\"searchInSelection\",class:\"ace_button\",title:\"Search In Selection\"},\"S\"]]],r),this.element=r.firstChild,this.setSession=this.setSession.bind(this),this.$init(),this.setEditor(e),i.importCssString(s,\"ace_searchbox\",e.container)};(function(){this.setEditor=function(e){e.searchBox=this,e.renderer.scroller.appendChild(this.element),this.editor=e},this.setSession=function(e){this.searchRange=null,this.$syncOptions(!0)},this.$initElements=function(e){this.searchBox=e.querySelector(\".ace_search_form\"),this.replaceBox=e.querySelector(\".ace_replace_form\"),this.searchOption=e.querySelector(\"[action=searchInSelection]\"),this.replaceOption=e.querySelector(\"[action=toggleReplace]\"),this.regExpOption=e.querySelector(\"[action=toggleRegexpMode]\"),this.caseSensitiveOption=e.querySelector(\"[action=toggleCaseSensitive]\"),this.wholeWordOption=e.querySelector(\"[action=toggleWholeWords]\"),this.searchInput=this.searchBox.querySelector(\".ace_search_field\"),this.replaceInput=this.replaceBox.querySelector(\".ace_search_field\"),this.searchCounter=e.querySelector(\".ace_search_counter\")},this.$init=function(){var e=this.element;this.$initElements(e);var t=this;o.addListener(e,\"mousedown\",(function(e){setTimeout((function(){t.activeInput.focus()}),0),o.stopPropagation(e)})),o.addListener(e,\"click\",(function(e){var n=(e.target||e.srcElement).getAttribute(\"action\");n&&t[n]?t[n]():t.$searchBarKb.commands[n]&&t.$searchBarKb.commands[n].exec(t),o.stopPropagation(e)})),o.addCommandKeyListener(e,(function(e,n,i){var r=c.keyCodeToString(i),s=t.$searchBarKb.findKeyCommand(n,r);s&&s.exec&&(s.exec(t),o.stopEvent(e))})),this.$onChange=r.delayedCall((function(){t.find(!1,!1)})),o.addListener(this.searchInput,\"input\",(function(){t.$onChange.schedule(20)})),o.addListener(this.searchInput,\"focus\",(function(){t.activeInput=t.searchInput,t.searchInput.value&&t.highlight()})),o.addListener(this.replaceInput,\"focus\",(function(){t.activeInput=t.replaceInput,t.searchInput.value&&t.highlight()}))},this.$closeSearchBarKb=new a([{bindKey:\"Esc\",name:\"closeSearchBar\",exec:function(e){e.searchBox.hide()}}]),this.$searchBarKb=new a,this.$searchBarKb.bindKeys({\"Ctrl-f|Command-f\":function(e){var t=e.isReplace=!e.isReplace;e.replaceBox.style.display=t?\"\":\"none\",e.replaceOption.checked=!1,e.$syncOptions(),e.searchInput.focus()},\"Ctrl-H|Command-Option-F\":function(e){e.editor.getReadOnly()||(e.replaceOption.checked=!0,e.$syncOptions(),e.replaceInput.focus())},\"Ctrl-G|Command-G\":function(e){e.findNext()},\"Ctrl-Shift-G|Command-Shift-G\":function(e){e.findPrev()},esc:function(e){setTimeout((function(){e.hide()}))},Return:function(e){e.activeInput==e.replaceInput&&e.replace(),e.findNext()},\"Shift-Return\":function(e){e.activeInput==e.replaceInput&&e.replace(),e.findPrev()},\"Alt-Return\":function(e){e.activeInput==e.replaceInput&&e.replaceAll(),e.findAll()},Tab:function(e){(e.activeInput==e.replaceInput?e.searchInput:e.replaceInput).focus()}}),this.$searchBarKb.addCommands([{name:\"toggleRegexpMode\",bindKey:{win:\"Alt-R|Alt-/\",mac:\"Ctrl-Alt-R|Ctrl-Alt-/\"},exec:function(e){e.regExpOption.checked=!e.regExpOption.checked,e.$syncOptions()}},{name:\"toggleCaseSensitive\",bindKey:{win:\"Alt-C|Alt-I\",mac:\"Ctrl-Alt-R|Ctrl-Alt-I\"},exec:function(e){e.caseSensitiveOption.checked=!e.caseSensitiveOption.checked,e.$syncOptions()}},{name:\"toggleWholeWords\",bindKey:{win:\"Alt-B|Alt-W\",mac:\"Ctrl-Alt-B|Ctrl-Alt-W\"},exec:function(e){e.wholeWordOption.checked=!e.wholeWordOption.checked,e.$syncOptions()}},{name:\"toggleReplace\",exec:function(e){e.replaceOption.checked=!e.replaceOption.checked,e.$syncOptions()}},{name:\"searchInSelection\",exec:function(e){e.searchOption.checked=!e.searchRange,e.setSearchRange(e.searchOption.checked&&e.editor.getSelectionRange()),e.$syncOptions()}}]),this.setSearchRange=function(e){this.searchRange=e,e?this.searchRangeMarker=this.editor.session.addMarker(e,\"ace_active-line\"):this.searchRangeMarker&&(this.editor.session.removeMarker(this.searchRangeMarker),this.searchRangeMarker=null)},this.$syncOptions=function(e){i.setCssClass(this.replaceOption,\"checked\",this.searchRange),i.setCssClass(this.searchOption,\"checked\",this.searchOption.checked),this.replaceOption.textContent=this.replaceOption.checked?\"-\":\"+\",i.setCssClass(this.regExpOption,\"checked\",this.regExpOption.checked),i.setCssClass(this.wholeWordOption,\"checked\",this.wholeWordOption.checked),i.setCssClass(this.caseSensitiveOption,\"checked\",this.caseSensitiveOption.checked);var t=this.editor.getReadOnly();this.replaceOption.style.display=t?\"none\":\"\",this.replaceBox.style.display=this.replaceOption.checked&&!t?\"\":\"none\",this.find(!1,!1,e)},this.highlight=function(e){this.editor.session.highlight(e||this.editor.$search.$options.re),this.editor.renderer.updateBackMarkers()},this.find=function(e,t,n){var r=!this.editor.find(this.searchInput.value,{skipCurrent:e,backwards:t,wrap:!0,regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked,preventScroll:n,range:this.searchRange})&&this.searchInput.value;i.setCssClass(this.searchBox,\"ace_nomatch\",r),this.editor._emit(\"findSearchBox\",{match:!r}),this.highlight(),this.updateCounter()},this.updateCounter=function(){var e=this.editor,t=e.$search.$options.re,n=0,i=0;if(t){var r=this.searchRange?e.session.getTextRange(this.searchRange):e.getValue(),o=e.session.doc.positionToIndex(e.selection.anchor);this.searchRange&&(o-=e.session.doc.positionToIndex(this.searchRange.start));for(var s,a=t.lastIndex=0;(s=t.exec(r))&&(n++,(a=s.index)<=o&&i++,!(n>999))&&(s[0]||(t.lastIndex=a+=1,!(a>=r.length))););}this.searchCounter.textContent=i+\" of \"+(n>999?\"999+\":n)},this.findNext=function(){this.find(!0,!1)},this.findPrev=function(){this.find(!0,!0)},this.findAll=function(){var e=!this.editor.findAll(this.searchInput.value,{regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked})&&this.searchInput.value;i.setCssClass(this.searchBox,\"ace_nomatch\",e),this.editor._emit(\"findSearchBox\",{match:!e}),this.highlight(),this.hide()},this.replace=function(){this.editor.getReadOnly()||this.editor.replace(this.replaceInput.value)},this.replaceAndFindNext=function(){this.editor.getReadOnly()||(this.editor.replace(this.replaceInput.value),this.findNext())},this.replaceAll=function(){this.editor.getReadOnly()||this.editor.replaceAll(this.replaceInput.value)},this.hide=function(){this.active=!1,this.setSearchRange(null),this.editor.off(\"changeSession\",this.setSession),this.element.style.display=\"none\",this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb),this.editor.focus()},this.show=function(e,t){this.active=!0,this.editor.on(\"changeSession\",this.setSession),this.element.style.display=\"\",this.replaceOption.checked=t,e&&(this.searchInput.value=e),this.searchInput.focus(),this.searchInput.select(),this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb),this.$syncOptions(!0)},this.isFocused=function(){var e=document.activeElement;return e==this.searchInput||e==this.replaceInput}}).call(l.prototype),t.SearchBox=l,t.Search=function(e,t){(e.searchBox||new l(e)).show(e.session.getTextRange(),t)}})),ace.require([\"ace/ext/searchbox\"],(function(t){e&&(e.exports=t)}))}).call(this,n(0)(e))},function(e,t,n){var i=n(1),r=n(12);\"string\"==typeof(r=r.__esModule?r.default:r)&&(r=[[e.i,r,\"\"]]);var o={insert:(\"html\",\"html\"),singleton:!1},s=(i(r,o),r.locals?r.locals:{});e.exports=s},function(e,t,n){(t=n(2)(!1)).push([e.i,\"@import url(https://fonts.googleapis.com/css?family=Montserrat:300,400);\"]),t.push([e.i,\".captureMenuComponent{position:absolute;padding:7px;z-index:99999;top:10px;left:50%;margin-left:-209px;height:40px;width:400px;border:2px solid #222;background-color:#2c2c2c;visibility:hidden;display:none;color:#f9f9f9;font-family:Consolas, monaco, monospace;font-size:14px;font-weight:500}.captureMenuComponent.active{visibility:visible;display:block}.captureMenuComponent,.captureMenuComponent:after,.captureMenuComponent:before{box-sizing:content-box}.captureMenuLogComponent{position:absolute;padding:7px;z-index:80000;top:66px;left:50%;margin-left:-209px;height:40px;width:400px;border:2px solid #222;background-color:#2c2c2c;visibility:hidden;display:none;color:#f9f9f9;font-family:Consolas, monaco, monospace;font-size:14px;font-weight:500}.captureMenuLogComponent.active{visibility:visible;display:block}.captureMenuLogComponent,.captureMenuLogComponent:after,.captureMenuLogComponent:before{box-sizing:content-box}.captureMenuLogComponent span.error{color:red}.canvasListComponent{float:left;width:50%;height:100%}.canvasListComponent [commandName=onCanvasSelection]{vertical-align:center;line-height:40px;white-space:nowrap;text-overflow:ellipsis;width:190px;display:inline-block;overflow:hidden;margin:0px 5px}.canvasListComponent [commandName=onCanvasSelection]:hover{color:#c9c9c9;cursor:pointer;transition:color .3s;-webkit-transition:color .3s;-moz-transition:color .3s}.canvasListComponent ul{margin:0px;padding:7px;list-style:none;position:absolute;top:54px;left:-2px;width:400px;border:2px solid #222;background-color:#2c2c2c}.canvasListComponent ul li{margin:5px}.canvasListComponent ul li:hover{color:#c9c9c9;cursor:pointer;transition:color .3s;-webkit-transition:color .3s;-moz-transition:color .3s}.captureMenuActionsComponent{float:left;width:30%;height:100%;margin-top:7.5px}.captureMenuActionsComponent div{float:left}.captureMenuActionsComponent [commandName=onCaptureRequested]{border-radius:50%;background:#2c2c2c;border:2px solid red;width:21px;height:21px}.captureMenuActionsComponent [commandName=onCaptureRequested]:hover{background:red;cursor:pointer;transition:background .3s;-webkit-transition:background .3s;-moz-transition:background .3s}.captureMenuActionsComponent [commandName=onPlayRequested],.captureMenuActionsComponent [commandName=onPlayNextFrameRequested]{width:21px;height:21px;border:2px solid #f9f9f9;border-radius:50%;margin-left:9px}.captureMenuActionsComponent [commandName=onPlayRequested]:before,.captureMenuActionsComponent [commandName=onPlayNextFrameRequested]:before{content:'';position:absolute;display:inline-block;margin-top:6px;margin-left:4px;width:7px;height:7px;border-top:2px solid #f9f9f9;border-right:2px solid #f9f9f9;background-color:#f9f9f9;-moz-transform:rotate(45deg);-webkit-transform:rotate(45deg);transform:rotate(45deg);z-index:-20}.captureMenuActionsComponent [commandName=onPlayRequested]:after,.captureMenuActionsComponent [commandName=onPlayNextFrameRequested]:after{content:'';position:absolute;display:inline-block;width:8px;height:20px;background-color:#2c2c2c;z-index:-10}.captureMenuActionsComponent [commandName=onPlayRequested]:hover,.captureMenuActionsComponent :hover[commandName=onPlayNextFrameRequested]{cursor:pointer;border:2px solid #c9c9c9;transition:border .3s;-webkit-transition:border .3s;-moz-transition:border .3s}.captureMenuActionsComponent [commandName=onPauseRequested]{width:21px;height:21px;border:2px solid #f9f9f9;border-radius:50%;margin-left:9px}.captureMenuActionsComponent [commandName=onPauseRequested]:before{content:'';position:absolute;display:inline-block;width:2px;height:13px;margin-left:12px;margin-top:4px;background-color:#f9f9f9}.captureMenuActionsComponent [commandName=onPauseRequested]:after{content:'';position:absolute;display:inline-block;width:2px;height:13px;margin-left:7px;margin-top:4px;background-color:#f9f9f9}.captureMenuActionsComponent [commandName=onPauseRequested]:hover{cursor:pointer;border:2px solid #c9c9c9;transition:border .3s;-webkit-transition:border .3s;-moz-transition:border .3s}.captureMenuActionsComponent [commandName=onPlayNextFrameRequested]:before{background-color:#2c2c2c}.fpsCounterComponent{float:left;width:20%;vertical-align:center;line-height:40px;white-space:nowrap}\\n\",\"\"]),e.exports=t},function(e,t,n){var i=n(1),r=n(14);\"string\"==typeof(r=r.__esModule?r.default:r)&&(r=[[e.i,r,\"\"]]);var o={insert:(\"html\",\"html\"),singleton:!1},s=(i(r,o),r.locals?r.locals:{});e.exports=s},function(e,t,n){(t=n(2)(!1)).push([e.i,\"@import url(https://fonts.googleapis.com/css?family=Montserrat:300,400);\"]),t.push([e.i,\".resultViewComponent{position:absolute;z-index:99999;border:1px solid #000;top:0;left:0;bottom:0;right:0;background-color:#222;opacity:1;visibility:hidden;display:none;color:#f9f9f9;font-family:Consolas, monaco, monospace;font-size:14px;font-weight:500}.resultViewComponent.active{visibility:visible;display:block}.resultViewComponent,.resultViewComponent:after,.resultViewComponent:before{box-sizing:content-box}.resultViewMenuComponent{font-family:'Montserrat', sans-serif;font-size:13px;font-weight:300;line-height:40px;flex:1 100%;display:flex;flex-flow:row wrap;height:42px;outline:0 none;border-bottom:2px solid #222;box-sizing:border-box;list-style:none;margin:0;background:#2c2c2c;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-flow:row wrap;flex-flow:row wrap;justify-content:flex-end}.resultViewMenuComponent .resultViewMenuOpen{display:none;visibility:hidden}.resultViewMenuComponent a{outline:0 none;text-decoration:none;display:block;padding:0 20px 0 20px;color:#ccc;background:#2c2c2c;box-sizing:border-box;height:100%}.resultViewMenuComponent a.active{background:#222;color:white;font-weight:400;border-bottom:2px solid #F0640D}.resultViewMenuComponent a:hover{background:#222;color:#c9c9c9;cursor:pointer;transition:color .3s;-webkit-transition:color .3s;-moz-transition:color .3s}.resultViewMenuComponent a:hover.active{color:#F0640D;transition:color 0;-webkit-transition:color 0;-moz-transition:color 0}.resultViewMenuComponent a.clearSearch{padding:0px;margin-left:-30px;margin-right:20px;z-index:9000;color:#f9f9f9}.resultViewMenuComponent a.clearSearch:hover{background:#2c2c2c;color:#F0640D}@media all and (max-width: 1024px){.resultViewMenuComponent{padding:0px;position:absolute;overflow-y:visible;top:0px;left:0px;right:0px;bottom:0px;z-index:999999;display:block}.resultViewMenuComponent .resultViewMenuOpen{display:block;visibility:visible}.resultViewMenuComponent li:not(.resultViewMenuSmall){display:none;visibility:hidden}.resultViewMenuComponent li{background:#2c2c2c}.resultViewMenuComponent li.searchContainer{background:#464646}.resultViewMenuComponent a.active{background:#2c2c2c}}.resultViewMenuComponent input{border:0;font-family:'Montserrat', sans-serif;font-weight:300;padding:0 20px 0 20px;background:#464646;color:#f9f9f9;height:40px;position:relative;top:-1px;box-sizing:border-box}.resultViewMenuComponent input:focus{border:0;outline:0 none}.resultViewMenuComponent .clearSearch{position:relative;background:transparent;display:inline;padding:0px;margin-left:-30px;z-index:9000;color:#F0640D}.resultViewMenuComponent .clearSearch:hover{background:transparent !important}.resultViewMenuComponent ::-webkit-input-placeholder{color:#ccc}.resultViewMenuComponent :-moz-placeholder{color:#ccc}.resultViewMenuComponent ::-moz-placeholder{color:#ccc}.resultViewMenuComponent :-ms-input-placeholder{color:#ccc}.resultViewContentComponent{position:absolute;top:40px;left:0;bottom:0;right:0}.informationColumnLeftComponent{position:absolute;top:0;left:0;bottom:0;right:50%;overflow:auto;overflow-x:hidden;overflow-y:visible}.informationColumnRightComponent{position:absolute;top:0;left:50%;bottom:0;right:0;overflow:auto;overflow-x:hidden;overflow-y:visible}.captureListComponent{position:absolute;top:40px;left:0;bottom:0;right:0;background:#222;z-index:9000;display:none;visibility:hidden;overflow-y:visible;overflow-x:hidden}.captureListComponent.active{display:block;visibility:visible}.captureListComponent .openCaptureFile{border:1px dashed #f9f9f9;display:block;margin:5px;padding:5px;text-align:center;font-style:italic}.captureListComponent .openCaptureFile span{line-height:100%;vertical-align:middle}.captureListComponent ul{margin:0px;padding:0px;list-style:none;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-flow:row wrap;flex-flow:row wrap;justify-content:flex-start}.captureListComponent ul li{margin:5px;border:1px solid #606060}.captureListComponent ul li img{width:295px;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, #c9c9c9), color-stop(0.25, transparent)),-webkit-gradient(linear, 0 0, 100% 100%, color-stop(0.25, #c9c9c9), color-stop(0.25, transparent)),-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.75, transparent), color-stop(0.75, #c9c9c9)),-webkit-gradient(linear, 0 0, 100% 100%, color-stop(0.75, transparent), color-stop(0.75, #c9c9c9));background-image:-moz-linear-gradient(45deg, #d9d9d9 25%, transparent 25%),-moz-linear-gradient(-45deg, #d9d9d9 25%, transparent 25%),-moz-linear-gradient(45deg, transparent 75%, #d9d9d9 75%),-moz-linear-gradient(-45deg, transparent 75%, #d9d9d9 75%);-webkit-background-size:50px 51px;-moz-background-size:50px 50px;background-size:50px 50px;background-position:0 0, 25px 0, 25px -25px, 0px 25px;display:block}.captureListComponent ul li span{display:block;text-align:center;border:5px solid #222}.captureListComponent ul li span .captureListItemSave{color:#f9f9f9;font-size:16px;margin-left:10px;position:relative;padding:3px 8px 3px 32px}.captureListComponent ul li span .captureListItemSave:before,.captureListComponent ul li span .captureListItemSave:after{box-sizing:border-box;content:\\\"\\\";position:absolute}.captureListComponent ul li span .captureListItemSave:before{background:#d9d9d9;border-color:#f9f9f9;border-style:solid;border-width:7px 2px 1px;border-radius:1px;height:16px;left:8px;top:5px;width:16px}.captureListComponent ul li span .captureListItemSave:after{background:#f9f9f9;border-color:#d9d9d9;border-style:solid;border-width:1px 1px 1px 4px;height:5px;left:13px;top:5px;width:7px}.captureListComponent ul li:hover{cursor:pointer}.captureListComponent ul li.active span{background:#F0640D;border:5px solid #F0640D}.captureListComponent ul li.active span .captureListItemSave:before{background:#F0640D}.captureListComponent ul li.active span .captureListItemSave:after{border-color:#F0640D}.visualStateListComponent{position:absolute;top:0;left:0;bottom:0;padding:5px;right:80%;overflow-y:visible;overflow-x:hidden}.visualStateListComponent ul{margin:0px;padding:0px;list-style:none}.visualStateListComponent ul li{margin:20px 15px 0px 15px;border:1px solid #606060}.visualStateListComponent ul li img{display:block;padding:0px;box-sizing:border-box;max-height:600px;width:100%;margin:0 auto;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, #c9c9c9), color-stop(0.25, transparent)),-webkit-gradient(linear, 0 0, 100% 100%, color-stop(0.25, #c9c9c9), color-stop(0.25, transparent)),-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.75, transparent), color-stop(0.75, #c9c9c9)),-webkit-gradient(linear, 0 0, 100% 100%, color-stop(0.75, transparent), color-stop(0.75, #c9c9c9));background-image:-moz-linear-gradient(45deg, #d9d9d9 25%, transparent 25%),-moz-linear-gradient(-45deg, #d9d9d9 25%, transparent 25%),-moz-linear-gradient(45deg, transparent 75%, #d9d9d9 75%),-moz-linear-gradient(-45deg, transparent 75%, #d9d9d9 75%);-webkit-background-size:50px 51px;-moz-background-size:50px 50px;background-size:50px 50px;background-position:0 0, 25px 0, 25px -25px, 0px 25px}.visualStateListComponent ul li:hover{cursor:pointer}.visualStateListComponent ul li span{border:5px solid #222;background:#222;box-sizing:border-box;display:inline-block;width:100%;margin:0px;padding:5px;word-wrap:break-word}.visualStateListComponent ul li.active{border:2px solid #F0640D}.commandListComponent{position:absolute;top:0;left:20%;right:40%;bottom:0;color:#d3d3d3}.commandListComponent ul{margin:0px;padding:0px;list-style:none;overflow-y:visible;overflow-x:hidden;height:100%}.commandListComponent ul li{padding:8px}.commandListComponent ul li span{word-wrap:break-word;line-height:22px}.commandListComponent ul li:hover{color:#f9f9f9;cursor:pointer;transition:color .3s;-webkit-transition:color .3s;-moz-transition:color .3s}.commandListComponent ul li:nth-child(even){background:#2c2c2c}.commandListComponent ul li:nth-child(odd){background:#222}.commandListComponent ul li .important{font-weight:800}.commandListComponent ul li .important.deprecated{color:red}.commandListComponent ul li .important.unused{color:yellow}.commandListComponent ul li .important.disabled{color:gray}.commandListComponent ul li .important.redundant{color:orange}.commandListComponent ul li .important.valid{color:greenyellow}.commandListComponent ul li .marker{font-size:16px;font-weight:900;color:greenyellow}.commandListComponent ul li.active{background:#f37628;color:#222}.commandListComponent ul li.drawCall{background:#5db0d7;color:#222}.commandListComponent ul li a{margin-left:5px;margin-right:5px;color:#5db0d7;background:#222;padding:5px;font-weight:900;display:inline-block}.commandDetailComponent{position:absolute;top:0;left:60%;right:0;bottom:0;overflow-y:visible;overflow-x:hidden}.jsonGroupComponent{display:block;margin:10px;padding:10px;padding-bottom:5px}.jsonGroupComponent .jsonGroupComponentTitle{display:block;font-size:16px;color:#5db0d7;border-bottom:1px solid #5db0d7;padding-bottom:5px;margin-bottom:5px;text-transform:capitalize}.jsonGroupComponent ul{margin:0px;padding:0px;list-style:none}.jsonGroupComponent ul li:nth-child(even){background:#222}.jsonGroupComponent ul li:nth-child(odd){background:#222}.jsonItemComponentKey{color:#F0640D}.jsonItemComponentValue{white-space:pre-wrap}.jsonItemImageHolder{width:50%;margin:auto}.jsonItemImageHolder .jsonItemImage{margin:5px;display:block;border:1px solid #606060;width:100%}.jsonItemImageHolder .jsonItemImage img{width:100%;display:block;margin:auto;max-width:256px;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, #c9c9c9), color-stop(0.25, transparent)),-webkit-gradient(linear, 0 0, 100% 100%, color-stop(0.25, #c9c9c9), color-stop(0.25, transparent)),-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.75, transparent), color-stop(0.75, #c9c9c9)),-webkit-gradient(linear, 0 0, 100% 100%, color-stop(0.75, transparent), color-stop(0.75, #c9c9c9));background-image:-moz-linear-gradient(45deg, #d9d9d9 25%, transparent 25%),-moz-linear-gradient(-45deg, #d9d9d9 25%, transparent 25%),-moz-linear-gradient(45deg, transparent 75%, #d9d9d9 75%),-moz-linear-gradient(-45deg, transparent 75%, #d9d9d9 75%);-webkit-background-size:50px 51px;-moz-background-size:50px 50px;background-size:50px 50px;background-position:0 0, 25px 0, 25px -25px, 0px 25px}.jsonItemImageHolder .jsonItemImage span{margin:0px;padding:5px;word-wrap:break-word;display:inline-block;width:100%;box-sizing:border-box}[commandName=onOpenSourceClicked]:hover{color:#f9f9f9;cursor:pointer;transition:color .3s;-webkit-transition:color .3s;-moz-transition:color .3s}.jsonVisualStateItemComponent{text-align:center;padding:10px}.jsonVisualStateItemComponent img{background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, #c9c9c9), color-stop(0.25, transparent)),-webkit-gradient(linear, 0 0, 100% 100%, color-stop(0.25, #c9c9c9), color-stop(0.25, transparent)),-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.75, transparent), color-stop(0.75, #c9c9c9)),-webkit-gradient(linear, 0 0, 100% 100%, color-stop(0.75, transparent), color-stop(0.75, #c9c9c9));background-image:-moz-linear-gradient(45deg, #d9d9d9 25%, transparent 25%),-moz-linear-gradient(-45deg, #d9d9d9 25%, transparent 25%),-moz-linear-gradient(45deg, transparent 75%, #d9d9d9 75%),-moz-linear-gradient(-45deg, transparent 75%, #d9d9d9 75%);-webkit-background-size:50px 51px;-moz-background-size:50px 50px;background-size:50px 50px;background-position:0 0, 25px 0, 25px -25px, 0px 25px;border:1px solid #606060;margin:5px;width:100%;max-width:512px;max-height:800px}.jsonVisualStateItemComponent span{display:block}.jsonContentComponent{position:absolute;top:0;left:0;right:0;bottom:0;padding:10px;overflow-y:visible;overflow-x:hidden}.jsonItemComponentValue{word-break:break-all;white-space:normal}.jsonSourceItemComponentOpen{font-weight:bold;color:#5db0d7;text-decoration:underline}.sourceCodeMenuComponentContainer{position:absolute;left:0;top:0;right:40%}.sourceCodeMenuComponent{font-family:'Montserrat', sans-serif;font-size:13px;font-weight:300;line-height:40px;flex:1 100%;display:flex;flex-flow:row wrap;height:42px;outline:0 none;border-bottom:2px solid #222;box-sizing:border-box;list-style:none;margin:0;background:#2c2c2c;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-flow:row wrap;flex-flow:row wrap;justify-content:flex-end}.sourceCodeMenuComponent .resultViewMenuOpen{display:none;visibility:hidden}.sourceCodeMenuComponent a{outline:0 none;text-decoration:none;display:block;padding:0 20px 0 20px;color:#ccc;background:#2c2c2c;box-sizing:border-box;height:100%}.sourceCodeMenuComponent a.active{background:#222;color:white;font-weight:400;border-bottom:2px solid #F0640D}.sourceCodeMenuComponent a:hover{background:#222;color:#c9c9c9;cursor:pointer;transition:color .3s;-webkit-transition:color .3s;-moz-transition:color .3s}.sourceCodeMenuComponent a:hover.active{color:#F0640D;transition:color 0;-webkit-transition:color 0;-moz-transition:color 0}.sourceCodeMenuComponent a.clearSearch{display:inline-block;padding:0px;margin-left:-30px;margin-right:20px;z-index:9000;color:#f9f9f9}.sourceCodeMenuComponent a.clearSearch:hover{background:#2c2c2c;color:#F0640D}.sourceCodeMenuComponent input{border:0;font-family:'Montserrat', sans-serif;font-weight:300;padding:0 20px 0 20px;background:#464646;color:#f9f9f9;height:100%;position:relative;top:-1px;box-sizing:border-box}.sourceCodeMenuComponent input:focus{border:0;outline:0 none}.sourceCodeMenuComponent .clearSearch{position:relative;background:transparent;display:inline;padding:0px;margin-left:-30px;z-index:9000;color:#F0640D}.sourceCodeMenuComponent .clearSearch:hover{background:transparent !important}.sourceCodeMenuComponent ::-webkit-input-placeholder{color:#ccc}.sourceCodeMenuComponent :-moz-placeholder{color:#ccc}.sourceCodeMenuComponent ::-moz-placeholder{color:#ccc}.sourceCodeMenuComponent :-ms-input-placeholder{color:#ccc}.sourceCodeComponent{position:absolute;top:42px;left:0;bottom:0;right:40%;background:#222;z-index:9000;overflow-x:visible;overflow:auto}.sourceCodeComponent .sourceCodeComponentTitle{font-size:16px;font-weight:800;line-height:50px;color:#F0640D;padding:1em;margin:.5em 0}\\n\",\"\"]),e.exports=t},function(e,t,n){\"use strict\";n.r(t),n.d(t,\"EmbeddedFrontend\",(function(){return Ai})),n.d(t,\"Spector\",(function(){return Ri}));var i,r=function(){function e(){}return e.isBuildableProgram=function(e){return!!e&&!!e[this.rebuildProgramFunctionName]},e.rebuildProgram=function(e,t,n,i,r){this.isBuildableProgram(e)&&e[this.rebuildProgramFunctionName](t,n,i,r)},e.rebuildProgramFunctionName=\"__SPECTOR_rebuildProgram\",e}();!function(e){e[e.noLog=0]=\"noLog\",e[e.error=1]=\"error\",e[e.warning=2]=\"warning\",e[e.info=3]=\"info\"}(i||(i={}));var o=function(){function e(){}return e.error=function(e){for(var t=[],n=1;n0&&console.error(e,t)},e.warn=function(e){for(var t=[],n=1;n1&&console.warn(e,t)},e.info=function(e){for(var t=[],n=1;n2&&console.log(e,t)},e.level=i.warning,e}(),s=function(){function e(){this.callbacks=[],this.counter=-1}return e.prototype.add=function(e,t){return this.counter++,t&&(e=e.bind(t)),this.callbacks[this.counter]=e,this.counter},e.prototype.remove=function(e){delete this.callbacks[e]},e.prototype.clear=function(){this.callbacks={}},e.prototype.trigger=function(e){for(var t in this.callbacks)this.callbacks.hasOwnProperty(t)&&this.callbacks[t](e)},e}(),a=function(){function e(){if(window.performance&&window.performance.now)this.nowFunction=this.dateBasedPerformanceNow.bind(this);else{var e=new Date;this.nowFunction=e.getTime.bind(e)}}return e.prototype.dateBasedPerformanceNow=function(){return performance.timing.navigationStart+performance.now()},Object.defineProperty(e,\"now\",{get:function(){return e.instance.nowFunction()},enumerable:!0,configurable:!0}),e.instance=new e,e}();var c,l=function(){function e(e){this.options=e}return e.prototype.appendAnalysis=function(e){e.analyses=e.analyses||[];var t=this.getAnalysis(e);e.analyses.push(t)},e.prototype.getAnalysis=function(e){var t={analyserName:this.analyserName};return this.appendToAnalysis(e,t),t},e}(),u=(c=function(e,t){return(c=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}c(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),h=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return u(t,e),Object.defineProperty(t.prototype,\"analyserName\",{get:function(){return t.analyserName},enumerable:!0,configurable:!0}),t.prototype.appendToAnalysis=function(e,t){if(e.commands){for(var n={},i=0,r=e.commands;i-1&&t.draw++}}},t.analyserName=\"CommandsSummary\",t}(l),f=function(){function e(){}return e.isWebGlConstant=function(e){return null!==v[e]&&void 0!==v[e]},e.stringifyWebGlConstant=function(e,t){if(0===e)return this.zeroMeaningByCommand[t]||\"0\";if(1===e)return this.oneMeaningByCommand[t]||\"1\";var n=v[e];return n?n.name:e+\"\"},e.DEPTH_BUFFER_BIT={name:\"DEPTH_BUFFER_BIT\",value:256,description:\"Passed to clear to clear the current depth buffer.\"},e.STENCIL_BUFFER_BIT={name:\"STENCIL_BUFFER_BIT\",value:1024,description:\"Passed to clear to clear the current stencil buffer.\"},e.COLOR_BUFFER_BIT={name:\"COLOR_BUFFER_BIT\",value:16384,description:\"Passed to clear to clear the current color buffer.\"},e.POINTS={name:\"POINTS\",value:0,description:\"Passed to drawElements or drawArrays to draw single points.\"},e.LINES={name:\"LINES\",value:1,description:\"Passed to drawElements or drawArrays to draw lines. Each vertex connects to the one after it.\"},e.LINE_LOOP={name:\"LINE_LOOP\",value:2,description:\"Passed to drawElements or drawArrays to draw lines. Each set of two vertices is treated as a separate line segment.\"},e.LINE_STRIP={name:\"LINE_STRIP\",value:3,description:\"Passed to drawElements or drawArrays to draw a connected group of line segments from the first vertex to the last.\"},e.TRIANGLES={name:\"TRIANGLES\",value:4,description:\"Passed to drawElements or drawArrays to draw triangles. Each set of three vertices creates a separate triangle.\"},e.TRIANGLE_STRIP={name:\"TRIANGLE_STRIP\",value:5,description:\"Passed to drawElements or drawArrays to draw a connected group of triangles.\"},e.TRIANGLE_FAN={name:\"TRIANGLE_FAN\",value:6,description:\"Passed to drawElements or drawArrays to draw a connected group of triangles. Each vertex connects to the previous and the first vertex in the fan.\"},e.ZERO={name:\"ZERO\",value:0,description:\"Passed to blendFunc or blendFuncSeparate to turn off a component.\"},e.ONE={name:\"ONE\",value:1,description:\"Passed to blendFunc or blendFuncSeparate to turn on a component.\"},e.SRC_COLOR={name:\"SRC_COLOR\",value:768,description:\"Passed to blendFunc or blendFuncSeparate to multiply a component by the source elements color.\"},e.ONE_MINUS_SRC_COLOR={name:\"ONE_MINUS_SRC_COLOR\",value:769,description:\"Passed to blendFunc or blendFuncSeparate to multiply a component by one minus the source elements color.\"},e.SRC_ALPHA={name:\"SRC_ALPHA\",value:770,description:\"Passed to blendFunc or blendFuncSeparate to multiply a component by the source's alpha.\"},e.ONE_MINUS_SRC_ALPHA={name:\"ONE_MINUS_SRC_ALPHA\",value:771,description:\"Passed to blendFunc or blendFuncSeparate to multiply a component by one minus the source's alpha.\"},e.DST_ALPHA={name:\"DST_ALPHA\",value:772,description:\"Passed to blendFunc or blendFuncSeparate to multiply a component by the destination's alpha.\"},e.ONE_MINUS_DST_ALPHA={name:\"ONE_MINUS_DST_ALPHA\",value:773,description:\"Passed to blendFunc or blendFuncSeparate to multiply a component by one minus the destination's alpha.\"},e.DST_COLOR={name:\"DST_COLOR\",value:774,description:\"Passed to blendFunc or blendFuncSeparate to multiply a component by the destination's color.\"},e.ONE_MINUS_DST_COLOR={name:\"ONE_MINUS_DST_COLOR\",value:775,description:\"Passed to blendFunc or blendFuncSeparate to multiply a component by one minus the destination's color.\"},e.SRC_ALPHA_SATURATE={name:\"SRC_ALPHA_SATURATE\",value:776,description:\"Passed to blendFunc or blendFuncSeparate to multiply a component by the minimum of source's alpha or one minus the destination's alpha.\"},e.CONSTANT_COLOR={name:\"CONSTANT_COLOR\",value:32769,description:\"Passed to blendFunc or blendFuncSeparate to specify a constant color blend function.\"},e.ONE_MINUS_CONSTANT_COLOR={name:\"ONE_MINUS_CONSTANT_COLOR\",value:32770,description:\"Passed to blendFunc or blendFuncSeparate to specify one minus a constant color blend function.\"},e.CONSTANT_ALPHA={name:\"CONSTANT_ALPHA\",value:32771,description:\"Passed to blendFunc or blendFuncSeparate to specify a constant alpha blend function.\"},e.ONE_MINUS_CONSTANT_ALPHA={name:\"ONE_MINUS_CONSTANT_ALPHA\",value:32772,description:\"Passed to blendFunc or blendFuncSeparate to specify one minus a constant alpha blend function.\"},e.FUNC_ADD={name:\"FUNC_ADD\",value:32774,description:\"Passed to blendEquation or blendEquationSeparate to set an addition blend function.\"},e.FUNC_SUBSTRACT={name:\"FUNC_SUBSTRACT\",value:32778,description:\"Passed to blendEquation or blendEquationSeparate to specify a subtraction blend function (source - destination).\"},e.FUNC_REVERSE_SUBTRACT={name:\"FUNC_REVERSE_SUBTRACT\",value:32779,description:\"Passed to blendEquation or blendEquationSeparate to specify a reverse subtraction blend function (destination - source).\"},e.BLEND_EQUATION={name:\"BLEND_EQUATION\",value:32777,description:\"Passed to getParameter to get the current RGB blend function.\"},e.BLEND_EQUATION_RGB={name:\"BLEND_EQUATION_RGB\",value:32777,description:\"Passed to getParameter to get the current RGB blend function. Same as BLEND_EQUATION\"},e.BLEND_EQUATION_ALPHA={name:\"BLEND_EQUATION_ALPHA\",value:34877,description:\"Passed to getParameter to get the current alpha blend function. Same as BLEND_EQUATION\"},e.BLEND_DST_RGB={name:\"BLEND_DST_RGB\",value:32968,description:\"Passed to getParameter to get the current destination RGB blend function.\"},e.BLEND_SRC_RGB={name:\"BLEND_SRC_RGB\",value:32969,description:\"Passed to getParameter to get the current destination RGB blend function.\"},e.BLEND_DST_ALPHA={name:\"BLEND_DST_ALPHA\",value:32970,description:\"Passed to getParameter to get the current destination alpha blend function.\"},e.BLEND_SRC_ALPHA={name:\"BLEND_SRC_ALPHA\",value:32971,description:\"Passed to getParameter to get the current source alpha blend function.\"},e.BLEND_COLOR={name:\"BLEND_COLOR\",value:32773,description:\"Passed to getParameter to return a the current blend color.\"},e.ARRAY_BUFFER_BINDING={name:\"ARRAY_BUFFER_BINDING\",value:34964,description:\"Passed to getParameter to get the array buffer binding.\"},e.ELEMENT_ARRAY_BUFFER_BINDING={name:\"ELEMENT_ARRAY_BUFFER_BINDING\",value:34965,description:\"Passed to getParameter to get the current element array buffer.\"},e.LINE_WIDTH={name:\"LINE_WIDTH\",value:2849,description:\"Passed to getParameter to get the current lineWidth (set by the lineWidth method).\"},e.ALIASED_POINT_SIZE_RANGE={name:\"ALIASED_POINT_SIZE_RANGE\",value:33901,description:\"Passed to getParameter to get the current size of a point drawn with gl.POINTS\"},e.ALIASED_LINE_WIDTH_RANGE={name:\"ALIASED_LINE_WIDTH_RANGE\",value:33902,description:\"Passed to getParameter to get the range of available widths for a line. Returns a length-2 array with the lo value at 0, and hight at 1.\"},e.CULL_FACE_MODE={name:\"CULL_FACE_MODE\",value:2885,description:\"Passed to getParameter to get the current value of cullFace. Should return FRONT, BACK, or FRONT_AND_BACK\"},e.FRONT_FACE={name:\"FRONT_FACE\",value:2886,description:\"Passed to getParameter to determine the current value of frontFace. Should return CW or CCW.\"},e.DEPTH_RANGE={name:\"DEPTH_RANGE\",value:2928,description:\"Passed to getParameter to return a length-2 array of floats giving the current depth range.\"},e.DEPTH_WRITEMASK={name:\"DEPTH_WRITEMASK\",value:2930,description:\"Passed to getParameter to determine if the depth write mask is enabled.\"},e.DEPTH_CLEAR_VALUE={name:\"DEPTH_CLEAR_VALUE\",value:2931,description:\"Passed to getParameter to determine the current depth clear value.\"},e.DEPTH_FUNC={name:\"DEPTH_FUNC\",value:2932,description:\"Passed to getParameter to get the current depth function. Returns NEVER, ALWAYS, LESS, EQUAL, LEQUAL, GREATER, GEQUAL, or NOTEQUAL.\"},e.STENCIL_CLEAR_VALUE={name:\"STENCIL_CLEAR_VALUE\",value:2961,description:\"Passed to getParameter to get the value the stencil will be cleared to.\"},e.STENCIL_FUNC={name:\"STENCIL_FUNC\",value:2962,description:\"Passed to getParameter to get the current stencil function. Returns NEVER, ALWAYS, LESS, EQUAL, LEQUAL, GREATER, GEQUAL, or NOTEQUAL.\"},e.STENCIL_FAIL={name:\"STENCIL_FAIL\",value:2964,description:\"Passed to getParameter to get the current stencil fail function. Should return KEEP, REPLACE, INCR, DECR, INVERT, INCR_WRAP, or DECR_WRAP.\"},e.STENCIL_PASS_DEPTH_FAIL={name:\"STENCIL_PASS_DEPTH_FAIL\",value:2965,description:\"Passed to getParameter to get the current stencil fail function should the depth buffer test fail. Should return KEEP, REPLACE, INCR, DECR, INVERT, INCR_WRAP, or DECR_WRAP.\"},e.STENCIL_PASS_DEPTH_PASS={name:\"STENCIL_PASS_DEPTH_PASS\",value:2966,description:\"Passed to getParameter to get the current stencil fail function should the depth buffer test pass. Should return KEEP, REPLACE, INCR, DECR, INVERT, INCR_WRAP, or DECR_WRAP.\"},e.STENCIL_REF={name:\"STENCIL_REF\",value:2967,description:\"Passed to getParameter to get the reference value used for stencil tests.\"},e.STENCIL_VALUE_MASK={name:\"STENCIL_VALUE_MASK\",value:2963,description:\" \"},e.STENCIL_WRITEMASK={name:\"STENCIL_WRITEMASK\",value:2968,description:\" \"},e.STENCIL_BACK_FUNC={name:\"STENCIL_BACK_FUNC\",value:34816,description:\" \"},e.STENCIL_BACK_FAIL={name:\"STENCIL_BACK_FAIL\",value:34817,description:\" \"},e.STENCIL_BACK_PASS_DEPTH_FAIL={name:\"STENCIL_BACK_PASS_DEPTH_FAIL\",value:34818,description:\" \"},e.STENCIL_BACK_PASS_DEPTH_PASS={name:\"STENCIL_BACK_PASS_DEPTH_PASS\",value:34819,description:\" \"},e.STENCIL_BACK_REF={name:\"STENCIL_BACK_REF\",value:36003,description:\" \"},e.STENCIL_BACK_VALUE_MASK={name:\"STENCIL_BACK_VALUE_MASK\",value:36004,description:\" \"},e.STENCIL_BACK_WRITEMASK={name:\"STENCIL_BACK_WRITEMASK\",value:36005,description:\" \"},e.VIEWPORT={name:\"VIEWPORT\",value:2978,description:\"Returns an Int32Array with four elements for the current viewport dimensions.\"},e.SCISSOR_BOX={name:\"SCISSOR_BOX\",value:3088,description:\"Returns an Int32Array with four elements for the current scissor box dimensions.\"},e.COLOR_CLEAR_VALUE={name:\"COLOR_CLEAR_VALUE\",value:3106,description:\" \"},e.COLOR_WRITEMASK={name:\"COLOR_WRITEMASK\",value:3107,description:\" \"},e.UNPACK_ALIGNMENT={name:\"UNPACK_ALIGNMENT\",value:3317,description:\" \"},e.PACK_ALIGNMENT={name:\"PACK_ALIGNMENT\",value:3333,description:\" \"},e.MAX_TEXTURE_SIZE={name:\"MAX_TEXTURE_SIZE\",value:3379,description:\" \"},e.MAX_VIEWPORT_DIMS={name:\"MAX_VIEWPORT_DIMS\",value:3386,description:\" \"},e.SUBPIXEL_BITS={name:\"SUBPIXEL_BITS\",value:3408,description:\" \"},e.RED_BITS={name:\"RED_BITS\",value:3410,description:\" \"},e.GREEN_BITS={name:\"GREEN_BITS\",value:3411,description:\" \"},e.BLUE_BITS={name:\"BLUE_BITS\",value:3412,description:\" \"},e.ALPHA_BITS={name:\"ALPHA_BITS\",value:3413,description:\" \"},e.DEPTH_BITS={name:\"DEPTH_BITS\",value:3414,description:\" \"},e.STENCIL_BITS={name:\"STENCIL_BITS\",value:3415,description:\" \"},e.POLYGON_OFFSET_UNITS={name:\"POLYGON_OFFSET_UNITS\",value:10752,description:\" \"},e.POLYGON_OFFSET_FACTOR={name:\"POLYGON_OFFSET_FACTOR\",value:32824,description:\" \"},e.TEXTURE_BINDING_2D={name:\"TEXTURE_BINDING_2D\",value:32873,description:\" \"},e.SAMPLE_BUFFERS={name:\"SAMPLE_BUFFERS\",value:32936,description:\" \"},e.SAMPLES={name:\"SAMPLES\",value:32937,description:\" \"},e.SAMPLE_COVERAGE_VALUE={name:\"SAMPLE_COVERAGE_VALUE\",value:32938,description:\" \"},e.SAMPLE_COVERAGE_INVERT={name:\"SAMPLE_COVERAGE_INVERT\",value:32939,description:\" \"},e.COMPRESSED_TEXTURE_FORMATS={name:\"COMPRESSED_TEXTURE_FORMATS\",value:34467,description:\" \"},e.VENDOR={name:\"VENDOR\",value:7936,description:\" \"},e.RENDERER={name:\"RENDERER\",value:7937,description:\" \"},e.VERSION={name:\"VERSION\",value:7938,description:\" \"},e.IMPLEMENTATION_COLOR_READ_TYPE={name:\"IMPLEMENTATION_COLOR_READ_TYPE\",value:35738,description:\" \"},e.IMPLEMENTATION_COLOR_READ_FORMAT={name:\"IMPLEMENTATION_COLOR_READ_FORMAT\",value:35739,description:\" \"},e.BROWSER_DEFAULT_WEBGL={name:\"BROWSER_DEFAULT_WEBGL\",value:37444,description:\" \"},e.STATIC_DRAW={name:\"STATIC_DRAW\",value:35044,description:\"Passed to bufferData as a hint about whether the contents of the buffer are likely to be used often and not change often.\"},e.STREAM_DRAW={name:\"STREAM_DRAW\",value:35040,description:\"Passed to bufferData as a hint about whether the contents of the buffer are likely to not be used often.\"},e.DYNAMIC_DRAW={name:\"DYNAMIC_DRAW\",value:35048,description:\"Passed to bufferData as a hint about whether the contents of the buffer are likely to be used often and change often.\"},e.ARRAY_BUFFER={name:\"ARRAY_BUFFER\",value:34962,description:\"Passed to bindBuffer or bufferData to specify the type of buffer being used.\"},e.ELEMENT_ARRAY_BUFFER={name:\"ELEMENT_ARRAY_BUFFER\",value:34963,description:\"Passed to bindBuffer or bufferData to specify the type of buffer being used.\"},e.BUFFER_SIZE={name:\"BUFFER_SIZE\",value:34660,description:\"Passed to getBufferParameter to get a buffer's size.\"},e.BUFFER_USAGE={name:\"BUFFER_USAGE\",value:34661,description:\"Passed to getBufferParameter to get the hint for the buffer passed in when it was created.\"},e.CURRENT_VERTEX_ATTRIB={name:\"CURRENT_VERTEX_ATTRIB\",value:34342,description:\"Passed to getVertexAttrib to read back the current vertex attribute.\"},e.VERTEX_ATTRIB_ARRAY_ENABLED={name:\"VERTEX_ATTRIB_ARRAY_ENABLED\",value:34338,description:\" \"},e.VERTEX_ATTRIB_ARRAY_SIZE={name:\"VERTEX_ATTRIB_ARRAY_SIZE\",value:34339,description:\" \"},e.VERTEX_ATTRIB_ARRAY_STRIDE={name:\"VERTEX_ATTRIB_ARRAY_STRIDE\",value:34340,description:\" \"},e.VERTEX_ATTRIB_ARRAY_TYPE={name:\"VERTEX_ATTRIB_ARRAY_TYPE\",value:34341,description:\" \"},e.VERTEX_ATTRIB_ARRAY_NORMALIZED={name:\"VERTEX_ATTRIB_ARRAY_NORMALIZED\",value:34922,description:\" \"},e.VERTEX_ATTRIB_ARRAY_POINTER={name:\"VERTEX_ATTRIB_ARRAY_POINTER\",value:34373,description:\" \"},e.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING={name:\"VERTEX_ATTRIB_ARRAY_BUFFER_BINDING\",value:34975,description:\" \"},e.CULL_FACE={name:\"CULL_FACE\",value:2884,description:\"Passed to enable/disable to turn on/off culling. Can also be used with getParameter to find the current culling method.\"},e.FRONT={name:\"FRONT\",value:1028,description:\"Passed to cullFace to specify that only front faces should be drawn.\"},e.BACK={name:\"BACK\",value:1029,description:\"Passed to cullFace to specify that only back faces should be drawn.\"},e.FRONT_AND_BACK={name:\"FRONT_AND_BACK\",value:1032,description:\"Passed to cullFace to specify that front and back faces should be drawn.\"},e.BLEND={name:\"BLEND\",value:3042,description:\"Passed to enable/disable to turn on/off blending. Can also be used with getParameter to find the current blending method.\"},e.DEPTH_TEST={name:\"DEPTH_TEST\",value:2929,description:\"Passed to enable/disable to turn on/off the depth test. Can also be used with getParameter to query the depth test.\"},e.DITHER={name:\"DITHER\",value:3024,description:\"Passed to enable/disable to turn on/off dithering. Can also be used with getParameter to find the current dithering method.\"},e.POLYGON_OFFSET_FILL={name:\"POLYGON_OFFSET_FILL\",value:32823,description:\"Passed to enable/disable to turn on/off the polygon offset. Useful for rendering hidden-line images, decals, and or solids with highlighted edges. Can also be used with getParameter to query the scissor test.\"},e.SAMPLE_ALPHA_TO_COVERAGE={name:\"SAMPLE_ALPHA_TO_COVERAGE\",value:32926,description:\"Passed to enable/disable to turn on/off the alpha to coverage. Used in multi-sampling alpha channels.\"},e.SAMPLE_COVERAGE={name:\"SAMPLE_COVERAGE\",value:32928,description:\"Passed to enable/disable to turn on/off the sample coverage. Used in multi-sampling.\"},e.SCISSOR_TEST={name:\"SCISSOR_TEST\",value:3089,description:\"Passed to enable/disable to turn on/off the scissor test. Can also be used with getParameter to query the scissor test.\"},e.STENCIL_TEST={name:\"STENCIL_TEST\",value:2960,description:\"Passed to enable/disable to turn on/off the stencil test. Can also be used with getParameter to query the stencil test.\"},e.NO_ERROR={name:\"NO_ERROR\",value:0,description:\"Returned from getError.\"},e.INVALID_ENUM={name:\"INVALID_ENUM\",value:1280,description:\"Returned from getError.\"},e.INVALID_VALUE={name:\"INVALID_VALUE\",value:1281,description:\"Returned from getError.\"},e.INVALID_OPERATION={name:\"INVALID_OPERATION\",value:1282,description:\"Returned from getError.\"},e.OUT_OF_MEMORY={name:\"OUT_OF_MEMORY\",value:1285,description:\"Returned from getError.\"},e.CONTEXT_LOST_WEBGL={name:\"CONTEXT_LOST_WEBGL\",value:37442,description:\"Returned from getError.\"},e.CW={name:\"CW\",value:2304,description:\"Passed to frontFace to specify the front face of a polygon is drawn in the clockwise direction\"},e.CCW={name:\"CCW\",value:2305,description:\"Passed to frontFace to specify the front face of a polygon is drawn in the counter clockwise direction\"},e.DONT_CARE={name:\"DONT_CARE\",value:4352,description:\"There is no preference for this behavior.\"},e.FASTEST={name:\"FASTEST\",value:4353,description:\"The most efficient behavior should be used.\"},e.NICEST={name:\"NICEST\",value:4354,description:\"The most correct or the highest quality option should be used.\"},e.GENERATE_MIPMAP_HINT={name:\"GENERATE_MIPMAP_HINT\",value:33170,description:\"Hint for the quality of filtering when generating mipmap images with WebGLRenderingContext.generateMipmap().\"},e.BYTE={name:\"BYTE\",value:5120,description:\" \"},e.UNSIGNED_BYTE={name:\"UNSIGNED_BYTE\",value:5121,description:\" \"},e.SHORT={name:\"SHORT\",value:5122,description:\" \"},e.UNSIGNED_SHORT={name:\"UNSIGNED_SHORT\",value:5123,description:\" \"},e.INT={name:\"INT\",value:5124,description:\" \"},e.UNSIGNED_INT={name:\"UNSIGNED_INT\",value:5125,description:\" \"},e.FLOAT={name:\"FLOAT\",value:5126,description:\" \"},e.DEPTH_COMPONENT={name:\"DEPTH_COMPONENT\",value:6402,description:\" \"},e.ALPHA={name:\"ALPHA\",value:6406,description:\" \"},e.RGB={name:\"RGB\",value:6407,description:\" \"},e.RGBA={name:\"RGBA\",value:6408,description:\" \"},e.LUMINANCE={name:\"LUMINANCE\",value:6409,description:\" \"},e.LUMINANCE_ALPHA={name:\"LUMINANCE_ALPHA\",value:6410,description:\" \"},e.UNSIGNED_SHORT_4_4_4_4={name:\"UNSIGNED_SHORT_4_4_4_4\",value:32819,description:\" \"},e.UNSIGNED_SHORT_5_5_5_1={name:\"UNSIGNED_SHORT_5_5_5_1\",value:32820,description:\" \"},e.UNSIGNED_SHORT_5_6_5={name:\"UNSIGNED_SHORT_5_6_5\",value:33635,description:\" \"},e.FRAGMENT_SHADER={name:\"FRAGMENT_SHADER\",value:35632,description:\"Passed to createShader to define a fragment shader.\"},e.VERTEX_SHADER={name:\"VERTEX_SHADER\",value:35633,description:\"Passed to createShader to define a vertex shader\"},e.COMPILE_STATUS={name:\"COMPILE_STATUS\",value:35713,description:\"Passed to getShaderParamter to get the status of the compilation. Returns false if the shader was not compiled. You can then query getShaderInfoLog to find the exact error\"},e.DELETE_STATUS={name:\"DELETE_STATUS\",value:35712,description:\"Passed to getShaderParamter to determine if a shader was deleted via deleteShader. Returns true if it was, false otherwise.\"},e.LINK_STATUS={name:\"LINK_STATUS\",value:35714,description:\"Passed to getProgramParameter after calling linkProgram to determine if a program was linked correctly. Returns false if there were errors. Use getProgramInfoLog to find the exact error.\"},e.VALIDATE_STATUS={name:\"VALIDATE_STATUS\",value:35715,description:\"Passed to getProgramParameter after calling validateProgram to determine if it is valid. Returns false if errors were found.\"},e.ATTACHED_SHADERS={name:\"ATTACHED_SHADERS\",value:35717,description:\"Passed to getProgramParameter after calling attachShader to determine if the shader was attached correctly. Returns false if errors occurred.\"},e.ACTIVE_ATTRIBUTES={name:\"ACTIVE_ATTRIBUTES\",value:35721,description:\"Passed to getProgramParameter to get the number of attributes active in a program.\"},e.ACTIVE_UNIFORMS={name:\"ACTIVE_UNIFORMS\",value:35718,description:\"Passed to getProgramParamter to get the number of uniforms active in a program.\"},e.MAX_VERTEX_ATTRIBS={name:\"MAX_VERTEX_ATTRIBS\",value:34921,description:\" \"},e.MAX_VERTEX_UNIFORM_VECTORS={name:\"MAX_VERTEX_UNIFORM_VECTORS\",value:36347,description:\" \"},e.MAX_VARYING_VECTORS={name:\"MAX_VARYING_VECTORS\",value:36348,description:\" \"},e.MAX_COMBINED_TEXTURE_IMAGE_UNITS={name:\"MAX_COMBINED_TEXTURE_IMAGE_UNITS\",value:35661,description:\" \"},e.MAX_VERTEX_TEXTURE_IMAGE_UNITS={name:\"MAX_VERTEX_TEXTURE_IMAGE_UNITS\",value:35660,description:\" \"},e.MAX_TEXTURE_IMAGE_UNITS={name:\"MAX_TEXTURE_IMAGE_UNITS\",value:34930,description:\"Implementation dependent number of maximum texture units. At least 8.\"},e.MAX_FRAGMENT_UNIFORM_VECTORS={name:\"MAX_FRAGMENT_UNIFORM_VECTORS\",value:36349,description:\" \"},e.SHADER_TYPE={name:\"SHADER_TYPE\",value:35663,description:\" \"},e.SHADING_LANGUAGE_VERSION={name:\"SHADING_LANGUAGE_VERSION\",value:35724,description:\" \"},e.CURRENT_PROGRAM={name:\"CURRENT_PROGRAM\",value:35725,description:\" \"},e.NEVER={name:\"NEVER\",value:512,description:\"Passed to depthFunction or stencilFunction to specify depth or stencil tests will never pass. i.e. Nothing will be drawn.\"},e.ALWAYS={name:\"ALWAYS\",value:519,description:\"Passed to depthFunction or stencilFunction to specify depth or stencil tests will always pass. i.e. Pixels will be drawn in the order they are drawn.\"},e.LESS={name:\"LESS\",value:513,description:\"Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is less than the stored value.\"},e.EQUAL={name:\"EQUAL\",value:514,description:\"Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is equals to the stored value.\"},e.LEQUAL={name:\"LEQUAL\",value:515,description:\"Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is less than or equal to the stored value.\"},e.GREATER={name:\"GREATER\",value:516,description:\"Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is greater than the stored value.\"},e.GEQUAL={name:\"GEQUAL\",value:518,description:\"Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is greater than or equal to the stored value.\"},e.NOTEQUAL={name:\"NOTEQUAL\",value:517,description:\"Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is not equal to the stored value.\"},e.KEEP={name:\"KEEP\",value:7680,description:\" \"},e.REPLACE={name:\"REPLACE\",value:7681,description:\" \"},e.INCR={name:\"INCR\",value:7682,description:\" \"},e.DECR={name:\"DECR\",value:7683,description:\" \"},e.INVERT={name:\"INVERT\",value:5386,description:\" \"},e.INCR_WRAP={name:\"INCR_WRAP\",value:34055,description:\" \"},e.DECR_WRAP={name:\"DECR_WRAP\",value:34056,description:\" \"},e.NEAREST={name:\"NEAREST\",value:9728,description:\" \"},e.LINEAR={name:\"LINEAR\",value:9729,description:\" \"},e.NEAREST_MIPMAP_NEAREST={name:\"NEAREST_MIPMAP_NEAREST\",value:9984,description:\" \"},e.LINEAR_MIPMAP_NEAREST={name:\"LINEAR_MIPMAP_NEAREST\",value:9985,description:\" \"},e.NEAREST_MIPMAP_LINEAR={name:\"NEAREST_MIPMAP_LINEAR\",value:9986,description:\" \"},e.LINEAR_MIPMAP_LINEAR={name:\"LINEAR_MIPMAP_LINEAR\",value:9987,description:\" \"},e.TEXTURE_MAG_FILTER={name:\"TEXTURE_MAG_FILTER\",value:10240,description:\" \"},e.TEXTURE_MIN_FILTER={name:\"TEXTURE_MIN_FILTER\",value:10241,description:\" \"},e.TEXTURE_WRAP_S={name:\"TEXTURE_WRAP_S\",value:10242,description:\" \"},e.TEXTURE_WRAP_T={name:\"TEXTURE_WRAP_T\",value:10243,description:\" \"},e.TEXTURE_2D={name:\"TEXTURE_2D\",value:3553,description:\" \"},e.TEXTURE={name:\"TEXTURE\",value:5890,description:\" \"},e.TEXTURE_CUBE_MAP={name:\"TEXTURE_CUBE_MAP\",value:34067,description:\" \"},e.TEXTURE_BINDING_CUBE_MAP={name:\"TEXTURE_BINDING_CUBE_MAP\",value:34068,description:\" \"},e.TEXTURE_CUBE_MAP_POSITIVE_X={name:\"TEXTURE_CUBE_MAP_POSITIVE_X\",value:34069,description:\" \"},e.TEXTURE_CUBE_MAP_NEGATIVE_X={name:\"TEXTURE_CUBE_MAP_NEGATIVE_X\",value:34070,description:\" \"},e.TEXTURE_CUBE_MAP_POSITIVE_Y={name:\"TEXTURE_CUBE_MAP_POSITIVE_Y\",value:34071,description:\" \"},e.TEXTURE_CUBE_MAP_NEGATIVE_Y={name:\"TEXTURE_CUBE_MAP_NEGATIVE_Y\",value:34072,description:\" \"},e.TEXTURE_CUBE_MAP_POSITIVE_Z={name:\"TEXTURE_CUBE_MAP_POSITIVE_Z\",value:34073,description:\" \"},e.TEXTURE_CUBE_MAP_NEGATIVE_Z={name:\"TEXTURE_CUBE_MAP_NEGATIVE_Z\",value:34074,description:\" \"},e.MAX_CUBE_MAP_TEXTURE_SIZE={name:\"MAX_CUBE_MAP_TEXTURE_SIZE\",value:34076,description:\" \"},e.TEXTURE0={name:\"TEXTURE0\",value:33984,description:\"A texture unit.\"},e.TEXTURE1={name:\"TEXTURE1\",value:33985,description:\"A texture unit.\"},e.TEXTURE2={name:\"TEXTURE2\",value:33986,description:\"A texture unit.\"},e.TEXTURE3={name:\"TEXTURE3\",value:33987,description:\"A texture unit.\"},e.TEXTURE4={name:\"TEXTURE4\",value:33988,description:\"A texture unit.\"},e.TEXTURE5={name:\"TEXTURE5\",value:33989,description:\"A texture unit.\"},e.TEXTURE6={name:\"TEXTURE6\",value:33990,description:\"A texture unit.\"},e.TEXTURE7={name:\"TEXTURE7\",value:33991,description:\"A texture unit.\"},e.TEXTURE8={name:\"TEXTURE8\",value:33992,description:\"A texture unit.\"},e.TEXTURE9={name:\"TEXTURE9\",value:33993,description:\"A texture unit.\"},e.TEXTURE10={name:\"TEXTURE10\",value:33994,description:\"A texture unit.\"},e.TEXTURE11={name:\"TEXTURE11\",value:33995,description:\"A texture unit.\"},e.TEXTURE12={name:\"TEXTURE12\",value:33996,description:\"A texture unit.\"},e.TEXTURE13={name:\"TEXTURE13\",value:33997,description:\"A texture unit.\"},e.TEXTURE14={name:\"TEXTURE14\",value:33998,description:\"A texture unit.\"},e.TEXTURE15={name:\"TEXTURE15\",value:33999,description:\"A texture unit.\"},e.TEXTURE16={name:\"TEXTURE16\",value:34e3,description:\"A texture unit.\"},e.TEXTURE17={name:\"TEXTURE17\",value:34001,description:\"A texture unit.\"},e.TEXTURE18={name:\"TEXTURE18\",value:34002,description:\"A texture unit.\"},e.TEXTURE19={name:\"TEXTURE19\",value:34003,description:\"A texture unit.\"},e.TEXTURE20={name:\"TEXTURE20\",value:34004,description:\"A texture unit.\"},e.TEXTURE21={name:\"TEXTURE21\",value:34005,description:\"A texture unit.\"},e.TEXTURE22={name:\"TEXTURE22\",value:34006,description:\"A texture unit.\"},e.TEXTURE23={name:\"TEXTURE23\",value:34007,description:\"A texture unit.\"},e.TEXTURE24={name:\"TEXTURE24\",value:34008,description:\"A texture unit.\"},e.TEXTURE25={name:\"TEXTURE25\",value:34009,description:\"A texture unit.\"},e.TEXTURE26={name:\"TEXTURE26\",value:34010,description:\"A texture unit.\"},e.TEXTURE27={name:\"TEXTURE27\",value:34011,description:\"A texture unit.\"},e.TEXTURE28={name:\"TEXTURE28\",value:34012,description:\"A texture unit.\"},e.TEXTURE29={name:\"TEXTURE29\",value:34013,description:\"A texture unit.\"},e.TEXTURE30={name:\"TEXTURE30\",value:34014,description:\"A texture unit.\"},e.TEXTURE31={name:\"TEXTURE31\",value:34015,description:\"A texture unit.\"},e.ACTIVE_TEXTURE={name:\"ACTIVE_TEXTURE\",value:34016,description:\"The current active texture unit.\"},e.REPEAT={name:\"REPEAT\",value:10497,description:\" \"},e.CLAMP_TO_EDGE={name:\"CLAMP_TO_EDGE\",value:33071,description:\" \"},e.MIRRORED_REPEAT={name:\"MIRRORED_REPEAT\",value:33648,description:\" \"},e.FLOAT_VEC2={name:\"FLOAT_VEC2\",value:35664,description:\" \"},e.FLOAT_VEC3={name:\"FLOAT_VEC3\",value:35665,description:\" \"},e.FLOAT_VEC4={name:\"FLOAT_VEC4\",value:35666,description:\" \"},e.INT_VEC2={name:\"INT_VEC2\",value:35667,description:\" \"},e.INT_VEC3={name:\"INT_VEC3\",value:35668,description:\" \"},e.INT_VEC4={name:\"INT_VEC4\",value:35669,description:\" \"},e.BOOL={name:\"BOOL\",value:35670,description:\" \"},e.BOOL_VEC2={name:\"BOOL_VEC2\",value:35671,description:\" \"},e.BOOL_VEC3={name:\"BOOL_VEC3\",value:35672,description:\" \"},e.BOOL_VEC4={name:\"BOOL_VEC4\",value:35673,description:\" \"},e.FLOAT_MAT2={name:\"FLOAT_MAT2\",value:35674,description:\" \"},e.FLOAT_MAT3={name:\"FLOAT_MAT3\",value:35675,description:\" \"},e.FLOAT_MAT4={name:\"FLOAT_MAT4\",value:35676,description:\" \"},e.SAMPLER_2D={name:\"SAMPLER_2D\",value:35678,description:\" \"},e.SAMPLER_CUBE={name:\"SAMPLER_CUBE\",value:35680,description:\" \"},e.LOW_FLOAT={name:\"LOW_FLOAT\",value:36336,description:\" \"},e.MEDIUM_FLOAT={name:\"MEDIUM_FLOAT\",value:36337,description:\" \"},e.HIGH_FLOAT={name:\"HIGH_FLOAT\",value:36338,description:\" \"},e.LOW_INT={name:\"LOW_INT\",value:36339,description:\" \"},e.MEDIUM_INT={name:\"MEDIUM_INT\",value:36340,description:\" \"},e.HIGH_INT={name:\"HIGH_INT\",value:36341,description:\" \"},e.FRAMEBUFFER={name:\"FRAMEBUFFER\",value:36160,description:\" \"},e.RENDERBUFFER={name:\"RENDERBUFFER\",value:36161,description:\" \"},e.RGBA4={name:\"RGBA4\",value:32854,description:\" \"},e.RGB5_A1={name:\"RGB5_A1\",value:32855,description:\" \"},e.RGB565={name:\"RGB565\",value:36194,description:\" \"},e.DEPTH_COMPONENT16={name:\"DEPTH_COMPONENT16\",value:33189,description:\" \"},e.STENCIL_INDEX={name:\"STENCIL_INDEX\",value:6401,description:\" \"},e.STENCIL_INDEX8={name:\"STENCIL_INDEX8\",value:36168,description:\" \"},e.DEPTH_STENCIL={name:\"DEPTH_STENCIL\",value:34041,description:\" \"},e.RENDERBUFFER_WIDTH={name:\"RENDERBUFFER_WIDTH\",value:36162,description:\" \"},e.RENDERBUFFER_HEIGHT={name:\"RENDERBUFFER_HEIGHT\",value:36163,description:\" \"},e.RENDERBUFFER_INTERNAL_FORMAT={name:\"RENDERBUFFER_INTERNAL_FORMAT\",value:36164,description:\" \"},e.RENDERBUFFER_RED_SIZE={name:\"RENDERBUFFER_RED_SIZE\",value:36176,description:\" \"},e.RENDERBUFFER_GREEN_SIZE={name:\"RENDERBUFFER_GREEN_SIZE\",value:36177,description:\" \"},e.RENDERBUFFER_BLUE_SIZE={name:\"RENDERBUFFER_BLUE_SIZE\",value:36178,description:\" \"},e.RENDERBUFFER_ALPHA_SIZE={name:\"RENDERBUFFER_ALPHA_SIZE\",value:36179,description:\" \"},e.RENDERBUFFER_DEPTH_SIZE={name:\"RENDERBUFFER_DEPTH_SIZE\",value:36180,description:\" \"},e.RENDERBUFFER_STENCIL_SIZE={name:\"RENDERBUFFER_STENCIL_SIZE\",value:36181,description:\" \"},e.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE={name:\"FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE\",value:36048,description:\" \"},e.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME={name:\"FRAMEBUFFER_ATTACHMENT_OBJECT_NAME\",value:36049,description:\" \"},e.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL={name:\"FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL\",value:36050,description:\" \"},e.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE={name:\"FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE\",value:36051,description:\" \"},e.COLOR_ATTACHMENT0={name:\"COLOR_ATTACHMENT0\",value:36064,description:\" \"},e.DEPTH_ATTACHMENT={name:\"DEPTH_ATTACHMENT\",value:36096,description:\" \"},e.STENCIL_ATTACHMENT={name:\"STENCIL_ATTACHMENT\",value:36128,description:\" \"},e.DEPTH_STENCIL_ATTACHMENT={name:\"DEPTH_STENCIL_ATTACHMENT\",value:33306,description:\" \"},e.NONE={name:\"NONE\",value:0,description:\" \"},e.FRAMEBUFFER_COMPLETE={name:\"FRAMEBUFFER_COMPLETE\",value:36053,description:\" \"},e.FRAMEBUFFER_INCOMPLETE_ATTACHMENT={name:\"FRAMEBUFFER_INCOMPLETE_ATTACHMENT\",value:36054,description:\" \"},e.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT={name:\"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT\",value:36055,description:\" \"},e.FRAMEBUFFER_INCOMPLETE_DIMENSIONS={name:\"FRAMEBUFFER_INCOMPLETE_DIMENSIONS\",value:36057,description:\" \"},e.FRAMEBUFFER_UNSUPPORTED={name:\"FRAMEBUFFER_UNSUPPORTED\",value:36061,description:\" \"},e.FRAMEBUFFER_BINDING={name:\"FRAMEBUFFER_BINDING\",value:36006,description:\" \"},e.RENDERBUFFER_BINDING={name:\"RENDERBUFFER_BINDING\",value:36007,description:\" \"},e.MAX_RENDERBUFFER_SIZE={name:\"MAX_RENDERBUFFER_SIZE\",value:34024,description:\" \"},e.INVALID_FRAMEBUFFER_OPERATION={name:\"INVALID_FRAMEBUFFER_OPERATION\",value:1286,description:\" \"},e.UNPACK_FLIP_Y_WEBGL={name:\"UNPACK_FLIP_Y_WEBGL\",value:37440,description:\" \"},e.UNPACK_PREMULTIPLY_ALPHA_WEBGL={name:\"UNPACK_PREMULTIPLY_ALPHA_WEBGL\",value:37441,description:\" \"},e.UNPACK_COLORSPACE_CONVERSION_WEBGL={name:\"UNPACK_COLORSPACE_CONVERSION_WEBGL\",value:37443,description:\" \"},e.READ_BUFFER={name:\"READ_BUFFER\",value:3074,description:\" \"},e.UNPACK_ROW_LENGTH={name:\"UNPACK_ROW_LENGTH\",value:3314,description:\" \"},e.UNPACK_SKIP_ROWS={name:\"UNPACK_SKIP_ROWS\",value:3315,description:\" \"},e.UNPACK_SKIP_PIXELS={name:\"UNPACK_SKIP_PIXELS\",value:3316,description:\" \"},e.PACK_ROW_LENGTH={name:\"PACK_ROW_LENGTH\",value:3330,description:\" \"},e.PACK_SKIP_ROWS={name:\"PACK_SKIP_ROWS\",value:3331,description:\" \"},e.PACK_SKIP_PIXELS={name:\"PACK_SKIP_PIXELS\",value:3332,description:\" \"},e.TEXTURE_BINDING_3D={name:\"TEXTURE_BINDING_3D\",value:32874,description:\" \"},e.UNPACK_SKIP_IMAGES={name:\"UNPACK_SKIP_IMAGES\",value:32877,description:\" \"},e.UNPACK_IMAGE_HEIGHT={name:\"UNPACK_IMAGE_HEIGHT\",value:32878,description:\" \"},e.MAX_3D_TEXTURE_SIZE={name:\"MAX_3D_TEXTURE_SIZE\",value:32883,description:\" \"},e.MAX_ELEMENTS_VERTICES={name:\"MAX_ELEMENTS_VERTICES\",value:33e3,description:\" \"},e.MAX_ELEMENTS_INDICES={name:\"MAX_ELEMENTS_INDICES\",value:33001,description:\" \"},e.MAX_TEXTURE_LOD_BIAS={name:\"MAX_TEXTURE_LOD_BIAS\",value:34045,description:\" \"},e.MAX_FRAGMENT_UNIFORM_COMPONENTS={name:\"MAX_FRAGMENT_UNIFORM_COMPONENTS\",value:35657,description:\" \"},e.MAX_VERTEX_UNIFORM_COMPONENTS={name:\"MAX_VERTEX_UNIFORM_COMPONENTS\",value:35658,description:\" \"},e.MAX_ARRAY_TEXTURE_LAYERS={name:\"MAX_ARRAY_TEXTURE_LAYERS\",value:35071,description:\" \"},e.MIN_PROGRAM_TEXEL_OFFSET={name:\"MIN_PROGRAM_TEXEL_OFFSET\",value:35076,description:\" \"},e.MAX_PROGRAM_TEXEL_OFFSET={name:\"MAX_PROGRAM_TEXEL_OFFSET\",value:35077,description:\" \"},e.MAX_VARYING_COMPONENTS={name:\"MAX_VARYING_COMPONENTS\",value:35659,description:\" \"},e.FRAGMENT_SHADER_DERIVATIVE_HINT={name:\"FRAGMENT_SHADER_DERIVATIVE_HINT\",value:35723,description:\" \"},e.RASTERIZER_DISCARD={name:\"RASTERIZER_DISCARD\",value:35977,description:\" \"},e.VERTEX_ARRAY_BINDING={name:\"VERTEX_ARRAY_BINDING\",value:34229,description:\" \"},e.MAX_VERTEX_OUTPUT_COMPONENTS={name:\"MAX_VERTEX_OUTPUT_COMPONENTS\",value:37154,description:\" \"},e.MAX_FRAGMENT_INPUT_COMPONENTS={name:\"MAX_FRAGMENT_INPUT_COMPONENTS\",value:37157,description:\" \"},e.MAX_SERVER_WAIT_TIMEOUT={name:\"MAX_SERVER_WAIT_TIMEOUT\",value:37137,description:\" \"},e.MAX_ELEMENT_INDEX={name:\"MAX_ELEMENT_INDEX\",value:36203,description:\" \"},e.RED={name:\"RED\",value:6403,description:\" \"},e.RGB8={name:\"RGB8\",value:32849,description:\" \"},e.RGBA8={name:\"RGBA8\",value:32856,description:\" \"},e.RGB10_A2={name:\"RGB10_A2\",value:32857,description:\" \"},e.TEXTURE_3D={name:\"TEXTURE_3D\",value:32879,description:\" \"},e.TEXTURE_WRAP_R={name:\"TEXTURE_WRAP_R\",value:32882,description:\" \"},e.TEXTURE_MIN_LOD={name:\"TEXTURE_MIN_LOD\",value:33082,description:\" \"},e.TEXTURE_MAX_LOD={name:\"TEXTURE_MAX_LOD\",value:33083,description:\" \"},e.TEXTURE_BASE_LEVEL={name:\"TEXTURE_BASE_LEVEL\",value:33084,description:\" \"},e.TEXTURE_MAX_LEVEL={name:\"TEXTURE_MAX_LEVEL\",value:33085,description:\" \"},e.TEXTURE_COMPARE_MODE={name:\"TEXTURE_COMPARE_MODE\",value:34892,description:\" \"},e.TEXTURE_COMPARE_FUNC={name:\"TEXTURE_COMPARE_FUNC\",value:34893,description:\" \"},e.SRGB={name:\"SRGB\",value:35904,description:\" \"},e.SRGB8={name:\"SRGB8\",value:35905,description:\" \"},e.SRGB8_ALPHA8={name:\"SRGB8_ALPHA8\",value:35907,description:\" \"},e.COMPARE_REF_TO_TEXTURE={name:\"COMPARE_REF_TO_TEXTURE\",value:34894,description:\" \"},e.RGBA32F={name:\"RGBA32F\",value:34836,description:\" \"},e.RGB32F={name:\"RGB32F\",value:34837,description:\" \"},e.RGBA16F={name:\"RGBA16F\",value:34842,description:\" \"},e.RGB16F={name:\"RGB16F\",value:34843,description:\" \"},e.TEXTURE_2D_ARRAY={name:\"TEXTURE_2D_ARRAY\",value:35866,description:\" \"},e.TEXTURE_BINDING_2D_ARRAY={name:\"TEXTURE_BINDING_2D_ARRAY\",value:35869,description:\" \"},e.R11F_G11F_B10F={name:\"R11F_G11F_B10F\",value:35898,description:\" \"},e.RGB9_E5={name:\"RGB9_E5\",value:35901,description:\" \"},e.RGBA32UI={name:\"RGBA32UI\",value:36208,description:\" \"},e.RGB32UI={name:\"RGB32UI\",value:36209,description:\" \"},e.RGBA16UI={name:\"RGBA16UI\",value:36214,description:\" \"},e.RGB16UI={name:\"RGB16UI\",value:36215,description:\" \"},e.RGBA8UI={name:\"RGBA8UI\",value:36220,description:\" \"},e.RGB8UI={name:\"RGB8UI\",value:36221,description:\" \"},e.RGBA32I={name:\"RGBA32I\",value:36226,description:\" \"},e.RGB32I={name:\"RGB32I\",value:36227,description:\" \"},e.RGBA16I={name:\"RGBA16I\",value:36232,description:\" \"},e.RGB16I={name:\"RGB16I\",value:36233,description:\" \"},e.RGBA8I={name:\"RGBA8I\",value:36238,description:\" \"},e.RGB8I={name:\"RGB8I\",value:36239,description:\" \"},e.RED_INTEGER={name:\"RED_INTEGER\",value:36244,description:\" \"},e.RGB_INTEGER={name:\"RGB_INTEGER\",value:36248,description:\" \"},e.RGBA_INTEGER={name:\"RGBA_INTEGER\",value:36249,description:\" \"},e.R8={name:\"R8\",value:33321,description:\" \"},e.RG8={name:\"RG8\",value:33323,description:\" \"},e.R16F={name:\"R16F\",value:33325,description:\" \"},e.R32F={name:\"R32F\",value:33326,description:\" \"},e.RG16F={name:\"RG16F\",value:33327,description:\" \"},e.RG32F={name:\"RG32F\",value:33328,description:\" \"},e.R8I={name:\"R8I\",value:33329,description:\" \"},e.R8UI={name:\"R8UI\",value:33330,description:\" \"},e.R16I={name:\"R16I\",value:33331,description:\" \"},e.R16UI={name:\"R16UI\",value:33332,description:\" \"},e.R32I={name:\"R32I\",value:33333,description:\" \"},e.R32UI={name:\"R32UI\",value:33334,description:\" \"},e.RG8I={name:\"RG8I\",value:33335,description:\" \"},e.RG8UI={name:\"RG8UI\",value:33336,description:\" \"},e.RG16I={name:\"RG16I\",value:33337,description:\" \"},e.RG16UI={name:\"RG16UI\",value:33338,description:\" \"},e.RG32I={name:\"RG32I\",value:33339,description:\" \"},e.RG32UI={name:\"RG32UI\",value:33340,description:\" \"},e.R8_SNORM={name:\"R8_SNORM\",value:36756,description:\" \"},e.RG8_SNORM={name:\"RG8_SNORM\",value:36757,description:\" \"},e.RGB8_SNORM={name:\"RGB8_SNORM\",value:36758,description:\" \"},e.RGBA8_SNORM={name:\"RGBA8_SNORM\",value:36759,description:\" \"},e.RGB10_A2UI={name:\"RGB10_A2UI\",value:36975,description:\" \"},e.TEXTURE_IMMUTABLE_FORMAT={name:\"TEXTURE_IMMUTABLE_FORMAT\",value:37167,description:\" \"},e.TEXTURE_IMMUTABLE_LEVELS={name:\"TEXTURE_IMMUTABLE_LEVELS\",value:33503,description:\" \"},e.UNSIGNED_INT_2_10_10_10_REV={name:\"UNSIGNED_INT_2_10_10_10_REV\",value:33640,description:\" \"},e.UNSIGNED_INT_10F_11F_11F_REV={name:\"UNSIGNED_INT_10F_11F_11F_REV\",value:35899,description:\" \"},e.UNSIGNED_INT_5_9_9_9_REV={name:\"UNSIGNED_INT_5_9_9_9_REV\",value:35902,description:\" \"},e.FLOAT_32_UNSIGNED_INT_24_8_REV={name:\"FLOAT_32_UNSIGNED_INT_24_8_REV\",value:36269,description:\" \"},e.UNSIGNED_INT_24_8={name:\"UNSIGNED_INT_24_8\",value:34042,description:\" \"},e.HALF_FLOAT={name:\"HALF_FLOAT\",value:5131,description:\" \"},e.RG={name:\"RG\",value:33319,description:\" \"},e.RG_INTEGER={name:\"RG_INTEGER\",value:33320,description:\" \"},e.INT_2_10_10_10_REV={name:\"INT_2_10_10_10_REV\",value:36255,description:\" \"},e.CURRENT_QUERY={name:\"CURRENT_QUERY\",value:34917,description:\" \"},e.QUERY_RESULT={name:\"QUERY_RESULT\",value:34918,description:\" \"},e.QUERY_RESULT_AVAILABLE={name:\"QUERY_RESULT_AVAILABLE\",value:34919,description:\" \"},e.ANY_SAMPLES_PASSED={name:\"ANY_SAMPLES_PASSED\",value:35887,description:\" \"},e.ANY_SAMPLES_PASSED_CONSERVATIVE={name:\"ANY_SAMPLES_PASSED_CONSERVATIVE\",value:36202,description:\" \"},e.MAX_DRAW_BUFFERS={name:\"MAX_DRAW_BUFFERS\",value:34852,description:\" \"},e.DRAW_BUFFER0={name:\"DRAW_BUFFER0\",value:34853,description:\" \"},e.DRAW_BUFFER1={name:\"DRAW_BUFFER1\",value:34854,description:\" \"},e.DRAW_BUFFER2={name:\"DRAW_BUFFER2\",value:34855,description:\" \"},e.DRAW_BUFFER3={name:\"DRAW_BUFFER3\",value:34856,description:\" \"},e.DRAW_BUFFER4={name:\"DRAW_BUFFER4\",value:34857,description:\" \"},e.DRAW_BUFFER5={name:\"DRAW_BUFFER5\",value:34858,description:\" \"},e.DRAW_BUFFER6={name:\"DRAW_BUFFER6\",value:34859,description:\" \"},e.DRAW_BUFFER7={name:\"DRAW_BUFFER7\",value:34860,description:\" \"},e.DRAW_BUFFER8={name:\"DRAW_BUFFER8\",value:34861,description:\" \"},e.DRAW_BUFFER9={name:\"DRAW_BUFFER9\",value:34862,description:\" \"},e.DRAW_BUFFER10={name:\"DRAW_BUFFER10\",value:34863,description:\" \"},e.DRAW_BUFFER11={name:\"DRAW_BUFFER11\",value:34864,description:\" \"},e.DRAW_BUFFER12={name:\"DRAW_BUFFER12\",value:34865,description:\" \"},e.DRAW_BUFFER13={name:\"DRAW_BUFFER13\",value:34866,description:\" \"},e.DRAW_BUFFER14={name:\"DRAW_BUFFER14\",value:34867,description:\" \"},e.DRAW_BUFFER15={name:\"DRAW_BUFFER15\",value:34868,description:\" \"},e.MAX_COLOR_ATTACHMENTS={name:\"MAX_COLOR_ATTACHMENTS\",value:36063,description:\" \"},e.COLOR_ATTACHMENT1={name:\"COLOR_ATTACHMENT1\",value:36065,description:\" \"},e.COLOR_ATTACHMENT2={name:\"COLOR_ATTACHMENT2\",value:36066,description:\" \"},e.COLOR_ATTACHMENT3={name:\"COLOR_ATTACHMENT3\",value:36067,description:\" \"},e.COLOR_ATTACHMENT4={name:\"COLOR_ATTACHMENT4\",value:36068,description:\" \"},e.COLOR_ATTACHMENT5={name:\"COLOR_ATTACHMENT5\",value:36069,description:\" \"},e.COLOR_ATTACHMENT6={name:\"COLOR_ATTACHMENT6\",value:36070,description:\" \"},e.COLOR_ATTACHMENT7={name:\"COLOR_ATTACHMENT7\",value:36071,description:\" \"},e.COLOR_ATTACHMENT8={name:\"COLOR_ATTACHMENT8\",value:36072,description:\" \"},e.COLOR_ATTACHMENT9={name:\"COLOR_ATTACHMENT9\",value:36073,description:\" \"},e.COLOR_ATTACHMENT10={name:\"COLOR_ATTACHMENT10\",value:36074,description:\" \"},e.COLOR_ATTACHMENT11={name:\"COLOR_ATTACHMENT11\",value:36075,description:\" \"},e.COLOR_ATTACHMENT12={name:\"COLOR_ATTACHMENT12\",value:36076,description:\" \"},e.COLOR_ATTACHMENT13={name:\"COLOR_ATTACHMENT13\",value:36077,description:\" \"},e.COLOR_ATTACHMENT14={name:\"COLOR_ATTACHMENT14\",value:36078,description:\" \"},e.COLOR_ATTACHMENT15={name:\"COLOR_ATTACHMENT15\",value:36079,description:\" \"},e.SAMPLER_3D={name:\"SAMPLER_3D\",value:35679,description:\" \"},e.SAMPLER_2D_SHADOW={name:\"SAMPLER_2D_SHADOW\",value:35682,description:\" \"},e.SAMPLER_2D_ARRAY={name:\"SAMPLER_2D_ARRAY\",value:36289,description:\" \"},e.SAMPLER_2D_ARRAY_SHADOW={name:\"SAMPLER_2D_ARRAY_SHADOW\",value:36292,description:\" \"},e.SAMPLER_CUBE_SHADOW={name:\"SAMPLER_CUBE_SHADOW\",value:36293,description:\" \"},e.INT_SAMPLER_2D={name:\"INT_SAMPLER_2D\",value:36298,description:\" \"},e.INT_SAMPLER_3D={name:\"INT_SAMPLER_3D\",value:36299,description:\" \"},e.INT_SAMPLER_CUBE={name:\"INT_SAMPLER_CUBE\",value:36300,description:\" \"},e.INT_SAMPLER_2D_ARRAY={name:\"INT_SAMPLER_2D_ARRAY\",value:36303,description:\" \"},e.UNSIGNED_INT_SAMPLER_2D={name:\"UNSIGNED_INT_SAMPLER_2D\",value:36306,description:\" \"},e.UNSIGNED_INT_SAMPLER_3D={name:\"UNSIGNED_INT_SAMPLER_3D\",value:36307,description:\" \"},e.UNSIGNED_INT_SAMPLER_CUBE={name:\"UNSIGNED_INT_SAMPLER_CUBE\",value:36308,description:\" \"},e.UNSIGNED_INT_SAMPLER_2D_ARRAY={name:\"UNSIGNED_INT_SAMPLER_2D_ARRAY\",value:36311,description:\" \"},e.MAX_SAMPLES={name:\"MAX_SAMPLES\",value:36183,description:\" \"},e.SAMPLER_BINDING={name:\"SAMPLER_BINDING\",value:35097,description:\" \"},e.PIXEL_PACK_BUFFER={name:\"PIXEL_PACK_BUFFER\",value:35051,description:\" \"},e.PIXEL_UNPACK_BUFFER={name:\"PIXEL_UNPACK_BUFFER\",value:35052,description:\" \"},e.PIXEL_PACK_BUFFER_BINDING={name:\"PIXEL_PACK_BUFFER_BINDING\",value:35053,description:\" \"},e.PIXEL_UNPACK_BUFFER_BINDING={name:\"PIXEL_UNPACK_BUFFER_BINDING\",value:35055,description:\" \"},e.COPY_READ_BUFFER={name:\"COPY_READ_BUFFER\",value:36662,description:\" \"},e.COPY_WRITE_BUFFER={name:\"COPY_WRITE_BUFFER\",value:36663,description:\" \"},e.COPY_READ_BUFFER_BINDING={name:\"COPY_READ_BUFFER_BINDING\",value:36662,description:\" \"},e.COPY_WRITE_BUFFER_BINDING={name:\"COPY_WRITE_BUFFER_BINDING\",value:36663,description:\" \"},e.FLOAT_MAT2x3={name:\"FLOAT_MAT2x3\",value:35685,description:\" \"},e.FLOAT_MAT2x4={name:\"FLOAT_MAT2x4\",value:35686,description:\" \"},e.FLOAT_MAT3x2={name:\"FLOAT_MAT3x2\",value:35687,description:\" \"},e.FLOAT_MAT3x4={name:\"FLOAT_MAT3x4\",value:35688,description:\" \"},e.FLOAT_MAT4x2={name:\"FLOAT_MAT4x2\",value:35689,description:\" \"},e.FLOAT_MAT4x3={name:\"FLOAT_MAT4x3\",value:35690,description:\" \"},e.UNSIGNED_INT_VEC2={name:\"UNSIGNED_INT_VEC2\",value:36294,description:\" \"},e.UNSIGNED_INT_VEC3={name:\"UNSIGNED_INT_VEC3\",value:36295,description:\" \"},e.UNSIGNED_INT_VEC4={name:\"UNSIGNED_INT_VEC4\",value:36296,description:\" \"},e.UNSIGNED_NORMALIZED={name:\"UNSIGNED_NORMALIZED\",value:35863,description:\" \"},e.SIGNED_NORMALIZED={name:\"SIGNED_NORMALIZED\",value:36764,description:\" \"},e.VERTEX_ATTRIB_ARRAY_INTEGER={name:\"VERTEX_ATTRIB_ARRAY_INTEGER\",value:35069,description:\" \"},e.VERTEX_ATTRIB_ARRAY_DIVISOR={name:\"VERTEX_ATTRIB_ARRAY_DIVISOR\",value:35070,description:\" \"},e.TRANSFORM_FEEDBACK_BUFFER_MODE={name:\"TRANSFORM_FEEDBACK_BUFFER_MODE\",value:35967,description:\" \"},e.MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS={name:\"MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS\",value:35968,description:\" \"},e.TRANSFORM_FEEDBACK_VARYINGS={name:\"TRANSFORM_FEEDBACK_VARYINGS\",value:35971,description:\" \"},e.TRANSFORM_FEEDBACK_BUFFER_START={name:\"TRANSFORM_FEEDBACK_BUFFER_START\",value:35972,description:\" \"},e.TRANSFORM_FEEDBACK_BUFFER_SIZE={name:\"TRANSFORM_FEEDBACK_BUFFER_SIZE\",value:35973,description:\" \"},e.TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN={name:\"TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN\",value:35976,description:\" \"},e.MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS={name:\"MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS\",value:35978,description:\" \"},e.MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS={name:\"MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS\",value:35979,description:\" \"},e.INTERLEAVED_ATTRIBS={name:\"INTERLEAVED_ATTRIBS\",value:35980,description:\" \"},e.SEPARATE_ATTRIBS={name:\"SEPARATE_ATTRIBS\",value:35981,description:\" \"},e.TRANSFORM_FEEDBACK_BUFFER={name:\"TRANSFORM_FEEDBACK_BUFFER\",value:35982,description:\" \"},e.TRANSFORM_FEEDBACK_BUFFER_BINDING={name:\"TRANSFORM_FEEDBACK_BUFFER_BINDING\",value:35983,description:\" \"},e.TRANSFORM_FEEDBACK={name:\"TRANSFORM_FEEDBACK\",value:36386,description:\" \"},e.TRANSFORM_FEEDBACK_PAUSED={name:\"TRANSFORM_FEEDBACK_PAUSED\",value:36387,description:\" \"},e.TRANSFORM_FEEDBACK_ACTIVE={name:\"TRANSFORM_FEEDBACK_ACTIVE\",value:36388,description:\" \"},e.TRANSFORM_FEEDBACK_BINDING={name:\"TRANSFORM_FEEDBACK_BINDING\",value:36389,description:\" \"},e.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING={name:\"FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING\",value:33296,description:\" \"},e.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE={name:\"FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE\",value:33297,description:\" \"},e.FRAMEBUFFER_ATTACHMENT_RED_SIZE={name:\"FRAMEBUFFER_ATTACHMENT_RED_SIZE\",value:33298,description:\" \"},e.FRAMEBUFFER_ATTACHMENT_GREEN_SIZE={name:\"FRAMEBUFFER_ATTACHMENT_GREEN_SIZE\",value:33299,description:\" \"},e.FRAMEBUFFER_ATTACHMENT_BLUE_SIZE={name:\"FRAMEBUFFER_ATTACHMENT_BLUE_SIZE\",value:33300,description:\" \"},e.FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE={name:\"FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE\",value:33301,description:\" \"},e.FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE={name:\"FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE\",value:33302,description:\" \"},e.FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE={name:\"FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE\",value:33303,description:\" \"},e.FRAMEBUFFER_DEFAULT={name:\"FRAMEBUFFER_DEFAULT\",value:33304,description:\" \"},e.DEPTH24_STENCIL8={name:\"DEPTH24_STENCIL8\",value:35056,description:\" \"},e.DRAW_FRAMEBUFFER_BINDING={name:\"DRAW_FRAMEBUFFER_BINDING\",value:36006,description:\" \"},e.READ_FRAMEBUFFER={name:\"READ_FRAMEBUFFER\",value:36008,description:\" \"},e.DRAW_FRAMEBUFFER={name:\"DRAW_FRAMEBUFFER\",value:36009,description:\" \"},e.READ_FRAMEBUFFER_BINDING={name:\"READ_FRAMEBUFFER_BINDING\",value:36010,description:\" \"},e.RENDERBUFFER_SAMPLES={name:\"RENDERBUFFER_SAMPLES\",value:36011,description:\" \"},e.FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER={name:\"FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER\",value:36052,description:\" \"},e.FRAMEBUFFER_INCOMPLETE_MULTISAMPLE={name:\"FRAMEBUFFER_INCOMPLETE_MULTISAMPLE\",value:36182,description:\" \"},e.UNIFORM_BUFFER={name:\"UNIFORM_BUFFER\",value:35345,description:\" \"},e.UNIFORM_BUFFER_BINDING={name:\"UNIFORM_BUFFER_BINDING\",value:35368,description:\" \"},e.UNIFORM_BUFFER_START={name:\"UNIFORM_BUFFER_START\",value:35369,description:\" \"},e.UNIFORM_BUFFER_SIZE={name:\"UNIFORM_BUFFER_SIZE\",value:35370,description:\" \"},e.MAX_VERTEX_UNIFORM_BLOCKS={name:\"MAX_VERTEX_UNIFORM_BLOCKS\",value:35371,description:\" \"},e.MAX_FRAGMENT_UNIFORM_BLOCKS={name:\"MAX_FRAGMENT_UNIFORM_BLOCKS\",value:35373,description:\" \"},e.MAX_COMBINED_UNIFORM_BLOCKS={name:\"MAX_COMBINED_UNIFORM_BLOCKS\",value:35374,description:\" \"},e.MAX_UNIFORM_BUFFER_BINDINGS={name:\"MAX_UNIFORM_BUFFER_BINDINGS\",value:35375,description:\" \"},e.MAX_UNIFORM_BLOCK_SIZE={name:\"MAX_UNIFORM_BLOCK_SIZE\",value:35376,description:\" \"},e.MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS={name:\"MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS\",value:35377,description:\" \"},e.MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS={name:\"MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS\",value:35379,description:\" \"},e.UNIFORM_BUFFER_OFFSET_ALIGNMENT={name:\"UNIFORM_BUFFER_OFFSET_ALIGNMENT\",value:35380,description:\" \"},e.ACTIVE_UNIFORM_BLOCKS={name:\"ACTIVE_UNIFORM_BLOCKS\",value:35382,description:\" \"},e.UNIFORM_TYPE={name:\"UNIFORM_TYPE\",value:35383,description:\" \"},e.UNIFORM_SIZE={name:\"UNIFORM_SIZE\",value:35384,description:\" \"},e.UNIFORM_BLOCK_INDEX={name:\"UNIFORM_BLOCK_INDEX\",value:35386,description:\" \"},e.UNIFORM_OFFSET={name:\"UNIFORM_OFFSET\",value:35387,description:\" \"},e.UNIFORM_ARRAY_STRIDE={name:\"UNIFORM_ARRAY_STRIDE\",value:35388,description:\" \"},e.UNIFORM_MATRIX_STRIDE={name:\"UNIFORM_MATRIX_STRIDE\",value:35389,description:\" \"},e.UNIFORM_IS_ROW_MAJOR={name:\"UNIFORM_IS_ROW_MAJOR\",value:35390,description:\" \"},e.UNIFORM_BLOCK_BINDING={name:\"UNIFORM_BLOCK_BINDING\",value:35391,description:\" \"},e.UNIFORM_BLOCK_DATA_SIZE={name:\"UNIFORM_BLOCK_DATA_SIZE\",value:35392,description:\" \"},e.UNIFORM_BLOCK_ACTIVE_UNIFORMS={name:\"UNIFORM_BLOCK_ACTIVE_UNIFORMS\",value:35394,description:\" \"},e.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES={name:\"UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES\",value:35395,description:\" \"},e.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER={name:\"UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER\",value:35396,description:\" \"},e.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER={name:\"UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER\",value:35398,description:\" \"},e.OBJECT_TYPE={name:\"OBJECT_TYPE\",value:37138,description:\" \"},e.SYNC_CONDITION={name:\"SYNC_CONDITION\",value:37139,description:\" \"},e.SYNC_STATUS={name:\"SYNC_STATUS\",value:37140,description:\" \"},e.SYNC_FLAGS={name:\"SYNC_FLAGS\",value:37141,description:\" \"},e.SYNC_FENCE={name:\"SYNC_FENCE\",value:37142,description:\" \"},e.SYNC_GPU_COMMANDS_COMPLETE={name:\"SYNC_GPU_COMMANDS_COMPLETE\",value:37143,description:\" \"},e.UNSIGNALED={name:\"UNSIGNALED\",value:37144,description:\" \"},e.SIGNALED={name:\"SIGNALED\",value:37145,description:\" \"},e.ALREADY_SIGNALED={name:\"ALREADY_SIGNALED\",value:37146,description:\" \"},e.TIMEOUT_EXPIRED={name:\"TIMEOUT_EXPIRED\",value:37147,description:\" \"},e.CONDITION_SATISFIED={name:\"CONDITION_SATISFIED\",value:37148,description:\" \"},e.WAIT_FAILED={name:\"WAIT_FAILED\",value:37149,description:\" \"},e.SYNC_FLUSH_COMMANDS_BIT={name:\"SYNC_FLUSH_COMMANDS_BIT\",value:1,description:\" \"},e.COLOR={name:\"COLOR\",value:6144,description:\" \"},e.DEPTH={name:\"DEPTH\",value:6145,description:\" \"},e.STENCIL={name:\"STENCIL\",value:6146,description:\" \"},e.MIN={name:\"MIN\",value:32775,description:\" \"},e.MAX={name:\"MAX\",value:32776,description:\" \"},e.DEPTH_COMPONENT24={name:\"DEPTH_COMPONENT24\",value:33190,description:\" \"},e.STREAM_READ={name:\"STREAM_READ\",value:35041,description:\" \"},e.STREAM_COPY={name:\"STREAM_COPY\",value:35042,description:\" \"},e.STATIC_READ={name:\"STATIC_READ\",value:35045,description:\" \"},e.STATIC_COPY={name:\"STATIC_COPY\",value:35046,description:\" \"},e.DYNAMIC_READ={name:\"DYNAMIC_READ\",value:35049,description:\" \"},e.DYNAMIC_COPY={name:\"DYNAMIC_COPY\",value:35050,description:\" \"},e.DEPTH_COMPONENT32F={name:\"DEPTH_COMPONENT32F\",value:36012,description:\" \"},e.DEPTH32F_STENCIL8={name:\"DEPTH32F_STENCIL8\",value:36013,description:\" \"},e.INVALID_INDEX={name:\"INVALID_INDEX\",value:4294967295,description:\" \"},e.TIMEOUT_IGNORED={name:\"TIMEOUT_IGNORED\",value:-1,description:\" \"},e.MAX_CLIENT_WAIT_TIMEOUT_WEBGL={name:\"MAX_CLIENT_WAIT_TIMEOUT_WEBGL\",value:37447,description:\" \"},e.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE={name:\"VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE\",value:35070,description:\"Describes the frequency divisor used for instanced rendering.\",extensionName:\"ANGLE_instanced_arrays\"},e.UNMASKED_VENDOR_WEBGL={name:\"UNMASKED_VENDOR_WEBGL\",value:37445,description:\"Passed to getParameter to get the vendor string of the graphics driver.\",extensionName:\"ANGLE_instanced_arrays\"},e.UNMASKED_RENDERER_WEBGL={name:\"UNMASKED_RENDERER_WEBGL\",value:37446,description:\"Passed to getParameter to get the renderer string of the graphics driver.\",extensionName:\"WEBGL_debug_renderer_info\"},e.MAX_TEXTURE_MAX_ANISOTROPY_EXT={name:\"MAX_TEXTURE_MAX_ANISOTROPY_EXT\",value:34047,description:\"Returns the maximum available anisotropy.\",extensionName:\"EXT_texture_filter_anisotropic\"},e.TEXTURE_MAX_ANISOTROPY_EXT={name:\"TEXTURE_MAX_ANISOTROPY_EXT\",value:34046,description:\"Passed to texParameter to set the desired maximum anisotropy for a texture.\",extensionName:\"EXT_texture_filter_anisotropic\"},e.COMPRESSED_RGB_S3TC_DXT1_EXT={name:\"COMPRESSED_RGB_S3TC_DXT1_EXT\",value:33776,description:\"A DXT1-compressed image in an RGB image format.\",extensionName:\"WEBGL_compressed_texture_s3tc\"},e.COMPRESSED_RGBA_S3TC_DXT1_EXT={name:\"COMPRESSED_RGBA_S3TC_DXT1_EXT\",value:33777,description:\"A DXT1-compressed image in an RGB image format with a simple on/off alpha value.\",extensionName:\"WEBGL_compressed_texture_s3tc\"},e.COMPRESSED_RGBA_S3TC_DXT3_EXT={name:\"COMPRESSED_RGBA_S3TC_DXT3_EXT\",value:33778,description:\"A DXT3-compressed image in an RGBA image format. Compared to a 32-bit RGBA texture, it offers 4:1 compression.\",extensionName:\"WEBGL_compressed_texture_s3tc\"},e.COMPRESSED_RGBA_S3TC_DXT5_EXT={name:\"COMPRESSED_RGBA_S3TC_DXT5_EXT\",value:33779,description:\"A DXT5-compressed image in an RGBA image format. It also provides a 4:1 compression, but differs to the DXT3 compression in how the alpha compression is done.\",extensionName:\"WEBGL_compressed_texture_s3tc\"},e.COMPRESSED_R11_EAC={name:\"COMPRESSED_R11_EAC\",value:37488,description:\"One-channel (red) unsigned format compression.\",extensionName:\"WEBGL_compressed_texture_etc\"},e.COMPRESSED_SIGNED_R11_EAC={name:\"COMPRESSED_SIGNED_R11_EAC\",value:37489,description:\"One-channel (red) signed format compression.\",extensionName:\"WEBGL_compressed_texture_etc\"},e.COMPRESSED_RG11_EAC={name:\"COMPRESSED_RG11_EAC\",value:37490,description:\"Two-channel (red and green) unsigned format compression.\",extensionName:\"WEBGL_compressed_texture_etc\"},e.COMPRESSED_SIGNED_RG11_EAC={name:\"COMPRESSED_SIGNED_RG11_EAC\",value:37491,description:\"Two-channel (red and green) signed format compression.\",extensionName:\"WEBGL_compressed_texture_etc\"},e.COMPRESSED_RGB8_ETC2={name:\"COMPRESSED_RGB8_ETC2\",value:37492,description:\"Compresses RBG8 data with no alpha channel.\",extensionName:\"WEBGL_compressed_texture_etc\"},e.COMPRESSED_RGBA8_ETC2_EAC={name:\"COMPRESSED_RGBA8_ETC2_EAC\",value:37493,description:\"Compresses RGBA8 data. The RGB part is encoded the same as RGB_ETC2, but the alpha part is encoded separately.\",extensionName:\"WEBGL_compressed_texture_etc\"},e.COMPRESSED_SRGB8_ETC2={name:\"COMPRESSED_SRGB8_ETC2\",value:37494,description:\"Compresses sRBG8 data with no alpha channel.\",extensionName:\"WEBGL_compressed_texture_etc\"},e.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC={name:\"COMPRESSED_SRGB8_ALPHA8_ETC2_EAC\",value:37495,description:\"Compresses sRGBA8 data. The sRGB part is encoded the same as SRGB_ETC2, but the alpha part is encoded separately.\",extensionName:\"WEBGL_compressed_texture_etc\"},e.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2={name:\"COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2\",value:37496,description:\"Similar to RGB8_ETC, but with ability to punch through the alpha channel, which means to make it completely opaque or transparent.\",extensionName:\"WEBGL_compressed_texture_etc\"},e.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2={name:\"COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2\",value:37497,description:\"Similar to SRGB8_ETC, but with ability to punch through the alpha channel, which means to make it completely opaque or transparent.\",extensionName:\"WEBGL_compressed_texture_etc\"},e.COMPRESSED_RGB_PVRTC_4BPPV1_IMG={name:\"COMPRESSED_RGB_PVRTC_4BPPV1_IMG\",value:35840,description:\"RGB compression in 4-bit mode. One block for each 4×4 pixels.\",extensionName:\"WEBGL_compressed_texture_pvrtc\"},e.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG={name:\"COMPRESSED_RGBA_PVRTC_4BPPV1_IMG\",value:35842,description:\"RGBA compression in 4-bit mode. One block for each 4×4 pixels.\",extensionName:\"WEBGL_compressed_texture_pvrtc\"},e.COMPRESSED_RGB_PVRTC_2BPPV1_IMG={name:\"COMPRESSED_RGB_PVRTC_2BPPV1_IMG\",value:35841,description:\"RGB compression in 2-bit mode. One block for each 8×4 pixels.\",extensionName:\"WEBGL_compressed_texture_pvrtc\"},e.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG={name:\"COMPRESSED_RGBA_PVRTC_2BPPV1_IMG\",value:35843,description:\"RGBA compression in 2-bit mode. One block for each 8×4 pixe\",extensionName:\"WEBGL_compressed_texture_pvrtc\"},e.COMPRESSED_RGB_ETC1_WEBGL={name:\"COMPRESSED_RGB_ETC1_WEBGL\",value:36196,description:\"Compresses 24-bit RGB data with no alpha channel.\",extensionName:\"WEBGL_compressed_texture_etc1\"},e.COMPRESSED_RGB_ATC_WEBGL={name:\"COMPRESSED_RGB_ATC_WEBGL\",value:35986,description:\"Compresses RGB textures with no alpha channel.\",extensionName:\"WEBGL_compressed_texture_atc\"},e.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL={name:\"COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL\",value:35986,description:\"Compresses RGBA textures using explicit alpha encoding (useful when alpha transitions are sharp).\",extensionName:\"WEBGL_compressed_texture_atc\"},e.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL={name:\"COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL\",value:34798,description:\"Compresses RGBA textures using interpolated alpha encoding (useful when alpha transitions are gradient).\",extensionName:\"WEBGL_compressed_texture_atc\"},e.UNSIGNED_INT_24_8_WEBGL={name:\"UNSIGNED_INT_24_8_WEBGL\",value:34042,description:\"Unsigned integer type for 24-bit depth texture data.\",extensionName:\"WEBGL_depth_texture\"},e.HALF_FLOAT_OES={name:\"HALF_FLOAT_OES\",value:36193,description:\"Half floating-point type (16-bit).\",extensionName:\"OES_texture_half_float\"},e.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT={name:\"FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT\",value:33297,description:\" \",extensionName:\"WEBGL_color_buffer_float\"},e.UNSIGNED_NORMALIZED_EXT={name:\"UNSIGNED_NORMALIZED_EXT\",value:35863,description:\" \",extensionName:\"WEBGL_color_buffer_float\"},e.MIN_EXT={name:\"MIN_EXT\",value:32775,description:\"Produces the minimum color components of the source and destination colors.\",extensionName:\"EXT_blend_minmax\"},e.MAX_EXT={name:\"MAX_EXT\",value:32776,description:\"Produces the maximum color components of the source and destination colors.\",extensionName:\"EXT_blend_minmax\"},e.SRGB_EXT={name:\"SRGB_EXT\",value:35904,description:\"Unsized sRGB format that leaves the precision up to the driver.\",extensionName:\"EXT_sRGB\"},e.SRGB_ALPHA_EXT={name:\"SRGB_ALPHA_EXT\",value:35906,description:\"Unsized sRGB format with unsized alpha component.\",extensionName:\"EXT_sRGB\"},e.SRGB8_ALPHA8_EXT={name:\"SRGB8_ALPHA8_EXT\",value:35907,description:\"Sized (8-bit) sRGB and alpha formats.\",extensionName:\"EXT_sRGB\"},e.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT={name:\"FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT\",value:33296,description:\"Returns the framebuffer color encoding.\",extensionName:\"EXT_sRGB\"},e.FRAGMENT_SHADER_DERIVATIVE_HINT_OES={name:\"FRAGMENT_SHADER_DERIVATIVE_HINT_OES\",value:35723,description:\"Indicates the accuracy of the derivative calculation for the GLSL built-in functions: dFdx, dFdy, and fwidth.\",extensionName:\"OES_standard_derivatives\"},e.COLOR_ATTACHMENT0_WEBGL={name:\"COLOR_ATTACHMENT0_WEBGL\",value:36064,description:\"Framebuffer color attachment point\",extensionName:\"WEBGL_draw_buffers\"},e.COLOR_ATTACHMENT1_WEBGL={name:\"COLOR_ATTACHMENT1_WEBGL\",value:36065,description:\"Framebuffer color attachment point\",extensionName:\"WEBGL_draw_buffers\"},e.COLOR_ATTACHMENT2_WEBGL={name:\"COLOR_ATTACHMENT2_WEBGL\",value:36066,description:\"Framebuffer color attachment point\",extensionName:\"WEBGL_draw_buffers\"},e.COLOR_ATTACHMENT3_WEBGL={name:\"COLOR_ATTACHMENT3_WEBGL\",value:36067,description:\"Framebuffer color attachment point\",extensionName:\"WEBGL_draw_buffers\"},e.COLOR_ATTACHMENT4_WEBGL={name:\"COLOR_ATTACHMENT4_WEBGL\",value:36068,description:\"Framebuffer color attachment point\",extensionName:\"WEBGL_draw_buffers\"},e.COLOR_ATTACHMENT5_WEBGL={name:\"COLOR_ATTACHMENT5_WEBGL\",value:36069,description:\"Framebuffer color attachment point\",extensionName:\"WEBGL_draw_buffers\"},e.COLOR_ATTACHMENT6_WEBGL={name:\"COLOR_ATTACHMENT6_WEBGL\",value:36070,description:\"Framebuffer color attachment point\",extensionName:\"WEBGL_draw_buffers\"},e.COLOR_ATTACHMENT7_WEBGL={name:\"COLOR_ATTACHMENT7_WEBGL\",value:36071,description:\"Framebuffer color attachment point\",extensionName:\"WEBGL_draw_buffers\"},e.COLOR_ATTACHMENT8_WEBGL={name:\"COLOR_ATTACHMENT8_WEBGL\",value:36072,description:\"Framebuffer color attachment point\",extensionName:\"WEBGL_draw_buffers\"},e.COLOR_ATTACHMENT9_WEBGL={name:\"COLOR_ATTACHMENT9_WEBGL\",value:36073,description:\"Framebuffer color attachment point\",extensionName:\"WEBGL_draw_buffers\"},e.COLOR_ATTACHMENT10_WEBGL={name:\"COLOR_ATTACHMENT10_WEBGL\",value:36074,description:\"Framebuffer color attachment point\",extensionName:\"WEBGL_draw_buffers\"},e.COLOR_ATTACHMENT11_WEBGL={name:\"COLOR_ATTACHMENT11_WEBGL\",value:36075,description:\"Framebuffer color attachment point\",extensionName:\"WEBGL_draw_buffers\"},e.COLOR_ATTACHMENT12_WEBGL={name:\"COLOR_ATTACHMENT12_WEBGL\",value:36076,description:\"Framebuffer color attachment point\",extensionName:\"WEBGL_draw_buffers\"},e.COLOR_ATTACHMENT13_WEBGL={name:\"COLOR_ATTACHMENT13_WEBGL\",value:36077,description:\"Framebuffer color attachment point\",extensionName:\"WEBGL_draw_buffers\"},e.COLOR_ATTACHMENT14_WEBGL={name:\"COLOR_ATTACHMENT14_WEBGL\",value:36078,description:\"Framebuffer color attachment point\",extensionName:\"WEBGL_draw_buffers\"},e.COLOR_ATTACHMENT15_WEBGL={name:\"COLOR_ATTACHMENT15_WEBGL\",value:36079,description:\"Framebuffer color attachment point\",extensionName:\"WEBGL_draw_buffers\"},e.DRAW_BUFFER0_WEBGL={name:\"DRAW_BUFFER0_WEBGL\",value:34853,description:\"Draw buffer\",extensionName:\"WEBGL_draw_buffers\"},e.DRAW_BUFFER1_WEBGL={name:\"DRAW_BUFFER1_WEBGL\",value:34854,description:\"Draw buffer\",extensionName:\"WEBGL_draw_buffers\"},e.DRAW_BUFFER2_WEBGL={name:\"DRAW_BUFFER2_WEBGL\",value:34855,description:\"Draw buffer\",extensionName:\"WEBGL_draw_buffers\"},e.DRAW_BUFFER3_WEBGL={name:\"DRAW_BUFFER3_WEBGL\",value:34856,description:\"Draw buffer\",extensionName:\"WEBGL_draw_buffers\"},e.DRAW_BUFFER4_WEBGL={name:\"DRAW_BUFFER4_WEBGL\",value:34857,description:\"Draw buffer\",extensionName:\"WEBGL_draw_buffers\"},e.DRAW_BUFFER5_WEBGL={name:\"DRAW_BUFFER5_WEBGL\",value:34858,description:\"Draw buffer\",extensionName:\"WEBGL_draw_buffers\"},e.DRAW_BUFFER6_WEBGL={name:\"DRAW_BUFFER6_WEBGL\",value:34859,description:\"Draw buffer\",extensionName:\"WEBGL_draw_buffers\"},e.DRAW_BUFFER7_WEBGL={name:\"DRAW_BUFFER7_WEBGL\",value:34860,description:\"Draw buffer\",extensionName:\"WEBGL_draw_buffers\"},e.DRAW_BUFFER8_WEBGL={name:\"DRAW_BUFFER8_WEBGL\",value:34861,description:\"Draw buffer\",extensionName:\"WEBGL_draw_buffers\"},e.DRAW_BUFFER9_WEBGL={name:\"DRAW_BUFFER9_WEBGL\",value:34862,description:\"Draw buffer\",extensionName:\"WEBGL_draw_buffers\"},e.DRAW_BUFFER10_WEBGL={name:\"DRAW_BUFFER10_WEBGL\",value:34863,description:\"Draw buffer\",extensionName:\"WEBGL_draw_buffers\"},e.DRAW_BUFFER11_WEBGL={name:\"DRAW_BUFFER11_WEBGL\",value:34864,description:\"Draw buffer\",extensionName:\"WEBGL_draw_buffers\"},e.DRAW_BUFFER12_WEBGL={name:\"DRAW_BUFFER12_WEBGL\",value:34865,description:\"Draw buffer\",extensionName:\"WEBGL_draw_buffers\"},e.DRAW_BUFFER13_WEBGL={name:\"DRAW_BUFFER13_WEBGL\",value:34866,description:\"Draw buffer\",extensionName:\"WEBGL_draw_buffers\"},e.DRAW_BUFFER14_WEBGL={name:\"DRAW_BUFFER14_WEBGL\",value:34867,description:\"Draw buffer\",extensionName:\"WEBGL_draw_buffers\"},e.DRAW_BUFFER15_WEBGL={name:\"DRAW_BUFFER15_WEBGL\",value:34868,description:\"Draw buffer\",extensionName:\"WEBGL_draw_buffers\"},e.MAX_COLOR_ATTACHMENTS_WEBGL={name:\"MAX_COLOR_ATTACHMENTS_WEBGL\",value:36063,description:\"Maximum number of framebuffer color attachment points\",extensionName:\"WEBGL_draw_buffers\"},e.MAX_DRAW_BUFFERS_WEBGL={name:\"MAX_DRAW_BUFFERS_WEBGL\",value:34852,description:\"Maximum number of draw buffers\",extensionName:\"WEBGL_draw_buffers\"},e.VERTEX_ARRAY_BINDING_OES={name:\"VERTEX_ARRAY_BINDING_OES\",value:34229,description:\"The bound vertex array object (VAO).\",extensionName:\"VERTEX_ARRAY_BINDING_OES\"},e.QUERY_COUNTER_BITS_EXT={name:\"QUERY_COUNTER_BITS_EXT\",value:34916,description:\"The number of bits used to hold the query result for the given target.\",extensionName:\"EXT_disjoint_timer_query\"},e.CURRENT_QUERY_EXT={name:\"CURRENT_QUERY_EXT\",value:34917,description:\"The currently active query.\",extensionName:\"EXT_disjoint_timer_query\"},e.QUERY_RESULT_EXT={name:\"QUERY_RESULT_EXT\",value:34918,description:\"The query result.\",extensionName:\"EXT_disjoint_timer_query\"},e.QUERY_RESULT_AVAILABLE_EXT={name:\"QUERY_RESULT_AVAILABLE_EXT\",value:34919,description:\"A Boolean indicating whether or not a query result is available.\",extensionName:\"EXT_disjoint_timer_query\"},e.TIME_ELAPSED_EXT={name:\"TIME_ELAPSED_EXT\",value:35007,description:\"Elapsed time (in nanoseconds).\",extensionName:\"EXT_disjoint_timer_query\"},e.TIMESTAMP_EXT={name:\"TIMESTAMP_EXT\",value:36392,description:\"The current time.\",extensionName:\"EXT_disjoint_timer_query\"},e.GPU_DISJOINT_EXT={name:\"GPU_DISJOINT_EXT\",value:36795,description:\"A Boolean indicating whether or not the GPU performed any disjoint operation.\",extensionName:\"EXT_disjoint_timer_query\"},e.zeroMeaningByCommand={getError:\"NO_ERROR\",blendFunc:\"ZERO\",blendFuncSeparate:\"ZERO\",readBuffer:\"NONE\",getFramebufferAttachmentParameter:\"NONE\",texParameterf:\"NONE\",texParameteri:\"NONE\",drawArrays:\"POINTS\",drawElements:\"POINTS\",drawArraysInstanced:\"POINTS\",drawArraysInstancedAngle:\"POINTS\",drawBuffers:\"POINTS\",drawElementsInstanced:\"POINTS\",drawRangeElements:\"POINTS\"},e.oneMeaningByCommand={blendFunc:\"ONE\",blendFuncSeparate:\"ONE\",drawArrays:\"LINES\",drawElements:\"LINES\",drawArraysInstanced:\"LINES\",drawArraysInstancedAngle:\"LINES\",drawBuffers:\"LINES\",drawElementsInstanced:\"LINES\",drawRangeElements:\"LINES\"},e}(),g={},v={};!function(){for(var e in f)if(f.hasOwnProperty(e)){var t=f[e];g[t.name]=t,v[t.value]=t}}();var _,E,C,A,R,S,y,T,b,w,x,L,I,O,F,M,N,P,B,$,k,D=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),U=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return D(t,e),Object.defineProperty(t.prototype,\"analyserName\",{get:function(){return t.analyserName},enumerable:!0,configurable:!0}),t.prototype.appendToAnalysis=function(e,t){if(e.commands){for(var n={total:0,totalTriangles:0,totalTriangleStrip:0,totalTriangleFan:0,totalLines:0,totalLineStrip:0,totalLineLoop:0,totalPoints:0},i=0,r=e.commands;i=3||\"drawArraysInstanced\"===o.name&&o.commandArguments.length>=3||\"drawArraysInstancedANGLE\"===o.name&&o.commandArguments.length>=3?this.appendToPrimitives(n,o.commandArguments[0],o.commandArguments[2]):\"drawElements\"===o.name&&o.commandArguments.length>=2||\"drawElementsInstanced\"===o.name&&o.commandArguments.length>=2||\"drawElementsInstancedANGLE\"===o.name&&o.commandArguments.length>=2?this.appendToPrimitives(n,o.commandArguments[0],o.commandArguments[1]):\"drawRangeElements\"===o.name&&o.commandArguments.length>=4&&this.appendToPrimitives(n,o.commandArguments[0],o.commandArguments[3])}t.total=n.total,t.triangles=n.totalTriangles,t.triangleStrip=n.totalTriangleStrip,t.triangleFan=n.totalTriangleFan,t.lines=n.totalLines,t.lineStrip=n.totalLineStrip,t.lineLoop=n.totalLineLoop,t.points=n.totalPoints}},t.prototype.appendToPrimitives=function(e,t,n){t===f.POINTS.value?e.totalPoints+=n:t===f.LINES.value?e.totalLines+=n:t===f.LINE_STRIP.value?e.totalLineStrip+=n:t===f.LINE_LOOP.value?e.totalLineLoop+=n:t===f.TRIANGLES.value?e.totalTriangles+=n:t===f.TRIANGLE_STRIP.value?e.totalTriangleStrip+=n:t===f.TRIANGLE_FAN.value&&(e.totalTriangleFan+=n),e.total+=n},t.analyserName=\"Primitives\",t}(l),G=function(){function e(e){this.contextInformation=e,this.analysers=[],this.initAnalysers()}return e.prototype.appendAnalyses=function(e){for(var t in this.analysers){if(this.analysers.hasOwnProperty(t))this.analysers[t].appendAnalysis(e)}},e.prototype.initAnalysers=function(){this.analysers.push(new h(this.contextInformation),new m(this.contextInformation),new U(this.contextInformation))},e}(),W=function(){function e(){}return e.storeOriginFunction=function(e,t){if(e&&e[t]){var n=this.getOriginFunctionName(t);e[n]||(e[n]=e[t])}},e.storePrototypeOriginFunction=function(e,t){if(e&&e.prototype[t]){var n=this.getOriginFunctionName(t);e.prototype[n]||(e.prototype[n]=e.prototype[t])}},e.executePrototypeOriginFunction=function(e,t,n,i){if(e){var r=this.getOriginFunctionName(n);if(t.prototype[r])return e[r]||(e[r]=t.prototype[r]),this.executeFunction(e,r,i)}},e.executeOriginFunction=function(e,t,n){if(e){var i=this.getOriginFunctionName(t);if(e[i])return this.executeFunction(e,i,n)}},e.executeFunction=function(e,t,n){var i=n;if(void 0===i||0===i.length)return e[t]();switch(i.length){case 1:return e[t](i[0]);case 2:return e[t](i[0],i[1]);case 3:return e[t](i[0],i[1],i[2]);case 4:return e[t](i[0],i[1],i[2],i[3]);case 5:return e[t](i[0],i[1],i[2],i[3],i[4]);case 6:return e[t](i[0],i[1],i[2],i[3],i[4],i[5]);case 7:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6]);case 8:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7]);case 9:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8]);case 10:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8],i[9]);case 11:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8],i[9],i[10]);case 12:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8],i[9],i[10],i[11]);case 13:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8],i[9],i[10],i[11],i[12]);case 14:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8],i[9],i[10],i[11],i[12],i[13]);case 15:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8],i[9],i[10],i[11],i[12],i[13],i[14]);case 16:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8],i[9],i[10],i[11],i[12],i[13],i[14],i[15]);case 17:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8],i[9],i[10],i[11],i[12],i[13],i[14],i[15],i[16]);case 18:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8],i[9],i[10],i[11],i[12],i[13],i[14],i[15],i[16],i[17]);case 19:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8],i[9],i[10],i[11],i[12],i[13],i[14],i[15],i[16],i[17],i[18]);case 20:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8],i[9],i[10],i[11],i[12],i[13],i[14],i[15],i[16],i[17],i[18],i[19]);default:return e[t].apply(e,i)}},e.getOriginFunctionName=function(e){return this.originFunctionPrefix+e},e.originFunctionPrefix=\"__SPECTOR_Origin_\",e}(),V=function(){function e(){}return e.getStackTrace=function(e,t){void 0===e&&(e=0),void 0===t&&(t=0);var n=[];try{throw new Error(\"Errorator.\")}catch(e){if(e.stack)for(var i=0,r=(o=e.stack.split(\"\\n\")).length;i0;i++)n.shift();for(i=0;i0;i++)n.pop()}return n},e}(),H=function(){function e(){}return e.getWebGlObjectTag=function(t){return t[e.SPECTOROBJECTTAGKEY]},e.attachWebGlObjectTag=function(t,n){n.displayText=e.stringifyWebGlObjectTag(n),t[e.SPECTOROBJECTTAGKEY]=n},e.stringifyWebGlObjectTag=function(e){return e?e.typeName+\" - ID: \"+e.id:\"No tag available.\"},e.SPECTOROBJECTTAGKEY=\"__SPECTOR_Object_TAG\",e}(),X=function(){function e(){this.id=0}return Object.defineProperty(e.prototype,\"type\",{get:function(){return window[this.typeName]||null},enumerable:!0,configurable:!0}),e.prototype.tagWebGlObject=function(e){if(this.type){var t;if(!e)return t;if(t=H.getWebGlObjectTag(e))return t;if(e instanceof this.type){var n=this.getNextId();return t={typeName:this.typeName,id:n},H.attachWebGlObjectTag(e,t),t}return t}},e.prototype.getNextId=function(){return this.id++},e}(),j=function(){function e(e){this.options=e}return e.prototype.createCapture=function(e,t,n){var i=V.getStackTrace(4,1),r=0===e.name.indexOf(\"uniform\")?this.stringifyUniform(e.arguments):this.stringify(e.arguments,e.result),o={id:t,startTime:e.startTime,commandEndTime:e.endTime,endTime:0,name:e.name,commandArguments:e.arguments,result:e.result,stackTrace:i,status:0,marker:n,text:r};this.transformCapture(o);for(var s=0;s50&&(o.commandArguments[s]=\"Array Length: \"+a.length)}if(o.commandArguments){var c=[];for(s=0;s0&&(n+=\": \"+this.stringifyArgs(e).join(\", \")),t&&(n+=\" -> \"+this.stringifyResult(t)),n},e.prototype.stringifyUniform=function(e){var t=this.spiedCommandName;if(e&&e.length>0){var n=[];n.push(this.stringifyValue(e[0]));for(var i=1;i-1,i}return Z(t,e),Object.defineProperty(t.prototype,\"spiedCommandName\",{get:function(){return this.internalSpiedCommandName},enumerable:!0,configurable:!0}),t.prototype.transformCapture=function(e){this.isDeprecated&&(e.status=50)},t}(j),ee=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),te=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return ee(t,e),Object.defineProperty(t.prototype,\"spiedCommandName\",{get:function(){return t.commandName},enumerable:!0,configurable:!0}),t.prototype.stringifyArgs=function(e){var t=[];return t.push(e[0]),t},t.commandName=\"disableVertexAttribArray\",t}(j),ne=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),ie=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return ne(t,e),Object.defineProperty(t.prototype,\"spiedCommandName\",{get:function(){return t.commandName},enumerable:!0,configurable:!0}),t.prototype.stringifyArgs=function(e){var t=[];return t.push(f.stringifyWebGlConstant(e[0],\"drawArrays\")),t.push(e[1]),t.push(e[2]),t},t.commandName=\"drawArrays\",t}(j),re=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),oe=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return re(t,e),Object.defineProperty(t.prototype,\"spiedCommandName\",{get:function(){return t.commandName},enumerable:!0,configurable:!0}),t.prototype.stringifyArgs=function(e){var t=[];return t.push(f.stringifyWebGlConstant(e[0],\"drawArraysInstanced\")),t.push(e[1]),t.push(e[2]),t.push(e[3]),t},t.commandName=\"drawArraysInstanced\",t}(j),se=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),ae=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return se(t,e),Object.defineProperty(t.prototype,\"spiedCommandName\",{get:function(){return t.commandName},enumerable:!0,configurable:!0}),t.prototype.stringifyArgs=function(e){var t=[];return t.push(f.stringifyWebGlConstant(e[0],\"drawArraysInstancedANGLE\")),t.push(e[1]),t.push(e[2]),t.push(e[3]),t},t.commandName=\"drawArraysInstancedANGLE\",t}(j),ce=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),le=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return ce(t,e),Object.defineProperty(t.prototype,\"spiedCommandName\",{get:function(){return t.commandName},enumerable:!0,configurable:!0}),t.prototype.stringifyArgs=function(e){var t=[];return t.push(f.stringifyWebGlConstant(e[0],\"drawElements\")),t.push(e[1]),t.push(f.stringifyWebGlConstant(e[2],\"drawElements\")),t.push(e[3]),t},t.commandName=\"drawElements\",t}(j),ue=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),he=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return ue(t,e),Object.defineProperty(t.prototype,\"spiedCommandName\",{get:function(){return t.commandName},enumerable:!0,configurable:!0}),t.prototype.stringifyArgs=function(e){var t=[];return t.push(f.stringifyWebGlConstant(e[0],\"drawElementsInstancedANGLE\")),t.push(e[1]),t.push(f.stringifyWebGlConstant(e[2],\"drawElementsInstancedANGLE\")),t.push(e[3]),t.push(e[4]),t},t.commandName=\"drawElementsInstancedANGLE\",t}(j),de=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),pe=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return de(t,e),Object.defineProperty(t.prototype,\"spiedCommandName\",{get:function(){return t.commandName},enumerable:!0,configurable:!0}),t.prototype.stringifyArgs=function(e){var t=[];return t.push(f.stringifyWebGlConstant(e[0],\"drawElementsInstanced\")),t.push(e[1]),t.push(f.stringifyWebGlConstant(e[2],\"drawElementsInstanced\")),t.push(e[3]),t.push(e[4]),t},t.commandName=\"drawElementsInstanced\",t}(j),me=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),fe=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return me(t,e),Object.defineProperty(t.prototype,\"spiedCommandName\",{get:function(){return t.commandName},enumerable:!0,configurable:!0}),t.prototype.stringifyArgs=function(e){var t=[];return t.push(f.stringifyWebGlConstant(e[0],\"drawRangeElements\")),t.push(e[1]),t.push(e[2]),t.push(e[3]),t.push(f.stringifyWebGlConstant(e[4],\"drawRangeElements\")),t.push(e[5]),t},t.commandName=\"drawRangeElements\",t}(j),ge=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),ve=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return ge(t,e),Object.defineProperty(t.prototype,\"spiedCommandName\",{get:function(){return t.commandName},enumerable:!0,configurable:!0}),t.prototype.stringifyResult=function(e){if(e)return\"name: \"+e.name+\", size: \"+e.size+\", type: \"+e.type},t.commandName=\"getActiveAttrib\",t}(j),_e=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Ee=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return _e(t,e),Object.defineProperty(t.prototype,\"spiedCommandName\",{get:function(){return t.commandName},enumerable:!0,configurable:!0}),t.prototype.stringifyResult=function(e){if(e)return\"name: \"+e.name+\", size: \"+e.size+\", type: \"+e.type},t.commandName=\"getActiveUniform\",t}(j),Ce=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Ae=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Ce(t,e),Object.defineProperty(t.prototype,\"spiedCommandName\",{get:function(){return t.commandName},enumerable:!0,configurable:!0}),t.prototype.stringifyResult=function(e){return e?\"true\":\"false\"},t.commandName=\"getExtension\",t}(j),Re=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Se=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Re(t,e),Object.defineProperty(t.prototype,\"spiedCommandName\",{get:function(){return t.commandName},enumerable:!0,configurable:!0}),t.prototype.stringifyResult=function(e){if(!e)return\"null\";var t=H.getWebGlObjectTag(e);return t?t.displayText:e},t.commandName=\"getParameter\",t}(j),ye=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Te=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return ye(t,e),Object.defineProperty(t.prototype,\"spiedCommandName\",{get:function(){return t.commandName},enumerable:!0,configurable:!0}),t.prototype.stringifyResult=function(e){if(e)return\"min: \"+e.rangeMin+\", max: \"+e.rangeMax+\", precision: \"+e.precision},t.commandName=\"getShaderPrecisionFormat\",t}(j),be=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),we=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return be(t,e),Object.defineProperty(t.prototype,\"spiedCommandName\",{get:function(){return t.commandName},enumerable:!0,configurable:!0}),t.prototype.stringifyResult=function(e){if(e)return\"name: \"+e.name+\", size: \"+e.size+\", type: \"+e.type},t.commandName=\"getTransformFeedbackVarying\",t}(j),xe=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Le=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return xe(t,e),Object.defineProperty(t.prototype,\"spiedCommandName\",{get:function(){return t.commandName},enumerable:!0,configurable:!0}),t.prototype.stringifyArgs=function(e){for(var t=[],n=0;n<4;n++)t.push(e[n].toFixed(0));return t},t.commandName=\"scissor\",t}(j),Ie=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Oe=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Ie(t,e),Object.defineProperty(t.prototype,\"spiedCommandName\",{get:function(){return t.commandName},enumerable:!0,configurable:!0}),t.prototype.stringifyArgs=function(e){var t=[];return t.push(e[0]),t.push(e[1]),t.push(f.stringifyWebGlConstant(e[2],\"vertexAttribPointer\")),t.push(e[3]),t.push(e[4]),t.push(e[5]),t},t.commandName=\"vertexAttribPointer\",t}(j),Fe=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Me=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Fe(t,e),Object.defineProperty(t.prototype,\"spiedCommandName\",{get:function(){return t.commandName},enumerable:!0,configurable:!0}),t.prototype.stringifyArgs=function(e){for(var t=[],n=0;n<4;n++)t.push(e[n].toFixed(0));return t},t.commandName=\"viewport\",t}(j),Ne=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Pe=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Ne(t,e),Object.defineProperty(t.prototype,\"spiedCommandName\",{get:function(){return t.commandName},enumerable:!0,configurable:!0}),t.prototype.stringifyArgs=function(e){var t=[];return t.push(e[0]),t},t.commandName=\"enableVertexAttribArray\",t}(j),Be=function(){function e(e){this.spiedCommandName=e.spiedCommandName,this.spiedCommandRunningContext=e.spiedCommandRunningContext,this.spiedCommand=this.spiedCommandRunningContext[this.spiedCommandName],W.storeOriginFunction(this.spiedCommandRunningContext,this.spiedCommandName),this.callback=e.callback,this.commandOptions={context:e.context,contextVersion:e.contextVersion,extensions:e.extensions,toggleCapture:e.toggleCapture},this.initCustomCommands(),this.initCommand()}return e.prototype.spy=function(){this.spiedCommandRunningContext[this.spiedCommandName]=this.overloadedCommand},e.prototype.unSpy=function(){this.spiedCommandRunningContext[this.spiedCommandName]=this.spiedCommand},e.prototype.createCapture=function(e,t,n){return this.command.createCapture(e,t,n)},e.prototype.initCommand=function(){e.customCommandsConstructors[this.spiedCommandName]?this.command=e.customCommandsConstructors[this.spiedCommandName](this.commandOptions):this.command=new J(this.commandOptions,this.spiedCommandName),this.overloadedCommand=this.getSpy()},e.prototype.getSpy=function(){var e=this;return function(){var t=a.now,n=W.executeOriginFunction(e.spiedCommandRunningContext,e.spiedCommandName,arguments),i=a.now,r={name:e.spiedCommandName,arguments:arguments,result:n,startTime:t,endTime:i};return e.callback(e,r),n}},e.prototype.initCustomCommands=function(){var t;e.customCommandsConstructors||(e.customCommandsConstructors=((t={})[z.commandName]=function(e){return new z(e)},t[q.commandName]=function(e){return new q(e)},t[te.commandName]=function(e){return new te(e)},t[ie.commandName]=function(e){return new ie(e)},t[oe.commandName]=function(e){return new oe(e)},t[ae.commandName]=function(e){return new ae(e)},t[le.commandName]=function(e){return new le(e)},t[pe.commandName]=function(e){return new pe(e)},t[he.commandName]=function(e){return new he(e)},t[fe.commandName]=function(e){return new fe(e)},t[ve.commandName]=function(e){return new ve(e)},t[Ee.commandName]=function(e){return new Ee(e)},t[Ae.commandName]=function(e){return new Ae(e)},t[Se.commandName]=function(e){return new Se(e)},t[Te.commandName]=function(e){return new Te(e)},t[we.commandName]=function(e){return new we(e)},t[Le.commandName]=function(e){return new Le(e)},t[Oe.commandName]=function(e){return new Oe(e)},t[Me.commandName]=function(e){return new Me(e)},t[Pe.commandName]=function(e){return new Pe(e)},t))},e}(),$e=function(){function e(e){this.options=e,this.context=e.context,this.contextVersion=e.contextVersion,this.extensions=e.extensions,this.toggleCapture=e.toggleCapture,this.consumeCommands=this.getConsumeCommands(),this.changeCommandsByState=this.getChangeCommandsByState(),this.commandNameToStates=this.getCommandNameToStates()}return Object.defineProperty(e.prototype,\"requireStartAndStopStates\",{get:function(){return!0},enumerable:!0,configurable:!0}),e.prototype.startCapture=function(e,t,n){return this.quickCapture=t,this.fullCapture=n,this.capturedCommandsByState={},e&&this.requireStartAndStopStates&&(this.currentState={},this.readFromContextNoSideEffects()),this.copyCurrentStateToPrevious(),this.currentState={},this.previousState},e.prototype.stopCapture=function(){return this.requireStartAndStopStates&&this.readFromContextNoSideEffects(),this.analyse(void 0),this.currentState},e.prototype.registerCallbacks=function(e){for(var t in this.changeCommandsByState)if(this.changeCommandsByState.hasOwnProperty(t))for(var n=0,i=this.changeCommandsByState[t];n=0)if(e){for(var r=0;r1&&this.parameters.push(this.getWebgl2Parameters());for(var e={},t=1;t<=this.contextVersion&&!(t>this.parameters.length);t++)if(this.parameters[t-1])for(var n=0,i=this.parameters[t-1];nthis.parameters.length);e++)for(var t=0,n=this.parameters[e-1];t0:\"stencilFunc\"===e.name||\"stencilFuncSeparate\"===e.name?t.stencilFuncStates.indexOf(e.commandArguments[0])>0:\"stencilMask\"!==e.name&&\"stencilMaskSeparate\"!==e.name||t.stencilMaskStates.indexOf(e.commandArguments[0])>0},t.prototype.getConsumeCommands=function(){return d},t.prototype.isStateEnable=function(e,t){return this.context.isEnabled(f.STENCIL_TEST.value)},t.stateName=\"StencilState\",t.stencilOpStates=[f.STENCIL_BACK_FAIL.value,f.STENCIL_BACK_PASS_DEPTH_FAIL.value,f.STENCIL_BACK_PASS_DEPTH_PASS.value,f.STENCIL_FAIL.value,f.STENCIL_PASS_DEPTH_FAIL.value,f.STENCIL_PASS_DEPTH_PASS.value],t.stencilFuncStates=[f.STENCIL_BACK_FUNC.value,f.STENCIL_BACK_REF.value,f.STENCIL_BACK_VALUE_MASK.value,f.STENCIL_FUNC.value,f.STENCIL_REF.value,f.STENCIL_VALUE_MASK.value],t.stencilMaskStates=[f.STENCIL_BACK_WRITEMASK.value,f.STENCIL_WRITEMASK.value],t}(De),ut=function(){function e(){}return e.isSupportedCombination=function(e,t,n){return e=e||f.UNSIGNED_BYTE.value,((t=t||f.RGBA.value)===f.RGB.value||t===f.RGBA.value)&&((n===f.RGB.value||n===f.RGBA.value||n===f.RGBA8.value||n===f.RGBA16F.value||n===f.RGBA32F.value||n===f.RGB16F.value||n===f.RGB32F.value||n===f.R11F_G11F_B10F.value||n===f.SRGB8.value||n===f.SRGB8_ALPHA8.value)&&this.isSupportedComponentType(e))},e.readPixels=function(e,t,n,i,r,o){e.getError();var s,a=i*r*4;if(o===f.UNSIGNED_BYTE.value?s=new Uint8Array(a):(o=f.FLOAT.value,s=new Float32Array(a)),e.readPixels(t,n,i,r,e.RGBA,o,s),!e.getError()){if(o===f.UNSIGNED_BYTE.value)return s;for(var c=new Uint8Array(i*r*4),l=0;l1)for(c=this.context.getParameter(f.MAX_DRAW_BUFFERS.value),l=0;l1?this.context.getFramebufferAttachmentParameter(a,n.value,f.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE.value):f.UNSIGNED_BYTE.value;c===f.RENDERBUFFER.value?this.readFrameBufferAttachmentFromRenderBuffer(e,t,n,i,r,o,s,a,u,l):c===f.TEXTURE.value&&this.readFrameBufferAttachmentFromTexture(e,t,n,i,r,o,s,a,u,l)}}},t.prototype.readFrameBufferAttachmentFromRenderBuffer=function(e,t,n,i,r,o,s,a,c,l){var u=0,h=0;if(l.__SPECTOR_Object_CustomData){var d=l.__SPECTOR_Object_CustomData;if(o=d.width,s=d.height,u=d.samples,h=d.internalFormat,!u&&!ut.isSupportedCombination(c,f.RGBA.value,h))return}else o+=i,s+=r;if(i=r=0,u){var p=e,m=e.createRenderbuffer(),g=e.getParameter(e.RENDERBUFFER_BINDING);e.bindRenderbuffer(e.RENDERBUFFER,m),e.renderbufferStorage(e.RENDERBUFFER,h,o,s),e.bindRenderbuffer(e.RENDERBUFFER,g),e.bindFramebuffer(f.FRAMEBUFFER.value,this.captureFrameBuffer),e.framebufferRenderbuffer(f.FRAMEBUFFER.value,f.COLOR_ATTACHMENT0.value,f.RENDERBUFFER.value,m);var v=p.getParameter(p.READ_FRAMEBUFFER_BINDING),_=p.getParameter(p.DRAW_FRAMEBUFFER_BINDING);p.bindFramebuffer(p.READ_FRAMEBUFFER,t),p.bindFramebuffer(p.DRAW_FRAMEBUFFER,this.captureFrameBuffer),p.blitFramebuffer(0,0,o,s,0,0,o,s,e.COLOR_BUFFER_BIT,e.NEAREST),p.bindFramebuffer(f.FRAMEBUFFER.value,this.captureFrameBuffer),p.bindFramebuffer(p.READ_FRAMEBUFFER,v),p.bindFramebuffer(p.DRAW_FRAMEBUFFER,_),this.context.checkFramebufferStatus(f.FRAMEBUFFER.value)===f.FRAMEBUFFER_COMPLETE.value&&this.getCapture(e,n.name,i,r,o,s,0,0,f.UNSIGNED_BYTE.value),e.bindFramebuffer(f.FRAMEBUFFER.value,t),e.deleteRenderbuffer(m)}else{e.bindFramebuffer(f.FRAMEBUFFER.value,this.captureFrameBuffer),e.framebufferRenderbuffer(f.FRAMEBUFFER.value,f.COLOR_ATTACHMENT0.value,f.RENDERBUFFER.value,l),this.context.checkFramebufferStatus(f.FRAMEBUFFER.value)===f.FRAMEBUFFER_COMPLETE.value&&this.getCapture(e,n.name,i,r,o,s,0,0,c),e.bindFramebuffer(f.FRAMEBUFFER.value,t)}},t.prototype.readFrameBufferAttachmentFromTexture=function(e,t,n,i,r,o,s,a,c,l){var u=0;this.contextVersion>1&&(u=this.context.getFramebufferAttachmentParameter(a,n.value,f.FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER.value));var h=this.context.getFramebufferAttachmentParameter(a,n.value,f.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL.value),d=this.context.getFramebufferAttachmentParameter(a,n.value,f.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE.value),p=(d>0?v[d].name:f.TEXTURE_2D.name,!1),m=c;if(l.__SPECTOR_Object_CustomData){var g=l.__SPECTOR_Object_CustomData;if(o=g.width,s=g.height,m=g.type,p=g.target===f.TEXTURE_2D_ARRAY.name,!ut.isSupportedCombination(g.type,g.format,g.internalFormat))return}else o+=i,s+=r;i=r=0,e.bindFramebuffer(f.FRAMEBUFFER.value,this.captureFrameBuffer),u>0||p?e.framebufferTextureLayer(f.FRAMEBUFFER.value,f.COLOR_ATTACHMENT0.value,l,h,u):e.framebufferTexture2D(f.FRAMEBUFFER.value,f.COLOR_ATTACHMENT0.value,d||f.TEXTURE_2D.value,l,h),this.context.checkFramebufferStatus(f.FRAMEBUFFER.value)===f.FRAMEBUFFER_COMPLETE.value&&this.getCapture(e,n.name,i,r,o,s,d,u,m),e.bindFramebuffer(f.FRAMEBUFFER.value,t)},t.prototype.getCapture=function(e,n,i,r,s,a,c,l,u){var h={attachmentName:n,src:null,textureCubeMapFace:c?v[c].name:null,textureLayer:l};if(!this.quickCapture)try{var d=ut.readPixels(e,i,r,s,a,u);if(d){this.workingCanvas.width=s,this.workingCanvas.height=a;var p=this.workingContext2D.createImageData(Math.ceil(s),Math.ceil(a));if(p.data.set(d),this.workingContext2D.putImageData(p,0,0),this.fullCapture)this.captureCanvas.width=this.workingCanvas.width,this.captureCanvas.height=this.workingCanvas.height;else{var m=s/a;m<1?(this.captureCanvas.width=t.captureBaseSize*m,this.captureCanvas.height=t.captureBaseSize):m>1?(this.captureCanvas.width=t.captureBaseSize,this.captureCanvas.height=t.captureBaseSize/m):(this.captureCanvas.width=t.captureBaseSize,this.captureCanvas.height=t.captureBaseSize)}this.captureCanvas.width=Math.max(this.captureCanvas.width,1),this.captureCanvas.height=Math.max(this.captureCanvas.height,1),this.captureContext2D.globalCompositeOperation=\"copy\",this.captureContext2D.scale(1,-1),this.captureContext2D.translate(0,-this.captureCanvas.height),this.captureContext2D.drawImage(this.workingCanvas,0,0,s,a,0,0,this.captureCanvas.width,this.captureCanvas.height),this.captureContext2D.setTransform(1,0,0,1,0,0),this.captureContext2D.globalCompositeOperation=\"source-over\",h.src=this.captureCanvas.toDataURL()}}catch(e){o.warn(\"Spector can not capture the visual state: \"+e)}this.currentState.Attachments.push(h)},t.prototype.analyse=function(e){},t.stateName=\"VisualState\",t.captureBaseSize=256,t}($e),mt=function(){function e(e){this.context=e.context,this.captureFrameBuffer=e.context.createFramebuffer(),this.workingCanvas=document.createElement(\"canvas\"),this.workingContext2D=this.workingCanvas.getContext(\"2d\"),this.captureCanvas=document.createElement(\"canvas\"),this.captureContext2D=this.captureCanvas.getContext(\"2d\"),this.captureContext2D.imageSmoothingEnabled=!0,this.captureContext2D.mozImageSmoothingEnabled=!0,this.captureContext2D.oImageSmoothingEnabled=!0,this.captureContext2D.webkitImageSmoothingEnabled=!0,this.captureContext2D.msImageSmoothingEnabled=!0}return e.prototype.appendTextureState=function(e,t,n,i){if(void 0===n&&(n=null),t){var r=t.__SPECTOR_Object_CustomData;r&&(this.fullCapture=i,r.type&&(e.textureType=this.getWebGlConstant(r.type)),r.format&&(e.format=this.getWebGlConstant(r.format)),r.internalFormat&&(e.internalFormat=this.getWebGlConstant(r.internalFormat)),e.width=r.width,e.height=r.height,r.depth&&(e.depth=r.depth),n&&(e.visual=this.getTextureVisualState(n,t,r)))}},e.prototype.getTextureVisualState=function(t,n,i){try{var r=this.context,o={};if(!ut.isSupportedCombination(i.type,i.format,i.internalFormat))return o;var s=this.context.getParameter(f.FRAMEBUFFER_BINDING.value);r.bindFramebuffer(f.FRAMEBUFFER.value,this.captureFrameBuffer);try{var a=i.width,c=i.height;if(t===f.TEXTURE_3D&&i.depth)for(var l=r,u=0;u2&&u2&&u1?(this.captureCanvas.width=pt.captureBaseSize,this.captureCanvas.height=pt.captureBaseSize/c):(this.captureCanvas.width=pt.captureBaseSize,this.captureCanvas.height=pt.captureBaseSize)}return this.captureCanvas.width=Math.max(this.captureCanvas.width,1),this.captureCanvas.height=Math.max(this.captureCanvas.height,1),this.captureContext2D.globalCompositeOperation=\"copy\",this.captureContext2D.scale(1,-1),this.captureContext2D.translate(0,-this.captureCanvas.height),this.captureContext2D.drawImage(this.workingCanvas,0,0,i,r,0,0,this.captureCanvas.width,this.captureCanvas.height),this.captureContext2D.setTransform(1,0,0,1,0,0),this.captureContext2D.globalCompositeOperation=\"source-over\",this.captureCanvas.toDataURL()}catch(e){}},e.prototype.getWebGlConstant=function(e){var t=v[e];return t?t.name:e+\"\"},e.captureBaseSize=64,e.cubeMapFaces=[f.TEXTURE_CUBE_MAP_POSITIVE_X,f.TEXTURE_CUBE_MAP_POSITIVE_Y,f.TEXTURE_CUBE_MAP_POSITIVE_Z,f.TEXTURE_CUBE_MAP_NEGATIVE_X,f.TEXTURE_CUBE_MAP_NEGATIVE_Y,f.TEXTURE_CUBE_MAP_NEGATIVE_Z],e}(),ft=function(){function e(e){this.context=e.context}return e.prototype.getUboValue=function(t,n,i,r){var o=e.uboTypes[r];if(o){var s=new o.arrayBufferView(i*o.lengthMultiplier),a=this.context,c=a.getIndexedParameter(f.UNIFORM_BUFFER_BINDING.value,t);if(c){var l=a.getIndexedParameter(f.UNIFORM_BUFFER_START.value,t),u=a.getParameter(f.UNIFORM_BUFFER_BINDING.value);try{a.bindBuffer(f.UNIFORM_BUFFER.value,c),a.getBufferSubData(f.UNIFORM_BUFFER.value,l+n,s)}catch(e){return}u&&a.bindBuffer(f.UNIFORM_BUFFER.value,u)}return Array.prototype.slice.call(s)}},e.uboTypes=((_={})[f.BOOL.value]={arrayBufferView:Uint8Array,lengthMultiplier:1},_[f.BOOL_VEC2.value]={arrayBufferView:Uint8Array,lengthMultiplier:2},_[f.BOOL_VEC3.value]={arrayBufferView:Uint8Array,lengthMultiplier:3},_[f.BOOL_VEC4.value]={arrayBufferView:Uint8Array,lengthMultiplier:4},_[f.INT.value]={arrayBufferView:Int32Array,lengthMultiplier:1},_[f.INT_VEC2.value]={arrayBufferView:Int32Array,lengthMultiplier:2},_[f.INT_VEC3.value]={arrayBufferView:Int32Array,lengthMultiplier:3},_[f.INT_VEC4.value]={arrayBufferView:Int32Array,lengthMultiplier:4},_[f.UNSIGNED_INT.value]={arrayBufferView:Uint32Array,lengthMultiplier:1},_[f.UNSIGNED_INT_VEC2.value]={arrayBufferView:Uint32Array,lengthMultiplier:2},_[f.UNSIGNED_INT_VEC3.value]={arrayBufferView:Uint32Array,lengthMultiplier:3},_[f.UNSIGNED_INT_VEC4.value]={arrayBufferView:Uint32Array,lengthMultiplier:4},_[f.FLOAT.value]={arrayBufferView:Float32Array,lengthMultiplier:1},_[f.FLOAT_VEC2.value]={arrayBufferView:Float32Array,lengthMultiplier:2},_[f.FLOAT_VEC3.value]={arrayBufferView:Float32Array,lengthMultiplier:3},_[f.FLOAT_VEC4.value]={arrayBufferView:Float32Array,lengthMultiplier:4},_[f.FLOAT_MAT2.value]={arrayBufferView:Float32Array,lengthMultiplier:4},_[f.FLOAT_MAT2x3.value]={arrayBufferView:Float32Array,lengthMultiplier:6},_[f.FLOAT_MAT2x4.value]={arrayBufferView:Float32Array,lengthMultiplier:8},_[f.FLOAT_MAT3.value]={arrayBufferView:Float32Array,lengthMultiplier:9},_[f.FLOAT_MAT3x2.value]={arrayBufferView:Float32Array,lengthMultiplier:6},_[f.FLOAT_MAT3x4.value]={arrayBufferView:Float32Array,lengthMultiplier:12},_[f.FLOAT_MAT4.value]={arrayBufferView:Float32Array,lengthMultiplier:16},_[f.FLOAT_MAT4x2.value]={arrayBufferView:Float32Array,lengthMultiplier:8},_[f.FLOAT_MAT4x3.value]={arrayBufferView:Float32Array,lengthMultiplier:12},_[f.SAMPLER_2D.value]={arrayBufferView:Uint8Array,lengthMultiplier:1},_[f.SAMPLER_CUBE.value]={arrayBufferView:Uint8Array,lengthMultiplier:1},_),e}(),gt=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),vt=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return gt(t,e),Object.defineProperty(t.prototype,\"typeName\",{get:function(){return\"WebGLBuffer\"},enumerable:!0,configurable:!0}),t}(X),_t=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return gt(t,e),Object.defineProperty(t.prototype,\"typeName\",{get:function(){return\"WebGLFramebuffer\"},enumerable:!0,configurable:!0}),t}(X),Et=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return gt(t,e),Object.defineProperty(t.prototype,\"typeName\",{get:function(){return\"WebGLProgram\"},enumerable:!0,configurable:!0}),t.saveInGlobalStore=function(e){var t=H.getWebGlObjectTag(e);t&&(this.store[t.id]=e)},t.getFromGlobalStore=function(e){return this.store[e]},t.updateInGlobalStore=function(e,t){if(t){var n=this.getFromGlobalStore(e);if(n){var i=H.getWebGlObjectTag(n);i&&(H.attachWebGlObjectTag(t,i),this.store[i.id]=t)}}},t.store={},t}(X),Ct=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return gt(t,e),Object.defineProperty(t.prototype,\"typeName\",{get:function(){return\"WebGLQuery\"},enumerable:!0,configurable:!0}),t}(X),At=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return gt(t,e),Object.defineProperty(t.prototype,\"typeName\",{get:function(){return\"WebGLRenderbuffer\"},enumerable:!0,configurable:!0}),t}(X),Rt=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return gt(t,e),Object.defineProperty(t.prototype,\"typeName\",{get:function(){return\"WebGLSampler\"},enumerable:!0,configurable:!0}),t}(X),St=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return gt(t,e),Object.defineProperty(t.prototype,\"typeName\",{get:function(){return\"WebGLShader\"},enumerable:!0,configurable:!0}),t}(X),yt=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return gt(t,e),Object.defineProperty(t.prototype,\"typeName\",{get:function(){return\"WebGLSync\"},enumerable:!0,configurable:!0}),t}(X),Tt=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return gt(t,e),Object.defineProperty(t.prototype,\"typeName\",{get:function(){return\"WebGLTexture\"},enumerable:!0,configurable:!0}),t}(X),bt=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return gt(t,e),Object.defineProperty(t.prototype,\"typeName\",{get:function(){return\"WebGLTransformFeedback\"},enumerable:!0,configurable:!0}),t}(X),wt=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return gt(t,e),Object.defineProperty(t.prototype,\"typeName\",{get:function(){return\"WebGLUniformLocation\"},enumerable:!0,configurable:!0}),t}(X),xt=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return gt(t,e),Object.defineProperty(t.prototype,\"typeName\",{get:function(){return\"WebGLVertexArrayObject\"},enumerable:!0,configurable:!0}),t}(X),Lt=function(){function e(){}return e.getProgramData=function(e,t){for(var n={LINK_STATUS:e.getProgramParameter(t,f.LINK_STATUS.value),VALIDATE_STATUS:e.getProgramParameter(t,f.VALIDATE_STATUS.value)},i=e.getAttachedShaders(t),r=new Array(2),o=0,s=0,a=i;s=0){var o=this.context.getParameter(this.context.ELEMENT_ARRAY_BUFFER_BINDING);o&&(this.currentState.elementArray={},this.currentState.elementArray.arrayBuffer=this.getSpectorData(o))}var s=this.context.getProgramParameter(n,f.ACTIVE_ATTRIBUTES.value);this.currentState.attributes=[];for(var a=0;a1){var d=this.context.getProgramParameter(n,f.ACTIVE_UNIFORM_BLOCKS.value);this.currentState.uniformBlocks=[];for(a=0;a1){var r=this.context;t.colorAttachments=[];for(n=r.getParameter(f.MAX_DRAW_BUFFERS.value),i=0;i1&&(i.alphaSize=this.context.getFramebufferAttachmentParameter(t,e,f.FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE.value),i.blueSize=this.context.getFramebufferAttachmentParameter(t,e,f.FRAMEBUFFER_ATTACHMENT_BLUE_SIZE.value),i.encoding=this.getWebGlConstant(this.context.getFramebufferAttachmentParameter(t,e,f.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING.value)),i.componentType=this.getWebGlConstant(this.context.getFramebufferAttachmentParameter(t,e,f.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE.value)),i.depthSize=this.context.getFramebufferAttachmentParameter(t,e,f.FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE.value),i.greenSize=this.context.getFramebufferAttachmentParameter(t,e,f.FRAMEBUFFER_ATTACHMENT_GREEN_SIZE.value),i.redSize=this.context.getFramebufferAttachmentParameter(t,e,f.FRAMEBUFFER_ATTACHMENT_RED_SIZE.value),i.stencilSize=this.context.getFramebufferAttachmentParameter(t,e,f.FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE.value),n===f.TEXTURE.value&&(i.textureLayer=this.context.getFramebufferAttachmentParameter(t,e,f.FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER.value))),i}},t.prototype.readAttributeFromContext=function(e,t){var n=this.context.getActiveAttrib(e,t),i=this.context.getAttribLocation(e,n.name);if(-1===i)return{name:n.name,size:n.size,type:this.getWebGlConstant(n.type),location:-1};var r=this.context.getVertexAttrib(i,f.CURRENT_VERTEX_ATTRIB.value),o=this.context.getVertexAttrib(i,f.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING.value),s={name:n.name,size:n.size,type:this.getWebGlConstant(n.type),location:i,offsetPointer:this.context.getVertexAttribOffset(i,f.VERTEX_ATTRIB_ARRAY_POINTER.value),bufferBinding:this.getSpectorData(o),enabled:this.context.getVertexAttrib(i,f.VERTEX_ATTRIB_ARRAY_ENABLED.value),arraySize:this.context.getVertexAttrib(i,f.VERTEX_ATTRIB_ARRAY_SIZE.value),stride:this.context.getVertexAttrib(i,f.VERTEX_ATTRIB_ARRAY_STRIDE.value),arrayType:this.getWebGlConstant(this.context.getVertexAttrib(i,f.VERTEX_ATTRIB_ARRAY_TYPE.value)),normalized:this.context.getVertexAttrib(i,f.VERTEX_ATTRIB_ARRAY_NORMALIZED.value),vertexAttrib:Array.prototype.slice.call(r)};return this.extensions[f.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE.extensionName]?s.divisor=this.context.getVertexAttrib(i,f.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE.value):this.contextVersion>1&&(s.integer=this.context.getVertexAttrib(i,f.VERTEX_ATTRIB_ARRAY_INTEGER.value),s.divisor=this.context.getVertexAttrib(i,f.VERTEX_ATTRIB_ARRAY_DIVISOR.value)),this.appendBufferCustomData(s,o),s},t.prototype.readUniformFromContext=function(e,t){var n=this.context.getActiveUniform(e,t),i=this.context.getUniformLocation(e,n.name);if(i){if(n.size>1&&n.name&&n.name.indexOf(\"[0]\")===n.name.length-3){for(var r=[],o=0;o1){i.baseLevel=this.context.getTexParameter(t.value,f.TEXTURE_BASE_LEVEL.value),i.immutable=this.context.getTexParameter(t.value,f.TEXTURE_IMMUTABLE_FORMAT.value),i.immutableLevels=this.context.getTexParameter(t.value,f.TEXTURE_IMMUTABLE_LEVELS.value),i.maxLevel=this.context.getTexParameter(t.value,f.TEXTURE_MAX_LEVEL.value);var r=this.context.getParameter(f.SAMPLER_BINDING.value);if(r){i.sampler=this.getSpectorData(r);var o=this.context;i.samplerMaxLod=o.getSamplerParameter(r,f.TEXTURE_MAX_LOD.value),i.samplerMinLod=o.getSamplerParameter(r,f.TEXTURE_MIN_LOD.value),i.samplerCompareFunc=this.getWebGlConstant(o.getSamplerParameter(r,f.TEXTURE_COMPARE_FUNC.value)),i.samplerCompareMode=this.getWebGlConstant(o.getSamplerParameter(r,f.TEXTURE_COMPARE_MODE.value)),i.samplerWrapS=this.getWebGlConstant(o.getSamplerParameter(r,f.TEXTURE_WRAP_S.value)),i.samplerWrapT=this.getWebGlConstant(o.getSamplerParameter(r,f.TEXTURE_WRAP_T.value)),i.samplerWrapR=this.getWebGlConstant(o.getSamplerParameter(r,f.TEXTURE_WRAP_R.value)),i.samplerMagFilter=this.getWebGlConstant(o.getSamplerParameter(r,f.TEXTURE_MAG_FILTER.value)),i.samplerMinFilter=this.getWebGlConstant(o.getSamplerParameter(r,f.TEXTURE_MIN_FILTER.value))}else i.maxLod=this.context.getTexParameter(t.value,f.TEXTURE_MAX_LOD.value),i.minLod=this.context.getTexParameter(t.value,f.TEXTURE_MIN_LOD.value),i.compareFunc=this.getWebGlConstant(this.context.getTexParameter(t.value,f.TEXTURE_COMPARE_FUNC.value)),i.compareMode=this.getWebGlConstant(this.context.getTexParameter(t.value,f.TEXTURE_COMPARE_MODE.value)),i.wrapR=this.getWebGlConstant(this.context.getTexParameter(t.value,f.TEXTURE_WRAP_R.value))}var s=this.getTextureStorage(t);if(s){var a=this.quickCapture?null:t;this.drawCallTextureInputState.appendTextureState(i,s,a,this.fullCapture)}return this.context.activeTexture(n),i},t.prototype.getTextureStorage=function(e){return e===f.TEXTURE_2D?this.context.getParameter(f.TEXTURE_BINDING_2D.value):e===f.TEXTURE_CUBE_MAP?this.context.getParameter(f.TEXTURE_BINDING_CUBE_MAP.value):e===f.TEXTURE_3D?this.context.getParameter(f.TEXTURE_BINDING_3D.value):e===f.TEXTURE_2D_ARRAY?this.context.getParameter(f.TEXTURE_BINDING_2D_ARRAY.value):void 0},t.prototype.readUniformsFromContextIntoState=function(e,t,n,i){for(var r=this.context,o=r.getActiveUniforms(e,t,f.UNIFORM_TYPE.value),s=r.getActiveUniforms(e,t,f.UNIFORM_SIZE.value),a=r.getActiveUniforms(e,t,f.UNIFORM_BLOCK_INDEX.value),c=r.getActiveUniforms(e,t,f.UNIFORM_OFFSET.value),l=r.getActiveUniforms(e,t,f.UNIFORM_ARRAY_STRIDE.value),u=r.getActiveUniforms(e,t,f.UNIFORM_MATRIX_STRIDE.value),h=r.getActiveUniforms(e,t,f.UNIFORM_IS_ROW_MAJOR.value),d=0;d-1&&(p.blockName=r.getActiveUniformBlockName(e,p.blockIndice)),p.offset=c[d],p.arrayStride=l[d],p.matrixStride=u[d],p.rowMajor=h[d],p.blockIndice>-1){var m=i[a[d]].bindingPoint;p.value=this.drawCallUboInputState.getUboValue(m,p.offset,p.size,o[d])}}},t.prototype.readTransformFeedbackFromContext=function(e,t){var n=this.context,i=n.getTransformFeedbackVarying(e,t),r=n.getIndexedParameter(f.TRANSFORM_FEEDBACK_BUFFER_BINDING.value,t),o={name:i.name,size:i.size,type:this.getWebGlConstant(i.type),buffer:this.getSpectorData(r),bufferSize:n.getIndexedParameter(f.TRANSFORM_FEEDBACK_BUFFER_SIZE.value,t),bufferStart:n.getIndexedParameter(f.TRANSFORM_FEEDBACK_BUFFER_START.value,t)};return this.appendBufferCustomData(o,r),o},t.prototype.readUniformBlockFromContext=function(e,t){var n=this.context,i=n.getActiveUniformBlockParameter(e,t,f.UNIFORM_BLOCK_BINDING.value),r=n.getIndexedParameter(f.UNIFORM_BUFFER_BINDING.value,i),o={name:n.getActiveUniformBlockName(e,t),bindingPoint:i,size:n.getActiveUniformBlockParameter(e,t,f.UNIFORM_BLOCK_DATA_SIZE.value),activeUniformCount:n.getActiveUniformBlockParameter(e,t,f.UNIFORM_BLOCK_ACTIVE_UNIFORMS.value),vertex:n.getActiveUniformBlockParameter(e,t,f.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER.value),fragment:n.getActiveUniformBlockParameter(e,t,f.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER.value),buffer:this.getSpectorData(r)};return this.appendBufferCustomData(o,r),o},t.prototype.appendBufferCustomData=function(e,t){if(t){var n=t.__SPECTOR_Object_CustomData;n&&(n.usage&&(e.bufferUsage=this.getWebGlConstant(n.usage)),e.bufferLength=n.length,n.offset&&(e.bufferOffset=n.offset),n.sourceLength&&(e.bufferSourceLength=n.sourceLength))}},t.prototype.getWebGlConstant=function(e){var t=v[e];return t?t.name:e},t.stateName=\"DrawCall\",t.samplerTypes=((E={})[f.SAMPLER_2D.value]=f.TEXTURE_2D,E[f.SAMPLER_CUBE.value]=f.TEXTURE_CUBE_MAP,E[f.SAMPLER_3D.value]=f.TEXTURE_3D,E[f.SAMPLER_2D_SHADOW.value]=f.TEXTURE_2D,E[f.SAMPLER_2D_ARRAY.value]=f.TEXTURE_2D_ARRAY,E[f.SAMPLER_2D_ARRAY_SHADOW.value]=f.TEXTURE_2D_ARRAY,E[f.SAMPLER_CUBE_SHADOW.value]=f.TEXTURE_CUBE_MAP,E[f.INT_SAMPLER_2D.value]=f.TEXTURE_2D,E[f.INT_SAMPLER_3D.value]=f.TEXTURE_3D,E[f.INT_SAMPLER_CUBE.value]=f.TEXTURE_CUBE_MAP,E[f.INT_SAMPLER_2D_ARRAY.value]=f.TEXTURE_2D_ARRAY,E[f.UNSIGNED_INT_SAMPLER_2D.value]=f.TEXTURE_2D,E[f.UNSIGNED_INT_SAMPLER_3D.value]=f.TEXTURE_3D,E[f.UNSIGNED_INT_SAMPLER_CUBE.value]=f.TEXTURE_CUBE_MAP,E[f.UNSIGNED_INT_SAMPLER_2D_ARRAY.value]=f.TEXTURE_2D_ARRAY,E),t}($e),Mt=function(){function e(e){this.contextInformation=e,this.stateTrackers=[],this.onCommandCapturedCallbacks={},this.initStateTrackers()}return e.prototype.startCapture=function(e,t,n){for(var i=0,r=this.stateTrackers;i=4?{target:e,length:n,usage:t.arguments[2],offset:t.arguments[3],sourceLength:t.arguments[1]?t.arguments[1].length:-1}:3===t.arguments.length?{target:e,length:n,usage:t.arguments[2]}:void 0},t.prototype.getLength=function(e){var t=-1,n=0;return 5===e.arguments.length&&(t=e.arguments[4],n=e.arguments[3]),t<=0&&(t=\"number\"==typeof e.arguments[1]?e.arguments[1]:e.arguments[1]&&(e.arguments[1].byteLength||e.arguments[1].length)||0),t-n},t}(Nt),$t=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),kt=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return $t(t,e),Object.defineProperty(t.prototype,\"objectName\",{get:function(){return\"Renderbuffer\"},enumerable:!0,configurable:!0}),t.prototype.getCreateCommandNames=function(){return[\"createRenderbuffer\"]},t.prototype.getUpdateCommandNames=function(){return[\"renderbufferStorage\",\"renderbufferStorageMultisample\"]},t.prototype.getDeleteCommandNames=function(){return[\"deleteRenderbuffer\"]},t.prototype.getBoundInstance=function(e){var t=this.options.context;if(e===f.RENDERBUFFER.value)return t.getParameter(f.RENDERBUFFER_BINDING.value)},t.prototype.delete=function(e){var t=e.__SPECTOR_Object_CustomData;return t?t.length:0},t.prototype.update=function(e,t,n){var i=this.getCustomData(e,t);if(!i)return 0;var r=n.__SPECTOR_Object_CustomData?n.__SPECTOR_Object_CustomData.length:0;return i.length=i.width*i.height*this.getByteSizeForInternalFormat(i.internalFormat),n.__SPECTOR_Object_CustomData=i,i.length-r},t.prototype.getCustomData=function(e,t){return 4===e.arguments.length?{target:t,internalFormat:e.arguments[1],width:e.arguments[2],height:e.arguments[3],length:0,samples:0}:{target:t,internalFormat:e.arguments[2],width:e.arguments[3],height:e.arguments[4],length:0,samples:e.arguments[1]}},t}(Nt),Dt=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Ut=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Dt(t,e),Object.defineProperty(t.prototype,\"objectName\",{get:function(){return\"Texture2d\"},enumerable:!0,configurable:!0}),t.prototype.getCreateCommandNames=function(){return[\"createTexture\"]},t.prototype.getUpdateCommandNames=function(){return[\"texImage2D\",\"compressedTexImage2D\",\"texStorage2D\"]},t.prototype.getDeleteCommandNames=function(){return[\"deleteTexture\"]},t.prototype.getBoundInstance=function(e){var t=this.options.context;return e===f.TEXTURE_2D.value?t.getParameter(f.TEXTURE_BINDING_2D.value):e===f.TEXTURE_CUBE_MAP_POSITIVE_X.value||e===f.TEXTURE_CUBE_MAP_POSITIVE_Y.value||e===f.TEXTURE_CUBE_MAP_POSITIVE_Z.value||e===f.TEXTURE_CUBE_MAP_NEGATIVE_X.value||e===f.TEXTURE_CUBE_MAP_NEGATIVE_Y.value||e===f.TEXTURE_CUBE_MAP_NEGATIVE_Z.value?t.getParameter(f.TEXTURE_BINDING_CUBE_MAP.value):void 0},t.prototype.delete=function(e){var t=e.__SPECTOR_Object_CustomData;return t?t.target===f.TEXTURE_2D_ARRAY.name||t.target===f.TEXTURE_3D.name?0:t.length:0},t.prototype.update=function(e,t,n){if(e.arguments.length>=2&&0!==e.arguments[1])return 0;var i=this.getCustomData(e,t,n);if(!i)return 0;var r=n.__SPECTOR_Object_CustomData?n.__SPECTOR_Object_CustomData.length:0;if(i.isCompressed){if(e.arguments.length>=7){var o=e.arguments[6];i.length=\"number\"==typeof o?o:null==o?void 0:o.byteLength}}else{var s=\"TEXTURE_2D\"===t?1:6,a=i.internalFormat;a===f.RGBA.value&&(i.type===f.FLOAT.value&&(a=f.RGBA32F.value),i.type===f.HALF_FLOAT_OES.value&&(a=f.RGBA16F.value)),i.length=i.width*i.height*s*this.getByteSizeForInternalFormat(a)}return i.length=0|i.length,n.__SPECTOR_Object_CustomData=i,i.length-r},t.prototype.getCustomData=function(e,t,n){return\"texImage2D\"===e.name?this.getTexImage2DCustomData(e,t,n):\"compressedTexImage2D\"===e.name?this.getCompressedTexImage2DCustomData(e,t,n):\"texStorage2D\"===e.name?this.getTexStorage2DCustomData(e,t,n):void 0},t.prototype.getTexStorage2DCustomData=function(e,t,n){var i;return 5===e.arguments.length&&(i={target:t,internalFormat:e.arguments[2],width:e.arguments[3],height:e.arguments[4],length:0,isCompressed:!1}),i},t.prototype.getCompressedTexImage2DCustomData=function(e,t,n){var i;if(0===e.arguments[1])return e.arguments.length>=7&&(i={target:t,internalFormat:e.arguments[2],width:e.arguments[3],height:e.arguments[4],length:0,isCompressed:!0}),i},t.prototype.getTexImage2DCustomData=function(e,t,n){var i;if(0===e.arguments[1])return e.arguments.length>=8?i={target:t,internalFormat:e.arguments[2],width:e.arguments[3],height:e.arguments[4],format:e.arguments[6],type:e.arguments[7],length:0,isCompressed:!1}:6===e.arguments.length&&(i={target:t,internalFormat:e.arguments[2],width:e.arguments[5].width,height:e.arguments[5].height,format:e.arguments[3],type:e.arguments[4],length:0,isCompressed:!1}),i},t}(Nt),Gt=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Wt=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Gt(t,e),Object.defineProperty(t.prototype,\"objectName\",{get:function(){return\"Texture3d\"},enumerable:!0,configurable:!0}),t.prototype.getCreateCommandNames=function(){return[\"createTexture\"]},t.prototype.getUpdateCommandNames=function(){return[\"texImage3D\",\"compressedTexImage3D\",\"texStorage3D\"]},t.prototype.getDeleteCommandNames=function(){return[\"deleteTexture\"]},t.prototype.getBoundInstance=function(e){var t=this.options.context;return e===f.TEXTURE_2D_ARRAY.value?t.getParameter(f.TEXTURE_BINDING_2D_ARRAY.value):e===f.TEXTURE_3D.value?t.getParameter(f.TEXTURE_BINDING_3D.value):void 0},t.prototype.delete=function(e){var t=e.__SPECTOR_Object_CustomData;return t?t.target!==f.TEXTURE_2D_ARRAY.name&&t.target!==f.TEXTURE_3D.name?0:t.length:0},t.prototype.update=function(e,t,n){if(e.arguments.length>=2&&0!==e.arguments[1])return 0;var i=this.getCustomData(e,t,n);if(!i)return 0;var r=n.__SPECTOR_Object_CustomData?n.__SPECTOR_Object_CustomData.length:0;if(i.isCompressed){if(e.arguments.length>=7){var o=e.arguments[6];i.length=\"number\"==typeof o?o:null==o?void 0:o.byteLength}}else i.length=i.width*i.height*i.depth*this.getByteSizeForInternalFormat(i.internalFormat);return i.length=0|i.length,n.__SPECTOR_Object_CustomData=i,i.length-r},t.prototype.getCustomData=function(e,t,n){return\"texImage3D\"===e.name?this.getTexImage3DCustomData(e,t,n):\"compressedTexImage3D\"===e.name?this.getCompressedTexImage3DCustomData(e,t,n):\"texStorage3D\"===e.name?this.getTexStorage3DCustomData(e,t,n):void 0},t.prototype.getTexStorage3DCustomData=function(e,t,n){var i;return 6===e.arguments.length&&(i={target:t,internalFormat:e.arguments[2],width:e.arguments[3],height:e.arguments[4],depth:e.arguments[5],length:0,isCompressed:!1}),i},t.prototype.getCompressedTexImage3DCustomData=function(e,t,n){var i;if(0===e.arguments[1])return e.arguments.length>=8&&(i={target:t,internalFormat:e.arguments[2],width:e.arguments[3],height:e.arguments[4],depth:e.arguments[5],length:0,isCompressed:!0}),i},t.prototype.getTexImage3DCustomData=function(e,t,n){var i;if(0===e.arguments[1])return e.arguments.length>=9&&(i={target:t,internalFormat:e.arguments[2],width:e.arguments[3],height:e.arguments[4],depth:e.arguments[5],format:e.arguments[7],type:e.arguments[8],length:0,isCompressed:!1}),i},t}(Nt),Vt=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Ht=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Vt(t,e),Object.defineProperty(t.prototype,\"objectName\",{get:function(){return\"Program\"},enumerable:!0,configurable:!0}),t.prototype.getCreateCommandNames=function(){return[\"createProgram\"]},t.prototype.getUpdateCommandNames=function(){return[\"linkProgram\"]},t.prototype.getDeleteCommandNames=function(){return[\"deleteProgram\"]},t.prototype.getBoundInstance=function(e){return e},t.prototype.delete=function(e){var t=e.__SPECTOR_Object_CustomData;return t?t.length:0},t.prototype.update=function(e,t,n){if(e.arguments.length>=1&&!e.arguments[0])return 0;var i=this.getCustomData(n);if(!i)return 0;var r=n.__SPECTOR_Object_CustomData?n.__SPECTOR_Object_CustomData.length:0;return n.__SPECTOR_Object_CustomData=i,i.length-r},t.prototype.getCustomData=function(e){var t=this.options.context;return Lt.getProgramData(t,e)},t}(Nt),Xt=function(){function e(e){this.contextInformation=e,this.onCommandCallbacks={},this.recorders=[],this.initRecorders()}return e.prototype.recordCommand=function(e){var t=this.onCommandCallbacks[e.name];if(t)for(var n=0,i=t;n0&&this.currentCapture.commands.length===this.maxCommands&&this.onMaxCommand.trigger(this)}},e.prototype.spyContext=function(t){var n=[];for(var i in t)i&&n.push(i);for(var r=0;r-1&&(a[0]=n.getCallback(n,o,r?function(){i[t](o)}:null));var c=W.executeOriginFunction(i,t,a);return c}},e.prototype.getCallback=function(t,n,i){return void 0===i&&(i=null),function(){var r=a.now;if(t.lastFrame=++t.lastFrame%t.speedRatio,t.willPlayNextFrame||t.speedRatio&&!t.lastFrame){t.onFrameStart.trigger(t);try{n.apply(t.spiedWindow,arguments)}catch(e){t.onError.trigger(e)}t.lastSixtyFramesCurrentIndex=(t.lastSixtyFramesCurrentIndex+1)%e.fpsWindowSize,t.lastSixtyFramesDuration[t.lastSixtyFramesCurrentIndex]=r-t.lastSixtyFramesPreviousStart,t.onFrameEnd.trigger(t),t.willPlayNextFrame=!1}else i&&i();t.lastSixtyFramesPreviousStart=r}},e.requestAnimationFrameFunctions=[\"requestAnimationFrame\",\"msRequestAnimationFrame\",\"webkitRequestAnimationFrame\",\"mozRequestAnimationFrame\",\"oRequestAnimationFrame\"],e.setTimerFunctions=[\"setTimeout\",\"setInterval\"],e.setTimerCommonValues=[0,15,16,33,32,40],e.fpsWindowSize=60,e}(),tn=function(){function e(e){this.canvas=e,this.onContextRequested=new s,this.init()}return e.prototype.init=function(){var e=this,t=function(){var t=this instanceof HTMLCanvasElement?HTMLCanvasElement:OffscreenCanvas,n=e.canvas?W.executeOriginFunction(this,\"getContext\",arguments):W.executePrototypeOriginFunction(this,t,\"getContext\",arguments);if(arguments.length>0&&\"2d\"===arguments[0])return n;if(n){var i=Array.prototype.slice.call(arguments),r=\"webgl2\"===i[0]||\"experimental-webgl2\"===i[0],o=r?2:1;e.onContextRequested.trigger({context:n,contextVersion:o})}return n};this.canvas?(W.storeOriginFunction(this.canvas,\"getContext\"),this.canvas.getContext=t):(W.storePrototypeOriginFunction(HTMLCanvasElement,\"getContext\"),HTMLCanvasElement.prototype.getContext=t,\"undefined\"!=typeof OffscreenCanvas&&(W.storePrototypeOriginFunction(OffscreenCanvas,\"getContext\"),OffscreenCanvas.prototype.getContext=t))},e}(),nn=(n(11),function(){function e(e,t){this.placeHolder=e,this.stateStore=t}return e.prototype.compose=function(e){var t=this.stateStore.getStatesToProcess(),n=!1;for(var i in t)if(t.hasOwnProperty(i)){var r=t[i],o=this.stateStore.getLastOperation(r),s=this.stateStore.getComponentInstance(r),a=this.stateStore.getData(r);s.render(a,r,o),n=!0}if(n){var c=this.stateStore.getLastOperation(e);this.composeInContainer(this.placeHolder,Number.MAX_VALUE,e,c)}},e.prototype.composeChildren=function(e,t){if(t)for(var n=this.stateStore.getChildrenIds(e),i=0,r=0;r0},e.prototype.add=function(e,t){var n=this.getNewId();return this.pendingOperation[n]=n,this.store[n]={data:e,id:n,parent:null,children:[],componentInstance:t,lastOperation:20},n},e.prototype.update=function(e,t){this.store[e];this.pendingOperation[e]=e,this.store[e].data=t,this.store[e].lastOperation=40},e.prototype.addChild=function(e,t,n){var i=this.store[e],r=this.add(t,n);this.pendingOperation[r]=r;var o=this.store[r];return o.parent=i,i.children.push(o),r},e.prototype.insertChildAt=function(e,t,n,i){var r=this.store[e],o=this.add(n,i);this.pendingOperation[o]=o;var s=this.store[o];return s.parent=r,t>=r.children.length?r.children.push(s):t>=0?r.children.splice(t,0,s):r.children.unshift(s),o},e.prototype.removeChildById=function(e,t){for(var n=this.store[e],i=n.children.length-1;i>=0;i--){if(n.children[i].id===t){this.removeChildAt(e,i);break}}},e.prototype.removeChildAt=function(e,t){var n,i=this.store[e];t>i.children.length-1?(n=i.children[i.children.length-1],i.children[i.children.length-1].parent=null,i.children.splice(i.children.length-1,1)):t>=0?(n=i.children[t],i.children[t].parent=null,i.children.splice(t,1)):(n=i.children[0],i.children[0].parent=null,i.children.splice(0,1)),n.parent=null,this.remove(n.id)},e.prototype.remove=function(e){var t=this.store[e];if(t.parent){this.store[t.parent.id];this.removeChildById(t.parent.id,e)}else this.removeChildren(e),this.store[e].lastOperation=50,this.pendingOperation[e]=e},e.prototype.removeChildren=function(e){for(var t=this.store[e];t.children.length;)this.remove(t.children[0].id)},e.prototype.getStatesToProcess=function(){return this.pendingOperation},e.prototype.flushPendingOperations=function(){for(var e in this.pendingOperation)this.pendingOperation[e]&&(50===this.store[e].lastOperation?delete this.store[e]:this.store[e].lastOperation=0);this.pendingOperation={}},e.prototype.getNewId=function(){return++this.idGenerator},e}(),on=function(){function e(e){this.component=e}return e.prototype.render=function(e,t,n){0!==n&&(50!==n?this.domNode=this.component.render(e,t):this.removeNode())},e.prototype.composeInContainer=function(e,t,n){if(50===n)return this.removeNode(),null;var i=this.cachedCurrentChildrenContainer;if(0===n)return i;var r=this.domNode,o=r.getAttribute(\"childrencontainer\")?r:r.querySelector(\"[childrenContainer]\");if(o&&i)for(var s=i.children;s.length>0;)o.appendChild(s[0]);if(this.cachedCurrentChildrenContainer=o,t>=e.children.length)e.appendChild(r),this.cachedCurrentDomNode&&40===n&&(this.cachedCurrentDomNode.remove?this.cachedCurrentDomNode.remove():this.cachedCurrentDomNode.parentNode&&this.cachedCurrentDomNode.parentNode.removeChild(this.cachedCurrentDomNode));else{var a=e.children[t];e.insertBefore(r,a),40===n&&e.removeChild(a)}return this.cachedCurrentDomNode=this.domNode,o},e.prototype.removeNode=function(){this.domNode&&this.domNode.parentElement&&(this.domNode.remove?this.domNode.remove():this.domNode.parentNode&&this.domNode.parentNode.removeChild(this.domNode)),this.cachedCurrentDomNode&&this.cachedCurrentDomNode.parentElement&&(this.cachedCurrentDomNode.remove?this.cachedCurrentDomNode.remove():this.cachedCurrentDomNode.parentNode&&this.cachedCurrentDomNode.parentNode.removeChild(this.cachedCurrentDomNode))},e.idGenerator=0,e}(),sn=function(){function e(e){this.stateStore=new rn,this.compositor=new nn(e,this.stateStore),this.willRender=!1,this.rootStateId=-1}return e.prototype.addRootState=function(e,t,n){void 0===n&&(n=!1);var i=new on(t),r=this.stateStore.add(e,i);return this.rootStateId=r,this.setForRender(n),r},e.prototype.addChildState=function(e,t,n,i){void 0===i&&(i=!1);var r=this.insertChildState(e,t,Number.MAX_VALUE,n);return this.setForRender(i),r},e.prototype.insertChildState=function(e,t,n,i,r){void 0===r&&(r=!1);var o=new on(i),s=this.stateStore.insertChildAt(e,n,t,o);return this.setForRender(r),s},e.prototype.updateState=function(e,t,n){void 0===n&&(n=!1),this.stateStore.update(e,t),this.setForRender(n)},e.prototype.removeState=function(e,t){void 0===t&&(t=!1),this.stateStore.remove(e),this.setForRender(t)},e.prototype.removeChildrenStates=function(e,t){void 0===t&&(t=!1),this.stateStore.removeChildren(e),this.setForRender(t)},e.prototype.getState=function(e){return this.stateStore.getData(e)},e.prototype.getGenericState=function(e){return this.getState(e)},e.prototype.getChildrenState=function(e){var t=this;return this.stateStore.getChildrenIds(e).map((function(n){return t.stateStore.getData(e)}))},e.prototype.getChildrenGenericState=function(e){return this.getChildrenState(e)},e.prototype.hasChildren=function(e){return this.stateStore.hasChildren(e)},e.prototype.updateAllChildrenState=function(e,t){for(var n=0,i=this.stateStore.getChildrenIds(e);n0&&\"$\"===i[i.length-1]?i=i.slice(0,-1):e=t.htmlEscape(e),o+=i,o+=e})),o+=r[r.length-1]},e.prototype.htmlEscape=function(e){return null==e||0===e.length?e:(this.dummyTextGeneratorElement.innerText=e,this.dummyTextGeneratorElement.innerHTML)},e}()),ln=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),un=function(e,t){return Object.defineProperty?Object.defineProperty(e,\"raw\",{value:t}):e.raw=t,e},hn=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return ln(t,e),t.prototype.render=function(e,t){var n=this.htmlTemplate(C||(C=un(['
                      \\n
                      \\n
                      \\n
                      \\n ',\"\\n
                      \\n
                      \"],['
                      \\n
                      \\n
                      \\n
                      \\n ',\"\\n
                      \\n
                      \"])),e?\"active\":\"\",e.logVisible?\"active\":\"\",e.logLevel===i.error?\"error\":\"\",e.logText);return this.renderElementFromTemplate(n,e,t)},t}(cn),dn=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),pn=function(e){function t(){var t=e.call(this)||this;return t.onCanvasSelected=t.createEvent(\"onCanvasSelected\"),t}return dn(t,e),t.prototype.render=function(e,t){var n=document.createElement(\"li\"),i=document.createElement(\"span\");return i.innerText=\"Id: \"+e.id+\" - Size: \"+e.width+\"*\"+e.height,n.appendChild(i),this.mapEventListener(n,\"click\",\"onCanvasSelected\",e,t),n},t}(cn),mn=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),fn=function(e,t){return Object.defineProperty?Object.defineProperty(e,\"raw\",{value:t}):e.raw=t,e},gn=function(e){function t(){var t=e.call(this)||this;return t.onCaptureRequested=t.createEvent(\"onCaptureRequested\"),t.onPlayRequested=t.createEvent(\"onPlayRequested\"),t.onPauseRequested=t.createEvent(\"onPauseRequested\"),t.onPlayNextFrameRequested=t.createEvent(\"onPlayNextFrameRequested\"),t}return mn(t,e),t.prototype.render=function(e,t){var n=this.htmlTemplate(A||(A=fn(['\\n
                      \\n
                      \\n
                      \\n $',\"\\n
                      \"],['\\n
                      \\n
                      \\n
                      \\n $',\"\\n
                      \"])),e?'
                      \\n
                      ':'
                      \\n
                      \\n
                      \\n
                      ');return this.renderElementFromTemplate(n,e,t)},t}(cn),vn=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),_n=function(e,t){return Object.defineProperty?Object.defineProperty(e,\"raw\",{value:t}):e.raw=t,e},En=function(e){function t(){var t=e.call(this)||this;return t.onCanvasSelection=t.createEvent(\"onCanvasSelection\"),t}return vn(t,e),t.prototype.render=function(e,t){var n=this.htmlTemplate(R||(R=_n(['\\n
                      \\n \\n ','\\n \\n
                        \\n
                        '],['\\n
                        \\n \\n ','\\n \\n
                          \\n
                          '])),e.currentCanvasInformation?e.currentCanvasInformation.id+\" (\"+e.currentCanvasInformation.width+\"*\"+e.currentCanvasInformation.height+\")\":\"Choose Canvas...\",e.showList?\"display:block;visibility:visible\":\"display:none;visibility:hidden\");return this.renderElementFromTemplate(n,e,t)},t}(cn),Cn=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),An=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Cn(t,e),t.prototype.render=function(e,t){var n=document.createElement(\"span\");return n.className=\"fpsCounterComponent\",n.innerText=e.toFixed(2)+\" Fps\",n},t}(cn),Rn=function(){function e(t){var n=this;void 0===t&&(t={}),this.options=t,this.rootPlaceHolder=t.rootPlaceHolder||document.body,this.mvx=new sn(this.rootPlaceHolder),this.isTrackingCanvas=!1,this.onCanvasSelected=new s,this.onCaptureRequested=new s,this.onPauseRequested=new s,this.onPlayRequested=new s,this.onPlayNextFrameRequested=new s,this.captureMenuComponent=new hn,this.canvasListComponent=new En,this.canvasListItemComponent=new pn,this.actionsComponent=new gn,this.fpsCounterComponent=new An,this.rootStateId=this.mvx.addRootState({visible:!0,logLevel:i.info,logText:e.SelectCanvasHelpText,logVisible:!this.options.hideLog},this.captureMenuComponent),this.canvasListStateId=this.mvx.addChildState(this.rootStateId,{currentCanvasInformation:null,showList:!1},this.canvasListComponent),this.actionsStateId=this.mvx.addChildState(this.rootStateId,!0,this.actionsComponent),this.fpsStateId=this.mvx.addChildState(this.rootStateId,0,this.fpsCounterComponent),this.actionsComponent.onCaptureRequested.add((function(){var t=n.getSelectedCanvasInformation();t&&n.updateMenuStateLog(i.info,e.PleaseWaitHelpText,!0),setTimeout((function(){n.onCaptureRequested.trigger(t)}),200)})),this.actionsComponent.onPauseRequested.add((function(){n.onPauseRequested.trigger(n.getSelectedCanvasInformation()),n.mvx.updateState(n.actionsStateId,!1)})),this.actionsComponent.onPlayRequested.add((function(){n.onPlayRequested.trigger(n.getSelectedCanvasInformation()),n.mvx.updateState(n.actionsStateId,!0)})),this.actionsComponent.onPlayNextFrameRequested.add((function(){n.onPlayNextFrameRequested.trigger(n.getSelectedCanvasInformation())})),this.canvasListComponent.onCanvasSelection.add((function(t){n.mvx.updateState(n.canvasListStateId,{currentCanvasInformation:null,showList:!t.state.showList}),n.updateMenuStateLog(i.info,e.SelectCanvasHelpText),n.onCanvasSelected.trigger(null),n.isTrackingCanvas&&n.trackPageCanvases(),t.state.showList?n.showMenuStateLog():n.hideMenuStateLog()})),this.canvasListItemComponent.onCanvasSelected.add((function(t){n.mvx.updateState(n.canvasListStateId,{currentCanvasInformation:t.state,showList:!1}),n.onCanvasSelected.trigger(t.state),n.updateMenuStateLog(i.info,e.ActionsHelpText),n.showMenuStateLog()}))}return e.prototype.getSelectedCanvasInformation=function(){return this.mvx.getGenericState(this.canvasListStateId).currentCanvasInformation},e.prototype.trackPageCanvases=function(){if(this.isTrackingCanvas=!0,document.body){var e=document.body.querySelectorAll(\"canvas\");this.updateCanvasesList(e)}},e.prototype.updateCanvasesList=function(e){this.updateCanvasesListInformationInternal(e,(function(e){return{id:e.id,width:e.width,height:e.height,ref:e}}))},e.prototype.updateCanvasesListInformation=function(e){this.updateCanvasesListInformationInternal(e,(function(e){return{id:e.id,width:e.width,height:e.height,ref:e.ref}}))},e.prototype.display=function(){this.updateMenuStateVisibility(!0)},e.prototype.hide=function(){this.updateMenuStateVisibility(!1)},e.prototype.captureComplete=function(t){t?this.updateMenuStateLog(i.error,t):this.updateMenuStateLog(i.info,e.ActionsHelpText)},e.prototype.setFPS=function(e){this.mvx.updateState(this.fpsStateId,e)},e.prototype.updateCanvasesListInformationInternal=function(t,n){this.mvx.removeChildrenStates(this.canvasListStateId);for(var r=[],o=0;o\\n
                          \\n Drag files here to open a previously saved capture.\\n
                          \\n
                            \\n '],['\\n
                            \\n
                            \\n Drag files here to open a previously saved capture.\\n
                            \\n
                              \\n
                              '])),e?\"active\":\"\"),r=this.renderElementFromTemplate(i,e,t),o=r.querySelector(\".openCaptureFile\");return o.addEventListener(\"dragenter\",(function(e){return n.drag(e),!1}),!1),o.addEventListener(\"dragover\",(function(e){return n.drag(e),!1}),!1),o.addEventListener(\"drop\",(function(e){n.drop(e)}),!1),r},t.prototype.drag=function(e){e.stopPropagation(),e.preventDefault()},t.prototype.drop=function(e){e.stopPropagation(),e.preventDefault(),this.loadFiles(e)},t.prototype.loadFiles=function(e){var t=this,n=null;if(e&&e.dataTransfer&&e.dataTransfer.files&&(n=e.dataTransfer.files),e&&e.target&&e.target.files&&(n=e.target.files),n&&n.length>0)for(var i=function(e){var i=n[e].name.toLowerCase().split(\".\").pop();n[e].type;if(\"json\"===i){var r=n[e],s=new FileReader;s.onerror=function(e){o.error(\"Error while reading file: \"+r.name+e)},s.onload=function(e){try{var n=JSON.parse(e.target.result);t.onCaptureLoaded.trigger(n)}catch(e){o.error(\"Error while reading file: \"+r.name+e)}},s.readAsText(r)}},r=0;r\\n
                                \\n '],['\\n
                                \\n
                                  \\n
                                  '])));return this.renderElementFromTemplate(n,e,t)},t}(cn),On=function(){function e(){}return e.scrollIntoView=function(e){for(var t=e.getBoundingClientRect(),n=e.parentElement;n&&n.clientHeight===n.offsetHeight;)n=n.parentElement;if(n){var i=n.getBoundingClientRect();t.topi.bottom&&e.scrollIntoView(!1)}},e}(),Fn=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Mn=function(e){function t(){var t=e.call(this)||this;return t.onVisualStateSelected=t.createEvent(\"onVisualStateSelected\"),t}return Fn(t,e),t.prototype.render=function(e,t){var n=document.createElement(\"li\");if(e.active&&(n.className=\"active\",setTimeout((function(){On.scrollIntoView(n)}),1)),e.VisualState.Attachments)for(var i=0,r=e.VisualState.Attachments;i1){var a=document.createElement(\"span\");a.innerText=o.attachmentName,n.appendChild(a)}if(o.textureLayer){var c=document.createElement(\"span\");c.innerText=\"Layer: \"+o.textureLayer,n.appendChild(c)}if(o.textureCubeMapFace){var l=document.createElement(\"span\");l.innerText=o.textureCubeMapFace,n.appendChild(l)}}}else{var u=document.createElement(\"span\");u.innerText=e.VisualState.FrameBufferStatus,n.appendChild(u)}var h=document.createElement(\"span\");return h.innerText=e.VisualState.FrameBuffer?\"Frame buffer: \"+e.VisualState.FrameBuffer.__SPECTOR_Object_TAG.id:\"Canvas frame buffer\",n.appendChild(h),this.mapEventListener(n,\"click\",\"onVisualStateSelected\",e,t),n},t}(cn),Nn=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Pn=function(e,t){return Object.defineProperty?Object.defineProperty(e,\"raw\",{value:t}):e.raw=t,e},Bn=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Nn(t,e),t.prototype.render=function(e,t){var n=this.htmlTemplate(T||(T=Pn(['\\n
                                  \\n
                                    \\n
                                    '],['\\n
                                    \\n
                                      \\n
                                      '])));return this.renderElementFromTemplate(n,e,t)},t}(cn),$n=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),kn=function(e){function t(){var t=e.call(this)||this;return t.onCommandSelected=t.createEvent(\"onCommandSelected\"),t.onVertexSelected=t.createEvent(\"onVertexSelected\"),t.onFragmentSelected=t.createEvent(\"onFragmentSelected\"),t}return $n(t,e),t.prototype.render=function(e,t){var n=document.createElement(\"li\"),i=\"unknown\";switch(e.capture.status){case 50:i=\"deprecated\";break;case 10:i=\"unused\";break;case 20:i=\"disabled\";break;case 30:i=\"redundant\";break;case 40:i=\"valid\"}if(e.capture.VisualState&&(n.className=\" drawCall\"),e.active&&(n.className=\" active\",setTimeout((function(){On.scrollIntoView(n)}),1)),e.capture.marker){var r=document.createElement(\"span\");r.className=i+\" marker important\",r.innerText=e.capture.marker+\" \",r.style.fontWeight=\"1000\",n.appendChild(r)}var o=document.createElement(\"span\"),s=e.capture.text;if(s=s.replace(e.capture.name,''+e.capture.name+\"\"),o.innerHTML=s,n.appendChild(o),e.capture.VisualState&&\"clear\"!==e.capture.name)try{var a=e.capture.DrawCall.shaders[0],c=e.capture.DrawCall.shaders[1],l=document.createElement(\"a\");l.innerText=a.name,l.href=\"#\",n.appendChild(l),this.mapEventListener(l,\"click\",\"onVertexSelected\",e,t);var u=document.createElement(\"a\");u.innerText=c.name,u.href=\"#\",n.appendChild(u),this.mapEventListener(u,\"click\",\"onFragmentSelected\",e,t)}catch(e){}return this.mapEventListener(n,\"click\",\"onCommandSelected\",e,t),n},t}(cn),Dn=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Un=function(e,t){return Object.defineProperty?Object.defineProperty(e,\"raw\",{value:t}):e.raw=t,e},Gn=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Dn(t,e),t.prototype.render=function(e,t){var n=this.htmlTemplate(b||(b=Un(['\\n
                                      \\n
                                      '],['\\n
                                      \\n
                                      '])));return this.renderElementFromTemplate(n,e,t)},t}(cn),Wn=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Vn=function(e,t){return Object.defineProperty?Object.defineProperty(e,\"raw\",{value:t}):e.raw=t,e},Hn=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Wn(t,e),t.prototype.render=function(e,t){var n=this.htmlTemplate(w||(w=Vn(['\\n
                                      \\n
                                      '],['\\n
                                      \\n
                                      '])));return this.renderElementFromTemplate(n,e,t)},t}(cn),Xn=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),jn=function(e,t){return Object.defineProperty?Object.defineProperty(e,\"raw\",{value:t}):e.raw=t,e},Kn=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Xn(t,e),t.prototype.render=function(e,t){var n=this.htmlTemplate(x||(x=jn(['\\n
                                      \\n
                                      ','
                                      \\n
                                        \\n
                                        '],['\\n
                                        \\n
                                        ','
                                        \\n
                                          \\n
                                          '])),e?e.replace(/([A-Z])/g,\" $1\").trim():\"\");return this.renderElementFromTemplate(n,e,t)},t}(cn),zn=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Yn=function(e,t){return Object.defineProperty?Object.defineProperty(e,\"raw\",{value:t}):e.raw=t,e},qn=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return zn(t,e),t.prototype.render=function(e,t){var n=this.htmlTemplate(L||(L=Yn(['\\n
                                        • ',': ',\"
                                        • \"],['\\n
                                        • ',': ',\"
                                        • \"])),e.key,e.value);return this.renderElementFromTemplate(n,e,t)},t}(cn),Zn=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Qn=function(e,t){return Object.defineProperty?Object.defineProperty(e,\"raw\",{value:t}):e.raw=t,e},Jn=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Zn(t,e),t.prototype.render=function(e,t){var n=this.htmlTemplate(I||(I=Qn(['\\n
                                        • ',\"
                                        • \"],['\\n
                                        • ',\"
                                        • \"])),e.value,e.key);return this.renderElementFromTemplate(n,e,t)},t}(cn),ei=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),ti=function(e,t){return Object.defineProperty?Object.defineProperty(e,\"raw\",{value:t}):e.raw=t,e},ni=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return ei(t,e),t.prototype.render=function(e,t){var n=this.htmlTemplate(O||(O=ti(['\\n
                                        • ',': \\n ',' (Open help page)\\n \\n
                                        • '],['\\n
                                        • ',': \\n ',' (Open help page)\\n \\n
                                        • '])),e.key,e.value,e.help);return this.renderElementFromTemplate(n,e,t)},t}(cn),ii=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),ri=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return ii(t,e),t.prototype.render=function(e,t){var n=document.createElement(\"div\");if(n.className=\"jsonVisualStateItemComponent\",e.Attachments)for(var i=0,r=e.Attachments;i1){var a=document.createElement(\"span\");a.innerText=o.attachmentName,n.appendChild(a)}}}else{var c=document.createElement(\"span\");c.innerText=e.FrameBufferStatus,n.appendChild(c)}var l=document.createElement(\"span\");return l.innerText=e.FrameBuffer?e.FrameBuffer.__SPECTOR_Object_TAG.displayText:\"Canvas frame buffer\",n.appendChild(l),n},t}(cn),oi=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),si=function(e,t){return Object.defineProperty?Object.defineProperty(e,\"raw\",{value:t}):e.raw=t,e},ai=function(e){function t(){var t=e.call(this)||this;return t.onCapturesClicked=t.createEvent(\"onCapturesClicked\"),t.onCommandsClicked=t.createEvent(\"onCommandsClicked\"),t.onInformationClicked=t.createEvent(\"onInformationClicked\"),t.onInitStateClicked=t.createEvent(\"onInitStateClicked\"),t.onEndStateClicked=t.createEvent(\"onEndStateClicked\"),t.onCloseClicked=t.createEvent(\"onCloseClicked\"),t.onSearchTextChanged=t.createEvent(\"onSearchTextChanged\"),t.onSearchTextCleared=t.createEvent(\"onSearchTextCleared\"),t}return oi(t,e),t.prototype.render=function(e,t){var n=this.htmlTemplate(F||(F=si([''],[''])),e.searchText,0===e.status?\"active\":\"\",10===e.status?\"active\":\"\",20===e.status?\"active\":\"\",40===e.status?\"active\":\"\",e.commandCount>0?\" (\"+e.commandCount+\")\":\"\",30===e.status?\"active\":\"\"),i=this.renderElementFromTemplate(n,e,t),r=i.querySelector(\".resultViewMenuOpen\"),o=i.querySelectorAll(\"li:not(.resultViewMenuSmall)\");return r.addEventListener(\"click\",(function(e){if(\"true\"===r.getAttribute(\"open\")){r.setAttribute(\"open\",\"false\");for(var t=0;t',e,t)},t}(cn),ui=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),hi=function(e,t){return Object.defineProperty?Object.defineProperty(e,\"raw\",{value:t}):e.raw=t,e},di=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return ui(t,e),t.prototype.render=function(e,t){var n=this.htmlTemplate(M||(M=hi(['\\n
                                          \\n
                                          '],['\\n
                                          \\n
                                          '])),e?\"active\":\"\");return this.renderElementFromTemplate(n,e,t)},t}(cn),pi=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),mi=function(e,t){return Object.defineProperty?Object.defineProperty(e,\"raw\",{value:t}):e.raw=t,e},fi=function(e){function t(){var t=e.call(this)||this;return t.onTranslatedVertexSourceClicked=t.createEvent(\"onTranslatedVertexSourceClicked\"),t.onTranslatedFragmentSourceClicked=t.createEvent(\"onTranslatedFragmentSourceClicked\"),t.onVertexSourceClicked=t.createEvent(\"onVertexSourceClicked\"),t.onFragmentSourceClicked=t.createEvent(\"onFragmentSourceClicked\"),t.onSourceCodeCloseClicked=t.createEvent(\"onSourceCodeCloseClicked\"),t.onSourceCodeChanged=t.createEvent(\"onSourceCodeChanged\"),t}return pi(t,e),t.prototype.showError=function(e){if(this.editor){var t=[];if(e=e||\"\")for(var n=/^.*ERROR:\\W([0-9]+):([0-9]+):(.*)$/gm,i=n.exec(e);null!=i;)t.push({row:+i[2]-1,column:i[1],text:i[3]||\"Error\",type:\"error\"}),i=n.exec(e);this.editor.getSession().setAnnotations(t)}},t.prototype.render=function(e,t){var n,i=this,r=e.fragment?e.sourceFragment:e.sourceVertex;n=e.translated?e.fragment?e.translatedSourceFragment:e.translatedSourceVertex:r?this._indentIfdef(this._beautify(r)):\"\";var o=this.htmlTemplate($||($=mi(['\\n
                                          \\n
                                          \\n \\n
                                          \\n $',\"\\n
                                          \"],['\\n
                                          \\n
                                          \\n \\n
                                          \\n $',\"\\n
                                          \"])),e.translatedSourceVertex?this.htmlTemplate(N||(N=mi(['
                                        • Translated Vertex
                                        • '],['
                                        • Translated Vertex
                                        • '])),!e.fragment&&e.translated?\"active\":\"\"):\"\",e.translatedSourceFragment?this.htmlTemplate(P||(P=mi(['
                                        • Translated Fragment
                                        • '],['
                                        • Translated Fragment
                                        • '])),e.fragment&&e.translated?\"active\":\"\"):\"\",e.fragment||e.translated?\"\":\"active\",e.fragment&&!e.translated?\"active\":\"\",this.htmlTemplate(B||(B=mi(['
                                          ',\"
                                          \"],['
                                          ',\"
                                          \"])),n)),s=this.renderElementFromTemplate(o.replace(/
                                          /g,\"\\n\"),e,t);this.editor=ace.edit(s.querySelector(\".sourceCodeComponent\")),this.editor.setTheme(\"ace/theme/monokai\"),this.editor.getSession().setMode(\"ace/mode/glsl\"),this.editor.setShowPrintMargin(!1);var a=-1;return this.editor.setReadOnly(!e.editable&&!e.translated),this.editor.getSession().on(\"change\",(function(n){-1!==a&&clearTimeout(a),a=setTimeout((function(){i._triggerCompilation(i.editor,e,s,t)}),1500)})),s},t.prototype._triggerCompilation=function(e,t,n,i){t.fragment?t.sourceFragment=e.getValue():t.sourceVertex=e.getValue(),this.triggerEvent(\"onSourceCodeChanged\",n,t,i)},t.prototype._beautify=function(e,n){void 0===n&&(n=0),e=e.trim(),e=this._adaptComments(e);for(var i,r=this._getBracket(e),o=r.firstIteration,s=r.lastIteration,a=\"\",c=0;c<\\s]*=)\\s*/g,(function(e){return\" \"+e.trim()+\" \"}))).replace(/\\s*(,)\\s*/g,(function(e){return e.trim()+\" \"}))).replace(/\\n[ \\t]+/g,\"\\n\")).replace(/\\n/g,\"\\n\"+a)).replace(/\\s+$/g,\"\")).replace(/\\n+$/g,\"\");else{var l=e.substr(0,o),u=e.substr(s+1,e.length),h=e.substr(o+1,s-o-1).trim(),d=this._beautify(h,n+1);i=(i=(i=this._beautify(l,n)+\" {\\n\"+d+\"\\n\"+a+\"}\\n\"+this._beautify(u,n)).replace(/\\s*\\n+\\s*;/g,\";\")).replace(/#endif[\\t \\f\\v]*{/g,\"\\n {\")}return i=(i=(i=i.replace(t.semicolonReplacementKeyRegex,\";\")).replace(t.openCurlyReplacementKeyRegex,\"{\")).replace(t.closeCurlyReplacementKeyRegex,\"}\")},t.prototype._adaptComments=function(e){for(var n=!1,i=!1,r=0;r-1&&0===o?this._getBracket(e,n+1):{firstIteration:n,lastIteration:o}},t.prototype._indentIfdef=function(e){for(var t=0,n=e.split(\"\\n\"),i=0;i'],['\\n
                                          '])),e?\"informationColumnLeftComponent\":\"informationColumnRightComponent\");return this.renderElementFromTemplate(n,e,t)},t}(cn),Ei=function(){function e(){}return e.getMDNLink=function(t){var n=e.WebGL2Functions[t];if(n)return e.WebGL2RootUrl+n;var i=e.WebGLFunctions[t];return i?e.WebGLRootUrl+i:e.WebGLRootUrl+t},e.WebGL2RootUrl=\"https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext/\",e.WebGLRootUrl=\"https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/\",e.WebGL2Functions={beginQuery:\"beginQuery\",beginTransformFeedback:\"beginTransformFeedback\",bindBufferBase:\"bindBufferBase\",bindBufferRange:\"bindBufferRange\",bindSampler:\"bindSampler\",bindTransformFeedback:\"bindTransformFeedback\",bindVertexArray:\"bindVertexArray\",blitFramebuffer:\"blitFramebuffer\",clearBufferfv:\"clearBuffer\",clearBufferiv:\"clearBuffer\",clearBufferuiv:\"clearBuffer\",clearBufferfi:\"clearBuffer\",clientWaitSync:\"clientWaitSync\",compressedTexImage3D:\"compressedTexImage3D\",compressedTexSubImage3D:\"compressedTexSubImage3D\",copyBufferSubData:\"copyBufferSubData\",copyTexSubImage3D:\"copyTexSubImage3D\",createQuery:\"createQuery\",createSampler:\"createSampler\",createTransformFeedback:\"createTransformFeedback\",createVertexArray:\"createVertexArray\",deleteQuery:\"deleteQuery\",deleteSampler:\"deleteSampler\",deleteSync:\"deleteSync\",deleteTransformFeedback:\"deleteTransformFeedback\",deleteVertexArray:\"deleteVertexArray\",drawArraysInstanced:\"drawArraysInstanced\",drawBuffers:\"drawBuffers\",drawElementsInstanced:\"drawElementsInstanced\",drawRangeElements:\"drawRangeElements\",endQuery:\"endQuery\",endTransformFeedback:\"endTransformFeedback\",fenceSync:\"fenceSync\",framebufferTextureLayer:\"framebufferTextureLayer\",getActiveUniformBlockName:\"getActiveUniformBlockName\",getActiveUniformBlockParameter:\"getActiveUniformBlockParameter\",getActiveUniforms:\"getActiveUniforms\",getBufferSubData:\"getBufferSubData\",getFragDataLocation:\"getFragDataLocation\",getIndexedParameter:\"getIndexedParameter\",getInternalformatParameter:\"getInternalformatParameter\",getQuery:\"getQuery\",getQueryParameter:\"getQueryParameter\",getSamplerParameter:\"getSamplerParameter\",getSyncParameter:\"getSyncParameter\",getTransformFeedbackVarying:\"getTransformFeedbackVarying\",getUniformBlockIndex:\"getUniformBlockIndex\",getUniformIndices:\"getUniformIndices\",invalidateFramebuffer:\"invalidateFramebuffer\",invalidateSubFramebuffer:\"invalidateSubFramebuffer\",isQuery:\"isQuery\",isSampler:\"isSampler\",isSync:\"isSync\",isTransformFeedback:\"isTransformFeedback\",isVertexArray:\"isVertexArray\",pauseTransformFeedback:\"pauseTransformFeedback\",readBuffer:\"readBuffer\",renderbufferStorageMultisample:\"renderbufferStorageMultisample\",resumeTransformFeedback:\"resumeTransformFeedback\",samplerParameteri:\"samplerParameter\",samplerParameterf:\"samplerParameter\",texImage3D:\"texImage3D\",texStorage2D:\"texStorage2D\",texStorage3D:\"texStorage3D\",texSubImage3D:\"texSubImage3D\",transformFeedbackVaryings:\"transformFeedbackVaryings\",uniform1ui:\"uniform\",uniform2ui:\"uniform\",uniform3ui:\"uniform\",uniform4ui:\"uniform\",uniform1fv:\"uniform\",uniform2fv:\"uniform\",uniform3fv:\"uniform\",uniform4fv:\"uniform\",uniform1iv:\"uniform\",uniform2iv:\"uniform\",uniform3iv:\"uniform\",uniform4iv:\"uniform\",uniform1uiv:\"uniform\",uniform2uiv:\"uniform\",uniform3uiv:\"uniform\",uniform4uiv:\"uniform\",uniformBlockBinding:\"uniformBlockBinding\",uniformMatrix2fv:\"uniformMatrix\",uniformMatrix3x2fv:\"uniformMatrix\",uniformMatrix4x2fv:\"uniformMatrix\",uniformMatrix2x3fv:\"uniformMatrix\",uniformMatrix3fv:\"uniformMatrix\",uniformMatrix4x3fv:\"uniformMatrix\",uniformMatrix2x4fv:\"uniformMatrix\",uniformMatrix3x4fv:\"uniformMatrix\",uniformMatrix4fv:\"uniformMatrix\",vertexAttribDivisor:\"vertexAttribDivisor\",vertexAttribI4i:\"vertexAttribI\",vertexAttribI4ui:\"vertexAttribI\",vertexAttribI4iv:\"vertexAttribI\",vertexAttribI4uiv:\"vertexAttribI\",vertexAttribIPointer:\"vertexAttribIPointer\",waitSync:\"waitSync\"},e.WebGLFunctions={uniform1f:\"uniform\",uniform1fv:\"uniform\",uniform1i:\"uniform\",uniform1iv:\"uniform\",uniform2f:\"uniform\",uniform2fv:\"uniform\",uniform2i:\"uniform\",uniform2iv:\"uniform\",uniform3f:\"uniform\",uniform3i:\"uniform\",uniform3iv:\"uniform\",uniform4f:\"uniform\",uniform4fv:\"uniform\",uniform4i:\"uniform\",uniform4iv:\"uniform\",uniformMatrix2fv:\"uniformMatrix\",uniformMatrix3fv:\"uniformMatrix\",uniformMatrix4fv:\"uniformMatrix\",vertexAttrib1f:\"vertexAttrib\",vertexAttrib2f:\"vertexAttrib\",vertexAttrib3f:\"vertexAttrib\",vertexAttrib4f:\"vertexAttrib\",vertexAttrib1fv:\"vertexAttrib\",vertexAttrib2fv:\"vertexAttrib\",vertexAttrib3fv:\"vertexAttrib\",vertexAttrib4fv:\"vertexAttrib\"},e}(),Ci=function(){function e(e){var t=this;void 0===e&&(e=null),this.rootPlaceHolder=e,this.onSourceCodeChanged=new s,this.rootPlaceHolder=this.rootPlaceHolder||document.body,this.mvx=new sn(this.rootPlaceHolder),this.searchText=\"\",this.currentCommandId=-1,this.visible=!1,this.commandCount=0,this.commandListStateId=-1,this.commandDetailStateId=-1,this.currentCaptureStateId=-1,this.currentCommandStateId=-1,this.currentVisualStateId=-1,this.visualStateListStateId=-1,this.initVisualStateId=-1,this.sourceCodeComponentStateId=-1,this.captureListComponent=new Tn,this.captureListItemComponent=new wn,this.visualStateListComponent=new In,this.visualStateListItemComponent=new Mn,this.commandListComponent=new Bn,this.commandListItemComponent=new kn,this.commandDetailComponent=new Gn,this.jsonContentComponent=new Hn,this.jsonGroupComponent=new Kn,this.jsonItemComponent=new qn,this.jsonImageItemComponent=new Jn,this.jsonHelpItemComponent=new ni,this.jsonVisualStateItemComponent=new ri,this.resultViewMenuComponent=new ai,this.resultViewContentComponent=new li,this.resultViewComponent=new di,this.sourceCodeComponent=new fi,this.informationColumnComponent=new _i,this.rootStateId=this.mvx.addRootState(null,this.resultViewComponent),this.menuStateId=this.mvx.addChildState(this.rootStateId,null,this.resultViewMenuComponent),this.contentStateId=this.mvx.addChildState(this.rootStateId,null,this.resultViewContentComponent),this.captureListStateId=this.mvx.addChildState(this.rootStateId,!1,this.captureListComponent),this.initKeyboardEvents(),this.initMenuComponent(),this.captureListComponent.onCaptureLoaded.add((function(e){t.addCapture(e)})),this.captureListItemComponent.onCaptureSelected.add((function(e){t.selectCapture(e.stateId)})),this.captureListItemComponent.onSaveRequested.add((function(e){t.saveCapture(e.state.capture)})),this.visualStateListItemComponent.onVisualStateSelected.add((function(e){t.selectVisualState(e.stateId)})),this.commandListItemComponent.onCommandSelected.add((function(e){t.selectCommand(e.stateId)})),this.commandListItemComponent.onVertexSelected.add((function(e){t.selectCommand(e.stateId),t.openShader(!1)})),this.commandListItemComponent.onFragmentSelected.add((function(e){t.selectCommand(e.stateId),t.openShader(!0)})),this.sourceCodeComponent.onSourceCodeCloseClicked.add((function(){t.displayCurrentCapture()})),this.sourceCodeComponent.onTranslatedVertexSourceClicked.add((function(e){var n=t.mvx.getGenericState(t.sourceCodeComponentStateId);n.fragment=!1,n.translated=!0,t.mvx.updateState(t.sourceCodeComponentStateId,n)})),this.sourceCodeComponent.onTranslatedFragmentSourceClicked.add((function(e){var n=t.mvx.getGenericState(t.sourceCodeComponentStateId);n.fragment=!0,n.translated=!0,t.mvx.updateState(t.sourceCodeComponentStateId,n)})),this.sourceCodeComponent.onVertexSourceClicked.add((function(e){var n=t.mvx.getGenericState(t.sourceCodeComponentStateId);n.fragment=!1,n.translated=!1,t.mvx.updateState(t.sourceCodeComponentStateId,n)})),this.sourceCodeComponent.onFragmentSourceClicked.add((function(e){var n=t.mvx.getGenericState(t.sourceCodeComponentStateId);n.fragment=!0,n.translated=!1,t.mvx.updateState(t.sourceCodeComponentStateId,n)})),this.sourceCodeComponent.onSourceCodeChanged.add((function(e){t.onSourceCodeChanged.trigger({programId:e.state.programId,sourceFragment:e.state.sourceFragment,sourceVertex:e.state.sourceVertex,translatedSourceFragment:e.state.translatedSourceFragment,translatedSourceVertex:e.state.translatedSourceVertex})})),this.updateViewState()}return e.prototype.saveCapture=function(e){var t=JSON.stringify(e,null,4),n=new Blob([t],{type:\"octet/stream\"}),i=\"capture \"+new Date(e.startTime).toTimeString().split(\" \")[0]+\".json\";if(navigator.msSaveBlob)navigator.msSaveBlob(n,i);else{var r=document.createElement(\"a\"),o=window.URL.createObjectURL(n);r.setAttribute(\"href\",o),r.setAttribute(\"download\",i),r.click()}},e.prototype.selectCapture=function(e){this.currentCommandId=-1,this.currentCaptureStateId=e,this.displayCurrentCapture()},e.prototype.selectCommand=function(e){this.currentCommandStateId=e,this.currentVisualStateId=this.displayCurrentCommand(),this.displayCurrentVisualState()},e.prototype.selectVisualState=function(e){this.currentVisualStateId=e,this.currentCommandStateId=this.displayCurrentVisualState(),this.displayCurrentCommand()},e.prototype.display=function(){this.visible=!0,this.updateViewState()},e.prototype.hide=function(){this.visible=!1,this.updateViewState()},e.prototype.addCapture=function(e){var t=this.mvx.insertChildState(this.captureListStateId,{capture:e,active:!1},0,this.captureListItemComponent);return this.selectCapture(t),t},e.prototype.showSourceCodeError=function(e){this.sourceCodeComponent.showError(e)},e.prototype.initKeyboardEvents=function(){var e=this;this.rootPlaceHolder.addEventListener(\"keydown\",(function(t){40===e.mvx.getGenericState(e.menuStateId).status&&(38===t.keyCode?(t.preventDefault(),t.stopPropagation(),e.selectPreviousCommand()):40===t.keyCode?(t.preventDefault(),t.stopPropagation(),e.selectNextCommand()):33===t.keyCode?(t.preventDefault(),t.stopPropagation(),e.selectPreviousVisualState()):34===t.keyCode&&(t.preventDefault(),t.stopPropagation(),e.selectNextVisualState()))}))},e.prototype.openShader=function(e){this.mvx.removeChildrenStates(this.contentStateId);var t=this.mvx.getGenericState(this.currentCommandStateId);this.sourceCodeComponentStateId=this.mvx.addChildState(this.contentStateId,{programId:t.capture.DrawCall.programStatus.program.__SPECTOR_Object_TAG.id,nameVertex:t.capture.DrawCall.shaders[0].name,nameFragment:t.capture.DrawCall.shaders[1].name,sourceVertex:t.capture.DrawCall.shaders[0].source,sourceFragment:t.capture.DrawCall.shaders[1].source,translatedSourceVertex:t.capture.DrawCall.shaders[0].translatedSource,translatedSourceFragment:t.capture.DrawCall.shaders[1].translatedSource,fragment:e,translated:!1,editable:t.capture.DrawCall.programStatus.RECOMPILABLE},this.sourceCodeComponent),this.commandDetailStateId=this.mvx.addChildState(this.contentStateId,null,this.commandDetailComponent),this.displayCurrentCommandDetail(t)},e.prototype.selectPreviousCommand=function(){var e=this.mvx.getGenericState(this.currentCommandStateId);e.previousCommandStateId<0||this.selectCommand(e.previousCommandStateId)},e.prototype.selectNextCommand=function(){var e=this.mvx.getGenericState(this.currentCommandStateId);e.nextCommandStateId<0||this.selectCommand(e.nextCommandStateId)},e.prototype.selectPreviousVisualState=function(){var e=this.mvx.getGenericState(this.currentVisualStateId);e.previousVisualStateId<0||this.selectVisualState(e.previousVisualStateId)},e.prototype.selectNextVisualState=function(){var e=this.mvx.getGenericState(this.currentVisualStateId);e.nextVisualStateId<0||this.selectVisualState(e.nextVisualStateId)},e.prototype.initMenuComponent=function(){var e=this;this.mvx.updateState(this.menuStateId,{status:0,searchText:this.searchText,commandCount:0}),this.resultViewMenuComponent.onCloseClicked.add((function(t){e.hide()})),this.resultViewMenuComponent.onCapturesClicked.add((function(t){e.displayCaptures()})),this.resultViewMenuComponent.onCommandsClicked.add((function(t){e.displayCurrentCapture()})),this.resultViewMenuComponent.onInformationClicked.add((function(t){e.displayInformation()})),this.resultViewMenuComponent.onInitStateClicked.add((function(t){e.displayInitState()})),this.resultViewMenuComponent.onEndStateClicked.add((function(t){e.displayEndState()})),this.resultViewMenuComponent.onSearchTextChanged.add((function(t){e.search(t.sender.value)})),this.resultViewMenuComponent.onSearchTextCleared.add((function(t){e.mvx.updateState(e.menuStateId,{status:t.state.status,searchText:\"\",commandCount:t.state.commandCount}),e.search(\"\")}))},e.prototype.onCaptureRelatedAction=function(e){var t=this.mvx.getGenericState(this.currentCaptureStateId);return this.commandCount=t.capture.commands.length,this.mvx.removeChildrenStates(this.contentStateId),this.mvx.updateState(this.menuStateId,{status:e,searchText:this.searchText,commandCount:this.commandCount}),this.mvx.getGenericState(this.captureListStateId)&&this.mvx.updateState(this.captureListStateId,!1),t.capture},e.prototype.displayCaptures=function(){this.mvx.updateState(this.menuStateId,{status:0,searchText:this.searchText,commandCount:this.commandCount}),this.mvx.updateState(this.captureListStateId,!0)},e.prototype.displayInformation=function(){var e=this.onCaptureRelatedAction(10),t=this.mvx.addChildState(this.contentStateId,!0,this.informationColumnComponent),n=this.mvx.addChildState(this.contentStateId,!1,this.informationColumnComponent),i=this.mvx.addChildState(t,null,this.jsonContentComponent);this.displayJSONGroup(i,\"Canvas\",e.canvas),this.displayJSONGroup(i,\"Context\",e.context);for(var r=this.mvx.addChildState(n,null,this.jsonContentComponent),o=0,s=e.analyses;o2&&-1===e.indexOf(this.searchText.toLowerCase()))},e.prototype.search=function(e){switch(this.searchText=e,this.mvx.getGenericState(this.menuStateId).status){case 0:case 40:this.displayCurrentCapture();break;case 30:this.displayEndState();break;case 10:this.displayInformation();break;case 20:this.displayInitState()}this.searchText=\"\"},e}(),Ai={CaptureMenu:Rn,ResultView:Ci},Ri=function(){function e(){this.noFrameTimeout=-1,this.captureNextFrames=0,this.captureNextCommands=0,this.quickCapture=!1,this.fullCapture=!1,this.retry=0,this.contexts=[],this.timeSpy=new en,this.onCaptureStarted=new s,this.onCapture=new s,this.onError=new s,this.timeSpy.onFrameStart.add(this.onFrameStart,this),this.timeSpy.onFrameEnd.add(this.onFrameEnd,this),this.timeSpy.onError.add(this.onErrorInternal,this)}return e.getFirstAvailable3dContext=function(e){return this.tryGetContextFromHelperField(e)||this.tryGetContextFromCanvas(e,\"webgl\")||this.tryGetContextFromCanvas(e,\"experimental-webgl\")||this.tryGetContextFromCanvas(e,\"webgl2\")||this.tryGetContextFromCanvas(e,\"experimental-webgl2\")},e.tryGetContextFromHelperField=function(e){var t=e instanceof HTMLCanvasElement?e.getAttribute(\"__spector_context_type\"):e.__spector_context_type;if(t)return this.tryGetContextFromCanvas(e,t)},e.tryGetContextFromCanvas=function(e,t){var n;try{n=e.getContext(t)}catch(e){}return n},e.prototype.displayUI=function(e){var t=this;void 0===e&&(e=!1),this.captureMenu||(this.getCaptureUI(),this.captureMenu.onPauseRequested.add(this.pause,this),this.captureMenu.onPlayRequested.add(this.play,this),this.captureMenu.onPlayNextFrameRequested.add(this.playNextFrame,this),this.captureMenu.onCaptureRequested.add((function(e){e&&t.captureCanvas(e.ref)}),this),setInterval((function(){t.captureMenu.setFPS(t.getFps())}),1e3),e||this.captureMenu.trackPageCanvases(),this.captureMenu.display()),this.resultView||(this.getResultUI(),this.onCapture.add((function(e){t.resultView.display(),t.resultView.addCapture(e)})))},e.prototype.getResultUI=function(){var e=this;return this.resultView||(this.resultView=new Ci,this.resultView.onSourceCodeChanged.add((function(t){e.rebuildProgramFromProgramId(t.programId,t.sourceVertex,t.sourceFragment,(function(n){e.referenceNewProgram(t.programId,n),e.resultView.showSourceCodeError(null)}),(function(t){e.resultView.showSourceCodeError(t)}))}))),this.resultView},e.prototype.getCaptureUI=function(){return this.captureMenu||(this.captureMenu=new Rn),this.captureMenu},e.prototype.rebuildProgramFromProgramId=function(e,t,n,i,r){var o=Et.getFromGlobalStore(e);this.rebuildProgram(o,t,n,i,r)},e.prototype.rebuildProgram=function(e,t,n,i,o){r.rebuildProgram(e,t,n,i,o)},e.prototype.referenceNewProgram=function(e,t){Et.updateInGlobalStore(e,t)},e.prototype.pause=function(){this.timeSpy.changeSpeedRatio(0)},e.prototype.play=function(){this.timeSpy.changeSpeedRatio(1)},e.prototype.playNextFrame=function(){this.timeSpy.playNextFrame()},e.prototype.drawOnlyEveryXFrame=function(e){this.timeSpy.changeSpeedRatio(e)},e.prototype.getFps=function(){return this.timeSpy.getFps()},e.prototype.spyCanvases=function(){this.canvasSpy?this.onErrorInternal(\"Already spying canvas.\"):(this.canvasSpy=new tn,this.canvasSpy.onContextRequested.add(this.spyContext,this))},e.prototype.spyCanvas=function(e){this.canvasSpy?this.onErrorInternal(\"Already spying canvas.\"):(this.canvasSpy=new tn(e),this.canvasSpy.onContextRequested.add(this.spyContext,this))},e.prototype.getAvailableContexts=function(){return this.getAvailableContexts()},e.prototype.captureCanvas=function(t,n,i,r){void 0===n&&(n=0),void 0===i&&(i=!1),void 0===r&&(r=!1);var s=this.getAvailableContextSpyByCanvas(t);if(s)this.captureContextSpy(s,n,i,r);else{var a=e.getFirstAvailable3dContext(t);a?this.captureContext(a,n,i,r):o.error(\"No webgl context available on the chosen canvas.\")}},e.prototype.captureContext=function(e,t,n,i){void 0===t&&(t=0),void 0===n&&(n=!1),void 0===i&&(i=!1);var r=this.getAvailableContextSpyByCanvas(e.canvas);r||((r=e.getIndexedParameter?new Jt({context:e,version:2,recordAlways:!1}):new Jt({context:e,version:1,recordAlways:!1})).onMaxCommand.add(this.stopCapture,this),this.contexts.push({canvas:r.context.canvas,contextSpy:r})),r&&this.captureContextSpy(r,t,n,i)},e.prototype.captureContextSpy=function(e,t,n,i){var r=this;void 0===t&&(t=0),void 0===n&&(n=!1),void 0===i&&(i=!1),this.quickCapture=n,this.fullCapture=i,this.capturingContext?this.onErrorInternal(\"Already capturing a context.\"):(this.retry=0,this.capturingContext=e,this.capturingContext.setMarker(this.marker),(t=Math.min(t,5e3))>0?this.captureCommands(t):this.captureFrames(1),this.noFrameTimeout=setTimeout((function(){t>0?r.stopCapture():r.capturingContext&&r.retry>1?r.onErrorInternal(\"No frames with gl commands detected. Try moving the camera.\"):r.onErrorInternal(\"No frames detected. Try moving the camera or implementing requestAnimationFrame.\")}),1e4))},e.prototype.captureNextFrame=function(e,t,n){void 0===t&&(t=!1),void 0===n&&(n=!1),e instanceof HTMLCanvasElement||self.OffscreenCanvas&&e instanceof OffscreenCanvas?this.captureCanvas(e,0,t,n):this.captureContext(e,0,t,n)},e.prototype.startCapture=function(e,t,n,i){void 0===n&&(n=!1),void 0===i&&(i=!1),e instanceof HTMLCanvasElement||self.OffscreenCanvas&&e instanceof OffscreenCanvas?this.captureCanvas(e,t,n,i):this.captureContext(e,t,n,i)},e.prototype.stopCapture=function(){if(this.capturingContext){var e=this.capturingContext.stopCapture();if(e.commands.length>0)return this.noFrameTimeout>-1&&clearTimeout(this.noFrameTimeout),this.triggerCapture(e),this.capturingContext=void 0,this.captureNextFrames=0,this.captureNextCommands=0,e;0===this.captureNextCommands&&(this.retry++,this.captureFrames(1))}},e.prototype.setMarker=function(e){this.marker=e,this.capturingContext&&this.capturingContext.setMarker(e)},e.prototype.clearMarker=function(){this.marker=null,this.capturingContext&&this.capturingContext.clearMarker()},e.prototype.captureFrames=function(e){this.captureNextFrames=e,this.captureNextCommands=0,this.playNextFrame()},e.prototype.captureCommands=function(e){this.captureNextFrames=0,this.captureNextCommands=e,this.play(),this.capturingContext?(this.onCaptureStarted.trigger(void 0),this.capturingContext.startCapture(e,this.quickCapture,this.fullCapture)):(this.onErrorInternal(\"No context to capture from.\"),this.captureNextCommands=0)},e.prototype.spyContext=function(e){var t=this.getAvailableContextSpyByCanvas(e.context.canvas);t||((t=new Jt({context:e.context,version:e.contextVersion,recordAlways:!0})).onMaxCommand.add(this.stopCapture,this),this.contexts.push({canvas:t.context.canvas,contextSpy:t})),t.spy()},e.prototype.getAvailableContextSpyByCanvas=function(e){for(var t=0,n=this.contexts;t0||(this.captureNextFrames>0?(this.capturingContext&&(this.onCaptureStarted.trigger(void 0),this.capturingContext.startCapture(0,this.quickCapture,this.fullCapture)),this.captureNextFrames--):this.capturingContext=void 0)},e.prototype.onFrameEnd=function(){this.captureNextCommands>0||0===this.captureNextFrames&&this.stopCapture()},e.prototype.triggerCapture=function(e){this.captureMenu&&this.captureMenu.captureComplete(null),this.onCapture.trigger(e)},e.prototype.onErrorInternal=function(e){if(o.error(e),this.noFrameTimeout>-1&&clearTimeout(this.noFrameTimeout),!this.capturingContext)throw e;this.capturingContext=void 0,this.captureNextFrames=0,this.captureNextCommands=0,this.retry=0,this.captureMenu&&this.captureMenu.captureComplete(e),this.onError.trigger(e)},e}()}])}));","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):e.Stats=t()}(this,function(){\"use strict\";var c=function(){var n=0,l=document.createElement(\"div\");function e(e){return l.appendChild(e.dom),e}function t(e){for(var t=0;t EPS\n\t\t\t// using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\n\t\t\tif ( zoomChanged ||\n\t\t\t\tlastPosition.distanceToSquared( scope.object.position ) > EPS ||\n\t\t\t\t8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS ) {\n\n\t\t\t\tscope.dispatchEvent( changeEvent );\n\n\t\t\t\tlastPosition.copy( scope.object.position );\n\t\t\t\tlastQuaternion.copy( scope.object.quaternion );\n\t\t\t\tzoomChanged = false;\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t\treturn false;\n\n\t\t};\n\n\t}();\n\n\tthis.dispose = function () {\n\n\t\tscope.domElement.removeEventListener( 'contextmenu', onContextMenu, false );\n\t\tscope.domElement.removeEventListener( 'mousedown', onMouseDown, false );\n\t\tscope.domElement.removeEventListener( 'wheel', onMouseWheel, false );\n\n\t\tscope.domElement.removeEventListener( 'touchstart', onTouchStart, false );\n\t\tscope.domElement.removeEventListener( 'touchend', onTouchEnd, false );\n\t\tscope.domElement.removeEventListener( 'touchmove', onTouchMove, false );\n\n\t\tdocument.removeEventListener( 'mousemove', onMouseMove, false );\n\t\tdocument.removeEventListener( 'mouseup', onMouseUp, false );\n\n\t\tscope.domElement.removeEventListener( 'keydown', onKeyDown, false );\n\n\t\t//scope.dispatchEvent( { type: 'dispose' } ); // should this be added here?\n\n\t};\n\n\t//\n\t// internals\n\t//\n\n\tvar scope = this;\n\n\tvar changeEvent = { type: 'change' };\n\tvar startEvent = { type: 'start' };\n\tvar endEvent = { type: 'end' };\n\n\tvar STATE = {\n\t\tNONE: - 1,\n\t\tROTATE: 0,\n\t\tDOLLY: 1,\n\t\tPAN: 2,\n\t\tTOUCH_ROTATE: 3,\n\t\tTOUCH_PAN: 4,\n\t\tTOUCH_DOLLY_PAN: 5,\n\t\tTOUCH_DOLLY_ROTATE: 6\n\t};\n\n\tvar state = STATE.NONE;\n\n\tvar EPS = 0.000001;\n\n\t// current position in spherical coordinates\n\tvar spherical = new THREE.Spherical();\n\tvar sphericalDelta = new THREE.Spherical();\n\n\tvar scale = 1;\n\tvar panOffset = new THREE.Vector3();\n\tvar zoomChanged = false;\n\n\tvar rotateStart = new THREE.Vector2();\n\tvar rotateEnd = new THREE.Vector2();\n\tvar rotateDelta = new THREE.Vector2();\n\n\tvar panStart = new THREE.Vector2();\n\tvar panEnd = new THREE.Vector2();\n\tvar panDelta = new THREE.Vector2();\n\n\tvar dollyStart = new THREE.Vector2();\n\tvar dollyEnd = new THREE.Vector2();\n\tvar dollyDelta = new THREE.Vector2();\n\n\tfunction getAutoRotationAngle() {\n\n\t\treturn 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;\n\n\t}\n\n\tfunction getZoomScale() {\n\n\t\treturn Math.pow( 0.95, scope.zoomSpeed );\n\n\t}\n\n\tfunction rotateLeft( angle ) {\n\n\t\tsphericalDelta.theta -= angle;\n\n\t}\n\n\tfunction rotateUp( angle ) {\n\n\t\tsphericalDelta.phi -= angle;\n\n\t}\n\n\tvar panLeft = function () {\n\n\t\tvar v = new THREE.Vector3();\n\n\t\treturn function panLeft( distance, objectMatrix ) {\n\n\t\t\tv.setFromMatrixColumn( objectMatrix, 0 ); // get X column of objectMatrix\n\t\t\tv.multiplyScalar( - distance );\n\n\t\t\tpanOffset.add( v );\n\n\t\t};\n\n\t}();\n\n\tvar panUp = function () {\n\n\t\tvar v = new THREE.Vector3();\n\n\t\treturn function panUp( distance, objectMatrix ) {\n\n\t\t\tif ( scope.screenSpacePanning === true ) {\n\n\t\t\t\tv.setFromMatrixColumn( objectMatrix, 1 );\n\n\t\t\t} else {\n\n\t\t\t\tv.setFromMatrixColumn( objectMatrix, 0 );\n\t\t\t\tv.crossVectors( scope.object.up, v );\n\n\t\t\t}\n\n\t\t\tv.multiplyScalar( distance );\n\n\t\t\tpanOffset.add( v );\n\n\t\t};\n\n\t}();\n\n\t// deltaX and deltaY are in pixels; right and down are positive\n\tvar pan = function () {\n\n\t\tvar offset = new THREE.Vector3();\n\n\t\treturn function pan( deltaX, deltaY ) {\n\n\t\t\tvar element = scope.domElement;\n\n\t\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\t\t// perspective\n\t\t\t\tvar position = scope.object.position;\n\t\t\t\toffset.copy( position ).sub( scope.target );\n\t\t\t\tvar targetDistance = offset.length();\n\n\t\t\t\t// half of the fov is center to top of screen\n\t\t\t\ttargetDistance *= Math.tan( ( scope.object.fov / 2 ) * Math.PI / 180.0 );\n\n\t\t\t\t// we use only clientHeight here so aspect ratio does not distort speed\n\t\t\t\tpanLeft( 2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix );\n\t\t\t\tpanUp( 2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix );\n\n\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\t// orthographic\n\t\t\t\tpanLeft( deltaX * ( scope.object.right - scope.object.left ) / scope.object.zoom / element.clientWidth, scope.object.matrix );\n\t\t\t\tpanUp( deltaY * ( scope.object.top - scope.object.bottom ) / scope.object.zoom / element.clientHeight, scope.object.matrix );\n\n\t\t\t} else {\n\n\t\t\t\t// camera neither orthographic nor perspective\n\t\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.' );\n\t\t\t\tscope.enablePan = false;\n\n\t\t\t}\n\n\t\t};\n\n\t}();\n\n\tfunction dollyIn( dollyScale ) {\n\n\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\tscale /= dollyScale;\n\n\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\tscope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom * dollyScale ) );\n\t\t\tscope.object.updateProjectionMatrix();\n\t\t\tzoomChanged = true;\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n\t\t\tscope.enableZoom = false;\n\n\t\t}\n\n\t}\n\n\tfunction dollyOut( dollyScale ) {\n\n\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\tscale *= dollyScale;\n\n\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\tscope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom / dollyScale ) );\n\t\t\tscope.object.updateProjectionMatrix();\n\t\t\tzoomChanged = true;\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n\t\t\tscope.enableZoom = false;\n\n\t\t}\n\n\t}\n\n\t//\n\t// event callbacks - update the object state\n\t//\n\n\tfunction handleMouseDownRotate( event ) {\n\n\t\trotateStart.set( event.clientX, event.clientY );\n\n\t}\n\n\tfunction handleMouseDownDolly( event ) {\n\n\t\tdollyStart.set( event.clientX, event.clientY );\n\n\t}\n\n\tfunction handleMouseDownPan( event ) {\n\n\t\tpanStart.set( event.clientX, event.clientY );\n\n\t}\n\n\tfunction handleMouseMoveRotate( event ) {\n\n\t\trotateEnd.set( event.clientX, event.clientY );\n\n\t\trotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );\n\n\t\tvar element = scope.domElement;\n\n\t\trotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height\n\n\t\trotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );\n\n\t\trotateStart.copy( rotateEnd );\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleMouseMoveDolly( event ) {\n\n\t\tdollyEnd.set( event.clientX, event.clientY );\n\n\t\tdollyDelta.subVectors( dollyEnd, dollyStart );\n\n\t\tif ( dollyDelta.y > 0 ) {\n\n\t\t\tdollyIn( getZoomScale() );\n\n\t\t} else if ( dollyDelta.y < 0 ) {\n\n\t\t\tdollyOut( getZoomScale() );\n\n\t\t}\n\n\t\tdollyStart.copy( dollyEnd );\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleMouseMovePan( event ) {\n\n\t\tpanEnd.set( event.clientX, event.clientY );\n\n\t\tpanDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );\n\n\t\tpan( panDelta.x, panDelta.y );\n\n\t\tpanStart.copy( panEnd );\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleMouseUp( /*event*/ ) {\n\n\t\t// no-op\n\n\t}\n\n\tfunction handleMouseWheel( event ) {\n\n\t\tif ( event.deltaY < 0 ) {\n\n\t\t\tdollyOut( getZoomScale() );\n\n\t\t} else if ( event.deltaY > 0 ) {\n\n\t\t\tdollyIn( getZoomScale() );\n\n\t\t}\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleKeyDown( event ) {\n\n\t\tvar needsUpdate = false;\n\n\t\tswitch ( event.keyCode ) {\n\n\t\t\tcase scope.keys.UP:\n\t\t\t\tpan( 0, scope.keyPanSpeed );\n\t\t\t\tneedsUpdate = true;\n\t\t\t\tbreak;\n\n\t\t\tcase scope.keys.BOTTOM:\n\t\t\t\tpan( 0, - scope.keyPanSpeed );\n\t\t\t\tneedsUpdate = true;\n\t\t\t\tbreak;\n\n\t\t\tcase scope.keys.LEFT:\n\t\t\t\tpan( scope.keyPanSpeed, 0 );\n\t\t\t\tneedsUpdate = true;\n\t\t\t\tbreak;\n\n\t\t\tcase scope.keys.RIGHT:\n\t\t\t\tpan( - scope.keyPanSpeed, 0 );\n\t\t\t\tneedsUpdate = true;\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( needsUpdate ) {\n\n\t\t\t// prevent the browser from scrolling on cursor keys\n\t\t\tevent.preventDefault();\n\n\t\t\tscope.update();\n\n\t\t}\n\n\n\t}\n\n\tfunction handleTouchStartRotate( event ) {\n\n\t\tif ( event.touches.length == 1 ) {\n\n\t\t\trotateStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\n\t\t} else {\n\n\t\t\tvar x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );\n\t\t\tvar y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );\n\n\t\t\trotateStart.set( x, y );\n\n\t\t}\n\n\t}\n\n\tfunction handleTouchStartPan( event ) {\n\n\t\tif ( event.touches.length == 1 ) {\n\n\t\t\tpanStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\n\t\t} else {\n\n\t\t\tvar x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );\n\t\t\tvar y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );\n\n\t\t\tpanStart.set( x, y );\n\n\t\t}\n\n\t}\n\n\tfunction handleTouchStartDolly( event ) {\n\n\t\tvar dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n\t\tvar dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n\n\t\tvar distance = Math.sqrt( dx * dx + dy * dy );\n\n\t\tdollyStart.set( 0, distance );\n\n\t}\n\n\tfunction handleTouchStartDollyPan( event ) {\n\n\t\tif ( scope.enableZoom ) handleTouchStartDolly( event );\n\n\t\tif ( scope.enablePan ) handleTouchStartPan( event );\n\n\t}\n\n\tfunction handleTouchStartDollyRotate( event ) {\n\n\t\tif ( scope.enableZoom ) handleTouchStartDolly( event );\n\n\t\tif ( scope.enableRotate ) handleTouchStartRotate( event );\n\n\t}\n\n\tfunction handleTouchMoveRotate( event ) {\n\n\t\tif ( event.touches.length == 1 ) {\n\n\t\t\trotateEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\n\t\t} else {\n\n\t\t\tvar x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );\n\t\t\tvar y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );\n\n\t\t\trotateEnd.set( x, y );\n\n\t\t}\n\n\t\trotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );\n\n\t\tvar element = scope.domElement;\n\n\t\trotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height\n\n\t\trotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );\n\n\t\trotateStart.copy( rotateEnd );\n\n\t}\n\n\tfunction handleTouchMovePan( event ) {\n\n\t\tif ( event.touches.length == 1 ) {\n\n\t\t\tpanEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\n\t\t} else {\n\n\t\t\tvar x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );\n\t\t\tvar y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );\n\n\t\t\tpanEnd.set( x, y );\n\n\t\t}\n\n\t\tpanDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );\n\n\t\tpan( panDelta.x, panDelta.y );\n\n\t\tpanStart.copy( panEnd );\n\n\t}\n\n\tfunction handleTouchMoveDolly( event ) {\n\n\t\tvar dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n\t\tvar dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n\n\t\tvar distance = Math.sqrt( dx * dx + dy * dy );\n\n\t\tdollyEnd.set( 0, distance );\n\n\t\tdollyDelta.set( 0, Math.pow( dollyEnd.y / dollyStart.y, scope.zoomSpeed ) );\n\n\t\tdollyIn( dollyDelta.y );\n\n\t\tdollyStart.copy( dollyEnd );\n\n\t}\n\n\tfunction handleTouchMoveDollyPan( event ) {\n\n\t\tif ( scope.enableZoom ) handleTouchMoveDolly( event );\n\n\t\tif ( scope.enablePan ) handleTouchMovePan( event );\n\n\t}\n\n\tfunction handleTouchMoveDollyRotate( event ) {\n\n\t\tif ( scope.enableZoom ) handleTouchMoveDolly( event );\n\n\t\tif ( scope.enableRotate ) handleTouchMoveRotate( event );\n\n\t}\n\n\tfunction handleTouchEnd( /*event*/ ) {\n\n\t\t// no-op\n\n\t}\n\n\t//\n\t// event handlers - FSM: listen for events and reset state\n\t//\n\n\tfunction onMouseDown( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\t// Prevent the browser from scrolling.\n\n\t\tevent.preventDefault();\n\n\t\t// Manually set the focus since calling preventDefault above\n\t\t// prevents the browser from setting it automatically.\n\n\t\tscope.domElement.focus ? scope.domElement.focus() : window.focus();\n\n\t\tswitch ( event.button ) {\n\n\t\t\tcase 0:\n\n\t\t\t\tswitch ( scope.mouseButtons.LEFT ) {\n\n\t\t\t\t\tcase THREE.MOUSE.ROTATE:\n\n\t\t\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\t\t\t\thandleMouseDownPan( event );\n\n\t\t\t\t\t\t\tstate = STATE.PAN;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\t\t\t\thandleMouseDownRotate( event );\n\n\t\t\t\t\t\t\tstate = STATE.ROTATE;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase THREE.MOUSE.PAN:\n\n\t\t\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\t\t\t\thandleMouseDownRotate( event );\n\n\t\t\t\t\t\t\tstate = STATE.ROTATE;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\t\t\t\thandleMouseDownPan( event );\n\n\t\t\t\t\t\t\tstate = STATE.PAN;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tstate = STATE.NONE;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\n\t\t\tcase 1:\n\n\t\t\t\tswitch ( scope.mouseButtons.MIDDLE ) {\n\n\t\t\t\t\tcase THREE.MOUSE.DOLLY:\n\n\t\t\t\t\t\tif ( scope.enableZoom === false ) return;\n\n\t\t\t\t\t\thandleMouseDownDolly( event );\n\n\t\t\t\t\t\tstate = STATE.DOLLY;\n\n\t\t\t\t\t\tbreak;\n\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tstate = STATE.NONE;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 2:\n\n\t\t\t\tswitch ( scope.mouseButtons.RIGHT ) {\n\n\t\t\t\t\tcase THREE.MOUSE.ROTATE:\n\n\t\t\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\t\t\thandleMouseDownRotate( event );\n\n\t\t\t\t\t\tstate = STATE.ROTATE;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase THREE.MOUSE.PAN:\n\n\t\t\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\t\t\thandleMouseDownPan( event );\n\n\t\t\t\t\t\tstate = STATE.PAN;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tstate = STATE.NONE;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( state !== STATE.NONE ) {\n\n\t\t\tdocument.addEventListener( 'mousemove', onMouseMove, false );\n\t\t\tdocument.addEventListener( 'mouseup', onMouseUp, false );\n\n\t\t\tscope.dispatchEvent( startEvent );\n\n\t\t}\n\n\t}\n\n\tfunction onMouseMove( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\n\t\tswitch ( state ) {\n\n\t\t\tcase STATE.ROTATE:\n\n\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\thandleMouseMoveRotate( event );\n\n\t\t\t\tbreak;\n\n\t\t\tcase STATE.DOLLY:\n\n\t\t\t\tif ( scope.enableZoom === false ) return;\n\n\t\t\t\thandleMouseMoveDolly( event );\n\n\t\t\t\tbreak;\n\n\t\t\tcase STATE.PAN:\n\n\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\thandleMouseMovePan( event );\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction onMouseUp( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\thandleMouseUp( event );\n\n\t\tdocument.removeEventListener( 'mousemove', onMouseMove, false );\n\t\tdocument.removeEventListener( 'mouseup', onMouseUp, false );\n\n\t\tscope.dispatchEvent( endEvent );\n\n\t\tstate = STATE.NONE;\n\n\t}\n\n\tfunction onMouseWheel( event ) {\n\n\t\tif ( scope.enabled === false || scope.enableZoom === false || ( state !== STATE.NONE && state !== STATE.ROTATE ) ) return;\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tscope.dispatchEvent( startEvent );\n\n\t\thandleMouseWheel( event );\n\n\t\tscope.dispatchEvent( endEvent );\n\n\t}\n\n\tfunction onKeyDown( event ) {\n\n\t\tif ( scope.enabled === false || scope.enableKeys === false || scope.enablePan === false ) return;\n\n\t\thandleKeyDown( event );\n\n\t}\n\n\tfunction onTouchStart( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\n\t\tswitch ( event.touches.length ) {\n\n\t\t\tcase 1:\n\n\t\t\t\tswitch ( scope.touches.ONE ) {\n\n\t\t\t\t\tcase THREE.TOUCH.ROTATE:\n\n\t\t\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\t\t\thandleTouchStartRotate( event );\n\n\t\t\t\t\t\tstate = STATE.TOUCH_ROTATE;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase THREE.TOUCH.PAN:\n\n\t\t\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\t\t\thandleTouchStartPan( event );\n\n\t\t\t\t\t\tstate = STATE.TOUCH_PAN;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tstate = STATE.NONE;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 2:\n\n\t\t\t\tswitch ( scope.touches.TWO ) {\n\n\t\t\t\t\tcase THREE.TOUCH.DOLLY_PAN:\n\n\t\t\t\t\t\tif ( scope.enableZoom === false && scope.enablePan === false ) return;\n\n\t\t\t\t\t\thandleTouchStartDollyPan( event );\n\n\t\t\t\t\t\tstate = STATE.TOUCH_DOLLY_PAN;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase THREE.TOUCH.DOLLY_ROTATE:\n\n\t\t\t\t\t\tif ( scope.enableZoom === false && scope.enableRotate === false ) return;\n\n\t\t\t\t\t\thandleTouchStartDollyRotate( event );\n\n\t\t\t\t\t\tstate = STATE.TOUCH_DOLLY_ROTATE;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tstate = STATE.NONE;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tstate = STATE.NONE;\n\n\t\t}\n\n\t\tif ( state !== STATE.NONE ) {\n\n\t\t\tscope.dispatchEvent( startEvent );\n\n\t\t}\n\n\t}\n\n\tfunction onTouchMove( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tswitch ( state ) {\n\n\t\t\tcase STATE.TOUCH_ROTATE:\n\n\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\thandleTouchMoveRotate( event );\n\n\t\t\t\tscope.update();\n\n\t\t\t\tbreak;\n\n\t\t\tcase STATE.TOUCH_PAN:\n\n\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\thandleTouchMovePan( event );\n\n\t\t\t\tscope.update();\n\n\t\t\t\tbreak;\n\n\t\t\tcase STATE.TOUCH_DOLLY_PAN:\n\n\t\t\t\tif ( scope.enableZoom === false && scope.enablePan === false ) return;\n\n\t\t\t\thandleTouchMoveDollyPan( event );\n\n\t\t\t\tscope.update();\n\n\t\t\t\tbreak;\n\n\t\t\tcase STATE.TOUCH_DOLLY_ROTATE:\n\n\t\t\t\tif ( scope.enableZoom === false && scope.enableRotate === false ) return;\n\n\t\t\t\thandleTouchMoveDollyRotate( event );\n\n\t\t\t\tscope.update();\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tstate = STATE.NONE;\n\n\t\t}\n\n\t}\n\n\tfunction onTouchEnd( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\thandleTouchEnd( event );\n\n\t\tscope.dispatchEvent( endEvent );\n\n\t\tstate = STATE.NONE;\n\n\t}\n\n\tfunction onContextMenu( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\n\t}\n\n\t//\n\n\tscope.domElement.addEventListener( 'contextmenu', onContextMenu, false );\n\n\tscope.domElement.addEventListener( 'mousedown', onMouseDown, false );\n\tscope.domElement.addEventListener( 'wheel', onMouseWheel, false );\n\n\tscope.domElement.addEventListener( 'touchstart', onTouchStart, false );\n\tscope.domElement.addEventListener( 'touchend', onTouchEnd, false );\n\tscope.domElement.addEventListener( 'touchmove', onTouchMove, false );\n\n\tscope.domElement.addEventListener( 'keydown', onKeyDown, false );\n\n\t// make sure element can receive keys.\n\n\tif ( scope.domElement.tabIndex === - 1 ) {\n\n\t\tscope.domElement.tabIndex = 0;\n\n\t}\n\n\t// force an update at start\n\n\tthis.update();\n\n};\n\nTHREE.OrbitControls.prototype = Object.create( THREE.EventDispatcher.prototype );\nTHREE.OrbitControls.prototype.constructor = THREE.OrbitControls;\n\n\n// This set of controls performs orbiting, dollying (zooming), and panning.\n// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\n// This is very similar to OrbitControls, another set of touch behavior\n//\n// Orbit - right mouse, or left mouse + ctrl/meta/shiftKey / touch: two-finger rotate\n// Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish\n// Pan - left mouse, or arrow keys / touch: one-finger move\n\nTHREE.MapControls = function ( object, domElement ) {\n\n\tTHREE.OrbitControls.call( this, object, domElement );\n\n\tthis.mouseButtons.LEFT = THREE.MOUSE.PAN;\n\tthis.mouseButtons.RIGHT = THREE.MOUSE.ROTATE;\n\n\tthis.touches.ONE = THREE.TOUCH.PAN;\n\tthis.touches.TWO = THREE.TOUCH.DOLLY_ROTATE;\n\n};\n\nTHREE.MapControls.prototype = Object.create( THREE.EventDispatcher.prototype );\nTHREE.MapControls.prototype.constructor = THREE.MapControls;\n/* three-orbitcontrols addendum */ module.exports = exports.default = THREE.OrbitControls;\n","/**\n * @license\n * Copyright 2010-2021 Three.js Authors\n * SPDX-License-Identifier: MIT\n */\nconst REVISION = '133';\nconst MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2, ROTATE: 0, DOLLY: 1, PAN: 2 };\nconst TOUCH = { ROTATE: 0, PAN: 1, DOLLY_PAN: 2, DOLLY_ROTATE: 3 };\nconst CullFaceNone = 0;\nconst CullFaceBack = 1;\nconst CullFaceFront = 2;\nconst CullFaceFrontBack = 3;\nconst BasicShadowMap = 0;\nconst PCFShadowMap = 1;\nconst PCFSoftShadowMap = 2;\nconst VSMShadowMap = 3;\nconst FrontSide = 0;\nconst BackSide = 1;\nconst DoubleSide = 2;\nconst FlatShading = 1;\nconst SmoothShading = 2;\nconst NoBlending = 0;\nconst NormalBlending = 1;\nconst AdditiveBlending = 2;\nconst SubtractiveBlending = 3;\nconst MultiplyBlending = 4;\nconst CustomBlending = 5;\nconst AddEquation = 100;\nconst SubtractEquation = 101;\nconst ReverseSubtractEquation = 102;\nconst MinEquation = 103;\nconst MaxEquation = 104;\nconst ZeroFactor = 200;\nconst OneFactor = 201;\nconst SrcColorFactor = 202;\nconst OneMinusSrcColorFactor = 203;\nconst SrcAlphaFactor = 204;\nconst OneMinusSrcAlphaFactor = 205;\nconst DstAlphaFactor = 206;\nconst OneMinusDstAlphaFactor = 207;\nconst DstColorFactor = 208;\nconst OneMinusDstColorFactor = 209;\nconst SrcAlphaSaturateFactor = 210;\nconst NeverDepth = 0;\nconst AlwaysDepth = 1;\nconst LessDepth = 2;\nconst LessEqualDepth = 3;\nconst EqualDepth = 4;\nconst GreaterEqualDepth = 5;\nconst GreaterDepth = 6;\nconst NotEqualDepth = 7;\nconst MultiplyOperation = 0;\nconst MixOperation = 1;\nconst AddOperation = 2;\nconst NoToneMapping = 0;\nconst LinearToneMapping = 1;\nconst ReinhardToneMapping = 2;\nconst CineonToneMapping = 3;\nconst ACESFilmicToneMapping = 4;\nconst CustomToneMapping = 5;\n\nconst UVMapping = 300;\nconst CubeReflectionMapping = 301;\nconst CubeRefractionMapping = 302;\nconst EquirectangularReflectionMapping = 303;\nconst EquirectangularRefractionMapping = 304;\nconst CubeUVReflectionMapping = 306;\nconst CubeUVRefractionMapping = 307;\nconst RepeatWrapping = 1000;\nconst ClampToEdgeWrapping = 1001;\nconst MirroredRepeatWrapping = 1002;\nconst NearestFilter = 1003;\nconst NearestMipmapNearestFilter = 1004;\nconst NearestMipMapNearestFilter = 1004;\nconst NearestMipmapLinearFilter = 1005;\nconst NearestMipMapLinearFilter = 1005;\nconst LinearFilter = 1006;\nconst LinearMipmapNearestFilter = 1007;\nconst LinearMipMapNearestFilter = 1007;\nconst LinearMipmapLinearFilter = 1008;\nconst LinearMipMapLinearFilter = 1008;\nconst UnsignedByteType = 1009;\nconst ByteType = 1010;\nconst ShortType = 1011;\nconst UnsignedShortType = 1012;\nconst IntType = 1013;\nconst UnsignedIntType = 1014;\nconst FloatType = 1015;\nconst HalfFloatType = 1016;\nconst UnsignedShort4444Type = 1017;\nconst UnsignedShort5551Type = 1018;\nconst UnsignedShort565Type = 1019;\nconst UnsignedInt248Type = 1020;\nconst AlphaFormat = 1021;\nconst RGBFormat = 1022;\nconst RGBAFormat = 1023;\nconst LuminanceFormat = 1024;\nconst LuminanceAlphaFormat = 1025;\nconst RGBEFormat = RGBAFormat;\nconst DepthFormat = 1026;\nconst DepthStencilFormat = 1027;\nconst RedFormat = 1028;\nconst RedIntegerFormat = 1029;\nconst RGFormat = 1030;\nconst RGIntegerFormat = 1031;\nconst RGBIntegerFormat = 1032;\nconst RGBAIntegerFormat = 1033;\n\nconst RGB_S3TC_DXT1_Format = 33776;\nconst RGBA_S3TC_DXT1_Format = 33777;\nconst RGBA_S3TC_DXT3_Format = 33778;\nconst RGBA_S3TC_DXT5_Format = 33779;\nconst RGB_PVRTC_4BPPV1_Format = 35840;\nconst RGB_PVRTC_2BPPV1_Format = 35841;\nconst RGBA_PVRTC_4BPPV1_Format = 35842;\nconst RGBA_PVRTC_2BPPV1_Format = 35843;\nconst RGB_ETC1_Format = 36196;\nconst RGB_ETC2_Format = 37492;\nconst RGBA_ETC2_EAC_Format = 37496;\nconst RGBA_ASTC_4x4_Format = 37808;\nconst RGBA_ASTC_5x4_Format = 37809;\nconst RGBA_ASTC_5x5_Format = 37810;\nconst RGBA_ASTC_6x5_Format = 37811;\nconst RGBA_ASTC_6x6_Format = 37812;\nconst RGBA_ASTC_8x5_Format = 37813;\nconst RGBA_ASTC_8x6_Format = 37814;\nconst RGBA_ASTC_8x8_Format = 37815;\nconst RGBA_ASTC_10x5_Format = 37816;\nconst RGBA_ASTC_10x6_Format = 37817;\nconst RGBA_ASTC_10x8_Format = 37818;\nconst RGBA_ASTC_10x10_Format = 37819;\nconst RGBA_ASTC_12x10_Format = 37820;\nconst RGBA_ASTC_12x12_Format = 37821;\nconst RGBA_BPTC_Format = 36492;\nconst SRGB8_ALPHA8_ASTC_4x4_Format = 37840;\nconst SRGB8_ALPHA8_ASTC_5x4_Format = 37841;\nconst SRGB8_ALPHA8_ASTC_5x5_Format = 37842;\nconst SRGB8_ALPHA8_ASTC_6x5_Format = 37843;\nconst SRGB8_ALPHA8_ASTC_6x6_Format = 37844;\nconst SRGB8_ALPHA8_ASTC_8x5_Format = 37845;\nconst SRGB8_ALPHA8_ASTC_8x6_Format = 37846;\nconst SRGB8_ALPHA8_ASTC_8x8_Format = 37847;\nconst SRGB8_ALPHA8_ASTC_10x5_Format = 37848;\nconst SRGB8_ALPHA8_ASTC_10x6_Format = 37849;\nconst SRGB8_ALPHA8_ASTC_10x8_Format = 37850;\nconst SRGB8_ALPHA8_ASTC_10x10_Format = 37851;\nconst SRGB8_ALPHA8_ASTC_12x10_Format = 37852;\nconst SRGB8_ALPHA8_ASTC_12x12_Format = 37853;\nconst LoopOnce = 2200;\nconst LoopRepeat = 2201;\nconst LoopPingPong = 2202;\nconst InterpolateDiscrete = 2300;\nconst InterpolateLinear = 2301;\nconst InterpolateSmooth = 2302;\nconst ZeroCurvatureEnding = 2400;\nconst ZeroSlopeEnding = 2401;\nconst WrapAroundEnding = 2402;\nconst NormalAnimationBlendMode = 2500;\nconst AdditiveAnimationBlendMode = 2501;\nconst TrianglesDrawMode = 0;\nconst TriangleStripDrawMode = 1;\nconst TriangleFanDrawMode = 2;\nconst LinearEncoding = 3000;\nconst sRGBEncoding = 3001;\nconst GammaEncoding = 3007;\nconst RGBEEncoding = 3002;\nconst LogLuvEncoding = 3003;\nconst RGBM7Encoding = 3004;\nconst RGBM16Encoding = 3005;\nconst RGBDEncoding = 3006;\nconst BasicDepthPacking = 3200;\nconst RGBADepthPacking = 3201;\nconst TangentSpaceNormalMap = 0;\nconst ObjectSpaceNormalMap = 1;\n\nconst ZeroStencilOp = 0;\nconst KeepStencilOp = 7680;\nconst ReplaceStencilOp = 7681;\nconst IncrementStencilOp = 7682;\nconst DecrementStencilOp = 7683;\nconst IncrementWrapStencilOp = 34055;\nconst DecrementWrapStencilOp = 34056;\nconst InvertStencilOp = 5386;\n\nconst NeverStencilFunc = 512;\nconst LessStencilFunc = 513;\nconst EqualStencilFunc = 514;\nconst LessEqualStencilFunc = 515;\nconst GreaterStencilFunc = 516;\nconst NotEqualStencilFunc = 517;\nconst GreaterEqualStencilFunc = 518;\nconst AlwaysStencilFunc = 519;\n\nconst StaticDrawUsage = 35044;\nconst DynamicDrawUsage = 35048;\nconst StreamDrawUsage = 35040;\nconst StaticReadUsage = 35045;\nconst DynamicReadUsage = 35049;\nconst StreamReadUsage = 35041;\nconst StaticCopyUsage = 35046;\nconst DynamicCopyUsage = 35050;\nconst StreamCopyUsage = 35042;\n\nconst GLSL1 = '100';\nconst GLSL3 = '300 es';\n\n/**\n * https://github.com/mrdoob/eventdispatcher.js/\n */\n\nclass EventDispatcher {\n\n\taddEventListener( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) this._listeners = {};\n\n\t\tconst listeners = this._listeners;\n\n\t\tif ( listeners[ type ] === undefined ) {\n\n\t\t\tlisteners[ type ] = [];\n\n\t\t}\n\n\t\tif ( listeners[ type ].indexOf( listener ) === - 1 ) {\n\n\t\t\tlisteners[ type ].push( listener );\n\n\t\t}\n\n\t}\n\n\thasEventListener( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return false;\n\n\t\tconst listeners = this._listeners;\n\n\t\treturn listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1;\n\n\t}\n\n\tremoveEventListener( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tconst listeners = this._listeners;\n\t\tconst listenerArray = listeners[ type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tconst index = listenerArray.indexOf( listener );\n\n\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\tlistenerArray.splice( index, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tdispatchEvent( event ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tconst listeners = this._listeners;\n\t\tconst listenerArray = listeners[ event.type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tevent.target = this;\n\n\t\t\t// Make a copy, in case listeners are removed while iterating.\n\t\t\tconst array = listenerArray.slice( 0 );\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tarray[ i ].call( this, event );\n\n\t\t\t}\n\n\t\t\tevent.target = null;\n\n\t\t}\n\n\t}\n\n}\n\nlet _seed = 1234567;\n\nconst DEG2RAD = Math.PI / 180;\nconst RAD2DEG = 180 / Math.PI;\n\n//\n\nconst _lut = [];\n\nfor ( let i = 0; i < 256; i ++ ) {\n\n\t_lut[ i ] = ( i < 16 ? '0' : '' ) + ( i ).toString( 16 );\n\n}\n\nconst hasRandomUUID = typeof crypto !== 'undefined' && 'randomUUID' in crypto;\n\nfunction generateUUID() {\n\n\tif ( hasRandomUUID ) {\n\n\t\treturn crypto.randomUUID().toUpperCase();\n\n\t}\n\n\t// TODO Remove this code when crypto.randomUUID() is available everywhere\n\t// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\n\n\tconst d0 = Math.random() * 0xffffffff | 0;\n\tconst d1 = Math.random() * 0xffffffff | 0;\n\tconst d2 = Math.random() * 0xffffffff | 0;\n\tconst d3 = Math.random() * 0xffffffff | 0;\n\tconst uuid = _lut[ d0 & 0xff ] + _lut[ d0 >> 8 & 0xff ] + _lut[ d0 >> 16 & 0xff ] + _lut[ d0 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d1 & 0xff ] + _lut[ d1 >> 8 & 0xff ] + '-' + _lut[ d1 >> 16 & 0x0f | 0x40 ] + _lut[ d1 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d2 & 0x3f | 0x80 ] + _lut[ d2 >> 8 & 0xff ] + '-' + _lut[ d2 >> 16 & 0xff ] + _lut[ d2 >> 24 & 0xff ] +\n\t\t\t_lut[ d3 & 0xff ] + _lut[ d3 >> 8 & 0xff ] + _lut[ d3 >> 16 & 0xff ] + _lut[ d3 >> 24 & 0xff ];\n\n\t// .toUpperCase() here flattens concatenated strings to save heap memory space.\n\treturn uuid.toUpperCase();\n\n}\n\nfunction clamp( value, min, max ) {\n\n\treturn Math.max( min, Math.min( max, value ) );\n\n}\n\n// compute euclidian modulo of m % n\n// https://en.wikipedia.org/wiki/Modulo_operation\nfunction euclideanModulo( n, m ) {\n\n\treturn ( ( n % m ) + m ) % m;\n\n}\n\n// Linear mapping from range to range \nfunction mapLinear( x, a1, a2, b1, b2 ) {\n\n\treturn b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 );\n\n}\n\n// https://www.gamedev.net/tutorials/programming/general-and-gameplay-programming/inverse-lerp-a-super-useful-yet-often-overlooked-function-r5230/\nfunction inverseLerp( x, y, value ) {\n\n\tif ( x !== y ) {\n\n\t\treturn ( value - x ) / ( y - x );\n\n\t} else {\n\n\t\treturn 0;\n\n\t}\n\n}\n\n// https://en.wikipedia.org/wiki/Linear_interpolation\nfunction lerp( x, y, t ) {\n\n\treturn ( 1 - t ) * x + t * y;\n\n}\n\n// http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/\nfunction damp( x, y, lambda, dt ) {\n\n\treturn lerp( x, y, 1 - Math.exp( - lambda * dt ) );\n\n}\n\n// https://www.desmos.com/calculator/vcsjnyz7x4\nfunction pingpong( x, length = 1 ) {\n\n\treturn length - Math.abs( euclideanModulo( x, length * 2 ) - length );\n\n}\n\n// http://en.wikipedia.org/wiki/Smoothstep\nfunction smoothstep( x, min, max ) {\n\n\tif ( x <= min ) return 0;\n\tif ( x >= max ) return 1;\n\n\tx = ( x - min ) / ( max - min );\n\n\treturn x * x * ( 3 - 2 * x );\n\n}\n\nfunction smootherstep( x, min, max ) {\n\n\tif ( x <= min ) return 0;\n\tif ( x >= max ) return 1;\n\n\tx = ( x - min ) / ( max - min );\n\n\treturn x * x * x * ( x * ( x * 6 - 15 ) + 10 );\n\n}\n\n// Random integer from interval\nfunction randInt( low, high ) {\n\n\treturn low + Math.floor( Math.random() * ( high - low + 1 ) );\n\n}\n\n// Random float from interval\nfunction randFloat( low, high ) {\n\n\treturn low + Math.random() * ( high - low );\n\n}\n\n// Random float from <-range/2, range/2> interval\nfunction randFloatSpread( range ) {\n\n\treturn range * ( 0.5 - Math.random() );\n\n}\n\n// Deterministic pseudo-random float in the interval [ 0, 1 ]\nfunction seededRandom( s ) {\n\n\tif ( s !== undefined ) _seed = s % 2147483647;\n\n\t// Park-Miller algorithm\n\n\t_seed = _seed * 16807 % 2147483647;\n\n\treturn ( _seed - 1 ) / 2147483646;\n\n}\n\nfunction degToRad( degrees ) {\n\n\treturn degrees * DEG2RAD;\n\n}\n\nfunction radToDeg( radians ) {\n\n\treturn radians * RAD2DEG;\n\n}\n\nfunction isPowerOfTwo( value ) {\n\n\treturn ( value & ( value - 1 ) ) === 0 && value !== 0;\n\n}\n\nfunction ceilPowerOfTwo( value ) {\n\n\treturn Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) );\n\n}\n\nfunction floorPowerOfTwo( value ) {\n\n\treturn Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) );\n\n}\n\nfunction setQuaternionFromProperEuler( q, a, b, c, order ) {\n\n\t// Intrinsic Proper Euler Angles - see https://en.wikipedia.org/wiki/Euler_angles\n\n\t// rotations are applied to the axes in the order specified by 'order'\n\t// rotation by angle 'a' is applied first, then by angle 'b', then by angle 'c'\n\t// angles are in radians\n\n\tconst cos = Math.cos;\n\tconst sin = Math.sin;\n\n\tconst c2 = cos( b / 2 );\n\tconst s2 = sin( b / 2 );\n\n\tconst c13 = cos( ( a + c ) / 2 );\n\tconst s13 = sin( ( a + c ) / 2 );\n\n\tconst c1_3 = cos( ( a - c ) / 2 );\n\tconst s1_3 = sin( ( a - c ) / 2 );\n\n\tconst c3_1 = cos( ( c - a ) / 2 );\n\tconst s3_1 = sin( ( c - a ) / 2 );\n\n\tswitch ( order ) {\n\n\t\tcase 'XYX':\n\t\t\tq.set( c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'YZY':\n\t\t\tq.set( s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'ZXZ':\n\t\t\tq.set( s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'XZX':\n\t\t\tq.set( c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'YXY':\n\t\t\tq.set( s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'ZYZ':\n\t\t\tq.set( s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13 );\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' + order );\n\n\t}\n\n}\n\nvar MathUtils = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tDEG2RAD: DEG2RAD,\n\tRAD2DEG: RAD2DEG,\n\tgenerateUUID: generateUUID,\n\tclamp: clamp,\n\teuclideanModulo: euclideanModulo,\n\tmapLinear: mapLinear,\n\tinverseLerp: inverseLerp,\n\tlerp: lerp,\n\tdamp: damp,\n\tpingpong: pingpong,\n\tsmoothstep: smoothstep,\n\tsmootherstep: smootherstep,\n\trandInt: randInt,\n\trandFloat: randFloat,\n\trandFloatSpread: randFloatSpread,\n\tseededRandom: seededRandom,\n\tdegToRad: degToRad,\n\tradToDeg: radToDeg,\n\tisPowerOfTwo: isPowerOfTwo,\n\tceilPowerOfTwo: ceilPowerOfTwo,\n\tfloorPowerOfTwo: floorPowerOfTwo,\n\tsetQuaternionFromProperEuler: setQuaternionFromProperEuler\n});\n\nclass Vector2 {\n\n\tconstructor( x = 0, y = 0 ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t}\n\n\tget width() {\n\n\t\treturn this.x;\n\n\t}\n\n\tset width( value ) {\n\n\t\tthis.x = value;\n\n\t}\n\n\tget height() {\n\n\t\treturn this.y;\n\n\t}\n\n\tset height( value ) {\n\n\t\tthis.y = value;\n\n\t}\n\n\tset( x, y ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\treturn this.addVectors( v, w );\n\n\t\t}\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\treturn this.subVectors( v, w );\n\n\t\t}\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tdivide( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tconst x = this.x, y = this.y;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ];\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ];\n\n\t\treturn this;\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y;\n\n\t}\n\n\tcross( v ) {\n\n\t\treturn this.x * v.y - this.y * v.x;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tangle() {\n\n\t\t// computes the angle in radians with respect to the positive x-axis\n\n\t\tconst angle = Math.atan2( - this.y, - this.x ) + Math.PI;\n\n\t\treturn angle;\n\n\t}\n\n\tdistanceTo( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t}\n\n\tdistanceToSquared( v ) {\n\n\t\tconst dx = this.x - v.x, dy = this.y - v.y;\n\t\treturn dx * dx + dy * dy;\n\n\t}\n\n\tmanhattanDistanceTo( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index, offset ) {\n\n\t\tif ( offset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: offset has been removed from .fromBufferAttribute().' );\n\n\t\t}\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\n\t\treturn this;\n\n\t}\n\n\trotateAround( center, angle ) {\n\n\t\tconst c = Math.cos( angle ), s = Math.sin( angle );\n\n\t\tconst x = this.x - center.x;\n\t\tconst y = this.y - center.y;\n\n\t\tthis.x = x * c - y * s + center.x;\n\t\tthis.y = x * s + y * c + center.y;\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\n\t\treturn this;\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.x;\n\t\tyield this.y;\n\n\t}\n\n}\n\nVector2.prototype.isVector2 = true;\n\nclass Matrix3 {\n\n\tconstructor() {\n\n\t\tthis.elements = [\n\n\t\t\t1, 0, 0,\n\t\t\t0, 1, 0,\n\t\t\t0, 0, 1\n\n\t\t];\n\n\t\tif ( arguments.length > 0 ) {\n\n\t\t\tconsole.error( 'THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.' );\n\n\t\t}\n\n\t}\n\n\tset( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 1 ] = n21; te[ 2 ] = n31;\n\t\tte[ 3 ] = n12; te[ 4 ] = n22; te[ 5 ] = n32;\n\t\tte[ 6 ] = n13; te[ 7 ] = n23; te[ 8 ] = n33;\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0,\n\t\t\t0, 1, 0,\n\t\t\t0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tcopy( m ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ];\n\t\tte[ 3 ] = me[ 3 ]; te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ];\n\t\tte[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; te[ 8 ] = me[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\textractBasis( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrix3Column( this, 0 );\n\t\tyAxis.setFromMatrix3Column( this, 1 );\n\t\tzAxis.setFromMatrix3Column( this, 2 );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrix4( m ) {\n\n\t\tconst me = m.elements;\n\n\t\tthis.set(\n\n\t\t\tme[ 0 ], me[ 4 ], me[ 8 ],\n\t\t\tme[ 1 ], me[ 5 ], me[ 9 ],\n\t\t\tme[ 2 ], me[ 6 ], me[ 10 ]\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( m ) {\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t}\n\n\tpremultiply( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t}\n\n\tmultiplyMatrices( a, b ) {\n\n\t\tconst ae = a.elements;\n\t\tconst be = b.elements;\n\t\tconst te = this.elements;\n\n\t\tconst a11 = ae[ 0 ], a12 = ae[ 3 ], a13 = ae[ 6 ];\n\t\tconst a21 = ae[ 1 ], a22 = ae[ 4 ], a23 = ae[ 7 ];\n\t\tconst a31 = ae[ 2 ], a32 = ae[ 5 ], a33 = ae[ 8 ];\n\n\t\tconst b11 = be[ 0 ], b12 = be[ 3 ], b13 = be[ 6 ];\n\t\tconst b21 = be[ 1 ], b22 = be[ 4 ], b23 = be[ 7 ];\n\t\tconst b31 = be[ 2 ], b32 = be[ 5 ], b33 = be[ 8 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31;\n\t\tte[ 3 ] = a11 * b12 + a12 * b22 + a13 * b32;\n\t\tte[ 6 ] = a11 * b13 + a12 * b23 + a13 * b33;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31;\n\t\tte[ 4 ] = a21 * b12 + a22 * b22 + a23 * b32;\n\t\tte[ 7 ] = a21 * b13 + a22 * b23 + a23 * b33;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31;\n\t\tte[ 5 ] = a31 * b12 + a32 * b22 + a33 * b32;\n\t\tte[ 8 ] = a31 * b13 + a32 * b23 + a33 * b33;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 3 ] *= s; te[ 6 ] *= s;\n\t\tte[ 1 ] *= s; te[ 4 ] *= s; te[ 7 ] *= s;\n\t\tte[ 2 ] *= s; te[ 5 ] *= s; te[ 8 ] *= s;\n\n\t\treturn this;\n\n\t}\n\n\tdeterminant() {\n\n\t\tconst te = this.elements;\n\n\t\tconst a = te[ 0 ], b = te[ 1 ], c = te[ 2 ],\n\t\t\td = te[ 3 ], e = te[ 4 ], f = te[ 5 ],\n\t\t\tg = te[ 6 ], h = te[ 7 ], i = te[ 8 ];\n\n\t\treturn a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g;\n\n\t}\n\n\tinvert() {\n\n\t\tconst te = this.elements,\n\n\t\t\tn11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ],\n\t\t\tn12 = te[ 3 ], n22 = te[ 4 ], n32 = te[ 5 ],\n\t\t\tn13 = te[ 6 ], n23 = te[ 7 ], n33 = te[ 8 ],\n\n\t\t\tt11 = n33 * n22 - n32 * n23,\n\t\t\tt12 = n32 * n13 - n33 * n12,\n\t\t\tt13 = n23 * n12 - n22 * n13,\n\n\t\t\tdet = n11 * t11 + n21 * t12 + n31 * t13;\n\n\t\tif ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0 );\n\n\t\tconst detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n31 * n23 - n33 * n21 ) * detInv;\n\t\tte[ 2 ] = ( n32 * n21 - n31 * n22 ) * detInv;\n\n\t\tte[ 3 ] = t12 * detInv;\n\t\tte[ 4 ] = ( n33 * n11 - n31 * n13 ) * detInv;\n\t\tte[ 5 ] = ( n31 * n12 - n32 * n11 ) * detInv;\n\n\t\tte[ 6 ] = t13 * detInv;\n\t\tte[ 7 ] = ( n21 * n13 - n23 * n11 ) * detInv;\n\t\tte[ 8 ] = ( n22 * n11 - n21 * n12 ) * detInv;\n\n\t\treturn this;\n\n\t}\n\n\ttranspose() {\n\n\t\tlet tmp;\n\t\tconst m = this.elements;\n\n\t\ttmp = m[ 1 ]; m[ 1 ] = m[ 3 ]; m[ 3 ] = tmp;\n\t\ttmp = m[ 2 ]; m[ 2 ] = m[ 6 ]; m[ 6 ] = tmp;\n\t\ttmp = m[ 5 ]; m[ 5 ] = m[ 7 ]; m[ 7 ] = tmp;\n\n\t\treturn this;\n\n\t}\n\n\tgetNormalMatrix( matrix4 ) {\n\n\t\treturn this.setFromMatrix4( matrix4 ).invert().transpose();\n\n\t}\n\n\ttransposeIntoArray( r ) {\n\n\t\tconst m = this.elements;\n\n\t\tr[ 0 ] = m[ 0 ];\n\t\tr[ 1 ] = m[ 3 ];\n\t\tr[ 2 ] = m[ 6 ];\n\t\tr[ 3 ] = m[ 1 ];\n\t\tr[ 4 ] = m[ 4 ];\n\t\tr[ 5 ] = m[ 7 ];\n\t\tr[ 6 ] = m[ 2 ];\n\t\tr[ 7 ] = m[ 5 ];\n\t\tr[ 8 ] = m[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetUvTransform( tx, ty, sx, sy, rotation, cx, cy ) {\n\n\t\tconst c = Math.cos( rotation );\n\t\tconst s = Math.sin( rotation );\n\n\t\tthis.set(\n\t\t\tsx * c, sx * s, - sx * ( c * cx + s * cy ) + cx + tx,\n\t\t\t- sy * s, sy * c, - sy * ( - s * cx + c * cy ) + cy + ty,\n\t\t\t0, 0, 1\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tscale( sx, sy ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= sx; te[ 3 ] *= sx; te[ 6 ] *= sx;\n\t\tte[ 1 ] *= sy; te[ 4 ] *= sy; te[ 7 ] *= sy;\n\n\t\treturn this;\n\n\t}\n\n\trotate( theta ) {\n\n\t\tconst c = Math.cos( theta );\n\t\tconst s = Math.sin( theta );\n\n\t\tconst te = this.elements;\n\n\t\tconst a11 = te[ 0 ], a12 = te[ 3 ], a13 = te[ 6 ];\n\t\tconst a21 = te[ 1 ], a22 = te[ 4 ], a23 = te[ 7 ];\n\n\t\tte[ 0 ] = c * a11 + s * a21;\n\t\tte[ 3 ] = c * a12 + s * a22;\n\t\tte[ 6 ] = c * a13 + s * a23;\n\n\t\tte[ 1 ] = - s * a11 + c * a21;\n\t\tte[ 4 ] = - s * a12 + c * a22;\n\t\tte[ 7 ] = - s * a13 + c * a23;\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( tx, ty ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] += tx * te[ 2 ]; te[ 3 ] += tx * te[ 5 ]; te[ 6 ] += tx * te[ 8 ];\n\t\tte[ 1 ] += ty * te[ 2 ]; te[ 4 ] += ty * te[ 5 ]; te[ 7 ] += ty * te[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\tequals( matrix ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = matrix.elements;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\n\t\treturn array;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().fromArray( this.elements );\n\n\t}\n\n}\n\nMatrix3.prototype.isMatrix3 = true;\n\nfunction arrayMax( array ) {\n\n\tif ( array.length === 0 ) return - Infinity;\n\n\tlet max = array[ 0 ];\n\n\tfor ( let i = 1, l = array.length; i < l; ++ i ) {\n\n\t\tif ( array[ i ] > max ) max = array[ i ];\n\n\t}\n\n\treturn max;\n\n}\n\nconst TYPED_ARRAYS = {\n\tInt8Array: Int8Array,\n\tUint8Array: Uint8Array,\n\tUint8ClampedArray: Uint8ClampedArray,\n\tInt16Array: Int16Array,\n\tUint16Array: Uint16Array,\n\tInt32Array: Int32Array,\n\tUint32Array: Uint32Array,\n\tFloat32Array: Float32Array,\n\tFloat64Array: Float64Array\n};\n\nfunction getTypedArray( type, buffer ) {\n\n\treturn new TYPED_ARRAYS[ type ]( buffer );\n\n}\n\nfunction createElementNS( name ) {\n\n\treturn document.createElementNS( 'http://www.w3.org/1999/xhtml', name );\n\n}\n\nlet _canvas;\n\nclass ImageUtils {\n\n\tstatic getDataURL( image ) {\n\n\t\tif ( /^data:/i.test( image.src ) ) {\n\n\t\t\treturn image.src;\n\n\t\t}\n\n\t\tif ( typeof HTMLCanvasElement == 'undefined' ) {\n\n\t\t\treturn image.src;\n\n\t\t}\n\n\t\tlet canvas;\n\n\t\tif ( image instanceof HTMLCanvasElement ) {\n\n\t\t\tcanvas = image;\n\n\t\t} else {\n\n\t\t\tif ( _canvas === undefined ) _canvas = createElementNS( 'canvas' );\n\n\t\t\t_canvas.width = image.width;\n\t\t\t_canvas.height = image.height;\n\n\t\t\tconst context = _canvas.getContext( '2d' );\n\n\t\t\tif ( image instanceof ImageData ) {\n\n\t\t\t\tcontext.putImageData( image, 0, 0 );\n\n\t\t\t} else {\n\n\t\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height );\n\n\t\t\t}\n\n\t\t\tcanvas = _canvas;\n\n\t\t}\n\n\t\tif ( canvas.width > 2048 || canvas.height > 2048 ) {\n\n\t\t\tconsole.warn( 'THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons', image );\n\n\t\t\treturn canvas.toDataURL( 'image/jpeg', 0.6 );\n\n\t\t} else {\n\n\t\t\treturn canvas.toDataURL( 'image/png' );\n\n\t\t}\n\n\t}\n\n}\n\nlet textureId = 0;\n\nclass Texture extends EventDispatcher {\n\n\tconstructor( image = Texture.DEFAULT_IMAGE, mapping = Texture.DEFAULT_MAPPING, wrapS = ClampToEdgeWrapping, wrapT = ClampToEdgeWrapping, magFilter = LinearFilter, minFilter = LinearMipmapLinearFilter, format = RGBAFormat, type = UnsignedByteType, anisotropy = 1, encoding = LinearEncoding ) {\n\n\t\tsuper();\n\n\t\tObject.defineProperty( this, 'id', { value: textureId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\n\t\tthis.image = image;\n\t\tthis.mipmaps = [];\n\n\t\tthis.mapping = mapping;\n\n\t\tthis.wrapS = wrapS;\n\t\tthis.wrapT = wrapT;\n\n\t\tthis.magFilter = magFilter;\n\t\tthis.minFilter = minFilter;\n\n\t\tthis.anisotropy = anisotropy;\n\n\t\tthis.format = format;\n\t\tthis.internalFormat = null;\n\t\tthis.type = type;\n\n\t\tthis.offset = new Vector2( 0, 0 );\n\t\tthis.repeat = new Vector2( 1, 1 );\n\t\tthis.center = new Vector2( 0, 0 );\n\t\tthis.rotation = 0;\n\n\t\tthis.matrixAutoUpdate = true;\n\t\tthis.matrix = new Matrix3();\n\n\t\tthis.generateMipmaps = true;\n\t\tthis.premultiplyAlpha = false;\n\t\tthis.flipY = true;\n\t\tthis.unpackAlignment = 4;\t// valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml)\n\n\t\t// Values of encoding !== THREE.LinearEncoding only supported on map, envMap and emissiveMap.\n\t\t//\n\t\t// Also changing the encoding after already used by a Material will not automatically make the Material\n\t\t// update. You need to explicitly call Material.needsUpdate to trigger it to recompile.\n\t\tthis.encoding = encoding;\n\n\t\tthis.version = 0;\n\t\tthis.onUpdate = null;\n\n\t\tthis.isRenderTargetTexture = false;\n\n\t}\n\n\tupdateMatrix() {\n\n\t\tthis.matrix.setUvTransform( this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.image = source.image;\n\t\tthis.mipmaps = source.mipmaps.slice( 0 );\n\n\t\tthis.mapping = source.mapping;\n\n\t\tthis.wrapS = source.wrapS;\n\t\tthis.wrapT = source.wrapT;\n\n\t\tthis.magFilter = source.magFilter;\n\t\tthis.minFilter = source.minFilter;\n\n\t\tthis.anisotropy = source.anisotropy;\n\n\t\tthis.format = source.format;\n\t\tthis.internalFormat = source.internalFormat;\n\t\tthis.type = source.type;\n\n\t\tthis.offset.copy( source.offset );\n\t\tthis.repeat.copy( source.repeat );\n\t\tthis.center.copy( source.center );\n\t\tthis.rotation = source.rotation;\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\tthis.matrix.copy( source.matrix );\n\n\t\tthis.generateMipmaps = source.generateMipmaps;\n\t\tthis.premultiplyAlpha = source.premultiplyAlpha;\n\t\tthis.flipY = source.flipY;\n\t\tthis.unpackAlignment = source.unpackAlignment;\n\t\tthis.encoding = source.encoding;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( ! isRootObject && meta.textures[ this.uuid ] !== undefined ) {\n\n\t\t\treturn meta.textures[ this.uuid ];\n\n\t\t}\n\n\t\tconst output = {\n\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Texture',\n\t\t\t\tgenerator: 'Texture.toJSON'\n\t\t\t},\n\n\t\t\tuuid: this.uuid,\n\t\t\tname: this.name,\n\n\t\t\tmapping: this.mapping,\n\n\t\t\trepeat: [ this.repeat.x, this.repeat.y ],\n\t\t\toffset: [ this.offset.x, this.offset.y ],\n\t\t\tcenter: [ this.center.x, this.center.y ],\n\t\t\trotation: this.rotation,\n\n\t\t\twrap: [ this.wrapS, this.wrapT ],\n\n\t\t\tformat: this.format,\n\t\t\ttype: this.type,\n\t\t\tencoding: this.encoding,\n\n\t\t\tminFilter: this.minFilter,\n\t\t\tmagFilter: this.magFilter,\n\t\t\tanisotropy: this.anisotropy,\n\n\t\t\tflipY: this.flipY,\n\n\t\t\tpremultiplyAlpha: this.premultiplyAlpha,\n\t\t\tunpackAlignment: this.unpackAlignment\n\n\t\t};\n\n\t\tif ( this.image !== undefined ) {\n\n\t\t\t// TODO: Move to THREE.Image\n\n\t\t\tconst image = this.image;\n\n\t\t\tif ( image.uuid === undefined ) {\n\n\t\t\t\timage.uuid = generateUUID(); // UGH\n\n\t\t\t}\n\n\t\t\tif ( ! isRootObject && meta.images[ image.uuid ] === undefined ) {\n\n\t\t\t\tlet url;\n\n\t\t\t\tif ( Array.isArray( image ) ) {\n\n\t\t\t\t\t// process array of images e.g. CubeTexture\n\n\t\t\t\t\turl = [];\n\n\t\t\t\t\tfor ( let i = 0, l = image.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t// check cube texture with data textures\n\n\t\t\t\t\t\tif ( image[ i ].isDataTexture ) {\n\n\t\t\t\t\t\t\turl.push( serializeImage( image[ i ].image ) );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\turl.push( serializeImage( image[ i ] ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// process single image\n\n\t\t\t\t\turl = serializeImage( image );\n\n\t\t\t\t}\n\n\t\t\t\tmeta.images[ image.uuid ] = {\n\t\t\t\t\tuuid: image.uuid,\n\t\t\t\t\turl: url\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\toutput.image = image.uuid;\n\n\t\t}\n\n\t\tif ( ! isRootObject ) {\n\n\t\t\tmeta.textures[ this.uuid ] = output;\n\n\t\t}\n\n\t\treturn output;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n\ttransformUv( uv ) {\n\n\t\tif ( this.mapping !== UVMapping ) return uv;\n\n\t\tuv.applyMatrix3( this.matrix );\n\n\t\tif ( uv.x < 0 || uv.x > 1 ) {\n\n\t\t\tswitch ( this.wrapS ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.x = uv.x < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.x ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.x = Math.ceil( uv.x ) - uv.x;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( uv.y < 0 || uv.y > 1 ) {\n\n\t\t\tswitch ( this.wrapT ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.y = uv.y < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.y ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.y = Math.ceil( uv.y ) - uv.y;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.flipY ) {\n\n\t\t\tuv.y = 1 - uv.y;\n\n\t\t}\n\n\t\treturn uv;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n}\n\nTexture.DEFAULT_IMAGE = undefined;\nTexture.DEFAULT_MAPPING = UVMapping;\n\nTexture.prototype.isTexture = true;\n\nfunction serializeImage( image ) {\n\n\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t// default images\n\n\t\treturn ImageUtils.getDataURL( image );\n\n\t} else {\n\n\t\tif ( image.data ) {\n\n\t\t\t// images of DataTexture\n\n\t\t\treturn {\n\t\t\t\tdata: Array.prototype.slice.call( image.data ),\n\t\t\t\twidth: image.width,\n\t\t\t\theight: image.height,\n\t\t\t\ttype: image.data.constructor.name\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.Texture: Unable to serialize Texture.' );\n\t\t\treturn {};\n\n\t\t}\n\n\t}\n\n}\n\nclass Vector4 {\n\n\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\n\t}\n\n\tget width() {\n\n\t\treturn this.z;\n\n\t}\n\n\tset width( value ) {\n\n\t\tthis.z = value;\n\n\t}\n\n\tget height() {\n\n\t\treturn this.w;\n\n\t}\n\n\tset height( value ) {\n\n\t\tthis.w = value;\n\n\t}\n\n\tset( x, y, z, w ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\t\tthis.w = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetW( w ) {\n\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tcase 3: this.w = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tcase 3: return this.w;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y, this.z, this.w );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\t\tthis.w = ( v.w !== undefined ) ? v.w : 1;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\treturn this.addVectors( v, w );\n\n\t\t}\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\t\tthis.w += v.w;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\t\tthis.w += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\t\tthis.w = a.w + b.w;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\t\tthis.w += v.w * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\treturn this.subVectors( v, w );\n\n\t\t}\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\t\tthis.w -= v.w;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\t\tthis.w -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\t\tthis.w = a.w - b.w;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\t\tthis.z *= v.z;\n\t\tthis.w *= v.w;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\t\tthis.w *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z, w = this.w;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] * w;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] * w;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] * w;\n\t\tthis.w = e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] * w;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tsetAxisAngleFromQuaternion( q ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm\n\n\t\t// q is assumed to be normalized\n\n\t\tthis.w = 2 * Math.acos( q.w );\n\n\t\tconst s = Math.sqrt( 1 - q.w * q.w );\n\n\t\tif ( s < 0.0001 ) {\n\n\t\t\tthis.x = 1;\n\t\t\tthis.y = 0;\n\t\t\tthis.z = 0;\n\n\t\t} else {\n\n\t\t\tthis.x = q.x / s;\n\t\t\tthis.y = q.y / s;\n\t\t\tthis.z = q.z / s;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetAxisAngleFromRotationMatrix( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tlet angle, x, y, z; // variables for result\n\t\tconst epsilon = 0.01,\t\t// margin to allow for rounding errors\n\t\t\tepsilon2 = 0.1,\t\t// margin to distinguish between 0 and 180 degrees\n\n\t\t\tte = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\tif ( ( Math.abs( m12 - m21 ) < epsilon ) &&\n\t\t ( Math.abs( m13 - m31 ) < epsilon ) &&\n\t\t ( Math.abs( m23 - m32 ) < epsilon ) ) {\n\n\t\t\t// singularity found\n\t\t\t// first check for identity matrix which must have +1 for all terms\n\t\t\t// in leading diagonal and zero in other terms\n\n\t\t\tif ( ( Math.abs( m12 + m21 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m13 + m31 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m23 + m32 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) {\n\n\t\t\t\t// this singularity is identity matrix so angle = 0\n\n\t\t\t\tthis.set( 1, 0, 0, 0 );\n\n\t\t\t\treturn this; // zero angle, arbitrary axis\n\n\t\t\t}\n\n\t\t\t// otherwise this singularity is angle = 180\n\n\t\t\tangle = Math.PI;\n\n\t\t\tconst xx = ( m11 + 1 ) / 2;\n\t\t\tconst yy = ( m22 + 1 ) / 2;\n\t\t\tconst zz = ( m33 + 1 ) / 2;\n\t\t\tconst xy = ( m12 + m21 ) / 4;\n\t\t\tconst xz = ( m13 + m31 ) / 4;\n\t\t\tconst yz = ( m23 + m32 ) / 4;\n\n\t\t\tif ( ( xx > yy ) && ( xx > zz ) ) {\n\n\t\t\t\t// m11 is the largest diagonal term\n\n\t\t\t\tif ( xx < epsilon ) {\n\n\t\t\t\t\tx = 0;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tx = Math.sqrt( xx );\n\t\t\t\t\ty = xy / x;\n\t\t\t\t\tz = xz / x;\n\n\t\t\t\t}\n\n\t\t\t} else if ( yy > zz ) {\n\n\t\t\t\t// m22 is the largest diagonal term\n\n\t\t\t\tif ( yy < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ty = Math.sqrt( yy );\n\t\t\t\t\tx = xy / y;\n\t\t\t\t\tz = yz / y;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// m33 is the largest diagonal term so base result on this\n\n\t\t\t\tif ( zz < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tz = Math.sqrt( zz );\n\t\t\t\t\tx = xz / z;\n\t\t\t\t\ty = yz / z;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.set( x, y, z, angle );\n\n\t\t\treturn this; // return 180 deg rotation\n\n\t\t}\n\n\t\t// as we have reached here there are no singularities so we can handle normally\n\n\t\tlet s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 ) +\n\t\t\t( m13 - m31 ) * ( m13 - m31 ) +\n\t\t\t( m21 - m12 ) * ( m21 - m12 ) ); // used to normalize\n\n\t\tif ( Math.abs( s ) < 0.001 ) s = 1;\n\n\t\t// prevent divide by zero, should not happen if matrix is orthogonal and should be\n\t\t// caught by singularity test above, but I've left it in just in case\n\n\t\tthis.x = ( m32 - m23 ) / s;\n\t\tthis.y = ( m13 - m31 ) / s;\n\t\tthis.z = ( m21 - m12 ) / s;\n\t\tthis.w = Math.acos( ( m11 + m22 + m33 - 1 ) / 2 );\n\n\t\treturn this;\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\t\tthis.w = Math.min( this.w, v.w );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\t\tthis.w = Math.max( this.w, v.w );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\t\tthis.w = Math.max( min.w, Math.min( max.w, this.w ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\t\tthis.z = Math.max( minVal, Math.min( maxVal, this.z ) );\n\t\tthis.w = Math.max( minVal, Math.min( maxVal, this.w ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\t\tthis.w = Math.floor( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\t\tthis.w = Math.ceil( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\t\tthis.w = Math.round( this.w );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\n\t\tthis.w = ( this.w < 0 ) ? Math.ceil( this.w ) : Math.floor( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\t\tthis.w = - this.w;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ) + Math.abs( this.w );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\t\tthis.w += ( v.w - this.w ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\t\tthis.w = v1.w + ( v2.w - v1.w ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) && ( v.w === this.w ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\t\tthis.w = array[ offset + 3 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\t\tarray[ offset + 3 ] = this.w;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index, offset ) {\n\n\t\tif ( offset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector4: offset has been removed from .fromBufferAttribute().' );\n\n\t\t}\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\t\tthis.w = attribute.getW( index );\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\t\tthis.z = Math.random();\n\t\tthis.w = Math.random();\n\n\t\treturn this;\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.x;\n\t\tyield this.y;\n\t\tyield this.z;\n\t\tyield this.w;\n\n\t}\n\n}\n\nVector4.prototype.isVector4 = true;\n\n/*\n In options, we can specify:\n * Texture parameters for an auto-generated target texture\n * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers\n*/\nclass WebGLRenderTarget extends EventDispatcher {\n\n\tconstructor( width, height, options = {} ) {\n\n\t\tsuper();\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.depth = 1;\n\n\t\tthis.scissor = new Vector4( 0, 0, width, height );\n\t\tthis.scissorTest = false;\n\n\t\tthis.viewport = new Vector4( 0, 0, width, height );\n\n\t\tthis.texture = new Texture( undefined, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding );\n\t\tthis.texture.isRenderTargetTexture = true;\n\n\t\tthis.texture.image = { width: width, height: height, depth: 1 };\n\n\t\tthis.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false;\n\t\tthis.texture.internalFormat = options.internalFormat !== undefined ? options.internalFormat : null;\n\t\tthis.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter;\n\n\t\tthis.depthBuffer = options.depthBuffer !== undefined ? options.depthBuffer : true;\n\t\tthis.stencilBuffer = options.stencilBuffer !== undefined ? options.stencilBuffer : false;\n\t\tthis.depthTexture = options.depthTexture !== undefined ? options.depthTexture : null;\n\n\t}\n\n\tsetTexture( texture ) {\n\n\t\ttexture.image = {\n\t\t\twidth: this.width,\n\t\t\theight: this.height,\n\t\t\tdepth: this.depth\n\t\t};\n\n\t\tthis.texture = texture;\n\n\t}\n\n\tsetSize( width, height, depth = 1 ) {\n\n\t\tif ( this.width !== width || this.height !== height || this.depth !== depth ) {\n\n\t\t\tthis.width = width;\n\t\t\tthis.height = height;\n\t\t\tthis.depth = depth;\n\n\t\t\tthis.texture.image.width = width;\n\t\t\tthis.texture.image.height = height;\n\t\t\tthis.texture.image.depth = depth;\n\n\t\t\tthis.dispose();\n\n\t\t}\n\n\t\tthis.viewport.set( 0, 0, width, height );\n\t\tthis.scissor.set( 0, 0, width, height );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\t\tthis.depth = source.depth;\n\n\t\tthis.viewport.copy( source.viewport );\n\n\t\tthis.texture = source.texture.clone();\n\t\tthis.texture.image = { ...this.texture.image }; // See #20328.\n\n\t\tthis.depthBuffer = source.depthBuffer;\n\t\tthis.stencilBuffer = source.stencilBuffer;\n\t\tthis.depthTexture = source.depthTexture;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n}\n\nWebGLRenderTarget.prototype.isWebGLRenderTarget = true;\n\nclass WebGLMultipleRenderTargets extends WebGLRenderTarget {\n\n\tconstructor( width, height, count ) {\n\n\t\tsuper( width, height );\n\n\t\tconst texture = this.texture;\n\n\t\tthis.texture = [];\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tthis.texture[ i ] = texture.clone();\n\n\t\t}\n\n\t}\n\n\tsetSize( width, height, depth = 1 ) {\n\n\t\tif ( this.width !== width || this.height !== height || this.depth !== depth ) {\n\n\t\t\tthis.width = width;\n\t\t\tthis.height = height;\n\t\t\tthis.depth = depth;\n\n\t\t\tfor ( let i = 0, il = this.texture.length; i < il; i ++ ) {\n\n\t\t\t\tthis.texture[ i ].image.width = width;\n\t\t\t\tthis.texture[ i ].image.height = height;\n\t\t\t\tthis.texture[ i ].image.depth = depth;\n\n\t\t\t}\n\n\t\t\tthis.dispose();\n\n\t\t}\n\n\t\tthis.viewport.set( 0, 0, width, height );\n\t\tthis.scissor.set( 0, 0, width, height );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.dispose();\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\t\tthis.depth = source.depth;\n\n\t\tthis.viewport.set( 0, 0, this.width, this.height );\n\t\tthis.scissor.set( 0, 0, this.width, this.height );\n\n\t\tthis.depthBuffer = source.depthBuffer;\n\t\tthis.stencilBuffer = source.stencilBuffer;\n\t\tthis.depthTexture = source.depthTexture;\n\n\t\tthis.texture.length = 0;\n\n\t\tfor ( let i = 0, il = source.texture.length; i < il; i ++ ) {\n\n\t\t\tthis.texture[ i ] = source.texture[ i ].clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nWebGLMultipleRenderTargets.prototype.isWebGLMultipleRenderTargets = true;\n\nclass WebGLMultisampleRenderTarget extends WebGLRenderTarget {\n\n\tconstructor( width, height, options ) {\n\n\t\tsuper( width, height, options );\n\n\t\tthis.samples = 4;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy.call( this, source );\n\n\t\tthis.samples = source.samples;\n\n\t\treturn this;\n\n\t}\n\n}\n\nWebGLMultisampleRenderTarget.prototype.isWebGLMultisampleRenderTarget = true;\n\nclass Quaternion {\n\n\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t}\n\n\tstatic slerp( qa, qb, qm, t ) {\n\n\t\tconsole.warn( 'THREE.Quaternion: Static .slerp() has been deprecated. Use qm.slerpQuaternions( qa, qb, t ) instead.' );\n\t\treturn qm.slerpQuaternions( qa, qb, t );\n\n\t}\n\n\tstatic slerpFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) {\n\n\t\t// fuzz-free, array-based Quaternion SLERP operation\n\n\t\tlet x0 = src0[ srcOffset0 + 0 ],\n\t\t\ty0 = src0[ srcOffset0 + 1 ],\n\t\t\tz0 = src0[ srcOffset0 + 2 ],\n\t\t\tw0 = src0[ srcOffset0 + 3 ];\n\n\t\tconst x1 = src1[ srcOffset1 + 0 ],\n\t\t\ty1 = src1[ srcOffset1 + 1 ],\n\t\t\tz1 = src1[ srcOffset1 + 2 ],\n\t\t\tw1 = src1[ srcOffset1 + 3 ];\n\n\t\tif ( t === 0 ) {\n\n\t\t\tdst[ dstOffset + 0 ] = x0;\n\t\t\tdst[ dstOffset + 1 ] = y0;\n\t\t\tdst[ dstOffset + 2 ] = z0;\n\t\t\tdst[ dstOffset + 3 ] = w0;\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( t === 1 ) {\n\n\t\t\tdst[ dstOffset + 0 ] = x1;\n\t\t\tdst[ dstOffset + 1 ] = y1;\n\t\t\tdst[ dstOffset + 2 ] = z1;\n\t\t\tdst[ dstOffset + 3 ] = w1;\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) {\n\n\t\t\tlet s = 1 - t;\n\t\t\tconst cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1,\n\t\t\t\tdir = ( cos >= 0 ? 1 : - 1 ),\n\t\t\t\tsqrSin = 1 - cos * cos;\n\n\t\t\t// Skip the Slerp for tiny steps to avoid numeric problems:\n\t\t\tif ( sqrSin > Number.EPSILON ) {\n\n\t\t\t\tconst sin = Math.sqrt( sqrSin ),\n\t\t\t\t\tlen = Math.atan2( sin, cos * dir );\n\n\t\t\t\ts = Math.sin( s * len ) / sin;\n\t\t\t\tt = Math.sin( t * len ) / sin;\n\n\t\t\t}\n\n\t\t\tconst tDir = t * dir;\n\n\t\t\tx0 = x0 * s + x1 * tDir;\n\t\t\ty0 = y0 * s + y1 * tDir;\n\t\t\tz0 = z0 * s + z1 * tDir;\n\t\t\tw0 = w0 * s + w1 * tDir;\n\n\t\t\t// Normalize in case we just did a lerp:\n\t\t\tif ( s === 1 - t ) {\n\n\t\t\t\tconst f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 );\n\n\t\t\t\tx0 *= f;\n\t\t\t\ty0 *= f;\n\t\t\t\tz0 *= f;\n\t\t\t\tw0 *= f;\n\n\t\t\t}\n\n\t\t}\n\n\t\tdst[ dstOffset ] = x0;\n\t\tdst[ dstOffset + 1 ] = y0;\n\t\tdst[ dstOffset + 2 ] = z0;\n\t\tdst[ dstOffset + 3 ] = w0;\n\n\t}\n\n\tstatic multiplyQuaternionsFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1 ) {\n\n\t\tconst x0 = src0[ srcOffset0 ];\n\t\tconst y0 = src0[ srcOffset0 + 1 ];\n\t\tconst z0 = src0[ srcOffset0 + 2 ];\n\t\tconst w0 = src0[ srcOffset0 + 3 ];\n\n\t\tconst x1 = src1[ srcOffset1 ];\n\t\tconst y1 = src1[ srcOffset1 + 1 ];\n\t\tconst z1 = src1[ srcOffset1 + 2 ];\n\t\tconst w1 = src1[ srcOffset1 + 3 ];\n\n\t\tdst[ dstOffset ] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1;\n\t\tdst[ dstOffset + 1 ] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1;\n\t\tdst[ dstOffset + 2 ] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1;\n\t\tdst[ dstOffset + 3 ] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1;\n\n\t\treturn dst;\n\n\t}\n\n\tget x() {\n\n\t\treturn this._x;\n\n\t}\n\n\tset x( value ) {\n\n\t\tthis._x = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget y() {\n\n\t\treturn this._y;\n\n\t}\n\n\tset y( value ) {\n\n\t\tthis._y = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget z() {\n\n\t\treturn this._z;\n\n\t}\n\n\tset z( value ) {\n\n\t\tthis._z = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget w() {\n\n\t\treturn this._w;\n\n\t}\n\n\tset w( value ) {\n\n\t\tthis._w = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tset( x, y, z, w ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._w );\n\n\t}\n\n\tcopy( quaternion ) {\n\n\t\tthis._x = quaternion.x;\n\t\tthis._y = quaternion.y;\n\t\tthis._z = quaternion.z;\n\t\tthis._w = quaternion.w;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromEuler( euler, update ) {\n\n\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\tthrow new Error( 'THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.' );\n\n\t\t}\n\n\t\tconst x = euler._x, y = euler._y, z = euler._z, order = euler._order;\n\n\t\t// http://www.mathworks.com/matlabcentral/fileexchange/\n\t\t// \t20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/\n\t\t//\tcontent/SpinCalc.m\n\n\t\tconst cos = Math.cos;\n\t\tconst sin = Math.sin;\n\n\t\tconst c1 = cos( x / 2 );\n\t\tconst c2 = cos( y / 2 );\n\t\tconst c3 = cos( z / 2 );\n\n\t\tconst s1 = sin( x / 2 );\n\t\tconst s2 = sin( y / 2 );\n\t\tconst s3 = sin( z / 2 );\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYX':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZX':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'THREE.Quaternion: .setFromEuler() encountered an unknown order: ' + order );\n\n\t\t}\n\n\t\tif ( update !== false ) this._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromAxisAngle( axis, angle ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm\n\n\t\t// assumes axis is normalized\n\n\t\tconst halfAngle = angle / 2, s = Math.sin( halfAngle );\n\n\t\tthis._x = axis.x * s;\n\t\tthis._y = axis.y * s;\n\t\tthis._z = axis.z * s;\n\t\tthis._w = Math.cos( halfAngle );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromRotationMatrix( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tconst te = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ],\n\n\t\t\ttrace = m11 + m22 + m33;\n\n\t\tif ( trace > 0 ) {\n\n\t\t\tconst s = 0.5 / Math.sqrt( trace + 1.0 );\n\n\t\t\tthis._w = 0.25 / s;\n\t\t\tthis._x = ( m32 - m23 ) * s;\n\t\t\tthis._y = ( m13 - m31 ) * s;\n\t\t\tthis._z = ( m21 - m12 ) * s;\n\n\t\t} else if ( m11 > m22 && m11 > m33 ) {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 );\n\n\t\t\tthis._w = ( m32 - m23 ) / s;\n\t\t\tthis._x = 0.25 * s;\n\t\t\tthis._y = ( m12 + m21 ) / s;\n\t\t\tthis._z = ( m13 + m31 ) / s;\n\n\t\t} else if ( m22 > m33 ) {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 );\n\n\t\t\tthis._w = ( m13 - m31 ) / s;\n\t\t\tthis._x = ( m12 + m21 ) / s;\n\t\t\tthis._y = 0.25 * s;\n\t\t\tthis._z = ( m23 + m32 ) / s;\n\n\t\t} else {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 );\n\n\t\t\tthis._w = ( m21 - m12 ) / s;\n\t\t\tthis._x = ( m13 + m31 ) / s;\n\t\t\tthis._y = ( m23 + m32 ) / s;\n\t\t\tthis._z = 0.25 * s;\n\n\t\t}\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromUnitVectors( vFrom, vTo ) {\n\n\t\t// assumes direction vectors vFrom and vTo are normalized\n\n\t\tlet r = vFrom.dot( vTo ) + 1;\n\n\t\tif ( r < Number.EPSILON ) {\n\n\t\t\t// vFrom and vTo point in opposite directions\n\n\t\t\tr = 0;\n\n\t\t\tif ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) {\n\n\t\t\t\tthis._x = - vFrom.y;\n\t\t\t\tthis._y = vFrom.x;\n\t\t\t\tthis._z = 0;\n\t\t\t\tthis._w = r;\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = 0;\n\t\t\t\tthis._y = - vFrom.z;\n\t\t\t\tthis._z = vFrom.y;\n\t\t\t\tthis._w = r;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// crossVectors( vFrom, vTo ); // inlined to avoid cyclic dependency on Vector3\n\n\t\t\tthis._x = vFrom.y * vTo.z - vFrom.z * vTo.y;\n\t\t\tthis._y = vFrom.z * vTo.x - vFrom.x * vTo.z;\n\t\t\tthis._z = vFrom.x * vTo.y - vFrom.y * vTo.x;\n\t\t\tthis._w = r;\n\n\t\t}\n\n\t\treturn this.normalize();\n\n\t}\n\n\tangleTo( q ) {\n\n\t\treturn 2 * Math.acos( Math.abs( clamp( this.dot( q ), - 1, 1 ) ) );\n\n\t}\n\n\trotateTowards( q, step ) {\n\n\t\tconst angle = this.angleTo( q );\n\n\t\tif ( angle === 0 ) return this;\n\n\t\tconst t = Math.min( 1, step / angle );\n\n\t\tthis.slerp( q, t );\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\treturn this.set( 0, 0, 0, 1 );\n\n\t}\n\n\tinvert() {\n\n\t\t// quaternion is assumed to have unit length\n\n\t\treturn this.conjugate();\n\n\t}\n\n\tconjugate() {\n\n\t\tthis._x *= - 1;\n\t\tthis._y *= - 1;\n\t\tthis._z *= - 1;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w );\n\n\t}\n\n\tnormalize() {\n\n\t\tlet l = this.length();\n\n\t\tif ( l === 0 ) {\n\n\t\t\tthis._x = 0;\n\t\t\tthis._y = 0;\n\t\t\tthis._z = 0;\n\t\t\tthis._w = 1;\n\n\t\t} else {\n\n\t\t\tl = 1 / l;\n\n\t\t\tthis._x = this._x * l;\n\t\t\tthis._y = this._y * l;\n\t\t\tthis._z = this._z * l;\n\t\t\tthis._w = this._w * l;\n\n\t\t}\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( q, p ) {\n\n\t\tif ( p !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.' );\n\t\t\treturn this.multiplyQuaternions( q, p );\n\n\t\t}\n\n\t\treturn this.multiplyQuaternions( this, q );\n\n\t}\n\n\tpremultiply( q ) {\n\n\t\treturn this.multiplyQuaternions( q, this );\n\n\t}\n\n\tmultiplyQuaternions( a, b ) {\n\n\t\t// from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\n\n\t\tconst qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;\n\t\tconst qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w;\n\n\t\tthis._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n\t\tthis._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n\t\tthis._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n\t\tthis._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tslerp( qb, t ) {\n\n\t\tif ( t === 0 ) return this;\n\t\tif ( t === 1 ) return this.copy( qb );\n\n\t\tconst x = this._x, y = this._y, z = this._z, w = this._w;\n\n\t\t// http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/\n\n\t\tlet cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;\n\n\t\tif ( cosHalfTheta < 0 ) {\n\n\t\t\tthis._w = - qb._w;\n\t\t\tthis._x = - qb._x;\n\t\t\tthis._y = - qb._y;\n\t\t\tthis._z = - qb._z;\n\n\t\t\tcosHalfTheta = - cosHalfTheta;\n\n\t\t} else {\n\n\t\t\tthis.copy( qb );\n\n\t\t}\n\n\t\tif ( cosHalfTheta >= 1.0 ) {\n\n\t\t\tthis._w = w;\n\t\t\tthis._x = x;\n\t\t\tthis._y = y;\n\t\t\tthis._z = z;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta;\n\n\t\tif ( sqrSinHalfTheta <= Number.EPSILON ) {\n\n\t\t\tconst s = 1 - t;\n\t\t\tthis._w = s * w + t * this._w;\n\t\t\tthis._x = s * x + t * this._x;\n\t\t\tthis._y = s * y + t * this._y;\n\t\t\tthis._z = s * z + t * this._z;\n\n\t\t\tthis.normalize();\n\t\t\tthis._onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst sinHalfTheta = Math.sqrt( sqrSinHalfTheta );\n\t\tconst halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta );\n\t\tconst ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta,\n\t\t\tratioB = Math.sin( t * halfTheta ) / sinHalfTheta;\n\n\t\tthis._w = ( w * ratioA + this._w * ratioB );\n\t\tthis._x = ( x * ratioA + this._x * ratioB );\n\t\tthis._y = ( y * ratioA + this._y * ratioB );\n\t\tthis._z = ( z * ratioA + this._z * ratioB );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tslerpQuaternions( qa, qb, t ) {\n\n\t\tthis.copy( qa ).slerp( qb, t );\n\n\t}\n\n\trandom() {\n\n\t\t// Derived from http://planning.cs.uiuc.edu/node198.html\n\t\t// Note, this source uses w, x, y, z ordering,\n\t\t// so we swap the order below.\n\n\t\tconst u1 = Math.random();\n\t\tconst sqrt1u1 = Math.sqrt( 1 - u1 );\n\t\tconst sqrtu1 = Math.sqrt( u1 );\n\n\t\tconst u2 = 2 * Math.PI * Math.random();\n\n\t\tconst u3 = 2 * Math.PI * Math.random();\n\n\t\treturn this.set(\n\t\t\tsqrt1u1 * Math.cos( u2 ),\n\t\t\tsqrtu1 * Math.sin( u3 ),\n\t\t\tsqrtu1 * Math.cos( u3 ),\n\t\t\tsqrt1u1 * Math.sin( u2 ),\n\t\t);\n\n\t}\n\n\tequals( quaternion ) {\n\n\t\treturn ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis._x = array[ offset ];\n\t\tthis._y = array[ offset + 1 ];\n\t\tthis._z = array[ offset + 2 ];\n\t\tthis._w = array[ offset + 3 ];\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._w;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis._x = attribute.getX( index );\n\t\tthis._y = attribute.getY( index );\n\t\tthis._z = attribute.getZ( index );\n\t\tthis._w = attribute.getW( index );\n\n\t\treturn this;\n\n\t}\n\n\t_onChange( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t_onChangeCallback() {}\n\n}\n\nQuaternion.prototype.isQuaternion = true;\n\nclass Vector3 {\n\n\tconstructor( x = 0, y = 0, z = 0 ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t}\n\n\tset( x, y, z ) {\n\n\t\tif ( z === undefined ) z = this.z; // sprite.scale.set(x,y)\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y, this.z );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\treturn this.addVectors( v, w );\n\n\t\t}\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\treturn this.subVectors( v, w );\n\n\t\t}\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.' );\n\t\t\treturn this.multiplyVectors( v, w );\n\n\t\t}\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\t\tthis.z *= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyVectors( a, b ) {\n\n\t\tthis.x = a.x * b.x;\n\t\tthis.y = a.y * b.y;\n\t\tthis.z = a.z * b.z;\n\n\t\treturn this;\n\n\t}\n\n\tapplyEuler( euler ) {\n\n\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\tconsole.error( 'THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.' );\n\n\t\t}\n\n\t\treturn this.applyQuaternion( _quaternion$4.setFromEuler( euler ) );\n\n\t}\n\n\tapplyAxisAngle( axis, angle ) {\n\n\t\treturn this.applyQuaternion( _quaternion$4.setFromAxisAngle( axis, angle ) );\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z;\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\treturn this.applyMatrix3( m ).normalize();\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tconst w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] );\n\n\t\tthis.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w;\n\t\tthis.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w;\n\t\tthis.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w;\n\n\t\treturn this;\n\n\t}\n\n\tapplyQuaternion( q ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst qx = q.x, qy = q.y, qz = q.z, qw = q.w;\n\n\t\t// calculate quat * vector\n\n\t\tconst ix = qw * x + qy * z - qz * y;\n\t\tconst iy = qw * y + qz * x - qx * z;\n\t\tconst iz = qw * z + qx * y - qy * x;\n\t\tconst iw = - qx * x - qy * y - qz * z;\n\n\t\t// calculate result * inverse quat\n\n\t\tthis.x = ix * qw + iw * - qx + iy * - qz - iz * - qy;\n\t\tthis.y = iy * qw + iw * - qy + iz * - qx - ix * - qz;\n\t\tthis.z = iz * qw + iw * - qz + ix * - qy - iy * - qx;\n\n\t\treturn this;\n\n\t}\n\n\tproject( camera ) {\n\n\t\treturn this.applyMatrix4( camera.matrixWorldInverse ).applyMatrix4( camera.projectionMatrix );\n\n\t}\n\n\tunproject( camera ) {\n\n\t\treturn this.applyMatrix4( camera.projectionMatrixInverse ).applyMatrix4( camera.matrixWorld );\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\t// input: THREE.Matrix4 affine matrix\n\t\t// vector interpreted as a direction\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z;\n\n\t\treturn this.normalize();\n\n\t}\n\n\tdivide( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\t\tthis.z /= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\t\tthis.z = Math.max( minVal, Math.min( maxVal, this.z ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z;\n\n\t}\n\n\t// TODO lengthSquared?\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tcross( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.' );\n\t\t\treturn this.crossVectors( v, w );\n\n\t\t}\n\n\t\treturn this.crossVectors( this, v );\n\n\t}\n\n\tcrossVectors( a, b ) {\n\n\t\tconst ax = a.x, ay = a.y, az = a.z;\n\t\tconst bx = b.x, by = b.y, bz = b.z;\n\n\t\tthis.x = ay * bz - az * by;\n\t\tthis.y = az * bx - ax * bz;\n\t\tthis.z = ax * by - ay * bx;\n\n\t\treturn this;\n\n\t}\n\n\tprojectOnVector( v ) {\n\n\t\tconst denominator = v.lengthSq();\n\n\t\tif ( denominator === 0 ) return this.set( 0, 0, 0 );\n\n\t\tconst scalar = v.dot( this ) / denominator;\n\n\t\treturn this.copy( v ).multiplyScalar( scalar );\n\n\t}\n\n\tprojectOnPlane( planeNormal ) {\n\n\t\t_vector$c.copy( this ).projectOnVector( planeNormal );\n\n\t\treturn this.sub( _vector$c );\n\n\t}\n\n\treflect( normal ) {\n\n\t\t// reflect incident vector off plane orthogonal to normal\n\t\t// normal is assumed to have unit length\n\n\t\treturn this.sub( _vector$c.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) );\n\n\t}\n\n\tangleTo( v ) {\n\n\t\tconst denominator = Math.sqrt( this.lengthSq() * v.lengthSq() );\n\n\t\tif ( denominator === 0 ) return Math.PI / 2;\n\n\t\tconst theta = this.dot( v ) / denominator;\n\n\t\t// clamp, to handle numerical problems\n\n\t\treturn Math.acos( clamp( theta, - 1, 1 ) );\n\n\t}\n\n\tdistanceTo( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t}\n\n\tdistanceToSquared( v ) {\n\n\t\tconst dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;\n\n\t\treturn dx * dx + dy * dy + dz * dz;\n\n\t}\n\n\tmanhattanDistanceTo( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ) + Math.abs( this.z - v.z );\n\n\t}\n\n\tsetFromSpherical( s ) {\n\n\t\treturn this.setFromSphericalCoords( s.radius, s.phi, s.theta );\n\n\t}\n\n\tsetFromSphericalCoords( radius, phi, theta ) {\n\n\t\tconst sinPhiRadius = Math.sin( phi ) * radius;\n\n\t\tthis.x = sinPhiRadius * Math.sin( theta );\n\t\tthis.y = Math.cos( phi ) * radius;\n\t\tthis.z = sinPhiRadius * Math.cos( theta );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCylindrical( c ) {\n\n\t\treturn this.setFromCylindricalCoords( c.radius, c.theta, c.y );\n\n\t}\n\n\tsetFromCylindricalCoords( radius, theta, y ) {\n\n\t\tthis.x = radius * Math.sin( theta );\n\t\tthis.y = y;\n\t\tthis.z = radius * Math.cos( theta );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixPosition( m ) {\n\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 12 ];\n\t\tthis.y = e[ 13 ];\n\t\tthis.z = e[ 14 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixScale( m ) {\n\n\t\tconst sx = this.setFromMatrixColumn( m, 0 ).length();\n\t\tconst sy = this.setFromMatrixColumn( m, 1 ).length();\n\t\tconst sz = this.setFromMatrixColumn( m, 2 ).length();\n\n\t\tthis.x = sx;\n\t\tthis.y = sy;\n\t\tthis.z = sz;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixColumn( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 4 );\n\n\t}\n\n\tsetFromMatrix3Column( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 3 );\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index, offset ) {\n\n\t\tif ( offset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: offset has been removed from .fromBufferAttribute().' );\n\n\t\t}\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\t\tthis.z = Math.random();\n\n\t\treturn this;\n\n\t}\n\n\trandomDirection() {\n\n\t\t// Derived from https://mathworld.wolfram.com/SpherePointPicking.html\n\n\t\tconst u = ( Math.random() - 0.5 ) * 2;\n\t\tconst t = Math.random() * Math.PI * 2;\n\t\tconst f = Math.sqrt( 1 - u ** 2 );\n\n\t\tthis.x = f * Math.cos( t );\n\t\tthis.y = f * Math.sin( t );\n\t\tthis.z = u;\n\n\t\treturn this;\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.x;\n\t\tyield this.y;\n\t\tyield this.z;\n\n\t}\n\n}\n\nVector3.prototype.isVector3 = true;\n\nconst _vector$c = /*@__PURE__*/ new Vector3();\nconst _quaternion$4 = /*@__PURE__*/ new Quaternion();\n\nclass Box3 {\n\n\tconstructor( min = new Vector3( + Infinity, + Infinity, + Infinity ), max = new Vector3( - Infinity, - Infinity, - Infinity ) ) {\n\n\t\tthis.min = min;\n\t\tthis.max = max;\n\n\t}\n\n\tset( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromArray( array ) {\n\n\t\tlet minX = + Infinity;\n\t\tlet minY = + Infinity;\n\t\tlet minZ = + Infinity;\n\n\t\tlet maxX = - Infinity;\n\t\tlet maxY = - Infinity;\n\t\tlet maxZ = - Infinity;\n\n\t\tfor ( let i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\tconst x = array[ i ];\n\t\t\tconst y = array[ i + 1 ];\n\t\t\tconst z = array[ i + 2 ];\n\n\t\t\tif ( x < minX ) minX = x;\n\t\t\tif ( y < minY ) minY = y;\n\t\t\tif ( z < minZ ) minZ = z;\n\n\t\t\tif ( x > maxX ) maxX = x;\n\t\t\tif ( y > maxY ) maxY = y;\n\t\t\tif ( z > maxZ ) maxZ = z;\n\n\t\t}\n\n\t\tthis.min.set( minX, minY, minZ );\n\t\tthis.max.set( maxX, maxY, maxZ );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromBufferAttribute( attribute ) {\n\n\t\tlet minX = + Infinity;\n\t\tlet minY = + Infinity;\n\t\tlet minZ = + Infinity;\n\n\t\tlet maxX = - Infinity;\n\t\tlet maxY = - Infinity;\n\t\tlet maxZ = - Infinity;\n\n\t\tfor ( let i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\tconst x = attribute.getX( i );\n\t\t\tconst y = attribute.getY( i );\n\t\t\tconst z = attribute.getZ( i );\n\n\t\t\tif ( x < minX ) minX = x;\n\t\t\tif ( y < minY ) minY = y;\n\t\t\tif ( z < minZ ) minZ = z;\n\n\t\t\tif ( x > maxX ) maxX = x;\n\t\t\tif ( y > maxY ) maxY = y;\n\t\t\tif ( z > maxZ ) maxZ = z;\n\n\t\t}\n\n\t\tthis.min.set( minX, minY, minZ );\n\t\tthis.max.set( maxX, maxY, maxZ );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCenterAndSize( center, size ) {\n\n\t\tconst halfSize = _vector$b.copy( size ).multiplyScalar( 0.5 );\n\n\t\tthis.min.copy( center ).sub( halfSize );\n\t\tthis.max.copy( center ).add( halfSize );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromObject( object ) {\n\n\t\tthis.makeEmpty();\n\n\t\treturn this.expandByObject( object );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.min.x = this.min.y = this.min.z = + Infinity;\n\t\tthis.max.x = this.max.y = this.max.z = - Infinity;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ) || ( this.max.z < this.min.z );\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t}\n\n\tgetSize( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t}\n\n\texpandByVector( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t}\n\n\texpandByScalar( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t}\n\n\texpandByObject( object ) {\n\n\t\t// Computes the world-axis-aligned bounding box of an object (including its children),\n\t\t// accounting for both the object's, and children's, world transforms\n\n\t\tobject.updateWorldMatrix( false, false );\n\n\t\tconst geometry = object.geometry;\n\n\t\tif ( geometry !== undefined ) {\n\n\t\t\tif ( geometry.boundingBox === null ) {\n\n\t\t\t\tgeometry.computeBoundingBox();\n\n\t\t\t}\n\n\t\t\t_box$3.copy( geometry.boundingBox );\n\t\t\t_box$3.applyMatrix4( object.matrixWorld );\n\n\t\t\tthis.union( _box$3 );\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tthis.expandByObject( children[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn point.x < this.min.x || point.x > this.max.x ||\n\t\t\tpoint.y < this.min.y || point.y > this.max.y ||\n\t\t\tpoint.z < this.min.z || point.z > this.max.z ? false : true;\n\n\t}\n\n\tcontainsBox( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y &&\n\t\t\tthis.min.z <= box.min.z && box.max.z <= this.max.z;\n\n\t}\n\n\tgetParameter( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y ),\n\t\t\t( point.z - this.min.z ) / ( this.max.z - this.min.z )\n\t\t);\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\t// using 6 splitting planes to rule out intersections.\n\t\treturn box.max.x < this.min.x || box.min.x > this.max.x ||\n\t\t\tbox.max.y < this.min.y || box.min.y > this.max.y ||\n\t\t\tbox.max.z < this.min.z || box.min.z > this.max.z ? false : true;\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\t// Find the point on the AABB closest to the sphere center.\n\t\tthis.clampPoint( sphere.center, _vector$b );\n\n\t\t// If that point is inside the sphere, the AABB and sphere intersect.\n\t\treturn _vector$b.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\t// We compute the minimum and maximum dot product values. If those values\n\t\t// are on the same side (back or front) of the plane, then there is no intersection.\n\n\t\tlet min, max;\n\n\t\tif ( plane.normal.x > 0 ) {\n\n\t\t\tmin = plane.normal.x * this.min.x;\n\t\t\tmax = plane.normal.x * this.max.x;\n\n\t\t} else {\n\n\t\t\tmin = plane.normal.x * this.max.x;\n\t\t\tmax = plane.normal.x * this.min.x;\n\n\t\t}\n\n\t\tif ( plane.normal.y > 0 ) {\n\n\t\t\tmin += plane.normal.y * this.min.y;\n\t\t\tmax += plane.normal.y * this.max.y;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.y * this.max.y;\n\t\t\tmax += plane.normal.y * this.min.y;\n\n\t\t}\n\n\t\tif ( plane.normal.z > 0 ) {\n\n\t\t\tmin += plane.normal.z * this.min.z;\n\t\t\tmax += plane.normal.z * this.max.z;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.z * this.max.z;\n\t\t\tmax += plane.normal.z * this.min.z;\n\n\t\t}\n\n\t\treturn ( min <= - plane.constant && max >= - plane.constant );\n\n\t}\n\n\tintersectsTriangle( triangle ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// compute box center and extents\n\t\tthis.getCenter( _center );\n\t\t_extents.subVectors( this.max, _center );\n\n\t\t// translate triangle to aabb origin\n\t\t_v0$2.subVectors( triangle.a, _center );\n\t\t_v1$7.subVectors( triangle.b, _center );\n\t\t_v2$3.subVectors( triangle.c, _center );\n\n\t\t// compute edge vectors for triangle\n\t\t_f0.subVectors( _v1$7, _v0$2 );\n\t\t_f1.subVectors( _v2$3, _v1$7 );\n\t\t_f2.subVectors( _v0$2, _v2$3 );\n\n\t\t// test against axes that are given by cross product combinations of the edges of the triangle and the edges of the aabb\n\t\t// make an axis testing of each of the 3 sides of the aabb against each of the 3 sides of the triangle = 9 axis of separation\n\t\t// axis_ij = u_i x f_j (u0, u1, u2 = face normals of aabb = x,y,z axes vectors since aabb is axis aligned)\n\t\tlet axes = [\n\t\t\t0, - _f0.z, _f0.y, 0, - _f1.z, _f1.y, 0, - _f2.z, _f2.y,\n\t\t\t_f0.z, 0, - _f0.x, _f1.z, 0, - _f1.x, _f2.z, 0, - _f2.x,\n\t\t\t- _f0.y, _f0.x, 0, - _f1.y, _f1.x, 0, - _f2.y, _f2.x, 0\n\t\t];\n\t\tif ( ! satForAxes( axes, _v0$2, _v1$7, _v2$3, _extents ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// test 3 face normals from the aabb\n\t\taxes = [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ];\n\t\tif ( ! satForAxes( axes, _v0$2, _v1$7, _v2$3, _extents ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// finally testing the face normal of the triangle\n\t\t// use already existing triangle edge vectors here\n\t\t_triangleNormal.crossVectors( _f0, _f1 );\n\t\taxes = [ _triangleNormal.x, _triangleNormal.y, _triangleNormal.z ];\n\n\t\treturn satForAxes( axes, _v0$2, _v1$7, _v2$3, _extents );\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\tconst clampedPoint = _vector$b.copy( point ).clamp( this.min, this.max );\n\n\t\treturn clampedPoint.sub( point ).length();\n\n\t}\n\n\tgetBoundingSphere( target ) {\n\n\t\tthis.getCenter( target.center );\n\n\t\ttarget.radius = this.getSize( _vector$b ).length() * 0.5;\n\n\t\treturn target;\n\n\t}\n\n\tintersect( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\t// ensure that if there is no overlap, the result is fully empty, not slightly empty with non-inf/+inf values that will cause subsequence intersects to erroneously return valid values.\n\t\tif ( this.isEmpty() ) this.makeEmpty();\n\n\t\treturn this;\n\n\t}\n\n\tunion( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\t// transform of empty box is an empty box.\n\t\tif ( this.isEmpty() ) return this;\n\n\t\t// NOTE: I am using a binary pattern to specify all 2^3 combinations below\n\t\t_points[ 0 ].set( this.min.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 000\n\t\t_points[ 1 ].set( this.min.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 001\n\t\t_points[ 2 ].set( this.min.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 010\n\t\t_points[ 3 ].set( this.min.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 011\n\t\t_points[ 4 ].set( this.max.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 100\n\t\t_points[ 5 ].set( this.max.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 101\n\t\t_points[ 6 ].set( this.max.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 110\n\t\t_points[ 7 ].set( this.max.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 111\n\n\t\tthis.setFromPoints( _points );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\tequals( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n}\n\nBox3.prototype.isBox3 = true;\n\nconst _points = [\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3()\n];\n\nconst _vector$b = /*@__PURE__*/ new Vector3();\n\nconst _box$3 = /*@__PURE__*/ new Box3();\n\n// triangle centered vertices\n\nconst _v0$2 = /*@__PURE__*/ new Vector3();\nconst _v1$7 = /*@__PURE__*/ new Vector3();\nconst _v2$3 = /*@__PURE__*/ new Vector3();\n\n// triangle edge vectors\n\nconst _f0 = /*@__PURE__*/ new Vector3();\nconst _f1 = /*@__PURE__*/ new Vector3();\nconst _f2 = /*@__PURE__*/ new Vector3();\n\nconst _center = /*@__PURE__*/ new Vector3();\nconst _extents = /*@__PURE__*/ new Vector3();\nconst _triangleNormal = /*@__PURE__*/ new Vector3();\nconst _testAxis = /*@__PURE__*/ new Vector3();\n\nfunction satForAxes( axes, v0, v1, v2, extents ) {\n\n\tfor ( let i = 0, j = axes.length - 3; i <= j; i += 3 ) {\n\n\t\t_testAxis.fromArray( axes, i );\n\t\t// project the aabb onto the seperating axis\n\t\tconst r = extents.x * Math.abs( _testAxis.x ) + extents.y * Math.abs( _testAxis.y ) + extents.z * Math.abs( _testAxis.z );\n\t\t// project all 3 vertices of the triangle onto the seperating axis\n\t\tconst p0 = v0.dot( _testAxis );\n\t\tconst p1 = v1.dot( _testAxis );\n\t\tconst p2 = v2.dot( _testAxis );\n\t\t// actual test, basically see if either of the most extreme of the triangle points intersects r\n\t\tif ( Math.max( - Math.max( p0, p1, p2 ), Math.min( p0, p1, p2 ) ) > r ) {\n\n\t\t\t// points of the projected triangle are outside the projected half-length of the aabb\n\t\t\t// the axis is seperating and we can exit\n\t\t\treturn false;\n\n\t\t}\n\n\t}\n\n\treturn true;\n\n}\n\nconst _box$2 = /*@__PURE__*/ new Box3();\nconst _v1$6 = /*@__PURE__*/ new Vector3();\nconst _toFarthestPoint = /*@__PURE__*/ new Vector3();\nconst _toPoint = /*@__PURE__*/ new Vector3();\n\nclass Sphere {\n\n\tconstructor( center = new Vector3(), radius = - 1 ) {\n\n\t\tthis.center = center;\n\t\tthis.radius = radius;\n\n\t}\n\n\tset( center, radius ) {\n\n\t\tthis.center.copy( center );\n\t\tthis.radius = radius;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points, optionalCenter ) {\n\n\t\tconst center = this.center;\n\n\t\tif ( optionalCenter !== undefined ) {\n\n\t\t\tcenter.copy( optionalCenter );\n\n\t\t} else {\n\n\t\t\t_box$2.setFromPoints( points ).getCenter( center );\n\n\t\t}\n\n\t\tlet maxRadiusSq = 0;\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) );\n\n\t\t}\n\n\t\tthis.radius = Math.sqrt( maxRadiusSq );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( sphere ) {\n\n\t\tthis.center.copy( sphere.center );\n\t\tthis.radius = sphere.radius;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\treturn ( this.radius < 0 );\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.center.set( 0, 0, 0 );\n\t\tthis.radius = - 1;\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn ( point.distanceTo( this.center ) - this.radius );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\tconst radiusSum = this.radius + sphere.radius;\n\n\t\treturn sphere.center.distanceToSquared( this.center ) <= ( radiusSum * radiusSum );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsSphere( this );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\treturn Math.abs( plane.distanceToPoint( this.center ) ) <= this.radius;\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\tconst deltaLengthSq = this.center.distanceToSquared( point );\n\n\t\ttarget.copy( point );\n\n\t\tif ( deltaLengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\ttarget.sub( this.center ).normalize();\n\t\t\ttarget.multiplyScalar( this.radius ).add( this.center );\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n\tgetBoundingBox( target ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\t// Empty sphere produces empty bounding box\n\t\t\ttarget.makeEmpty();\n\t\t\treturn target;\n\n\t\t}\n\n\t\ttarget.set( this.center, this.center );\n\t\ttarget.expandByScalar( this.radius );\n\n\t\treturn target;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tthis.center.applyMatrix4( matrix );\n\t\tthis.radius = this.radius * matrix.getMaxScaleOnAxis();\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.center.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\t// from https://github.com/juj/MathGeoLib/blob/2940b99b99cfe575dd45103ef20f4019dee15b54/src/Geometry/Sphere.cpp#L649-L671\n\n\t\t_toPoint.subVectors( point, this.center );\n\n\t\tconst lengthSq = _toPoint.lengthSq();\n\n\t\tif ( lengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\tconst length = Math.sqrt( lengthSq );\n\t\t\tconst missingRadiusHalf = ( length - this.radius ) * 0.5;\n\n\t\t\t// Nudge this sphere towards the target point. Add half the missing distance to radius,\n\t\t\t// and the other half to position. This gives a tighter enclosure, instead of if\n\t\t\t// the whole missing distance were just added to radius.\n\n\t\t\tthis.center.add( _toPoint.multiplyScalar( missingRadiusHalf / length ) );\n\t\t\tthis.radius += missingRadiusHalf;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tunion( sphere ) {\n\n\t\t// from https://github.com/juj/MathGeoLib/blob/2940b99b99cfe575dd45103ef20f4019dee15b54/src/Geometry/Sphere.cpp#L759-L769\n\n\t\t// To enclose another sphere into this sphere, we only need to enclose two points:\n\t\t// 1) Enclose the farthest point on the other sphere into this sphere.\n\t\t// 2) Enclose the opposite point of the farthest point into this sphere.\n\n\t\t_toFarthestPoint.subVectors( sphere.center, this.center ).normalize().multiplyScalar( sphere.radius );\n\n\t\tthis.expandByPoint( _v1$6.copy( sphere.center ).add( _toFarthestPoint ) );\n\t\tthis.expandByPoint( _v1$6.copy( sphere.center ).sub( _toFarthestPoint ) );\n\n\t\treturn this;\n\n\t}\n\n\tequals( sphere ) {\n\n\t\treturn sphere.center.equals( this.center ) && ( sphere.radius === this.radius );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _vector$a = /*@__PURE__*/ new Vector3();\nconst _segCenter = /*@__PURE__*/ new Vector3();\nconst _segDir = /*@__PURE__*/ new Vector3();\nconst _diff = /*@__PURE__*/ new Vector3();\n\nconst _edge1 = /*@__PURE__*/ new Vector3();\nconst _edge2 = /*@__PURE__*/ new Vector3();\nconst _normal$1 = /*@__PURE__*/ new Vector3();\n\nclass Ray {\n\n\tconstructor( origin = new Vector3(), direction = new Vector3( 0, 0, - 1 ) ) {\n\n\t\tthis.origin = origin;\n\t\tthis.direction = direction;\n\n\t}\n\n\tset( origin, direction ) {\n\n\t\tthis.origin.copy( origin );\n\t\tthis.direction.copy( direction );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( ray ) {\n\n\t\tthis.origin.copy( ray.origin );\n\t\tthis.direction.copy( ray.direction );\n\n\t\treturn this;\n\n\t}\n\n\tat( t, target ) {\n\n\t\treturn target.copy( this.direction ).multiplyScalar( t ).add( this.origin );\n\n\t}\n\n\tlookAt( v ) {\n\n\t\tthis.direction.copy( v ).sub( this.origin ).normalize();\n\n\t\treturn this;\n\n\t}\n\n\trecast( t ) {\n\n\t\tthis.origin.copy( this.at( t, _vector$a ) );\n\n\t\treturn this;\n\n\t}\n\n\tclosestPointToPoint( point, target ) {\n\n\t\ttarget.subVectors( point, this.origin );\n\n\t\tconst directionDistance = target.dot( this.direction );\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn target.copy( this.origin );\n\n\t\t}\n\n\t\treturn target.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn Math.sqrt( this.distanceSqToPoint( point ) );\n\n\t}\n\n\tdistanceSqToPoint( point ) {\n\n\t\tconst directionDistance = _vector$a.subVectors( point, this.origin ).dot( this.direction );\n\n\t\t// point behind the ray\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn this.origin.distanceToSquared( point );\n\n\t\t}\n\n\t\t_vector$a.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t\treturn _vector$a.distanceToSquared( point );\n\n\t}\n\n\tdistanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) {\n\n\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteDistRaySegment.h\n\t\t// It returns the min distance between the ray and the segment\n\t\t// defined by v0 and v1\n\t\t// It can also set two optional targets :\n\t\t// - The closest point on the ray\n\t\t// - The closest point on the segment\n\n\t\t_segCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 );\n\t\t_segDir.copy( v1 ).sub( v0 ).normalize();\n\t\t_diff.copy( this.origin ).sub( _segCenter );\n\n\t\tconst segExtent = v0.distanceTo( v1 ) * 0.5;\n\t\tconst a01 = - this.direction.dot( _segDir );\n\t\tconst b0 = _diff.dot( this.direction );\n\t\tconst b1 = - _diff.dot( _segDir );\n\t\tconst c = _diff.lengthSq();\n\t\tconst det = Math.abs( 1 - a01 * a01 );\n\t\tlet s0, s1, sqrDist, extDet;\n\n\t\tif ( det > 0 ) {\n\n\t\t\t// The ray and segment are not parallel.\n\n\t\t\ts0 = a01 * b1 - b0;\n\t\t\ts1 = a01 * b0 - b1;\n\t\t\textDet = segExtent * det;\n\n\t\t\tif ( s0 >= 0 ) {\n\n\t\t\t\tif ( s1 >= - extDet ) {\n\n\t\t\t\t\tif ( s1 <= extDet ) {\n\n\t\t\t\t\t\t// region 0\n\t\t\t\t\t\t// Minimum at interior points of ray and segment.\n\n\t\t\t\t\t\tconst invDet = 1 / det;\n\t\t\t\t\t\ts0 *= invDet;\n\t\t\t\t\t\ts1 *= invDet;\n\t\t\t\t\t\tsqrDist = s0 * ( s0 + a01 * s1 + 2 * b0 ) + s1 * ( a01 * s0 + s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// region 1\n\n\t\t\t\t\t\ts1 = segExtent;\n\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// region 5\n\n\t\t\t\t\ts1 = - segExtent;\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( s1 <= - extDet ) {\n\n\t\t\t\t\t// region 4\n\n\t\t\t\t\ts0 = Math.max( 0, - ( - a01 * segExtent + b0 ) );\n\t\t\t\t\ts1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t} else if ( s1 <= extDet ) {\n\n\t\t\t\t\t// region 3\n\n\t\t\t\t\ts0 = 0;\n\t\t\t\t\ts1 = Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// region 2\n\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * segExtent + b0 ) );\n\t\t\t\t\ts1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Ray and segment are parallel.\n\n\t\t\ts1 = ( a01 > 0 ) ? - segExtent : segExtent;\n\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t}\n\n\t\tif ( optionalPointOnRay ) {\n\n\t\t\toptionalPointOnRay.copy( this.direction ).multiplyScalar( s0 ).add( this.origin );\n\n\t\t}\n\n\t\tif ( optionalPointOnSegment ) {\n\n\t\t\toptionalPointOnSegment.copy( _segDir ).multiplyScalar( s1 ).add( _segCenter );\n\n\t\t}\n\n\t\treturn sqrDist;\n\n\t}\n\n\tintersectSphere( sphere, target ) {\n\n\t\t_vector$a.subVectors( sphere.center, this.origin );\n\t\tconst tca = _vector$a.dot( this.direction );\n\t\tconst d2 = _vector$a.dot( _vector$a ) - tca * tca;\n\t\tconst radius2 = sphere.radius * sphere.radius;\n\n\t\tif ( d2 > radius2 ) return null;\n\n\t\tconst thc = Math.sqrt( radius2 - d2 );\n\n\t\t// t0 = first intersect point - entrance on front of sphere\n\t\tconst t0 = tca - thc;\n\n\t\t// t1 = second intersect point - exit point on back of sphere\n\t\tconst t1 = tca + thc;\n\n\t\t// test to see if both t0 and t1 are behind the ray - if so, return null\n\t\tif ( t0 < 0 && t1 < 0 ) return null;\n\n\t\t// test to see if t0 is behind the ray:\n\t\t// if it is, the ray is inside the sphere, so return the second exit point scaled by t1,\n\t\t// in order to always return an intersect point that is in front of the ray.\n\t\tif ( t0 < 0 ) return this.at( t1, target );\n\n\t\t// else t0 is in front of the ray, so return the first collision point scaled by t0\n\t\treturn this.at( t0, target );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn this.distanceSqToPoint( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\tdistanceToPlane( plane ) {\n\n\t\tconst denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( plane.distanceToPoint( this.origin ) === 0 ) {\n\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t\t// Null is preferable to undefined since undefined means.... it is undefined\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst t = - ( this.origin.dot( plane.normal ) + plane.constant ) / denominator;\n\n\t\t// Return if the ray never intersects the plane\n\n\t\treturn t >= 0 ? t : null;\n\n\t}\n\n\tintersectPlane( plane, target ) {\n\n\t\tconst t = this.distanceToPlane( plane );\n\n\t\tif ( t === null ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn this.at( t, target );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\t// check if the ray lies on the plane first\n\n\t\tconst distToPoint = plane.distanceToPoint( this.origin );\n\n\t\tif ( distToPoint === 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tconst denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator * distToPoint < 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\t// ray origin is behind the plane (and is pointing behind it)\n\n\t\treturn false;\n\n\t}\n\n\tintersectBox( box, target ) {\n\n\t\tlet tmin, tmax, tymin, tymax, tzmin, tzmax;\n\n\t\tconst invdirx = 1 / this.direction.x,\n\t\t\tinvdiry = 1 / this.direction.y,\n\t\t\tinvdirz = 1 / this.direction.z;\n\n\t\tconst origin = this.origin;\n\n\t\tif ( invdirx >= 0 ) {\n\n\t\t\ttmin = ( box.min.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.max.x - origin.x ) * invdirx;\n\n\t\t} else {\n\n\t\t\ttmin = ( box.max.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.min.x - origin.x ) * invdirx;\n\n\t\t}\n\n\t\tif ( invdiry >= 0 ) {\n\n\t\t\ttymin = ( box.min.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.max.y - origin.y ) * invdiry;\n\n\t\t} else {\n\n\t\t\ttymin = ( box.max.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.min.y - origin.y ) * invdiry;\n\n\t\t}\n\n\t\tif ( ( tmin > tymax ) || ( tymin > tmax ) ) return null;\n\n\t\t// These lines also handle the case where tmin or tmax is NaN\n\t\t// (result of 0 * Infinity). x !== x returns true if x is NaN\n\n\t\tif ( tymin > tmin || tmin !== tmin ) tmin = tymin;\n\n\t\tif ( tymax < tmax || tmax !== tmax ) tmax = tymax;\n\n\t\tif ( invdirz >= 0 ) {\n\n\t\t\ttzmin = ( box.min.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.max.z - origin.z ) * invdirz;\n\n\t\t} else {\n\n\t\t\ttzmin = ( box.max.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.min.z - origin.z ) * invdirz;\n\n\t\t}\n\n\t\tif ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return null;\n\n\t\tif ( tzmin > tmin || tmin !== tmin ) tmin = tzmin;\n\n\t\tif ( tzmax < tmax || tmax !== tmax ) tmax = tzmax;\n\n\t\t//return point closest to the ray (positive side)\n\n\t\tif ( tmax < 0 ) return null;\n\n\t\treturn this.at( tmin >= 0 ? tmin : tmax, target );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn this.intersectBox( box, _vector$a ) !== null;\n\n\t}\n\n\tintersectTriangle( a, b, c, backfaceCulling, target ) {\n\n\t\t// Compute the offset origin, edges, and normal.\n\n\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h\n\n\t\t_edge1.subVectors( b, a );\n\t\t_edge2.subVectors( c, a );\n\t\t_normal$1.crossVectors( _edge1, _edge2 );\n\n\t\t// Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,\n\t\t// E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by\n\t\t// |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))\n\t\t// |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))\n\t\t// |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)\n\t\tlet DdN = this.direction.dot( _normal$1 );\n\t\tlet sign;\n\n\t\tif ( DdN > 0 ) {\n\n\t\t\tif ( backfaceCulling ) return null;\n\t\t\tsign = 1;\n\n\t\t} else if ( DdN < 0 ) {\n\n\t\t\tsign = - 1;\n\t\t\tDdN = - DdN;\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t_diff.subVectors( this.origin, a );\n\t\tconst DdQxE2 = sign * this.direction.dot( _edge2.crossVectors( _diff, _edge2 ) );\n\n\t\t// b1 < 0, no intersection\n\t\tif ( DdQxE2 < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst DdE1xQ = sign * this.direction.dot( _edge1.cross( _diff ) );\n\n\t\t// b2 < 0, no intersection\n\t\tif ( DdE1xQ < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// b1+b2 > 1, no intersection\n\t\tif ( DdQxE2 + DdE1xQ > DdN ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// Line intersects triangle, check if ray does.\n\t\tconst QdN = - sign * _diff.dot( _normal$1 );\n\n\t\t// t < 0, no intersection\n\t\tif ( QdN < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// Ray intersects triangle.\n\t\treturn this.at( QdN / DdN, target );\n\n\t}\n\n\tapplyMatrix4( matrix4 ) {\n\n\t\tthis.origin.applyMatrix4( matrix4 );\n\t\tthis.direction.transformDirection( matrix4 );\n\n\t\treturn this;\n\n\t}\n\n\tequals( ray ) {\n\n\t\treturn ray.origin.equals( this.origin ) && ray.direction.equals( this.direction );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nclass Matrix4 {\n\n\tconstructor() {\n\n\t\tthis.elements = [\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t];\n\n\t\tif ( arguments.length > 0 ) {\n\n\t\t\tconsole.error( 'THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.' );\n\n\t\t}\n\n\t}\n\n\tset( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 4 ] = n12; te[ 8 ] = n13; te[ 12 ] = n14;\n\t\tte[ 1 ] = n21; te[ 5 ] = n22; te[ 9 ] = n23; te[ 13 ] = n24;\n\t\tte[ 2 ] = n31; te[ 6 ] = n32; te[ 10 ] = n33; te[ 14 ] = n34;\n\t\tte[ 3 ] = n41; te[ 7 ] = n42; te[ 11 ] = n43; te[ 15 ] = n44;\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Matrix4().fromArray( this.elements );\n\n\t}\n\n\tcopy( m ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; te[ 3 ] = me[ 3 ];\n\t\tte[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ];\n\t\tte[ 8 ] = me[ 8 ]; te[ 9 ] = me[ 9 ]; te[ 10 ] = me[ 10 ]; te[ 11 ] = me[ 11 ];\n\t\tte[ 12 ] = me[ 12 ]; te[ 13 ] = me[ 13 ]; te[ 14 ] = me[ 14 ]; te[ 15 ] = me[ 15 ];\n\n\t\treturn this;\n\n\t}\n\n\tcopyPosition( m ) {\n\n\t\tconst te = this.elements, me = m.elements;\n\n\t\tte[ 12 ] = me[ 12 ];\n\t\tte[ 13 ] = me[ 13 ];\n\t\tte[ 14 ] = me[ 14 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrix3( m ) {\n\n\t\tconst me = m.elements;\n\n\t\tthis.set(\n\n\t\t\tme[ 0 ], me[ 3 ], me[ 6 ], 0,\n\t\t\tme[ 1 ], me[ 4 ], me[ 7 ], 0,\n\t\t\tme[ 2 ], me[ 5 ], me[ 8 ], 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\textractBasis( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrixColumn( this, 0 );\n\t\tyAxis.setFromMatrixColumn( this, 1 );\n\t\tzAxis.setFromMatrixColumn( this, 2 );\n\n\t\treturn this;\n\n\t}\n\n\tmakeBasis( xAxis, yAxis, zAxis ) {\n\n\t\tthis.set(\n\t\t\txAxis.x, yAxis.x, zAxis.x, 0,\n\t\t\txAxis.y, yAxis.y, zAxis.y, 0,\n\t\t\txAxis.z, yAxis.z, zAxis.z, 0,\n\t\t\t0, 0, 0, 1\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\textractRotation( m ) {\n\n\t\t// this method does not support reflection matrices\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tconst scaleX = 1 / _v1$5.setFromMatrixColumn( m, 0 ).length();\n\t\tconst scaleY = 1 / _v1$5.setFromMatrixColumn( m, 1 ).length();\n\t\tconst scaleZ = 1 / _v1$5.setFromMatrixColumn( m, 2 ).length();\n\n\t\tte[ 0 ] = me[ 0 ] * scaleX;\n\t\tte[ 1 ] = me[ 1 ] * scaleX;\n\t\tte[ 2 ] = me[ 2 ] * scaleX;\n\t\tte[ 3 ] = 0;\n\n\t\tte[ 4 ] = me[ 4 ] * scaleY;\n\t\tte[ 5 ] = me[ 5 ] * scaleY;\n\t\tte[ 6 ] = me[ 6 ] * scaleY;\n\t\tte[ 7 ] = 0;\n\n\t\tte[ 8 ] = me[ 8 ] * scaleZ;\n\t\tte[ 9 ] = me[ 9 ] * scaleZ;\n\t\tte[ 10 ] = me[ 10 ] * scaleZ;\n\t\tte[ 11 ] = 0;\n\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationFromEuler( euler ) {\n\n\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\tconsole.error( 'THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.' );\n\n\t\t}\n\n\t\tconst te = this.elements;\n\n\t\tconst x = euler.x, y = euler.y, z = euler.z;\n\t\tconst a = Math.cos( x ), b = Math.sin( x );\n\t\tconst c = Math.cos( y ), d = Math.sin( y );\n\t\tconst e = Math.cos( z ), f = Math.sin( z );\n\n\t\tif ( euler.order === 'XYZ' ) {\n\n\t\t\tconst ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - c * f;\n\t\t\tte[ 8 ] = d;\n\n\t\t\tte[ 1 ] = af + be * d;\n\t\t\tte[ 5 ] = ae - bf * d;\n\t\t\tte[ 9 ] = - b * c;\n\n\t\t\tte[ 2 ] = bf - ae * d;\n\t\t\tte[ 6 ] = be + af * d;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YXZ' ) {\n\n\t\t\tconst ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce + df * b;\n\t\t\tte[ 4 ] = de * b - cf;\n\t\t\tte[ 8 ] = a * d;\n\n\t\t\tte[ 1 ] = a * f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b;\n\n\t\t\tte[ 2 ] = cf * b - de;\n\t\t\tte[ 6 ] = df + ce * b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZXY' ) {\n\n\t\t\tconst ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce - df * b;\n\t\t\tte[ 4 ] = - a * f;\n\t\t\tte[ 8 ] = de + cf * b;\n\n\t\t\tte[ 1 ] = cf + de * b;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = df - ce * b;\n\n\t\t\tte[ 2 ] = - a * d;\n\t\t\tte[ 6 ] = b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZYX' ) {\n\n\t\t\tconst ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = be * d - af;\n\t\t\tte[ 8 ] = ae * d + bf;\n\n\t\t\tte[ 1 ] = c * f;\n\t\t\tte[ 5 ] = bf * d + ae;\n\t\t\tte[ 9 ] = af * d - be;\n\n\t\t\tte[ 2 ] = - d;\n\t\t\tte[ 6 ] = b * c;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YZX' ) {\n\n\t\t\tconst ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = bd - ac * f;\n\t\t\tte[ 8 ] = bc * f + ad;\n\n\t\t\tte[ 1 ] = f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b * e;\n\n\t\t\tte[ 2 ] = - d * e;\n\t\t\tte[ 6 ] = ad * f + bc;\n\t\t\tte[ 10 ] = ac - bd * f;\n\n\t\t} else if ( euler.order === 'XZY' ) {\n\n\t\t\tconst ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - f;\n\t\t\tte[ 8 ] = d * e;\n\n\t\t\tte[ 1 ] = ac * f + bd;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = ad * f - bc;\n\n\t\t\tte[ 2 ] = bc * f - ad;\n\t\t\tte[ 6 ] = b * e;\n\t\t\tte[ 10 ] = bd * f + ac;\n\n\t\t}\n\n\t\t// bottom row\n\t\tte[ 3 ] = 0;\n\t\tte[ 7 ] = 0;\n\t\tte[ 11 ] = 0;\n\n\t\t// last column\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationFromQuaternion( q ) {\n\n\t\treturn this.compose( _zero, q, _one );\n\n\t}\n\n\tlookAt( eye, target, up ) {\n\n\t\tconst te = this.elements;\n\n\t\t_z.subVectors( eye, target );\n\n\t\tif ( _z.lengthSq() === 0 ) {\n\n\t\t\t// eye and target are in the same position\n\n\t\t\t_z.z = 1;\n\n\t\t}\n\n\t\t_z.normalize();\n\t\t_x.crossVectors( up, _z );\n\n\t\tif ( _x.lengthSq() === 0 ) {\n\n\t\t\t// up and z are parallel\n\n\t\t\tif ( Math.abs( up.z ) === 1 ) {\n\n\t\t\t\t_z.x += 0.0001;\n\n\t\t\t} else {\n\n\t\t\t\t_z.z += 0.0001;\n\n\t\t\t}\n\n\t\t\t_z.normalize();\n\t\t\t_x.crossVectors( up, _z );\n\n\t\t}\n\n\t\t_x.normalize();\n\t\t_y.crossVectors( _z, _x );\n\n\t\tte[ 0 ] = _x.x; te[ 4 ] = _y.x; te[ 8 ] = _z.x;\n\t\tte[ 1 ] = _x.y; te[ 5 ] = _y.y; te[ 9 ] = _z.y;\n\t\tte[ 2 ] = _x.z; te[ 6 ] = _y.z; te[ 10 ] = _z.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( m, n ) {\n\n\t\tif ( n !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.' );\n\t\t\treturn this.multiplyMatrices( m, n );\n\n\t\t}\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t}\n\n\tpremultiply( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t}\n\n\tmultiplyMatrices( a, b ) {\n\n\t\tconst ae = a.elements;\n\t\tconst be = b.elements;\n\t\tconst te = this.elements;\n\n\t\tconst a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ];\n\t\tconst a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ];\n\t\tconst a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ];\n\t\tconst a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ];\n\n\t\tconst b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ];\n\t\tconst b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ];\n\t\tconst b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ];\n\t\tconst b41 = be[ 3 ], b42 = be[ 7 ], b43 = be[ 11 ], b44 = be[ 15 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\n\t\tte[ 4 ] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\n\t\tte[ 8 ] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\n\t\tte[ 12 ] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\n\t\tte[ 5 ] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\n\t\tte[ 9 ] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\n\t\tte[ 13 ] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\n\t\tte[ 6 ] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\n\t\tte[ 10 ] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\n\t\tte[ 14 ] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\n\n\t\tte[ 3 ] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\n\t\tte[ 7 ] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\n\t\tte[ 11 ] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\n\t\tte[ 15 ] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 4 ] *= s; te[ 8 ] *= s; te[ 12 ] *= s;\n\t\tte[ 1 ] *= s; te[ 5 ] *= s; te[ 9 ] *= s; te[ 13 ] *= s;\n\t\tte[ 2 ] *= s; te[ 6 ] *= s; te[ 10 ] *= s; te[ 14 ] *= s;\n\t\tte[ 3 ] *= s; te[ 7 ] *= s; te[ 11 ] *= s; te[ 15 ] *= s;\n\n\t\treturn this;\n\n\t}\n\n\tdeterminant() {\n\n\t\tconst te = this.elements;\n\n\t\tconst n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ];\n\t\tconst n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ];\n\t\tconst n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ];\n\t\tconst n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ];\n\n\t\t//TODO: make this more efficient\n\t\t//( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )\n\n\t\treturn (\n\t\t\tn41 * (\n\t\t\t\t+ n14 * n23 * n32\n\t\t\t\t - n13 * n24 * n32\n\t\t\t\t - n14 * n22 * n33\n\t\t\t\t + n12 * n24 * n33\n\t\t\t\t + n13 * n22 * n34\n\t\t\t\t - n12 * n23 * n34\n\t\t\t) +\n\t\t\tn42 * (\n\t\t\t\t+ n11 * n23 * n34\n\t\t\t\t - n11 * n24 * n33\n\t\t\t\t + n14 * n21 * n33\n\t\t\t\t - n13 * n21 * n34\n\t\t\t\t + n13 * n24 * n31\n\t\t\t\t - n14 * n23 * n31\n\t\t\t) +\n\t\t\tn43 * (\n\t\t\t\t+ n11 * n24 * n32\n\t\t\t\t - n11 * n22 * n34\n\t\t\t\t - n14 * n21 * n32\n\t\t\t\t + n12 * n21 * n34\n\t\t\t\t + n14 * n22 * n31\n\t\t\t\t - n12 * n24 * n31\n\t\t\t) +\n\t\t\tn44 * (\n\t\t\t\t- n13 * n22 * n31\n\t\t\t\t - n11 * n23 * n32\n\t\t\t\t + n11 * n22 * n33\n\t\t\t\t + n13 * n21 * n32\n\t\t\t\t - n12 * n21 * n33\n\t\t\t\t + n12 * n23 * n31\n\t\t\t)\n\n\t\t);\n\n\t}\n\n\ttranspose() {\n\n\t\tconst te = this.elements;\n\t\tlet tmp;\n\n\t\ttmp = te[ 1 ]; te[ 1 ] = te[ 4 ]; te[ 4 ] = tmp;\n\t\ttmp = te[ 2 ]; te[ 2 ] = te[ 8 ]; te[ 8 ] = tmp;\n\t\ttmp = te[ 6 ]; te[ 6 ] = te[ 9 ]; te[ 9 ] = tmp;\n\n\t\ttmp = te[ 3 ]; te[ 3 ] = te[ 12 ]; te[ 12 ] = tmp;\n\t\ttmp = te[ 7 ]; te[ 7 ] = te[ 13 ]; te[ 13 ] = tmp;\n\t\ttmp = te[ 11 ]; te[ 11 ] = te[ 14 ]; te[ 14 ] = tmp;\n\n\t\treturn this;\n\n\t}\n\n\tsetPosition( x, y, z ) {\n\n\t\tconst te = this.elements;\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\tte[ 12 ] = x.x;\n\t\t\tte[ 13 ] = x.y;\n\t\t\tte[ 14 ] = x.z;\n\n\t\t} else {\n\n\t\t\tte[ 12 ] = x;\n\t\t\tte[ 13 ] = y;\n\t\t\tte[ 14 ] = z;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tinvert() {\n\n\t\t// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\n\t\tconst te = this.elements,\n\n\t\t\tn11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ], n41 = te[ 3 ],\n\t\t\tn12 = te[ 4 ], n22 = te[ 5 ], n32 = te[ 6 ], n42 = te[ 7 ],\n\t\t\tn13 = te[ 8 ], n23 = te[ 9 ], n33 = te[ 10 ], n43 = te[ 11 ],\n\t\t\tn14 = te[ 12 ], n24 = te[ 13 ], n34 = te[ 14 ], n44 = te[ 15 ],\n\n\t\t\tt11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44,\n\t\t\tt12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44,\n\t\t\tt13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44,\n\t\t\tt14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;\n\n\t\tconst det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n\n\t\tif ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );\n\n\t\tconst detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44 ) * detInv;\n\t\tte[ 2 ] = ( n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44 ) * detInv;\n\t\tte[ 3 ] = ( n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43 ) * detInv;\n\n\t\tte[ 4 ] = t12 * detInv;\n\t\tte[ 5 ] = ( n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44 ) * detInv;\n\t\tte[ 6 ] = ( n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44 ) * detInv;\n\t\tte[ 7 ] = ( n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43 ) * detInv;\n\n\t\tte[ 8 ] = t13 * detInv;\n\t\tte[ 9 ] = ( n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44 ) * detInv;\n\t\tte[ 10 ] = ( n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44 ) * detInv;\n\t\tte[ 11 ] = ( n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43 ) * detInv;\n\n\t\tte[ 12 ] = t14 * detInv;\n\t\tte[ 13 ] = ( n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34 ) * detInv;\n\t\tte[ 14 ] = ( n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34 ) * detInv;\n\t\tte[ 15 ] = ( n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33 ) * detInv;\n\n\t\treturn this;\n\n\t}\n\n\tscale( v ) {\n\n\t\tconst te = this.elements;\n\t\tconst x = v.x, y = v.y, z = v.z;\n\n\t\tte[ 0 ] *= x; te[ 4 ] *= y; te[ 8 ] *= z;\n\t\tte[ 1 ] *= x; te[ 5 ] *= y; te[ 9 ] *= z;\n\t\tte[ 2 ] *= x; te[ 6 ] *= y; te[ 10 ] *= z;\n\t\tte[ 3 ] *= x; te[ 7 ] *= y; te[ 11 ] *= z;\n\n\t\treturn this;\n\n\t}\n\n\tgetMaxScaleOnAxis() {\n\n\t\tconst te = this.elements;\n\n\t\tconst scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ];\n\t\tconst scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ];\n\t\tconst scaleZSq = te[ 8 ] * te[ 8 ] + te[ 9 ] * te[ 9 ] + te[ 10 ] * te[ 10 ];\n\n\t\treturn Math.sqrt( Math.max( scaleXSq, scaleYSq, scaleZSq ) );\n\n\t}\n\n\tmakeTranslation( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, x,\n\t\t\t0, 1, 0, y,\n\t\t\t0, 0, 1, z,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationX( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, c, - s, 0,\n\t\t\t0, s, c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationY( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t c, 0, s, 0,\n\t\t\t 0, 1, 0, 0,\n\t\t\t- s, 0, c, 0,\n\t\t\t 0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationZ( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\tc, - s, 0, 0,\n\t\t\ts, c, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationAxis( axis, angle ) {\n\n\t\t// Based on http://www.gamedev.net/reference/articles/article1199.asp\n\n\t\tconst c = Math.cos( angle );\n\t\tconst s = Math.sin( angle );\n\t\tconst t = 1 - c;\n\t\tconst x = axis.x, y = axis.y, z = axis.z;\n\t\tconst tx = t * x, ty = t * y;\n\n\t\tthis.set(\n\n\t\t\ttx * x + c, tx * y - s * z, tx * z + s * y, 0,\n\t\t\ttx * y + s * z, ty * y + c, ty * z - s * x, 0,\n\t\t\ttx * z - s * y, ty * z + s * x, t * z * z + c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeScale( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\tx, 0, 0, 0,\n\t\t\t0, y, 0, 0,\n\t\t\t0, 0, z, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeShear( xy, xz, yx, yz, zx, zy ) {\n\n\t\tthis.set(\n\n\t\t\t1, yx, zx, 0,\n\t\t\txy, 1, zy, 0,\n\t\t\txz, yz, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tcompose( position, quaternion, scale ) {\n\n\t\tconst te = this.elements;\n\n\t\tconst x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w;\n\t\tconst x2 = x + x,\ty2 = y + y, z2 = z + z;\n\t\tconst xx = x * x2, xy = x * y2, xz = x * z2;\n\t\tconst yy = y * y2, yz = y * z2, zz = z * z2;\n\t\tconst wx = w * x2, wy = w * y2, wz = w * z2;\n\n\t\tconst sx = scale.x, sy = scale.y, sz = scale.z;\n\n\t\tte[ 0 ] = ( 1 - ( yy + zz ) ) * sx;\n\t\tte[ 1 ] = ( xy + wz ) * sx;\n\t\tte[ 2 ] = ( xz - wy ) * sx;\n\t\tte[ 3 ] = 0;\n\n\t\tte[ 4 ] = ( xy - wz ) * sy;\n\t\tte[ 5 ] = ( 1 - ( xx + zz ) ) * sy;\n\t\tte[ 6 ] = ( yz + wx ) * sy;\n\t\tte[ 7 ] = 0;\n\n\t\tte[ 8 ] = ( xz + wy ) * sz;\n\t\tte[ 9 ] = ( yz - wx ) * sz;\n\t\tte[ 10 ] = ( 1 - ( xx + yy ) ) * sz;\n\t\tte[ 11 ] = 0;\n\n\t\tte[ 12 ] = position.x;\n\t\tte[ 13 ] = position.y;\n\t\tte[ 14 ] = position.z;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tdecompose( position, quaternion, scale ) {\n\n\t\tconst te = this.elements;\n\n\t\tlet sx = _v1$5.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length();\n\t\tconst sy = _v1$5.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length();\n\t\tconst sz = _v1$5.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length();\n\n\t\t// if determine is negative, we need to invert one scale\n\t\tconst det = this.determinant();\n\t\tif ( det < 0 ) sx = - sx;\n\n\t\tposition.x = te[ 12 ];\n\t\tposition.y = te[ 13 ];\n\t\tposition.z = te[ 14 ];\n\n\t\t// scale the rotation part\n\t\t_m1$2.copy( this );\n\n\t\tconst invSX = 1 / sx;\n\t\tconst invSY = 1 / sy;\n\t\tconst invSZ = 1 / sz;\n\n\t\t_m1$2.elements[ 0 ] *= invSX;\n\t\t_m1$2.elements[ 1 ] *= invSX;\n\t\t_m1$2.elements[ 2 ] *= invSX;\n\n\t\t_m1$2.elements[ 4 ] *= invSY;\n\t\t_m1$2.elements[ 5 ] *= invSY;\n\t\t_m1$2.elements[ 6 ] *= invSY;\n\n\t\t_m1$2.elements[ 8 ] *= invSZ;\n\t\t_m1$2.elements[ 9 ] *= invSZ;\n\t\t_m1$2.elements[ 10 ] *= invSZ;\n\n\t\tquaternion.setFromRotationMatrix( _m1$2 );\n\n\t\tscale.x = sx;\n\t\tscale.y = sy;\n\t\tscale.z = sz;\n\n\t\treturn this;\n\n\t}\n\n\tmakePerspective( left, right, top, bottom, near, far ) {\n\n\t\tif ( far === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.' );\n\n\t\t}\n\n\t\tconst te = this.elements;\n\t\tconst x = 2 * near / ( right - left );\n\t\tconst y = 2 * near / ( top - bottom );\n\n\t\tconst a = ( right + left ) / ( right - left );\n\t\tconst b = ( top + bottom ) / ( top - bottom );\n\t\tconst c = - ( far + near ) / ( far - near );\n\t\tconst d = - 2 * far * near / ( far - near );\n\n\t\tte[ 0 ] = x;\tte[ 4 ] = 0;\tte[ 8 ] = a;\tte[ 12 ] = 0;\n\t\tte[ 1 ] = 0;\tte[ 5 ] = y;\tte[ 9 ] = b;\tte[ 13 ] = 0;\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = c;\tte[ 14 ] = d;\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = - 1;\tte[ 15 ] = 0;\n\n\t\treturn this;\n\n\t}\n\n\tmakeOrthographic( left, right, top, bottom, near, far ) {\n\n\t\tconst te = this.elements;\n\t\tconst w = 1.0 / ( right - left );\n\t\tconst h = 1.0 / ( top - bottom );\n\t\tconst p = 1.0 / ( far - near );\n\n\t\tconst x = ( right + left ) * w;\n\t\tconst y = ( top + bottom ) * h;\n\t\tconst z = ( far + near ) * p;\n\n\t\tte[ 0 ] = 2 * w;\tte[ 4 ] = 0;\tte[ 8 ] = 0;\tte[ 12 ] = - x;\n\t\tte[ 1 ] = 0;\tte[ 5 ] = 2 * h;\tte[ 9 ] = 0;\tte[ 13 ] = - y;\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = - 2 * p;\tte[ 14 ] = - z;\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = 0;\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tequals( matrix ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = matrix.elements;\n\n\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\t\tarray[ offset + 9 ] = te[ 9 ];\n\t\tarray[ offset + 10 ] = te[ 10 ];\n\t\tarray[ offset + 11 ] = te[ 11 ];\n\n\t\tarray[ offset + 12 ] = te[ 12 ];\n\t\tarray[ offset + 13 ] = te[ 13 ];\n\t\tarray[ offset + 14 ] = te[ 14 ];\n\t\tarray[ offset + 15 ] = te[ 15 ];\n\n\t\treturn array;\n\n\t}\n\n}\n\nMatrix4.prototype.isMatrix4 = true;\n\nconst _v1$5 = /*@__PURE__*/ new Vector3();\nconst _m1$2 = /*@__PURE__*/ new Matrix4();\nconst _zero = /*@__PURE__*/ new Vector3( 0, 0, 0 );\nconst _one = /*@__PURE__*/ new Vector3( 1, 1, 1 );\nconst _x = /*@__PURE__*/ new Vector3();\nconst _y = /*@__PURE__*/ new Vector3();\nconst _z = /*@__PURE__*/ new Vector3();\n\nconst _matrix$1 = /*@__PURE__*/ new Matrix4();\nconst _quaternion$3 = /*@__PURE__*/ new Quaternion();\n\nclass Euler {\n\n\tconstructor( x = 0, y = 0, z = 0, order = Euler.DefaultOrder ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order;\n\n\t}\n\n\tget x() {\n\n\t\treturn this._x;\n\n\t}\n\n\tset x( value ) {\n\n\t\tthis._x = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget y() {\n\n\t\treturn this._y;\n\n\t}\n\n\tset y( value ) {\n\n\t\tthis._y = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget z() {\n\n\t\treturn this._z;\n\n\t}\n\n\tset z( value ) {\n\n\t\tthis._z = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget order() {\n\n\t\treturn this._order;\n\n\t}\n\n\tset order( value ) {\n\n\t\tthis._order = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tset( x, y, z, order = this._order ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._order );\n\n\t}\n\n\tcopy( euler ) {\n\n\t\tthis._x = euler._x;\n\t\tthis._y = euler._y;\n\t\tthis._z = euler._z;\n\t\tthis._order = euler._order;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromRotationMatrix( m, order = this._order, update = true ) {\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tconst te = m.elements;\n\t\tconst m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ];\n\t\tconst m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ];\n\t\tconst m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYZ':\n\n\t\t\t\tthis._y = Math.asin( clamp( m13, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m13 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\tthis._z = Math.atan2( - m12, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXZ':\n\n\t\t\t\tthis._x = Math.asin( - clamp( m23, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m23 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\t\t\t\t\tthis._z = Math.atan2( m21, m22 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXY':\n\n\t\t\t\tthis._x = Math.asin( clamp( m32, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m32 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._y = Math.atan2( - m31, m33 );\n\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._y = 0;\n\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYX':\n\n\t\t\t\tthis._y = Math.asin( - clamp( m31, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m31 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m33 );\n\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZX':\n\n\t\t\t\tthis._z = Math.asin( clamp( m21, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m21 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m22 );\n\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZY':\n\n\t\t\t\tthis._z = Math.asin( - clamp( m12, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m12 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\tthis._y = Math.atan2( m13, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\tthis._y = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tconsole.warn( 'THREE.Euler: .setFromRotationMatrix() encountered an unknown order: ' + order );\n\n\t\t}\n\n\t\tthis._order = order;\n\n\t\tif ( update === true ) this._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromQuaternion( q, order, update ) {\n\n\t\t_matrix$1.makeRotationFromQuaternion( q );\n\n\t\treturn this.setFromRotationMatrix( _matrix$1, order, update );\n\n\t}\n\n\tsetFromVector3( v, order = this._order ) {\n\n\t\treturn this.set( v.x, v.y, v.z, order );\n\n\t}\n\n\treorder( newOrder ) {\n\n\t\t// WARNING: this discards revolution information -bhouston\n\n\t\t_quaternion$3.setFromEuler( this );\n\n\t\treturn this.setFromQuaternion( _quaternion$3, newOrder );\n\n\t}\n\n\tequals( euler ) {\n\n\t\treturn ( euler._x === this._x ) && ( euler._y === this._y ) && ( euler._z === this._z ) && ( euler._order === this._order );\n\n\t}\n\n\tfromArray( array ) {\n\n\t\tthis._x = array[ 0 ];\n\t\tthis._y = array[ 1 ];\n\t\tthis._z = array[ 2 ];\n\t\tif ( array[ 3 ] !== undefined ) this._order = array[ 3 ];\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._order;\n\n\t\treturn array;\n\n\t}\n\n\ttoVector3( optionalResult ) {\n\n\t\tif ( optionalResult ) {\n\n\t\t\treturn optionalResult.set( this._x, this._y, this._z );\n\n\t\t} else {\n\n\t\t\treturn new Vector3( this._x, this._y, this._z );\n\n\t\t}\n\n\t}\n\n\t_onChange( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t_onChangeCallback() {}\n\n}\n\nEuler.prototype.isEuler = true;\n\nEuler.DefaultOrder = 'XYZ';\nEuler.RotationOrders = [ 'XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX' ];\n\nclass Layers {\n\n\tconstructor() {\n\n\t\tthis.mask = 1 | 0;\n\n\t}\n\n\tset( channel ) {\n\n\t\tthis.mask = 1 << channel | 0;\n\n\t}\n\n\tenable( channel ) {\n\n\t\tthis.mask |= 1 << channel | 0;\n\n\t}\n\n\tenableAll() {\n\n\t\tthis.mask = 0xffffffff | 0;\n\n\t}\n\n\ttoggle( channel ) {\n\n\t\tthis.mask ^= 1 << channel | 0;\n\n\t}\n\n\tdisable( channel ) {\n\n\t\tthis.mask &= ~ ( 1 << channel | 0 );\n\n\t}\n\n\tdisableAll() {\n\n\t\tthis.mask = 0;\n\n\t}\n\n\ttest( layers ) {\n\n\t\treturn ( this.mask & layers.mask ) !== 0;\n\n\t}\n\n}\n\nlet _object3DId = 0;\n\nconst _v1$4 = /*@__PURE__*/ new Vector3();\nconst _q1 = /*@__PURE__*/ new Quaternion();\nconst _m1$1 = /*@__PURE__*/ new Matrix4();\nconst _target = /*@__PURE__*/ new Vector3();\n\nconst _position$3 = /*@__PURE__*/ new Vector3();\nconst _scale$2 = /*@__PURE__*/ new Vector3();\nconst _quaternion$2 = /*@__PURE__*/ new Quaternion();\n\nconst _xAxis = /*@__PURE__*/ new Vector3( 1, 0, 0 );\nconst _yAxis = /*@__PURE__*/ new Vector3( 0, 1, 0 );\nconst _zAxis = /*@__PURE__*/ new Vector3( 0, 0, 1 );\n\nconst _addedEvent = { type: 'added' };\nconst _removedEvent = { type: 'removed' };\n\nclass Object3D extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tObject.defineProperty( this, 'id', { value: _object3DId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'Object3D';\n\n\t\tthis.parent = null;\n\t\tthis.children = [];\n\n\t\tthis.up = Object3D.DefaultUp.clone();\n\n\t\tconst position = new Vector3();\n\t\tconst rotation = new Euler();\n\t\tconst quaternion = new Quaternion();\n\t\tconst scale = new Vector3( 1, 1, 1 );\n\n\t\tfunction onRotationChange() {\n\n\t\t\tquaternion.setFromEuler( rotation, false );\n\n\t\t}\n\n\t\tfunction onQuaternionChange() {\n\n\t\t\trotation.setFromQuaternion( quaternion, undefined, false );\n\n\t\t}\n\n\t\trotation._onChange( onRotationChange );\n\t\tquaternion._onChange( onQuaternionChange );\n\n\t\tObject.defineProperties( this, {\n\t\t\tposition: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: position\n\t\t\t},\n\t\t\trotation: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: rotation\n\t\t\t},\n\t\t\tquaternion: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: quaternion\n\t\t\t},\n\t\t\tscale: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: scale\n\t\t\t},\n\t\t\tmodelViewMatrix: {\n\t\t\t\tvalue: new Matrix4()\n\t\t\t},\n\t\t\tnormalMatrix: {\n\t\t\t\tvalue: new Matrix3()\n\t\t\t}\n\t\t} );\n\n\t\tthis.matrix = new Matrix4();\n\t\tthis.matrixWorld = new Matrix4();\n\n\t\tthis.matrixAutoUpdate = Object3D.DefaultMatrixAutoUpdate;\n\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\tthis.layers = new Layers();\n\t\tthis.visible = true;\n\n\t\tthis.castShadow = false;\n\t\tthis.receiveShadow = false;\n\n\t\tthis.frustumCulled = true;\n\t\tthis.renderOrder = 0;\n\n\t\tthis.animations = [];\n\n\t\tthis.userData = {};\n\n\t}\n\n\tonBeforeRender( /* renderer, scene, camera, geometry, material, group */ ) {}\n\n\tonAfterRender( /* renderer, scene, camera, geometry, material, group */ ) {}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tthis.matrix.premultiply( matrix );\n\n\t\tthis.matrix.decompose( this.position, this.quaternion, this.scale );\n\n\t}\n\n\tapplyQuaternion( q ) {\n\n\t\tthis.quaternion.premultiply( q );\n\n\t\treturn this;\n\n\t}\n\n\tsetRotationFromAxisAngle( axis, angle ) {\n\n\t\t// assumes axis is normalized\n\n\t\tthis.quaternion.setFromAxisAngle( axis, angle );\n\n\t}\n\n\tsetRotationFromEuler( euler ) {\n\n\t\tthis.quaternion.setFromEuler( euler, true );\n\n\t}\n\n\tsetRotationFromMatrix( m ) {\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tthis.quaternion.setFromRotationMatrix( m );\n\n\t}\n\n\tsetRotationFromQuaternion( q ) {\n\n\t\t// assumes q is normalized\n\n\t\tthis.quaternion.copy( q );\n\n\t}\n\n\trotateOnAxis( axis, angle ) {\n\n\t\t// rotate object on axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\t_q1.setFromAxisAngle( axis, angle );\n\n\t\tthis.quaternion.multiply( _q1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateOnWorldAxis( axis, angle ) {\n\n\t\t// rotate object on axis in world space\n\t\t// axis is assumed to be normalized\n\t\t// method assumes no rotated parent\n\n\t\t_q1.setFromAxisAngle( axis, angle );\n\n\t\tthis.quaternion.premultiply( _q1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateX( angle ) {\n\n\t\treturn this.rotateOnAxis( _xAxis, angle );\n\n\t}\n\n\trotateY( angle ) {\n\n\t\treturn this.rotateOnAxis( _yAxis, angle );\n\n\t}\n\n\trotateZ( angle ) {\n\n\t\treturn this.rotateOnAxis( _zAxis, angle );\n\n\t}\n\n\ttranslateOnAxis( axis, distance ) {\n\n\t\t// translate object by distance along axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\t_v1$4.copy( axis ).applyQuaternion( this.quaternion );\n\n\t\tthis.position.add( _v1$4.multiplyScalar( distance ) );\n\n\t\treturn this;\n\n\t}\n\n\ttranslateX( distance ) {\n\n\t\treturn this.translateOnAxis( _xAxis, distance );\n\n\t}\n\n\ttranslateY( distance ) {\n\n\t\treturn this.translateOnAxis( _yAxis, distance );\n\n\t}\n\n\ttranslateZ( distance ) {\n\n\t\treturn this.translateOnAxis( _zAxis, distance );\n\n\t}\n\n\tlocalToWorld( vector ) {\n\n\t\treturn vector.applyMatrix4( this.matrixWorld );\n\n\t}\n\n\tworldToLocal( vector ) {\n\n\t\treturn vector.applyMatrix4( _m1$1.copy( this.matrixWorld ).invert() );\n\n\t}\n\n\tlookAt( x, y, z ) {\n\n\t\t// This method does not support objects having non-uniformly-scaled parent(s)\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\t_target.copy( x );\n\n\t\t} else {\n\n\t\t\t_target.set( x, y, z );\n\n\t\t}\n\n\t\tconst parent = this.parent;\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\t_position$3.setFromMatrixPosition( this.matrixWorld );\n\n\t\tif ( this.isCamera || this.isLight ) {\n\n\t\t\t_m1$1.lookAt( _position$3, _target, this.up );\n\n\t\t} else {\n\n\t\t\t_m1$1.lookAt( _target, _position$3, this.up );\n\n\t\t}\n\n\t\tthis.quaternion.setFromRotationMatrix( _m1$1 );\n\n\t\tif ( parent ) {\n\n\t\t\t_m1$1.extractRotation( parent.matrixWorld );\n\t\t\t_q1.setFromRotationMatrix( _m1$1 );\n\t\t\tthis.quaternion.premultiply( _q1.invert() );\n\n\t\t}\n\n\t}\n\n\tadd( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( let i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.add( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( object === this ) {\n\n\t\t\tconsole.error( 'THREE.Object3D.add: object can\\'t be added as a child of itself.', object );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( object && object.isObject3D ) {\n\n\t\t\tif ( object.parent !== null ) {\n\n\t\t\t\tobject.parent.remove( object );\n\n\t\t\t}\n\n\t\t\tobject.parent = this;\n\t\t\tthis.children.push( object );\n\n\t\t\tobject.dispatchEvent( _addedEvent );\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Object3D.add: object not an instance of THREE.Object3D.', object );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tremove( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( let i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.remove( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst index = this.children.indexOf( object );\n\n\t\tif ( index !== - 1 ) {\n\n\t\t\tobject.parent = null;\n\t\t\tthis.children.splice( index, 1 );\n\n\t\t\tobject.dispatchEvent( _removedEvent );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tremoveFromParent() {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tparent.remove( this );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclear() {\n\n\t\tfor ( let i = 0; i < this.children.length; i ++ ) {\n\n\t\t\tconst object = this.children[ i ];\n\n\t\t\tobject.parent = null;\n\n\t\t\tobject.dispatchEvent( _removedEvent );\n\n\t\t}\n\n\t\tthis.children.length = 0;\n\n\t\treturn this;\n\n\n\t}\n\n\tattach( object ) {\n\n\t\t// adds object as a child of this, while maintaining the object's world transform\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\t_m1$1.copy( this.matrixWorld ).invert();\n\n\t\tif ( object.parent !== null ) {\n\n\t\t\tobject.parent.updateWorldMatrix( true, false );\n\n\t\t\t_m1$1.multiply( object.parent.matrixWorld );\n\n\t\t}\n\n\t\tobject.applyMatrix4( _m1$1 );\n\n\t\tthis.add( object );\n\n\t\tobject.updateWorldMatrix( false, true );\n\n\t\treturn this;\n\n\t}\n\n\tgetObjectById( id ) {\n\n\t\treturn this.getObjectByProperty( 'id', id );\n\n\t}\n\n\tgetObjectByName( name ) {\n\n\t\treturn this.getObjectByProperty( 'name', name );\n\n\t}\n\n\tgetObjectByProperty( name, value ) {\n\n\t\tif ( this[ name ] === value ) return this;\n\n\t\tfor ( let i = 0, l = this.children.length; i < l; i ++ ) {\n\n\t\t\tconst child = this.children[ i ];\n\t\t\tconst object = child.getObjectByProperty( name, value );\n\n\t\t\tif ( object !== undefined ) {\n\n\t\t\t\treturn object;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t}\n\n\tgetWorldPosition( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\treturn target.setFromMatrixPosition( this.matrixWorld );\n\n\t}\n\n\tgetWorldQuaternion( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tthis.matrixWorld.decompose( _position$3, target, _scale$2 );\n\n\t\treturn target;\n\n\t}\n\n\tgetWorldScale( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tthis.matrixWorld.decompose( _position$3, _quaternion$2, target );\n\n\t\treturn target;\n\n\t}\n\n\tgetWorldDirection( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tconst e = this.matrixWorld.elements;\n\n\t\treturn target.set( e[ 8 ], e[ 9 ], e[ 10 ] ).normalize();\n\n\t}\n\n\traycast() {}\n\n\ttraverse( callback ) {\n\n\t\tcallback( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverse( callback );\n\n\t\t}\n\n\t}\n\n\ttraverseVisible( callback ) {\n\n\t\tif ( this.visible === false ) return;\n\n\t\tcallback( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverseVisible( callback );\n\n\t\t}\n\n\t}\n\n\ttraverseAncestors( callback ) {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tcallback( parent );\n\n\t\t\tparent.traverseAncestors( callback );\n\n\t\t}\n\n\t}\n\n\tupdateMatrix() {\n\n\t\tthis.matrix.compose( this.position, this.quaternion, this.scale );\n\n\t\tthis.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.matrixWorldNeedsUpdate || force ) {\n\n\t\t\tif ( this.parent === null ) {\n\n\t\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t\t} else {\n\n\t\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t\t}\n\n\t\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\t\tforce = true;\n\n\t\t}\n\n\t\t// update children\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].updateMatrixWorld( force );\n\n\t\t}\n\n\t}\n\n\tupdateWorldMatrix( updateParents, updateChildren ) {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( updateParents === true && parent !== null ) {\n\n\t\t\tparent.updateWorldMatrix( true, false );\n\n\t\t}\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.parent === null ) {\n\n\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t} else {\n\n\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t}\n\n\t\t// update children\n\n\t\tif ( updateChildren === true ) {\n\n\t\t\tconst children = this.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tchildren[ i ].updateWorldMatrix( false, true );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\t// meta is a string when called from JSON.stringify\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tconst output = {};\n\n\t\t// meta is a hash used to collect geometries, materials.\n\t\t// not providing it implies that this is the root object\n\t\t// being serialized.\n\t\tif ( isRootObject ) {\n\n\t\t\t// initialize meta obj\n\t\t\tmeta = {\n\t\t\t\tgeometries: {},\n\t\t\t\tmaterials: {},\n\t\t\t\ttextures: {},\n\t\t\t\timages: {},\n\t\t\t\tshapes: {},\n\t\t\t\tskeletons: {},\n\t\t\t\tanimations: {}\n\t\t\t};\n\n\t\t\toutput.metadata = {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Object',\n\t\t\t\tgenerator: 'Object3D.toJSON'\n\t\t\t};\n\n\t\t}\n\n\t\t// standard Object3D serialization\n\n\t\tconst object = {};\n\n\t\tobject.uuid = this.uuid;\n\t\tobject.type = this.type;\n\n\t\tif ( this.name !== '' ) object.name = this.name;\n\t\tif ( this.castShadow === true ) object.castShadow = true;\n\t\tif ( this.receiveShadow === true ) object.receiveShadow = true;\n\t\tif ( this.visible === false ) object.visible = false;\n\t\tif ( this.frustumCulled === false ) object.frustumCulled = false;\n\t\tif ( this.renderOrder !== 0 ) object.renderOrder = this.renderOrder;\n\t\tif ( JSON.stringify( this.userData ) !== '{}' ) object.userData = this.userData;\n\n\t\tobject.layers = this.layers.mask;\n\t\tobject.matrix = this.matrix.toArray();\n\n\t\tif ( this.matrixAutoUpdate === false ) object.matrixAutoUpdate = false;\n\n\t\t// object specific properties\n\n\t\tif ( this.isInstancedMesh ) {\n\n\t\t\tobject.type = 'InstancedMesh';\n\t\t\tobject.count = this.count;\n\t\t\tobject.instanceMatrix = this.instanceMatrix.toJSON();\n\t\t\tif ( this.instanceColor !== null ) object.instanceColor = this.instanceColor.toJSON();\n\n\t\t}\n\n\t\t//\n\n\t\tfunction serialize( library, element ) {\n\n\t\t\tif ( library[ element.uuid ] === undefined ) {\n\n\t\t\t\tlibrary[ element.uuid ] = element.toJSON( meta );\n\n\t\t\t}\n\n\t\t\treturn element.uuid;\n\n\t\t}\n\n\t\tif ( this.isScene ) {\n\n\t\t\tif ( this.background ) {\n\n\t\t\t\tif ( this.background.isColor ) {\n\n\t\t\t\t\tobject.background = this.background.toJSON();\n\n\t\t\t\t} else if ( this.background.isTexture ) {\n\n\t\t\t\t\tobject.background = this.background.toJSON( meta ).uuid;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.environment && this.environment.isTexture ) {\n\n\t\t\t\tobject.environment = this.environment.toJSON( meta ).uuid;\n\n\t\t\t}\n\n\t\t} else if ( this.isMesh || this.isLine || this.isPoints ) {\n\n\t\t\tobject.geometry = serialize( meta.geometries, this.geometry );\n\n\t\t\tconst parameters = this.geometry.parameters;\n\n\t\t\tif ( parameters !== undefined && parameters.shapes !== undefined ) {\n\n\t\t\t\tconst shapes = parameters.shapes;\n\n\t\t\t\tif ( Array.isArray( shapes ) ) {\n\n\t\t\t\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst shape = shapes[ i ];\n\n\t\t\t\t\t\tserialize( meta.shapes, shape );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tserialize( meta.shapes, shapes );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.isSkinnedMesh ) {\n\n\t\t\tobject.bindMode = this.bindMode;\n\t\t\tobject.bindMatrix = this.bindMatrix.toArray();\n\n\t\t\tif ( this.skeleton !== undefined ) {\n\n\t\t\t\tserialize( meta.skeletons, this.skeleton );\n\n\t\t\t\tobject.skeleton = this.skeleton.uuid;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.material !== undefined ) {\n\n\t\t\tif ( Array.isArray( this.material ) ) {\n\n\t\t\t\tconst uuids = [];\n\n\t\t\t\tfor ( let i = 0, l = this.material.length; i < l; i ++ ) {\n\n\t\t\t\t\tuuids.push( serialize( meta.materials, this.material[ i ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tobject.material = uuids;\n\n\t\t\t} else {\n\n\t\t\t\tobject.material = serialize( meta.materials, this.material );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.children.length > 0 ) {\n\n\t\t\tobject.children = [];\n\n\t\t\tfor ( let i = 0; i < this.children.length; i ++ ) {\n\n\t\t\t\tobject.children.push( this.children[ i ].toJSON( meta ).object );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.animations.length > 0 ) {\n\n\t\t\tobject.animations = [];\n\n\t\t\tfor ( let i = 0; i < this.animations.length; i ++ ) {\n\n\t\t\t\tconst animation = this.animations[ i ];\n\n\t\t\t\tobject.animations.push( serialize( meta.animations, animation ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( isRootObject ) {\n\n\t\t\tconst geometries = extractFromCache( meta.geometries );\n\t\t\tconst materials = extractFromCache( meta.materials );\n\t\t\tconst textures = extractFromCache( meta.textures );\n\t\t\tconst images = extractFromCache( meta.images );\n\t\t\tconst shapes = extractFromCache( meta.shapes );\n\t\t\tconst skeletons = extractFromCache( meta.skeletons );\n\t\t\tconst animations = extractFromCache( meta.animations );\n\n\t\t\tif ( geometries.length > 0 ) output.geometries = geometries;\n\t\t\tif ( materials.length > 0 ) output.materials = materials;\n\t\t\tif ( textures.length > 0 ) output.textures = textures;\n\t\t\tif ( images.length > 0 ) output.images = images;\n\t\t\tif ( shapes.length > 0 ) output.shapes = shapes;\n\t\t\tif ( skeletons.length > 0 ) output.skeletons = skeletons;\n\t\t\tif ( animations.length > 0 ) output.animations = animations;\n\n\t\t}\n\n\t\toutput.object = object;\n\n\t\treturn output;\n\n\t\t// extract data from the cache hash\n\t\t// remove metadata on each item\n\t\t// and return as array\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tconst values = [];\n\t\t\tfor ( const key in cache ) {\n\n\t\t\t\tconst data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t}\n\n\tclone( recursive ) {\n\n\t\treturn new this.constructor().copy( this, recursive );\n\n\t}\n\n\tcopy( source, recursive = true ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.up.copy( source.up );\n\n\t\tthis.position.copy( source.position );\n\t\tthis.rotation.order = source.rotation.order;\n\t\tthis.quaternion.copy( source.quaternion );\n\t\tthis.scale.copy( source.scale );\n\n\t\tthis.matrix.copy( source.matrix );\n\t\tthis.matrixWorld.copy( source.matrixWorld );\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\tthis.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate;\n\n\t\tthis.layers.mask = source.layers.mask;\n\t\tthis.visible = source.visible;\n\n\t\tthis.castShadow = source.castShadow;\n\t\tthis.receiveShadow = source.receiveShadow;\n\n\t\tthis.frustumCulled = source.frustumCulled;\n\t\tthis.renderOrder = source.renderOrder;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\tif ( recursive === true ) {\n\n\t\t\tfor ( let i = 0; i < source.children.length; i ++ ) {\n\n\t\t\t\tconst child = source.children[ i ];\n\t\t\t\tthis.add( child.clone() );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nObject3D.DefaultUp = new Vector3( 0, 1, 0 );\nObject3D.DefaultMatrixAutoUpdate = true;\n\nObject3D.prototype.isObject3D = true;\n\nconst _v0$1 = /*@__PURE__*/ new Vector3();\nconst _v1$3 = /*@__PURE__*/ new Vector3();\nconst _v2$2 = /*@__PURE__*/ new Vector3();\nconst _v3$1 = /*@__PURE__*/ new Vector3();\n\nconst _vab = /*@__PURE__*/ new Vector3();\nconst _vac = /*@__PURE__*/ new Vector3();\nconst _vbc = /*@__PURE__*/ new Vector3();\nconst _vap = /*@__PURE__*/ new Vector3();\nconst _vbp = /*@__PURE__*/ new Vector3();\nconst _vcp = /*@__PURE__*/ new Vector3();\n\nclass Triangle {\n\n\tconstructor( a = new Vector3(), b = new Vector3(), c = new Vector3() ) {\n\n\t\tthis.a = a;\n\t\tthis.b = b;\n\t\tthis.c = c;\n\n\t}\n\n\tstatic getNormal( a, b, c, target ) {\n\n\t\ttarget.subVectors( c, b );\n\t\t_v0$1.subVectors( a, b );\n\t\ttarget.cross( _v0$1 );\n\n\t\tconst targetLengthSq = target.lengthSq();\n\t\tif ( targetLengthSq > 0 ) {\n\n\t\t\treturn target.multiplyScalar( 1 / Math.sqrt( targetLengthSq ) );\n\n\t\t}\n\n\t\treturn target.set( 0, 0, 0 );\n\n\t}\n\n\t// static/instance method to calculate barycentric coordinates\n\t// based on: http://www.blackpawn.com/texts/pointinpoly/default.html\n\tstatic getBarycoord( point, a, b, c, target ) {\n\n\t\t_v0$1.subVectors( c, a );\n\t\t_v1$3.subVectors( b, a );\n\t\t_v2$2.subVectors( point, a );\n\n\t\tconst dot00 = _v0$1.dot( _v0$1 );\n\t\tconst dot01 = _v0$1.dot( _v1$3 );\n\t\tconst dot02 = _v0$1.dot( _v2$2 );\n\t\tconst dot11 = _v1$3.dot( _v1$3 );\n\t\tconst dot12 = _v1$3.dot( _v2$2 );\n\n\t\tconst denom = ( dot00 * dot11 - dot01 * dot01 );\n\n\t\t// collinear or singular triangle\n\t\tif ( denom === 0 ) {\n\n\t\t\t// arbitrary location outside of triangle?\n\t\t\t// not sure if this is the best idea, maybe should be returning undefined\n\t\t\treturn target.set( - 2, - 1, - 1 );\n\n\t\t}\n\n\t\tconst invDenom = 1 / denom;\n\t\tconst u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom;\n\t\tconst v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom;\n\n\t\t// barycentric coordinates must always sum to 1\n\t\treturn target.set( 1 - u - v, v, u );\n\n\t}\n\n\tstatic containsPoint( point, a, b, c ) {\n\n\t\tthis.getBarycoord( point, a, b, c, _v3$1 );\n\n\t\treturn ( _v3$1.x >= 0 ) && ( _v3$1.y >= 0 ) && ( ( _v3$1.x + _v3$1.y ) <= 1 );\n\n\t}\n\n\tstatic getUV( point, p1, p2, p3, uv1, uv2, uv3, target ) {\n\n\t\tthis.getBarycoord( point, p1, p2, p3, _v3$1 );\n\n\t\ttarget.set( 0, 0 );\n\t\ttarget.addScaledVector( uv1, _v3$1.x );\n\t\ttarget.addScaledVector( uv2, _v3$1.y );\n\t\ttarget.addScaledVector( uv3, _v3$1.z );\n\n\t\treturn target;\n\n\t}\n\n\tstatic isFrontFacing( a, b, c, direction ) {\n\n\t\t_v0$1.subVectors( c, b );\n\t\t_v1$3.subVectors( a, b );\n\n\t\t// strictly front facing\n\t\treturn ( _v0$1.cross( _v1$3 ).dot( direction ) < 0 ) ? true : false;\n\n\t}\n\n\tset( a, b, c ) {\n\n\t\tthis.a.copy( a );\n\t\tthis.b.copy( b );\n\t\tthis.c.copy( c );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPointsAndIndices( points, i0, i1, i2 ) {\n\n\t\tthis.a.copy( points[ i0 ] );\n\t\tthis.b.copy( points[ i1 ] );\n\t\tthis.c.copy( points[ i2 ] );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromAttributeAndIndices( attribute, i0, i1, i2 ) {\n\n\t\tthis.a.fromBufferAttribute( attribute, i0 );\n\t\tthis.b.fromBufferAttribute( attribute, i1 );\n\t\tthis.c.fromBufferAttribute( attribute, i2 );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( triangle ) {\n\n\t\tthis.a.copy( triangle.a );\n\t\tthis.b.copy( triangle.b );\n\t\tthis.c.copy( triangle.c );\n\n\t\treturn this;\n\n\t}\n\n\tgetArea() {\n\n\t\t_v0$1.subVectors( this.c, this.b );\n\t\t_v1$3.subVectors( this.a, this.b );\n\n\t\treturn _v0$1.cross( _v1$3 ).length() * 0.5;\n\n\t}\n\n\tgetMidpoint( target ) {\n\n\t\treturn target.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 );\n\n\t}\n\n\tgetNormal( target ) {\n\n\t\treturn Triangle.getNormal( this.a, this.b, this.c, target );\n\n\t}\n\n\tgetPlane( target ) {\n\n\t\treturn target.setFromCoplanarPoints( this.a, this.b, this.c );\n\n\t}\n\n\tgetBarycoord( point, target ) {\n\n\t\treturn Triangle.getBarycoord( point, this.a, this.b, this.c, target );\n\n\t}\n\n\tgetUV( point, uv1, uv2, uv3, target ) {\n\n\t\treturn Triangle.getUV( point, this.a, this.b, this.c, uv1, uv2, uv3, target );\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn Triangle.containsPoint( point, this.a, this.b, this.c );\n\n\t}\n\n\tisFrontFacing( direction ) {\n\n\t\treturn Triangle.isFrontFacing( this.a, this.b, this.c, direction );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsTriangle( this );\n\n\t}\n\n\tclosestPointToPoint( p, target ) {\n\n\t\tconst a = this.a, b = this.b, c = this.c;\n\t\tlet v, w;\n\n\t\t// algorithm thanks to Real-Time Collision Detection by Christer Ericson,\n\t\t// published by Morgan Kaufmann Publishers, (c) 2005 Elsevier Inc.,\n\t\t// under the accompanying license; see chapter 5.1.5 for detailed explanation.\n\t\t// basically, we're distinguishing which of the voronoi regions of the triangle\n\t\t// the point lies in with the minimum amount of redundant computation.\n\n\t\t_vab.subVectors( b, a );\n\t\t_vac.subVectors( c, a );\n\t\t_vap.subVectors( p, a );\n\t\tconst d1 = _vab.dot( _vap );\n\t\tconst d2 = _vac.dot( _vap );\n\t\tif ( d1 <= 0 && d2 <= 0 ) {\n\n\t\t\t// vertex region of A; barycentric coords (1, 0, 0)\n\t\t\treturn target.copy( a );\n\n\t\t}\n\n\t\t_vbp.subVectors( p, b );\n\t\tconst d3 = _vab.dot( _vbp );\n\t\tconst d4 = _vac.dot( _vbp );\n\t\tif ( d3 >= 0 && d4 <= d3 ) {\n\n\t\t\t// vertex region of B; barycentric coords (0, 1, 0)\n\t\t\treturn target.copy( b );\n\n\t\t}\n\n\t\tconst vc = d1 * d4 - d3 * d2;\n\t\tif ( vc <= 0 && d1 >= 0 && d3 <= 0 ) {\n\n\t\t\tv = d1 / ( d1 - d3 );\n\t\t\t// edge region of AB; barycentric coords (1-v, v, 0)\n\t\t\treturn target.copy( a ).addScaledVector( _vab, v );\n\n\t\t}\n\n\t\t_vcp.subVectors( p, c );\n\t\tconst d5 = _vab.dot( _vcp );\n\t\tconst d6 = _vac.dot( _vcp );\n\t\tif ( d6 >= 0 && d5 <= d6 ) {\n\n\t\t\t// vertex region of C; barycentric coords (0, 0, 1)\n\t\t\treturn target.copy( c );\n\n\t\t}\n\n\t\tconst vb = d5 * d2 - d1 * d6;\n\t\tif ( vb <= 0 && d2 >= 0 && d6 <= 0 ) {\n\n\t\t\tw = d2 / ( d2 - d6 );\n\t\t\t// edge region of AC; barycentric coords (1-w, 0, w)\n\t\t\treturn target.copy( a ).addScaledVector( _vac, w );\n\n\t\t}\n\n\t\tconst va = d3 * d6 - d5 * d4;\n\t\tif ( va <= 0 && ( d4 - d3 ) >= 0 && ( d5 - d6 ) >= 0 ) {\n\n\t\t\t_vbc.subVectors( c, b );\n\t\t\tw = ( d4 - d3 ) / ( ( d4 - d3 ) + ( d5 - d6 ) );\n\t\t\t// edge region of BC; barycentric coords (0, 1-w, w)\n\t\t\treturn target.copy( b ).addScaledVector( _vbc, w ); // edge region of BC\n\n\t\t}\n\n\t\t// face region\n\t\tconst denom = 1 / ( va + vb + vc );\n\t\t// u = va * denom\n\t\tv = vb * denom;\n\t\tw = vc * denom;\n\n\t\treturn target.copy( a ).addScaledVector( _vab, v ).addScaledVector( _vac, w );\n\n\t}\n\n\tequals( triangle ) {\n\n\t\treturn triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c );\n\n\t}\n\n}\n\nlet materialId = 0;\n\nclass Material extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tObject.defineProperty( this, 'id', { value: materialId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'Material';\n\n\t\tthis.fog = true;\n\n\t\tthis.blending = NormalBlending;\n\t\tthis.side = FrontSide;\n\t\tthis.vertexColors = false;\n\n\t\tthis.opacity = 1;\n\t\tthis.format = RGBAFormat;\n\t\tthis.transparent = false;\n\n\t\tthis.blendSrc = SrcAlphaFactor;\n\t\tthis.blendDst = OneMinusSrcAlphaFactor;\n\t\tthis.blendEquation = AddEquation;\n\t\tthis.blendSrcAlpha = null;\n\t\tthis.blendDstAlpha = null;\n\t\tthis.blendEquationAlpha = null;\n\n\t\tthis.depthFunc = LessEqualDepth;\n\t\tthis.depthTest = true;\n\t\tthis.depthWrite = true;\n\n\t\tthis.stencilWriteMask = 0xff;\n\t\tthis.stencilFunc = AlwaysStencilFunc;\n\t\tthis.stencilRef = 0;\n\t\tthis.stencilFuncMask = 0xff;\n\t\tthis.stencilFail = KeepStencilOp;\n\t\tthis.stencilZFail = KeepStencilOp;\n\t\tthis.stencilZPass = KeepStencilOp;\n\t\tthis.stencilWrite = false;\n\n\t\tthis.clippingPlanes = null;\n\t\tthis.clipIntersection = false;\n\t\tthis.clipShadows = false;\n\n\t\tthis.shadowSide = null;\n\n\t\tthis.colorWrite = true;\n\n\t\tthis.precision = null; // override the renderer's default precision for this material\n\n\t\tthis.polygonOffset = false;\n\t\tthis.polygonOffsetFactor = 0;\n\t\tthis.polygonOffsetUnits = 0;\n\n\t\tthis.dithering = false;\n\n\t\tthis.alphaToCoverage = false;\n\t\tthis.premultipliedAlpha = false;\n\n\t\tthis.visible = true;\n\n\t\tthis.toneMapped = true;\n\n\t\tthis.userData = {};\n\n\t\tthis.version = 0;\n\n\t\tthis._alphaTest = 0;\n\n\t}\n\n\tget alphaTest() {\n\n\t\treturn this._alphaTest;\n\n\t}\n\n\tset alphaTest( value ) {\n\n\t\tif ( this._alphaTest > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._alphaTest = value;\n\n\t}\n\n\tonBuild( /* shaderobject, renderer */ ) {}\n\n\tonBeforeRender( /* renderer, scene, camera, geometry, object, group */ ) {}\n\n\tonBeforeCompile( /* shaderobject, renderer */ ) {}\n\n\tcustomProgramCacheKey() {\n\n\t\treturn this.onBeforeCompile.toString();\n\n\t}\n\n\tsetValues( values ) {\n\n\t\tif ( values === undefined ) return;\n\n\t\tfor ( const key in values ) {\n\n\t\t\tconst newValue = values[ key ];\n\n\t\t\tif ( newValue === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Material: \\'' + key + '\\' parameter is undefined.' );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// for backward compatability if shading is set in the constructor\n\t\t\tif ( key === 'shading' ) {\n\n\t\t\t\tconsole.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\t\t\t\tthis.flatShading = ( newValue === FlatShading ) ? true : false;\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst currentValue = this[ key ];\n\n\t\t\tif ( currentValue === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.' + this.type + ': \\'' + key + '\\' is not a property of this material.' );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( currentValue && currentValue.isColor ) {\n\n\t\t\t\tcurrentValue.set( newValue );\n\n\t\t\t} else if ( ( currentValue && currentValue.isVector3 ) && ( newValue && newValue.isVector3 ) ) {\n\n\t\t\t\tcurrentValue.copy( newValue );\n\n\t\t\t} else {\n\n\t\t\t\tthis[ key ] = newValue;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst isRoot = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( isRoot ) {\n\n\t\t\tmeta = {\n\t\t\t\ttextures: {},\n\t\t\t\timages: {}\n\t\t\t};\n\n\t\t}\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Material',\n\t\t\t\tgenerator: 'Material.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard Material serialization\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.color && this.color.isColor ) data.color = this.color.getHex();\n\n\t\tif ( this.roughness !== undefined ) data.roughness = this.roughness;\n\t\tif ( this.metalness !== undefined ) data.metalness = this.metalness;\n\n\t\tif ( this.sheen !== undefined ) data.sheen = this.sheen;\n\t\tif ( this.sheenTint && this.sheenTint.isColor ) data.sheenTint = this.sheenTint.getHex();\n\t\tif ( this.sheenRoughness !== undefined ) data.sheenRoughness = this.sheenRoughness;\n\t\tif ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex();\n\t\tif ( this.emissiveIntensity && this.emissiveIntensity !== 1 ) data.emissiveIntensity = this.emissiveIntensity;\n\n\t\tif ( this.specular && this.specular.isColor ) data.specular = this.specular.getHex();\n\t\tif ( this.specularIntensity !== undefined ) data.specularIntensity = this.specularIntensity;\n\t\tif ( this.specularTint && this.specularTint.isColor ) data.specularTint = this.specularTint.getHex();\n\t\tif ( this.shininess !== undefined ) data.shininess = this.shininess;\n\t\tif ( this.clearcoat !== undefined ) data.clearcoat = this.clearcoat;\n\t\tif ( this.clearcoatRoughness !== undefined ) data.clearcoatRoughness = this.clearcoatRoughness;\n\n\t\tif ( this.clearcoatMap && this.clearcoatMap.isTexture ) {\n\n\t\t\tdata.clearcoatMap = this.clearcoatMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture ) {\n\n\t\t\tdata.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture ) {\n\n\t\t\tdata.clearcoatNormalMap = this.clearcoatNormalMap.toJSON( meta ).uuid;\n\t\t\tdata.clearcoatNormalScale = this.clearcoatNormalScale.toArray();\n\n\t\t}\n\n\t\tif ( this.map && this.map.isTexture ) data.map = this.map.toJSON( meta ).uuid;\n\t\tif ( this.matcap && this.matcap.isTexture ) data.matcap = this.matcap.toJSON( meta ).uuid;\n\t\tif ( this.alphaMap && this.alphaMap.isTexture ) data.alphaMap = this.alphaMap.toJSON( meta ).uuid;\n\n\t\tif ( this.lightMap && this.lightMap.isTexture ) {\n\n\t\t\tdata.lightMap = this.lightMap.toJSON( meta ).uuid;\n\t\t\tdata.lightMapIntensity = this.lightMapIntensity;\n\n\t\t}\n\n\t\tif ( this.aoMap && this.aoMap.isTexture ) {\n\n\t\t\tdata.aoMap = this.aoMap.toJSON( meta ).uuid;\n\t\t\tdata.aoMapIntensity = this.aoMapIntensity;\n\n\t\t}\n\n\t\tif ( this.bumpMap && this.bumpMap.isTexture ) {\n\n\t\t\tdata.bumpMap = this.bumpMap.toJSON( meta ).uuid;\n\t\t\tdata.bumpScale = this.bumpScale;\n\n\t\t}\n\n\t\tif ( this.normalMap && this.normalMap.isTexture ) {\n\n\t\t\tdata.normalMap = this.normalMap.toJSON( meta ).uuid;\n\t\t\tdata.normalMapType = this.normalMapType;\n\t\t\tdata.normalScale = this.normalScale.toArray();\n\n\t\t}\n\n\t\tif ( this.displacementMap && this.displacementMap.isTexture ) {\n\n\t\t\tdata.displacementMap = this.displacementMap.toJSON( meta ).uuid;\n\t\t\tdata.displacementScale = this.displacementScale;\n\t\t\tdata.displacementBias = this.displacementBias;\n\n\t\t}\n\n\t\tif ( this.roughnessMap && this.roughnessMap.isTexture ) data.roughnessMap = this.roughnessMap.toJSON( meta ).uuid;\n\t\tif ( this.metalnessMap && this.metalnessMap.isTexture ) data.metalnessMap = this.metalnessMap.toJSON( meta ).uuid;\n\n\t\tif ( this.emissiveMap && this.emissiveMap.isTexture ) data.emissiveMap = this.emissiveMap.toJSON( meta ).uuid;\n\t\tif ( this.specularMap && this.specularMap.isTexture ) data.specularMap = this.specularMap.toJSON( meta ).uuid;\n\t\tif ( this.specularIntensityMap && this.specularIntensityMap.isTexture ) data.specularIntensityMap = this.specularIntensityMap.toJSON( meta ).uuid;\n\t\tif ( this.specularTintMap && this.specularTintMap.isTexture ) data.specularTintMap = this.specularTintMap.toJSON( meta ).uuid;\n\n\t\tif ( this.envMap && this.envMap.isTexture ) {\n\n\t\t\tdata.envMap = this.envMap.toJSON( meta ).uuid;\n\n\t\t\tif ( this.combine !== undefined ) data.combine = this.combine;\n\n\t\t}\n\n\t\tif ( this.envMapIntensity !== undefined ) data.envMapIntensity = this.envMapIntensity;\n\t\tif ( this.reflectivity !== undefined ) data.reflectivity = this.reflectivity;\n\t\tif ( this.refractionRatio !== undefined ) data.refractionRatio = this.refractionRatio;\n\n\t\tif ( this.gradientMap && this.gradientMap.isTexture ) {\n\n\t\t\tdata.gradientMap = this.gradientMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.transmission !== undefined ) data.transmission = this.transmission;\n\t\tif ( this.transmissionMap && this.transmissionMap.isTexture ) data.transmissionMap = this.transmissionMap.toJSON( meta ).uuid;\n\t\tif ( this.thickness !== undefined ) data.thickness = this.thickness;\n\t\tif ( this.thicknessMap && this.thicknessMap.isTexture ) data.thicknessMap = this.thicknessMap.toJSON( meta ).uuid;\n\t\tif ( this.attenuationDistance !== undefined ) data.attenuationDistance = this.attenuationDistance;\n\t\tif ( this.attenuationTint !== undefined ) data.attenuationTint = this.attenuationTint.getHex();\n\n\t\tif ( this.size !== undefined ) data.size = this.size;\n\t\tif ( this.shadowSide !== null ) data.shadowSide = this.shadowSide;\n\t\tif ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation;\n\n\t\tif ( this.blending !== NormalBlending ) data.blending = this.blending;\n\t\tif ( this.side !== FrontSide ) data.side = this.side;\n\t\tif ( this.vertexColors ) data.vertexColors = true;\n\n\t\tif ( this.opacity < 1 ) data.opacity = this.opacity;\n\t\tif ( this.format !== RGBAFormat ) data.format = this.format;\n\t\tif ( this.transparent === true ) data.transparent = this.transparent;\n\n\t\tdata.depthFunc = this.depthFunc;\n\t\tdata.depthTest = this.depthTest;\n\t\tdata.depthWrite = this.depthWrite;\n\t\tdata.colorWrite = this.colorWrite;\n\n\t\tdata.stencilWrite = this.stencilWrite;\n\t\tdata.stencilWriteMask = this.stencilWriteMask;\n\t\tdata.stencilFunc = this.stencilFunc;\n\t\tdata.stencilRef = this.stencilRef;\n\t\tdata.stencilFuncMask = this.stencilFuncMask;\n\t\tdata.stencilFail = this.stencilFail;\n\t\tdata.stencilZFail = this.stencilZFail;\n\t\tdata.stencilZPass = this.stencilZPass;\n\n\t\t// rotation (SpriteMaterial)\n\t\tif ( this.rotation && this.rotation !== 0 ) data.rotation = this.rotation;\n\n\t\tif ( this.polygonOffset === true ) data.polygonOffset = true;\n\t\tif ( this.polygonOffsetFactor !== 0 ) data.polygonOffsetFactor = this.polygonOffsetFactor;\n\t\tif ( this.polygonOffsetUnits !== 0 ) data.polygonOffsetUnits = this.polygonOffsetUnits;\n\n\t\tif ( this.linewidth && this.linewidth !== 1 ) data.linewidth = this.linewidth;\n\t\tif ( this.dashSize !== undefined ) data.dashSize = this.dashSize;\n\t\tif ( this.gapSize !== undefined ) data.gapSize = this.gapSize;\n\t\tif ( this.scale !== undefined ) data.scale = this.scale;\n\n\t\tif ( this.dithering === true ) data.dithering = true;\n\n\t\tif ( this.alphaTest > 0 ) data.alphaTest = this.alphaTest;\n\t\tif ( this.alphaToCoverage === true ) data.alphaToCoverage = this.alphaToCoverage;\n\t\tif ( this.premultipliedAlpha === true ) data.premultipliedAlpha = this.premultipliedAlpha;\n\n\t\tif ( this.wireframe === true ) data.wireframe = this.wireframe;\n\t\tif ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth;\n\t\tif ( this.wireframeLinecap !== 'round' ) data.wireframeLinecap = this.wireframeLinecap;\n\t\tif ( this.wireframeLinejoin !== 'round' ) data.wireframeLinejoin = this.wireframeLinejoin;\n\n\t\tif ( this.flatShading === true ) data.flatShading = this.flatShading;\n\n\t\tif ( this.visible === false ) data.visible = false;\n\n\t\tif ( this.toneMapped === false ) data.toneMapped = false;\n\n\t\tif ( JSON.stringify( this.userData ) !== '{}' ) data.userData = this.userData;\n\n\t\t// TODO: Copied from Object3D.toJSON\n\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tconst values = [];\n\n\t\t\tfor ( const key in cache ) {\n\n\t\t\t\tconst data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t\tif ( isRoot ) {\n\n\t\t\tconst textures = extractFromCache( meta.textures );\n\t\t\tconst images = extractFromCache( meta.images );\n\n\t\t\tif ( textures.length > 0 ) data.textures = textures;\n\t\t\tif ( images.length > 0 ) data.images = images;\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.fog = source.fog;\n\n\t\tthis.blending = source.blending;\n\t\tthis.side = source.side;\n\t\tthis.vertexColors = source.vertexColors;\n\n\t\tthis.opacity = source.opacity;\n\t\tthis.format = source.format;\n\t\tthis.transparent = source.transparent;\n\n\t\tthis.blendSrc = source.blendSrc;\n\t\tthis.blendDst = source.blendDst;\n\t\tthis.blendEquation = source.blendEquation;\n\t\tthis.blendSrcAlpha = source.blendSrcAlpha;\n\t\tthis.blendDstAlpha = source.blendDstAlpha;\n\t\tthis.blendEquationAlpha = source.blendEquationAlpha;\n\n\t\tthis.depthFunc = source.depthFunc;\n\t\tthis.depthTest = source.depthTest;\n\t\tthis.depthWrite = source.depthWrite;\n\n\t\tthis.stencilWriteMask = source.stencilWriteMask;\n\t\tthis.stencilFunc = source.stencilFunc;\n\t\tthis.stencilRef = source.stencilRef;\n\t\tthis.stencilFuncMask = source.stencilFuncMask;\n\t\tthis.stencilFail = source.stencilFail;\n\t\tthis.stencilZFail = source.stencilZFail;\n\t\tthis.stencilZPass = source.stencilZPass;\n\t\tthis.stencilWrite = source.stencilWrite;\n\n\t\tconst srcPlanes = source.clippingPlanes;\n\t\tlet dstPlanes = null;\n\n\t\tif ( srcPlanes !== null ) {\n\n\t\t\tconst n = srcPlanes.length;\n\t\t\tdstPlanes = new Array( n );\n\n\t\t\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\t\t\tdstPlanes[ i ] = srcPlanes[ i ].clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.clippingPlanes = dstPlanes;\n\t\tthis.clipIntersection = source.clipIntersection;\n\t\tthis.clipShadows = source.clipShadows;\n\n\t\tthis.shadowSide = source.shadowSide;\n\n\t\tthis.colorWrite = source.colorWrite;\n\n\t\tthis.precision = source.precision;\n\n\t\tthis.polygonOffset = source.polygonOffset;\n\t\tthis.polygonOffsetFactor = source.polygonOffsetFactor;\n\t\tthis.polygonOffsetUnits = source.polygonOffsetUnits;\n\n\t\tthis.dithering = source.dithering;\n\n\t\tthis.alphaTest = source.alphaTest;\n\t\tthis.alphaToCoverage = source.alphaToCoverage;\n\t\tthis.premultipliedAlpha = source.premultipliedAlpha;\n\n\t\tthis.visible = source.visible;\n\n\t\tthis.toneMapped = source.toneMapped;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n}\n\nMaterial.prototype.isMaterial = true;\n\nconst _colorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF,\n\t'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2,\n\t'brown': 0xA52A2A, 'burlywood': 0xDEB887, 'cadetblue': 0x5F9EA0, 'chartreuse': 0x7FFF00, 'chocolate': 0xD2691E, 'coral': 0xFF7F50,\n\t'cornflowerblue': 0x6495ED, 'cornsilk': 0xFFF8DC, 'crimson': 0xDC143C, 'cyan': 0x00FFFF, 'darkblue': 0x00008B, 'darkcyan': 0x008B8B,\n\t'darkgoldenrod': 0xB8860B, 'darkgray': 0xA9A9A9, 'darkgreen': 0x006400, 'darkgrey': 0xA9A9A9, 'darkkhaki': 0xBDB76B, 'darkmagenta': 0x8B008B,\n\t'darkolivegreen': 0x556B2F, 'darkorange': 0xFF8C00, 'darkorchid': 0x9932CC, 'darkred': 0x8B0000, 'darksalmon': 0xE9967A, 'darkseagreen': 0x8FBC8F,\n\t'darkslateblue': 0x483D8B, 'darkslategray': 0x2F4F4F, 'darkslategrey': 0x2F4F4F, 'darkturquoise': 0x00CED1, 'darkviolet': 0x9400D3,\n\t'deeppink': 0xFF1493, 'deepskyblue': 0x00BFFF, 'dimgray': 0x696969, 'dimgrey': 0x696969, 'dodgerblue': 0x1E90FF, 'firebrick': 0xB22222,\n\t'floralwhite': 0xFFFAF0, 'forestgreen': 0x228B22, 'fuchsia': 0xFF00FF, 'gainsboro': 0xDCDCDC, 'ghostwhite': 0xF8F8FF, 'gold': 0xFFD700,\n\t'goldenrod': 0xDAA520, 'gray': 0x808080, 'green': 0x008000, 'greenyellow': 0xADFF2F, 'grey': 0x808080, 'honeydew': 0xF0FFF0, 'hotpink': 0xFF69B4,\n\t'indianred': 0xCD5C5C, 'indigo': 0x4B0082, 'ivory': 0xFFFFF0, 'khaki': 0xF0E68C, 'lavender': 0xE6E6FA, 'lavenderblush': 0xFFF0F5, 'lawngreen': 0x7CFC00,\n\t'lemonchiffon': 0xFFFACD, 'lightblue': 0xADD8E6, 'lightcoral': 0xF08080, 'lightcyan': 0xE0FFFF, 'lightgoldenrodyellow': 0xFAFAD2, 'lightgray': 0xD3D3D3,\n\t'lightgreen': 0x90EE90, 'lightgrey': 0xD3D3D3, 'lightpink': 0xFFB6C1, 'lightsalmon': 0xFFA07A, 'lightseagreen': 0x20B2AA, 'lightskyblue': 0x87CEFA,\n\t'lightslategray': 0x778899, 'lightslategrey': 0x778899, 'lightsteelblue': 0xB0C4DE, 'lightyellow': 0xFFFFE0, 'lime': 0x00FF00, 'limegreen': 0x32CD32,\n\t'linen': 0xFAF0E6, 'magenta': 0xFF00FF, 'maroon': 0x800000, 'mediumaquamarine': 0x66CDAA, 'mediumblue': 0x0000CD, 'mediumorchid': 0xBA55D3,\n\t'mediumpurple': 0x9370DB, 'mediumseagreen': 0x3CB371, 'mediumslateblue': 0x7B68EE, 'mediumspringgreen': 0x00FA9A, 'mediumturquoise': 0x48D1CC,\n\t'mediumvioletred': 0xC71585, 'midnightblue': 0x191970, 'mintcream': 0xF5FFFA, 'mistyrose': 0xFFE4E1, 'moccasin': 0xFFE4B5, 'navajowhite': 0xFFDEAD,\n\t'navy': 0x000080, 'oldlace': 0xFDF5E6, 'olive': 0x808000, 'olivedrab': 0x6B8E23, 'orange': 0xFFA500, 'orangered': 0xFF4500, 'orchid': 0xDA70D6,\n\t'palegoldenrod': 0xEEE8AA, 'palegreen': 0x98FB98, 'paleturquoise': 0xAFEEEE, 'palevioletred': 0xDB7093, 'papayawhip': 0xFFEFD5, 'peachpuff': 0xFFDAB9,\n\t'peru': 0xCD853F, 'pink': 0xFFC0CB, 'plum': 0xDDA0DD, 'powderblue': 0xB0E0E6, 'purple': 0x800080, 'rebeccapurple': 0x663399, 'red': 0xFF0000, 'rosybrown': 0xBC8F8F,\n\t'royalblue': 0x4169E1, 'saddlebrown': 0x8B4513, 'salmon': 0xFA8072, 'sandybrown': 0xF4A460, 'seagreen': 0x2E8B57, 'seashell': 0xFFF5EE,\n\t'sienna': 0xA0522D, 'silver': 0xC0C0C0, 'skyblue': 0x87CEEB, 'slateblue': 0x6A5ACD, 'slategray': 0x708090, 'slategrey': 0x708090, 'snow': 0xFFFAFA,\n\t'springgreen': 0x00FF7F, 'steelblue': 0x4682B4, 'tan': 0xD2B48C, 'teal': 0x008080, 'thistle': 0xD8BFD8, 'tomato': 0xFF6347, 'turquoise': 0x40E0D0,\n\t'violet': 0xEE82EE, 'wheat': 0xF5DEB3, 'white': 0xFFFFFF, 'whitesmoke': 0xF5F5F5, 'yellow': 0xFFFF00, 'yellowgreen': 0x9ACD32 };\n\nconst _hslA = { h: 0, s: 0, l: 0 };\nconst _hslB = { h: 0, s: 0, l: 0 };\n\nfunction hue2rgb( p, q, t ) {\n\n\tif ( t < 0 ) t += 1;\n\tif ( t > 1 ) t -= 1;\n\tif ( t < 1 / 6 ) return p + ( q - p ) * 6 * t;\n\tif ( t < 1 / 2 ) return q;\n\tif ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t );\n\treturn p;\n\n}\n\nfunction SRGBToLinear( c ) {\n\n\treturn ( c < 0.04045 ) ? c * 0.0773993808 : Math.pow( c * 0.9478672986 + 0.0521327014, 2.4 );\n\n}\n\nfunction LinearToSRGB( c ) {\n\n\treturn ( c < 0.0031308 ) ? c * 12.92 : 1.055 * ( Math.pow( c, 0.41666 ) ) - 0.055;\n\n}\n\nclass Color {\n\n\tconstructor( r, g, b ) {\n\n\t\tif ( g === undefined && b === undefined ) {\n\n\t\t\t// r is THREE.Color, hex or string\n\t\t\treturn this.set( r );\n\n\t\t}\n\n\t\treturn this.setRGB( r, g, b );\n\n\t}\n\n\tset( value ) {\n\n\t\tif ( value && value.isColor ) {\n\n\t\t\tthis.copy( value );\n\n\t\t} else if ( typeof value === 'number' ) {\n\n\t\t\tthis.setHex( value );\n\n\t\t} else if ( typeof value === 'string' ) {\n\n\t\t\tthis.setStyle( value );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.r = scalar;\n\t\tthis.g = scalar;\n\t\tthis.b = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetHex( hex ) {\n\n\t\thex = Math.floor( hex );\n\n\t\tthis.r = ( hex >> 16 & 255 ) / 255;\n\t\tthis.g = ( hex >> 8 & 255 ) / 255;\n\t\tthis.b = ( hex & 255 ) / 255;\n\n\t\treturn this;\n\n\t}\n\n\tsetRGB( r, g, b ) {\n\n\t\tthis.r = r;\n\t\tthis.g = g;\n\t\tthis.b = b;\n\n\t\treturn this;\n\n\t}\n\n\tsetHSL( h, s, l ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\t\th = euclideanModulo( h, 1 );\n\t\ts = clamp( s, 0, 1 );\n\t\tl = clamp( l, 0, 1 );\n\n\t\tif ( s === 0 ) {\n\n\t\t\tthis.r = this.g = this.b = l;\n\n\t\t} else {\n\n\t\t\tconst p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s );\n\t\t\tconst q = ( 2 * l ) - p;\n\n\t\t\tthis.r = hue2rgb( q, p, h + 1 / 3 );\n\t\t\tthis.g = hue2rgb( q, p, h );\n\t\t\tthis.b = hue2rgb( q, p, h - 1 / 3 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetStyle( style ) {\n\n\t\tfunction handleAlpha( string ) {\n\n\t\t\tif ( string === undefined ) return;\n\n\t\t\tif ( parseFloat( string ) < 1 ) {\n\n\t\t\t\tconsole.warn( 'THREE.Color: Alpha component of ' + style + ' will be ignored.' );\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tlet m;\n\n\t\tif ( m = /^((?:rgb|hsl)a?)\\(([^\\)]*)\\)/.exec( style ) ) {\n\n\t\t\t// rgb / hsl\n\n\t\t\tlet color;\n\t\t\tconst name = m[ 1 ];\n\t\t\tconst components = m[ 2 ];\n\n\t\t\tswitch ( name ) {\n\n\t\t\t\tcase 'rgb':\n\t\t\t\tcase 'rgba':\n\n\t\t\t\t\tif ( color = /^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(255,0,0) rgba(255,0,0,0.5)\n\t\t\t\t\t\tthis.r = Math.min( 255, parseInt( color[ 1 ], 10 ) ) / 255;\n\t\t\t\t\t\tthis.g = Math.min( 255, parseInt( color[ 2 ], 10 ) ) / 255;\n\t\t\t\t\t\tthis.b = Math.min( 255, parseInt( color[ 3 ], 10 ) ) / 255;\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( color = /^\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(100%,0%,0%) rgba(100%,0%,0%,0.5)\n\t\t\t\t\t\tthis.r = Math.min( 100, parseInt( color[ 1 ], 10 ) ) / 100;\n\t\t\t\t\t\tthis.g = Math.min( 100, parseInt( color[ 2 ], 10 ) ) / 100;\n\t\t\t\t\t\tthis.b = Math.min( 100, parseInt( color[ 3 ], 10 ) ) / 100;\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'hsl':\n\t\t\t\tcase 'hsla':\n\n\t\t\t\t\tif ( color = /^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// hsl(120,50%,50%) hsla(120,50%,50%,0.5)\n\t\t\t\t\t\tconst h = parseFloat( color[ 1 ] ) / 360;\n\t\t\t\t\t\tconst s = parseInt( color[ 2 ], 10 ) / 100;\n\t\t\t\t\t\tconst l = parseInt( color[ 3 ], 10 ) / 100;\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this.setHSL( h, s, l );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t} else if ( m = /^\\#([A-Fa-f\\d]+)$/.exec( style ) ) {\n\n\t\t\t// hex color\n\n\t\t\tconst hex = m[ 1 ];\n\t\t\tconst size = hex.length;\n\n\t\t\tif ( size === 3 ) {\n\n\t\t\t\t// #ff0\n\t\t\t\tthis.r = parseInt( hex.charAt( 0 ) + hex.charAt( 0 ), 16 ) / 255;\n\t\t\t\tthis.g = parseInt( hex.charAt( 1 ) + hex.charAt( 1 ), 16 ) / 255;\n\t\t\t\tthis.b = parseInt( hex.charAt( 2 ) + hex.charAt( 2 ), 16 ) / 255;\n\n\t\t\t\treturn this;\n\n\t\t\t} else if ( size === 6 ) {\n\n\t\t\t\t// #ff0000\n\t\t\t\tthis.r = parseInt( hex.charAt( 0 ) + hex.charAt( 1 ), 16 ) / 255;\n\t\t\t\tthis.g = parseInt( hex.charAt( 2 ) + hex.charAt( 3 ), 16 ) / 255;\n\t\t\t\tthis.b = parseInt( hex.charAt( 4 ) + hex.charAt( 5 ), 16 ) / 255;\n\n\t\t\t\treturn this;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( style && style.length > 0 ) {\n\n\t\t\treturn this.setColorName( style );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetColorName( style ) {\n\n\t\t// color keywords\n\t\tconst hex = _colorKeywords[ style.toLowerCase() ];\n\n\t\tif ( hex !== undefined ) {\n\n\t\t\t// red\n\t\t\tthis.setHex( hex );\n\n\t\t} else {\n\n\t\t\t// unknown color\n\t\t\tconsole.warn( 'THREE.Color: Unknown color ' + style );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.r, this.g, this.b );\n\n\t}\n\n\tcopy( color ) {\n\n\t\tthis.r = color.r;\n\t\tthis.g = color.g;\n\t\tthis.b = color.b;\n\n\t\treturn this;\n\n\t}\n\n\tcopyGammaToLinear( color, gammaFactor = 2.0 ) {\n\n\t\tthis.r = Math.pow( color.r, gammaFactor );\n\t\tthis.g = Math.pow( color.g, gammaFactor );\n\t\tthis.b = Math.pow( color.b, gammaFactor );\n\n\t\treturn this;\n\n\t}\n\n\tcopyLinearToGamma( color, gammaFactor = 2.0 ) {\n\n\t\tconst safeInverse = ( gammaFactor > 0 ) ? ( 1.0 / gammaFactor ) : 1.0;\n\n\t\tthis.r = Math.pow( color.r, safeInverse );\n\t\tthis.g = Math.pow( color.g, safeInverse );\n\t\tthis.b = Math.pow( color.b, safeInverse );\n\n\t\treturn this;\n\n\t}\n\n\tconvertGammaToLinear( gammaFactor ) {\n\n\t\tthis.copyGammaToLinear( this, gammaFactor );\n\n\t\treturn this;\n\n\t}\n\n\tconvertLinearToGamma( gammaFactor ) {\n\n\t\tthis.copyLinearToGamma( this, gammaFactor );\n\n\t\treturn this;\n\n\t}\n\n\tcopySRGBToLinear( color ) {\n\n\t\tthis.r = SRGBToLinear( color.r );\n\t\tthis.g = SRGBToLinear( color.g );\n\t\tthis.b = SRGBToLinear( color.b );\n\n\t\treturn this;\n\n\t}\n\n\tcopyLinearToSRGB( color ) {\n\n\t\tthis.r = LinearToSRGB( color.r );\n\t\tthis.g = LinearToSRGB( color.g );\n\t\tthis.b = LinearToSRGB( color.b );\n\n\t\treturn this;\n\n\t}\n\n\tconvertSRGBToLinear() {\n\n\t\tthis.copySRGBToLinear( this );\n\n\t\treturn this;\n\n\t}\n\n\tconvertLinearToSRGB() {\n\n\t\tthis.copyLinearToSRGB( this );\n\n\t\treturn this;\n\n\t}\n\n\tgetHex() {\n\n\t\treturn ( this.r * 255 ) << 16 ^ ( this.g * 255 ) << 8 ^ ( this.b * 255 ) << 0;\n\n\t}\n\n\tgetHexString() {\n\n\t\treturn ( '000000' + this.getHex().toString( 16 ) ).slice( - 6 );\n\n\t}\n\n\tgetHSL( target ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\n\t\tconst r = this.r, g = this.g, b = this.b;\n\n\t\tconst max = Math.max( r, g, b );\n\t\tconst min = Math.min( r, g, b );\n\n\t\tlet hue, saturation;\n\t\tconst lightness = ( min + max ) / 2.0;\n\n\t\tif ( min === max ) {\n\n\t\t\thue = 0;\n\t\t\tsaturation = 0;\n\n\t\t} else {\n\n\t\t\tconst delta = max - min;\n\n\t\t\tsaturation = lightness <= 0.5 ? delta / ( max + min ) : delta / ( 2 - max - min );\n\n\t\t\tswitch ( max ) {\n\n\t\t\t\tcase r: hue = ( g - b ) / delta + ( g < b ? 6 : 0 ); break;\n\t\t\t\tcase g: hue = ( b - r ) / delta + 2; break;\n\t\t\t\tcase b: hue = ( r - g ) / delta + 4; break;\n\n\t\t\t}\n\n\t\t\thue /= 6;\n\n\t\t}\n\n\t\ttarget.h = hue;\n\t\ttarget.s = saturation;\n\t\ttarget.l = lightness;\n\n\t\treturn target;\n\n\t}\n\n\tgetStyle() {\n\n\t\treturn 'rgb(' + ( ( this.r * 255 ) | 0 ) + ',' + ( ( this.g * 255 ) | 0 ) + ',' + ( ( this.b * 255 ) | 0 ) + ')';\n\n\t}\n\n\toffsetHSL( h, s, l ) {\n\n\t\tthis.getHSL( _hslA );\n\n\t\t_hslA.h += h; _hslA.s += s; _hslA.l += l;\n\n\t\tthis.setHSL( _hslA.h, _hslA.s, _hslA.l );\n\n\t\treturn this;\n\n\t}\n\n\tadd( color ) {\n\n\t\tthis.r += color.r;\n\t\tthis.g += color.g;\n\t\tthis.b += color.b;\n\n\t\treturn this;\n\n\t}\n\n\taddColors( color1, color2 ) {\n\n\t\tthis.r = color1.r + color2.r;\n\t\tthis.g = color1.g + color2.g;\n\t\tthis.b = color1.b + color2.b;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.r += s;\n\t\tthis.g += s;\n\t\tthis.b += s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( color ) {\n\n\t\tthis.r = Math.max( 0, this.r - color.r );\n\t\tthis.g = Math.max( 0, this.g - color.g );\n\t\tthis.b = Math.max( 0, this.b - color.b );\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( color ) {\n\n\t\tthis.r *= color.r;\n\t\tthis.g *= color.g;\n\t\tthis.b *= color.b;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tthis.r *= s;\n\t\tthis.g *= s;\n\t\tthis.b *= s;\n\n\t\treturn this;\n\n\t}\n\n\tlerp( color, alpha ) {\n\n\t\tthis.r += ( color.r - this.r ) * alpha;\n\t\tthis.g += ( color.g - this.g ) * alpha;\n\t\tthis.b += ( color.b - this.b ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpColors( color1, color2, alpha ) {\n\n\t\tthis.r = color1.r + ( color2.r - color1.r ) * alpha;\n\t\tthis.g = color1.g + ( color2.g - color1.g ) * alpha;\n\t\tthis.b = color1.b + ( color2.b - color1.b ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpHSL( color, alpha ) {\n\n\t\tthis.getHSL( _hslA );\n\t\tcolor.getHSL( _hslB );\n\n\t\tconst h = lerp( _hslA.h, _hslB.h, alpha );\n\t\tconst s = lerp( _hslA.s, _hslB.s, alpha );\n\t\tconst l = lerp( _hslA.l, _hslB.l, alpha );\n\n\t\tthis.setHSL( h, s, l );\n\n\t\treturn this;\n\n\t}\n\n\tequals( c ) {\n\n\t\treturn ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.r = array[ offset ];\n\t\tthis.g = array[ offset + 1 ];\n\t\tthis.b = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.r;\n\t\tarray[ offset + 1 ] = this.g;\n\t\tarray[ offset + 2 ] = this.b;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.r = attribute.getX( index );\n\t\tthis.g = attribute.getY( index );\n\t\tthis.b = attribute.getZ( index );\n\n\t\tif ( attribute.normalized === true ) {\n\n\t\t\t// assuming Uint8Array\n\n\t\t\tthis.r /= 255;\n\t\t\tthis.g /= 255;\n\t\t\tthis.b /= 255;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\treturn this.getHex();\n\n\t}\n\n}\n\nColor.NAMES = _colorKeywords;\n\nColor.prototype.isColor = true;\nColor.prototype.r = 1;\nColor.prototype.g = 1;\nColor.prototype.b = 1;\n\n/**\n * parameters = {\n * color: ,\n * opacity: ,\n * map: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * specularMap: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * combine: THREE.Multiply,\n * reflectivity: ,\n * refractionRatio: ,\n *\n * depthTest: ,\n * depthWrite: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n * }\n */\n\nclass MeshBasicMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'MeshBasicMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // emissive\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshBasicMaterial.prototype.isMeshBasicMaterial = true;\n\nconst _vector$9 = /*@__PURE__*/ new Vector3();\nconst _vector2$1 = /*@__PURE__*/ new Vector2();\n\nclass BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tif ( Array.isArray( array ) ) {\n\n\t\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t\t}\n\n\t\tthis.name = '';\n\n\t\tthis.array = array;\n\t\tthis.itemSize = itemSize;\n\t\tthis.count = array !== undefined ? array.length / itemSize : 0;\n\t\tthis.normalized = normalized === true;\n\n\t\tthis.usage = StaticDrawUsage;\n\t\tthis.updateRange = { offset: 0, count: - 1 };\n\n\t\tthis.version = 0;\n\n\t}\n\n\tonUploadCallback() {}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tsetUsage( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.itemSize = source.itemSize;\n\t\tthis.count = source.count;\n\t\tthis.normalized = source.normalized;\n\n\t\tthis.usage = source.usage;\n\n\t\treturn this;\n\n\t}\n\n\tcopyAt( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.itemSize;\n\t\tindex2 *= attribute.itemSize;\n\n\t\tfor ( let i = 0, l = this.itemSize; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcopyArray( array ) {\n\n\t\tthis.array.set( array );\n\n\t\treturn this;\n\n\t}\n\n\tcopyColorsArray( colors ) {\n\n\t\tconst array = this.array;\n\t\tlet offset = 0;\n\n\t\tfor ( let i = 0, l = colors.length; i < l; i ++ ) {\n\n\t\t\tlet color = colors[ i ];\n\n\t\t\tif ( color === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyColorsArray(): color is undefined', i );\n\t\t\t\tcolor = new Color();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = color.r;\n\t\t\tarray[ offset ++ ] = color.g;\n\t\t\tarray[ offset ++ ] = color.b;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcopyVector2sArray( vectors ) {\n\n\t\tconst array = this.array;\n\t\tlet offset = 0;\n\n\t\tfor ( let i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tlet vector = vectors[ i ];\n\n\t\t\tif ( vector === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector2sArray(): vector is undefined', i );\n\t\t\t\tvector = new Vector2();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\tarray[ offset ++ ] = vector.y;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcopyVector3sArray( vectors ) {\n\n\t\tconst array = this.array;\n\t\tlet offset = 0;\n\n\t\tfor ( let i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tlet vector = vectors[ i ];\n\n\t\t\tif ( vector === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector3sArray(): vector is undefined', i );\n\t\t\t\tvector = new Vector3();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\tarray[ offset ++ ] = vector.y;\n\t\t\tarray[ offset ++ ] = vector.z;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcopyVector4sArray( vectors ) {\n\n\t\tconst array = this.array;\n\t\tlet offset = 0;\n\n\t\tfor ( let i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tlet vector = vectors[ i ];\n\n\t\t\tif ( vector === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector4sArray(): vector is undefined', i );\n\t\t\t\tvector = new Vector4();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\tarray[ offset ++ ] = vector.y;\n\t\t\tarray[ offset ++ ] = vector.z;\n\t\t\tarray[ offset ++ ] = vector.w;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tif ( this.itemSize === 2 ) {\n\n\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t_vector2$1.fromBufferAttribute( this, i );\n\t\t\t\t_vector2$1.applyMatrix3( m );\n\n\t\t\t\tthis.setXY( i, _vector2$1.x, _vector2$1.y );\n\n\t\t\t}\n\n\t\t} else if ( this.itemSize === 3 ) {\n\n\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t_vector$9.fromBufferAttribute( this, i );\n\t\t\t\t_vector$9.applyMatrix3( m );\n\n\t\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$9.x = this.getX( i );\n\t\t\t_vector$9.y = this.getY( i );\n\t\t\t_vector$9.z = this.getZ( i );\n\n\t\t\t_vector$9.applyMatrix4( m );\n\n\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$9.x = this.getX( i );\n\t\t\t_vector$9.y = this.getY( i );\n\t\t\t_vector$9.z = this.getZ( i );\n\n\t\t\t_vector$9.applyNormalMatrix( m );\n\n\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$9.x = this.getX( i );\n\t\t\t_vector$9.y = this.getY( i );\n\t\t\t_vector$9.z = this.getZ( i );\n\n\t\t\t_vector$9.transformDirection( m );\n\n\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tset( value, offset = 0 ) {\n\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t}\n\n\tgetX( index ) {\n\n\t\treturn this.array[ index * this.itemSize ];\n\n\t}\n\n\tsetX( index, x ) {\n\n\t\tthis.array[ index * this.itemSize ] = x;\n\n\t\treturn this;\n\n\t}\n\n\tgetY( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 1 ];\n\n\t}\n\n\tsetY( index, y ) {\n\n\t\tthis.array[ index * this.itemSize + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tgetZ( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 2 ];\n\n\t}\n\n\tsetZ( index, z ) {\n\n\t\tthis.array[ index * this.itemSize + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tgetW( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 3 ];\n\n\t}\n\n\tsetW( index, w ) {\n\n\t\tthis.array[ index * this.itemSize + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetXY( index, x, y ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZ( index, x, y, z ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZW( index, x, y, z, w ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\t\tthis.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tonUpload( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.array, this.itemSize ).copy( this );\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\titemSize: this.itemSize,\n\t\t\ttype: this.array.constructor.name,\n\t\t\tarray: Array.prototype.slice.call( this.array ),\n\t\t\tnormalized: this.normalized\n\t\t};\n\n\t\tif ( this.name !== '' ) data.name = this.name;\n\t\tif ( this.usage !== StaticDrawUsage ) data.usage = this.usage;\n\t\tif ( this.updateRange.offset !== 0 || this.updateRange.count !== - 1 ) data.updateRange = this.updateRange;\n\n\t\treturn data;\n\n\t}\n\n}\n\nBufferAttribute.prototype.isBufferAttribute = true;\n\n//\n\nclass Int8BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Int8Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint8BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint8Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint8ClampedBufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint8ClampedArray( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Int16BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Int16Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint16BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint16Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Int32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Int32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Float16BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint16Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nFloat16BufferAttribute.prototype.isFloat16BufferAttribute = true;\n\nclass Float32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Float32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Float64BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Float64Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nlet _id = 0;\n\nconst _m1 = /*@__PURE__*/ new Matrix4();\nconst _obj = /*@__PURE__*/ new Object3D();\nconst _offset = /*@__PURE__*/ new Vector3();\nconst _box$1 = /*@__PURE__*/ new Box3();\nconst _boxMorphTargets = /*@__PURE__*/ new Box3();\nconst _vector$8 = /*@__PURE__*/ new Vector3();\n\nclass BufferGeometry extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tObject.defineProperty( this, 'id', { value: _id ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'BufferGeometry';\n\n\t\tthis.index = null;\n\t\tthis.attributes = {};\n\n\t\tthis.morphAttributes = {};\n\t\tthis.morphTargetsRelative = false;\n\n\t\tthis.groups = [];\n\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\tthis.drawRange = { start: 0, count: Infinity };\n\n\t\tthis.userData = {};\n\n\t}\n\n\tgetIndex() {\n\n\t\treturn this.index;\n\n\t}\n\n\tsetIndex( index ) {\n\n\t\tif ( Array.isArray( index ) ) {\n\n\t\t\tthis.index = new ( arrayMax( index ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( index, 1 );\n\n\t\t} else {\n\n\t\t\tthis.index = index;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetAttribute( name ) {\n\n\t\treturn this.attributes[ name ];\n\n\t}\n\n\tsetAttribute( name, attribute ) {\n\n\t\tthis.attributes[ name ] = attribute;\n\n\t\treturn this;\n\n\t}\n\n\tdeleteAttribute( name ) {\n\n\t\tdelete this.attributes[ name ];\n\n\t\treturn this;\n\n\t}\n\n\thasAttribute( name ) {\n\n\t\treturn this.attributes[ name ] !== undefined;\n\n\t}\n\n\taddGroup( start, count, materialIndex = 0 ) {\n\n\t\tthis.groups.push( {\n\n\t\t\tstart: start,\n\t\t\tcount: count,\n\t\t\tmaterialIndex: materialIndex\n\n\t\t} );\n\n\t}\n\n\tclearGroups() {\n\n\t\tthis.groups = [];\n\n\t}\n\n\tsetDrawRange( start, count ) {\n\n\t\tthis.drawRange.start = start;\n\t\tthis.drawRange.count = count;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tconst position = this.attributes.position;\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tposition.applyMatrix4( matrix );\n\n\t\t\tposition.needsUpdate = true;\n\n\t\t}\n\n\t\tconst normal = this.attributes.normal;\n\n\t\tif ( normal !== undefined ) {\n\n\t\t\tconst normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t\tnormal.applyNormalMatrix( normalMatrix );\n\n\t\t\tnormal.needsUpdate = true;\n\n\t\t}\n\n\t\tconst tangent = this.attributes.tangent;\n\n\t\tif ( tangent !== undefined ) {\n\n\t\t\ttangent.transformDirection( matrix );\n\n\t\t\ttangent.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyQuaternion( q ) {\n\n\t\t_m1.makeRotationFromQuaternion( q );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateX( angle ) {\n\n\t\t// rotate geometry around world x-axis\n\n\t\t_m1.makeRotationX( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateY( angle ) {\n\n\t\t// rotate geometry around world y-axis\n\n\t\t_m1.makeRotationY( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateZ( angle ) {\n\n\t\t// rotate geometry around world z-axis\n\n\t\t_m1.makeRotationZ( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( x, y, z ) {\n\n\t\t// translate geometry\n\n\t\t_m1.makeTranslation( x, y, z );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\tscale( x, y, z ) {\n\n\t\t// scale geometry\n\n\t\t_m1.makeScale( x, y, z );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\tlookAt( vector ) {\n\n\t\t_obj.lookAt( vector );\n\n\t\t_obj.updateMatrix();\n\n\t\tthis.applyMatrix4( _obj.matrix );\n\n\t\treturn this;\n\n\t}\n\n\tcenter() {\n\n\t\tthis.computeBoundingBox();\n\n\t\tthis.boundingBox.getCenter( _offset ).negate();\n\n\t\tthis.translate( _offset.x, _offset.y, _offset.z );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tconst position = [];\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tconst point = points[ i ];\n\t\t\tposition.push( point.x, point.y, point.z || 0 );\n\n\t\t}\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( position, 3 ) );\n\n\t\treturn this;\n\n\t}\n\n\tcomputeBoundingBox() {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tconst position = this.attributes.position;\n\t\tconst morphAttributesPosition = this.morphAttributes.position;\n\n\t\tif ( position && position.isGLBufferAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set \"mesh.frustumCulled\" to \"false\".', this );\n\n\t\t\tthis.boundingBox.set(\n\t\t\t\tnew Vector3( - Infinity, - Infinity, - Infinity ),\n\t\t\t\tnew Vector3( + Infinity, + Infinity, + Infinity )\n\t\t\t);\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tthis.boundingBox.setFromBufferAttribute( position );\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\t_box$1.setFromBufferAttribute( morphAttribute );\n\n\t\t\t\t\tif ( this.morphTargetsRelative ) {\n\n\t\t\t\t\t\t_vector$8.addVectors( this.boundingBox.min, _box$1.min );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector$8 );\n\n\t\t\t\t\t\t_vector$8.addVectors( this.boundingBox.max, _box$1.max );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector$8 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box$1.min );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box$1.max );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis.boundingBox.makeEmpty();\n\n\t\t}\n\n\t\tif ( isNaN( this.boundingBox.min.x ) || isNaN( this.boundingBox.min.y ) || isNaN( this.boundingBox.min.z ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingSphere() {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tconst position = this.attributes.position;\n\t\tconst morphAttributesPosition = this.morphAttributes.position;\n\n\t\tif ( position && position.isGLBufferAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set \"mesh.frustumCulled\" to \"false\".', this );\n\n\t\t\tthis.boundingSphere.set( new Vector3(), Infinity );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( position ) {\n\n\t\t\t// first, find the center of the bounding sphere\n\n\t\t\tconst center = this.boundingSphere.center;\n\n\t\t\t_box$1.setFromBufferAttribute( position );\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\t_boxMorphTargets.setFromBufferAttribute( morphAttribute );\n\n\t\t\t\t\tif ( this.morphTargetsRelative ) {\n\n\t\t\t\t\t\t_vector$8.addVectors( _box$1.min, _boxMorphTargets.min );\n\t\t\t\t\t\t_box$1.expandByPoint( _vector$8 );\n\n\t\t\t\t\t\t_vector$8.addVectors( _box$1.max, _boxMorphTargets.max );\n\t\t\t\t\t\t_box$1.expandByPoint( _vector$8 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_box$1.expandByPoint( _boxMorphTargets.min );\n\t\t\t\t\t\t_box$1.expandByPoint( _boxMorphTargets.max );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_box$1.getCenter( center );\n\n\t\t\t// second, try to find a boundingSphere with a radius smaller than the\n\t\t\t// boundingSphere of the boundingBox: sqrt(3) smaller in the best case\n\n\t\t\tlet maxRadiusSq = 0;\n\n\t\t\tfor ( let i = 0, il = position.count; i < il; i ++ ) {\n\n\t\t\t\t_vector$8.fromBufferAttribute( position, i );\n\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$8 ) );\n\n\t\t\t}\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\tconst morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t\t\t\tfor ( let j = 0, jl = morphAttribute.count; j < jl; j ++ ) {\n\n\t\t\t\t\t\t_vector$8.fromBufferAttribute( morphAttribute, j );\n\n\t\t\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t\t\t_offset.fromBufferAttribute( position, j );\n\t\t\t\t\t\t\t_vector$8.add( _offset );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$8 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.boundingSphere.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\tif ( isNaN( this.boundingSphere.radius ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcomputeTangents() {\n\n\t\tconst index = this.index;\n\t\tconst attributes = this.attributes;\n\n\t\t// based on http://www.terathon.com/code/tangent.html\n\t\t// (per vertex tangents)\n\n\t\tif ( index === null ||\n\t\t\t attributes.position === undefined ||\n\t\t\t attributes.normal === undefined ||\n\t\t\t attributes.uv === undefined ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst indices = index.array;\n\t\tconst positions = attributes.position.array;\n\t\tconst normals = attributes.normal.array;\n\t\tconst uvs = attributes.uv.array;\n\n\t\tconst nVertices = positions.length / 3;\n\n\t\tif ( attributes.tangent === undefined ) {\n\n\t\t\tthis.setAttribute( 'tangent', new BufferAttribute( new Float32Array( 4 * nVertices ), 4 ) );\n\n\t\t}\n\n\t\tconst tangents = attributes.tangent.array;\n\n\t\tconst tan1 = [], tan2 = [];\n\n\t\tfor ( let i = 0; i < nVertices; i ++ ) {\n\n\t\t\ttan1[ i ] = new Vector3();\n\t\t\ttan2[ i ] = new Vector3();\n\n\t\t}\n\n\t\tconst vA = new Vector3(),\n\t\t\tvB = new Vector3(),\n\t\t\tvC = new Vector3(),\n\n\t\t\tuvA = new Vector2(),\n\t\t\tuvB = new Vector2(),\n\t\t\tuvC = new Vector2(),\n\n\t\t\tsdir = new Vector3(),\n\t\t\ttdir = new Vector3();\n\n\t\tfunction handleTriangle( a, b, c ) {\n\n\t\t\tvA.fromArray( positions, a * 3 );\n\t\t\tvB.fromArray( positions, b * 3 );\n\t\t\tvC.fromArray( positions, c * 3 );\n\n\t\t\tuvA.fromArray( uvs, a * 2 );\n\t\t\tuvB.fromArray( uvs, b * 2 );\n\t\t\tuvC.fromArray( uvs, c * 2 );\n\n\t\t\tvB.sub( vA );\n\t\t\tvC.sub( vA );\n\n\t\t\tuvB.sub( uvA );\n\t\t\tuvC.sub( uvA );\n\n\t\t\tconst r = 1.0 / ( uvB.x * uvC.y - uvC.x * uvB.y );\n\n\t\t\t// silently ignore degenerate uv triangles having coincident or colinear vertices\n\n\t\t\tif ( ! isFinite( r ) ) return;\n\n\t\t\tsdir.copy( vB ).multiplyScalar( uvC.y ).addScaledVector( vC, - uvB.y ).multiplyScalar( r );\n\t\t\ttdir.copy( vC ).multiplyScalar( uvB.x ).addScaledVector( vB, - uvC.x ).multiplyScalar( r );\n\n\t\t\ttan1[ a ].add( sdir );\n\t\t\ttan1[ b ].add( sdir );\n\t\t\ttan1[ c ].add( sdir );\n\n\t\t\ttan2[ a ].add( tdir );\n\t\t\ttan2[ b ].add( tdir );\n\t\t\ttan2[ c ].add( tdir );\n\n\t\t}\n\n\t\tlet groups = this.groups;\n\n\t\tif ( groups.length === 0 ) {\n\n\t\t\tgroups = [ {\n\t\t\t\tstart: 0,\n\t\t\t\tcount: indices.length\n\t\t\t} ];\n\n\t\t}\n\n\t\tfor ( let i = 0, il = groups.length; i < il; ++ i ) {\n\n\t\t\tconst group = groups[ i ];\n\n\t\t\tconst start = group.start;\n\t\t\tconst count = group.count;\n\n\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\thandleTriangle(\n\t\t\t\t\tindices[ j + 0 ],\n\t\t\t\t\tindices[ j + 1 ],\n\t\t\t\t\tindices[ j + 2 ]\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst tmp = new Vector3(), tmp2 = new Vector3();\n\t\tconst n = new Vector3(), n2 = new Vector3();\n\n\t\tfunction handleVertex( v ) {\n\n\t\t\tn.fromArray( normals, v * 3 );\n\t\t\tn2.copy( n );\n\n\t\t\tconst t = tan1[ v ];\n\n\t\t\t// Gram-Schmidt orthogonalize\n\n\t\t\ttmp.copy( t );\n\t\t\ttmp.sub( n.multiplyScalar( n.dot( t ) ) ).normalize();\n\n\t\t\t// Calculate handedness\n\n\t\t\ttmp2.crossVectors( n2, t );\n\t\t\tconst test = tmp2.dot( tan2[ v ] );\n\t\t\tconst w = ( test < 0.0 ) ? - 1.0 : 1.0;\n\n\t\t\ttangents[ v * 4 ] = tmp.x;\n\t\t\ttangents[ v * 4 + 1 ] = tmp.y;\n\t\t\ttangents[ v * 4 + 2 ] = tmp.z;\n\t\t\ttangents[ v * 4 + 3 ] = w;\n\n\t\t}\n\n\t\tfor ( let i = 0, il = groups.length; i < il; ++ i ) {\n\n\t\t\tconst group = groups[ i ];\n\n\t\t\tconst start = group.start;\n\t\t\tconst count = group.count;\n\n\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\thandleVertex( indices[ j + 0 ] );\n\t\t\t\thandleVertex( indices[ j + 1 ] );\n\t\t\t\thandleVertex( indices[ j + 2 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcomputeVertexNormals() {\n\n\t\tconst index = this.index;\n\t\tconst positionAttribute = this.getAttribute( 'position' );\n\n\t\tif ( positionAttribute !== undefined ) {\n\n\t\t\tlet normalAttribute = this.getAttribute( 'normal' );\n\n\t\t\tif ( normalAttribute === undefined ) {\n\n\t\t\t\tnormalAttribute = new BufferAttribute( new Float32Array( positionAttribute.count * 3 ), 3 );\n\t\t\t\tthis.setAttribute( 'normal', normalAttribute );\n\n\t\t\t} else {\n\n\t\t\t\t// reset existing normals to zero\n\n\t\t\t\tfor ( let i = 0, il = normalAttribute.count; i < il; i ++ ) {\n\n\t\t\t\t\tnormalAttribute.setXYZ( i, 0, 0, 0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst pA = new Vector3(), pB = new Vector3(), pC = new Vector3();\n\t\t\tconst nA = new Vector3(), nB = new Vector3(), nC = new Vector3();\n\t\t\tconst cb = new Vector3(), ab = new Vector3();\n\n\t\t\t// indexed elements\n\n\t\t\tif ( index ) {\n\n\t\t\t\tfor ( let i = 0, il = index.count; i < il; i += 3 ) {\n\n\t\t\t\t\tconst vA = index.getX( i + 0 );\n\t\t\t\t\tconst vB = index.getX( i + 1 );\n\t\t\t\t\tconst vC = index.getX( i + 2 );\n\n\t\t\t\t\tpA.fromBufferAttribute( positionAttribute, vA );\n\t\t\t\t\tpB.fromBufferAttribute( positionAttribute, vB );\n\t\t\t\t\tpC.fromBufferAttribute( positionAttribute, vC );\n\n\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tnA.fromBufferAttribute( normalAttribute, vA );\n\t\t\t\t\tnB.fromBufferAttribute( normalAttribute, vB );\n\t\t\t\t\tnC.fromBufferAttribute( normalAttribute, vC );\n\n\t\t\t\t\tnA.add( cb );\n\t\t\t\t\tnB.add( cb );\n\t\t\t\t\tnC.add( cb );\n\n\t\t\t\t\tnormalAttribute.setXYZ( vA, nA.x, nA.y, nA.z );\n\t\t\t\t\tnormalAttribute.setXYZ( vB, nB.x, nB.y, nB.z );\n\t\t\t\t\tnormalAttribute.setXYZ( vC, nC.x, nC.y, nC.z );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// non-indexed elements (unconnected triangle soup)\n\n\t\t\t\tfor ( let i = 0, il = positionAttribute.count; i < il; i += 3 ) {\n\n\t\t\t\t\tpA.fromBufferAttribute( positionAttribute, i + 0 );\n\t\t\t\t\tpB.fromBufferAttribute( positionAttribute, i + 1 );\n\t\t\t\t\tpC.fromBufferAttribute( positionAttribute, i + 2 );\n\n\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tnormalAttribute.setXYZ( i + 0, cb.x, cb.y, cb.z );\n\t\t\t\t\tnormalAttribute.setXYZ( i + 1, cb.x, cb.y, cb.z );\n\t\t\t\t\tnormalAttribute.setXYZ( i + 2, cb.x, cb.y, cb.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.normalizeNormals();\n\n\t\t\tnormalAttribute.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\tmerge( geometry, offset ) {\n\n\t\tif ( ! ( geometry && geometry.isBufferGeometry ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.', geometry );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( offset === undefined ) {\n\n\t\t\toffset = 0;\n\n\t\t\tconsole.warn(\n\t\t\t\t'THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. '\n\t\t\t\t+ 'Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.'\n\t\t\t);\n\n\t\t}\n\n\t\tconst attributes = this.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tif ( geometry.attributes[ key ] === undefined ) continue;\n\n\t\t\tconst attribute1 = attributes[ key ];\n\t\t\tconst attributeArray1 = attribute1.array;\n\n\t\t\tconst attribute2 = geometry.attributes[ key ];\n\t\t\tconst attributeArray2 = attribute2.array;\n\n\t\t\tconst attributeOffset = attribute2.itemSize * offset;\n\t\t\tconst length = Math.min( attributeArray2.length, attributeArray1.length - attributeOffset );\n\n\t\t\tfor ( let i = 0, j = attributeOffset; i < length; i ++, j ++ ) {\n\n\t\t\t\tattributeArray1[ j ] = attributeArray2[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tnormalizeNormals() {\n\n\t\tconst normals = this.attributes.normal;\n\n\t\tfor ( let i = 0, il = normals.count; i < il; i ++ ) {\n\n\t\t\t_vector$8.fromBufferAttribute( normals, i );\n\n\t\t\t_vector$8.normalize();\n\n\t\t\tnormals.setXYZ( i, _vector$8.x, _vector$8.y, _vector$8.z );\n\n\t\t}\n\n\t}\n\n\ttoNonIndexed() {\n\n\t\tfunction convertBufferAttribute( attribute, indices ) {\n\n\t\t\tconst array = attribute.array;\n\t\t\tconst itemSize = attribute.itemSize;\n\t\t\tconst normalized = attribute.normalized;\n\n\t\t\tconst array2 = new array.constructor( indices.length * itemSize );\n\n\t\t\tlet index = 0, index2 = 0;\n\n\t\t\tfor ( let i = 0, l = indices.length; i < l; i ++ ) {\n\n\t\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\tindex = indices[ i ] * attribute.data.stride + attribute.offset;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tindex = indices[ i ] * itemSize;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let j = 0; j < itemSize; j ++ ) {\n\n\t\t\t\t\tarray2[ index2 ++ ] = array[ index ++ ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new BufferAttribute( array2, itemSize, normalized );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.index === null ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed.' );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst geometry2 = new BufferGeometry();\n\n\t\tconst indices = this.index.array;\n\t\tconst attributes = this.attributes;\n\n\t\t// attributes\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tconst attribute = attributes[ name ];\n\n\t\t\tconst newAttribute = convertBufferAttribute( attribute, indices );\n\n\t\t\tgeometry2.setAttribute( name, newAttribute );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tconst morphAttributes = this.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst morphArray = [];\n\t\t\tconst morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( let i = 0, il = morphAttribute.length; i < il; i ++ ) {\n\n\t\t\t\tconst attribute = morphAttribute[ i ];\n\n\t\t\t\tconst newAttribute = convertBufferAttribute( attribute, indices );\n\n\t\t\t\tmorphArray.push( newAttribute );\n\n\t\t\t}\n\n\t\t\tgeometry2.morphAttributes[ name ] = morphArray;\n\n\t\t}\n\n\t\tgeometry2.morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t// groups\n\n\t\tconst groups = this.groups;\n\n\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tconst group = groups[ i ];\n\t\t\tgeometry2.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\treturn geometry2;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'BufferGeometry',\n\t\t\t\tgenerator: 'BufferGeometry.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard BufferGeometry serialization\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\t\tif ( this.name !== '' ) data.name = this.name;\n\t\tif ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData;\n\n\t\tif ( this.parameters !== undefined ) {\n\n\t\t\tconst parameters = this.parameters;\n\n\t\t\tfor ( const key in parameters ) {\n\n\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\t// for simplicity the code assumes attributes are not shared across geometries, see #15811\n\n\t\tdata.data = { attributes: {} };\n\n\t\tconst index = this.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tdata.data.index = {\n\t\t\t\ttype: index.array.constructor.name,\n\t\t\t\tarray: Array.prototype.slice.call( index.array )\n\t\t\t};\n\n\t\t}\n\n\t\tconst attributes = this.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\n\t\t\tdata.data.attributes[ key ] = attribute.toJSON( data.data );\n\n\t\t}\n\n\t\tconst morphAttributes = {};\n\t\tlet hasMorphAttributes = false;\n\n\t\tfor ( const key in this.morphAttributes ) {\n\n\t\t\tconst attributeArray = this.morphAttributes[ key ];\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0, il = attributeArray.length; i < il; i ++ ) {\n\n\t\t\t\tconst attribute = attributeArray[ i ];\n\n\t\t\t\tarray.push( attribute.toJSON( data.data ) );\n\n\t\t\t}\n\n\t\t\tif ( array.length > 0 ) {\n\n\t\t\t\tmorphAttributes[ key ] = array;\n\n\t\t\t\thasMorphAttributes = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( hasMorphAttributes ) {\n\n\t\t\tdata.data.morphAttributes = morphAttributes;\n\t\t\tdata.data.morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t}\n\n\t\tconst groups = this.groups;\n\n\t\tif ( groups.length > 0 ) {\n\n\t\t\tdata.data.groups = JSON.parse( JSON.stringify( groups ) );\n\n\t\t}\n\n\t\tconst boundingSphere = this.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tdata.data.boundingSphere = {\n\t\t\t\tcenter: boundingSphere.center.toArray(),\n\t\t\t\tradius: boundingSphere.radius\n\t\t\t};\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tclone() {\n\n\t\t return new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\t// reset\n\n\t\tthis.index = null;\n\t\tthis.attributes = {};\n\t\tthis.morphAttributes = {};\n\t\tthis.groups = [];\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// used for storing cloned, shared data\n\n\t\tconst data = {};\n\n\t\t// name\n\n\t\tthis.name = source.name;\n\n\t\t// index\n\n\t\tconst index = source.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tthis.setIndex( index.clone( data ) );\n\n\t\t}\n\n\t\t// attributes\n\n\t\tconst attributes = source.attributes;\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tconst attribute = attributes[ name ];\n\t\t\tthis.setAttribute( name, attribute.clone( data ) );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tconst morphAttributes = source.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst array = [];\n\t\t\tconst morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( let i = 0, l = morphAttribute.length; i < l; i ++ ) {\n\n\t\t\t\tarray.push( morphAttribute[ i ].clone( data ) );\n\n\t\t\t}\n\n\t\t\tthis.morphAttributes[ name ] = array;\n\n\t\t}\n\n\t\tthis.morphTargetsRelative = source.morphTargetsRelative;\n\n\t\t// groups\n\n\t\tconst groups = source.groups;\n\n\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tconst group = groups[ i ];\n\t\t\tthis.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\t// bounding box\n\n\t\tconst boundingBox = source.boundingBox;\n\n\t\tif ( boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t}\n\n\t\t// bounding sphere\n\n\t\tconst boundingSphere = source.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t}\n\n\t\t// draw range\n\n\t\tthis.drawRange.start = source.drawRange.start;\n\t\tthis.drawRange.count = source.drawRange.count;\n\n\t\t// user data\n\n\t\tthis.userData = source.userData;\n\n\t\t// geometry generator parameters\n\n\t\tif ( source.parameters !== undefined ) this.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n}\n\nBufferGeometry.prototype.isBufferGeometry = true;\n\nconst _inverseMatrix$2 = /*@__PURE__*/ new Matrix4();\nconst _ray$2 = /*@__PURE__*/ new Ray();\nconst _sphere$3 = /*@__PURE__*/ new Sphere();\n\nconst _vA$1 = /*@__PURE__*/ new Vector3();\nconst _vB$1 = /*@__PURE__*/ new Vector3();\nconst _vC$1 = /*@__PURE__*/ new Vector3();\n\nconst _tempA = /*@__PURE__*/ new Vector3();\nconst _tempB = /*@__PURE__*/ new Vector3();\nconst _tempC = /*@__PURE__*/ new Vector3();\n\nconst _morphA = /*@__PURE__*/ new Vector3();\nconst _morphB = /*@__PURE__*/ new Vector3();\nconst _morphC = /*@__PURE__*/ new Vector3();\n\nconst _uvA$1 = /*@__PURE__*/ new Vector2();\nconst _uvB$1 = /*@__PURE__*/ new Vector2();\nconst _uvC$1 = /*@__PURE__*/ new Vector2();\n\nconst _intersectionPoint = /*@__PURE__*/ new Vector3();\nconst _intersectionPointWorld = /*@__PURE__*/ new Vector3();\n\nclass Mesh extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new MeshBasicMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Mesh';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tif ( source.morphTargetInfluences !== undefined ) {\n\n\t\t\tthis.morphTargetInfluences = source.morphTargetInfluences.slice();\n\n\t\t}\n\n\t\tif ( source.morphTargetDictionary !== undefined ) {\n\n\t\t\tthis.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary );\n\n\t\t}\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst material = this.material;\n\t\tconst matrixWorld = this.matrixWorld;\n\n\t\tif ( material === undefined ) return;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$3.copy( geometry.boundingSphere );\n\t\t_sphere$3.applyMatrix4( matrixWorld );\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$3 ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix$2.copy( matrixWorld ).invert();\n\t\t_ray$2.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$2 );\n\n\t\t// Check boundingBox before continuing\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tif ( _ray$2.intersectsBox( geometry.boundingBox ) === false ) return;\n\n\t\t}\n\n\t\tlet intersection;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst position = geometry.attributes.position;\n\t\t\tconst morphPosition = geometry.morphAttributes.position;\n\t\t\tconst morphTargetsRelative = geometry.morphTargetsRelative;\n\t\t\tconst uv = geometry.attributes.uv;\n\t\t\tconst uv2 = geometry.attributes.uv2;\n\t\t\tconst groups = geometry.groups;\n\t\t\tconst drawRange = geometry.drawRange;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\t// indexed buffer geometry\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\t\tconst end = Math.min( index.count, Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) ) );\n\n\t\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\t\tconst a = index.getX( j );\n\t\t\t\t\t\t\tconst b = index.getX( j + 1 );\n\t\t\t\t\t\t\tconst c = index.getX( j + 2 );\n\n\t\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, groupMaterial, raycaster, _ray$2, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\t\tconst a = index.getX( i );\n\t\t\t\t\t\tconst b = index.getX( i + 1 );\n\t\t\t\t\t\tconst c = index.getX( i + 2 );\n\n\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, material, raycaster, _ray$2, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( position !== undefined ) {\n\n\t\t\t\t// non-indexed buffer geometry\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\t\tconst end = Math.min( position.count, Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) ) );\n\n\t\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\t\tconst a = j;\n\t\t\t\t\t\t\tconst b = j + 1;\n\t\t\t\t\t\t\tconst c = j + 2;\n\n\t\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, groupMaterial, raycaster, _ray$2, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\t\tconst end = Math.min( position.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\t\tconst a = i;\n\t\t\t\t\t\tconst b = i + 1;\n\t\t\t\t\t\tconst c = i + 2;\n\n\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, material, raycaster, _ray$2, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconsole.error( 'THREE.Mesh.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t}\n\n}\n\nMesh.prototype.isMesh = true;\n\nfunction checkIntersection( object, material, raycaster, ray, pA, pB, pC, point ) {\n\n\tlet intersect;\n\n\tif ( material.side === BackSide ) {\n\n\t\tintersect = ray.intersectTriangle( pC, pB, pA, true, point );\n\n\t} else {\n\n\t\tintersect = ray.intersectTriangle( pA, pB, pC, material.side !== DoubleSide, point );\n\n\t}\n\n\tif ( intersect === null ) return null;\n\n\t_intersectionPointWorld.copy( point );\n\t_intersectionPointWorld.applyMatrix4( object.matrixWorld );\n\n\tconst distance = raycaster.ray.origin.distanceTo( _intersectionPointWorld );\n\n\tif ( distance < raycaster.near || distance > raycaster.far ) return null;\n\n\treturn {\n\t\tdistance: distance,\n\t\tpoint: _intersectionPointWorld.clone(),\n\t\tobject: object\n\t};\n\n}\n\nfunction checkBufferGeometryIntersection( object, material, raycaster, ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c ) {\n\n\t_vA$1.fromBufferAttribute( position, a );\n\t_vB$1.fromBufferAttribute( position, b );\n\t_vC$1.fromBufferAttribute( position, c );\n\n\tconst morphInfluences = object.morphTargetInfluences;\n\n\tif ( morphPosition && morphInfluences ) {\n\n\t\t_morphA.set( 0, 0, 0 );\n\t\t_morphB.set( 0, 0, 0 );\n\t\t_morphC.set( 0, 0, 0 );\n\n\t\tfor ( let i = 0, il = morphPosition.length; i < il; i ++ ) {\n\n\t\t\tconst influence = morphInfluences[ i ];\n\t\t\tconst morphAttribute = morphPosition[ i ];\n\n\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t_tempA.fromBufferAttribute( morphAttribute, a );\n\t\t\t_tempB.fromBufferAttribute( morphAttribute, b );\n\t\t\t_tempC.fromBufferAttribute( morphAttribute, c );\n\n\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t_morphA.addScaledVector( _tempA, influence );\n\t\t\t\t_morphB.addScaledVector( _tempB, influence );\n\t\t\t\t_morphC.addScaledVector( _tempC, influence );\n\n\t\t\t} else {\n\n\t\t\t\t_morphA.addScaledVector( _tempA.sub( _vA$1 ), influence );\n\t\t\t\t_morphB.addScaledVector( _tempB.sub( _vB$1 ), influence );\n\t\t\t\t_morphC.addScaledVector( _tempC.sub( _vC$1 ), influence );\n\n\t\t\t}\n\n\t\t}\n\n\t\t_vA$1.add( _morphA );\n\t\t_vB$1.add( _morphB );\n\t\t_vC$1.add( _morphC );\n\n\t}\n\n\tif ( object.isSkinnedMesh ) {\n\n\t\tobject.boneTransform( a, _vA$1 );\n\t\tobject.boneTransform( b, _vB$1 );\n\t\tobject.boneTransform( c, _vC$1 );\n\n\t}\n\n\tconst intersection = checkIntersection( object, material, raycaster, ray, _vA$1, _vB$1, _vC$1, _intersectionPoint );\n\n\tif ( intersection ) {\n\n\t\tif ( uv ) {\n\n\t\t\t_uvA$1.fromBufferAttribute( uv, a );\n\t\t\t_uvB$1.fromBufferAttribute( uv, b );\n\t\t\t_uvC$1.fromBufferAttribute( uv, c );\n\n\t\t\tintersection.uv = Triangle.getUV( _intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() );\n\n\t\t}\n\n\t\tif ( uv2 ) {\n\n\t\t\t_uvA$1.fromBufferAttribute( uv2, a );\n\t\t\t_uvB$1.fromBufferAttribute( uv2, b );\n\t\t\t_uvC$1.fromBufferAttribute( uv2, c );\n\n\t\t\tintersection.uv2 = Triangle.getUV( _intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() );\n\n\t\t}\n\n\t\tconst face = {\n\t\t\ta: a,\n\t\t\tb: b,\n\t\t\tc: c,\n\t\t\tnormal: new Vector3(),\n\t\t\tmaterialIndex: 0\n\t\t};\n\n\t\tTriangle.getNormal( _vA$1, _vB$1, _vC$1, face.normal );\n\n\t\tintersection.face = face;\n\n\t}\n\n\treturn intersection;\n\n}\n\nclass BoxGeometry extends BufferGeometry {\n\n\tconstructor( width = 1, height = 1, depth = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'BoxGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\tdepth: depth,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tdepthSegments: depthSegments\n\t\t};\n\n\t\tconst scope = this;\n\n\t\t// segments\n\n\t\twidthSegments = Math.floor( widthSegments );\n\t\theightSegments = Math.floor( heightSegments );\n\t\tdepthSegments = Math.floor( depthSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet numberOfVertices = 0;\n\t\tlet groupStart = 0;\n\n\t\t// build each side of the box geometry\n\n\t\tbuildPlane( 'z', 'y', 'x', - 1, - 1, depth, height, width, depthSegments, heightSegments, 0 ); // px\n\t\tbuildPlane( 'z', 'y', 'x', 1, - 1, depth, height, - width, depthSegments, heightSegments, 1 ); // nx\n\t\tbuildPlane( 'x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2 ); // py\n\t\tbuildPlane( 'x', 'z', 'y', 1, - 1, width, depth, - height, widthSegments, depthSegments, 3 ); // ny\n\t\tbuildPlane( 'x', 'y', 'z', 1, - 1, width, height, depth, widthSegments, heightSegments, 4 ); // pz\n\t\tbuildPlane( 'x', 'y', 'z', - 1, - 1, width, height, - depth, widthSegments, heightSegments, 5 ); // nz\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\tfunction buildPlane( u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex ) {\n\n\t\t\tconst segmentWidth = width / gridX;\n\t\t\tconst segmentHeight = height / gridY;\n\n\t\t\tconst widthHalf = width / 2;\n\t\t\tconst heightHalf = height / 2;\n\t\t\tconst depthHalf = depth / 2;\n\n\t\t\tconst gridX1 = gridX + 1;\n\t\t\tconst gridY1 = gridY + 1;\n\n\t\t\tlet vertexCounter = 0;\n\t\t\tlet groupCount = 0;\n\n\t\t\tconst vector = new Vector3();\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( let iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\t\tconst y = iy * segmentHeight - heightHalf;\n\n\t\t\t\tfor ( let ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\t\tconst x = ix * segmentWidth - widthHalf;\n\n\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\tvector[ u ] = x * udir;\n\t\t\t\t\tvector[ v ] = y * vdir;\n\t\t\t\t\tvector[ w ] = depthHalf;\n\n\t\t\t\t\t// now apply vector to vertex buffer\n\n\t\t\t\t\tvertices.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\tvector[ u ] = 0;\n\t\t\t\t\tvector[ v ] = 0;\n\t\t\t\t\tvector[ w ] = depth > 0 ? 1 : - 1;\n\n\t\t\t\t\t// now apply vector to normal buffer\n\n\t\t\t\t\tnormals.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t// uvs\n\n\t\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t\t\t// counters\n\n\t\t\t\t\tvertexCounter += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// indices\n\n\t\t\t// 1. you need three indices to draw a single face\n\t\t\t// 2. a single segment consists of two faces\n\t\t\t// 3. so we need to generate six (2*3) indices per segment\n\n\t\t\tfor ( let iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\t\tfor ( let ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\t\tconst a = numberOfVertices + ix + gridX1 * iy;\n\t\t\t\t\tconst b = numberOfVertices + ix + gridX1 * ( iy + 1 );\n\t\t\t\t\tconst c = numberOfVertices + ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\t\tconst d = numberOfVertices + ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t\t// increase counter\n\n\t\t\t\t\tgroupCount += 6;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, materialIndex );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t\t// update total number of vertices\n\n\t\t\tnumberOfVertices += vertexCounter;\n\n\t\t}\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new BoxGeometry( data.width, data.height, data.depth, data.widthSegments, data.heightSegments, data.depthSegments );\n\n\t}\n\n}\n\n/**\n * Uniform Utilities\n */\n\nfunction cloneUniforms( src ) {\n\n\tconst dst = {};\n\n\tfor ( const u in src ) {\n\n\t\tdst[ u ] = {};\n\n\t\tfor ( const p in src[ u ] ) {\n\n\t\t\tconst property = src[ u ][ p ];\n\n\t\t\tif ( property && ( property.isColor ||\n\t\t\t\tproperty.isMatrix3 || property.isMatrix4 ||\n\t\t\t\tproperty.isVector2 || property.isVector3 || property.isVector4 ||\n\t\t\t\tproperty.isTexture || property.isQuaternion ) ) {\n\n\t\t\t\tdst[ u ][ p ] = property.clone();\n\n\t\t\t} else if ( Array.isArray( property ) ) {\n\n\t\t\t\tdst[ u ][ p ] = property.slice();\n\n\t\t\t} else {\n\n\t\t\t\tdst[ u ][ p ] = property;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn dst;\n\n}\n\nfunction mergeUniforms( uniforms ) {\n\n\tconst merged = {};\n\n\tfor ( let u = 0; u < uniforms.length; u ++ ) {\n\n\t\tconst tmp = cloneUniforms( uniforms[ u ] );\n\n\t\tfor ( const p in tmp ) {\n\n\t\t\tmerged[ p ] = tmp[ p ];\n\n\t\t}\n\n\t}\n\n\treturn merged;\n\n}\n\n// Legacy\n\nconst UniformsUtils = { clone: cloneUniforms, merge: mergeUniforms };\n\nvar default_vertex = \"void main() {\\n\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n}\";\n\nvar default_fragment = \"void main() {\\n\\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\\n}\";\n\n/**\n * parameters = {\n * defines: { \"label\" : \"value\" },\n * uniforms: { \"parameter1\": { value: 1.0 }, \"parameter2\": { value2: 2 } },\n *\n * fragmentShader: ,\n * vertexShader: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * lights: \n * }\n */\n\nclass ShaderMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ShaderMaterial';\n\n\t\tthis.defines = {};\n\t\tthis.uniforms = {};\n\n\t\tthis.vertexShader = default_vertex;\n\t\tthis.fragmentShader = default_fragment;\n\n\t\tthis.linewidth = 1;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.fog = false; // set to use scene fog\n\t\tthis.lights = false; // set to use scene lights\n\t\tthis.clipping = false; // set to use user-defined clipping planes\n\n\t\tthis.extensions = {\n\t\t\tderivatives: false, // set to use derivatives\n\t\t\tfragDepth: false, // set to use fragment depth values\n\t\t\tdrawBuffers: false, // set to use draw buffers\n\t\t\tshaderTextureLOD: false // set to use shader texture LOD\n\t\t};\n\n\t\t// When rendered geometry doesn't include these attributes but the material does,\n\t\t// use these default values in WebGL. This avoids errors when buffer data is missing.\n\t\tthis.defaultAttributeValues = {\n\t\t\t'color': [ 1, 1, 1 ],\n\t\t\t'uv': [ 0, 0 ],\n\t\t\t'uv2': [ 0, 0 ]\n\t\t};\n\n\t\tthis.index0AttributeName = undefined;\n\t\tthis.uniformsNeedUpdate = false;\n\n\t\tthis.glslVersion = null;\n\n\t\tif ( parameters !== undefined ) {\n\n\t\t\tif ( parameters.attributes !== undefined ) {\n\n\t\t\t\tconsole.error( 'THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t\tthis.setValues( parameters );\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.fragmentShader = source.fragmentShader;\n\t\tthis.vertexShader = source.vertexShader;\n\n\t\tthis.uniforms = cloneUniforms( source.uniforms );\n\n\t\tthis.defines = Object.assign( {}, source.defines );\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\tthis.lights = source.lights;\n\t\tthis.clipping = source.clipping;\n\n\t\tthis.extensions = Object.assign( {}, source.extensions );\n\n\t\tthis.glslVersion = source.glslVersion;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.glslVersion = this.glslVersion;\n\t\tdata.uniforms = {};\n\n\t\tfor ( const name in this.uniforms ) {\n\n\t\t\tconst uniform = this.uniforms[ name ];\n\t\t\tconst value = uniform.value;\n\n\t\t\tif ( value && value.isTexture ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 't',\n\t\t\t\t\tvalue: value.toJSON( meta ).uuid\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isColor ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'c',\n\t\t\t\t\tvalue: value.getHex()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector2 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v2',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector3 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v3',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector4 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v4',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isMatrix3 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'm3',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isMatrix4 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'm4',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\tvalue: value\n\t\t\t\t};\n\n\t\t\t\t// note: the array variants v2v, v3v, v4v, m4v and tv are not supported so far\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( Object.keys( this.defines ).length > 0 ) data.defines = this.defines;\n\n\t\tdata.vertexShader = this.vertexShader;\n\t\tdata.fragmentShader = this.fragmentShader;\n\n\t\tconst extensions = {};\n\n\t\tfor ( const key in this.extensions ) {\n\n\t\t\tif ( this.extensions[ key ] === true ) extensions[ key ] = true;\n\n\t\t}\n\n\t\tif ( Object.keys( extensions ).length > 0 ) data.extensions = extensions;\n\n\t\treturn data;\n\n\t}\n\n}\n\nShaderMaterial.prototype.isShaderMaterial = true;\n\nclass Camera extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'Camera';\n\n\t\tthis.matrixWorldInverse = new Matrix4();\n\n\t\tthis.projectionMatrix = new Matrix4();\n\t\tthis.projectionMatrixInverse = new Matrix4();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.matrixWorldInverse.copy( source.matrixWorldInverse );\n\n\t\tthis.projectionMatrix.copy( source.projectionMatrix );\n\t\tthis.projectionMatrixInverse.copy( source.projectionMatrixInverse );\n\n\t\treturn this;\n\n\t}\n\n\tgetWorldDirection( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tconst e = this.matrixWorld.elements;\n\n\t\treturn target.set( - e[ 8 ], - e[ 9 ], - e[ 10 ] ).normalize();\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tthis.matrixWorldInverse.copy( this.matrixWorld ).invert();\n\n\t}\n\n\tupdateWorldMatrix( updateParents, updateChildren ) {\n\n\t\tsuper.updateWorldMatrix( updateParents, updateChildren );\n\n\t\tthis.matrixWorldInverse.copy( this.matrixWorld ).invert();\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nCamera.prototype.isCamera = true;\n\nclass PerspectiveCamera extends Camera {\n\n\tconstructor( fov = 50, aspect = 1, near = 0.1, far = 2000 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PerspectiveCamera';\n\n\t\tthis.fov = fov;\n\t\tthis.zoom = 1;\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\t\tthis.focus = 10;\n\n\t\tthis.aspect = aspect;\n\t\tthis.view = null;\n\n\t\tthis.filmGauge = 35;\t// width of the film (default in millimeters)\n\t\tthis.filmOffset = 0;\t// horizontal film offset (same unit as gauge)\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.fov = source.fov;\n\t\tthis.zoom = source.zoom;\n\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\t\tthis.focus = source.focus;\n\n\t\tthis.aspect = source.aspect;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\tthis.filmGauge = source.filmGauge;\n\t\tthis.filmOffset = source.filmOffset;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the FOV by focal length in respect to the current .filmGauge.\n\t *\n\t * The default film gauge is 35, so that the focal length can be specified for\n\t * a 35mm (full frame) camera.\n\t *\n\t * Values for focal length and film gauge must have the same unit.\n\t */\n\tsetFocalLength( focalLength ) {\n\n\t\t/** see {@link http://www.bobatkins.com/photography/technical/field_of_view.html} */\n\t\tconst vExtentSlope = 0.5 * this.getFilmHeight() / focalLength;\n\n\t\tthis.fov = RAD2DEG * 2 * Math.atan( vExtentSlope );\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\t/**\n\t * Calculates the focal length from the current .fov and .filmGauge.\n\t */\n\tgetFocalLength() {\n\n\t\tconst vExtentSlope = Math.tan( DEG2RAD * 0.5 * this.fov );\n\n\t\treturn 0.5 * this.getFilmHeight() / vExtentSlope;\n\n\t}\n\n\tgetEffectiveFOV() {\n\n\t\treturn RAD2DEG * 2 * Math.atan(\n\t\t\tMath.tan( DEG2RAD * 0.5 * this.fov ) / this.zoom );\n\n\t}\n\n\tgetFilmWidth() {\n\n\t\t// film not completely covered in portrait format (aspect < 1)\n\t\treturn this.filmGauge * Math.min( this.aspect, 1 );\n\n\t}\n\n\tgetFilmHeight() {\n\n\t\t// film not completely covered in landscape format (aspect > 1)\n\t\treturn this.filmGauge / Math.max( this.aspect, 1 );\n\n\t}\n\n\t/**\n\t * Sets an offset in a larger frustum. This is useful for multi-window or\n\t * multi-monitor/multi-machine setups.\n\t *\n\t * For example, if you have 3x2 monitors and each monitor is 1920x1080 and\n\t * the monitors are in grid like this\n\t *\n\t * +---+---+---+\n\t * | A | B | C |\n\t * +---+---+---+\n\t * | D | E | F |\n\t * +---+---+---+\n\t *\n\t * then for each monitor you would call it like this\n\t *\n\t * const w = 1920;\n\t * const h = 1080;\n\t * const fullWidth = w * 3;\n\t * const fullHeight = h * 2;\n\t *\n\t * --A--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 0, w, h );\n\t * --B--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 0, w, h );\n\t * --C--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 0, w, h );\n\t * --D--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 1, w, h );\n\t * --E--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 1, w, h );\n\t * --F--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 1, w, h );\n\t *\n\t * Note there is no reason monitors have to be the same size or in a grid.\n\t */\n\tsetViewOffset( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tthis.aspect = fullWidth / fullHeight;\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tclearViewOffset() {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tupdateProjectionMatrix() {\n\n\t\tconst near = this.near;\n\t\tlet top = near * Math.tan( DEG2RAD * 0.5 * this.fov ) / this.zoom;\n\t\tlet height = 2 * top;\n\t\tlet width = this.aspect * height;\n\t\tlet left = - 0.5 * width;\n\t\tconst view = this.view;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tconst fullWidth = view.fullWidth,\n\t\t\t\tfullHeight = view.fullHeight;\n\n\t\t\tleft += view.offsetX * width / fullWidth;\n\t\t\ttop -= view.offsetY * height / fullHeight;\n\t\t\twidth *= view.width / fullWidth;\n\t\t\theight *= view.height / fullHeight;\n\n\t\t}\n\n\t\tconst skew = this.filmOffset;\n\t\tif ( skew !== 0 ) left += near * skew / this.getFilmWidth();\n\n\t\tthis.projectionMatrix.makePerspective( left, left + width, top, top - height, near, this.far );\n\n\t\tthis.projectionMatrixInverse.copy( this.projectionMatrix ).invert();\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.fov = this.fov;\n\t\tdata.object.zoom = this.zoom;\n\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\t\tdata.object.focus = this.focus;\n\n\t\tdata.object.aspect = this.aspect;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\tdata.object.filmGauge = this.filmGauge;\n\t\tdata.object.filmOffset = this.filmOffset;\n\n\t\treturn data;\n\n\t}\n\n}\n\nPerspectiveCamera.prototype.isPerspectiveCamera = true;\n\nconst fov = 90, aspect = 1;\n\nclass CubeCamera extends Object3D {\n\n\tconstructor( near, far, renderTarget ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CubeCamera';\n\n\t\tif ( renderTarget.isWebGLCubeRenderTarget !== true ) {\n\n\t\t\tconsole.error( 'THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.renderTarget = renderTarget;\n\n\t\tconst cameraPX = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPX.layers = this.layers;\n\t\tcameraPX.up.set( 0, - 1, 0 );\n\t\tcameraPX.lookAt( new Vector3( 1, 0, 0 ) );\n\t\tthis.add( cameraPX );\n\n\t\tconst cameraNX = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNX.layers = this.layers;\n\t\tcameraNX.up.set( 0, - 1, 0 );\n\t\tcameraNX.lookAt( new Vector3( - 1, 0, 0 ) );\n\t\tthis.add( cameraNX );\n\n\t\tconst cameraPY = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPY.layers = this.layers;\n\t\tcameraPY.up.set( 0, 0, 1 );\n\t\tcameraPY.lookAt( new Vector3( 0, 1, 0 ) );\n\t\tthis.add( cameraPY );\n\n\t\tconst cameraNY = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNY.layers = this.layers;\n\t\tcameraNY.up.set( 0, 0, - 1 );\n\t\tcameraNY.lookAt( new Vector3( 0, - 1, 0 ) );\n\t\tthis.add( cameraNY );\n\n\t\tconst cameraPZ = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPZ.layers = this.layers;\n\t\tcameraPZ.up.set( 0, - 1, 0 );\n\t\tcameraPZ.lookAt( new Vector3( 0, 0, 1 ) );\n\t\tthis.add( cameraPZ );\n\n\t\tconst cameraNZ = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNZ.layers = this.layers;\n\t\tcameraNZ.up.set( 0, - 1, 0 );\n\t\tcameraNZ.lookAt( new Vector3( 0, 0, - 1 ) );\n\t\tthis.add( cameraNZ );\n\n\t}\n\n\tupdate( renderer, scene ) {\n\n\t\tif ( this.parent === null ) this.updateMatrixWorld();\n\n\t\tconst renderTarget = this.renderTarget;\n\n\t\tconst [ cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ ] = this.children;\n\n\t\tconst currentXrEnabled = renderer.xr.enabled;\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\trenderer.xr.enabled = false;\n\n\t\tconst generateMipmaps = renderTarget.texture.generateMipmaps;\n\n\t\trenderTarget.texture.generateMipmaps = false;\n\n\t\trenderer.setRenderTarget( renderTarget, 0 );\n\t\trenderer.render( scene, cameraPX );\n\n\t\trenderer.setRenderTarget( renderTarget, 1 );\n\t\trenderer.render( scene, cameraNX );\n\n\t\trenderer.setRenderTarget( renderTarget, 2 );\n\t\trenderer.render( scene, cameraPY );\n\n\t\trenderer.setRenderTarget( renderTarget, 3 );\n\t\trenderer.render( scene, cameraNY );\n\n\t\trenderer.setRenderTarget( renderTarget, 4 );\n\t\trenderer.render( scene, cameraPZ );\n\n\t\trenderTarget.texture.generateMipmaps = generateMipmaps;\n\n\t\trenderer.setRenderTarget( renderTarget, 5 );\n\t\trenderer.render( scene, cameraNZ );\n\n\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t\trenderer.xr.enabled = currentXrEnabled;\n\n\t}\n\n}\n\nclass CubeTexture extends Texture {\n\n\tconstructor( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) {\n\n\t\timages = images !== undefined ? images : [];\n\t\tmapping = mapping !== undefined ? mapping : CubeReflectionMapping;\n\n\t\tsuper( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\t\tthis.flipY = false;\n\n\t}\n\n\tget images() {\n\n\t\treturn this.image;\n\n\t}\n\n\tset images( value ) {\n\n\t\tthis.image = value;\n\n\t}\n\n}\n\nCubeTexture.prototype.isCubeTexture = true;\n\nclass WebGLCubeRenderTarget extends WebGLRenderTarget {\n\n\tconstructor( size, options, dummy ) {\n\n\t\tif ( Number.isInteger( options ) ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )' );\n\n\t\t\toptions = dummy;\n\n\t\t}\n\n\t\tsuper( size, size, options );\n\n\t\toptions = options || {};\n\n\t\t// By convention -- likely based on the RenderMan spec from the 1990's -- cube maps are specified by WebGL (and three.js)\n\t\t// in a coordinate system in which positive-x is to the right when looking up the positive-z axis -- in other words,\n\t\t// in a left-handed coordinate system. By continuing this convention, preexisting cube maps continued to render correctly.\n\n\t\t// three.js uses a right-handed coordinate system. So environment maps used in three.js appear to have px and nx swapped\n\t\t// and the flag isRenderTargetTexture controls this conversion. The flip is not required when using WebGLCubeRenderTarget.texture\n\t\t// as a cube texture (this is detected when isRenderTargetTexture is set to true for cube textures).\n\n\t\tthis.texture = new CubeTexture( undefined, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding );\n\t\tthis.texture.isRenderTargetTexture = true;\n\n\t\tthis.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false;\n\t\tthis.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter;\n\n\t\tthis.texture._needsFlipEnvMap = false;\n\n\t}\n\n\tfromEquirectangularTexture( renderer, texture ) {\n\n\t\tthis.texture.type = texture.type;\n\t\tthis.texture.format = RGBAFormat; // see #18859\n\t\tthis.texture.encoding = texture.encoding;\n\n\t\tthis.texture.generateMipmaps = texture.generateMipmaps;\n\t\tthis.texture.minFilter = texture.minFilter;\n\t\tthis.texture.magFilter = texture.magFilter;\n\n\t\tconst shader = {\n\n\t\t\tuniforms: {\n\t\t\t\ttEquirect: { value: null },\n\t\t\t},\n\n\t\t\tvertexShader: /* glsl */`\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t`,\n\n\t\t\tfragmentShader: /* glsl */`\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t`\n\t\t};\n\n\t\tconst geometry = new BoxGeometry( 5, 5, 5 );\n\n\t\tconst material = new ShaderMaterial( {\n\n\t\t\tname: 'CubemapFromEquirect',\n\n\t\t\tuniforms: cloneUniforms( shader.uniforms ),\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\tside: BackSide,\n\t\t\tblending: NoBlending\n\n\t\t} );\n\n\t\tmaterial.uniforms.tEquirect.value = texture;\n\n\t\tconst mesh = new Mesh( geometry, material );\n\n\t\tconst currentMinFilter = texture.minFilter;\n\n\t\t// Avoid blurred poles\n\t\tif ( texture.minFilter === LinearMipmapLinearFilter ) texture.minFilter = LinearFilter;\n\n\t\tconst camera = new CubeCamera( 1, 10, this );\n\t\tcamera.update( renderer, mesh );\n\n\t\ttexture.minFilter = currentMinFilter;\n\n\t\tmesh.geometry.dispose();\n\t\tmesh.material.dispose();\n\n\t\treturn this;\n\n\t}\n\n\tclear( renderer, color, depth, stencil ) {\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\trenderer.setRenderTarget( this, i );\n\n\t\t\trenderer.clear( color, depth, stencil );\n\n\t\t}\n\n\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t}\n\n}\n\nWebGLCubeRenderTarget.prototype.isWebGLCubeRenderTarget = true;\n\nconst _vector1 = /*@__PURE__*/ new Vector3();\nconst _vector2 = /*@__PURE__*/ new Vector3();\nconst _normalMatrix = /*@__PURE__*/ new Matrix3();\n\nclass Plane {\n\n\tconstructor( normal = new Vector3( 1, 0, 0 ), constant = 0 ) {\n\n\t\t// normal is assumed to be normalized\n\n\t\tthis.normal = normal;\n\t\tthis.constant = constant;\n\n\t}\n\n\tset( normal, constant ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = constant;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponents( x, y, z, w ) {\n\n\t\tthis.normal.set( x, y, z );\n\t\tthis.constant = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromNormalAndCoplanarPoint( normal, point ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = - point.dot( this.normal );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCoplanarPoints( a, b, c ) {\n\n\t\tconst normal = _vector1.subVectors( c, b ).cross( _vector2.subVectors( a, b ) ).normalize();\n\n\t\t// Q: should an error be thrown if normal is zero (e.g. degenerate plane)?\n\n\t\tthis.setFromNormalAndCoplanarPoint( normal, a );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( plane ) {\n\n\t\tthis.normal.copy( plane.normal );\n\t\tthis.constant = plane.constant;\n\n\t\treturn this;\n\n\t}\n\n\tnormalize() {\n\n\t\t// Note: will lead to a divide by zero if the plane is invalid.\n\n\t\tconst inverseNormalLength = 1.0 / this.normal.length();\n\t\tthis.normal.multiplyScalar( inverseNormalLength );\n\t\tthis.constant *= inverseNormalLength;\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.constant *= - 1;\n\t\tthis.normal.negate();\n\n\t\treturn this;\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn this.normal.dot( point ) + this.constant;\n\n\t}\n\n\tdistanceToSphere( sphere ) {\n\n\t\treturn this.distanceToPoint( sphere.center ) - sphere.radius;\n\n\t}\n\n\tprojectPoint( point, target ) {\n\n\t\treturn target.copy( this.normal ).multiplyScalar( - this.distanceToPoint( point ) ).add( point );\n\n\t}\n\n\tintersectLine( line, target ) {\n\n\t\tconst direction = line.delta( _vector1 );\n\n\t\tconst denominator = this.normal.dot( direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( this.distanceToPoint( line.start ) === 0 ) {\n\n\t\t\t\treturn target.copy( line.start );\n\n\t\t\t}\n\n\t\t\t// Unsure if this is the correct method to handle this case.\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst t = - ( line.start.dot( this.normal ) + this.constant ) / denominator;\n\n\t\tif ( t < 0 || t > 1 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn target.copy( direction ).multiplyScalar( t ).add( line.start );\n\n\t}\n\n\tintersectsLine( line ) {\n\n\t\t// Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it.\n\n\t\tconst startSign = this.distanceToPoint( line.start );\n\t\tconst endSign = this.distanceToPoint( line.end );\n\n\t\treturn ( startSign < 0 && endSign > 0 ) || ( endSign < 0 && startSign > 0 );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsPlane( this );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn sphere.intersectsPlane( this );\n\n\t}\n\n\tcoplanarPoint( target ) {\n\n\t\treturn target.copy( this.normal ).multiplyScalar( - this.constant );\n\n\t}\n\n\tapplyMatrix4( matrix, optionalNormalMatrix ) {\n\n\t\tconst normalMatrix = optionalNormalMatrix || _normalMatrix.getNormalMatrix( matrix );\n\n\t\tconst referencePoint = this.coplanarPoint( _vector1 ).applyMatrix4( matrix );\n\n\t\tconst normal = this.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\tthis.constant = - referencePoint.dot( normal );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.constant -= offset.dot( this.normal );\n\n\t\treturn this;\n\n\t}\n\n\tequals( plane ) {\n\n\t\treturn plane.normal.equals( this.normal ) && ( plane.constant === this.constant );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nPlane.prototype.isPlane = true;\n\nconst _sphere$2 = /*@__PURE__*/ new Sphere();\nconst _vector$7 = /*@__PURE__*/ new Vector3();\n\nclass Frustum {\n\n\tconstructor( p0 = new Plane(), p1 = new Plane(), p2 = new Plane(), p3 = new Plane(), p4 = new Plane(), p5 = new Plane() ) {\n\n\t\tthis.planes = [ p0, p1, p2, p3, p4, p5 ];\n\n\t}\n\n\tset( p0, p1, p2, p3, p4, p5 ) {\n\n\t\tconst planes = this.planes;\n\n\t\tplanes[ 0 ].copy( p0 );\n\t\tplanes[ 1 ].copy( p1 );\n\t\tplanes[ 2 ].copy( p2 );\n\t\tplanes[ 3 ].copy( p3 );\n\t\tplanes[ 4 ].copy( p4 );\n\t\tplanes[ 5 ].copy( p5 );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( frustum ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tplanes[ i ].copy( frustum.planes[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromProjectionMatrix( m ) {\n\n\t\tconst planes = this.planes;\n\t\tconst me = m.elements;\n\t\tconst me0 = me[ 0 ], me1 = me[ 1 ], me2 = me[ 2 ], me3 = me[ 3 ];\n\t\tconst me4 = me[ 4 ], me5 = me[ 5 ], me6 = me[ 6 ], me7 = me[ 7 ];\n\t\tconst me8 = me[ 8 ], me9 = me[ 9 ], me10 = me[ 10 ], me11 = me[ 11 ];\n\t\tconst me12 = me[ 12 ], me13 = me[ 13 ], me14 = me[ 14 ], me15 = me[ 15 ];\n\n\t\tplanes[ 0 ].setComponents( me3 - me0, me7 - me4, me11 - me8, me15 - me12 ).normalize();\n\t\tplanes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize();\n\t\tplanes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize();\n\t\tplanes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize();\n\t\tplanes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize();\n\t\tplanes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize();\n\n\t\treturn this;\n\n\t}\n\n\tintersectsObject( object ) {\n\n\t\tconst geometry = object.geometry;\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$2.copy( geometry.boundingSphere ).applyMatrix4( object.matrixWorld );\n\n\t\treturn this.intersectsSphere( _sphere$2 );\n\n\t}\n\n\tintersectsSprite( sprite ) {\n\n\t\t_sphere$2.center.set( 0, 0, 0 );\n\t\t_sphere$2.radius = 0.7071067811865476;\n\t\t_sphere$2.applyMatrix4( sprite.matrixWorld );\n\n\t\treturn this.intersectsSphere( _sphere$2 );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\tconst planes = this.planes;\n\t\tconst center = sphere.center;\n\t\tconst negRadius = - sphere.radius;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst distance = planes[ i ].distanceToPoint( center );\n\n\t\t\tif ( distance < negRadius ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst plane = planes[ i ];\n\n\t\t\t// corner at max distance\n\n\t\t\t_vector$7.x = plane.normal.x > 0 ? box.max.x : box.min.x;\n\t\t\t_vector$7.y = plane.normal.y > 0 ? box.max.y : box.min.y;\n\t\t\t_vector$7.z = plane.normal.z > 0 ? box.max.z : box.min.z;\n\n\t\t\tif ( plane.distanceToPoint( _vector$7 ) < 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tif ( planes[ i ].distanceToPoint( point ) < 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nfunction WebGLAnimation() {\n\n\tlet context = null;\n\tlet isAnimating = false;\n\tlet animationLoop = null;\n\tlet requestId = null;\n\n\tfunction onAnimationFrame( time, frame ) {\n\n\t\tanimationLoop( time, frame );\n\n\t\trequestId = context.requestAnimationFrame( onAnimationFrame );\n\n\t}\n\n\treturn {\n\n\t\tstart: function () {\n\n\t\t\tif ( isAnimating === true ) return;\n\t\t\tif ( animationLoop === null ) return;\n\n\t\t\trequestId = context.requestAnimationFrame( onAnimationFrame );\n\n\t\t\tisAnimating = true;\n\n\t\t},\n\n\t\tstop: function () {\n\n\t\t\tcontext.cancelAnimationFrame( requestId );\n\n\t\t\tisAnimating = false;\n\n\t\t},\n\n\t\tsetAnimationLoop: function ( callback ) {\n\n\t\t\tanimationLoop = callback;\n\n\t\t},\n\n\t\tsetContext: function ( value ) {\n\n\t\t\tcontext = value;\n\n\t\t}\n\n\t};\n\n}\n\nfunction WebGLAttributes( gl, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tconst buffers = new WeakMap();\n\n\tfunction createBuffer( attribute, bufferType ) {\n\n\t\tconst array = attribute.array;\n\t\tconst usage = attribute.usage;\n\n\t\tconst buffer = gl.createBuffer();\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\t\tgl.bufferData( bufferType, array, usage );\n\n\t\tattribute.onUploadCallback();\n\n\t\tlet type = 5126;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\ttype = 5126;\n\n\t\t} else if ( array instanceof Float64Array ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.' );\n\n\t\t} else if ( array instanceof Uint16Array ) {\n\n\t\t\tif ( attribute.isFloat16BufferAttribute ) {\n\n\t\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t\ttype = 5131;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.' );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\ttype = 5123;\n\n\t\t\t}\n\n\t\t} else if ( array instanceof Int16Array ) {\n\n\t\t\ttype = 5122;\n\n\t\t} else if ( array instanceof Uint32Array ) {\n\n\t\t\ttype = 5125;\n\n\t\t} else if ( array instanceof Int32Array ) {\n\n\t\t\ttype = 5124;\n\n\t\t} else if ( array instanceof Int8Array ) {\n\n\t\t\ttype = 5120;\n\n\t\t} else if ( array instanceof Uint8Array ) {\n\n\t\t\ttype = 5121;\n\n\t\t} else if ( array instanceof Uint8ClampedArray ) {\n\n\t\t\ttype = 5121;\n\n\t\t}\n\n\t\treturn {\n\t\t\tbuffer: buffer,\n\t\t\ttype: type,\n\t\t\tbytesPerElement: array.BYTES_PER_ELEMENT,\n\t\t\tversion: attribute.version\n\t\t};\n\n\t}\n\n\tfunction updateBuffer( buffer, attribute, bufferType ) {\n\n\t\tconst array = attribute.array;\n\t\tconst updateRange = attribute.updateRange;\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\n\t\tif ( updateRange.count === - 1 ) {\n\n\t\t\t// Not using update ranges\n\n\t\t\tgl.bufferSubData( bufferType, 0, array );\n\n\t\t} else {\n\n\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\tgl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,\n\t\t\t\t\tarray, updateRange.offset, updateRange.count );\n\n\t\t\t} else {\n\n\t\t\t\tgl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,\n\t\t\t\t\tarray.subarray( updateRange.offset, updateRange.offset + updateRange.count ) );\n\n\t\t\t}\n\n\t\t\tupdateRange.count = - 1; // reset range\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction get( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\treturn buffers.get( attribute );\n\n\t}\n\n\tfunction remove( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tconst data = buffers.get( attribute );\n\n\t\tif ( data ) {\n\n\t\t\tgl.deleteBuffer( data.buffer );\n\n\t\t\tbuffers.delete( attribute );\n\n\t\t}\n\n\t}\n\n\tfunction update( attribute, bufferType ) {\n\n\t\tif ( attribute.isGLBufferAttribute ) {\n\n\t\t\tconst cached = buffers.get( attribute );\n\n\t\t\tif ( ! cached || cached.version < attribute.version ) {\n\n\t\t\t\tbuffers.set( attribute, {\n\t\t\t\t\tbuffer: attribute.buffer,\n\t\t\t\t\ttype: attribute.type,\n\t\t\t\t\tbytesPerElement: attribute.elementSize,\n\t\t\t\t\tversion: attribute.version\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tconst data = buffers.get( attribute );\n\n\t\tif ( data === undefined ) {\n\n\t\t\tbuffers.set( attribute, createBuffer( attribute, bufferType ) );\n\n\t\t} else if ( data.version < attribute.version ) {\n\n\t\t\tupdateBuffer( data.buffer, attribute, bufferType );\n\n\t\t\tdata.version = attribute.version;\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update\n\n\t};\n\n}\n\nclass PlaneGeometry extends BufferGeometry {\n\n\tconstructor( width = 1, height = 1, widthSegments = 1, heightSegments = 1 ) {\n\n\t\tsuper();\n\t\tthis.type = 'PlaneGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments\n\t\t};\n\n\t\tconst width_half = width / 2;\n\t\tconst height_half = height / 2;\n\n\t\tconst gridX = Math.floor( widthSegments );\n\t\tconst gridY = Math.floor( heightSegments );\n\n\t\tconst gridX1 = gridX + 1;\n\t\tconst gridY1 = gridY + 1;\n\n\t\tconst segment_width = width / gridX;\n\t\tconst segment_height = height / gridY;\n\n\t\t//\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\tfor ( let iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\tconst y = iy * segment_height - height_half;\n\n\t\t\tfor ( let ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\tconst x = ix * segment_width - width_half;\n\n\t\t\t\tvertices.push( x, - y, 0 );\n\n\t\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\tfor ( let ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\tconst a = ix + gridX1 * iy;\n\t\t\t\tconst b = ix + gridX1 * ( iy + 1 );\n\t\t\t\tconst c = ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\tconst d = ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new PlaneGeometry( data.width, data.height, data.widthSegments, data.heightSegments );\n\n\t}\n\n}\n\nvar alphamap_fragment = \"#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\\n#endif\";\n\nvar alphamap_pars_fragment = \"#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\";\n\nvar alphatest_fragment = \"#ifdef USE_ALPHATEST\\n\\tif ( diffuseColor.a < alphaTest ) discard;\\n#endif\";\n\nvar alphatest_pars_fragment = \"#ifdef USE_ALPHATEST\\n\\tuniform float alphaTest;\\n#endif\";\n\nvar aomap_fragment = \"#ifdef USE_AOMAP\\n\\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\\n\\treflectedLight.indirectDiffuse *= ambientOcclusion;\\n\\t#if defined( USE_ENVMAP ) && defined( STANDARD )\\n\\t\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\t\\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );\\n\\t#endif\\n#endif\";\n\nvar aomap_pars_fragment = \"#ifdef USE_AOMAP\\n\\tuniform sampler2D aoMap;\\n\\tuniform float aoMapIntensity;\\n#endif\";\n\nvar begin_vertex = \"vec3 transformed = vec3( position );\";\n\nvar beginnormal_vertex = \"vec3 objectNormal = vec3( normal );\\n#ifdef USE_TANGENT\\n\\tvec3 objectTangent = vec3( tangent.xyz );\\n#endif\";\n\nvar bsdfs = \"vec3 BRDF_Lambert( const in vec3 diffuseColor ) {\\n\\treturn RECIPROCAL_PI * diffuseColor;\\n}\\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\\n\\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\\n\\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\\n}\\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\\treturn 0.5 / max( gv + gl, EPSILON );\\n}\\nfloat D_GGX( const in float alpha, const in float dotNH ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\\n\\treturn RECIPROCAL_PI * a2 / pow2( denom );\\n}\\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 f0, const in float f90, const in float roughness ) {\\n\\tfloat alpha = pow2( roughness );\\n\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\\n\\tvec3 F = F_Schlick( f0, f90, dotVH );\\n\\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\n\\tfloat D = D_GGX( alpha, dotNH );\\n\\treturn F * ( V * D );\\n}\\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\\n\\tconst float LUT_SIZE = 64.0;\\n\\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\\n\\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\\n\\tfloat dotNV = saturate( dot( N, V ) );\\n\\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\\n\\tuv = uv * LUT_SCALE + LUT_BIAS;\\n\\treturn uv;\\n}\\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\\n\\tfloat l = length( f );\\n\\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\\n}\\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\\n\\tfloat x = dot( v1, v2 );\\n\\tfloat y = abs( x );\\n\\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\\n\\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\\n\\tfloat v = a / b;\\n\\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\\n\\treturn cross( v1, v2 ) * theta_sintheta;\\n}\\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\\n\\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\\n\\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\\n\\tvec3 lightNormal = cross( v1, v2 );\\n\\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\\n\\tvec3 T1, T2;\\n\\tT1 = normalize( V - N * dot( V, N ) );\\n\\tT2 = - cross( N, T1 );\\n\\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\\n\\tvec3 coords[ 4 ];\\n\\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\\n\\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\\n\\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\\n\\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\\n\\tcoords[ 0 ] = normalize( coords[ 0 ] );\\n\\tcoords[ 1 ] = normalize( coords[ 1 ] );\\n\\tcoords[ 2 ] = normalize( coords[ 2 ] );\\n\\tcoords[ 3 ] = normalize( coords[ 3 ] );\\n\\tvec3 vectorFormFactor = vec3( 0.0 );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\\n\\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\\n\\treturn vec3( result );\\n}\\nfloat G_BlinnPhong_Implicit( ) {\\n\\treturn 0.25;\\n}\\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\\n\\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\\n}\\nvec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {\\n\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, 1.0, dotVH );\\n\\tfloat G = G_BlinnPhong_Implicit( );\\n\\tfloat D = D_BlinnPhong( shininess, dotNH );\\n\\treturn F * ( G * D );\\n}\\n#if defined( USE_SHEEN )\\nfloat D_Charlie( float roughness, float dotNH ) {\\n\\tfloat alpha = pow2( roughness );\\n\\tfloat invAlpha = 1.0 / alpha;\\n\\tfloat cos2h = dotNH * dotNH;\\n\\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 );\\n\\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\\n}\\nfloat V_Neubelt( float dotNV, float dotNL ) {\\n\\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\\n}\\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenTint, const in float sheenRoughness ) {\\n\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat D = D_Charlie( sheenRoughness, dotNH );\\n\\tfloat V = V_Neubelt( dotNV, dotNL );\\n\\treturn sheenTint * ( D * V );\\n}\\n#endif\";\n\nvar bumpmap_pars_fragment = \"#ifdef USE_BUMPMAP\\n\\tuniform sampler2D bumpMap;\\n\\tuniform float bumpScale;\\n\\tvec2 dHdxy_fwd() {\\n\\t\\tvec2 dSTdx = dFdx( vUv );\\n\\t\\tvec2 dSTdy = dFdy( vUv );\\n\\t\\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\\n\\t\\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\\n\\t\\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\\n\\t\\treturn vec2( dBx, dBy );\\n\\t}\\n\\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\\n\\t\\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\\n\\t\\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\\n\\t\\tvec3 vN = surf_norm;\\n\\t\\tvec3 R1 = cross( vSigmaY, vN );\\n\\t\\tvec3 R2 = cross( vN, vSigmaX );\\n\\t\\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\\n\\t\\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\\n\\t\\treturn normalize( abs( fDet ) * surf_norm - vGrad );\\n\\t}\\n#endif\";\n\nvar clipping_planes_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvec4 plane;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\\n\\t\\tplane = clippingPlanes[ i ];\\n\\t\\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\\n\\t\\tbool clipped = true;\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t\\tif ( clipped ) discard;\\n\\t#endif\\n#endif\";\n\nvar clipping_planes_pars_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n\\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\\n#endif\";\n\nvar clipping_planes_pars_vertex = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n#endif\";\n\nvar clipping_planes_vertex = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvClipPosition = - mvPosition.xyz;\\n#endif\";\n\nvar color_fragment = \"#if defined( USE_COLOR_ALPHA )\\n\\tdiffuseColor *= vColor;\\n#elif defined( USE_COLOR )\\n\\tdiffuseColor.rgb *= vColor;\\n#endif\";\n\nvar color_pars_fragment = \"#if defined( USE_COLOR_ALPHA )\\n\\tvarying vec4 vColor;\\n#elif defined( USE_COLOR )\\n\\tvarying vec3 vColor;\\n#endif\";\n\nvar color_pars_vertex = \"#if defined( USE_COLOR_ALPHA )\\n\\tvarying vec4 vColor;\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\\n\\tvarying vec3 vColor;\\n#endif\";\n\nvar color_vertex = \"#if defined( USE_COLOR_ALPHA )\\n\\tvColor = vec4( 1.0 );\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\\n\\tvColor = vec3( 1.0 );\\n#endif\\n#ifdef USE_COLOR\\n\\tvColor *= color;\\n#endif\\n#ifdef USE_INSTANCING_COLOR\\n\\tvColor.xyz *= instanceColor.xyz;\\n#endif\";\n\nvar common = \"#define PI 3.141592653589793\\n#define PI2 6.283185307179586\\n#define PI_HALF 1.5707963267948966\\n#define RECIPROCAL_PI 0.3183098861837907\\n#define RECIPROCAL_PI2 0.15915494309189535\\n#define EPSILON 1e-6\\n#ifndef saturate\\n#define saturate( a ) clamp( a, 0.0, 1.0 )\\n#endif\\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\\nfloat pow2( const in float x ) { return x*x; }\\nfloat pow3( const in float x ) { return x*x*x; }\\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\\nhighp float rand( const in vec2 uv ) {\\n\\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\\n\\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\\n\\treturn fract( sin( sn ) * c );\\n}\\n#ifdef HIGH_PRECISION\\n\\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\\n#else\\n\\tfloat precisionSafeLength( vec3 v ) {\\n\\t\\tfloat maxComponent = max3( abs( v ) );\\n\\t\\treturn length( v / maxComponent ) * maxComponent;\\n\\t}\\n#endif\\nstruct IncidentLight {\\n\\tvec3 color;\\n\\tvec3 direction;\\n\\tbool visible;\\n};\\nstruct ReflectedLight {\\n\\tvec3 directDiffuse;\\n\\tvec3 directSpecular;\\n\\tvec3 indirectDiffuse;\\n\\tvec3 indirectSpecular;\\n};\\nstruct GeometricContext {\\n\\tvec3 position;\\n\\tvec3 normal;\\n\\tvec3 viewDir;\\n#ifdef USE_CLEARCOAT\\n\\tvec3 clearcoatNormal;\\n#endif\\n};\\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\\n}\\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\\n}\\nmat3 transposeMat3( const in mat3 m ) {\\n\\tmat3 tmp;\\n\\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\\n\\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\\n\\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\\n\\treturn tmp;\\n}\\nfloat linearToRelativeLuminance( const in vec3 color ) {\\n\\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\\n\\treturn dot( weights, color.rgb );\\n}\\nbool isPerspectiveMatrix( mat4 m ) {\\n\\treturn m[ 2 ][ 3 ] == - 1.0;\\n}\\nvec2 equirectUv( in vec3 dir ) {\\n\\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\\n\\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\n\\treturn vec2( u, v );\\n}\";\n\nvar cube_uv_reflection_fragment = \"#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t#define cubeUV_maxMipLevel 8.0\\n\\t#define cubeUV_minMipLevel 4.0\\n\\t#define cubeUV_maxTileSize 256.0\\n\\t#define cubeUV_minTileSize 16.0\\n\\tfloat getFace( vec3 direction ) {\\n\\t\\tvec3 absDirection = abs( direction );\\n\\t\\tfloat face = - 1.0;\\n\\t\\tif ( absDirection.x > absDirection.z ) {\\n\\t\\t\\tif ( absDirection.x > absDirection.y )\\n\\t\\t\\t\\tface = direction.x > 0.0 ? 0.0 : 3.0;\\n\\t\\t\\telse\\n\\t\\t\\t\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\n\\t\\t} else {\\n\\t\\t\\tif ( absDirection.z > absDirection.y )\\n\\t\\t\\t\\tface = direction.z > 0.0 ? 2.0 : 5.0;\\n\\t\\t\\telse\\n\\t\\t\\t\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\n\\t\\t}\\n\\t\\treturn face;\\n\\t}\\n\\tvec2 getUV( vec3 direction, float face ) {\\n\\t\\tvec2 uv;\\n\\t\\tif ( face == 0.0 ) {\\n\\t\\t\\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\\n\\t\\t} else if ( face == 1.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\\n\\t\\t} else if ( face == 2.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\\n\\t\\t} else if ( face == 3.0 ) {\\n\\t\\t\\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\\n\\t\\t} else if ( face == 4.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\\n\\t\\t} else {\\n\\t\\t\\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\\n\\t\\t}\\n\\t\\treturn 0.5 * ( uv + 1.0 );\\n\\t}\\n\\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\\n\\t\\tfloat face = getFace( direction );\\n\\t\\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\\n\\t\\tmipInt = max( mipInt, cubeUV_minMipLevel );\\n\\t\\tfloat faceSize = exp2( mipInt );\\n\\t\\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\\n\\t\\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\\n\\t\\tvec2 f = fract( uv );\\n\\t\\tuv += 0.5 - f;\\n\\t\\tif ( face > 2.0 ) {\\n\\t\\t\\tuv.y += faceSize;\\n\\t\\t\\tface -= 3.0;\\n\\t\\t}\\n\\t\\tuv.x += face * faceSize;\\n\\t\\tif ( mipInt < cubeUV_maxMipLevel ) {\\n\\t\\t\\tuv.y += 2.0 * cubeUV_maxTileSize;\\n\\t\\t}\\n\\t\\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\\n\\t\\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\\n\\t\\tuv *= texelSize;\\n\\t\\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tuv.x += texelSize;\\n\\t\\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tuv.y += texelSize;\\n\\t\\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tuv.x -= texelSize;\\n\\t\\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tvec3 tm = mix( tl, tr, f.x );\\n\\t\\tvec3 bm = mix( bl, br, f.x );\\n\\t\\treturn mix( tm, bm, f.y );\\n\\t}\\n\\t#define r0 1.0\\n\\t#define v0 0.339\\n\\t#define m0 - 2.0\\n\\t#define r1 0.8\\n\\t#define v1 0.276\\n\\t#define m1 - 1.0\\n\\t#define r4 0.4\\n\\t#define v4 0.046\\n\\t#define m4 2.0\\n\\t#define r5 0.305\\n\\t#define v5 0.016\\n\\t#define m5 3.0\\n\\t#define r6 0.21\\n\\t#define v6 0.0038\\n\\t#define m6 4.0\\n\\tfloat roughnessToMip( float roughness ) {\\n\\t\\tfloat mip = 0.0;\\n\\t\\tif ( roughness >= r1 ) {\\n\\t\\t\\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\\n\\t\\t} else if ( roughness >= r4 ) {\\n\\t\\t\\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\\n\\t\\t} else if ( roughness >= r5 ) {\\n\\t\\t\\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\\n\\t\\t} else if ( roughness >= r6 ) {\\n\\t\\t\\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\\n\\t\\t} else {\\n\\t\\t\\tmip = - 2.0 * log2( 1.16 * roughness );\\t\\t}\\n\\t\\treturn mip;\\n\\t}\\n\\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\\n\\t\\tfloat mip = clamp( roughnessToMip( roughness ), m0, cubeUV_maxMipLevel );\\n\\t\\tfloat mipF = fract( mip );\\n\\t\\tfloat mipInt = floor( mip );\\n\\t\\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\\n\\t\\tif ( mipF == 0.0 ) {\\n\\t\\t\\treturn vec4( color0, 1.0 );\\n\\t\\t} else {\\n\\t\\t\\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\\n\\t\\t\\treturn vec4( mix( color0, color1, mipF ), 1.0 );\\n\\t\\t}\\n\\t}\\n#endif\";\n\nvar defaultnormal_vertex = \"vec3 transformedNormal = objectNormal;\\n#ifdef USE_INSTANCING\\n\\tmat3 m = mat3( instanceMatrix );\\n\\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\\n\\ttransformedNormal = m * transformedNormal;\\n#endif\\ntransformedNormal = normalMatrix * transformedNormal;\\n#ifdef FLIP_SIDED\\n\\ttransformedNormal = - transformedNormal;\\n#endif\\n#ifdef USE_TANGENT\\n\\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\n\\t#ifdef FLIP_SIDED\\n\\t\\ttransformedTangent = - transformedTangent;\\n\\t#endif\\n#endif\";\n\nvar displacementmap_pars_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\tuniform sampler2D displacementMap;\\n\\tuniform float displacementScale;\\n\\tuniform float displacementBias;\\n#endif\";\n\nvar displacementmap_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\\n#endif\";\n\nvar emissivemap_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\\n\\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\\n\\ttotalEmissiveRadiance *= emissiveColor.rgb;\\n#endif\";\n\nvar emissivemap_pars_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tuniform sampler2D emissiveMap;\\n#endif\";\n\nvar encodings_fragment = \"gl_FragColor = linearToOutputTexel( gl_FragColor );\";\n\nvar encodings_pars_fragment = \"\\nvec4 LinearToLinear( in vec4 value ) {\\n\\treturn value;\\n}\\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\\n\\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\\n}\\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\\n\\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\\n}\\nvec4 sRGBToLinear( in vec4 value ) {\\n\\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\\n}\\nvec4 LinearTosRGB( in vec4 value ) {\\n\\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\\n}\\nvec4 RGBEToLinear( in vec4 value ) {\\n\\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\\n}\\nvec4 LinearToRGBE( in vec4 value ) {\\n\\tfloat maxComponent = max( max( value.r, value.g ), value.b );\\n\\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\\n\\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\\n}\\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\\n\\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\\n}\\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\\n\\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\\n\\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\\n\\tM = ceil( M * 255.0 ) / 255.0;\\n\\treturn vec4( value.rgb / ( M * maxRange ), M );\\n}\\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\\n\\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\\n}\\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\\n\\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\\n\\tfloat D = max( maxRange / maxRGB, 1.0 );\\n\\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\\n\\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\\n}\\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\\nvec4 LinearToLogLuv( in vec4 value ) {\\n\\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\\n\\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\\n\\tvec4 vResult;\\n\\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\\n\\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\\n\\tvResult.w = fract( Le );\\n\\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\\n\\treturn vResult;\\n}\\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\\nvec4 LogLuvToLinear( in vec4 value ) {\\n\\tfloat Le = value.z * 255.0 + value.w;\\n\\tvec3 Xp_Y_XYZp;\\n\\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\\n\\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\\n\\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\\n\\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\\n\\treturn vec4( max( vRGB, 0.0 ), 1.0 );\\n}\";\n\nvar envmap_fragment = \"#ifdef USE_ENVMAP\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvec3 cameraToFrag;\\n\\t\\tif ( isOrthographic ) {\\n\\t\\t\\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\n\\t\\t} else {\\n\\t\\t\\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\\n\\t\\t}\\n\\t\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#else\\n\\t\\tvec3 reflectVec = vReflect;\\n\\t#endif\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\\n\\t\\tenvColor = envMapTexelToLinear( envColor );\\n\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\\n\\t#else\\n\\t\\tvec4 envColor = vec4( 0.0 );\\n\\t#endif\\n\\t#ifdef ENVMAP_BLENDING_MULTIPLY\\n\\t\\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_MIX )\\n\\t\\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_ADD )\\n\\t\\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\\n\\t#endif\\n#endif\";\n\nvar envmap_common_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tuniform float envMapIntensity;\\n\\tuniform float flipEnvMap;\\n\\tuniform int maxMipLevel;\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tuniform samplerCube envMap;\\n\\t#else\\n\\t\\tuniform sampler2D envMap;\\n\\t#endif\\n\\t\\n#endif\";\n\nvar envmap_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tuniform float reflectivity;\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\n\\t\\t#define ENV_WORLDPOS\\n\\t#endif\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t\\tuniform float refractionRatio;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t#endif\\n#endif\";\n\nvar envmap_pars_vertex = \"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\\n\\t\\t#define ENV_WORLDPOS\\n\\t#endif\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\t\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t\\tuniform float refractionRatio;\\n\\t#endif\\n#endif\";\n\nvar envmap_vertex = \"#ifdef USE_ENVMAP\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvWorldPosition = worldPosition.xyz;\\n\\t#else\\n\\t\\tvec3 cameraToVertex;\\n\\t\\tif ( isOrthographic ) {\\n\\t\\t\\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\n\\t\\t} else {\\n\\t\\t\\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\\n\\t\\t}\\n\\t\\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvReflect = reflect( cameraToVertex, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#endif\\n#endif\";\n\nvar fog_vertex = \"#ifdef USE_FOG\\n\\tvFogDepth = - mvPosition.z;\\n#endif\";\n\nvar fog_pars_vertex = \"#ifdef USE_FOG\\n\\tvarying float vFogDepth;\\n#endif\";\n\nvar fog_fragment = \"#ifdef USE_FOG\\n\\t#ifdef FOG_EXP2\\n\\t\\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\\n\\t#else\\n\\t\\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\\n\\t#endif\\n\\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\\n#endif\";\n\nvar fog_pars_fragment = \"#ifdef USE_FOG\\n\\tuniform vec3 fogColor;\\n\\tvarying float vFogDepth;\\n\\t#ifdef FOG_EXP2\\n\\t\\tuniform float fogDensity;\\n\\t#else\\n\\t\\tuniform float fogNear;\\n\\t\\tuniform float fogFar;\\n\\t#endif\\n#endif\";\n\nvar gradientmap_pars_fragment = \"#ifdef USE_GRADIENTMAP\\n\\tuniform sampler2D gradientMap;\\n#endif\\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\\n\\tfloat dotNL = dot( normal, lightDirection );\\n\\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\\n\\t#ifdef USE_GRADIENTMAP\\n\\t\\treturn texture2D( gradientMap, coord ).rgb;\\n\\t#else\\n\\t\\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\\n\\t#endif\\n}\";\n\nvar lightmap_fragment = \"#ifdef USE_LIGHTMAP\\n\\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\\n\\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tlightMapIrradiance *= PI;\\n\\t#endif\\n\\treflectedLight.indirectDiffuse += lightMapIrradiance;\\n#endif\";\n\nvar lightmap_pars_fragment = \"#ifdef USE_LIGHTMAP\\n\\tuniform sampler2D lightMap;\\n\\tuniform float lightMapIntensity;\\n#endif\";\n\nvar lights_lambert_vertex = \"vec3 diffuse = vec3( 1.0 );\\nGeometricContext geometry;\\ngeometry.position = mvPosition.xyz;\\ngeometry.normal = normalize( transformedNormal );\\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\\nGeometricContext backGeometry;\\nbackGeometry.position = geometry.position;\\nbackGeometry.normal = -geometry.normal;\\nbackGeometry.viewDir = geometry.viewDir;\\nvLightFront = vec3( 0.0 );\\nvIndirectFront = vec3( 0.0 );\\n#ifdef DOUBLE_SIDED\\n\\tvLightBack = vec3( 0.0 );\\n\\tvIndirectBack = vec3( 0.0 );\\n#endif\\nIncidentLight directLight;\\nfloat dotNL;\\nvec3 directLightColor_Diffuse;\\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry.normal );\\n#ifdef DOUBLE_SIDED\\n\\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\\n\\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry.normal );\\n#endif\\n#if NUM_POINT_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tgetPointLightInfo( pointLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tgetSpotLightInfo( spotLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_DIR_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tgetDirectionalLightInfo( directionalLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry.normal );\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\";\n\nvar lights_pars_begin = \"uniform bool receiveShadow;\\nuniform vec3 ambientLightColor;\\nuniform vec3 lightProbe[ 9 ];\\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\\n\\tfloat x = normal.x, y = normal.y, z = normal.z;\\n\\tvec3 result = shCoefficients[ 0 ] * 0.886227;\\n\\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\\n\\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\\n\\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\\n\\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\\n\\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\\n\\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\\n\\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\\n\\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\\n\\treturn result;\\n}\\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\\n\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\\n\\treturn irradiance;\\n}\\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\\n\\tvec3 irradiance = ambientLightColor;\\n\\treturn irradiance;\\n}\\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\\n\\t#if defined ( PHYSICALLY_CORRECT_LIGHTS )\\n\\t\\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\\n\\t\\tif ( cutoffDistance > 0.0 ) {\\n\\t\\t\\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\\n\\t\\t}\\n\\t\\treturn distanceFalloff;\\n\\t#else\\n\\t\\tif ( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\\n\\t\\t\\treturn pow( saturate( - lightDistance / cutoffDistance + 1.0 ), decayExponent );\\n\\t\\t}\\n\\t\\treturn 1.0;\\n\\t#endif\\n}\\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\\n\\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\\n}\\n#if NUM_DIR_LIGHTS > 0\\n\\tstruct DirectionalLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t};\\n\\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\\n\\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight light ) {\\n\\t\\tlight.color = directionalLight.color;\\n\\t\\tlight.direction = directionalLight.direction;\\n\\t\\tlight.visible = true;\\n\\t}\\n#endif\\n#if NUM_POINT_LIGHTS > 0\\n\\tstruct PointLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t};\\n\\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\\n\\tvoid getPointLightInfo( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight light ) {\\n\\t\\tvec3 lVector = pointLight.position - geometry.position;\\n\\t\\tlight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tlight.color = pointLight.color;\\n\\t\\tlight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\\n\\t\\tlight.visible = ( light.color != vec3( 0.0 ) );\\n\\t}\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\\tstruct SpotLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t\\tfloat coneCos;\\n\\t\\tfloat penumbraCos;\\n\\t};\\n\\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\\n\\tvoid getSpotLightInfo( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight light ) {\\n\\t\\tvec3 lVector = spotLight.position - geometry.position;\\n\\t\\tlight.direction = normalize( lVector );\\n\\t\\tfloat angleCos = dot( light.direction, spotLight.direction );\\n\\t\\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\\n\\t\\tif ( spotAttenuation > 0.0 ) {\\n\\t\\t\\tfloat lightDistance = length( lVector );\\n\\t\\t\\tlight.color = spotLight.color * spotAttenuation;\\n\\t\\t\\tlight.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\\n\\t\\t\\tlight.visible = ( light.color != vec3( 0.0 ) );\\n\\t\\t} else {\\n\\t\\t\\tlight.color = vec3( 0.0 );\\n\\t\\t\\tlight.visible = false;\\n\\t\\t}\\n\\t}\\n#endif\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tstruct RectAreaLight {\\n\\t\\tvec3 color;\\n\\t\\tvec3 position;\\n\\t\\tvec3 halfWidth;\\n\\t\\tvec3 halfHeight;\\n\\t};\\n\\tuniform sampler2D ltc_1;\\tuniform sampler2D ltc_2;\\n\\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\\tstruct HemisphereLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 skyColor;\\n\\t\\tvec3 groundColor;\\n\\t};\\n\\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\\n\\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\\n\\t\\tfloat dotNL = dot( normal, hemiLight.direction );\\n\\t\\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\\n\\t\\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\\n\\t\\treturn irradiance;\\n\\t}\\n#endif\";\n\nvar envmap_physical_pars_fragment = \"#if defined( USE_ENVMAP )\\n\\t#ifdef ENVMAP_MODE_REFRACTION\\n\\t\\tuniform float refractionRatio;\\n\\t#endif\\n\\tvec3 getIBLIrradiance( const in vec3 normal ) {\\n\\t\\t#if defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\\n\\t\\t\\treturn PI * envMapColor.rgb * envMapIntensity;\\n\\t\\t#else\\n\\t\\t\\treturn vec3( 0.0 );\\n\\t\\t#endif\\n\\t}\\n\\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\\n\\t\\t#if defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec3 reflectVec;\\n\\t\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\t\\treflectVec = reflect( - viewDir, normal );\\n\\t\\t\\t\\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\\n\\t\\t\\t#else\\n\\t\\t\\t\\treflectVec = refract( - viewDir, normal, refractionRatio );\\n\\t\\t\\t#endif\\n\\t\\t\\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\\n\\t\\t\\treturn envMapColor.rgb * envMapIntensity;\\n\\t\\t#else\\n\\t\\t\\treturn vec3( 0.0 );\\n\\t\\t#endif\\n\\t}\\n#endif\";\n\nvar lights_toon_fragment = \"ToonMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\";\n\nvar lights_toon_pars_fragment = \"varying vec3 vViewPosition;\\nstruct ToonMaterial {\\n\\tvec3 diffuseColor;\\n};\\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Toon\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Toon\\n#define Material_LightProbeLOD( material )\\t(0)\";\n\nvar lights_phong_fragment = \"BlinnPhongMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularColor = specular;\\nmaterial.specularShininess = shininess;\\nmaterial.specularStrength = specularStrength;\";\n\nvar lights_phong_pars_fragment = \"varying vec3 vViewPosition;\\nstruct BlinnPhongMaterial {\\n\\tvec3 diffuseColor;\\n\\tvec3 specularColor;\\n\\tfloat specularShininess;\\n\\tfloat specularStrength;\\n};\\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n\\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength;\\n}\\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_BlinnPhong\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_BlinnPhong\\n#define Material_LightProbeLOD( material )\\t(0)\";\n\nvar lights_physical_fragment = \"PhysicalMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\\nmaterial.roughness = min( material.roughness, 1.0 );\\n#ifdef IOR\\n\\t#ifdef SPECULAR\\n\\t\\tfloat specularIntensityFactor = specularIntensity;\\n\\t\\tvec3 specularTintFactor = specularTint;\\n\\t\\t#ifdef USE_SPECULARINTENSITYMAP\\n\\t\\t\\tspecularIntensityFactor *= texture2D( specularIntensityMap, vUv ).a;\\n\\t\\t#endif\\n\\t\\t#ifdef USE_SPECULARTINTMAP\\n\\t\\t\\tspecularTintFactor *= specularTintMapTexelToLinear( texture2D( specularTintMap, vUv ) ).rgb;\\n\\t\\t#endif\\n\\t\\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\\n\\t#else\\n\\t\\tfloat specularIntensityFactor = 1.0;\\n\\t\\tvec3 specularTintFactor = vec3( 1.0 );\\n\\t\\tmaterial.specularF90 = 1.0;\\n\\t#endif\\n\\tmaterial.specularColor = mix( min( pow2( ( ior - 1.0 ) / ( ior + 1.0 ) ) * specularTintFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\\n#else\\n\\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\\n\\tmaterial.specularF90 = 1.0;\\n#endif\\n#ifdef USE_CLEARCOAT\\n\\tmaterial.clearcoat = clearcoat;\\n\\tmaterial.clearcoatRoughness = clearcoatRoughness;\\n\\tmaterial.clearcoatF0 = vec3( 0.04 );\\n\\tmaterial.clearcoatF90 = 1.0;\\n\\t#ifdef USE_CLEARCOATMAP\\n\\t\\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\\n\\t#endif\\n\\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\t\\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\\n\\t#endif\\n\\tmaterial.clearcoat = saturate( material.clearcoat );\\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\\n\\tmaterial.clearcoatRoughness += geometryRoughness;\\n\\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\\n#endif\\n#ifdef USE_SHEEN\\n\\tmaterial.sheenTint = sheenTint;\\n\\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\\n#endif\";\n\nvar lights_physical_pars_fragment = \"struct PhysicalMaterial {\\n\\tvec3 diffuseColor;\\n\\tfloat roughness;\\n\\tvec3 specularColor;\\n\\tfloat specularF90;\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tfloat clearcoat;\\n\\t\\tfloat clearcoatRoughness;\\n\\t\\tvec3 clearcoatF0;\\n\\t\\tfloat clearcoatF90;\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\tvec3 sheenTint;\\n\\t\\tfloat sheenRoughness;\\n\\t#endif\\n};\\nvec3 clearcoatSpecular = vec3( 0.0 );\\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\\n\\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\\n\\tvec4 r = roughness * c0 + c1;\\n\\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\\n\\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\\n\\treturn fab;\\n}\\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\\n\\tvec2 fab = DFGApprox( normal, viewDir, roughness );\\n\\treturn specularColor * fab.x + specularF90 * fab.y;\\n}\\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\\n\\tvec2 fab = DFGApprox( normal, viewDir, roughness );\\n\\tvec3 FssEss = specularColor * fab.x + specularF90 * fab.y;\\n\\tfloat Ess = fab.x + fab.y;\\n\\tfloat Ems = 1.0 - Ess;\\n\\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\\n\\tsingleScatter += FssEss;\\n\\tmultiScatter += Fms * Ems;\\n}\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t\\tvec3 normal = geometry.normal;\\n\\t\\tvec3 viewDir = geometry.viewDir;\\n\\t\\tvec3 position = geometry.position;\\n\\t\\tvec3 lightPos = rectAreaLight.position;\\n\\t\\tvec3 halfWidth = rectAreaLight.halfWidth;\\n\\t\\tvec3 halfHeight = rectAreaLight.halfHeight;\\n\\t\\tvec3 lightColor = rectAreaLight.color;\\n\\t\\tfloat roughness = material.roughness;\\n\\t\\tvec3 rectCoords[ 4 ];\\n\\t\\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\\t\\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\\n\\t\\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\\n\\t\\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\\n\\t\\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\\n\\t\\tvec4 t1 = texture2D( ltc_1, uv );\\n\\t\\tvec4 t2 = texture2D( ltc_2, uv );\\n\\t\\tmat3 mInv = mat3(\\n\\t\\t\\tvec3( t1.x, 0, t1.y ),\\n\\t\\t\\tvec3( 0, 1, 0 ),\\n\\t\\t\\tvec3( t1.z, 0, t1.w )\\n\\t\\t);\\n\\t\\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\\n\\t\\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\\n\\t\\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\\n\\t}\\n#endif\\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tfloat dotNLcc = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\\n\\t\\tvec3 ccIrradiance = dotNLcc * directLight.color;\\n\\t\\tclearcoatSpecular += ccIrradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.clearcoatNormal, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\treflectedLight.directSpecular += irradiance * BRDF_Sheen( directLight.direction, geometry.viewDir, geometry.normal, material.sheenTint, material.sheenRoughness );\\n\\t#endif\\n\\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.roughness );\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tclearcoatSpecular += clearcoatRadiance * EnvironmentBRDF( geometry.clearcoatNormal, geometry.viewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\\n\\t#endif\\n\\tvec3 singleScattering = vec3( 0.0 );\\n\\tvec3 multiScattering = vec3( 0.0 );\\n\\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\\n\\tcomputeMultiscattering( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\\n\\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\\n\\treflectedLight.indirectSpecular += radiance * singleScattering;\\n\\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\\n\\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Physical\\n#define RE_Direct_RectArea\\t\\tRE_Direct_RectArea_Physical\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Physical\\n#define RE_IndirectSpecular\\t\\tRE_IndirectSpecular_Physical\\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\\n\\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\\n}\";\n\nvar lights_fragment_begin = \"\\nGeometricContext geometry;\\ngeometry.position = - vViewPosition;\\ngeometry.normal = normal;\\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\\n#ifdef USE_CLEARCOAT\\n\\tgeometry.clearcoatNormal = clearcoatNormal;\\n#endif\\nIncidentLight directLight;\\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tPointLight pointLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\\n\\tPointLightShadow pointLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tpointLight = pointLights[ i ];\\n\\t\\tgetPointLightInfo( pointLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\\n\\t\\tpointLightShadow = pointLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tSpotLight spotLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\\n\\tSpotLightShadow spotLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tspotLight = spotLights[ i ];\\n\\t\\tgetSpotLightInfo( spotLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\tspotLightShadow = spotLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tDirectionalLight directionalLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\\n\\tDirectionalLightShadow directionalLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLights[ i ];\\n\\t\\tgetDirectionalLightInfo( directionalLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\\n\\t\\tdirectionalLightShadow = directionalLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\\n\\tRectAreaLight rectAreaLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\\n\\t\\trectAreaLight = rectAreaLights[ i ];\\n\\t\\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if defined( RE_IndirectDiffuse )\\n\\tvec3 iblIrradiance = vec3( 0.0 );\\n\\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\\n\\tirradiance += getLightProbeIrradiance( lightProbe, geometry.normal );\\n\\t#if ( NUM_HEMI_LIGHTS > 0 )\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\t\\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t#endif\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tvec3 radiance = vec3( 0.0 );\\n\\tvec3 clearcoatRadiance = vec3( 0.0 );\\n#endif\";\n\nvar lights_fragment_maps = \"#if defined( RE_IndirectDiffuse )\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\\n\\t\\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tlightMapIrradiance *= PI;\\n\\t\\t#endif\\n\\t\\tirradiance += lightMapIrradiance;\\n\\t#endif\\n\\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tiblIrradiance += getIBLIrradiance( geometry.normal );\\n\\t#endif\\n#endif\\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\\n\\tradiance += getIBLRadiance( geometry.viewDir, geometry.normal, material.roughness );\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tclearcoatRadiance += getIBLRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness );\\n\\t#endif\\n#endif\";\n\nvar lights_fragment_end = \"#if defined( RE_IndirectDiffuse )\\n\\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\\n#endif\";\n\nvar logdepthbuf_fragment = \"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\n\\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\\n#endif\";\n\nvar logdepthbuf_pars_fragment = \"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\n\\tuniform float logDepthBufFC;\\n\\tvarying float vFragDepth;\\n\\tvarying float vIsPerspective;\\n#endif\";\n\nvar logdepthbuf_pars_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvarying float vFragDepth;\\n\\t\\tvarying float vIsPerspective;\\n\\t#else\\n\\t\\tuniform float logDepthBufFC;\\n\\t#endif\\n#endif\";\n\nvar logdepthbuf_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvFragDepth = 1.0 + gl_Position.w;\\n\\t\\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\\n\\t#else\\n\\t\\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\\n\\t\\t\\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\\n\\t\\t\\tgl_Position.z *= gl_Position.w;\\n\\t\\t}\\n\\t#endif\\n#endif\";\n\nvar map_fragment = \"#ifdef USE_MAP\\n\\tvec4 texelColor = texture2D( map, vUv );\\n\\ttexelColor = mapTexelToLinear( texelColor );\\n\\tdiffuseColor *= texelColor;\\n#endif\";\n\nvar map_pars_fragment = \"#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\";\n\nvar map_particle_fragment = \"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\\n#endif\\n#ifdef USE_MAP\\n\\tvec4 mapTexel = texture2D( map, uv );\\n\\tdiffuseColor *= mapTexelToLinear( mapTexel );\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\\n#endif\";\n\nvar map_particle_pars_fragment = \"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\tuniform mat3 uvTransform;\\n#endif\\n#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\";\n\nvar metalnessmap_fragment = \"float metalnessFactor = metalness;\\n#ifdef USE_METALNESSMAP\\n\\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\\n\\tmetalnessFactor *= texelMetalness.b;\\n#endif\";\n\nvar metalnessmap_pars_fragment = \"#ifdef USE_METALNESSMAP\\n\\tuniform sampler2D metalnessMap;\\n#endif\";\n\nvar morphnormal_vertex = \"#ifdef USE_MORPHNORMALS\\n\\tobjectNormal *= morphTargetBaseInfluence;\\n\\t#ifdef MORPHTARGETS_TEXTURE\\n\\t\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\n\\t\\t\\tif ( morphTargetInfluences[ i ] > 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1, 2 ) * morphTargetInfluences[ i ];\\n\\t\\t}\\n\\t#else\\n\\t\\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\\n\\t\\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\\n\\t\\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\\n\\t\\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\\n\\t#endif\\n#endif\";\n\nvar morphtarget_pars_vertex = \"#ifdef USE_MORPHTARGETS\\n\\tuniform float morphTargetBaseInfluence;\\n\\t#ifdef MORPHTARGETS_TEXTURE\\n\\t\\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\\n\\t\\tuniform sampler2DArray morphTargetsTexture;\\n\\t\\tuniform vec2 morphTargetsTextureSize;\\n\\t\\tvec3 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset, const in int stride ) {\\n\\t\\t\\tfloat texelIndex = float( vertexIndex * stride + offset );\\n\\t\\t\\tfloat y = floor( texelIndex / morphTargetsTextureSize.x );\\n\\t\\t\\tfloat x = texelIndex - y * morphTargetsTextureSize.x;\\n\\t\\t\\tvec3 morphUV = vec3( ( x + 0.5 ) / morphTargetsTextureSize.x, y / morphTargetsTextureSize.y, morphTargetIndex );\\n\\t\\t\\treturn texture( morphTargetsTexture, morphUV ).xyz;\\n\\t\\t}\\n\\t#else\\n\\t\\t#ifndef USE_MORPHNORMALS\\n\\t\\t\\tuniform float morphTargetInfluences[ 8 ];\\n\\t\\t#else\\n\\t\\t\\tuniform float morphTargetInfluences[ 4 ];\\n\\t\\t#endif\\n\\t#endif\\n#endif\";\n\nvar morphtarget_vertex = \"#ifdef USE_MORPHTARGETS\\n\\ttransformed *= morphTargetBaseInfluence;\\n\\t#ifdef MORPHTARGETS_TEXTURE\\n\\t\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\n\\t\\t\\t#ifndef USE_MORPHNORMALS\\n\\t\\t\\t\\tif ( morphTargetInfluences[ i ] > 0.0 ) transformed += getMorph( gl_VertexID, i, 0, 1 ) * morphTargetInfluences[ i ];\\n\\t\\t\\t#else\\n\\t\\t\\t\\tif ( morphTargetInfluences[ i ] > 0.0 ) transformed += getMorph( gl_VertexID, i, 0, 2 ) * morphTargetInfluences[ i ];\\n\\t\\t\\t#endif\\n\\t\\t}\\n\\t#else\\n\\t\\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\\n\\t\\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\\n\\t\\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\\n\\t\\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\\n\\t\\t#ifndef USE_MORPHNORMALS\\n\\t\\t\\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\\n\\t\\t\\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\\n\\t\\t\\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\\n\\t\\t\\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\\n\\t\\t#endif\\n\\t#endif\\n#endif\";\n\nvar normal_fragment_begin = \"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\\n#ifdef FLAT_SHADED\\n\\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\\n\\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\\n\\tvec3 normal = normalize( cross( fdx, fdy ) );\\n#else\\n\\tvec3 normal = normalize( vNormal );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal = normal * faceDirection;\\n\\t#endif\\n\\t#ifdef USE_TANGENT\\n\\t\\tvec3 tangent = normalize( vTangent );\\n\\t\\tvec3 bitangent = normalize( vBitangent );\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\ttangent = tangent * faceDirection;\\n\\t\\t\\tbitangent = bitangent * faceDirection;\\n\\t\\t#endif\\n\\t\\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\\n\\t\\t\\tmat3 vTBN = mat3( tangent, bitangent, normal );\\n\\t\\t#endif\\n\\t#endif\\n#endif\\nvec3 geometryNormal = normal;\";\n\nvar normal_fragment_maps = \"#ifdef OBJECTSPACE_NORMALMAP\\n\\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\n\\t#ifdef FLIP_SIDED\\n\\t\\tnormal = - normal;\\n\\t#endif\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal = normal * faceDirection;\\n\\t#endif\\n\\tnormal = normalize( normalMatrix * normal );\\n#elif defined( TANGENTSPACE_NORMALMAP )\\n\\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\n\\tmapN.xy *= normalScale;\\n\\t#ifdef USE_TANGENT\\n\\t\\tnormal = normalize( vTBN * mapN );\\n\\t#else\\n\\t\\tnormal = perturbNormal2Arb( - vViewPosition, normal, mapN, faceDirection );\\n\\t#endif\\n#elif defined( USE_BUMPMAP )\\n\\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\\n#endif\";\n\nvar normal_pars_fragment = \"#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\";\n\nvar normal_pars_vertex = \"#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\";\n\nvar normal_vertex = \"#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n\\t#ifdef USE_TANGENT\\n\\t\\tvTangent = normalize( transformedTangent );\\n\\t\\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\\n\\t#endif\\n#endif\";\n\nvar normalmap_pars_fragment = \"#ifdef USE_NORMALMAP\\n\\tuniform sampler2D normalMap;\\n\\tuniform vec2 normalScale;\\n#endif\\n#ifdef OBJECTSPACE_NORMALMAP\\n\\tuniform mat3 normalMatrix;\\n#endif\\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\\n\\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) {\\n\\t\\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\\n\\t\\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\\n\\t\\tvec2 st0 = dFdx( vUv.st );\\n\\t\\tvec2 st1 = dFdy( vUv.st );\\n\\t\\tvec3 N = surf_norm;\\n\\t\\tvec3 q1perp = cross( q1, N );\\n\\t\\tvec3 q0perp = cross( N, q0 );\\n\\t\\tvec3 T = q1perp * st0.x + q0perp * st1.x;\\n\\t\\tvec3 B = q1perp * st0.y + q0perp * st1.y;\\n\\t\\tfloat det = max( dot( T, T ), dot( B, B ) );\\n\\t\\tfloat scale = ( det == 0.0 ) ? 0.0 : faceDirection * inversesqrt( det );\\n\\t\\treturn normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z );\\n\\t}\\n#endif\";\n\nvar clearcoat_normal_fragment_begin = \"#ifdef USE_CLEARCOAT\\n\\tvec3 clearcoatNormal = geometryNormal;\\n#endif\";\n\nvar clearcoat_normal_fragment_maps = \"#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\\n\\tclearcoatMapN.xy *= clearcoatNormalScale;\\n\\t#ifdef USE_TANGENT\\n\\t\\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\\n\\t#else\\n\\t\\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection );\\n\\t#endif\\n#endif\";\n\nvar clearcoat_pars_fragment = \"#ifdef USE_CLEARCOATMAP\\n\\tuniform sampler2D clearcoatMap;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tuniform sampler2D clearcoatRoughnessMap;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tuniform sampler2D clearcoatNormalMap;\\n\\tuniform vec2 clearcoatNormalScale;\\n#endif\";\n\nvar output_fragment = \"#ifdef OPAQUE\\ndiffuseColor.a = 1.0;\\n#endif\\n#ifdef USE_TRANSMISSION\\ndiffuseColor.a *= transmissionAlpha + 0.1;\\n#endif\\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );\";\n\nvar packing = \"vec3 packNormalToRGB( const in vec3 normal ) {\\n\\treturn normalize( normal ) * 0.5 + 0.5;\\n}\\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\\n\\treturn 2.0 * rgb.xyz - 1.0;\\n}\\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\\nconst float ShiftRight8 = 1. / 256.;\\nvec4 packDepthToRGBA( const in float v ) {\\n\\tvec4 r = vec4( fract( v * PackFactors ), v );\\n\\tr.yzw -= r.xyz * ShiftRight8;\\treturn r * PackUpscale;\\n}\\nfloat unpackRGBAToDepth( const in vec4 v ) {\\n\\treturn dot( v, UnpackFactors );\\n}\\nvec4 pack2HalfToRGBA( vec2 v ) {\\n\\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\\n\\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\\n}\\nvec2 unpackRGBATo2Half( vec4 v ) {\\n\\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\\n}\\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn ( viewZ + near ) / ( near - far );\\n}\\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\\n\\treturn linearClipZ * ( near - far ) - near;\\n}\\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\\n}\\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\\n\\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\\n}\";\n\nvar premultiplied_alpha_fragment = \"#ifdef PREMULTIPLIED_ALPHA\\n\\tgl_FragColor.rgb *= gl_FragColor.a;\\n#endif\";\n\nvar project_vertex = \"vec4 mvPosition = vec4( transformed, 1.0 );\\n#ifdef USE_INSTANCING\\n\\tmvPosition = instanceMatrix * mvPosition;\\n#endif\\nmvPosition = modelViewMatrix * mvPosition;\\ngl_Position = projectionMatrix * mvPosition;\";\n\nvar dithering_fragment = \"#ifdef DITHERING\\n\\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\\n#endif\";\n\nvar dithering_pars_fragment = \"#ifdef DITHERING\\n\\tvec3 dithering( vec3 color ) {\\n\\t\\tfloat grid_position = rand( gl_FragCoord.xy );\\n\\t\\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\\n\\t\\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\\n\\t\\treturn color + dither_shift_RGB;\\n\\t}\\n#endif\";\n\nvar roughnessmap_fragment = \"float roughnessFactor = roughness;\\n#ifdef USE_ROUGHNESSMAP\\n\\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\\n\\troughnessFactor *= texelRoughness.g;\\n#endif\";\n\nvar roughnessmap_pars_fragment = \"#ifdef USE_ROUGHNESSMAP\\n\\tuniform sampler2D roughnessMap;\\n#endif\";\n\nvar shadowmap_pars_fragment = \"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tstruct DirectionalLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tstruct SpotLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tstruct PointLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t\\tfloat shadowCameraNear;\\n\\t\\t\\tfloat shadowCameraFar;\\n\\t\\t};\\n\\t\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\\n\\t\\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\\n\\t}\\n\\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\\n\\t\\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\\n\\t}\\n\\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\\n\\t\\tfloat occlusion = 1.0;\\n\\t\\tvec2 distribution = texture2DDistribution( shadow, uv );\\n\\t\\tfloat hard_shadow = step( compare , distribution.x );\\n\\t\\tif (hard_shadow != 1.0 ) {\\n\\t\\t\\tfloat distance = compare - distribution.x ;\\n\\t\\t\\tfloat variance = max( 0.00000, distribution.y * distribution.y );\\n\\t\\t\\tfloat softness_probability = variance / (variance + distance * distance );\\t\\t\\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\\t\\t\\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\\n\\t\\t}\\n\\t\\treturn occlusion;\\n\\t}\\n\\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\\n\\t\\tfloat shadow = 1.0;\\n\\t\\tshadowCoord.xyz /= shadowCoord.w;\\n\\t\\tshadowCoord.z += shadowBias;\\n\\t\\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\\n\\t\\tbool inFrustum = all( inFrustumVec );\\n\\t\\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\\n\\t\\tbool frustumTest = all( frustumTestVec );\\n\\t\\tif ( frustumTest ) {\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx0 = - texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy0 = - texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx1 = + texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy1 = + texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx2 = dx0 / 2.0;\\n\\t\\t\\tfloat dy2 = dy0 / 2.0;\\n\\t\\t\\tfloat dx3 = dx1 / 2.0;\\n\\t\\t\\tfloat dy3 = dy1 / 2.0;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\\n\\t\\t\\t) * ( 1.0 / 17.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx = texelSize.x;\\n\\t\\t\\tfloat dy = texelSize.y;\\n\\t\\t\\tvec2 uv = shadowCoord.xy;\\n\\t\\t\\tvec2 f = fract( uv * shadowMapSize + 0.5 );\\n\\t\\t\\tuv -= f * texelSize;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t f.x ),\\n\\t\\t\\t\\t\\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t f.x ),\\n\\t\\t\\t\\t\\t f.y )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_VSM )\\n\\t\\t\\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#else\\n\\t\\t\\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#endif\\n\\t\\t}\\n\\t\\treturn shadow;\\n\\t}\\n\\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\\n\\t\\tvec3 absV = abs( v );\\n\\t\\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\\n\\t\\tabsV *= scaleToCube;\\n\\t\\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\\n\\t\\tvec2 planar = v.xy;\\n\\t\\tfloat almostATexel = 1.5 * texelSizeY;\\n\\t\\tfloat almostOne = 1.0 - almostATexel;\\n\\t\\tif ( absV.z >= almostOne ) {\\n\\t\\t\\tif ( v.z > 0.0 )\\n\\t\\t\\t\\tplanar.x = 4.0 - v.x;\\n\\t\\t} else if ( absV.x >= almostOne ) {\\n\\t\\t\\tfloat signX = sign( v.x );\\n\\t\\t\\tplanar.x = v.z * signX + 2.0 * signX;\\n\\t\\t} else if ( absV.y >= almostOne ) {\\n\\t\\t\\tfloat signY = sign( v.y );\\n\\t\\t\\tplanar.x = v.x + 2.0 * signY + 2.0;\\n\\t\\t\\tplanar.y = v.z * signY - 2.0;\\n\\t\\t}\\n\\t\\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\\n\\t}\\n\\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\\n\\t\\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\\n\\t\\tvec3 lightToPosition = shadowCoord.xyz;\\n\\t\\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\\t\\tdp += shadowBias;\\n\\t\\tvec3 bd3D = normalize( lightToPosition );\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\\n\\t\\t\\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\\n\\t\\t\\treturn (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#else\\n\\t\\t\\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\\n\\t\\t#endif\\n\\t}\\n#endif\";\n\nvar shadowmap_pars_vertex = \"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t\\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tstruct DirectionalLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t\\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tstruct SpotLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tstruct PointLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t\\tfloat shadowCameraNear;\\n\\t\\t\\tfloat shadowCameraFar;\\n\\t\\t};\\n\\t\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t#endif\\n#endif\";\n\nvar shadowmap_vertex = \"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\t\\tvec4 shadowWorldPosition;\\n\\t#endif\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n#endif\";\n\nvar shadowmask_pars_fragment = \"float getShadowMask() {\\n\\tfloat shadow = 1.0;\\n\\t#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\tDirectionalLightShadow directionalLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\tSpotLightShadow spotLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tspotLight = spotLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\tPointLightShadow pointLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tpointLight = pointLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#endif\\n\\treturn shadow;\\n}\";\n\nvar skinbase_vertex = \"#ifdef USE_SKINNING\\n\\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\\n\\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\\n\\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\\n\\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\\n#endif\";\n\nvar skinning_pars_vertex = \"#ifdef USE_SKINNING\\n\\tuniform mat4 bindMatrix;\\n\\tuniform mat4 bindMatrixInverse;\\n\\t#ifdef BONE_TEXTURE\\n\\t\\tuniform highp sampler2D boneTexture;\\n\\t\\tuniform int boneTextureSize;\\n\\t\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\t\\tfloat j = i * 4.0;\\n\\t\\t\\tfloat x = mod( j, float( boneTextureSize ) );\\n\\t\\t\\tfloat y = floor( j / float( boneTextureSize ) );\\n\\t\\t\\tfloat dx = 1.0 / float( boneTextureSize );\\n\\t\\t\\tfloat dy = 1.0 / float( boneTextureSize );\\n\\t\\t\\ty = dy * ( y + 0.5 );\\n\\t\\t\\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\\n\\t\\t\\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\\n\\t\\t\\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\\n\\t\\t\\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\\n\\t\\t\\tmat4 bone = mat4( v1, v2, v3, v4 );\\n\\t\\t\\treturn bone;\\n\\t\\t}\\n\\t#else\\n\\t\\tuniform mat4 boneMatrices[ MAX_BONES ];\\n\\t\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\t\\tmat4 bone = boneMatrices[ int(i) ];\\n\\t\\t\\treturn bone;\\n\\t\\t}\\n\\t#endif\\n#endif\";\n\nvar skinning_vertex = \"#ifdef USE_SKINNING\\n\\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\\n\\tvec4 skinned = vec4( 0.0 );\\n\\tskinned += boneMatX * skinVertex * skinWeight.x;\\n\\tskinned += boneMatY * skinVertex * skinWeight.y;\\n\\tskinned += boneMatZ * skinVertex * skinWeight.z;\\n\\tskinned += boneMatW * skinVertex * skinWeight.w;\\n\\ttransformed = ( bindMatrixInverse * skinned ).xyz;\\n#endif\";\n\nvar skinnormal_vertex = \"#ifdef USE_SKINNING\\n\\tmat4 skinMatrix = mat4( 0.0 );\\n\\tskinMatrix += skinWeight.x * boneMatX;\\n\\tskinMatrix += skinWeight.y * boneMatY;\\n\\tskinMatrix += skinWeight.z * boneMatZ;\\n\\tskinMatrix += skinWeight.w * boneMatW;\\n\\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\\n\\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\\n\\t#ifdef USE_TANGENT\\n\\t\\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\n\\t#endif\\n#endif\";\n\nvar specularmap_fragment = \"float specularStrength;\\n#ifdef USE_SPECULARMAP\\n\\tvec4 texelSpecular = texture2D( specularMap, vUv );\\n\\tspecularStrength = texelSpecular.r;\\n#else\\n\\tspecularStrength = 1.0;\\n#endif\";\n\nvar specularmap_pars_fragment = \"#ifdef USE_SPECULARMAP\\n\\tuniform sampler2D specularMap;\\n#endif\";\n\nvar tonemapping_fragment = \"#if defined( TONE_MAPPING )\\n\\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\\n#endif\";\n\nvar tonemapping_pars_fragment = \"#ifndef saturate\\n#define saturate( a ) clamp( a, 0.0, 1.0 )\\n#endif\\nuniform float toneMappingExposure;\\nvec3 LinearToneMapping( vec3 color ) {\\n\\treturn toneMappingExposure * color;\\n}\\nvec3 ReinhardToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\treturn saturate( color / ( vec3( 1.0 ) + color ) );\\n}\\nvec3 OptimizedCineonToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\tcolor = max( vec3( 0.0 ), color - 0.004 );\\n\\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\\n}\\nvec3 RRTAndODTFit( vec3 v ) {\\n\\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\\n\\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\\n\\treturn a / b;\\n}\\nvec3 ACESFilmicToneMapping( vec3 color ) {\\n\\tconst mat3 ACESInputMat = mat3(\\n\\t\\tvec3( 0.59719, 0.07600, 0.02840 ),\\t\\tvec3( 0.35458, 0.90834, 0.13383 ),\\n\\t\\tvec3( 0.04823, 0.01566, 0.83777 )\\n\\t);\\n\\tconst mat3 ACESOutputMat = mat3(\\n\\t\\tvec3( 1.60475, -0.10208, -0.00327 ),\\t\\tvec3( -0.53108, 1.10813, -0.07276 ),\\n\\t\\tvec3( -0.07367, -0.00605, 1.07602 )\\n\\t);\\n\\tcolor *= toneMappingExposure / 0.6;\\n\\tcolor = ACESInputMat * color;\\n\\tcolor = RRTAndODTFit( color );\\n\\tcolor = ACESOutputMat * color;\\n\\treturn saturate( color );\\n}\\nvec3 CustomToneMapping( vec3 color ) { return color; }\";\n\nvar transmission_fragment = \"#ifdef USE_TRANSMISSION\\n\\tfloat transmissionAlpha = 1.0;\\n\\tfloat transmissionFactor = transmission;\\n\\tfloat thicknessFactor = thickness;\\n\\t#ifdef USE_TRANSMISSIONMAP\\n\\t\\ttransmissionFactor *= texture2D( transmissionMap, vUv ).r;\\n\\t#endif\\n\\t#ifdef USE_THICKNESSMAP\\n\\t\\tthicknessFactor *= texture2D( thicknessMap, vUv ).g;\\n\\t#endif\\n\\tvec3 pos = vWorldPosition;\\n\\tvec3 v = normalize( cameraPosition - pos );\\n\\tvec3 n = inverseTransformDirection( normal, viewMatrix );\\n\\tvec4 transmission = getIBLVolumeRefraction(\\n\\t\\tn, v, roughnessFactor, material.diffuseColor, material.specularColor, material.specularF90,\\n\\t\\tpos, modelMatrix, viewMatrix, projectionMatrix, ior, thicknessFactor,\\n\\t\\tattenuationTint, attenuationDistance );\\n\\ttotalDiffuse = mix( totalDiffuse, transmission.rgb, transmissionFactor );\\n\\ttransmissionAlpha = mix( transmissionAlpha, transmission.a, transmissionFactor );\\n#endif\";\n\nvar transmission_pars_fragment = \"#ifdef USE_TRANSMISSION\\n\\tuniform float transmission;\\n\\tuniform float thickness;\\n\\tuniform float attenuationDistance;\\n\\tuniform vec3 attenuationTint;\\n\\t#ifdef USE_TRANSMISSIONMAP\\n\\t\\tuniform sampler2D transmissionMap;\\n\\t#endif\\n\\t#ifdef USE_THICKNESSMAP\\n\\t\\tuniform sampler2D thicknessMap;\\n\\t#endif\\n\\tuniform vec2 transmissionSamplerSize;\\n\\tuniform sampler2D transmissionSamplerMap;\\n\\tuniform mat4 modelMatrix;\\n\\tuniform mat4 projectionMatrix;\\n\\tvarying vec3 vWorldPosition;\\n\\tvec3 getVolumeTransmissionRay( vec3 n, vec3 v, float thickness, float ior, mat4 modelMatrix ) {\\n\\t\\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\\n\\t\\tvec3 modelScale;\\n\\t\\tmodelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\\n\\t\\tmodelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\\n\\t\\tmodelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\\n\\t\\treturn normalize( refractionVector ) * thickness * modelScale;\\n\\t}\\n\\tfloat applyIorToRoughness( float roughness, float ior ) {\\n\\t\\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\\n\\t}\\n\\tvec4 getTransmissionSample( vec2 fragCoord, float roughness, float ior ) {\\n\\t\\tfloat framebufferLod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\\n\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\treturn texture2DLodEXT( transmissionSamplerMap, fragCoord.xy, framebufferLod );\\n\\t\\t#else\\n\\t\\t\\treturn texture2D( transmissionSamplerMap, fragCoord.xy, framebufferLod );\\n\\t\\t#endif\\n\\t}\\n\\tvec3 applyVolumeAttenuation( vec3 radiance, float transmissionDistance, vec3 attenuationColor, float attenuationDistance ) {\\n\\t\\tif ( attenuationDistance == 0.0 ) {\\n\\t\\t\\treturn radiance;\\n\\t\\t} else {\\n\\t\\t\\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\\n\\t\\t\\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );\\t\\t\\treturn transmittance * radiance;\\n\\t\\t}\\n\\t}\\n\\tvec4 getIBLVolumeRefraction( vec3 n, vec3 v, float roughness, vec3 diffuseColor, vec3 specularColor, float specularF90,\\n\\t\\tvec3 position, mat4 modelMatrix, mat4 viewMatrix, mat4 projMatrix, float ior, float thickness,\\n\\t\\tvec3 attenuationColor, float attenuationDistance ) {\\n\\t\\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\\n\\t\\tvec3 refractedRayExit = position + transmissionRay;\\n\\t\\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\\n\\t\\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\\n\\t\\trefractionCoords += 1.0;\\n\\t\\trefractionCoords /= 2.0;\\n\\t\\tvec4 transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\\n\\t\\tvec3 attenuatedColor = applyVolumeAttenuation( transmittedLight.rgb, length( transmissionRay ), attenuationColor, attenuationDistance );\\n\\t\\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\\n\\t\\treturn vec4( ( 1.0 - F ) * attenuatedColor * diffuseColor, transmittedLight.a );\\n\\t}\\n#endif\";\n\nvar uv_pars_fragment = \"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\\n\\tvarying vec2 vUv;\\n#endif\";\n\nvar uv_pars_vertex = \"#ifdef USE_UV\\n\\t#ifdef UVS_VERTEX_ONLY\\n\\t\\tvec2 vUv;\\n\\t#else\\n\\t\\tvarying vec2 vUv;\\n\\t#endif\\n\\tuniform mat3 uvTransform;\\n#endif\";\n\nvar uv_vertex = \"#ifdef USE_UV\\n\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n#endif\";\n\nvar uv2_pars_fragment = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvarying vec2 vUv2;\\n#endif\";\n\nvar uv2_pars_vertex = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tattribute vec2 uv2;\\n\\tvarying vec2 vUv2;\\n\\tuniform mat3 uv2Transform;\\n#endif\";\n\nvar uv2_vertex = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\\n#endif\";\n\nvar worldpos_vertex = \"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION )\\n\\tvec4 worldPosition = vec4( transformed, 1.0 );\\n\\t#ifdef USE_INSTANCING\\n\\t\\tworldPosition = instanceMatrix * worldPosition;\\n\\t#endif\\n\\tworldPosition = modelMatrix * worldPosition;\\n#endif\";\n\nconst vertex$g = \"varying vec2 vUv;\\nuniform mat3 uvTransform;\\nvoid main() {\\n\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n\\tgl_Position = vec4( position.xy, 1.0, 1.0 );\\n}\";\n\nconst fragment$g = \"uniform sampler2D t2D;\\nvarying vec2 vUv;\\nvoid main() {\\n\\tvec4 texColor = texture2D( t2D, vUv );\\n\\tgl_FragColor = mapTexelToLinear( texColor );\\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$f = \"varying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\n\\tgl_Position.z = gl_Position.w;\\n}\";\n\nconst fragment$f = \"#include \\nuniform float opacity;\\nvarying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvec3 vReflect = vWorldDirection;\\n\\t#include \\n\\tgl_FragColor = envColor;\\n\\tgl_FragColor.a *= opacity;\\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$e = \"#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvHighPrecisionZW = gl_Position.zw;\\n}\";\n\nconst fragment$e = \"#if DEPTH_PACKING == 3200\\n\\tuniform float opacity;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tdiffuseColor.a = opacity;\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\\n\\t#elif DEPTH_PACKING == 3201\\n\\t\\tgl_FragColor = packDepthToRGBA( fragCoordZ );\\n\\t#endif\\n}\";\n\nconst vertex$d = \"#define DISTANCE\\nvarying vec3 vWorldPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvWorldPosition = worldPosition.xyz;\\n}\";\n\nconst fragment$d = \"#define DISTANCE\\nuniform vec3 referencePosition;\\nuniform float nearDistance;\\nuniform float farDistance;\\nvarying vec3 vWorldPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main () {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\tfloat dist = length( vWorldPosition - referencePosition );\\n\\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\\n\\tdist = saturate( dist );\\n\\tgl_FragColor = packDepthToRGBA( dist );\\n}\";\n\nconst vertex$c = \"varying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$c = \"uniform sampler2D tEquirect;\\nvarying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvec3 direction = normalize( vWorldDirection );\\n\\tvec2 sampleUV = equirectUv( direction );\\n\\tvec4 texColor = texture2D( tEquirect, sampleUV );\\n\\tgl_FragColor = mapTexelToLinear( texColor );\\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$b = \"uniform float scale;\\nattribute float lineDistance;\\nvarying float vLineDistance;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvLineDistance = scale * lineDistance;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$b = \"uniform vec3 diffuse;\\nuniform float opacity;\\nuniform float dashSize;\\nuniform float totalSize;\\nvarying float vLineDistance;\\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\\n\\t\\tdiscard;\\n\\t}\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$a = \"#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$a = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\n\\t\\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vec3( 1.0 );\\n\\t#endif\\n\\t#include \\n\\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\\n\\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$9 = \"#define LAMBERT\\nvarying vec3 vLightFront;\\nvarying vec3 vIndirectFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n\\tvarying vec3 vIndirectBack;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$9 = \"uniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\nvarying vec3 vLightFront;\\nvarying vec3 vIndirectFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n\\tvarying vec3 vIndirectBack;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#ifdef DOUBLE_SIDED\\n\\t\\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vIndirectFront;\\n\\t#endif\\n\\t#include \\n\\treflectedLight.indirectDiffuse *= BRDF_Lambert( diffuseColor.rgb );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\\n\\t#else\\n\\t\\treflectedLight.directDiffuse = vLightFront;\\n\\t#endif\\n\\treflectedLight.directDiffuse *= BRDF_Lambert( diffuseColor.rgb ) * getShadowMask();\\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$8 = \"#define MATCAP\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n}\";\n\nconst fragment$8 = \"#define MATCAP\\nuniform vec3 diffuse;\\nuniform float opacity;\\nuniform sampler2D matcap;\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 viewDir = normalize( vViewPosition );\\n\\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\\n\\tvec3 y = cross( viewDir, x );\\n\\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\\n\\t#ifdef USE_MATCAP\\n\\t\\tvec4 matcapColor = texture2D( matcap, uv );\\n\\t\\tmatcapColor = matcapTexelToLinear( matcapColor );\\n\\t#else\\n\\t\\tvec4 matcapColor = vec4( 1.0 );\\n\\t#endif\\n\\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$7 = \"#define NORMAL\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n}\";\n\nconst fragment$7 = \"#define NORMAL\\nuniform float opacity;\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\\n}\";\n\nconst vertex$6 = \"#define PHONG\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$6 = \"#define PHONG\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform vec3 specular;\\nuniform float shininess;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$5 = \"#define STANDARD\\nvarying vec3 vViewPosition;\\n#ifdef USE_TRANSMISSION\\n\\tvarying vec3 vWorldPosition;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n#ifdef USE_TRANSMISSION\\n\\tvWorldPosition = worldPosition.xyz;\\n#endif\\n}\";\n\nconst fragment$5 = \"#define STANDARD\\n#ifdef PHYSICAL\\n\\t#define IOR\\n\\t#define SPECULAR\\n#endif\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float roughness;\\nuniform float metalness;\\nuniform float opacity;\\n#ifdef IOR\\n\\tuniform float ior;\\n#endif\\n#ifdef SPECULAR\\n\\tuniform float specularIntensity;\\n\\tuniform vec3 specularTint;\\n\\t#ifdef USE_SPECULARINTENSITYMAP\\n\\t\\tuniform sampler2D specularIntensityMap;\\n\\t#endif\\n\\t#ifdef USE_SPECULARTINTMAP\\n\\t\\tuniform sampler2D specularTintMap;\\n\\t#endif\\n#endif\\n#ifdef USE_CLEARCOAT\\n\\tuniform float clearcoat;\\n\\tuniform float clearcoatRoughness;\\n#endif\\n#ifdef USE_SHEEN\\n\\tuniform vec3 sheenTint;\\n\\tuniform float sheenRoughness;\\n#endif\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\\n\\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\\n\\t#include \\n\\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tfloat dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\\n\\t\\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\\n\\t\\toutgoingLight = outgoingLight * ( 1.0 - clearcoat * Fcc ) + clearcoatSpecular * clearcoat;\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$4 = \"#define TOON\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$4 = \"#define TOON\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$3 = \"uniform float size;\\nuniform float scale;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tgl_PointSize = size;\\n\\t#ifdef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$3 = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$2 = \"#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$2 = \"uniform vec3 color;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$1 = \"uniform float rotation;\\nuniform vec2 center;\\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\\n\\tvec2 scale;\\n\\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\\n\\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\\n\\t#ifndef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) scale *= - mvPosition.z;\\n\\t#endif\\n\\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\\n\\tvec2 rotatedPosition;\\n\\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\\n\\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\\n\\tmvPosition.xy += rotatedPosition;\\n\\tgl_Position = projectionMatrix * mvPosition;\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$1 = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst ShaderChunk = {\n\talphamap_fragment: alphamap_fragment,\n\talphamap_pars_fragment: alphamap_pars_fragment,\n\talphatest_fragment: alphatest_fragment,\n\talphatest_pars_fragment: alphatest_pars_fragment,\n\taomap_fragment: aomap_fragment,\n\taomap_pars_fragment: aomap_pars_fragment,\n\tbegin_vertex: begin_vertex,\n\tbeginnormal_vertex: beginnormal_vertex,\n\tbsdfs: bsdfs,\n\tbumpmap_pars_fragment: bumpmap_pars_fragment,\n\tclipping_planes_fragment: clipping_planes_fragment,\n\tclipping_planes_pars_fragment: clipping_planes_pars_fragment,\n\tclipping_planes_pars_vertex: clipping_planes_pars_vertex,\n\tclipping_planes_vertex: clipping_planes_vertex,\n\tcolor_fragment: color_fragment,\n\tcolor_pars_fragment: color_pars_fragment,\n\tcolor_pars_vertex: color_pars_vertex,\n\tcolor_vertex: color_vertex,\n\tcommon: common,\n\tcube_uv_reflection_fragment: cube_uv_reflection_fragment,\n\tdefaultnormal_vertex: defaultnormal_vertex,\n\tdisplacementmap_pars_vertex: displacementmap_pars_vertex,\n\tdisplacementmap_vertex: displacementmap_vertex,\n\temissivemap_fragment: emissivemap_fragment,\n\temissivemap_pars_fragment: emissivemap_pars_fragment,\n\tencodings_fragment: encodings_fragment,\n\tencodings_pars_fragment: encodings_pars_fragment,\n\tenvmap_fragment: envmap_fragment,\n\tenvmap_common_pars_fragment: envmap_common_pars_fragment,\n\tenvmap_pars_fragment: envmap_pars_fragment,\n\tenvmap_pars_vertex: envmap_pars_vertex,\n\tenvmap_physical_pars_fragment: envmap_physical_pars_fragment,\n\tenvmap_vertex: envmap_vertex,\n\tfog_vertex: fog_vertex,\n\tfog_pars_vertex: fog_pars_vertex,\n\tfog_fragment: fog_fragment,\n\tfog_pars_fragment: fog_pars_fragment,\n\tgradientmap_pars_fragment: gradientmap_pars_fragment,\n\tlightmap_fragment: lightmap_fragment,\n\tlightmap_pars_fragment: lightmap_pars_fragment,\n\tlights_lambert_vertex: lights_lambert_vertex,\n\tlights_pars_begin: lights_pars_begin,\n\tlights_toon_fragment: lights_toon_fragment,\n\tlights_toon_pars_fragment: lights_toon_pars_fragment,\n\tlights_phong_fragment: lights_phong_fragment,\n\tlights_phong_pars_fragment: lights_phong_pars_fragment,\n\tlights_physical_fragment: lights_physical_fragment,\n\tlights_physical_pars_fragment: lights_physical_pars_fragment,\n\tlights_fragment_begin: lights_fragment_begin,\n\tlights_fragment_maps: lights_fragment_maps,\n\tlights_fragment_end: lights_fragment_end,\n\tlogdepthbuf_fragment: logdepthbuf_fragment,\n\tlogdepthbuf_pars_fragment: logdepthbuf_pars_fragment,\n\tlogdepthbuf_pars_vertex: logdepthbuf_pars_vertex,\n\tlogdepthbuf_vertex: logdepthbuf_vertex,\n\tmap_fragment: map_fragment,\n\tmap_pars_fragment: map_pars_fragment,\n\tmap_particle_fragment: map_particle_fragment,\n\tmap_particle_pars_fragment: map_particle_pars_fragment,\n\tmetalnessmap_fragment: metalnessmap_fragment,\n\tmetalnessmap_pars_fragment: metalnessmap_pars_fragment,\n\tmorphnormal_vertex: morphnormal_vertex,\n\tmorphtarget_pars_vertex: morphtarget_pars_vertex,\n\tmorphtarget_vertex: morphtarget_vertex,\n\tnormal_fragment_begin: normal_fragment_begin,\n\tnormal_fragment_maps: normal_fragment_maps,\n\tnormal_pars_fragment: normal_pars_fragment,\n\tnormal_pars_vertex: normal_pars_vertex,\n\tnormal_vertex: normal_vertex,\n\tnormalmap_pars_fragment: normalmap_pars_fragment,\n\tclearcoat_normal_fragment_begin: clearcoat_normal_fragment_begin,\n\tclearcoat_normal_fragment_maps: clearcoat_normal_fragment_maps,\n\tclearcoat_pars_fragment: clearcoat_pars_fragment,\n\toutput_fragment: output_fragment,\n\tpacking: packing,\n\tpremultiplied_alpha_fragment: premultiplied_alpha_fragment,\n\tproject_vertex: project_vertex,\n\tdithering_fragment: dithering_fragment,\n\tdithering_pars_fragment: dithering_pars_fragment,\n\troughnessmap_fragment: roughnessmap_fragment,\n\troughnessmap_pars_fragment: roughnessmap_pars_fragment,\n\tshadowmap_pars_fragment: shadowmap_pars_fragment,\n\tshadowmap_pars_vertex: shadowmap_pars_vertex,\n\tshadowmap_vertex: shadowmap_vertex,\n\tshadowmask_pars_fragment: shadowmask_pars_fragment,\n\tskinbase_vertex: skinbase_vertex,\n\tskinning_pars_vertex: skinning_pars_vertex,\n\tskinning_vertex: skinning_vertex,\n\tskinnormal_vertex: skinnormal_vertex,\n\tspecularmap_fragment: specularmap_fragment,\n\tspecularmap_pars_fragment: specularmap_pars_fragment,\n\ttonemapping_fragment: tonemapping_fragment,\n\ttonemapping_pars_fragment: tonemapping_pars_fragment,\n\ttransmission_fragment: transmission_fragment,\n\ttransmission_pars_fragment: transmission_pars_fragment,\n\tuv_pars_fragment: uv_pars_fragment,\n\tuv_pars_vertex: uv_pars_vertex,\n\tuv_vertex: uv_vertex,\n\tuv2_pars_fragment: uv2_pars_fragment,\n\tuv2_pars_vertex: uv2_pars_vertex,\n\tuv2_vertex: uv2_vertex,\n\tworldpos_vertex: worldpos_vertex,\n\n\tbackground_vert: vertex$g,\n\tbackground_frag: fragment$g,\n\tcube_vert: vertex$f,\n\tcube_frag: fragment$f,\n\tdepth_vert: vertex$e,\n\tdepth_frag: fragment$e,\n\tdistanceRGBA_vert: vertex$d,\n\tdistanceRGBA_frag: fragment$d,\n\tequirect_vert: vertex$c,\n\tequirect_frag: fragment$c,\n\tlinedashed_vert: vertex$b,\n\tlinedashed_frag: fragment$b,\n\tmeshbasic_vert: vertex$a,\n\tmeshbasic_frag: fragment$a,\n\tmeshlambert_vert: vertex$9,\n\tmeshlambert_frag: fragment$9,\n\tmeshmatcap_vert: vertex$8,\n\tmeshmatcap_frag: fragment$8,\n\tmeshnormal_vert: vertex$7,\n\tmeshnormal_frag: fragment$7,\n\tmeshphong_vert: vertex$6,\n\tmeshphong_frag: fragment$6,\n\tmeshphysical_vert: vertex$5,\n\tmeshphysical_frag: fragment$5,\n\tmeshtoon_vert: vertex$4,\n\tmeshtoon_frag: fragment$4,\n\tpoints_vert: vertex$3,\n\tpoints_frag: fragment$3,\n\tshadow_vert: vertex$2,\n\tshadow_frag: fragment$2,\n\tsprite_vert: vertex$1,\n\tsprite_frag: fragment$1\n};\n\n/**\n * Uniforms library for shared webgl shaders\n */\n\nconst UniformsLib = {\n\n\tcommon: {\n\n\t\tdiffuse: { value: new Color( 0xffffff ) },\n\t\topacity: { value: 1.0 },\n\n\t\tmap: { value: null },\n\t\tuvTransform: { value: new Matrix3() },\n\t\tuv2Transform: { value: new Matrix3() },\n\n\t\talphaMap: { value: null },\n\t\talphaTest: { value: 0 }\n\n\t},\n\n\tspecularmap: {\n\n\t\tspecularMap: { value: null },\n\n\t},\n\n\tenvmap: {\n\n\t\tenvMap: { value: null },\n\t\tflipEnvMap: { value: - 1 },\n\t\treflectivity: { value: 1.0 }, // basic, lambert, phong\n\t\tior: { value: 1.5 }, // standard, physical\n\t\trefractionRatio: { value: 0.98 },\n\t\tmaxMipLevel: { value: 0 }\n\n\t},\n\n\taomap: {\n\n\t\taoMap: { value: null },\n\t\taoMapIntensity: { value: 1 }\n\n\t},\n\n\tlightmap: {\n\n\t\tlightMap: { value: null },\n\t\tlightMapIntensity: { value: 1 }\n\n\t},\n\n\temissivemap: {\n\n\t\temissiveMap: { value: null }\n\n\t},\n\n\tbumpmap: {\n\n\t\tbumpMap: { value: null },\n\t\tbumpScale: { value: 1 }\n\n\t},\n\n\tnormalmap: {\n\n\t\tnormalMap: { value: null },\n\t\tnormalScale: { value: new Vector2( 1, 1 ) }\n\n\t},\n\n\tdisplacementmap: {\n\n\t\tdisplacementMap: { value: null },\n\t\tdisplacementScale: { value: 1 },\n\t\tdisplacementBias: { value: 0 }\n\n\t},\n\n\troughnessmap: {\n\n\t\troughnessMap: { value: null }\n\n\t},\n\n\tmetalnessmap: {\n\n\t\tmetalnessMap: { value: null }\n\n\t},\n\n\tgradientmap: {\n\n\t\tgradientMap: { value: null }\n\n\t},\n\n\tfog: {\n\n\t\tfogDensity: { value: 0.00025 },\n\t\tfogNear: { value: 1 },\n\t\tfogFar: { value: 2000 },\n\t\tfogColor: { value: new Color( 0xffffff ) }\n\n\t},\n\n\tlights: {\n\n\t\tambientLightColor: { value: [] },\n\n\t\tlightProbe: { value: [] },\n\n\t\tdirectionalLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tcolor: {}\n\t\t} },\n\n\t\tdirectionalLightShadows: { value: [], properties: {\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tdirectionalShadowMap: { value: [] },\n\t\tdirectionalShadowMatrix: { value: [] },\n\n\t\tspotLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdirection: {},\n\t\t\tdistance: {},\n\t\t\tconeCos: {},\n\t\t\tpenumbraCos: {},\n\t\t\tdecay: {}\n\t\t} },\n\n\t\tspotLightShadows: { value: [], properties: {\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tspotShadowMap: { value: [] },\n\t\tspotShadowMatrix: { value: [] },\n\n\t\tpointLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdecay: {},\n\t\t\tdistance: {}\n\t\t} },\n\n\t\tpointLightShadows: { value: [], properties: {\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {},\n\t\t\tshadowCameraNear: {},\n\t\t\tshadowCameraFar: {}\n\t\t} },\n\n\t\tpointShadowMap: { value: [] },\n\t\tpointShadowMatrix: { value: [] },\n\n\t\themisphereLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tskyColor: {},\n\t\t\tgroundColor: {}\n\t\t} },\n\n\t\t// TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src\n\t\trectAreaLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\twidth: {},\n\t\t\theight: {}\n\t\t} },\n\n\t\tltc_1: { value: null },\n\t\tltc_2: { value: null }\n\n\t},\n\n\tpoints: {\n\n\t\tdiffuse: { value: new Color( 0xffffff ) },\n\t\topacity: { value: 1.0 },\n\t\tsize: { value: 1.0 },\n\t\tscale: { value: 1.0 },\n\t\tmap: { value: null },\n\t\talphaMap: { value: null },\n\t\talphaTest: { value: 0 },\n\t\tuvTransform: { value: new Matrix3() }\n\n\t},\n\n\tsprite: {\n\n\t\tdiffuse: { value: new Color( 0xffffff ) },\n\t\topacity: { value: 1.0 },\n\t\tcenter: { value: new Vector2( 0.5, 0.5 ) },\n\t\trotation: { value: 0.0 },\n\t\tmap: { value: null },\n\t\talphaMap: { value: null },\n\t\talphaTest: { value: 0 },\n\t\tuvTransform: { value: new Matrix3() }\n\n\t}\n\n};\n\nconst ShaderLib = {\n\n\tbasic: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshbasic_vert,\n\t\tfragmentShader: ShaderChunk.meshbasic_frag\n\n\t},\n\n\tlambert: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: new Color( 0x000000 ) }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshlambert_vert,\n\t\tfragmentShader: ShaderChunk.meshlambert_frag\n\n\t},\n\n\tphong: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: new Color( 0x000000 ) },\n\t\t\t\tspecular: { value: new Color( 0x111111 ) },\n\t\t\t\tshininess: { value: 30 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphong_vert,\n\t\tfragmentShader: ShaderChunk.meshphong_frag\n\n\t},\n\n\tstandard: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.roughnessmap,\n\t\t\tUniformsLib.metalnessmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: new Color( 0x000000 ) },\n\t\t\t\troughness: { value: 1.0 },\n\t\t\t\tmetalness: { value: 0.0 },\n\t\t\t\tenvMapIntensity: { value: 1 } // temporary\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphysical_vert,\n\t\tfragmentShader: ShaderChunk.meshphysical_frag\n\n\t},\n\n\ttoon: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.gradientmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: new Color( 0x000000 ) }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshtoon_vert,\n\t\tfragmentShader: ShaderChunk.meshtoon_frag\n\n\t},\n\n\tmatcap: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tmatcap: { value: null }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshmatcap_vert,\n\t\tfragmentShader: ShaderChunk.meshmatcap_frag\n\n\t},\n\n\tpoints: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.points,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.points_vert,\n\t\tfragmentShader: ShaderChunk.points_frag\n\n\t},\n\n\tdashed: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tscale: { value: 1 },\n\t\t\t\tdashSize: { value: 1 },\n\t\t\t\ttotalSize: { value: 2 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.linedashed_vert,\n\t\tfragmentShader: ShaderChunk.linedashed_frag\n\n\t},\n\n\tdepth: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.depth_vert,\n\t\tfragmentShader: ShaderChunk.depth_frag\n\n\t},\n\n\tnormal: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshnormal_vert,\n\t\tfragmentShader: ShaderChunk.meshnormal_frag\n\n\t},\n\n\tsprite: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.sprite,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.sprite_vert,\n\t\tfragmentShader: ShaderChunk.sprite_frag\n\n\t},\n\n\tbackground: {\n\n\t\tuniforms: {\n\t\t\tuvTransform: { value: new Matrix3() },\n\t\t\tt2D: { value: null },\n\t\t},\n\n\t\tvertexShader: ShaderChunk.background_vert,\n\t\tfragmentShader: ShaderChunk.background_frag\n\n\t},\n\t/* -------------------------------------------------------------------------\n\t//\tCube map shader\n\t ------------------------------------------------------------------------- */\n\n\tcube: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.envmap,\n\t\t\t{\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.cube_vert,\n\t\tfragmentShader: ShaderChunk.cube_frag\n\n\t},\n\n\tequirect: {\n\n\t\tuniforms: {\n\t\t\ttEquirect: { value: null },\n\t\t},\n\n\t\tvertexShader: ShaderChunk.equirect_vert,\n\t\tfragmentShader: ShaderChunk.equirect_frag\n\n\t},\n\n\tdistanceRGBA: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\treferencePosition: { value: new Vector3() },\n\t\t\t\tnearDistance: { value: 1 },\n\t\t\t\tfarDistance: { value: 1000 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.distanceRGBA_vert,\n\t\tfragmentShader: ShaderChunk.distanceRGBA_frag\n\n\t},\n\n\tshadow: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.lights,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tcolor: { value: new Color( 0x00000 ) },\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t},\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.shadow_vert,\n\t\tfragmentShader: ShaderChunk.shadow_frag\n\n\t}\n\n};\n\nShaderLib.physical = {\n\n\tuniforms: mergeUniforms( [\n\t\tShaderLib.standard.uniforms,\n\t\t{\n\t\t\tclearcoat: { value: 0 },\n\t\t\tclearcoatMap: { value: null },\n\t\t\tclearcoatRoughness: { value: 0 },\n\t\t\tclearcoatRoughnessMap: { value: null },\n\t\t\tclearcoatNormalScale: { value: new Vector2( 1, 1 ) },\n\t\t\tclearcoatNormalMap: { value: null },\n\t\t\tsheen: { value: 0 },\n\t\t\tsheenTint: { value: new Color( 0x000000 ) },\n\t\t\tsheenRoughness: { value: 0 },\n\t\t\ttransmission: { value: 0 },\n\t\t\ttransmissionMap: { value: null },\n\t\t\ttransmissionSamplerSize: { value: new Vector2() },\n\t\t\ttransmissionSamplerMap: { value: null },\n\t\t\tthickness: { value: 0 },\n\t\t\tthicknessMap: { value: null },\n\t\t\tattenuationDistance: { value: 0 },\n\t\t\tattenuationTint: { value: new Color( 0x000000 ) },\n\t\t\tspecularIntensity: { value: 0 },\n\t\t\tspecularIntensityMap: { value: null },\n\t\t\tspecularTint: { value: new Color( 1, 1, 1 ) },\n\t\t\tspecularTintMap: { value: null },\n\t\t}\n\t] ),\n\n\tvertexShader: ShaderChunk.meshphysical_vert,\n\tfragmentShader: ShaderChunk.meshphysical_frag\n\n};\n\nfunction WebGLBackground( renderer, cubemaps, state, objects, premultipliedAlpha ) {\n\n\tconst clearColor = new Color( 0x000000 );\n\tlet clearAlpha = 0;\n\n\tlet planeMesh;\n\tlet boxMesh;\n\n\tlet currentBackground = null;\n\tlet currentBackgroundVersion = 0;\n\tlet currentTonemapping = null;\n\n\tfunction render( renderList, scene ) {\n\n\t\tlet forceClear = false;\n\t\tlet background = scene.isScene === true ? scene.background : null;\n\n\t\tif ( background && background.isTexture ) {\n\n\t\t\tbackground = cubemaps.get( background );\n\n\t\t}\n\n\t\t// Ignore background in AR\n\t\t// TODO: Reconsider this.\n\n\t\tconst xr = renderer.xr;\n\t\tconst session = xr.getSession && xr.getSession();\n\n\t\tif ( session && session.environmentBlendMode === 'additive' ) {\n\n\t\t\tbackground = null;\n\n\t\t}\n\n\t\tif ( background === null ) {\n\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t} else if ( background && background.isColor ) {\n\n\t\t\tsetClear( background, 1 );\n\t\t\tforceClear = true;\n\n\t\t}\n\n\t\tif ( renderer.autoClear || forceClear ) {\n\n\t\t\trenderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\n\t\t}\n\n\t\tif ( background && ( background.isCubeTexture || background.mapping === CubeUVReflectionMapping ) ) {\n\n\t\t\tif ( boxMesh === undefined ) {\n\n\t\t\t\tboxMesh = new Mesh(\n\t\t\t\t\tnew BoxGeometry( 1, 1, 1 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tname: 'BackgroundCubeMaterial',\n\t\t\t\t\t\tuniforms: cloneUniforms( ShaderLib.cube.uniforms ),\n\t\t\t\t\t\tvertexShader: ShaderLib.cube.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.cube.fragmentShader,\n\t\t\t\t\t\tside: BackSide,\n\t\t\t\t\t\tdepthTest: false,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tfog: false\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\t\tboxMesh.geometry.deleteAttribute( 'normal' );\n\t\t\t\tboxMesh.geometry.deleteAttribute( 'uv' );\n\n\t\t\t\tboxMesh.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\t\t\tthis.matrixWorld.copyPosition( camera.matrixWorld );\n\n\t\t\t\t};\n\n\t\t\t\t// enable code injection for non-built-in material\n\t\t\t\tObject.defineProperty( boxMesh.material, 'envMap', {\n\n\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\treturn this.uniforms.envMap.value;\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tobjects.update( boxMesh );\n\n\t\t\t}\n\n\t\t\tboxMesh.material.uniforms.envMap.value = background;\n\t\t\tboxMesh.material.uniforms.flipEnvMap.value = ( background.isCubeTexture && background.isRenderTargetTexture === false ) ? - 1 : 1;\n\n\t\t\tif ( currentBackground !== background ||\n\t\t\t\tcurrentBackgroundVersion !== background.version ||\n\t\t\t\tcurrentTonemapping !== renderer.toneMapping ) {\n\n\t\t\t\tboxMesh.material.needsUpdate = true;\n\n\t\t\t\tcurrentBackground = background;\n\t\t\t\tcurrentBackgroundVersion = background.version;\n\t\t\t\tcurrentTonemapping = renderer.toneMapping;\n\n\t\t\t}\n\n\t\t\t// push to the pre-sorted opaque render list\n\t\t\trenderList.unshift( boxMesh, boxMesh.geometry, boxMesh.material, 0, 0, null );\n\n\t\t} else if ( background && background.isTexture ) {\n\n\t\t\tif ( planeMesh === undefined ) {\n\n\t\t\t\tplaneMesh = new Mesh(\n\t\t\t\t\tnew PlaneGeometry( 2, 2 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tname: 'BackgroundMaterial',\n\t\t\t\t\t\tuniforms: cloneUniforms( ShaderLib.background.uniforms ),\n\t\t\t\t\t\tvertexShader: ShaderLib.background.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.background.fragmentShader,\n\t\t\t\t\t\tside: FrontSide,\n\t\t\t\t\t\tdepthTest: false,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tfog: false\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\t\tplaneMesh.geometry.deleteAttribute( 'normal' );\n\n\t\t\t\t// enable code injection for non-built-in material\n\t\t\t\tObject.defineProperty( planeMesh.material, 'map', {\n\n\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\treturn this.uniforms.t2D.value;\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tobjects.update( planeMesh );\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.uniforms.t2D.value = background;\n\n\t\t\tif ( background.matrixAutoUpdate === true ) {\n\n\t\t\t\tbackground.updateMatrix();\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.uniforms.uvTransform.value.copy( background.matrix );\n\n\t\t\tif ( currentBackground !== background ||\n\t\t\t\tcurrentBackgroundVersion !== background.version ||\n\t\t\t\tcurrentTonemapping !== renderer.toneMapping ) {\n\n\t\t\t\tplaneMesh.material.needsUpdate = true;\n\n\t\t\t\tcurrentBackground = background;\n\t\t\t\tcurrentBackgroundVersion = background.version;\n\t\t\t\tcurrentTonemapping = renderer.toneMapping;\n\n\t\t\t}\n\n\n\t\t\t// push to the pre-sorted opaque render list\n\t\t\trenderList.unshift( planeMesh, planeMesh.geometry, planeMesh.material, 0, 0, null );\n\n\t\t}\n\n\t}\n\n\tfunction setClear( color, alpha ) {\n\n\t\tstate.buffers.color.setClear( color.r, color.g, color.b, alpha, premultipliedAlpha );\n\n\t}\n\n\treturn {\n\n\t\tgetClearColor: function () {\n\n\t\t\treturn clearColor;\n\n\t\t},\n\t\tsetClearColor: function ( color, alpha = 1 ) {\n\n\t\t\tclearColor.set( color );\n\t\t\tclearAlpha = alpha;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\tgetClearAlpha: function () {\n\n\t\t\treturn clearAlpha;\n\n\t\t},\n\t\tsetClearAlpha: function ( alpha ) {\n\n\t\t\tclearAlpha = alpha;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\trender: render\n\n\t};\n\n}\n\nfunction WebGLBindingStates( gl, extensions, attributes, capabilities ) {\n\n\tconst maxVertexAttributes = gl.getParameter( 34921 );\n\n\tconst extension = capabilities.isWebGL2 ? null : extensions.get( 'OES_vertex_array_object' );\n\tconst vaoAvailable = capabilities.isWebGL2 || extension !== null;\n\n\tconst bindingStates = {};\n\n\tconst defaultState = createBindingState( null );\n\tlet currentState = defaultState;\n\n\tfunction setup( object, material, program, geometry, index ) {\n\n\t\tlet updateBuffers = false;\n\n\t\tif ( vaoAvailable ) {\n\n\t\t\tconst state = getBindingState( geometry, program, material );\n\n\t\t\tif ( currentState !== state ) {\n\n\t\t\t\tcurrentState = state;\n\t\t\t\tbindVertexArrayObject( currentState.object );\n\n\t\t\t}\n\n\t\t\tupdateBuffers = needsUpdate( geometry, index );\n\n\t\t\tif ( updateBuffers ) saveCache( geometry, index );\n\n\t\t} else {\n\n\t\t\tconst wireframe = ( material.wireframe === true );\n\n\t\t\tif ( currentState.geometry !== geometry.id ||\n\t\t\t\tcurrentState.program !== program.id ||\n\t\t\t\tcurrentState.wireframe !== wireframe ) {\n\n\t\t\t\tcurrentState.geometry = geometry.id;\n\t\t\t\tcurrentState.program = program.id;\n\t\t\t\tcurrentState.wireframe = wireframe;\n\n\t\t\t\tupdateBuffers = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( object.isInstancedMesh === true ) {\n\n\t\t\tupdateBuffers = true;\n\n\t\t}\n\n\t\tif ( index !== null ) {\n\n\t\t\tattributes.update( index, 34963 );\n\n\t\t}\n\n\t\tif ( updateBuffers ) {\n\n\t\t\tsetupVertexAttributes( object, material, program, geometry );\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tgl.bindBuffer( 34963, attributes.get( index ).buffer );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction createVertexArrayObject() {\n\n\t\tif ( capabilities.isWebGL2 ) return gl.createVertexArray();\n\n\t\treturn extension.createVertexArrayOES();\n\n\t}\n\n\tfunction bindVertexArrayObject( vao ) {\n\n\t\tif ( capabilities.isWebGL2 ) return gl.bindVertexArray( vao );\n\n\t\treturn extension.bindVertexArrayOES( vao );\n\n\t}\n\n\tfunction deleteVertexArrayObject( vao ) {\n\n\t\tif ( capabilities.isWebGL2 ) return gl.deleteVertexArray( vao );\n\n\t\treturn extension.deleteVertexArrayOES( vao );\n\n\t}\n\n\tfunction getBindingState( geometry, program, material ) {\n\n\t\tconst wireframe = ( material.wireframe === true );\n\n\t\tlet programMap = bindingStates[ geometry.id ];\n\n\t\tif ( programMap === undefined ) {\n\n\t\t\tprogramMap = {};\n\t\t\tbindingStates[ geometry.id ] = programMap;\n\n\t\t}\n\n\t\tlet stateMap = programMap[ program.id ];\n\n\t\tif ( stateMap === undefined ) {\n\n\t\t\tstateMap = {};\n\t\t\tprogramMap[ program.id ] = stateMap;\n\n\t\t}\n\n\t\tlet state = stateMap[ wireframe ];\n\n\t\tif ( state === undefined ) {\n\n\t\t\tstate = createBindingState( createVertexArrayObject() );\n\t\t\tstateMap[ wireframe ] = state;\n\n\t\t}\n\n\t\treturn state;\n\n\t}\n\n\tfunction createBindingState( vao ) {\n\n\t\tconst newAttributes = [];\n\t\tconst enabledAttributes = [];\n\t\tconst attributeDivisors = [];\n\n\t\tfor ( let i = 0; i < maxVertexAttributes; i ++ ) {\n\n\t\t\tnewAttributes[ i ] = 0;\n\t\t\tenabledAttributes[ i ] = 0;\n\t\t\tattributeDivisors[ i ] = 0;\n\n\t\t}\n\n\t\treturn {\n\n\t\t\t// for backward compatibility on non-VAO support browser\n\t\t\tgeometry: null,\n\t\t\tprogram: null,\n\t\t\twireframe: false,\n\n\t\t\tnewAttributes: newAttributes,\n\t\t\tenabledAttributes: enabledAttributes,\n\t\t\tattributeDivisors: attributeDivisors,\n\t\t\tobject: vao,\n\t\t\tattributes: {},\n\t\t\tindex: null\n\n\t\t};\n\n\t}\n\n\tfunction needsUpdate( geometry, index ) {\n\n\t\tconst cachedAttributes = currentState.attributes;\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\tlet attributesNum = 0;\n\n\t\tfor ( const key in geometryAttributes ) {\n\n\t\t\tconst cachedAttribute = cachedAttributes[ key ];\n\t\t\tconst geometryAttribute = geometryAttributes[ key ];\n\n\t\t\tif ( cachedAttribute === undefined ) return true;\n\n\t\t\tif ( cachedAttribute.attribute !== geometryAttribute ) return true;\n\n\t\t\tif ( cachedAttribute.data !== geometryAttribute.data ) return true;\n\n\t\t\tattributesNum ++;\n\n\t\t}\n\n\t\tif ( currentState.attributesNum !== attributesNum ) return true;\n\n\t\tif ( currentState.index !== index ) return true;\n\n\t\treturn false;\n\n\t}\n\n\tfunction saveCache( geometry, index ) {\n\n\t\tconst cache = {};\n\t\tconst attributes = geometry.attributes;\n\t\tlet attributesNum = 0;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\n\t\t\tconst data = {};\n\t\t\tdata.attribute = attribute;\n\n\t\t\tif ( attribute.data ) {\n\n\t\t\t\tdata.data = attribute.data;\n\n\t\t\t}\n\n\t\t\tcache[ key ] = data;\n\n\t\t\tattributesNum ++;\n\n\t\t}\n\n\t\tcurrentState.attributes = cache;\n\t\tcurrentState.attributesNum = attributesNum;\n\n\t\tcurrentState.index = index;\n\n\t}\n\n\tfunction initAttributes() {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\n\t\tfor ( let i = 0, il = newAttributes.length; i < il; i ++ ) {\n\n\t\t\tnewAttributes[ i ] = 0;\n\n\t\t}\n\n\t}\n\n\tfunction enableAttribute( attribute ) {\n\n\t\tenableAttributeAndDivisor( attribute, 0 );\n\n\t}\n\n\tfunction enableAttributeAndDivisor( attribute, meshPerAttribute ) {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\t\tconst enabledAttributes = currentState.enabledAttributes;\n\t\tconst attributeDivisors = currentState.attributeDivisors;\n\n\t\tnewAttributes[ attribute ] = 1;\n\n\t\tif ( enabledAttributes[ attribute ] === 0 ) {\n\n\t\t\tgl.enableVertexAttribArray( attribute );\n\t\t\tenabledAttributes[ attribute ] = 1;\n\n\t\t}\n\n\t\tif ( attributeDivisors[ attribute ] !== meshPerAttribute ) {\n\n\t\t\tconst extension = capabilities.isWebGL2 ? gl : extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\t\textension[ capabilities.isWebGL2 ? 'vertexAttribDivisor' : 'vertexAttribDivisorANGLE' ]( attribute, meshPerAttribute );\n\t\t\tattributeDivisors[ attribute ] = meshPerAttribute;\n\n\t\t}\n\n\t}\n\n\tfunction disableUnusedAttributes() {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\t\tconst enabledAttributes = currentState.enabledAttributes;\n\n\t\tfor ( let i = 0, il = enabledAttributes.length; i < il; i ++ ) {\n\n\t\t\tif ( enabledAttributes[ i ] !== newAttributes[ i ] ) {\n\n\t\t\t\tgl.disableVertexAttribArray( i );\n\t\t\t\tenabledAttributes[ i ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction vertexAttribPointer( index, size, type, normalized, stride, offset ) {\n\n\t\tif ( capabilities.isWebGL2 === true && ( type === 5124 || type === 5125 ) ) {\n\n\t\t\tgl.vertexAttribIPointer( index, size, type, stride, offset );\n\n\t\t} else {\n\n\t\t\tgl.vertexAttribPointer( index, size, type, normalized, stride, offset );\n\n\t\t}\n\n\t}\n\n\tfunction setupVertexAttributes( object, material, program, geometry ) {\n\n\t\tif ( capabilities.isWebGL2 === false && ( object.isInstancedMesh || geometry.isInstancedBufferGeometry ) ) {\n\n\t\t\tif ( extensions.get( 'ANGLE_instanced_arrays' ) === null ) return;\n\n\t\t}\n\n\t\tinitAttributes();\n\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tconst materialDefaultAttributeValues = material.defaultAttributeValues;\n\n\t\tfor ( const name in programAttributes ) {\n\n\t\t\tconst programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute.location >= 0 ) {\n\n\t\t\t\tlet geometryAttribute = geometryAttributes[ name ];\n\n\t\t\t\tif ( geometryAttribute === undefined ) {\n\n\t\t\t\t\tif ( name === 'instanceMatrix' && object.instanceMatrix ) geometryAttribute = object.instanceMatrix;\n\t\t\t\t\tif ( name === 'instanceColor' && object.instanceColor ) geometryAttribute = object.instanceColor;\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometryAttribute !== undefined ) {\n\n\t\t\t\t\tconst normalized = geometryAttribute.normalized;\n\t\t\t\t\tconst size = geometryAttribute.itemSize;\n\n\t\t\t\t\tconst attribute = attributes.get( geometryAttribute );\n\n\t\t\t\t\t// TODO Attribute may not be available on context restore\n\n\t\t\t\t\tif ( attribute === undefined ) continue;\n\n\t\t\t\t\tconst buffer = attribute.buffer;\n\t\t\t\t\tconst type = attribute.type;\n\t\t\t\t\tconst bytesPerElement = attribute.bytesPerElement;\n\n\t\t\t\t\tif ( geometryAttribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\tconst data = geometryAttribute.data;\n\t\t\t\t\t\tconst stride = data.stride;\n\t\t\t\t\t\tconst offset = geometryAttribute.offset;\n\n\t\t\t\t\t\tif ( data && data.isInstancedInterleavedBuffer ) {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttributeAndDivisor( programAttribute.location + i, data.meshPerAttribute );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( object.isInstancedMesh !== true && geometry._maxInstanceCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry._maxInstanceCount = data.meshPerAttribute * data.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttribute( programAttribute.location + i );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgl.bindBuffer( 34962, buffer );\n\n\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\tvertexAttribPointer(\n\t\t\t\t\t\t\t\tprogramAttribute.location + i,\n\t\t\t\t\t\t\t\tsize / programAttribute.locationSize,\n\t\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\t\tnormalized,\n\t\t\t\t\t\t\t\tstride * bytesPerElement,\n\t\t\t\t\t\t\t\t( offset + ( size / programAttribute.locationSize ) * i ) * bytesPerElement\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( geometryAttribute.isInstancedBufferAttribute ) {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttributeAndDivisor( programAttribute.location + i, geometryAttribute.meshPerAttribute );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( object.isInstancedMesh !== true && geometry._maxInstanceCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry._maxInstanceCount = geometryAttribute.meshPerAttribute * geometryAttribute.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttribute( programAttribute.location + i );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgl.bindBuffer( 34962, buffer );\n\n\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\tvertexAttribPointer(\n\t\t\t\t\t\t\t\tprogramAttribute.location + i,\n\t\t\t\t\t\t\t\tsize / programAttribute.locationSize,\n\t\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\t\tnormalized,\n\t\t\t\t\t\t\t\tsize * bytesPerElement,\n\t\t\t\t\t\t\t\t( size / programAttribute.locationSize ) * i * bytesPerElement\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( materialDefaultAttributeValues !== undefined ) {\n\n\t\t\t\t\tconst value = materialDefaultAttributeValues[ name ];\n\n\t\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\t\tswitch ( value.length ) {\n\n\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\tgl.vertexAttrib2fv( programAttribute.location, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\tgl.vertexAttrib3fv( programAttribute.location, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 4:\n\t\t\t\t\t\t\t\tgl.vertexAttrib4fv( programAttribute.location, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tgl.vertexAttrib1fv( programAttribute.location, value );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tdisableUnusedAttributes();\n\n\t}\n\n\tfunction dispose() {\n\n\t\treset();\n\n\t\tfor ( const geometryId in bindingStates ) {\n\n\t\t\tconst programMap = bindingStates[ geometryId ];\n\n\t\t\tfor ( const programId in programMap ) {\n\n\t\t\t\tconst stateMap = programMap[ programId ];\n\n\t\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t\t}\n\n\t\t\t\tdelete programMap[ programId ];\n\n\t\t\t}\n\n\t\t\tdelete bindingStates[ geometryId ];\n\n\t\t}\n\n\t}\n\n\tfunction releaseStatesOfGeometry( geometry ) {\n\n\t\tif ( bindingStates[ geometry.id ] === undefined ) return;\n\n\t\tconst programMap = bindingStates[ geometry.id ];\n\n\t\tfor ( const programId in programMap ) {\n\n\t\t\tconst stateMap = programMap[ programId ];\n\n\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t}\n\n\t\t\tdelete programMap[ programId ];\n\n\t\t}\n\n\t\tdelete bindingStates[ geometry.id ];\n\n\t}\n\n\tfunction releaseStatesOfProgram( program ) {\n\n\t\tfor ( const geometryId in bindingStates ) {\n\n\t\t\tconst programMap = bindingStates[ geometryId ];\n\n\t\t\tif ( programMap[ program.id ] === undefined ) continue;\n\n\t\t\tconst stateMap = programMap[ program.id ];\n\n\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t}\n\n\t\t\tdelete programMap[ program.id ];\n\n\t\t}\n\n\t}\n\n\tfunction reset() {\n\n\t\tresetDefaultState();\n\n\t\tif ( currentState === defaultState ) return;\n\n\t\tcurrentState = defaultState;\n\t\tbindVertexArrayObject( currentState.object );\n\n\t}\n\n\t// for backward-compatilibity\n\n\tfunction resetDefaultState() {\n\n\t\tdefaultState.geometry = null;\n\t\tdefaultState.program = null;\n\t\tdefaultState.wireframe = false;\n\n\t}\n\n\treturn {\n\n\t\tsetup: setup,\n\t\treset: reset,\n\t\tresetDefaultState: resetDefaultState,\n\t\tdispose: dispose,\n\t\treleaseStatesOfGeometry: releaseStatesOfGeometry,\n\t\treleaseStatesOfProgram: releaseStatesOfProgram,\n\n\t\tinitAttributes: initAttributes,\n\t\tenableAttribute: enableAttribute,\n\t\tdisableUnusedAttributes: disableUnusedAttributes\n\n\t};\n\n}\n\nfunction WebGLBufferRenderer( gl, extensions, info, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tlet mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawArrays( mode, start, count );\n\n\t\tinfo.update( count, mode, 1 );\n\n\t}\n\n\tfunction renderInstances( start, count, primcount ) {\n\n\t\tif ( primcount === 0 ) return;\n\n\t\tlet extension, methodName;\n\n\t\tif ( isWebGL2 ) {\n\n\t\t\textension = gl;\n\t\t\tmethodName = 'drawArraysInstanced';\n\n\t\t} else {\n\n\t\t\textension = extensions.get( 'ANGLE_instanced_arrays' );\n\t\t\tmethodName = 'drawArraysInstancedANGLE';\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\textension[ methodName ]( mode, start, count, primcount );\n\n\t\tinfo.update( count, mode, primcount );\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\n}\n\nfunction WebGLCapabilities( gl, extensions, parameters ) {\n\n\tlet maxAnisotropy;\n\n\tfunction getMaxAnisotropy() {\n\n\t\tif ( maxAnisotropy !== undefined ) return maxAnisotropy;\n\n\t\tif ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) {\n\n\t\t\tconst extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\t\tmaxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT );\n\n\t\t} else {\n\n\t\t\tmaxAnisotropy = 0;\n\n\t\t}\n\n\t\treturn maxAnisotropy;\n\n\t}\n\n\tfunction getMaxPrecision( precision ) {\n\n\t\tif ( precision === 'highp' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( 35633, 36338 ).precision > 0 &&\n\t\t\t\tgl.getShaderPrecisionFormat( 35632, 36338 ).precision > 0 ) {\n\n\t\t\t\treturn 'highp';\n\n\t\t\t}\n\n\t\t\tprecision = 'mediump';\n\n\t\t}\n\n\t\tif ( precision === 'mediump' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( 35633, 36337 ).precision > 0 &&\n\t\t\t\tgl.getShaderPrecisionFormat( 35632, 36337 ).precision > 0 ) {\n\n\t\t\t\treturn 'mediump';\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn 'lowp';\n\n\t}\n\n\t/* eslint-disable no-undef */\n\tconst isWebGL2 = ( typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext ) ||\n\t\t( typeof WebGL2ComputeRenderingContext !== 'undefined' && gl instanceof WebGL2ComputeRenderingContext );\n\t/* eslint-enable no-undef */\n\n\tlet precision = parameters.precision !== undefined ? parameters.precision : 'highp';\n\tconst maxPrecision = getMaxPrecision( precision );\n\n\tif ( maxPrecision !== precision ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.' );\n\t\tprecision = maxPrecision;\n\n\t}\n\n\tconst drawBuffers = isWebGL2 || extensions.has( 'WEBGL_draw_buffers' );\n\n\tconst logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;\n\n\tconst maxTextures = gl.getParameter( 34930 );\n\tconst maxVertexTextures = gl.getParameter( 35660 );\n\tconst maxTextureSize = gl.getParameter( 3379 );\n\tconst maxCubemapSize = gl.getParameter( 34076 );\n\n\tconst maxAttributes = gl.getParameter( 34921 );\n\tconst maxVertexUniforms = gl.getParameter( 36347 );\n\tconst maxVaryings = gl.getParameter( 36348 );\n\tconst maxFragmentUniforms = gl.getParameter( 36349 );\n\n\tconst vertexTextures = maxVertexTextures > 0;\n\tconst floatFragmentTextures = isWebGL2 || extensions.has( 'OES_texture_float' );\n\tconst floatVertexTextures = vertexTextures && floatFragmentTextures;\n\n\tconst maxSamples = isWebGL2 ? gl.getParameter( 36183 ) : 0;\n\n\treturn {\n\n\t\tisWebGL2: isWebGL2,\n\n\t\tdrawBuffers: drawBuffers,\n\n\t\tgetMaxAnisotropy: getMaxAnisotropy,\n\t\tgetMaxPrecision: getMaxPrecision,\n\n\t\tprecision: precision,\n\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\n\t\tmaxTextures: maxTextures,\n\t\tmaxVertexTextures: maxVertexTextures,\n\t\tmaxTextureSize: maxTextureSize,\n\t\tmaxCubemapSize: maxCubemapSize,\n\n\t\tmaxAttributes: maxAttributes,\n\t\tmaxVertexUniforms: maxVertexUniforms,\n\t\tmaxVaryings: maxVaryings,\n\t\tmaxFragmentUniforms: maxFragmentUniforms,\n\n\t\tvertexTextures: vertexTextures,\n\t\tfloatFragmentTextures: floatFragmentTextures,\n\t\tfloatVertexTextures: floatVertexTextures,\n\n\t\tmaxSamples: maxSamples\n\n\t};\n\n}\n\nfunction WebGLClipping( properties ) {\n\n\tconst scope = this;\n\n\tlet globalState = null,\n\t\tnumGlobalPlanes = 0,\n\t\tlocalClippingEnabled = false,\n\t\trenderingShadows = false;\n\n\tconst plane = new Plane(),\n\t\tviewNormalMatrix = new Matrix3(),\n\n\t\tuniform = { value: null, needsUpdate: false };\n\n\tthis.uniform = uniform;\n\tthis.numPlanes = 0;\n\tthis.numIntersection = 0;\n\n\tthis.init = function ( planes, enableLocalClipping, camera ) {\n\n\t\tconst enabled =\n\t\t\tplanes.length !== 0 ||\n\t\t\tenableLocalClipping ||\n\t\t\t// enable state of previous frame - the clipping code has to\n\t\t\t// run another frame in order to reset the state:\n\t\t\tnumGlobalPlanes !== 0 ||\n\t\t\tlocalClippingEnabled;\n\n\t\tlocalClippingEnabled = enableLocalClipping;\n\n\t\tglobalState = projectPlanes( planes, camera, 0 );\n\t\tnumGlobalPlanes = planes.length;\n\n\t\treturn enabled;\n\n\t};\n\n\tthis.beginShadows = function () {\n\n\t\trenderingShadows = true;\n\t\tprojectPlanes( null );\n\n\t};\n\n\tthis.endShadows = function () {\n\n\t\trenderingShadows = false;\n\t\tresetGlobalState();\n\n\t};\n\n\tthis.setState = function ( material, camera, useCache ) {\n\n\t\tconst planes = material.clippingPlanes,\n\t\t\tclipIntersection = material.clipIntersection,\n\t\t\tclipShadows = material.clipShadows;\n\n\t\tconst materialProperties = properties.get( material );\n\n\t\tif ( ! localClippingEnabled || planes === null || planes.length === 0 || renderingShadows && ! clipShadows ) {\n\n\t\t\t// there's no local clipping\n\n\t\t\tif ( renderingShadows ) {\n\n\t\t\t\t// there's no global clipping\n\n\t\t\t\tprojectPlanes( null );\n\n\t\t\t} else {\n\n\t\t\t\tresetGlobalState();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst nGlobal = renderingShadows ? 0 : numGlobalPlanes,\n\t\t\t\tlGlobal = nGlobal * 4;\n\n\t\t\tlet dstArray = materialProperties.clippingState || null;\n\n\t\t\tuniform.value = dstArray; // ensure unique state\n\n\t\t\tdstArray = projectPlanes( planes, camera, lGlobal, useCache );\n\n\t\t\tfor ( let i = 0; i !== lGlobal; ++ i ) {\n\n\t\t\t\tdstArray[ i ] = globalState[ i ];\n\n\t\t\t}\n\n\t\t\tmaterialProperties.clippingState = dstArray;\n\t\t\tthis.numIntersection = clipIntersection ? this.numPlanes : 0;\n\t\t\tthis.numPlanes += nGlobal;\n\n\t\t}\n\n\n\t};\n\n\tfunction resetGlobalState() {\n\n\t\tif ( uniform.value !== globalState ) {\n\n\t\t\tuniform.value = globalState;\n\t\t\tuniform.needsUpdate = numGlobalPlanes > 0;\n\n\t\t}\n\n\t\tscope.numPlanes = numGlobalPlanes;\n\t\tscope.numIntersection = 0;\n\n\t}\n\n\tfunction projectPlanes( planes, camera, dstOffset, skipTransform ) {\n\n\t\tconst nPlanes = planes !== null ? planes.length : 0;\n\t\tlet dstArray = null;\n\n\t\tif ( nPlanes !== 0 ) {\n\n\t\t\tdstArray = uniform.value;\n\n\t\t\tif ( skipTransform !== true || dstArray === null ) {\n\n\t\t\t\tconst flatSize = dstOffset + nPlanes * 4,\n\t\t\t\t\tviewMatrix = camera.matrixWorldInverse;\n\n\t\t\t\tviewNormalMatrix.getNormalMatrix( viewMatrix );\n\n\t\t\t\tif ( dstArray === null || dstArray.length < flatSize ) {\n\n\t\t\t\t\tdstArray = new Float32Array( flatSize );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0, i4 = dstOffset; i !== nPlanes; ++ i, i4 += 4 ) {\n\n\t\t\t\t\tplane.copy( planes[ i ] ).applyMatrix4( viewMatrix, viewNormalMatrix );\n\n\t\t\t\t\tplane.normal.toArray( dstArray, i4 );\n\t\t\t\t\tdstArray[ i4 + 3 ] = plane.constant;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tuniform.value = dstArray;\n\t\t\tuniform.needsUpdate = true;\n\n\t\t}\n\n\t\tscope.numPlanes = nPlanes;\n\t\tscope.numIntersection = 0;\n\n\t\treturn dstArray;\n\n\t}\n\n}\n\nfunction WebGLCubeMaps( renderer ) {\n\n\tlet cubemaps = new WeakMap();\n\n\tfunction mapTextureMapping( texture, mapping ) {\n\n\t\tif ( mapping === EquirectangularReflectionMapping ) {\n\n\t\t\ttexture.mapping = CubeReflectionMapping;\n\n\t\t} else if ( mapping === EquirectangularRefractionMapping ) {\n\n\t\t\ttexture.mapping = CubeRefractionMapping;\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction get( texture ) {\n\n\t\tif ( texture && texture.isTexture && texture.isRenderTargetTexture === false ) {\n\n\t\t\tconst mapping = texture.mapping;\n\n\t\t\tif ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping ) {\n\n\t\t\t\tif ( cubemaps.has( texture ) ) {\n\n\t\t\t\t\tconst cubemap = cubemaps.get( texture ).texture;\n\t\t\t\t\treturn mapTextureMapping( cubemap, texture.mapping );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst image = texture.image;\n\n\t\t\t\t\tif ( image && image.height > 0 ) {\n\n\t\t\t\t\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\t\t\t\t\tconst renderTarget = new WebGLCubeRenderTarget( image.height / 2 );\n\t\t\t\t\t\trenderTarget.fromEquirectangularTexture( renderer, texture );\n\t\t\t\t\t\tcubemaps.set( texture, renderTarget );\n\n\t\t\t\t\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t\t\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t\t\t\treturn mapTextureMapping( renderTarget.texture, texture.mapping );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// image not yet ready. try the conversion next frame\n\n\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tconst cubemap = cubemaps.get( texture );\n\n\t\tif ( cubemap !== undefined ) {\n\n\t\t\tcubemaps.delete( texture );\n\t\t\tcubemap.dispose();\n\n\t\t}\n\n\t}\n\n\tfunction dispose() {\n\n\t\tcubemaps = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nclass OrthographicCamera extends Camera {\n\n\tconstructor( left = - 1, right = 1, top = 1, bottom = - 1, near = 0.1, far = 2000 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'OrthographicCamera';\n\n\t\tthis.zoom = 1;\n\t\tthis.view = null;\n\n\t\tthis.left = left;\n\t\tthis.right = right;\n\t\tthis.top = top;\n\t\tthis.bottom = bottom;\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.left = source.left;\n\t\tthis.right = source.right;\n\t\tthis.top = source.top;\n\t\tthis.bottom = source.bottom;\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\n\t\tthis.zoom = source.zoom;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\treturn this;\n\n\t}\n\n\tsetViewOffset( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tclearViewOffset() {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tupdateProjectionMatrix() {\n\n\t\tconst dx = ( this.right - this.left ) / ( 2 * this.zoom );\n\t\tconst dy = ( this.top - this.bottom ) / ( 2 * this.zoom );\n\t\tconst cx = ( this.right + this.left ) / 2;\n\t\tconst cy = ( this.top + this.bottom ) / 2;\n\n\t\tlet left = cx - dx;\n\t\tlet right = cx + dx;\n\t\tlet top = cy + dy;\n\t\tlet bottom = cy - dy;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tconst scaleW = ( this.right - this.left ) / this.view.fullWidth / this.zoom;\n\t\t\tconst scaleH = ( this.top - this.bottom ) / this.view.fullHeight / this.zoom;\n\n\t\t\tleft += scaleW * this.view.offsetX;\n\t\t\tright = left + scaleW * this.view.width;\n\t\t\ttop -= scaleH * this.view.offsetY;\n\t\t\tbottom = top - scaleH * this.view.height;\n\n\t\t}\n\n\t\tthis.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far );\n\n\t\tthis.projectionMatrixInverse.copy( this.projectionMatrix ).invert();\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.zoom = this.zoom;\n\t\tdata.object.left = this.left;\n\t\tdata.object.right = this.right;\n\t\tdata.object.top = this.top;\n\t\tdata.object.bottom = this.bottom;\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\treturn data;\n\n\t}\n\n}\n\nOrthographicCamera.prototype.isOrthographicCamera = true;\n\nclass RawShaderMaterial extends ShaderMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper( parameters );\n\n\t\tthis.type = 'RawShaderMaterial';\n\n\t}\n\n}\n\nRawShaderMaterial.prototype.isRawShaderMaterial = true;\n\nconst LOD_MIN = 4;\nconst LOD_MAX = 8;\nconst SIZE_MAX = Math.pow( 2, LOD_MAX );\n\n// The standard deviations (radians) associated with the extra mips. These are\n// chosen to approximate a Trowbridge-Reitz distribution function times the\n// geometric shadowing function. These sigma values squared must match the\n// variance #defines in cube_uv_reflection_fragment.glsl.js.\nconst EXTRA_LOD_SIGMA = [ 0.125, 0.215, 0.35, 0.446, 0.526, 0.582 ];\n\nconst TOTAL_LODS = LOD_MAX - LOD_MIN + 1 + EXTRA_LOD_SIGMA.length;\n\n// The maximum length of the blur for loop. Smaller sigmas will use fewer\n// samples and exit early, but not recompile the shader.\nconst MAX_SAMPLES = 20;\n\nconst ENCODINGS = {\n\t[ LinearEncoding ]: 0,\n\t[ sRGBEncoding ]: 1,\n\t[ RGBEEncoding ]: 2,\n\t[ RGBM7Encoding ]: 3,\n\t[ RGBM16Encoding ]: 4,\n\t[ RGBDEncoding ]: 5,\n\t[ GammaEncoding ]: 6\n};\n\nconst _flatCamera = /*@__PURE__*/ new OrthographicCamera();\nconst { _lodPlanes, _sizeLods, _sigmas } = /*@__PURE__*/ _createPlanes();\nconst _clearColor = /*@__PURE__*/ new Color();\nlet _oldTarget = null;\n\n// Golden Ratio\nconst PHI = ( 1 + Math.sqrt( 5 ) ) / 2;\nconst INV_PHI = 1 / PHI;\n\n// Vertices of a dodecahedron (except the opposites, which represent the\n// same axis), used as axis directions evenly spread on a sphere.\nconst _axisDirections = [\n\t/*@__PURE__*/ new Vector3( 1, 1, 1 ),\n\t/*@__PURE__*/ new Vector3( - 1, 1, 1 ),\n\t/*@__PURE__*/ new Vector3( 1, 1, - 1 ),\n\t/*@__PURE__*/ new Vector3( - 1, 1, - 1 ),\n\t/*@__PURE__*/ new Vector3( 0, PHI, INV_PHI ),\n\t/*@__PURE__*/ new Vector3( 0, PHI, - INV_PHI ),\n\t/*@__PURE__*/ new Vector3( INV_PHI, 0, PHI ),\n\t/*@__PURE__*/ new Vector3( - INV_PHI, 0, PHI ),\n\t/*@__PURE__*/ new Vector3( PHI, INV_PHI, 0 ),\n\t/*@__PURE__*/ new Vector3( - PHI, INV_PHI, 0 ) ];\n\n/**\n * This class generates a Prefiltered, Mipmapped Radiance Environment Map\n * (PMREM) from a cubeMap environment texture. This allows different levels of\n * blur to be quickly accessed based on material roughness. It is packed into a\n * special CubeUV format that allows us to perform custom interpolation so that\n * we can support nonlinear formats such as RGBE. Unlike a traditional mipmap\n * chain, it only goes down to the LOD_MIN level (above), and then creates extra\n * even more filtered 'mips' at the same LOD_MIN resolution, associated with\n * higher roughness levels. In this way we maintain resolution to smoothly\n * interpolate diffuse lighting while limiting sampling computation.\n *\n * Paper: Fast, Accurate Image-Based Lighting\n * https://drive.google.com/file/d/15y8r_UpKlU9SvV4ILb0C3qCPecS8pvLz/view\n*/\n\nclass PMREMGenerator {\n\n\tconstructor( renderer ) {\n\n\t\tthis._renderer = renderer;\n\t\tthis._pingPongRenderTarget = null;\n\n\t\tthis._blurMaterial = _getBlurShader( MAX_SAMPLES );\n\t\tthis._equirectShader = null;\n\t\tthis._cubemapShader = null;\n\n\t\tthis._compileMaterial( this._blurMaterial );\n\n\t}\n\n\t/**\n\t * Generates a PMREM from a supplied Scene, which can be faster than using an\n\t * image if networking bandwidth is low. Optional sigma specifies a blur radius\n\t * in radians to be applied to the scene before PMREM generation. Optional near\n\t * and far planes ensure the scene is rendered in its entirety (the cubeCamera\n\t * is placed at the origin).\n\t */\n\tfromScene( scene, sigma = 0, near = 0.1, far = 100 ) {\n\n\t\t_oldTarget = this._renderer.getRenderTarget();\n\t\tconst cubeUVRenderTarget = this._allocateTargets();\n\n\t\tthis._sceneToCubeUV( scene, near, far, cubeUVRenderTarget );\n\t\tif ( sigma > 0 ) {\n\n\t\t\tthis._blur( cubeUVRenderTarget, 0, 0, sigma );\n\n\t\t}\n\n\t\tthis._applyPMREM( cubeUVRenderTarget );\n\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t/**\n\t * Generates a PMREM from an equirectangular texture, which can be either LDR\n\t * (RGBFormat) or HDR (RGBEFormat). The ideal input image size is 1k (1024 x 512),\n\t * as this matches best with the 256 x 256 cubemap output.\n\t */\n\tfromEquirectangular( equirectangular ) {\n\n\t\treturn this._fromTexture( equirectangular );\n\n\t}\n\n\t/**\n\t * Generates a PMREM from an cubemap texture, which can be either LDR\n\t * (RGBFormat) or HDR (RGBEFormat). The ideal input cube size is 256 x 256,\n\t * as this matches best with the 256 x 256 cubemap output.\n\t */\n\tfromCubemap( cubemap ) {\n\n\t\treturn this._fromTexture( cubemap );\n\n\t}\n\n\t/**\n\t * Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during\n\t * your texture's network fetch for increased concurrency.\n\t */\n\tcompileCubemapShader() {\n\n\t\tif ( this._cubemapShader === null ) {\n\n\t\t\tthis._cubemapShader = _getCubemapShader();\n\t\t\tthis._compileMaterial( this._cubemapShader );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during\n\t * your texture's network fetch for increased concurrency.\n\t */\n\tcompileEquirectangularShader() {\n\n\t\tif ( this._equirectShader === null ) {\n\n\t\t\tthis._equirectShader = _getEquirectShader();\n\t\t\tthis._compileMaterial( this._equirectShader );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Disposes of the PMREMGenerator's internal memory. Note that PMREMGenerator is a static class,\n\t * so you should not need more than one PMREMGenerator object. If you do, calling dispose() on\n\t * one of them will cause any others to also become unusable.\n\t */\n\tdispose() {\n\n\t\tthis._blurMaterial.dispose();\n\n\t\tif ( this._cubemapShader !== null ) this._cubemapShader.dispose();\n\t\tif ( this._equirectShader !== null ) this._equirectShader.dispose();\n\n\t\tfor ( let i = 0; i < _lodPlanes.length; i ++ ) {\n\n\t\t\t_lodPlanes[ i ].dispose();\n\n\t\t}\n\n\t}\n\n\t// private interface\n\n\t_cleanup( outputTarget ) {\n\n\t\tthis._pingPongRenderTarget.dispose();\n\t\tthis._renderer.setRenderTarget( _oldTarget );\n\t\toutputTarget.scissorTest = false;\n\t\t_setViewport( outputTarget, 0, 0, outputTarget.width, outputTarget.height );\n\n\t}\n\n\t_fromTexture( texture ) {\n\n\t\t_oldTarget = this._renderer.getRenderTarget();\n\t\tconst cubeUVRenderTarget = this._allocateTargets( texture );\n\t\tthis._textureToCubeUV( texture, cubeUVRenderTarget );\n\t\tthis._applyPMREM( cubeUVRenderTarget );\n\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t_allocateTargets( texture ) { // warning: null texture is valid\n\n\t\tconst params = {\n\t\t\tmagFilter: NearestFilter,\n\t\t\tminFilter: NearestFilter,\n\t\t\tgenerateMipmaps: false,\n\t\t\ttype: UnsignedByteType,\n\t\t\tformat: RGBEFormat,\n\t\t\tencoding: _isLDR( texture ) ? texture.encoding : RGBEEncoding,\n\t\t\tdepthBuffer: false\n\t\t};\n\n\t\tconst cubeUVRenderTarget = _createRenderTarget( params );\n\t\tcubeUVRenderTarget.depthBuffer = texture ? false : true;\n\t\tthis._pingPongRenderTarget = _createRenderTarget( params );\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t_compileMaterial( material ) {\n\n\t\tconst tmpMesh = new Mesh( _lodPlanes[ 0 ], material );\n\t\tthis._renderer.compile( tmpMesh, _flatCamera );\n\n\t}\n\n\t_sceneToCubeUV( scene, near, far, cubeUVRenderTarget ) {\n\n\t\tconst fov = 90;\n\t\tconst aspect = 1;\n\t\tconst cubeCamera = new PerspectiveCamera( fov, aspect, near, far );\n\t\tconst upSign = [ 1, - 1, 1, 1, 1, 1 ];\n\t\tconst forwardSign = [ 1, 1, 1, - 1, - 1, - 1 ];\n\t\tconst renderer = this._renderer;\n\n\t\tconst originalAutoClear = renderer.autoClear;\n\t\tconst outputEncoding = renderer.outputEncoding;\n\t\tconst toneMapping = renderer.toneMapping;\n\t\trenderer.getClearColor( _clearColor );\n\n\t\trenderer.toneMapping = NoToneMapping;\n\t\trenderer.outputEncoding = LinearEncoding;\n\t\trenderer.autoClear = false;\n\n\t\tconst backgroundMaterial = new MeshBasicMaterial( {\n\t\t\tname: 'PMREM.Background',\n\t\t\tside: BackSide,\n\t\t\tdepthWrite: false,\n\t\t\tdepthTest: false,\n\t\t} );\n\n\t\tconst backgroundBox = new Mesh( new BoxGeometry(), backgroundMaterial );\n\n\t\tlet useSolidColor = false;\n\t\tconst background = scene.background;\n\n\t\tif ( background ) {\n\n\t\t\tif ( background.isColor ) {\n\n\t\t\t\tbackgroundMaterial.color.copy( background );\n\t\t\t\tscene.background = null;\n\t\t\t\tuseSolidColor = true;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tbackgroundMaterial.color.copy( _clearColor );\n\t\t\tuseSolidColor = true;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst col = i % 3;\n\t\t\tif ( col == 0 ) {\n\n\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\tcubeCamera.lookAt( forwardSign[ i ], 0, 0 );\n\n\t\t\t} else if ( col == 1 ) {\n\n\t\t\t\tcubeCamera.up.set( 0, 0, upSign[ i ] );\n\t\t\t\tcubeCamera.lookAt( 0, forwardSign[ i ], 0 );\n\n\t\t\t} else {\n\n\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\tcubeCamera.lookAt( 0, 0, forwardSign[ i ] );\n\n\t\t\t}\n\n\t\t\t_setViewport( cubeUVRenderTarget,\n\t\t\t\tcol * SIZE_MAX, i > 2 ? SIZE_MAX : 0, SIZE_MAX, SIZE_MAX );\n\t\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\n\t\t\tif ( useSolidColor ) {\n\n\t\t\t\trenderer.render( backgroundBox, cubeCamera );\n\n\t\t\t}\n\n\t\t\trenderer.render( scene, cubeCamera );\n\n\t\t}\n\n\t\tbackgroundBox.geometry.dispose();\n\t\tbackgroundBox.material.dispose();\n\n\t\trenderer.toneMapping = toneMapping;\n\t\trenderer.outputEncoding = outputEncoding;\n\t\trenderer.autoClear = originalAutoClear;\n\t\tscene.background = background;\n\n\t}\n\n\t_setEncoding( uniform, texture ) {\n\n\t\tif ( this._renderer.capabilities.isWebGL2 === true && texture.format === RGBAFormat && texture.type === UnsignedByteType && texture.encoding === sRGBEncoding ) {\n\n\t\t\tuniform.value = ENCODINGS[ LinearEncoding ];\n\n\t\t} else {\n\n\t\t\tuniform.value = ENCODINGS[ texture.encoding ];\n\n\t\t}\n\n\t}\n\n\t_textureToCubeUV( texture, cubeUVRenderTarget ) {\n\n\t\tconst renderer = this._renderer;\n\n\t\tif ( texture.isCubeTexture ) {\n\n\t\t\tif ( this._cubemapShader == null ) {\n\n\t\t\t\tthis._cubemapShader = _getCubemapShader();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( this._equirectShader == null ) {\n\n\t\t\t\tthis._equirectShader = _getEquirectShader();\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst material = texture.isCubeTexture ? this._cubemapShader : this._equirectShader;\n\t\tconst mesh = new Mesh( _lodPlanes[ 0 ], material );\n\n\t\tconst uniforms = material.uniforms;\n\n\t\tuniforms[ 'envMap' ].value = texture;\n\n\t\tif ( ! texture.isCubeTexture ) {\n\n\t\t\tuniforms[ 'texelSize' ].value.set( 1.0 / texture.image.width, 1.0 / texture.image.height );\n\n\t\t}\n\n\t\tthis._setEncoding( uniforms[ 'inputEncoding' ], texture );\n\t\tthis._setEncoding( uniforms[ 'outputEncoding' ], cubeUVRenderTarget.texture );\n\n\t\t_setViewport( cubeUVRenderTarget, 0, 0, 3 * SIZE_MAX, 2 * SIZE_MAX );\n\n\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\t\trenderer.render( mesh, _flatCamera );\n\n\t}\n\n\t_applyPMREM( cubeUVRenderTarget ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst autoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\tfor ( let i = 1; i < TOTAL_LODS; i ++ ) {\n\n\t\t\tconst sigma = Math.sqrt( _sigmas[ i ] * _sigmas[ i ] - _sigmas[ i - 1 ] * _sigmas[ i - 1 ] );\n\n\t\t\tconst poleAxis = _axisDirections[ ( i - 1 ) % _axisDirections.length ];\n\n\t\t\tthis._blur( cubeUVRenderTarget, i - 1, i, sigma, poleAxis );\n\n\t\t}\n\n\t\trenderer.autoClear = autoClear;\n\n\t}\n\n\t/**\n\t * This is a two-pass Gaussian blur for a cubemap. Normally this is done\n\t * vertically and horizontally, but this breaks down on a cube. Here we apply\n\t * the blur latitudinally (around the poles), and then longitudinally (towards\n\t * the poles) to approximate the orthogonally-separable blur. It is least\n\t * accurate at the poles, but still does a decent job.\n\t */\n\t_blur( cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis ) {\n\n\t\tconst pingPongRenderTarget = this._pingPongRenderTarget;\n\n\t\tthis._halfBlur(\n\t\t\tcubeUVRenderTarget,\n\t\t\tpingPongRenderTarget,\n\t\t\tlodIn,\n\t\t\tlodOut,\n\t\t\tsigma,\n\t\t\t'latitudinal',\n\t\t\tpoleAxis );\n\n\t\tthis._halfBlur(\n\t\t\tpingPongRenderTarget,\n\t\t\tcubeUVRenderTarget,\n\t\t\tlodOut,\n\t\t\tlodOut,\n\t\t\tsigma,\n\t\t\t'longitudinal',\n\t\t\tpoleAxis );\n\n\t}\n\n\t_halfBlur( targetIn, targetOut, lodIn, lodOut, sigmaRadians, direction, poleAxis ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst blurMaterial = this._blurMaterial;\n\n\t\tif ( direction !== 'latitudinal' && direction !== 'longitudinal' ) {\n\n\t\t\tconsole.error(\n\t\t\t\t'blur direction must be either latitudinal or longitudinal!' );\n\n\t\t}\n\n\t\t// Number of standard deviations at which to cut off the discrete approximation.\n\t\tconst STANDARD_DEVIATIONS = 3;\n\n\t\tconst blurMesh = new Mesh( _lodPlanes[ lodOut ], blurMaterial );\n\t\tconst blurUniforms = blurMaterial.uniforms;\n\n\t\tconst pixels = _sizeLods[ lodIn ] - 1;\n\t\tconst radiansPerPixel = isFinite( sigmaRadians ) ? Math.PI / ( 2 * pixels ) : 2 * Math.PI / ( 2 * MAX_SAMPLES - 1 );\n\t\tconst sigmaPixels = sigmaRadians / radiansPerPixel;\n\t\tconst samples = isFinite( sigmaRadians ) ? 1 + Math.floor( STANDARD_DEVIATIONS * sigmaPixels ) : MAX_SAMPLES;\n\n\t\tif ( samples > MAX_SAMPLES ) {\n\n\t\t\tconsole.warn( `sigmaRadians, ${\n\t\t\t\tsigmaRadians}, is too large and will clip, as it requested ${\n\t\t\t\tsamples} samples when the maximum is set to ${MAX_SAMPLES}` );\n\n\t\t}\n\n\t\tconst weights = [];\n\t\tlet sum = 0;\n\n\t\tfor ( let i = 0; i < MAX_SAMPLES; ++ i ) {\n\n\t\t\tconst x = i / sigmaPixels;\n\t\t\tconst weight = Math.exp( - x * x / 2 );\n\t\t\tweights.push( weight );\n\n\t\t\tif ( i == 0 ) {\n\n\t\t\t\tsum += weight;\n\n\t\t\t} else if ( i < samples ) {\n\n\t\t\t\tsum += 2 * weight;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = 0; i < weights.length; i ++ ) {\n\n\t\t\tweights[ i ] = weights[ i ] / sum;\n\n\t\t}\n\n\t\tblurUniforms[ 'envMap' ].value = targetIn.texture;\n\t\tblurUniforms[ 'samples' ].value = samples;\n\t\tblurUniforms[ 'weights' ].value = weights;\n\t\tblurUniforms[ 'latitudinal' ].value = direction === 'latitudinal';\n\n\t\tif ( poleAxis ) {\n\n\t\t\tblurUniforms[ 'poleAxis' ].value = poleAxis;\n\n\t\t}\n\n\t\tblurUniforms[ 'dTheta' ].value = radiansPerPixel;\n\t\tblurUniforms[ 'mipInt' ].value = LOD_MAX - lodIn;\n\n\t\tthis._setEncoding( blurUniforms[ 'inputEncoding' ], targetIn.texture );\n\t\tthis._setEncoding( blurUniforms[ 'outputEncoding' ], targetIn.texture );\n\n\t\tconst outputSize = _sizeLods[ lodOut ];\n\t\tconst x = 3 * Math.max( 0, SIZE_MAX - 2 * outputSize );\n\t\tconst y = ( lodOut === 0 ? 0 : 2 * SIZE_MAX ) + 2 * outputSize * ( lodOut > LOD_MAX - LOD_MIN ? lodOut - LOD_MAX + LOD_MIN : 0 );\n\n\t\t_setViewport( targetOut, x, y, 3 * outputSize, 2 * outputSize );\n\t\trenderer.setRenderTarget( targetOut );\n\t\trenderer.render( blurMesh, _flatCamera );\n\n\t}\n\n}\n\nfunction _isLDR( texture ) {\n\n\tif ( texture === undefined || texture.type !== UnsignedByteType ) return false;\n\n\treturn texture.encoding === LinearEncoding || texture.encoding === sRGBEncoding || texture.encoding === GammaEncoding;\n\n}\n\nfunction _createPlanes() {\n\n\tconst _lodPlanes = [];\n\tconst _sizeLods = [];\n\tconst _sigmas = [];\n\n\tlet lod = LOD_MAX;\n\n\tfor ( let i = 0; i < TOTAL_LODS; i ++ ) {\n\n\t\tconst sizeLod = Math.pow( 2, lod );\n\t\t_sizeLods.push( sizeLod );\n\t\tlet sigma = 1.0 / sizeLod;\n\n\t\tif ( i > LOD_MAX - LOD_MIN ) {\n\n\t\t\tsigma = EXTRA_LOD_SIGMA[ i - LOD_MAX + LOD_MIN - 1 ];\n\n\t\t} else if ( i == 0 ) {\n\n\t\t\tsigma = 0;\n\n\t\t}\n\n\t\t_sigmas.push( sigma );\n\n\t\tconst texelSize = 1.0 / ( sizeLod - 1 );\n\t\tconst min = - texelSize / 2;\n\t\tconst max = 1 + texelSize / 2;\n\t\tconst uv1 = [ min, min, max, min, max, max, min, min, max, max, min, max ];\n\n\t\tconst cubeFaces = 6;\n\t\tconst vertices = 6;\n\t\tconst positionSize = 3;\n\t\tconst uvSize = 2;\n\t\tconst faceIndexSize = 1;\n\n\t\tconst position = new Float32Array( positionSize * vertices * cubeFaces );\n\t\tconst uv = new Float32Array( uvSize * vertices * cubeFaces );\n\t\tconst faceIndex = new Float32Array( faceIndexSize * vertices * cubeFaces );\n\n\t\tfor ( let face = 0; face < cubeFaces; face ++ ) {\n\n\t\t\tconst x = ( face % 3 ) * 2 / 3 - 1;\n\t\t\tconst y = face > 2 ? 0 : - 1;\n\t\t\tconst coordinates = [\n\t\t\t\tx, y, 0,\n\t\t\t\tx + 2 / 3, y, 0,\n\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\tx, y, 0,\n\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\tx, y + 1, 0\n\t\t\t];\n\t\t\tposition.set( coordinates, positionSize * vertices * face );\n\t\t\tuv.set( uv1, uvSize * vertices * face );\n\t\t\tconst fill = [ face, face, face, face, face, face ];\n\t\t\tfaceIndex.set( fill, faceIndexSize * vertices * face );\n\n\t\t}\n\n\t\tconst planes = new BufferGeometry();\n\t\tplanes.setAttribute( 'position', new BufferAttribute( position, positionSize ) );\n\t\tplanes.setAttribute( 'uv', new BufferAttribute( uv, uvSize ) );\n\t\tplanes.setAttribute( 'faceIndex', new BufferAttribute( faceIndex, faceIndexSize ) );\n\t\t_lodPlanes.push( planes );\n\n\t\tif ( lod > LOD_MIN ) {\n\n\t\t\tlod --;\n\n\t\t}\n\n\t}\n\n\treturn { _lodPlanes, _sizeLods, _sigmas };\n\n}\n\nfunction _createRenderTarget( params ) {\n\n\tconst cubeUVRenderTarget = new WebGLRenderTarget( 3 * SIZE_MAX, 3 * SIZE_MAX, params );\n\tcubeUVRenderTarget.texture.mapping = CubeUVReflectionMapping;\n\tcubeUVRenderTarget.texture.name = 'PMREM.cubeUv';\n\tcubeUVRenderTarget.scissorTest = true;\n\treturn cubeUVRenderTarget;\n\n}\n\nfunction _setViewport( target, x, y, width, height ) {\n\n\ttarget.viewport.set( x, y, width, height );\n\ttarget.scissor.set( x, y, width, height );\n\n}\n\nfunction _getBlurShader( maxSamples ) {\n\n\tconst weights = new Float32Array( maxSamples );\n\tconst poleAxis = new Vector3( 0, 1, 0 );\n\tconst shaderMaterial = new RawShaderMaterial( {\n\n\t\tname: 'SphericalGaussianBlur',\n\n\t\tdefines: { 'n': maxSamples },\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'samples': { value: 1 },\n\t\t\t'weights': { value: weights },\n\t\t\t'latitudinal': { value: false },\n\t\t\t'dTheta': { value: 0 },\n\t\t\t'mipInt': { value: 0 },\n\t\t\t'poleAxis': { value: poleAxis },\n\t\t\t'inputEncoding': { value: ENCODINGS[ LinearEncoding ] },\n\t\t\t'outputEncoding': { value: ENCODINGS[ LinearEncoding ] }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t${ _getEncodings() }\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include \n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n\treturn shaderMaterial;\n\n}\n\nfunction _getEquirectShader() {\n\n\tconst texelSize = new Vector2( 1, 1 );\n\tconst shaderMaterial = new RawShaderMaterial( {\n\n\t\tname: 'EquirectangularToCubeUV',\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'texelSize': { value: texelSize },\n\t\t\t'inputEncoding': { value: ENCODINGS[ LinearEncoding ] },\n\t\t\t'outputEncoding': { value: ENCODINGS[ LinearEncoding ] }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform vec2 texelSize;\n\n\t\t\t${ _getEncodings() }\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tvec2 f = fract( uv / texelSize - 0.5 );\n\t\t\t\tuv -= f * texelSize;\n\t\t\t\tvec3 tl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x += texelSize.x;\n\t\t\t\tvec3 tr = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.y += texelSize.y;\n\t\t\t\tvec3 br = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x -= texelSize.x;\n\t\t\t\tvec3 bl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\n\t\t\t\tvec3 tm = mix( tl, tr, f.x );\n\t\t\t\tvec3 bm = mix( bl, br, f.x );\n\t\t\t\tgl_FragColor.rgb = mix( tm, bm, f.y );\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n\treturn shaderMaterial;\n\n}\n\nfunction _getCubemapShader() {\n\n\tconst shaderMaterial = new RawShaderMaterial( {\n\n\t\tname: 'CubemapToCubeUV',\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'inputEncoding': { value: ENCODINGS[ LinearEncoding ] },\n\t\t\t'outputEncoding': { value: ENCODINGS[ LinearEncoding ] }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\t${ _getEncodings() }\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb = envMapTexelToLinear( textureCube( envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ) ) ).rgb;\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n\treturn shaderMaterial;\n\n}\n\nfunction _getCommonVertexShader() {\n\n\treturn /* glsl */`\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute vec3 position;\n\t\tattribute vec2 uv;\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t`;\n\n}\n\nfunction _getEncodings() {\n\n\treturn /* glsl */`\n\n\t\tuniform int inputEncoding;\n\t\tuniform int outputEncoding;\n\n\t\t#include \n\n\t\tvec4 inputTexelToLinear( vec4 value ) {\n\n\t\t\tif ( inputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( inputEncoding == 1 ) {\n\n\t\t\t\treturn sRGBToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 2 ) {\n\n\t\t\t\treturn RGBEToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 3 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 7.0 );\n\n\t\t\t} else if ( inputEncoding == 4 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 16.0 );\n\n\t\t\t} else if ( inputEncoding == 5 ) {\n\n\t\t\t\treturn RGBDToLinear( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn GammaToLinear( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 linearToOutputTexel( vec4 value ) {\n\n\t\t\tif ( outputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( outputEncoding == 1 ) {\n\n\t\t\t\treturn LinearTosRGB( value );\n\n\t\t\t} else if ( outputEncoding == 2 ) {\n\n\t\t\t\treturn LinearToRGBE( value );\n\n\t\t\t} else if ( outputEncoding == 3 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 7.0 );\n\n\t\t\t} else if ( outputEncoding == 4 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 16.0 );\n\n\t\t\t} else if ( outputEncoding == 5 ) {\n\n\t\t\t\treturn LinearToRGBD( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn LinearToGamma( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 envMapTexelToLinear( vec4 color ) {\n\n\t\t\treturn inputTexelToLinear( color );\n\n\t\t}\n\t`;\n\n}\n\nfunction WebGLCubeUVMaps( renderer ) {\n\n\tlet cubeUVmaps = new WeakMap();\n\n\tlet pmremGenerator = null;\n\n\tfunction get( texture ) {\n\n\t\tif ( texture && texture.isTexture && texture.isRenderTargetTexture === false ) {\n\n\t\t\tconst mapping = texture.mapping;\n\n\t\t\tconst isEquirectMap = ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping );\n\t\t\tconst isCubeMap = ( mapping === CubeReflectionMapping || mapping === CubeRefractionMapping );\n\n\t\t\tif ( isEquirectMap || isCubeMap ) {\n\n\t\t\t\t// equirect/cube map to cubeUV conversion\n\n\t\t\t\tif ( cubeUVmaps.has( texture ) ) {\n\n\t\t\t\t\treturn cubeUVmaps.get( texture ).texture;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst image = texture.image;\n\n\t\t\t\t\tif ( ( isEquirectMap && image && image.height > 0 ) || ( isCubeMap && image && isCubeTextureComplete( image ) ) ) {\n\n\t\t\t\t\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\t\t\t\t\tif ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );\n\n\t\t\t\t\t\tconst renderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture ) : pmremGenerator.fromCubemap( texture );\n\t\t\t\t\t\tcubeUVmaps.set( texture, renderTarget );\n\n\t\t\t\t\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t\t\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t\t\t\treturn renderTarget.texture;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// image not yet ready. try the conversion next frame\n\n\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction isCubeTextureComplete( image ) {\n\n\t\tlet count = 0;\n\t\tconst length = 6;\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tif ( image[ i ] !== undefined ) count ++;\n\n\t\t}\n\n\t\treturn count === length;\n\n\n\t}\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tconst cubemapUV = cubeUVmaps.get( texture );\n\n\t\tif ( cubemapUV !== undefined ) {\n\n\t\t\tcubeUVmaps.delete( texture );\n\t\t\tcubemapUV.dispose();\n\n\t\t}\n\n\t}\n\n\tfunction dispose() {\n\n\t\tcubeUVmaps = new WeakMap();\n\n\t\tif ( pmremGenerator !== null ) {\n\n\t\t\tpmremGenerator.dispose();\n\t\t\tpmremGenerator = null;\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction WebGLExtensions( gl ) {\n\n\tconst extensions = {};\n\n\tfunction getExtension( name ) {\n\n\t\tif ( extensions[ name ] !== undefined ) {\n\n\t\t\treturn extensions[ name ];\n\n\t\t}\n\n\t\tlet extension;\n\n\t\tswitch ( name ) {\n\n\t\t\tcase 'WEBGL_depth_texture':\n\t\t\t\textension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' );\n\t\t\t\tbreak;\n\n\t\t\tcase 'EXT_texture_filter_anisotropic':\n\t\t\t\textension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' );\n\t\t\t\tbreak;\n\n\t\t\tcase 'WEBGL_compressed_texture_s3tc':\n\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' );\n\t\t\t\tbreak;\n\n\t\t\tcase 'WEBGL_compressed_texture_pvrtc':\n\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\textension = gl.getExtension( name );\n\n\t\t}\n\n\t\textensions[ name ] = extension;\n\n\t\treturn extension;\n\n\t}\n\n\treturn {\n\n\t\thas: function ( name ) {\n\n\t\t\treturn getExtension( name ) !== null;\n\n\t\t},\n\n\t\tinit: function ( capabilities ) {\n\n\t\t\tif ( capabilities.isWebGL2 ) {\n\n\t\t\t\tgetExtension( 'EXT_color_buffer_float' );\n\n\t\t\t} else {\n\n\t\t\t\tgetExtension( 'WEBGL_depth_texture' );\n\t\t\t\tgetExtension( 'OES_texture_float' );\n\t\t\t\tgetExtension( 'OES_texture_half_float' );\n\t\t\t\tgetExtension( 'OES_texture_half_float_linear' );\n\t\t\t\tgetExtension( 'OES_standard_derivatives' );\n\t\t\t\tgetExtension( 'OES_element_index_uint' );\n\t\t\t\tgetExtension( 'OES_vertex_array_object' );\n\t\t\t\tgetExtension( 'ANGLE_instanced_arrays' );\n\n\t\t\t}\n\n\t\t\tgetExtension( 'OES_texture_float_linear' );\n\t\t\tgetExtension( 'EXT_color_buffer_half_float' );\n\n\t\t},\n\n\t\tget: function ( name ) {\n\n\t\t\tconst extension = getExtension( name );\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );\n\n\t\t\t}\n\n\t\t\treturn extension;\n\n\t\t}\n\n\t};\n\n}\n\nfunction WebGLGeometries( gl, attributes, info, bindingStates ) {\n\n\tconst geometries = {};\n\tconst wireframeAttributes = new WeakMap();\n\n\tfunction onGeometryDispose( event ) {\n\n\t\tconst geometry = event.target;\n\n\t\tif ( geometry.index !== null ) {\n\n\t\t\tattributes.remove( geometry.index );\n\n\t\t}\n\n\t\tfor ( const name in geometry.attributes ) {\n\n\t\t\tattributes.remove( geometry.attributes[ name ] );\n\n\t\t}\n\n\t\tgeometry.removeEventListener( 'dispose', onGeometryDispose );\n\n\t\tdelete geometries[ geometry.id ];\n\n\t\tconst attribute = wireframeAttributes.get( geometry );\n\n\t\tif ( attribute ) {\n\n\t\t\tattributes.remove( attribute );\n\t\t\twireframeAttributes.delete( geometry );\n\n\t\t}\n\n\t\tbindingStates.releaseStatesOfGeometry( geometry );\n\n\t\tif ( geometry.isInstancedBufferGeometry === true ) {\n\n\t\t\tdelete geometry._maxInstanceCount;\n\n\t\t}\n\n\t\t//\n\n\t\tinfo.memory.geometries --;\n\n\t}\n\n\tfunction get( object, geometry ) {\n\n\t\tif ( geometries[ geometry.id ] === true ) return geometry;\n\n\t\tgeometry.addEventListener( 'dispose', onGeometryDispose );\n\n\t\tgeometries[ geometry.id ] = true;\n\n\t\tinfo.memory.geometries ++;\n\n\t\treturn geometry;\n\n\t}\n\n\tfunction update( geometry ) {\n\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\t// Updating index buffer in VAO now. See WebGLBindingStates.\n\n\t\tfor ( const name in geometryAttributes ) {\n\n\t\t\tattributes.update( geometryAttributes[ name ], 34962 );\n\n\t\t}\n\n\t\t// morph targets\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst array = morphAttributes[ name ];\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tattributes.update( array[ i ], 34962 );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction updateWireframeAttribute( geometry ) {\n\n\t\tconst indices = [];\n\n\t\tconst geometryIndex = geometry.index;\n\t\tconst geometryPosition = geometry.attributes.position;\n\t\tlet version = 0;\n\n\t\tif ( geometryIndex !== null ) {\n\n\t\t\tconst array = geometryIndex.array;\n\t\t\tversion = geometryIndex.version;\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\t\tconst a = array[ i + 0 ];\n\t\t\t\tconst b = array[ i + 1 ];\n\t\t\t\tconst c = array[ i + 2 ];\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst array = geometryPosition.array;\n\t\t\tversion = geometryPosition.version;\n\n\t\t\tfor ( let i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) {\n\n\t\t\t\tconst a = i + 0;\n\t\t\t\tconst b = i + 1;\n\t\t\t\tconst c = i + 2;\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst attribute = new ( arrayMax( indices ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );\n\t\tattribute.version = version;\n\n\t\t// Updating index buffer in VAO now. See WebGLBindingStates\n\n\t\t//\n\n\t\tconst previousAttribute = wireframeAttributes.get( geometry );\n\n\t\tif ( previousAttribute ) attributes.remove( previousAttribute );\n\n\t\t//\n\n\t\twireframeAttributes.set( geometry, attribute );\n\n\t}\n\n\tfunction getWireframeAttribute( geometry ) {\n\n\t\tconst currentAttribute = wireframeAttributes.get( geometry );\n\n\t\tif ( currentAttribute ) {\n\n\t\t\tconst geometryIndex = geometry.index;\n\n\t\t\tif ( geometryIndex !== null ) {\n\n\t\t\t\t// if the attribute is obsolete, create a new one\n\n\t\t\t\tif ( currentAttribute.version < geometryIndex.version ) {\n\n\t\t\t\t\tupdateWireframeAttribute( geometry );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tupdateWireframeAttribute( geometry );\n\n\t\t}\n\n\t\treturn wireframeAttributes.get( geometry );\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tupdate: update,\n\n\t\tgetWireframeAttribute: getWireframeAttribute\n\n\t};\n\n}\n\nfunction WebGLIndexedBufferRenderer( gl, extensions, info, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tlet mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tlet type, bytesPerElement;\n\n\tfunction setIndex( value ) {\n\n\t\ttype = value.type;\n\t\tbytesPerElement = value.bytesPerElement;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawElements( mode, count, type, start * bytesPerElement );\n\n\t\tinfo.update( count, mode, 1 );\n\n\t}\n\n\tfunction renderInstances( start, count, primcount ) {\n\n\t\tif ( primcount === 0 ) return;\n\n\t\tlet extension, methodName;\n\n\t\tif ( isWebGL2 ) {\n\n\t\t\textension = gl;\n\t\t\tmethodName = 'drawElementsInstanced';\n\n\t\t} else {\n\n\t\t\textension = extensions.get( 'ANGLE_instanced_arrays' );\n\t\t\tmethodName = 'drawElementsInstancedANGLE';\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\textension[ methodName ]( mode, count, type, start * bytesPerElement, primcount );\n\n\t\tinfo.update( count, mode, primcount );\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.setIndex = setIndex;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\n}\n\nfunction WebGLInfo( gl ) {\n\n\tconst memory = {\n\t\tgeometries: 0,\n\t\ttextures: 0\n\t};\n\n\tconst render = {\n\t\tframe: 0,\n\t\tcalls: 0,\n\t\ttriangles: 0,\n\t\tpoints: 0,\n\t\tlines: 0\n\t};\n\n\tfunction update( count, mode, instanceCount ) {\n\n\t\trender.calls ++;\n\n\t\tswitch ( mode ) {\n\n\t\t\tcase 4:\n\t\t\t\trender.triangles += instanceCount * ( count / 3 );\n\t\t\t\tbreak;\n\n\t\t\tcase 1:\n\t\t\t\trender.lines += instanceCount * ( count / 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 3:\n\t\t\t\trender.lines += instanceCount * ( count - 1 );\n\t\t\t\tbreak;\n\n\t\t\tcase 2:\n\t\t\t\trender.lines += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tcase 0:\n\t\t\t\trender.points += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.error( 'THREE.WebGLInfo: Unknown draw mode:', mode );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction reset() {\n\n\t\trender.frame ++;\n\t\trender.calls = 0;\n\t\trender.triangles = 0;\n\t\trender.points = 0;\n\t\trender.lines = 0;\n\n\t}\n\n\treturn {\n\t\tmemory: memory,\n\t\trender: render,\n\t\tprograms: null,\n\t\tautoReset: true,\n\t\treset: reset,\n\t\tupdate: update\n\t};\n\n}\n\nclass DataTexture2DArray extends Texture {\n\n\tconstructor( data = null, width = 1, height = 1, depth = 1 ) {\n\n\t\tsuper( null );\n\n\t\tthis.image = { data, width, height, depth };\n\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.minFilter = NearestFilter;\n\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\nDataTexture2DArray.prototype.isDataTexture2DArray = true;\n\nfunction numericalSort( a, b ) {\n\n\treturn a[ 0 ] - b[ 0 ];\n\n}\n\nfunction absNumericalSort( a, b ) {\n\n\treturn Math.abs( b[ 1 ] ) - Math.abs( a[ 1 ] );\n\n}\n\nfunction denormalize( morph, attribute ) {\n\n\tlet denominator = 1;\n\tconst array = attribute.isInterleavedBufferAttribute ? attribute.data.array : attribute.array;\n\n\tif ( array instanceof Int8Array ) denominator = 127;\n\telse if ( array instanceof Int16Array ) denominator = 32767;\n\telse if ( array instanceof Int32Array ) denominator = 2147483647;\n\telse console.error( 'THREE.WebGLMorphtargets: Unsupported morph attribute data type: ', array );\n\n\tmorph.divideScalar( denominator );\n\n}\n\nfunction WebGLMorphtargets( gl, capabilities, textures ) {\n\n\tconst influencesList = {};\n\tconst morphInfluences = new Float32Array( 8 );\n\tconst morphTextures = new WeakMap();\n\tconst morph = new Vector3();\n\n\tconst workInfluences = [];\n\n\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\tworkInfluences[ i ] = [ i, 0 ];\n\n\t}\n\n\tfunction update( object, geometry, material, program ) {\n\n\t\tconst objectInfluences = object.morphTargetInfluences;\n\n\t\tif ( capabilities.isWebGL2 === true ) {\n\n\t\t\t// instead of using attributes, the WebGL 2 code path encodes morph targets\n\t\t\t// into an array of data textures. Each layer represents a single morph target.\n\n\t\t\tconst numberOfMorphTargets = geometry.morphAttributes.position.length;\n\n\t\t\tlet entry = morphTextures.get( geometry );\n\n\t\t\tif ( entry === undefined || entry.count !== numberOfMorphTargets ) {\n\n\t\t\t\tif ( entry !== undefined ) entry.texture.dispose();\n\n\t\t\t\tconst hasMorphNormals = geometry.morphAttributes.normal !== undefined;\n\n\t\t\t\tconst morphTargets = geometry.morphAttributes.position;\n\t\t\t\tconst morphNormals = geometry.morphAttributes.normal || [];\n\n\t\t\t\tconst numberOfVertices = geometry.attributes.position.count;\n\t\t\t\tconst numberOfVertexData = ( hasMorphNormals === true ) ? 2 : 1; // (v,n) vs. (v)\n\n\t\t\t\tlet width = numberOfVertices * numberOfVertexData;\n\t\t\t\tlet height = 1;\n\n\t\t\t\tif ( width > capabilities.maxTextureSize ) {\n\n\t\t\t\t\theight = Math.ceil( width / capabilities.maxTextureSize );\n\t\t\t\t\twidth = capabilities.maxTextureSize;\n\n\t\t\t\t}\n\n\t\t\t\tconst buffer = new Float32Array( width * height * 4 * numberOfMorphTargets );\n\n\t\t\t\tconst texture = new DataTexture2DArray( buffer, width, height, numberOfMorphTargets );\n\t\t\t\ttexture.format = RGBAFormat; // using RGBA since RGB might be emulated (and is thus slower)\n\t\t\t\ttexture.type = FloatType;\n\n\t\t\t\t// fill buffer\n\n\t\t\t\tconst vertexDataStride = numberOfVertexData * 4;\n\n\t\t\t\tfor ( let i = 0; i < numberOfMorphTargets; i ++ ) {\n\n\t\t\t\t\tconst morphTarget = morphTargets[ i ];\n\t\t\t\t\tconst morphNormal = morphNormals[ i ];\n\n\t\t\t\t\tconst offset = width * height * 4 * i;\n\n\t\t\t\t\tfor ( let j = 0; j < morphTarget.count; j ++ ) {\n\n\t\t\t\t\t\tmorph.fromBufferAttribute( morphTarget, j );\n\n\t\t\t\t\t\tif ( morphTarget.normalized === true ) denormalize( morph, morphTarget );\n\n\t\t\t\t\t\tconst stride = j * vertexDataStride;\n\n\t\t\t\t\t\tbuffer[ offset + stride + 0 ] = morph.x;\n\t\t\t\t\t\tbuffer[ offset + stride + 1 ] = morph.y;\n\t\t\t\t\t\tbuffer[ offset + stride + 2 ] = morph.z;\n\t\t\t\t\t\tbuffer[ offset + stride + 3 ] = 0;\n\n\t\t\t\t\t\tif ( hasMorphNormals === true ) {\n\n\t\t\t\t\t\t\tmorph.fromBufferAttribute( morphNormal, j );\n\n\t\t\t\t\t\t\tif ( morphNormal.normalized === true ) denormalize( morph, morphNormal );\n\n\t\t\t\t\t\t\tbuffer[ offset + stride + 4 ] = morph.x;\n\t\t\t\t\t\t\tbuffer[ offset + stride + 5 ] = morph.y;\n\t\t\t\t\t\t\tbuffer[ offset + stride + 6 ] = morph.z;\n\t\t\t\t\t\t\tbuffer[ offset + stride + 7 ] = 0;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tentry = {\n\t\t\t\t\tcount: numberOfMorphTargets,\n\t\t\t\t\ttexture: texture,\n\t\t\t\t\tsize: new Vector2( width, height )\n\t\t\t\t};\n\n\t\t\t\tmorphTextures.set( geometry, entry );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tlet morphInfluencesSum = 0;\n\n\t\t\tfor ( let i = 0; i < objectInfluences.length; i ++ ) {\n\n\t\t\t\tmorphInfluencesSum += objectInfluences[ i ];\n\n\t\t\t}\n\n\t\t\tconst morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;\n\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence );\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetInfluences', objectInfluences );\n\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetsTexture', entry.texture, textures );\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetsTextureSize', entry.size );\n\n\n\t\t} else {\n\n\t\t\t// When object doesn't have morph target influences defined, we treat it as a 0-length array\n\t\t\t// This is important to make sure we set up morphTargetBaseInfluence / morphTargetInfluences\n\n\t\t\tconst length = objectInfluences === undefined ? 0 : objectInfluences.length;\n\n\t\t\tlet influences = influencesList[ geometry.id ];\n\n\t\t\tif ( influences === undefined || influences.length !== length ) {\n\n\t\t\t\t// initialise list\n\n\t\t\t\tinfluences = [];\n\n\t\t\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\t\t\tinfluences[ i ] = [ i, 0 ];\n\n\t\t\t\t}\n\n\t\t\t\tinfluencesList[ geometry.id ] = influences;\n\n\t\t\t}\n\n\t\t\t// Collect influences\n\n\t\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\t\tconst influence = influences[ i ];\n\n\t\t\t\tinfluence[ 0 ] = i;\n\t\t\t\tinfluence[ 1 ] = objectInfluences[ i ];\n\n\t\t\t}\n\n\t\t\tinfluences.sort( absNumericalSort );\n\n\t\t\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\t\t\tif ( i < length && influences[ i ][ 1 ] ) {\n\n\t\t\t\t\tworkInfluences[ i ][ 0 ] = influences[ i ][ 0 ];\n\t\t\t\t\tworkInfluences[ i ][ 1 ] = influences[ i ][ 1 ];\n\n\t\t\t\t} else {\n\n\t\t\t\t\tworkInfluences[ i ][ 0 ] = Number.MAX_SAFE_INTEGER;\n\t\t\t\t\tworkInfluences[ i ][ 1 ] = 0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tworkInfluences.sort( numericalSort );\n\n\t\t\tconst morphTargets = geometry.morphAttributes.position;\n\t\t\tconst morphNormals = geometry.morphAttributes.normal;\n\n\t\t\tlet morphInfluencesSum = 0;\n\n\t\t\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\t\t\tconst influence = workInfluences[ i ];\n\t\t\t\tconst index = influence[ 0 ];\n\t\t\t\tconst value = influence[ 1 ];\n\n\t\t\t\tif ( index !== Number.MAX_SAFE_INTEGER && value ) {\n\n\t\t\t\t\tif ( morphTargets && geometry.getAttribute( 'morphTarget' + i ) !== morphTargets[ index ] ) {\n\n\t\t\t\t\t\tgeometry.setAttribute( 'morphTarget' + i, morphTargets[ index ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( morphNormals && geometry.getAttribute( 'morphNormal' + i ) !== morphNormals[ index ] ) {\n\n\t\t\t\t\t\tgeometry.setAttribute( 'morphNormal' + i, morphNormals[ index ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmorphInfluences[ i ] = value;\n\t\t\t\t\tmorphInfluencesSum += value;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( morphTargets && geometry.hasAttribute( 'morphTarget' + i ) === true ) {\n\n\t\t\t\t\t\tgeometry.deleteAttribute( 'morphTarget' + i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( morphNormals && geometry.hasAttribute( 'morphNormal' + i ) === true ) {\n\n\t\t\t\t\t\tgeometry.deleteAttribute( 'morphNormal' + i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmorphInfluences[ i ] = 0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// GLSL shader uses formula baseinfluence * base + sum(target * influence)\n\t\t\t// This allows us to switch between absolute morphs and relative morphs without changing shader code\n\t\t\t// When baseinfluence = 1 - sum(influence), the above is equivalent to sum((target - base) * influence)\n\t\t\tconst morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;\n\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence );\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetInfluences', morphInfluences );\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\tupdate: update\n\n\t};\n\n}\n\nfunction WebGLObjects( gl, geometries, attributes, info ) {\n\n\tlet updateMap = new WeakMap();\n\n\tfunction update( object ) {\n\n\t\tconst frame = info.render.frame;\n\n\t\tconst geometry = object.geometry;\n\t\tconst buffergeometry = geometries.get( object, geometry );\n\n\t\t// Update once per frame\n\n\t\tif ( updateMap.get( buffergeometry ) !== frame ) {\n\n\t\t\tgeometries.update( buffergeometry );\n\n\t\t\tupdateMap.set( buffergeometry, frame );\n\n\t\t}\n\n\t\tif ( object.isInstancedMesh ) {\n\n\t\t\tif ( object.hasEventListener( 'dispose', onInstancedMeshDispose ) === false ) {\n\n\t\t\t\tobject.addEventListener( 'dispose', onInstancedMeshDispose );\n\n\t\t\t}\n\n\t\t\tattributes.update( object.instanceMatrix, 34962 );\n\n\t\t\tif ( object.instanceColor !== null ) {\n\n\t\t\t\tattributes.update( object.instanceColor, 34962 );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn buffergeometry;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tupdateMap = new WeakMap();\n\n\t}\n\n\tfunction onInstancedMeshDispose( event ) {\n\n\t\tconst instancedMesh = event.target;\n\n\t\tinstancedMesh.removeEventListener( 'dispose', onInstancedMeshDispose );\n\n\t\tattributes.remove( instancedMesh.instanceMatrix );\n\n\t\tif ( instancedMesh.instanceColor !== null ) attributes.remove( instancedMesh.instanceColor );\n\n\t}\n\n\treturn {\n\n\t\tupdate: update,\n\t\tdispose: dispose\n\n\t};\n\n}\n\nclass DataTexture3D extends Texture {\n\n\tconstructor( data = null, width = 1, height = 1, depth = 1 ) {\n\n\t\t// We're going to add .setXXX() methods for setting properties later.\n\t\t// Users can still set in DataTexture3D directly.\n\t\t//\n\t\t//\tconst texture = new THREE.DataTexture3D( data, width, height, depth );\n\t\t// \ttexture.anisotropy = 16;\n\t\t//\n\t\t// See #14839\n\n\t\tsuper( null );\n\n\t\tthis.image = { data, width, height, depth };\n\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.minFilter = NearestFilter;\n\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\nDataTexture3D.prototype.isDataTexture3D = true;\n\n/**\n * Uniforms of a program.\n * Those form a tree structure with a special top-level container for the root,\n * which you get by calling 'new WebGLUniforms( gl, program )'.\n *\n *\n * Properties of inner nodes including the top-level container:\n *\n * .seq - array of nested uniforms\n * .map - nested uniforms by name\n *\n *\n * Methods of all nodes except the top-level container:\n *\n * .setValue( gl, value, [textures] )\n *\n * \t\tuploads a uniform value(s)\n * \tthe 'textures' parameter is needed for sampler uniforms\n *\n *\n * Static methods of the top-level container (textures factorizations):\n *\n * .upload( gl, seq, values, textures )\n *\n * \t\tsets uniforms in 'seq' to 'values[id].value'\n *\n * .seqWithValue( seq, values ) : filteredSeq\n *\n * \t\tfilters 'seq' entries with corresponding entry in values\n *\n *\n * Methods of the top-level container (textures factorizations):\n *\n * .setValue( gl, name, value, textures )\n *\n * \t\tsets uniform with name 'name' to 'value'\n *\n * .setOptional( gl, obj, prop )\n *\n * \t\tlike .set for an optional property of the object\n *\n */\n\nconst emptyTexture = new Texture();\nconst emptyTexture2dArray = new DataTexture2DArray();\nconst emptyTexture3d = new DataTexture3D();\nconst emptyCubeTexture = new CubeTexture();\n\n// --- Utilities ---\n\n// Array Caches (provide typed arrays for temporary by size)\n\nconst arrayCacheF32 = [];\nconst arrayCacheI32 = [];\n\n// Float32Array caches used for uploading Matrix uniforms\n\nconst mat4array = new Float32Array( 16 );\nconst mat3array = new Float32Array( 9 );\nconst mat2array = new Float32Array( 4 );\n\n// Flattening for arrays of vectors and matrices\n\nfunction flatten( array, nBlocks, blockSize ) {\n\n\tconst firstElem = array[ 0 ];\n\n\tif ( firstElem <= 0 || firstElem > 0 ) return array;\n\t// unoptimized: ! isNaN( firstElem )\n\t// see http://jacksondunstan.com/articles/983\n\n\tconst n = nBlocks * blockSize;\n\tlet r = arrayCacheF32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Float32Array( n );\n\t\tarrayCacheF32[ n ] = r;\n\n\t}\n\n\tif ( nBlocks !== 0 ) {\n\n\t\tfirstElem.toArray( r, 0 );\n\n\t\tfor ( let i = 1, offset = 0; i !== nBlocks; ++ i ) {\n\n\t\t\toffset += blockSize;\n\t\t\tarray[ i ].toArray( r, offset );\n\n\t\t}\n\n\t}\n\n\treturn r;\n\n}\n\nfunction arraysEqual( a, b ) {\n\n\tif ( a.length !== b.length ) return false;\n\n\tfor ( let i = 0, l = a.length; i < l; i ++ ) {\n\n\t\tif ( a[ i ] !== b[ i ] ) return false;\n\n\t}\n\n\treturn true;\n\n}\n\nfunction copyArray( a, b ) {\n\n\tfor ( let i = 0, l = b.length; i < l; i ++ ) {\n\n\t\ta[ i ] = b[ i ];\n\n\t}\n\n}\n\n// Texture unit allocation\n\nfunction allocTexUnits( textures, n ) {\n\n\tlet r = arrayCacheI32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Int32Array( n );\n\t\tarrayCacheI32[ n ] = r;\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\tr[ i ] = textures.allocateTextureUnit();\n\n\t}\n\n\treturn r;\n\n}\n\n// --- Setters ---\n\n// Note: Defining these methods externally, because they come in a bunch\n// and this way their names minify.\n\n// Single scalar\n\nfunction setValueV1f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1f( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single float vector (from flat array or THREE.VectorN)\n\nfunction setValueV2f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {\n\n\t\t\tgl.uniform2f( this.addr, v.x, v.y );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform2fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV3f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {\n\n\t\t\tgl.uniform3f( this.addr, v.x, v.y, v.z );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\n\t\t}\n\n\t} else if ( v.r !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.r || cache[ 1 ] !== v.g || cache[ 2 ] !== v.b ) {\n\n\t\t\tgl.uniform3f( this.addr, v.r, v.g, v.b );\n\n\t\t\tcache[ 0 ] = v.r;\n\t\t\tcache[ 1 ] = v.g;\n\t\t\tcache[ 2 ] = v.b;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform3fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV4f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {\n\n\t\t\tgl.uniform4f( this.addr, v.x, v.y, v.z, v.w );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\t\t\tcache[ 3 ] = v.w;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform4fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\n// Single matrix (from flat array or THREE.MatrixN)\n\nfunction setValueM2( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix2fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat2array.set( elements );\n\n\t\tgl.uniformMatrix2fv( this.addr, false, mat2array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\nfunction setValueM3( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix3fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat3array.set( elements );\n\n\t\tgl.uniformMatrix3fv( this.addr, false, mat3array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\nfunction setValueM4( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix4fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat4array.set( elements );\n\n\t\tgl.uniformMatrix4fv( this.addr, false, mat4array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\n// Single integer / boolean\n\nfunction setValueV1i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1i( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single integer / boolean vector (from flat array)\n\nfunction setValueV2i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform2iv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\nfunction setValueV3i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform3iv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\nfunction setValueV4i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform4iv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\n// Single unsigned integer\n\nfunction setValueV1ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1ui( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single unsigned integer vector (from flat array)\n\nfunction setValueV2ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform2uiv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\nfunction setValueV3ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform3uiv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\nfunction setValueV4ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform4uiv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\n\n// Single texture (2D / Cube)\n\nfunction setValueT1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.safeSetTexture2D( v || emptyTexture, unit );\n\n}\n\nfunction setValueT3D1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTexture3D( v || emptyTexture3d, unit );\n\n}\n\nfunction setValueT6( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.safeSetTextureCube( v || emptyCubeTexture, unit );\n\n}\n\nfunction setValueT2DArray1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTexture2DArray( v || emptyTexture2dArray, unit );\n\n}\n\n// Helper to pick the right setter for the singular case\n\nfunction getSingularSetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValueV1f; // FLOAT\n\t\tcase 0x8b50: return setValueV2f; // _VEC2\n\t\tcase 0x8b51: return setValueV3f; // _VEC3\n\t\tcase 0x8b52: return setValueV4f; // _VEC4\n\n\t\tcase 0x8b5a: return setValueM2; // _MAT2\n\t\tcase 0x8b5b: return setValueM3; // _MAT3\n\t\tcase 0x8b5c: return setValueM4; // _MAT4\n\n\t\tcase 0x1404: case 0x8b56: return setValueV1i; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValueV2i; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValueV3i; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValueV4i; // _VEC4\n\n\t\tcase 0x1405: return setValueV1ui; // UINT\n\t\tcase 0x8dc6: return setValueV2ui; // _VEC2\n\t\tcase 0x8dc7: return setValueV3ui; // _VEC3\n\t\tcase 0x8dc8: return setValueV4ui; // _VEC4\n\n\t\tcase 0x8b5e: // SAMPLER_2D\n\t\tcase 0x8d66: // SAMPLER_EXTERNAL_OES\n\t\tcase 0x8dca: // INT_SAMPLER_2D\n\t\tcase 0x8dd2: // UNSIGNED_INT_SAMPLER_2D\n\t\tcase 0x8b62: // SAMPLER_2D_SHADOW\n\t\t\treturn setValueT1;\n\n\t\tcase 0x8b5f: // SAMPLER_3D\n\t\tcase 0x8dcb: // INT_SAMPLER_3D\n\t\tcase 0x8dd3: // UNSIGNED_INT_SAMPLER_3D\n\t\t\treturn setValueT3D1;\n\n\t\tcase 0x8b60: // SAMPLER_CUBE\n\t\tcase 0x8dcc: // INT_SAMPLER_CUBE\n\t\tcase 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE\n\t\tcase 0x8dc5: // SAMPLER_CUBE_SHADOW\n\t\t\treturn setValueT6;\n\n\t\tcase 0x8dc1: // SAMPLER_2D_ARRAY\n\t\tcase 0x8dcf: // INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW\n\t\t\treturn setValueT2DArray1;\n\n\t}\n\n}\n\n\n// Array of scalars\n\nfunction setValueV1fArray( gl, v ) {\n\n\tgl.uniform1fv( this.addr, v );\n\n}\n\n// Array of vectors (from flat array or array of THREE.VectorN)\n\nfunction setValueV2fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 2 );\n\n\tgl.uniform2fv( this.addr, data );\n\n}\n\nfunction setValueV3fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 3 );\n\n\tgl.uniform3fv( this.addr, data );\n\n}\n\nfunction setValueV4fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 4 );\n\n\tgl.uniform4fv( this.addr, data );\n\n}\n\n// Array of matrices (from flat array or array of THREE.MatrixN)\n\nfunction setValueM2Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 4 );\n\n\tgl.uniformMatrix2fv( this.addr, false, data );\n\n}\n\nfunction setValueM3Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 9 );\n\n\tgl.uniformMatrix3fv( this.addr, false, data );\n\n}\n\nfunction setValueM4Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 16 );\n\n\tgl.uniformMatrix4fv( this.addr, false, data );\n\n}\n\n// Array of integer / boolean\n\nfunction setValueV1iArray( gl, v ) {\n\n\tgl.uniform1iv( this.addr, v );\n\n}\n\n// Array of integer / boolean vectors (from flat array)\n\nfunction setValueV2iArray( gl, v ) {\n\n\tgl.uniform2iv( this.addr, v );\n\n}\n\nfunction setValueV3iArray( gl, v ) {\n\n\tgl.uniform3iv( this.addr, v );\n\n}\n\nfunction setValueV4iArray( gl, v ) {\n\n\tgl.uniform4iv( this.addr, v );\n\n}\n\n// Array of unsigned integer\n\nfunction setValueV1uiArray( gl, v ) {\n\n\tgl.uniform1uiv( this.addr, v );\n\n}\n\n// Array of unsigned integer vectors (from flat array)\n\nfunction setValueV2uiArray( gl, v ) {\n\n\tgl.uniform2uiv( this.addr, v );\n\n}\n\nfunction setValueV3uiArray( gl, v ) {\n\n\tgl.uniform3uiv( this.addr, v );\n\n}\n\nfunction setValueV4uiArray( gl, v ) {\n\n\tgl.uniform4uiv( this.addr, v );\n\n}\n\n\n// Array of textures (2D / Cube)\n\nfunction setValueT1Array( gl, v, textures ) {\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tgl.uniform1iv( this.addr, units );\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.safeSetTexture2D( v[ i ] || emptyTexture, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT6Array( gl, v, textures ) {\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tgl.uniform1iv( this.addr, units );\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.safeSetTextureCube( v[ i ] || emptyCubeTexture, units[ i ] );\n\n\t}\n\n}\n\n// Helper to pick the right setter for a pure (bottom-level) array\n\nfunction getPureArraySetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValueV1fArray; // FLOAT\n\t\tcase 0x8b50: return setValueV2fArray; // _VEC2\n\t\tcase 0x8b51: return setValueV3fArray; // _VEC3\n\t\tcase 0x8b52: return setValueV4fArray; // _VEC4\n\n\t\tcase 0x8b5a: return setValueM2Array; // _MAT2\n\t\tcase 0x8b5b: return setValueM3Array; // _MAT3\n\t\tcase 0x8b5c: return setValueM4Array; // _MAT4\n\n\t\tcase 0x1404: case 0x8b56: return setValueV1iArray; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValueV2iArray; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValueV3iArray; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValueV4iArray; // _VEC4\n\n\t\tcase 0x1405: return setValueV1uiArray; // UINT\n\t\tcase 0x8dc6: return setValueV2uiArray; // _VEC2\n\t\tcase 0x8dc7: return setValueV3uiArray; // _VEC3\n\t\tcase 0x8dc8: return setValueV4uiArray; // _VEC4\n\n\t\tcase 0x8b5e: // SAMPLER_2D\n\t\tcase 0x8d66: // SAMPLER_EXTERNAL_OES\n\t\tcase 0x8dca: // INT_SAMPLER_2D\n\t\tcase 0x8dd2: // UNSIGNED_INT_SAMPLER_2D\n\t\tcase 0x8b62: // SAMPLER_2D_SHADOW\n\t\t\treturn setValueT1Array;\n\n\t\tcase 0x8b60: // SAMPLER_CUBE\n\t\tcase 0x8dcc: // INT_SAMPLER_CUBE\n\t\tcase 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE\n\t\tcase 0x8dc5: // SAMPLER_CUBE_SHADOW\n\t\t\treturn setValueT6Array;\n\n\t}\n\n}\n\n// --- Uniform Classes ---\n\nfunction SingleUniform( id, activeInfo, addr ) {\n\n\tthis.id = id;\n\tthis.addr = addr;\n\tthis.cache = [];\n\tthis.setValue = getSingularSetter( activeInfo.type );\n\n\t// this.path = activeInfo.name; // DEBUG\n\n}\n\nfunction PureArrayUniform( id, activeInfo, addr ) {\n\n\tthis.id = id;\n\tthis.addr = addr;\n\tthis.cache = [];\n\tthis.size = activeInfo.size;\n\tthis.setValue = getPureArraySetter( activeInfo.type );\n\n\t// this.path = activeInfo.name; // DEBUG\n\n}\n\nPureArrayUniform.prototype.updateCache = function ( data ) {\n\n\tconst cache = this.cache;\n\n\tif ( data instanceof Float32Array && cache.length !== data.length ) {\n\n\t\tthis.cache = new Float32Array( data.length );\n\n\t}\n\n\tcopyArray( cache, data );\n\n};\n\nfunction StructuredUniform( id ) {\n\n\tthis.id = id;\n\n\tthis.seq = [];\n\tthis.map = {};\n\n}\n\nStructuredUniform.prototype.setValue = function ( gl, value, textures ) {\n\n\tconst seq = this.seq;\n\n\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tconst u = seq[ i ];\n\t\tu.setValue( gl, value[ u.id ], textures );\n\n\t}\n\n};\n\n// --- Top-level ---\n\n// Parser - builds up the property tree from the path strings\n\nconst RePathPart = /(\\w+)(\\])?(\\[|\\.)?/g;\n\n// extracts\n// \t- the identifier (member name or array index)\n// - followed by an optional right bracket (found when array index)\n// - followed by an optional left bracket or dot (type of subscript)\n//\n// Note: These portions can be read in a non-overlapping fashion and\n// allow straightforward parsing of the hierarchy that WebGL encodes\n// in the uniform names.\n\nfunction addUniform( container, uniformObject ) {\n\n\tcontainer.seq.push( uniformObject );\n\tcontainer.map[ uniformObject.id ] = uniformObject;\n\n}\n\nfunction parseUniform( activeInfo, addr, container ) {\n\n\tconst path = activeInfo.name,\n\t\tpathLength = path.length;\n\n\t// reset RegExp object, because of the early exit of a previous run\n\tRePathPart.lastIndex = 0;\n\n\twhile ( true ) {\n\n\t\tconst match = RePathPart.exec( path ),\n\t\t\tmatchEnd = RePathPart.lastIndex;\n\n\t\tlet id = match[ 1 ];\n\t\tconst idIsIndex = match[ 2 ] === ']',\n\t\t\tsubscript = match[ 3 ];\n\n\t\tif ( idIsIndex ) id = id | 0; // convert to integer\n\n\t\tif ( subscript === undefined || subscript === '[' && matchEnd + 2 === pathLength ) {\n\n\t\t\t// bare name or \"pure\" bottom-level array \"[0]\" suffix\n\n\t\t\taddUniform( container, subscript === undefined ?\n\t\t\t\tnew SingleUniform( id, activeInfo, addr ) :\n\t\t\t\tnew PureArrayUniform( id, activeInfo, addr ) );\n\n\t\t\tbreak;\n\n\t\t} else {\n\n\t\t\t// step into inner node / create it in case it doesn't exist\n\n\t\t\tconst map = container.map;\n\t\t\tlet next = map[ id ];\n\n\t\t\tif ( next === undefined ) {\n\n\t\t\t\tnext = new StructuredUniform( id );\n\t\t\t\taddUniform( container, next );\n\n\t\t\t}\n\n\t\t\tcontainer = next;\n\n\t\t}\n\n\t}\n\n}\n\n// Root Container\n\nfunction WebGLUniforms( gl, program ) {\n\n\tthis.seq = [];\n\tthis.map = {};\n\n\tconst n = gl.getProgramParameter( program, 35718 );\n\n\tfor ( let i = 0; i < n; ++ i ) {\n\n\t\tconst info = gl.getActiveUniform( program, i ),\n\t\t\taddr = gl.getUniformLocation( program, info.name );\n\n\t\tparseUniform( info, addr, this );\n\n\t}\n\n}\n\nWebGLUniforms.prototype.setValue = function ( gl, name, value, textures ) {\n\n\tconst u = this.map[ name ];\n\n\tif ( u !== undefined ) u.setValue( gl, value, textures );\n\n};\n\nWebGLUniforms.prototype.setOptional = function ( gl, object, name ) {\n\n\tconst v = object[ name ];\n\n\tif ( v !== undefined ) this.setValue( gl, name, v );\n\n};\n\n\n// Static interface\n\nWebGLUniforms.upload = function ( gl, seq, values, textures ) {\n\n\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tconst u = seq[ i ],\n\t\t\tv = values[ u.id ];\n\n\t\tif ( v.needsUpdate !== false ) {\n\n\t\t\t// note: always updating when .needsUpdate is undefined\n\t\t\tu.setValue( gl, v.value, textures );\n\n\t\t}\n\n\t}\n\n};\n\nWebGLUniforms.seqWithValue = function ( seq, values ) {\n\n\tconst r = [];\n\n\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tconst u = seq[ i ];\n\t\tif ( u.id in values ) r.push( u );\n\n\t}\n\n\treturn r;\n\n};\n\nfunction WebGLShader( gl, type, string ) {\n\n\tconst shader = gl.createShader( type );\n\n\tgl.shaderSource( shader, string );\n\tgl.compileShader( shader );\n\n\treturn shader;\n\n}\n\nlet programIdCount = 0;\n\nfunction addLineNumbers( string ) {\n\n\tconst lines = string.split( '\\n' );\n\n\tfor ( let i = 0; i < lines.length; i ++ ) {\n\n\t\tlines[ i ] = ( i + 1 ) + ': ' + lines[ i ];\n\n\t}\n\n\treturn lines.join( '\\n' );\n\n}\n\nfunction getEncodingComponents( encoding ) {\n\n\tswitch ( encoding ) {\n\n\t\tcase LinearEncoding:\n\t\t\treturn [ 'Linear', '( value )' ];\n\t\tcase sRGBEncoding:\n\t\t\treturn [ 'sRGB', '( value )' ];\n\t\tcase RGBEEncoding:\n\t\t\treturn [ 'RGBE', '( value )' ];\n\t\tcase RGBM7Encoding:\n\t\t\treturn [ 'RGBM', '( value, 7.0 )' ];\n\t\tcase RGBM16Encoding:\n\t\t\treturn [ 'RGBM', '( value, 16.0 )' ];\n\t\tcase RGBDEncoding:\n\t\t\treturn [ 'RGBD', '( value, 256.0 )' ];\n\t\tcase GammaEncoding:\n\t\t\treturn [ 'Gamma', '( value, float( GAMMA_FACTOR ) )' ];\n\t\tcase LogLuvEncoding:\n\t\t\treturn [ 'LogLuv', '( value )' ];\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.WebGLProgram: Unsupported encoding:', encoding );\n\t\t\treturn [ 'Linear', '( value )' ];\n\n\t}\n\n}\n\nfunction getShaderErrors( gl, shader, type ) {\n\n\tconst status = gl.getShaderParameter( shader, 35713 );\n\tconst errors = gl.getShaderInfoLog( shader ).trim();\n\n\tif ( status && errors === '' ) return '';\n\n\t// --enable-privileged-webgl-extension\n\t// console.log( '**' + type + '**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) );\n\n\treturn type.toUpperCase() + '\\n\\n' + errors + '\\n\\n' + addLineNumbers( gl.getShaderSource( shader ) );\n\n}\n\nfunction getTexelDecodingFunction( functionName, encoding ) {\n\n\tconst components = getEncodingComponents( encoding );\n\treturn 'vec4 ' + functionName + '( vec4 value ) { return ' + components[ 0 ] + 'ToLinear' + components[ 1 ] + '; }';\n\n}\n\nfunction getTexelEncodingFunction( functionName, encoding ) {\n\n\tconst components = getEncodingComponents( encoding );\n\treturn 'vec4 ' + functionName + '( vec4 value ) { return LinearTo' + components[ 0 ] + components[ 1 ] + '; }';\n\n}\n\nfunction getToneMappingFunction( functionName, toneMapping ) {\n\n\tlet toneMappingName;\n\n\tswitch ( toneMapping ) {\n\n\t\tcase LinearToneMapping:\n\t\t\ttoneMappingName = 'Linear';\n\t\t\tbreak;\n\n\t\tcase ReinhardToneMapping:\n\t\t\ttoneMappingName = 'Reinhard';\n\t\t\tbreak;\n\n\t\tcase CineonToneMapping:\n\t\t\ttoneMappingName = 'OptimizedCineon';\n\t\t\tbreak;\n\n\t\tcase ACESFilmicToneMapping:\n\t\t\ttoneMappingName = 'ACESFilmic';\n\t\t\tbreak;\n\n\t\tcase CustomToneMapping:\n\t\t\ttoneMappingName = 'Custom';\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.WebGLProgram: Unsupported toneMapping:', toneMapping );\n\t\t\ttoneMappingName = 'Linear';\n\n\t}\n\n\treturn 'vec3 ' + functionName + '( vec3 color ) { return ' + toneMappingName + 'ToneMapping( color ); }';\n\n}\n\nfunction generateExtensions( parameters ) {\n\n\tconst chunks = [\n\t\t( parameters.extensionDerivatives || parameters.envMapCubeUV || parameters.bumpMap || parameters.tangentSpaceNormalMap || parameters.clearcoatNormalMap || parameters.flatShading || parameters.shaderID === 'physical' ) ? '#extension GL_OES_standard_derivatives : enable' : '',\n\t\t( parameters.extensionFragDepth || parameters.logarithmicDepthBuffer ) && parameters.rendererExtensionFragDepth ? '#extension GL_EXT_frag_depth : enable' : '',\n\t\t( parameters.extensionDrawBuffers && parameters.rendererExtensionDrawBuffers ) ? '#extension GL_EXT_draw_buffers : require' : '',\n\t\t( parameters.extensionShaderTextureLOD || parameters.envMap || parameters.transmission ) && parameters.rendererExtensionShaderTextureLod ? '#extension GL_EXT_shader_texture_lod : enable' : ''\n\t];\n\n\treturn chunks.filter( filterEmptyLine ).join( '\\n' );\n\n}\n\nfunction generateDefines( defines ) {\n\n\tconst chunks = [];\n\n\tfor ( const name in defines ) {\n\n\t\tconst value = defines[ name ];\n\n\t\tif ( value === false ) continue;\n\n\t\tchunks.push( '#define ' + name + ' ' + value );\n\n\t}\n\n\treturn chunks.join( '\\n' );\n\n}\n\nfunction fetchAttributeLocations( gl, program ) {\n\n\tconst attributes = {};\n\n\tconst n = gl.getProgramParameter( program, 35721 );\n\n\tfor ( let i = 0; i < n; i ++ ) {\n\n\t\tconst info = gl.getActiveAttrib( program, i );\n\t\tconst name = info.name;\n\n\t\tlet locationSize = 1;\n\t\tif ( info.type === 35674 ) locationSize = 2;\n\t\tif ( info.type === 35675 ) locationSize = 3;\n\t\tif ( info.type === 35676 ) locationSize = 4;\n\n\t\t// console.log( 'THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:', name, i );\n\n\t\tattributes[ name ] = {\n\t\t\ttype: info.type,\n\t\t\tlocation: gl.getAttribLocation( program, name ),\n\t\t\tlocationSize: locationSize\n\t\t};\n\n\t}\n\n\treturn attributes;\n\n}\n\nfunction filterEmptyLine( string ) {\n\n\treturn string !== '';\n\n}\n\nfunction replaceLightNums( string, parameters ) {\n\n\treturn string\n\t\t.replace( /NUM_DIR_LIGHTS/g, parameters.numDirLights )\n\t\t.replace( /NUM_SPOT_LIGHTS/g, parameters.numSpotLights )\n\t\t.replace( /NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights )\n\t\t.replace( /NUM_POINT_LIGHTS/g, parameters.numPointLights )\n\t\t.replace( /NUM_HEMI_LIGHTS/g, parameters.numHemiLights )\n\t\t.replace( /NUM_DIR_LIGHT_SHADOWS/g, parameters.numDirLightShadows )\n\t\t.replace( /NUM_SPOT_LIGHT_SHADOWS/g, parameters.numSpotLightShadows )\n\t\t.replace( /NUM_POINT_LIGHT_SHADOWS/g, parameters.numPointLightShadows );\n\n}\n\nfunction replaceClippingPlaneNums( string, parameters ) {\n\n\treturn string\n\t\t.replace( /NUM_CLIPPING_PLANES/g, parameters.numClippingPlanes )\n\t\t.replace( /UNION_CLIPPING_PLANES/g, ( parameters.numClippingPlanes - parameters.numClipIntersection ) );\n\n}\n\n// Resolve Includes\n\nconst includePattern = /^[ \\t]*#include +<([\\w\\d./]+)>/gm;\n\nfunction resolveIncludes( string ) {\n\n\treturn string.replace( includePattern, includeReplacer );\n\n}\n\nfunction includeReplacer( match, include ) {\n\n\tconst string = ShaderChunk[ include ];\n\n\tif ( string === undefined ) {\n\n\t\tthrow new Error( 'Can not resolve #include <' + include + '>' );\n\n\t}\n\n\treturn resolveIncludes( string );\n\n}\n\n// Unroll Loops\n\nconst deprecatedUnrollLoopPattern = /#pragma unroll_loop[\\s]+?for \\( int i \\= (\\d+)\\; i < (\\d+)\\; i \\+\\+ \\) \\{([\\s\\S]+?)(?=\\})\\}/g;\nconst unrollLoopPattern = /#pragma unroll_loop_start\\s+for\\s*\\(\\s*int\\s+i\\s*=\\s*(\\d+)\\s*;\\s*i\\s*<\\s*(\\d+)\\s*;\\s*i\\s*\\+\\+\\s*\\)\\s*{([\\s\\S]+?)}\\s+#pragma unroll_loop_end/g;\n\nfunction unrollLoops( string ) {\n\n\treturn string\n\t\t.replace( unrollLoopPattern, loopReplacer )\n\t\t.replace( deprecatedUnrollLoopPattern, deprecatedLoopReplacer );\n\n}\n\nfunction deprecatedLoopReplacer( match, start, end, snippet ) {\n\n\tconsole.warn( 'WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead.' );\n\treturn loopReplacer( match, start, end, snippet );\n\n}\n\nfunction loopReplacer( match, start, end, snippet ) {\n\n\tlet string = '';\n\n\tfor ( let i = parseInt( start ); i < parseInt( end ); i ++ ) {\n\n\t\tstring += snippet\n\t\t\t.replace( /\\[\\s*i\\s*\\]/g, '[ ' + i + ' ]' )\n\t\t\t.replace( /UNROLLED_LOOP_INDEX/g, i );\n\n\t}\n\n\treturn string;\n\n}\n\n//\n\nfunction generatePrecision( parameters ) {\n\n\tlet precisionstring = 'precision ' + parameters.precision + ' float;\\nprecision ' + parameters.precision + ' int;';\n\n\tif ( parameters.precision === 'highp' ) {\n\n\t\tprecisionstring += '\\n#define HIGH_PRECISION';\n\n\t} else if ( parameters.precision === 'mediump' ) {\n\n\t\tprecisionstring += '\\n#define MEDIUM_PRECISION';\n\n\t} else if ( parameters.precision === 'lowp' ) {\n\n\t\tprecisionstring += '\\n#define LOW_PRECISION';\n\n\t}\n\n\treturn precisionstring;\n\n}\n\nfunction generateShadowMapTypeDefine( parameters ) {\n\n\tlet shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC';\n\n\tif ( parameters.shadowMapType === PCFShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF';\n\n\t} else if ( parameters.shadowMapType === PCFSoftShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT';\n\n\t} else if ( parameters.shadowMapType === VSMShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_VSM';\n\n\t}\n\n\treturn shadowMapTypeDefine;\n\n}\n\nfunction generateEnvMapTypeDefine( parameters ) {\n\n\tlet envMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.envMapMode ) {\n\n\t\t\tcase CubeReflectionMapping:\n\t\t\tcase CubeRefractionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\t\t\t\tbreak;\n\n\t\t\tcase CubeUVReflectionMapping:\n\t\t\tcase CubeUVRefractionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapTypeDefine;\n\n}\n\nfunction generateEnvMapModeDefine( parameters ) {\n\n\tlet envMapModeDefine = 'ENVMAP_MODE_REFLECTION';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.envMapMode ) {\n\n\t\t\tcase CubeRefractionMapping:\n\t\t\tcase CubeUVRefractionMapping:\n\n\t\t\t\tenvMapModeDefine = 'ENVMAP_MODE_REFRACTION';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapModeDefine;\n\n}\n\nfunction generateEnvMapBlendingDefine( parameters ) {\n\n\tlet envMapBlendingDefine = 'ENVMAP_BLENDING_NONE';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.combine ) {\n\n\t\t\tcase MultiplyOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';\n\t\t\t\tbreak;\n\n\t\t\tcase MixOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MIX';\n\t\t\t\tbreak;\n\n\t\t\tcase AddOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_ADD';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapBlendingDefine;\n\n}\n\nfunction WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {\n\n\t// TODO Send this event to Three.js DevTools\n\t// console.log( 'WebGLProgram', cacheKey );\n\n\tconst gl = renderer.getContext();\n\n\tconst defines = parameters.defines;\n\n\tlet vertexShader = parameters.vertexShader;\n\tlet fragmentShader = parameters.fragmentShader;\n\n\tconst shadowMapTypeDefine = generateShadowMapTypeDefine( parameters );\n\tconst envMapTypeDefine = generateEnvMapTypeDefine( parameters );\n\tconst envMapModeDefine = generateEnvMapModeDefine( parameters );\n\tconst envMapBlendingDefine = generateEnvMapBlendingDefine( parameters );\n\n\n\tconst gammaFactorDefine = ( renderer.gammaFactor > 0 ) ? renderer.gammaFactor : 1.0;\n\n\tconst customExtensions = parameters.isWebGL2 ? '' : generateExtensions( parameters );\n\n\tconst customDefines = generateDefines( defines );\n\n\tconst program = gl.createProgram();\n\n\tlet prefixVertex, prefixFragment;\n\tlet versionString = parameters.glslVersion ? '#version ' + parameters.glslVersion + '\\n' : '';\n\n\tif ( parameters.isRawShaderMaterial ) {\n\n\t\tprefixVertex = [\n\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixVertex.length > 0 ) {\n\n\t\t\tprefixVertex += '\\n';\n\n\t\t}\n\n\t\tprefixFragment = [\n\n\t\t\tcustomExtensions,\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixFragment.length > 0 ) {\n\n\t\t\tprefixFragment += '\\n';\n\n\t\t}\n\n\t} else {\n\n\t\tprefixVertex = [\n\n\t\t\tgeneratePrecision( parameters ),\n\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines,\n\n\t\t\tparameters.instancing ? '#define USE_INSTANCING' : '',\n\t\t\tparameters.instancingColor ? '#define USE_INSTANCING_COLOR' : '',\n\n\t\t\tparameters.supportsVertexTextures ? '#define VERTEX_TEXTURES' : '',\n\n\t\t\t'#define GAMMA_FACTOR ' + gammaFactorDefine,\n\n\t\t\t'#define MAX_BONES ' + parameters.maxBones,\n\t\t\t( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',\n\t\t\t( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.tangentSpaceNormalMap ) ? '#define TANGENTSPACE_NORMALMAP' : '',\n\n\t\t\tparameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',\n\t\t\tparameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',\n\t\t\tparameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',\n\n\t\t\tparameters.displacementMap && parameters.supportsVertexTextures ? '#define USE_DISPLACEMENTMAP' : '',\n\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.specularIntensityMap ? '#define USE_SPECULARINTENSITYMAP' : '',\n\t\t\tparameters.specularTintMap ? '#define USE_SPECULARTINTMAP' : '',\n\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\n\t\t\tparameters.transmission ? '#define USE_TRANSMISSION' : '',\n\t\t\tparameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',\n\t\t\tparameters.thicknessMap ? '#define USE_THICKNESSMAP' : '',\n\n\t\t\tparameters.vertexTangents ? '#define USE_TANGENT' : '',\n\t\t\tparameters.vertexColors ? '#define USE_COLOR' : '',\n\t\t\tparameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',\n\t\t\tparameters.vertexUvs ? '#define USE_UV' : '',\n\t\t\tparameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.skinning ? '#define USE_SKINNING' : '',\n\t\t\tparameters.useVertexTexture ? '#define BONE_TEXTURE' : '',\n\n\t\t\tparameters.morphTargets ? '#define USE_MORPHTARGETS' : '',\n\t\t\tparameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '',\n\t\t\t( parameters.morphTargets && parameters.isWebGL2 ) ? '#define MORPHTARGETS_TEXTURE' : '',\n\t\t\t( parameters.morphTargets && parameters.isWebGL2 ) ? '#define MORPHTARGETS_COUNT ' + parameters.morphTargetsCount : '',\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\t\t\t( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '',\n\n\t\t\t'uniform mat4 modelMatrix;',\n\t\t\t'uniform mat4 modelViewMatrix;',\n\t\t\t'uniform mat4 projectionMatrix;',\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform mat3 normalMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\t\t\t'uniform bool isOrthographic;',\n\n\t\t\t'#ifdef USE_INSTANCING',\n\n\t\t\t'\tattribute mat4 instanceMatrix;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_INSTANCING_COLOR',\n\n\t\t\t'\tattribute vec3 instanceColor;',\n\n\t\t\t'#endif',\n\n\t\t\t'attribute vec3 position;',\n\t\t\t'attribute vec3 normal;',\n\t\t\t'attribute vec2 uv;',\n\n\t\t\t'#ifdef USE_TANGENT',\n\n\t\t\t'\tattribute vec4 tangent;',\n\n\t\t\t'#endif',\n\n\t\t\t'#if defined( USE_COLOR_ALPHA )',\n\n\t\t\t'\tattribute vec4 color;',\n\n\t\t\t'#elif defined( USE_COLOR )',\n\n\t\t\t'\tattribute vec3 color;',\n\n\t\t\t'#endif',\n\n\t\t\t'#if ( defined( USE_MORPHTARGETS ) && ! defined( MORPHTARGETS_TEXTURE ) )',\n\n\t\t\t'\tattribute vec3 morphTarget0;',\n\t\t\t'\tattribute vec3 morphTarget1;',\n\t\t\t'\tattribute vec3 morphTarget2;',\n\t\t\t'\tattribute vec3 morphTarget3;',\n\n\t\t\t'\t#ifdef USE_MORPHNORMALS',\n\n\t\t\t'\t\tattribute vec3 morphNormal0;',\n\t\t\t'\t\tattribute vec3 morphNormal1;',\n\t\t\t'\t\tattribute vec3 morphNormal2;',\n\t\t\t'\t\tattribute vec3 morphNormal3;',\n\n\t\t\t'\t#else',\n\n\t\t\t'\t\tattribute vec3 morphTarget4;',\n\t\t\t'\t\tattribute vec3 morphTarget5;',\n\t\t\t'\t\tattribute vec3 morphTarget6;',\n\t\t\t'\t\tattribute vec3 morphTarget7;',\n\n\t\t\t'\t#endif',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_SKINNING',\n\n\t\t\t'\tattribute vec4 skinIndex;',\n\t\t\t'\tattribute vec4 skinWeight;',\n\n\t\t\t'#endif',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tprefixFragment = [\n\n\t\t\tcustomExtensions,\n\n\t\t\tgeneratePrecision( parameters ),\n\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines,\n\n\t\t\t'#define GAMMA_FACTOR ' + gammaFactorDefine,\n\n\t\t\t( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',\n\t\t\t( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.matcap ? '#define USE_MATCAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapTypeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapBlendingDefine : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.tangentSpaceNormalMap ) ? '#define TANGENTSPACE_NORMALMAP' : '',\n\n\t\t\tparameters.clearcoat ? '#define USE_CLEARCOAT' : '',\n\t\t\tparameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',\n\t\t\tparameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',\n\t\t\tparameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',\n\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.specularIntensityMap ? '#define USE_SPECULARINTENSITYMAP' : '',\n\t\t\tparameters.specularTintMap ? '#define USE_SPECULARTINTMAP' : '',\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\t\t\tparameters.alphaTest ? '#define USE_ALPHATEST' : '',\n\n\t\t\tparameters.sheen ? '#define USE_SHEEN' : '',\n\n\t\t\tparameters.transmission ? '#define USE_TRANSMISSION' : '',\n\t\t\tparameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',\n\t\t\tparameters.thicknessMap ? '#define USE_THICKNESSMAP' : '',\n\n\t\t\tparameters.vertexTangents ? '#define USE_TANGENT' : '',\n\t\t\tparameters.vertexColors || parameters.instancingColor ? '#define USE_COLOR' : '',\n\t\t\tparameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',\n\t\t\tparameters.vertexUvs ? '#define USE_UV' : '',\n\t\t\tparameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '',\n\n\t\t\tparameters.gradientMap ? '#define USE_GRADIENTMAP' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.premultipliedAlpha ? '#define PREMULTIPLIED_ALPHA' : '',\n\n\t\t\tparameters.physicallyCorrectLights ? '#define PHYSICALLY_CORRECT_LIGHTS' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\t\t\t( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '',\n\n\t\t\t( ( parameters.extensionShaderTextureLOD || parameters.envMap ) && parameters.rendererExtensionShaderTextureLod ) ? '#define TEXTURE_LOD_EXT' : '',\n\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\t\t\t'uniform bool isOrthographic;',\n\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? '#define TONE_MAPPING' : '',\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? ShaderChunk[ 'tonemapping_pars_fragment' ] : '', // this code is required here because it is used by the toneMapping() function defined below\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? getToneMappingFunction( 'toneMapping', parameters.toneMapping ) : '',\n\n\t\t\tparameters.dithering ? '#define DITHERING' : '',\n\t\t\tparameters.format === RGBFormat ? '#define OPAQUE' : '',\n\n\t\t\tShaderChunk[ 'encodings_pars_fragment' ], // this code is required here because it is used by the various encoding/decoding function defined below\n\t\t\tparameters.map ? getTexelDecodingFunction( 'mapTexelToLinear', parameters.mapEncoding ) : '',\n\t\t\tparameters.matcap ? getTexelDecodingFunction( 'matcapTexelToLinear', parameters.matcapEncoding ) : '',\n\t\t\tparameters.envMap ? getTexelDecodingFunction( 'envMapTexelToLinear', parameters.envMapEncoding ) : '',\n\t\t\tparameters.emissiveMap ? getTexelDecodingFunction( 'emissiveMapTexelToLinear', parameters.emissiveMapEncoding ) : '',\n\t\t\tparameters.specularTintMap ? getTexelDecodingFunction( 'specularTintMapTexelToLinear', parameters.specularTintMapEncoding ) : '',\n\t\t\tparameters.lightMap ? getTexelDecodingFunction( 'lightMapTexelToLinear', parameters.lightMapEncoding ) : '',\n\t\t\tgetTexelEncodingFunction( 'linearToOutputTexel', parameters.outputEncoding ),\n\n\t\t\tparameters.depthPacking ? '#define DEPTH_PACKING ' + parameters.depthPacking : '',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t}\n\n\tvertexShader = resolveIncludes( vertexShader );\n\tvertexShader = replaceLightNums( vertexShader, parameters );\n\tvertexShader = replaceClippingPlaneNums( vertexShader, parameters );\n\n\tfragmentShader = resolveIncludes( fragmentShader );\n\tfragmentShader = replaceLightNums( fragmentShader, parameters );\n\tfragmentShader = replaceClippingPlaneNums( fragmentShader, parameters );\n\n\tvertexShader = unrollLoops( vertexShader );\n\tfragmentShader = unrollLoops( fragmentShader );\n\n\tif ( parameters.isWebGL2 && parameters.isRawShaderMaterial !== true ) {\n\n\t\t// GLSL 3.0 conversion for built-in materials and ShaderMaterial\n\n\t\tversionString = '#version 300 es\\n';\n\n\t\tprefixVertex = [\n\t\t\t'precision mediump sampler2DArray;',\n\t\t\t'#define attribute in',\n\t\t\t'#define varying out',\n\t\t\t'#define texture2D texture'\n\t\t].join( '\\n' ) + '\\n' + prefixVertex;\n\n\t\tprefixFragment = [\n\t\t\t'#define varying in',\n\t\t\t( parameters.glslVersion === GLSL3 ) ? '' : 'out highp vec4 pc_fragColor;',\n\t\t\t( parameters.glslVersion === GLSL3 ) ? '' : '#define gl_FragColor pc_fragColor',\n\t\t\t'#define gl_FragDepthEXT gl_FragDepth',\n\t\t\t'#define texture2D texture',\n\t\t\t'#define textureCube texture',\n\t\t\t'#define texture2DProj textureProj',\n\t\t\t'#define texture2DLodEXT textureLod',\n\t\t\t'#define texture2DProjLodEXT textureProjLod',\n\t\t\t'#define textureCubeLodEXT textureLod',\n\t\t\t'#define texture2DGradEXT textureGrad',\n\t\t\t'#define texture2DProjGradEXT textureProjGrad',\n\t\t\t'#define textureCubeGradEXT textureGrad'\n\t\t].join( '\\n' ) + '\\n' + prefixFragment;\n\n\t}\n\n\tconst vertexGlsl = versionString + prefixVertex + vertexShader;\n\tconst fragmentGlsl = versionString + prefixFragment + fragmentShader;\n\n\t// console.log( '*VERTEX*', vertexGlsl );\n\t// console.log( '*FRAGMENT*', fragmentGlsl );\n\n\tconst glVertexShader = WebGLShader( gl, 35633, vertexGlsl );\n\tconst glFragmentShader = WebGLShader( gl, 35632, fragmentGlsl );\n\n\tgl.attachShader( program, glVertexShader );\n\tgl.attachShader( program, glFragmentShader );\n\n\t// Force a particular attribute to index 0.\n\n\tif ( parameters.index0AttributeName !== undefined ) {\n\n\t\tgl.bindAttribLocation( program, 0, parameters.index0AttributeName );\n\n\t} else if ( parameters.morphTargets === true ) {\n\n\t\t// programs with morphTargets displace position out of attribute 0\n\t\tgl.bindAttribLocation( program, 0, 'position' );\n\n\t}\n\n\tgl.linkProgram( program );\n\n\t// check for link errors\n\tif ( renderer.debug.checkShaderErrors ) {\n\n\t\tconst programLog = gl.getProgramInfoLog( program ).trim();\n\t\tconst vertexLog = gl.getShaderInfoLog( glVertexShader ).trim();\n\t\tconst fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim();\n\n\t\tlet runnable = true;\n\t\tlet haveDiagnostics = true;\n\n\t\tif ( gl.getProgramParameter( program, 35714 ) === false ) {\n\n\t\t\trunnable = false;\n\n\t\t\tconst vertexErrors = getShaderErrors( gl, glVertexShader, 'vertex' );\n\t\t\tconst fragmentErrors = getShaderErrors( gl, glFragmentShader, 'fragment' );\n\n\t\t\tconsole.error(\n\t\t\t\t'THREE.WebGLProgram: Shader Error ' + gl.getError() + ' - ' +\n\t\t\t\t'VALIDATE_STATUS ' + gl.getProgramParameter( program, 35715 ) + '\\n\\n' +\n\t\t\t\t'Program Info Log: ' + programLog + '\\n' +\n\t\t\t\tvertexErrors + '\\n' +\n\t\t\t\tfragmentErrors\n\t\t\t);\n\n\t\t} else if ( programLog !== '' ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLProgram: Program Info Log:', programLog );\n\n\t\t} else if ( vertexLog === '' || fragmentLog === '' ) {\n\n\t\t\thaveDiagnostics = false;\n\n\t\t}\n\n\t\tif ( haveDiagnostics ) {\n\n\t\t\tthis.diagnostics = {\n\n\t\t\t\trunnable: runnable,\n\n\t\t\t\tprogramLog: programLog,\n\n\t\t\t\tvertexShader: {\n\n\t\t\t\t\tlog: vertexLog,\n\t\t\t\t\tprefix: prefixVertex\n\n\t\t\t\t},\n\n\t\t\t\tfragmentShader: {\n\n\t\t\t\t\tlog: fragmentLog,\n\t\t\t\t\tprefix: prefixFragment\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}\n\n\t}\n\n\t// Clean up\n\n\t// Crashes in iOS9 and iOS10. #18402\n\t// gl.detachShader( program, glVertexShader );\n\t// gl.detachShader( program, glFragmentShader );\n\n\tgl.deleteShader( glVertexShader );\n\tgl.deleteShader( glFragmentShader );\n\n\t// set up caching for uniform locations\n\n\tlet cachedUniforms;\n\n\tthis.getUniforms = function () {\n\n\t\tif ( cachedUniforms === undefined ) {\n\n\t\t\tcachedUniforms = new WebGLUniforms( gl, program );\n\n\t\t}\n\n\t\treturn cachedUniforms;\n\n\t};\n\n\t// set up caching for attribute locations\n\n\tlet cachedAttributes;\n\n\tthis.getAttributes = function () {\n\n\t\tif ( cachedAttributes === undefined ) {\n\n\t\t\tcachedAttributes = fetchAttributeLocations( gl, program );\n\n\t\t}\n\n\t\treturn cachedAttributes;\n\n\t};\n\n\t// free resource\n\n\tthis.destroy = function () {\n\n\t\tbindingStates.releaseStatesOfProgram( this );\n\n\t\tgl.deleteProgram( program );\n\t\tthis.program = undefined;\n\n\t};\n\n\t//\n\n\tthis.name = parameters.shaderName;\n\tthis.id = programIdCount ++;\n\tthis.cacheKey = cacheKey;\n\tthis.usedTimes = 1;\n\tthis.program = program;\n\tthis.vertexShader = glVertexShader;\n\tthis.fragmentShader = glFragmentShader;\n\n\treturn this;\n\n}\n\nfunction WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping ) {\n\n\tconst programs = [];\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\tconst logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer;\n\tconst floatVertexTextures = capabilities.floatVertexTextures;\n\tconst maxVertexUniforms = capabilities.maxVertexUniforms;\n\tconst vertexTextures = capabilities.vertexTextures;\n\n\tlet precision = capabilities.precision;\n\n\tconst shaderIDs = {\n\t\tMeshDepthMaterial: 'depth',\n\t\tMeshDistanceMaterial: 'distanceRGBA',\n\t\tMeshNormalMaterial: 'normal',\n\t\tMeshBasicMaterial: 'basic',\n\t\tMeshLambertMaterial: 'lambert',\n\t\tMeshPhongMaterial: 'phong',\n\t\tMeshToonMaterial: 'toon',\n\t\tMeshStandardMaterial: 'physical',\n\t\tMeshPhysicalMaterial: 'physical',\n\t\tMeshMatcapMaterial: 'matcap',\n\t\tLineBasicMaterial: 'basic',\n\t\tLineDashedMaterial: 'dashed',\n\t\tPointsMaterial: 'points',\n\t\tShadowMaterial: 'shadow',\n\t\tSpriteMaterial: 'sprite'\n\t};\n\n\tconst parameterNames = [\n\t\t'precision', 'isWebGL2', 'supportsVertexTextures', 'outputEncoding', 'instancing', 'instancingColor',\n\t\t'map', 'mapEncoding', 'matcap', 'matcapEncoding', 'envMap', 'envMapMode', 'envMapEncoding', 'envMapCubeUV',\n\t\t'lightMap', 'lightMapEncoding', 'aoMap', 'emissiveMap', 'emissiveMapEncoding', 'bumpMap', 'normalMap',\n\t\t'objectSpaceNormalMap', 'tangentSpaceNormalMap',\n\t\t'clearcoat', 'clearcoatMap', 'clearcoatRoughnessMap', 'clearcoatNormalMap',\n\t\t'displacementMap',\n\t\t'specularMap', 'specularIntensityMap', 'specularTintMap', 'specularTintMapEncoding', 'roughnessMap', 'metalnessMap', 'gradientMap',\n\t\t'alphaMap', 'alphaTest', 'combine', 'vertexColors', 'vertexAlphas', 'vertexTangents', 'vertexUvs', 'uvsVertexOnly', 'fog', 'useFog', 'fogExp2',\n\t\t'flatShading', 'sizeAttenuation', 'logarithmicDepthBuffer', 'skinning',\n\t\t'maxBones', 'useVertexTexture', 'morphTargets', 'morphNormals', 'morphTargetsCount', 'premultipliedAlpha',\n\t\t'numDirLights', 'numPointLights', 'numSpotLights', 'numHemiLights', 'numRectAreaLights',\n\t\t'numDirLightShadows', 'numPointLightShadows', 'numSpotLightShadows',\n\t\t'shadowMapEnabled', 'shadowMapType', 'toneMapping', 'physicallyCorrectLights',\n\t\t'doubleSided', 'flipSided', 'numClippingPlanes', 'numClipIntersection', 'depthPacking', 'dithering', 'format',\n\t\t'sheen', 'transmission', 'transmissionMap', 'thicknessMap'\n\t];\n\n\tfunction getMaxBones( object ) {\n\n\t\tconst skeleton = object.skeleton;\n\t\tconst bones = skeleton.bones;\n\n\t\tif ( floatVertexTextures ) {\n\n\t\t\treturn 1024;\n\n\t\t} else {\n\n\t\t\t// default for when object is not specified\n\t\t\t// ( for example when prebuilding shader to be used with multiple objects )\n\t\t\t//\n\t\t\t// - leave some extra space for other uniforms\n\t\t\t// - limit here is ANGLE's 254 max uniform vectors\n\t\t\t// (up to 54 should be safe)\n\n\t\t\tconst nVertexUniforms = maxVertexUniforms;\n\t\t\tconst nVertexMatrices = Math.floor( ( nVertexUniforms - 20 ) / 4 );\n\n\t\t\tconst maxBones = Math.min( nVertexMatrices, bones.length );\n\n\t\t\tif ( maxBones < bones.length ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Skeleton has ' + bones.length + ' bones. This GPU supports ' + maxBones + '.' );\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t\treturn maxBones;\n\n\t\t}\n\n\t}\n\n\tfunction getTextureEncodingFromMap( map ) {\n\n\t\tlet encoding;\n\n\t\tif ( map && map.isTexture ) {\n\n\t\t\tencoding = map.encoding;\n\n\t\t} else if ( map && map.isWebGLRenderTarget ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLPrograms.getTextureEncodingFromMap: don\\'t use render targets as textures. Use their .texture property instead.' );\n\t\t\tencoding = map.texture.encoding;\n\n\t\t} else {\n\n\t\t\tencoding = LinearEncoding;\n\n\t\t}\n\n\t\tif ( isWebGL2 && map && map.isTexture && map.format === RGBAFormat && map.type === UnsignedByteType && map.encoding === sRGBEncoding ) {\n\n\t\t\tencoding = LinearEncoding; // disable inline decode for sRGB textures in WebGL 2\n\n\t\t}\n\n\t\treturn encoding;\n\n\t}\n\n\tfunction getParameters( material, lights, shadows, scene, object ) {\n\n\t\tconst fog = scene.fog;\n\t\tconst environment = material.isMeshStandardMaterial ? scene.environment : null;\n\n\t\tconst envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || environment );\n\n\t\tconst shaderID = shaderIDs[ material.type ];\n\n\t\t// heuristics to create shader parameters according to lights in the scene\n\t\t// (not to blow over maxLights budget)\n\n\t\tconst maxBones = object.isSkinnedMesh ? getMaxBones( object ) : 0;\n\n\t\tif ( material.precision !== null ) {\n\n\t\t\tprecision = capabilities.getMaxPrecision( material.precision );\n\n\t\t\tif ( precision !== material.precision ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram.getParameters:', material.precision, 'not supported, using', precision, 'instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet vertexShader, fragmentShader;\n\n\t\tif ( shaderID ) {\n\n\t\t\tconst shader = ShaderLib[ shaderID ];\n\n\t\t\tvertexShader = shader.vertexShader;\n\t\t\tfragmentShader = shader.fragmentShader;\n\n\t\t} else {\n\n\t\t\tvertexShader = material.vertexShader;\n\t\t\tfragmentShader = material.fragmentShader;\n\n\t\t}\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\tconst useAlphaTest = material.alphaTest > 0;\n\t\tconst useClearcoat = material.clearcoat > 0;\n\n\t\tconst parameters = {\n\n\t\t\tisWebGL2: isWebGL2,\n\n\t\t\tshaderID: shaderID,\n\t\t\tshaderName: material.type,\n\n\t\t\tvertexShader: vertexShader,\n\t\t\tfragmentShader: fragmentShader,\n\t\t\tdefines: material.defines,\n\n\t\t\tisRawShaderMaterial: material.isRawShaderMaterial === true,\n\t\t\tglslVersion: material.glslVersion,\n\n\t\t\tprecision: precision,\n\n\t\t\tinstancing: object.isInstancedMesh === true,\n\t\t\tinstancingColor: object.isInstancedMesh === true && object.instanceColor !== null,\n\n\t\t\tsupportsVertexTextures: vertexTextures,\n\t\t\toutputEncoding: ( currentRenderTarget !== null ) ? getTextureEncodingFromMap( currentRenderTarget.texture ) : renderer.outputEncoding,\n\t\t\tmap: !! material.map,\n\t\t\tmapEncoding: getTextureEncodingFromMap( material.map ),\n\t\t\tmatcap: !! material.matcap,\n\t\t\tmatcapEncoding: getTextureEncodingFromMap( material.matcap ),\n\t\t\tenvMap: !! envMap,\n\t\t\tenvMapMode: envMap && envMap.mapping,\n\t\t\tenvMapEncoding: getTextureEncodingFromMap( envMap ),\n\t\t\tenvMapCubeUV: ( !! envMap ) && ( ( envMap.mapping === CubeUVReflectionMapping ) || ( envMap.mapping === CubeUVRefractionMapping ) ),\n\t\t\tlightMap: !! material.lightMap,\n\t\t\tlightMapEncoding: getTextureEncodingFromMap( material.lightMap ),\n\t\t\taoMap: !! material.aoMap,\n\t\t\temissiveMap: !! material.emissiveMap,\n\t\t\temissiveMapEncoding: getTextureEncodingFromMap( material.emissiveMap ),\n\t\t\tbumpMap: !! material.bumpMap,\n\t\t\tnormalMap: !! material.normalMap,\n\t\t\tobjectSpaceNormalMap: material.normalMapType === ObjectSpaceNormalMap,\n\t\t\ttangentSpaceNormalMap: material.normalMapType === TangentSpaceNormalMap,\n\n\t\t\tclearcoat: useClearcoat,\n\t\t\tclearcoatMap: useClearcoat && !! material.clearcoatMap,\n\t\t\tclearcoatRoughnessMap: useClearcoat && !! material.clearcoatRoughnessMap,\n\t\t\tclearcoatNormalMap: useClearcoat && !! material.clearcoatNormalMap,\n\n\t\t\tdisplacementMap: !! material.displacementMap,\n\t\t\troughnessMap: !! material.roughnessMap,\n\t\t\tmetalnessMap: !! material.metalnessMap,\n\t\t\tspecularMap: !! material.specularMap,\n\t\t\tspecularIntensityMap: !! material.specularIntensityMap,\n\t\t\tspecularTintMap: !! material.specularTintMap,\n\t\t\tspecularTintMapEncoding: getTextureEncodingFromMap( material.specularTintMap ),\n\n\t\t\talphaMap: !! material.alphaMap,\n\t\t\talphaTest: useAlphaTest,\n\n\t\t\tgradientMap: !! material.gradientMap,\n\n\t\t\tsheen: material.sheen > 0,\n\n\t\t\ttransmission: material.transmission > 0,\n\t\t\ttransmissionMap: !! material.transmissionMap,\n\t\t\tthicknessMap: !! material.thicknessMap,\n\n\t\t\tcombine: material.combine,\n\n\t\t\tvertexTangents: ( !! material.normalMap && !! object.geometry && !! object.geometry.attributes.tangent ),\n\t\t\tvertexColors: material.vertexColors,\n\t\t\tvertexAlphas: material.vertexColors === true && !! object.geometry && !! object.geometry.attributes.color && object.geometry.attributes.color.itemSize === 4,\n\t\t\tvertexUvs: !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatMap || !! material.clearcoatRoughnessMap || !! material.clearcoatNormalMap || !! material.displacementMap || !! material.transmissionMap || !! material.thicknessMap || !! material.specularIntensityMap || !! material.specularTintMap,\n\t\t\tuvsVertexOnly: ! ( !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatNormalMap || material.transmission > 0 || !! material.transmissionMap || !! material.thicknessMap || !! material.specularIntensityMap || !! material.specularTintMap ) && !! material.displacementMap,\n\n\t\t\tfog: !! fog,\n\t\t\tuseFog: material.fog,\n\t\t\tfogExp2: ( fog && fog.isFogExp2 ),\n\n\t\t\tflatShading: !! material.flatShading,\n\n\t\t\tsizeAttenuation: material.sizeAttenuation,\n\t\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\n\t\t\tskinning: object.isSkinnedMesh === true && maxBones > 0,\n\t\t\tmaxBones: maxBones,\n\t\t\tuseVertexTexture: floatVertexTextures,\n\n\t\t\tmorphTargets: !! object.geometry && !! object.geometry.morphAttributes.position,\n\t\t\tmorphNormals: !! object.geometry && !! object.geometry.morphAttributes.normal,\n\t\t\tmorphTargetsCount: ( !! object.geometry && !! object.geometry.morphAttributes.position ) ? object.geometry.morphAttributes.position.length : 0,\n\n\t\t\tnumDirLights: lights.directional.length,\n\t\t\tnumPointLights: lights.point.length,\n\t\t\tnumSpotLights: lights.spot.length,\n\t\t\tnumRectAreaLights: lights.rectArea.length,\n\t\t\tnumHemiLights: lights.hemi.length,\n\n\t\t\tnumDirLightShadows: lights.directionalShadowMap.length,\n\t\t\tnumPointLightShadows: lights.pointShadowMap.length,\n\t\t\tnumSpotLightShadows: lights.spotShadowMap.length,\n\n\t\t\tnumClippingPlanes: clipping.numPlanes,\n\t\t\tnumClipIntersection: clipping.numIntersection,\n\n\t\t\tformat: material.format,\n\t\t\tdithering: material.dithering,\n\n\t\t\tshadowMapEnabled: renderer.shadowMap.enabled && shadows.length > 0,\n\t\t\tshadowMapType: renderer.shadowMap.type,\n\n\t\t\ttoneMapping: material.toneMapped ? renderer.toneMapping : NoToneMapping,\n\t\t\tphysicallyCorrectLights: renderer.physicallyCorrectLights,\n\n\t\t\tpremultipliedAlpha: material.premultipliedAlpha,\n\n\t\t\tdoubleSided: material.side === DoubleSide,\n\t\t\tflipSided: material.side === BackSide,\n\n\t\t\tdepthPacking: ( material.depthPacking !== undefined ) ? material.depthPacking : false,\n\n\t\t\tindex0AttributeName: material.index0AttributeName,\n\n\t\t\textensionDerivatives: material.extensions && material.extensions.derivatives,\n\t\t\textensionFragDepth: material.extensions && material.extensions.fragDepth,\n\t\t\textensionDrawBuffers: material.extensions && material.extensions.drawBuffers,\n\t\t\textensionShaderTextureLOD: material.extensions && material.extensions.shaderTextureLOD,\n\n\t\t\trendererExtensionFragDepth: isWebGL2 || extensions.has( 'EXT_frag_depth' ),\n\t\t\trendererExtensionDrawBuffers: isWebGL2 || extensions.has( 'WEBGL_draw_buffers' ),\n\t\t\trendererExtensionShaderTextureLod: isWebGL2 || extensions.has( 'EXT_shader_texture_lod' ),\n\n\t\t\tcustomProgramCacheKey: material.customProgramCacheKey()\n\n\t\t};\n\n\t\treturn parameters;\n\n\t}\n\n\tfunction getProgramCacheKey( parameters ) {\n\n\t\tconst array = [];\n\n\t\tif ( parameters.shaderID ) {\n\n\t\t\tarray.push( parameters.shaderID );\n\n\t\t} else {\n\n\t\t\tarray.push( parameters.fragmentShader );\n\t\t\tarray.push( parameters.vertexShader );\n\n\t\t}\n\n\t\tif ( parameters.defines !== undefined ) {\n\n\t\t\tfor ( const name in parameters.defines ) {\n\n\t\t\t\tarray.push( name );\n\t\t\t\tarray.push( parameters.defines[ name ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( parameters.isRawShaderMaterial === false ) {\n\n\t\t\tfor ( let i = 0; i < parameterNames.length; i ++ ) {\n\n\t\t\t\tarray.push( parameters[ parameterNames[ i ] ] );\n\n\t\t\t}\n\n\t\t\tarray.push( renderer.outputEncoding );\n\t\t\tarray.push( renderer.gammaFactor );\n\n\t\t}\n\n\t\tarray.push( parameters.customProgramCacheKey );\n\n\t\treturn array.join();\n\n\t}\n\n\tfunction getUniforms( material ) {\n\n\t\tconst shaderID = shaderIDs[ material.type ];\n\t\tlet uniforms;\n\n\t\tif ( shaderID ) {\n\n\t\t\tconst shader = ShaderLib[ shaderID ];\n\t\t\tuniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\t} else {\n\n\t\t\tuniforms = material.uniforms;\n\n\t\t}\n\n\t\treturn uniforms;\n\n\t}\n\n\tfunction acquireProgram( parameters, cacheKey ) {\n\n\t\tlet program;\n\n\t\t// Check if code has been already compiled\n\t\tfor ( let p = 0, pl = programs.length; p < pl; p ++ ) {\n\n\t\t\tconst preexistingProgram = programs[ p ];\n\n\t\t\tif ( preexistingProgram.cacheKey === cacheKey ) {\n\n\t\t\t\tprogram = preexistingProgram;\n\t\t\t\t++ program.usedTimes;\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( program === undefined ) {\n\n\t\t\tprogram = new WebGLProgram( renderer, cacheKey, parameters, bindingStates );\n\t\t\tprograms.push( program );\n\n\t\t}\n\n\t\treturn program;\n\n\t}\n\n\tfunction releaseProgram( program ) {\n\n\t\tif ( -- program.usedTimes === 0 ) {\n\n\t\t\t// Remove from unordered set\n\t\t\tconst i = programs.indexOf( program );\n\t\t\tprograms[ i ] = programs[ programs.length - 1 ];\n\t\t\tprograms.pop();\n\n\t\t\t// Free WebGL resources\n\t\t\tprogram.destroy();\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tgetParameters: getParameters,\n\t\tgetProgramCacheKey: getProgramCacheKey,\n\t\tgetUniforms: getUniforms,\n\t\tacquireProgram: acquireProgram,\n\t\treleaseProgram: releaseProgram,\n\t\t// Exposed for resource monitoring & error feedback via renderer.info:\n\t\tprograms: programs\n\t};\n\n}\n\nfunction WebGLProperties() {\n\n\tlet properties = new WeakMap();\n\n\tfunction get( object ) {\n\n\t\tlet map = properties.get( object );\n\n\t\tif ( map === undefined ) {\n\n\t\t\tmap = {};\n\t\t\tproperties.set( object, map );\n\n\t\t}\n\n\t\treturn map;\n\n\t}\n\n\tfunction remove( object ) {\n\n\t\tproperties.delete( object );\n\n\t}\n\n\tfunction update( object, key, value ) {\n\n\t\tproperties.get( object )[ key ] = value;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tproperties = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction painterSortStable( a, b ) {\n\n\tif ( a.groupOrder !== b.groupOrder ) {\n\n\t\treturn a.groupOrder - b.groupOrder;\n\n\t} else if ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else if ( a.program !== b.program ) {\n\n\t\treturn a.program.id - b.program.id;\n\n\t} else if ( a.material.id !== b.material.id ) {\n\n\t\treturn a.material.id - b.material.id;\n\n\t} else if ( a.z !== b.z ) {\n\n\t\treturn a.z - b.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\nfunction reversePainterSortStable( a, b ) {\n\n\tif ( a.groupOrder !== b.groupOrder ) {\n\n\t\treturn a.groupOrder - b.groupOrder;\n\n\t} else if ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else if ( a.z !== b.z ) {\n\n\t\treturn b.z - a.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\n\nfunction WebGLRenderList( properties ) {\n\n\tconst renderItems = [];\n\tlet renderItemsIndex = 0;\n\n\tconst opaque = [];\n\tconst transmissive = [];\n\tconst transparent = [];\n\n\tconst defaultProgram = { id: - 1 };\n\n\tfunction init() {\n\n\t\trenderItemsIndex = 0;\n\n\t\topaque.length = 0;\n\t\ttransmissive.length = 0;\n\t\ttransparent.length = 0;\n\n\t}\n\n\tfunction getNextRenderItem( object, geometry, material, groupOrder, z, group ) {\n\n\t\tlet renderItem = renderItems[ renderItemsIndex ];\n\t\tconst materialProperties = properties.get( material );\n\n\t\tif ( renderItem === undefined ) {\n\n\t\t\trenderItem = {\n\t\t\t\tid: object.id,\n\t\t\t\tobject: object,\n\t\t\t\tgeometry: geometry,\n\t\t\t\tmaterial: material,\n\t\t\t\tprogram: materialProperties.program || defaultProgram,\n\t\t\t\tgroupOrder: groupOrder,\n\t\t\t\trenderOrder: object.renderOrder,\n\t\t\t\tz: z,\n\t\t\t\tgroup: group\n\t\t\t};\n\n\t\t\trenderItems[ renderItemsIndex ] = renderItem;\n\n\t\t} else {\n\n\t\t\trenderItem.id = object.id;\n\t\t\trenderItem.object = object;\n\t\t\trenderItem.geometry = geometry;\n\t\t\trenderItem.material = material;\n\t\t\trenderItem.program = materialProperties.program || defaultProgram;\n\t\t\trenderItem.groupOrder = groupOrder;\n\t\t\trenderItem.renderOrder = object.renderOrder;\n\t\t\trenderItem.z = z;\n\t\t\trenderItem.group = group;\n\n\t\t}\n\n\t\trenderItemsIndex ++;\n\n\t\treturn renderItem;\n\n\t}\n\n\tfunction push( object, geometry, material, groupOrder, z, group ) {\n\n\t\tconst renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group );\n\n\t\tif ( material.transmission > 0.0 ) {\n\n\t\t\ttransmissive.push( renderItem );\n\n\t\t} else if ( material.transparent === true ) {\n\n\t\t\ttransparent.push( renderItem );\n\n\t\t} else {\n\n\t\t\topaque.push( renderItem );\n\n\t\t}\n\n\t}\n\n\tfunction unshift( object, geometry, material, groupOrder, z, group ) {\n\n\t\tconst renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group );\n\n\t\tif ( material.transmission > 0.0 ) {\n\n\t\t\ttransmissive.unshift( renderItem );\n\n\t\t} else if ( material.transparent === true ) {\n\n\t\t\ttransparent.unshift( renderItem );\n\n\t\t} else {\n\n\t\t\topaque.unshift( renderItem );\n\n\t\t}\n\n\t}\n\n\tfunction sort( customOpaqueSort, customTransparentSort ) {\n\n\t\tif ( opaque.length > 1 ) opaque.sort( customOpaqueSort || painterSortStable );\n\t\tif ( transmissive.length > 1 ) transmissive.sort( customTransparentSort || reversePainterSortStable );\n\t\tif ( transparent.length > 1 ) transparent.sort( customTransparentSort || reversePainterSortStable );\n\n\t}\n\n\tfunction finish() {\n\n\t\t// Clear references from inactive renderItems in the list\n\n\t\tfor ( let i = renderItemsIndex, il = renderItems.length; i < il; i ++ ) {\n\n\t\t\tconst renderItem = renderItems[ i ];\n\n\t\t\tif ( renderItem.id === null ) break;\n\n\t\t\trenderItem.id = null;\n\t\t\trenderItem.object = null;\n\t\t\trenderItem.geometry = null;\n\t\t\trenderItem.material = null;\n\t\t\trenderItem.program = null;\n\t\t\trenderItem.group = null;\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\topaque: opaque,\n\t\ttransmissive: transmissive,\n\t\ttransparent: transparent,\n\n\t\tinit: init,\n\t\tpush: push,\n\t\tunshift: unshift,\n\t\tfinish: finish,\n\n\t\tsort: sort\n\t};\n\n}\n\nfunction WebGLRenderLists( properties ) {\n\n\tlet lists = new WeakMap();\n\n\tfunction get( scene, renderCallDepth ) {\n\n\t\tlet list;\n\n\t\tif ( lists.has( scene ) === false ) {\n\n\t\t\tlist = new WebGLRenderList( properties );\n\t\t\tlists.set( scene, [ list ] );\n\n\t\t} else {\n\n\t\t\tif ( renderCallDepth >= lists.get( scene ).length ) {\n\n\t\t\t\tlist = new WebGLRenderList( properties );\n\t\t\t\tlists.get( scene ).push( list );\n\n\t\t\t} else {\n\n\t\t\t\tlist = lists.get( scene )[ renderCallDepth ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn list;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tlists = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction UniformsCache() {\n\n\tconst lights = {};\n\n\treturn {\n\n\t\tget: function ( light ) {\n\n\t\t\tif ( lights[ light.id ] !== undefined ) {\n\n\t\t\t\treturn lights[ light.id ];\n\n\t\t\t}\n\n\t\t\tlet uniforms;\n\n\t\t\tswitch ( light.type ) {\n\n\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpotLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tconeCos: 0,\n\t\t\t\t\t\tpenumbraCos: 0,\n\t\t\t\t\t\tdecay: 0\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tdecay: 0\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'HemisphereLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tskyColor: new Color(),\n\t\t\t\t\t\tgroundColor: new Color()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'RectAreaLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\thalfWidth: new Vector3(),\n\t\t\t\t\t\thalfHeight: new Vector3()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tlights[ light.id ] = uniforms;\n\n\t\t\treturn uniforms;\n\n\t\t}\n\n\t};\n\n}\n\nfunction ShadowUniformsCache() {\n\n\tconst lights = {};\n\n\treturn {\n\n\t\tget: function ( light ) {\n\n\t\t\tif ( lights[ light.id ] !== undefined ) {\n\n\t\t\t\treturn lights[ light.id ];\n\n\t\t\t}\n\n\t\t\tlet uniforms;\n\n\t\t\tswitch ( light.type ) {\n\n\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpotLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2(),\n\t\t\t\t\t\tshadowCameraNear: 1,\n\t\t\t\t\t\tshadowCameraFar: 1000\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\t// TODO (abelnation): set RectAreaLight shadow uniforms\n\n\t\t\t}\n\n\t\t\tlights[ light.id ] = uniforms;\n\n\t\t\treturn uniforms;\n\n\t\t}\n\n\t};\n\n}\n\n\n\nlet nextVersion = 0;\n\nfunction shadowCastingLightsFirst( lightA, lightB ) {\n\n\treturn ( lightB.castShadow ? 1 : 0 ) - ( lightA.castShadow ? 1 : 0 );\n\n}\n\nfunction WebGLLights( extensions, capabilities ) {\n\n\tconst cache = new UniformsCache();\n\n\tconst shadowCache = ShadowUniformsCache();\n\n\tconst state = {\n\n\t\tversion: 0,\n\n\t\thash: {\n\t\t\tdirectionalLength: - 1,\n\t\t\tpointLength: - 1,\n\t\t\tspotLength: - 1,\n\t\t\trectAreaLength: - 1,\n\t\t\themiLength: - 1,\n\n\t\t\tnumDirectionalShadows: - 1,\n\t\t\tnumPointShadows: - 1,\n\t\t\tnumSpotShadows: - 1\n\t\t},\n\n\t\tambient: [ 0, 0, 0 ],\n\t\tprobe: [],\n\t\tdirectional: [],\n\t\tdirectionalShadow: [],\n\t\tdirectionalShadowMap: [],\n\t\tdirectionalShadowMatrix: [],\n\t\tspot: [],\n\t\tspotShadow: [],\n\t\tspotShadowMap: [],\n\t\tspotShadowMatrix: [],\n\t\trectArea: [],\n\t\trectAreaLTC1: null,\n\t\trectAreaLTC2: null,\n\t\tpoint: [],\n\t\tpointShadow: [],\n\t\tpointShadowMap: [],\n\t\tpointShadowMatrix: [],\n\t\themi: []\n\n\t};\n\n\tfor ( let i = 0; i < 9; i ++ ) state.probe.push( new Vector3() );\n\n\tconst vector3 = new Vector3();\n\tconst matrix4 = new Matrix4();\n\tconst matrix42 = new Matrix4();\n\n\tfunction setup( lights, physicallyCorrectLights ) {\n\n\t\tlet r = 0, g = 0, b = 0;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) state.probe[ i ].set( 0, 0, 0 );\n\n\t\tlet directionalLength = 0;\n\t\tlet pointLength = 0;\n\t\tlet spotLength = 0;\n\t\tlet rectAreaLength = 0;\n\t\tlet hemiLength = 0;\n\n\t\tlet numDirectionalShadows = 0;\n\t\tlet numPointShadows = 0;\n\t\tlet numSpotShadows = 0;\n\n\t\tlights.sort( shadowCastingLightsFirst );\n\n\t\t// artist-friendly light intensity scaling factor\n\t\tconst scaleFactor = ( physicallyCorrectLights !== true ) ? Math.PI : 1;\n\n\t\tfor ( let i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\n\t\t\tconst color = light.color;\n\t\t\tconst intensity = light.intensity;\n\t\t\tconst distance = light.distance;\n\n\t\t\tconst shadowMap = ( light.shadow && light.shadow.map ) ? light.shadow.map.texture : null;\n\n\t\t\tif ( light.isAmbientLight ) {\n\n\t\t\t\tr += color.r * intensity * scaleFactor;\n\t\t\t\tg += color.g * intensity * scaleFactor;\n\t\t\t\tb += color.b * intensity * scaleFactor;\n\n\t\t\t} else if ( light.isLightProbe ) {\n\n\t\t\t\tfor ( let j = 0; j < 9; j ++ ) {\n\n\t\t\t\t\tstate.probe[ j ].addScaledVector( light.sh.coefficients[ j ], intensity );\n\n\t\t\t\t}\n\n\t\t\t} else if ( light.isDirectionalLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity * scaleFactor );\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\tstate.directionalShadow[ directionalLength ] = shadowUniforms;\n\t\t\t\t\tstate.directionalShadowMap[ directionalLength ] = shadowMap;\n\t\t\t\t\tstate.directionalShadowMatrix[ directionalLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumDirectionalShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.directional[ directionalLength ] = uniforms;\n\n\t\t\t\tdirectionalLength ++;\n\n\t\t\t} else if ( light.isSpotLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity * scaleFactor );\n\t\t\t\tuniforms.distance = distance;\n\n\t\t\t\tuniforms.coneCos = Math.cos( light.angle );\n\t\t\t\tuniforms.penumbraCos = Math.cos( light.angle * ( 1 - light.penumbra ) );\n\t\t\t\tuniforms.decay = light.decay;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\tstate.spotShadow[ spotLength ] = shadowUniforms;\n\t\t\t\t\tstate.spotShadowMap[ spotLength ] = shadowMap;\n\t\t\t\t\tstate.spotShadowMatrix[ spotLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumSpotShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.spot[ spotLength ] = uniforms;\n\n\t\t\t\tspotLength ++;\n\n\t\t\t} else if ( light.isRectAreaLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\t// (a) intensity is the total visible light emitted\n\t\t\t\t//uniforms.color.copy( color ).multiplyScalar( intensity / ( light.width * light.height * Math.PI ) );\n\n\t\t\t\t// (b) intensity is the brightness of the light\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\n\t\t\t\tuniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );\n\t\t\t\tuniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 );\n\n\t\t\t\tstate.rectArea[ rectAreaLength ] = uniforms;\n\n\t\t\t\trectAreaLength ++;\n\n\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity * scaleFactor );\n\t\t\t\tuniforms.distance = light.distance;\n\t\t\t\tuniforms.decay = light.decay;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\t\t\t\t\tshadowUniforms.shadowCameraNear = shadow.camera.near;\n\t\t\t\t\tshadowUniforms.shadowCameraFar = shadow.camera.far;\n\n\t\t\t\t\tstate.pointShadow[ pointLength ] = shadowUniforms;\n\t\t\t\t\tstate.pointShadowMap[ pointLength ] = shadowMap;\n\t\t\t\t\tstate.pointShadowMatrix[ pointLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumPointShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.point[ pointLength ] = uniforms;\n\n\t\t\t\tpointLength ++;\n\n\t\t\t} else if ( light.isHemisphereLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.skyColor.copy( light.color ).multiplyScalar( intensity * scaleFactor );\n\t\t\t\tuniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity * scaleFactor );\n\n\t\t\t\tstate.hemi[ hemiLength ] = uniforms;\n\n\t\t\t\themiLength ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( rectAreaLength > 0 ) {\n\n\t\t\tif ( capabilities.isWebGL2 ) {\n\n\t\t\t\t// WebGL 2\n\n\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;\n\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;\n\n\t\t\t} else {\n\n\t\t\t\t// WebGL 1\n\n\t\t\t\tif ( extensions.has( 'OES_texture_float_linear' ) === true ) {\n\n\t\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;\n\t\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;\n\n\t\t\t\t} else if ( extensions.has( 'OES_texture_half_float_linear' ) === true ) {\n\n\t\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_HALF_1;\n\t\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_HALF_2;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.ambient[ 0 ] = r;\n\t\tstate.ambient[ 1 ] = g;\n\t\tstate.ambient[ 2 ] = b;\n\n\t\tconst hash = state.hash;\n\n\t\tif ( hash.directionalLength !== directionalLength ||\n\t\t\thash.pointLength !== pointLength ||\n\t\t\thash.spotLength !== spotLength ||\n\t\t\thash.rectAreaLength !== rectAreaLength ||\n\t\t\thash.hemiLength !== hemiLength ||\n\t\t\thash.numDirectionalShadows !== numDirectionalShadows ||\n\t\t\thash.numPointShadows !== numPointShadows ||\n\t\t\thash.numSpotShadows !== numSpotShadows ) {\n\n\t\t\tstate.directional.length = directionalLength;\n\t\t\tstate.spot.length = spotLength;\n\t\t\tstate.rectArea.length = rectAreaLength;\n\t\t\tstate.point.length = pointLength;\n\t\t\tstate.hemi.length = hemiLength;\n\n\t\t\tstate.directionalShadow.length = numDirectionalShadows;\n\t\t\tstate.directionalShadowMap.length = numDirectionalShadows;\n\t\t\tstate.pointShadow.length = numPointShadows;\n\t\t\tstate.pointShadowMap.length = numPointShadows;\n\t\t\tstate.spotShadow.length = numSpotShadows;\n\t\t\tstate.spotShadowMap.length = numSpotShadows;\n\t\t\tstate.directionalShadowMatrix.length = numDirectionalShadows;\n\t\t\tstate.pointShadowMatrix.length = numPointShadows;\n\t\t\tstate.spotShadowMatrix.length = numSpotShadows;\n\n\t\t\thash.directionalLength = directionalLength;\n\t\t\thash.pointLength = pointLength;\n\t\t\thash.spotLength = spotLength;\n\t\t\thash.rectAreaLength = rectAreaLength;\n\t\t\thash.hemiLength = hemiLength;\n\n\t\t\thash.numDirectionalShadows = numDirectionalShadows;\n\t\t\thash.numPointShadows = numPointShadows;\n\t\t\thash.numSpotShadows = numSpotShadows;\n\n\t\t\tstate.version = nextVersion ++;\n\n\t\t}\n\n\t}\n\n\tfunction setupView( lights, camera ) {\n\n\t\tlet directionalLength = 0;\n\t\tlet pointLength = 0;\n\t\tlet spotLength = 0;\n\t\tlet rectAreaLength = 0;\n\t\tlet hemiLength = 0;\n\n\t\tconst viewMatrix = camera.matrixWorldInverse;\n\n\t\tfor ( let i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\n\t\t\tif ( light.isDirectionalLight ) {\n\n\t\t\t\tconst uniforms = state.directional[ directionalLength ];\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tdirectionalLength ++;\n\n\t\t\t} else if ( light.isSpotLight ) {\n\n\t\t\t\tconst uniforms = state.spot[ spotLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tspotLength ++;\n\n\t\t\t} else if ( light.isRectAreaLight ) {\n\n\t\t\t\tconst uniforms = state.rectArea[ rectAreaLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\t// extract local rotation of light to derive width/height half vectors\n\t\t\t\tmatrix42.identity();\n\t\t\t\tmatrix4.copy( light.matrixWorld );\n\t\t\t\tmatrix4.premultiply( viewMatrix );\n\t\t\t\tmatrix42.extractRotation( matrix4 );\n\n\t\t\t\tuniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );\n\t\t\t\tuniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 );\n\n\t\t\t\tuniforms.halfWidth.applyMatrix4( matrix42 );\n\t\t\t\tuniforms.halfHeight.applyMatrix4( matrix42 );\n\n\t\t\t\trectAreaLength ++;\n\n\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\tconst uniforms = state.point[ pointLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tpointLength ++;\n\n\t\t\t} else if ( light.isHemisphereLight ) {\n\n\t\t\t\tconst uniforms = state.hemi[ hemiLength ];\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\t\t\t\tuniforms.direction.normalize();\n\n\t\t\t\themiLength ++;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tsetup: setup,\n\t\tsetupView: setupView,\n\t\tstate: state\n\t};\n\n}\n\nfunction WebGLRenderState( extensions, capabilities ) {\n\n\tconst lights = new WebGLLights( extensions, capabilities );\n\n\tconst lightsArray = [];\n\tconst shadowsArray = [];\n\n\tfunction init() {\n\n\t\tlightsArray.length = 0;\n\t\tshadowsArray.length = 0;\n\n\t}\n\n\tfunction pushLight( light ) {\n\n\t\tlightsArray.push( light );\n\n\t}\n\n\tfunction pushShadow( shadowLight ) {\n\n\t\tshadowsArray.push( shadowLight );\n\n\t}\n\n\tfunction setupLights( physicallyCorrectLights ) {\n\n\t\tlights.setup( lightsArray, physicallyCorrectLights );\n\n\t}\n\n\tfunction setupLightsView( camera ) {\n\n\t\tlights.setupView( lightsArray, camera );\n\n\t}\n\n\tconst state = {\n\t\tlightsArray: lightsArray,\n\t\tshadowsArray: shadowsArray,\n\n\t\tlights: lights\n\t};\n\n\treturn {\n\t\tinit: init,\n\t\tstate: state,\n\t\tsetupLights: setupLights,\n\t\tsetupLightsView: setupLightsView,\n\n\t\tpushLight: pushLight,\n\t\tpushShadow: pushShadow\n\t};\n\n}\n\nfunction WebGLRenderStates( extensions, capabilities ) {\n\n\tlet renderStates = new WeakMap();\n\n\tfunction get( scene, renderCallDepth = 0 ) {\n\n\t\tlet renderState;\n\n\t\tif ( renderStates.has( scene ) === false ) {\n\n\t\t\trenderState = new WebGLRenderState( extensions, capabilities );\n\t\t\trenderStates.set( scene, [ renderState ] );\n\n\t\t} else {\n\n\t\t\tif ( renderCallDepth >= renderStates.get( scene ).length ) {\n\n\t\t\t\trenderState = new WebGLRenderState( extensions, capabilities );\n\t\t\t\trenderStates.get( scene ).push( renderState );\n\n\t\t\t} else {\n\n\t\t\t\trenderState = renderStates.get( scene )[ renderCallDepth ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn renderState;\n\n\t}\n\n\tfunction dispose() {\n\n\t\trenderStates = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\n/**\n * parameters = {\n *\n * opacity: ,\n *\n * map: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * wireframe: ,\n * wireframeLinewidth: \n * }\n */\n\nclass MeshDepthMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'MeshDepthMaterial';\n\n\t\tthis.depthPacking = BasicDepthPacking;\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.fog = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.depthPacking = source.depthPacking;\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshDepthMaterial.prototype.isMeshDepthMaterial = true;\n\n/**\n * parameters = {\n *\n * referencePosition: ,\n * nearDistance: ,\n * farDistance: ,\n *\n * map: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: \n *\n * }\n */\n\nclass MeshDistanceMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'MeshDistanceMaterial';\n\n\t\tthis.referencePosition = new Vector3();\n\t\tthis.nearDistance = 1;\n\t\tthis.farDistance = 1000;\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.fog = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.referencePosition.copy( source.referencePosition );\n\t\tthis.nearDistance = source.nearDistance;\n\t\tthis.farDistance = source.farDistance;\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshDistanceMaterial.prototype.isMeshDistanceMaterial = true;\n\nconst vertex = \"void main() {\\n\\tgl_Position = vec4( position, 1.0 );\\n}\";\n\nconst fragment = \"uniform sampler2D shadow_pass;\\nuniform vec2 resolution;\\nuniform float radius;\\nuniform float samples;\\n#include \\nvoid main() {\\n\\tfloat mean = 0.0;\\n\\tfloat squared_mean = 0.0;\\n\\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\\n\\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\\n\\tfor ( float i = 0.0; i < samples; i ++ ) {\\n\\t\\tfloat uvOffset = uvStart + i * uvStride;\\n\\t\\t#ifdef HORIZONTAL_PASS\\n\\t\\t\\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\\n\\t\\t\\tmean += distribution.x;\\n\\t\\t\\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\\n\\t\\t#else\\n\\t\\t\\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\\n\\t\\t\\tmean += depth;\\n\\t\\t\\tsquared_mean += depth * depth;\\n\\t\\t#endif\\n\\t}\\n\\tmean = mean / samples;\\n\\tsquared_mean = squared_mean / samples;\\n\\tfloat std_dev = sqrt( squared_mean - mean * mean );\\n\\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\\n}\";\n\nfunction WebGLShadowMap( _renderer, _objects, _capabilities ) {\n\n\tlet _frustum = new Frustum();\n\n\tconst _shadowMapSize = new Vector2(),\n\t\t_viewportSize = new Vector2(),\n\n\t\t_viewport = new Vector4(),\n\n\t\t_depthMaterial = new MeshDepthMaterial( { depthPacking: RGBADepthPacking } ),\n\t\t_distanceMaterial = new MeshDistanceMaterial(),\n\n\t\t_materialCache = {},\n\n\t\t_maxTextureSize = _capabilities.maxTextureSize;\n\n\tconst shadowSide = { 0: BackSide, 1: FrontSide, 2: DoubleSide };\n\n\tconst shadowMaterialVertical = new ShaderMaterial( {\n\n\t\tuniforms: {\n\t\t\tshadow_pass: { value: null },\n\t\t\tresolution: { value: new Vector2() },\n\t\t\tradius: { value: 4.0 },\n\t\t\tsamples: { value: 8.0 }\n\t\t},\n\n\t\tvertexShader: vertex,\n\t\tfragmentShader: fragment\n\n\t} );\n\n\tconst shadowMaterialHorizontal = shadowMaterialVertical.clone();\n\tshadowMaterialHorizontal.defines.HORIZONTAL_PASS = 1;\n\n\tconst fullScreenTri = new BufferGeometry();\n\tfullScreenTri.setAttribute(\n\t\t'position',\n\t\tnew BufferAttribute(\n\t\t\tnew Float32Array( [ - 1, - 1, 0.5, 3, - 1, 0.5, - 1, 3, 0.5 ] ),\n\t\t\t3\n\t\t)\n\t);\n\n\tconst fullScreenMesh = new Mesh( fullScreenTri, shadowMaterialVertical );\n\n\tconst scope = this;\n\n\tthis.enabled = false;\n\n\tthis.autoUpdate = true;\n\tthis.needsUpdate = false;\n\n\tthis.type = PCFShadowMap;\n\n\tthis.render = function ( lights, scene, camera ) {\n\n\t\tif ( scope.enabled === false ) return;\n\t\tif ( scope.autoUpdate === false && scope.needsUpdate === false ) return;\n\n\t\tif ( lights.length === 0 ) return;\n\n\t\tconst currentRenderTarget = _renderer.getRenderTarget();\n\t\tconst activeCubeFace = _renderer.getActiveCubeFace();\n\t\tconst activeMipmapLevel = _renderer.getActiveMipmapLevel();\n\n\t\tconst _state = _renderer.state;\n\n\t\t// Set GL state for depth map.\n\t\t_state.setBlending( NoBlending );\n\t\t_state.buffers.color.setClear( 1, 1, 1, 1 );\n\t\t_state.buffers.depth.setTest( true );\n\t\t_state.setScissorTest( false );\n\n\t\t// render depth map\n\n\t\tfor ( let i = 0, il = lights.length; i < il; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\t\t\tconst shadow = light.shadow;\n\n\t\t\tif ( shadow === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLShadowMap:', light, 'has no shadow.' );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( shadow.autoUpdate === false && shadow.needsUpdate === false ) continue;\n\n\t\t\t_shadowMapSize.copy( shadow.mapSize );\n\n\t\t\tconst shadowFrameExtents = shadow.getFrameExtents();\n\n\t\t\t_shadowMapSize.multiply( shadowFrameExtents );\n\n\t\t\t_viewportSize.copy( shadow.mapSize );\n\n\t\t\tif ( _shadowMapSize.x > _maxTextureSize || _shadowMapSize.y > _maxTextureSize ) {\n\n\t\t\t\tif ( _shadowMapSize.x > _maxTextureSize ) {\n\n\t\t\t\t\t_viewportSize.x = Math.floor( _maxTextureSize / shadowFrameExtents.x );\n\t\t\t\t\t_shadowMapSize.x = _viewportSize.x * shadowFrameExtents.x;\n\t\t\t\t\tshadow.mapSize.x = _viewportSize.x;\n\n\t\t\t\t}\n\n\t\t\t\tif ( _shadowMapSize.y > _maxTextureSize ) {\n\n\t\t\t\t\t_viewportSize.y = Math.floor( _maxTextureSize / shadowFrameExtents.y );\n\t\t\t\t\t_shadowMapSize.y = _viewportSize.y * shadowFrameExtents.y;\n\t\t\t\t\tshadow.mapSize.y = _viewportSize.y;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( shadow.map === null && ! shadow.isPointLightShadow && this.type === VSMShadowMap ) {\n\n\t\t\t\tconst pars = { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat };\n\n\t\t\t\tshadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\n\t\t\t\tshadow.map.texture.name = light.name + '.shadowMap';\n\n\t\t\t\tshadow.mapPass = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\n\n\t\t\t\tshadow.camera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\tif ( shadow.map === null ) {\n\n\t\t\t\tconst pars = { minFilter: NearestFilter, magFilter: NearestFilter, format: RGBAFormat };\n\n\t\t\t\tshadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\n\t\t\t\tshadow.map.texture.name = light.name + '.shadowMap';\n\n\t\t\t\tshadow.camera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\t_renderer.setRenderTarget( shadow.map );\n\t\t\t_renderer.clear();\n\n\t\t\tconst viewportCount = shadow.getViewportCount();\n\n\t\t\tfor ( let vp = 0; vp < viewportCount; vp ++ ) {\n\n\t\t\t\tconst viewport = shadow.getViewport( vp );\n\n\t\t\t\t_viewport.set(\n\t\t\t\t\t_viewportSize.x * viewport.x,\n\t\t\t\t\t_viewportSize.y * viewport.y,\n\t\t\t\t\t_viewportSize.x * viewport.z,\n\t\t\t\t\t_viewportSize.y * viewport.w\n\t\t\t\t);\n\n\t\t\t\t_state.viewport( _viewport );\n\n\t\t\t\tshadow.updateMatrices( light, vp );\n\n\t\t\t\t_frustum = shadow.getFrustum();\n\n\t\t\t\trenderObject( scene, camera, shadow.camera, light, this.type );\n\n\t\t\t}\n\n\t\t\t// do blur pass for VSM\n\n\t\t\tif ( ! shadow.isPointLightShadow && this.type === VSMShadowMap ) {\n\n\t\t\t\tVSMPass( shadow, camera );\n\n\t\t\t}\n\n\t\t\tshadow.needsUpdate = false;\n\n\t\t}\n\n\t\tscope.needsUpdate = false;\n\n\t\t_renderer.setRenderTarget( currentRenderTarget, activeCubeFace, activeMipmapLevel );\n\n\t};\n\n\tfunction VSMPass( shadow, camera ) {\n\n\t\tconst geometry = _objects.update( fullScreenMesh );\n\n\t\t// vertical pass\n\n\t\tshadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.texture;\n\t\tshadowMaterialVertical.uniforms.resolution.value = shadow.mapSize;\n\t\tshadowMaterialVertical.uniforms.radius.value = shadow.radius;\n\t\tshadowMaterialVertical.uniforms.samples.value = shadow.blurSamples;\n\t\t_renderer.setRenderTarget( shadow.mapPass );\n\t\t_renderer.clear();\n\t\t_renderer.renderBufferDirect( camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null );\n\n\t\t// horizontal pass\n\n\t\tshadowMaterialHorizontal.uniforms.shadow_pass.value = shadow.mapPass.texture;\n\t\tshadowMaterialHorizontal.uniforms.resolution.value = shadow.mapSize;\n\t\tshadowMaterialHorizontal.uniforms.radius.value = shadow.radius;\n\t\tshadowMaterialHorizontal.uniforms.samples.value = shadow.blurSamples;\n\t\t_renderer.setRenderTarget( shadow.map );\n\t\t_renderer.clear();\n\t\t_renderer.renderBufferDirect( camera, null, geometry, shadowMaterialHorizontal, fullScreenMesh, null );\n\n\t}\n\n\tfunction getDepthMaterial( object, geometry, material, light, shadowCameraNear, shadowCameraFar, type ) {\n\n\t\tlet result = null;\n\n\t\tconst customMaterial = ( light.isPointLight === true ) ? object.customDistanceMaterial : object.customDepthMaterial;\n\n\t\tif ( customMaterial !== undefined ) {\n\n\t\t\tresult = customMaterial;\n\n\t\t} else {\n\n\t\t\tresult = ( light.isPointLight === true ) ? _distanceMaterial : _depthMaterial;\n\n\t\t}\n\n\t\tif ( ( _renderer.localClippingEnabled && material.clipShadows === true && material.clippingPlanes.length !== 0 ) ||\n\t\t\t( material.displacementMap && material.displacementScale !== 0 ) ||\n\t\t\t( material.alphaMap && material.alphaTest > 0 ) ) {\n\n\t\t\t// in this case we need a unique material instance reflecting the\n\t\t\t// appropriate state\n\n\t\t\tconst keyA = result.uuid, keyB = material.uuid;\n\n\t\t\tlet materialsForVariant = _materialCache[ keyA ];\n\n\t\t\tif ( materialsForVariant === undefined ) {\n\n\t\t\t\tmaterialsForVariant = {};\n\t\t\t\t_materialCache[ keyA ] = materialsForVariant;\n\n\t\t\t}\n\n\t\t\tlet cachedMaterial = materialsForVariant[ keyB ];\n\n\t\t\tif ( cachedMaterial === undefined ) {\n\n\t\t\t\tcachedMaterial = result.clone();\n\t\t\t\tmaterialsForVariant[ keyB ] = cachedMaterial;\n\n\t\t\t}\n\n\t\t\tresult = cachedMaterial;\n\n\t\t}\n\n\t\tresult.visible = material.visible;\n\t\tresult.wireframe = material.wireframe;\n\n\t\tif ( type === VSMShadowMap ) {\n\n\t\t\tresult.side = ( material.shadowSide !== null ) ? material.shadowSide : material.side;\n\n\t\t} else {\n\n\t\t\tresult.side = ( material.shadowSide !== null ) ? material.shadowSide : shadowSide[ material.side ];\n\n\t\t}\n\n\t\tresult.alphaMap = material.alphaMap;\n\t\tresult.alphaTest = material.alphaTest;\n\n\t\tresult.clipShadows = material.clipShadows;\n\t\tresult.clippingPlanes = material.clippingPlanes;\n\t\tresult.clipIntersection = material.clipIntersection;\n\n\t\tresult.displacementMap = material.displacementMap;\n\t\tresult.displacementScale = material.displacementScale;\n\t\tresult.displacementBias = material.displacementBias;\n\n\t\tresult.wireframeLinewidth = material.wireframeLinewidth;\n\t\tresult.linewidth = material.linewidth;\n\n\t\tif ( light.isPointLight === true && result.isMeshDistanceMaterial === true ) {\n\n\t\t\tresult.referencePosition.setFromMatrixPosition( light.matrixWorld );\n\t\t\tresult.nearDistance = shadowCameraNear;\n\t\t\tresult.farDistance = shadowCameraFar;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tfunction renderObject( object, camera, shadowCamera, light, type ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tconst visible = object.layers.test( camera.layers );\n\n\t\tif ( visible && ( object.isMesh || object.isLine || object.isPoints ) ) {\n\n\t\t\tif ( ( object.castShadow || ( object.receiveShadow && type === VSMShadowMap ) ) && ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) ) {\n\n\t\t\t\tobject.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );\n\n\t\t\t\tconst geometry = _objects.update( object );\n\t\t\t\tconst material = object.material;\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\tfor ( let k = 0, kl = groups.length; k < kl; k ++ ) {\n\n\t\t\t\t\t\tconst group = groups[ k ];\n\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\tconst depthMaterial = getDepthMaterial( object, geometry, groupMaterial, light, shadowCamera.near, shadowCamera.far, type );\n\n\t\t\t\t\t\t\t_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\tconst depthMaterial = getDepthMaterial( object, geometry, material, light, shadowCamera.near, shadowCamera.far, type );\n\n\t\t\t\t\t_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\trenderObject( children[ i ], camera, shadowCamera, light, type );\n\n\t\t}\n\n\t}\n\n}\n\nfunction WebGLState( gl, extensions, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tfunction ColorBuffer() {\n\n\t\tlet locked = false;\n\n\t\tconst color = new Vector4();\n\t\tlet currentColorMask = null;\n\t\tconst currentColorClear = new Vector4( 0, 0, 0, 0 );\n\n\t\treturn {\n\n\t\t\tsetMask: function ( colorMask ) {\n\n\t\t\t\tif ( currentColorMask !== colorMask && ! locked ) {\n\n\t\t\t\t\tgl.colorMask( colorMask, colorMask, colorMask, colorMask );\n\t\t\t\t\tcurrentColorMask = colorMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( r, g, b, a, premultipliedAlpha ) {\n\n\t\t\t\tif ( premultipliedAlpha === true ) {\n\n\t\t\t\t\tr *= a; g *= a; b *= a;\n\n\t\t\t\t}\n\n\t\t\t\tcolor.set( r, g, b, a );\n\n\t\t\t\tif ( currentColorClear.equals( color ) === false ) {\n\n\t\t\t\t\tgl.clearColor( r, g, b, a );\n\t\t\t\t\tcurrentColorClear.copy( color );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentColorMask = null;\n\t\t\t\tcurrentColorClear.set( - 1, 0, 0, 0 ); // set to invalid state\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction DepthBuffer() {\n\n\t\tlet locked = false;\n\n\t\tlet currentDepthMask = null;\n\t\tlet currentDepthFunc = null;\n\t\tlet currentDepthClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( depthTest ) {\n\n\t\t\t\tif ( depthTest ) {\n\n\t\t\t\t\tenable( 2929 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdisable( 2929 );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( depthMask ) {\n\n\t\t\t\tif ( currentDepthMask !== depthMask && ! locked ) {\n\n\t\t\t\t\tgl.depthMask( depthMask );\n\t\t\t\t\tcurrentDepthMask = depthMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( depthFunc ) {\n\n\t\t\t\tif ( currentDepthFunc !== depthFunc ) {\n\n\t\t\t\t\tif ( depthFunc ) {\n\n\t\t\t\t\t\tswitch ( depthFunc ) {\n\n\t\t\t\t\t\t\tcase NeverDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 512 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase AlwaysDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 519 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase LessDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 513 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase LessEqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 515 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase EqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 514 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase GreaterEqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 518 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase GreaterDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 516 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase NotEqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 517 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 515 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tgl.depthFunc( 515 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrentDepthFunc = depthFunc;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( depth ) {\n\n\t\t\t\tif ( currentDepthClear !== depth ) {\n\n\t\t\t\t\tgl.clearDepth( depth );\n\t\t\t\t\tcurrentDepthClear = depth;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentDepthMask = null;\n\t\t\t\tcurrentDepthFunc = null;\n\t\t\t\tcurrentDepthClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction StencilBuffer() {\n\n\t\tlet locked = false;\n\n\t\tlet currentStencilMask = null;\n\t\tlet currentStencilFunc = null;\n\t\tlet currentStencilRef = null;\n\t\tlet currentStencilFuncMask = null;\n\t\tlet currentStencilFail = null;\n\t\tlet currentStencilZFail = null;\n\t\tlet currentStencilZPass = null;\n\t\tlet currentStencilClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( stencilTest ) {\n\n\t\t\t\tif ( ! locked ) {\n\n\t\t\t\t\tif ( stencilTest ) {\n\n\t\t\t\t\t\tenable( 2960 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tdisable( 2960 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( stencilMask ) {\n\n\t\t\t\tif ( currentStencilMask !== stencilMask && ! locked ) {\n\n\t\t\t\t\tgl.stencilMask( stencilMask );\n\t\t\t\t\tcurrentStencilMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( stencilFunc, stencilRef, stencilMask ) {\n\n\t\t\t\tif ( currentStencilFunc !== stencilFunc ||\n\t\t\t\t currentStencilRef !== stencilRef ||\n\t\t\t\t currentStencilFuncMask !== stencilMask ) {\n\n\t\t\t\t\tgl.stencilFunc( stencilFunc, stencilRef, stencilMask );\n\n\t\t\t\t\tcurrentStencilFunc = stencilFunc;\n\t\t\t\t\tcurrentStencilRef = stencilRef;\n\t\t\t\t\tcurrentStencilFuncMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetOp: function ( stencilFail, stencilZFail, stencilZPass ) {\n\n\t\t\t\tif ( currentStencilFail !== stencilFail ||\n\t\t\t\t currentStencilZFail !== stencilZFail ||\n\t\t\t\t currentStencilZPass !== stencilZPass ) {\n\n\t\t\t\t\tgl.stencilOp( stencilFail, stencilZFail, stencilZPass );\n\n\t\t\t\t\tcurrentStencilFail = stencilFail;\n\t\t\t\t\tcurrentStencilZFail = stencilZFail;\n\t\t\t\t\tcurrentStencilZPass = stencilZPass;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( stencil ) {\n\n\t\t\t\tif ( currentStencilClear !== stencil ) {\n\n\t\t\t\t\tgl.clearStencil( stencil );\n\t\t\t\t\tcurrentStencilClear = stencil;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentStencilMask = null;\n\t\t\t\tcurrentStencilFunc = null;\n\t\t\t\tcurrentStencilRef = null;\n\t\t\t\tcurrentStencilFuncMask = null;\n\t\t\t\tcurrentStencilFail = null;\n\t\t\t\tcurrentStencilZFail = null;\n\t\t\t\tcurrentStencilZPass = null;\n\t\t\t\tcurrentStencilClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t//\n\n\tconst colorBuffer = new ColorBuffer();\n\tconst depthBuffer = new DepthBuffer();\n\tconst stencilBuffer = new StencilBuffer();\n\n\tlet enabledCapabilities = {};\n\n\tlet xrFramebuffer = null;\n\tlet currentBoundFramebuffers = {};\n\n\tlet currentProgram = null;\n\n\tlet currentBlendingEnabled = false;\n\tlet currentBlending = null;\n\tlet currentBlendEquation = null;\n\tlet currentBlendSrc = null;\n\tlet currentBlendDst = null;\n\tlet currentBlendEquationAlpha = null;\n\tlet currentBlendSrcAlpha = null;\n\tlet currentBlendDstAlpha = null;\n\tlet currentPremultipledAlpha = false;\n\n\tlet currentFlipSided = null;\n\tlet currentCullFace = null;\n\n\tlet currentLineWidth = null;\n\n\tlet currentPolygonOffsetFactor = null;\n\tlet currentPolygonOffsetUnits = null;\n\n\tconst maxTextures = gl.getParameter( 35661 );\n\n\tlet lineWidthAvailable = false;\n\tlet version = 0;\n\tconst glVersion = gl.getParameter( 7938 );\n\n\tif ( glVersion.indexOf( 'WebGL' ) !== - 1 ) {\n\n\t\tversion = parseFloat( /^WebGL (\\d)/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 1.0 );\n\n\t} else if ( glVersion.indexOf( 'OpenGL ES' ) !== - 1 ) {\n\n\t\tversion = parseFloat( /^OpenGL ES (\\d)/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 2.0 );\n\n\t}\n\n\tlet currentTextureSlot = null;\n\tlet currentBoundTextures = {};\n\n\tconst scissorParam = gl.getParameter( 3088 );\n\tconst viewportParam = gl.getParameter( 2978 );\n\n\tconst currentScissor = new Vector4().fromArray( scissorParam );\n\tconst currentViewport = new Vector4().fromArray( viewportParam );\n\n\tfunction createTexture( type, target, count ) {\n\n\t\tconst data = new Uint8Array( 4 ); // 4 is required to match default unpack alignment of 4.\n\t\tconst texture = gl.createTexture();\n\n\t\tgl.bindTexture( type, texture );\n\t\tgl.texParameteri( type, 10241, 9728 );\n\t\tgl.texParameteri( type, 10240, 9728 );\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tgl.texImage2D( target + i, 0, 6408, 1, 1, 0, 6408, 5121, data );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tconst emptyTextures = {};\n\temptyTextures[ 3553 ] = createTexture( 3553, 3553, 1 );\n\temptyTextures[ 34067 ] = createTexture( 34067, 34069, 6 );\n\n\t// init\n\n\tcolorBuffer.setClear( 0, 0, 0, 1 );\n\tdepthBuffer.setClear( 1 );\n\tstencilBuffer.setClear( 0 );\n\n\tenable( 2929 );\n\tdepthBuffer.setFunc( LessEqualDepth );\n\n\tsetFlipSided( false );\n\tsetCullFace( CullFaceBack );\n\tenable( 2884 );\n\n\tsetBlending( NoBlending );\n\n\t//\n\n\tfunction enable( id ) {\n\n\t\tif ( enabledCapabilities[ id ] !== true ) {\n\n\t\t\tgl.enable( id );\n\t\t\tenabledCapabilities[ id ] = true;\n\n\t\t}\n\n\t}\n\n\tfunction disable( id ) {\n\n\t\tif ( enabledCapabilities[ id ] !== false ) {\n\n\t\t\tgl.disable( id );\n\t\t\tenabledCapabilities[ id ] = false;\n\n\t\t}\n\n\t}\n\n\tfunction bindXRFramebuffer( framebuffer ) {\n\n\t\tif ( framebuffer !== xrFramebuffer ) {\n\n\t\t\tgl.bindFramebuffer( 36160, framebuffer );\n\n\t\t\txrFramebuffer = framebuffer;\n\n\t\t}\n\n\t}\n\n\tfunction bindFramebuffer( target, framebuffer ) {\n\n\t\tif ( framebuffer === null && xrFramebuffer !== null ) framebuffer = xrFramebuffer; // use active XR framebuffer if available\n\n\t\tif ( currentBoundFramebuffers[ target ] !== framebuffer ) {\n\n\t\t\tgl.bindFramebuffer( target, framebuffer );\n\n\t\t\tcurrentBoundFramebuffers[ target ] = framebuffer;\n\n\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t// 36009 is equivalent to 36160\n\n\t\t\t\tif ( target === 36009 ) {\n\n\t\t\t\t\tcurrentBoundFramebuffers[ 36160 ] = framebuffer;\n\n\t\t\t\t}\n\n\t\t\t\tif ( target === 36160 ) {\n\n\t\t\t\t\tcurrentBoundFramebuffers[ 36009 ] = framebuffer;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tfunction useProgram( program ) {\n\n\t\tif ( currentProgram !== program ) {\n\n\t\t\tgl.useProgram( program );\n\n\t\t\tcurrentProgram = program;\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tconst equationToGL = {\n\t\t[ AddEquation ]: 32774,\n\t\t[ SubtractEquation ]: 32778,\n\t\t[ ReverseSubtractEquation ]: 32779\n\t};\n\n\tif ( isWebGL2 ) {\n\n\t\tequationToGL[ MinEquation ] = 32775;\n\t\tequationToGL[ MaxEquation ] = 32776;\n\n\t} else {\n\n\t\tconst extension = extensions.get( 'EXT_blend_minmax' );\n\n\t\tif ( extension !== null ) {\n\n\t\t\tequationToGL[ MinEquation ] = extension.MIN_EXT;\n\t\t\tequationToGL[ MaxEquation ] = extension.MAX_EXT;\n\n\t\t}\n\n\t}\n\n\tconst factorToGL = {\n\t\t[ ZeroFactor ]: 0,\n\t\t[ OneFactor ]: 1,\n\t\t[ SrcColorFactor ]: 768,\n\t\t[ SrcAlphaFactor ]: 770,\n\t\t[ SrcAlphaSaturateFactor ]: 776,\n\t\t[ DstColorFactor ]: 774,\n\t\t[ DstAlphaFactor ]: 772,\n\t\t[ OneMinusSrcColorFactor ]: 769,\n\t\t[ OneMinusSrcAlphaFactor ]: 771,\n\t\t[ OneMinusDstColorFactor ]: 775,\n\t\t[ OneMinusDstAlphaFactor ]: 773\n\t};\n\n\tfunction setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) {\n\n\t\tif ( blending === NoBlending ) {\n\n\t\t\tif ( currentBlendingEnabled === true ) {\n\n\t\t\t\tdisable( 3042 );\n\t\t\t\tcurrentBlendingEnabled = false;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( currentBlendingEnabled === false ) {\n\n\t\t\tenable( 3042 );\n\t\t\tcurrentBlendingEnabled = true;\n\n\t\t}\n\n\t\tif ( blending !== CustomBlending ) {\n\n\t\t\tif ( blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha ) {\n\n\t\t\t\tif ( currentBlendEquation !== AddEquation || currentBlendEquationAlpha !== AddEquation ) {\n\n\t\t\t\t\tgl.blendEquation( 32774 );\n\n\t\t\t\t\tcurrentBlendEquation = AddEquation;\n\t\t\t\t\tcurrentBlendEquationAlpha = AddEquation;\n\n\t\t\t\t}\n\n\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 1, 771, 1, 771 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( 1, 1 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 0, 0, 769, 771 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 0, 768, 0, 770 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.WebGLState: Invalid blending: ', blending );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 770, 771, 1, 771 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( 770, 1 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( 0, 769 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\tgl.blendFunc( 0, 768 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.WebGLState: Invalid blending: ', blending );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tcurrentBlendSrc = null;\n\t\t\t\tcurrentBlendDst = null;\n\t\t\t\tcurrentBlendSrcAlpha = null;\n\t\t\t\tcurrentBlendDstAlpha = null;\n\n\t\t\t\tcurrentBlending = blending;\n\t\t\t\tcurrentPremultipledAlpha = premultipliedAlpha;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// custom blending\n\n\t\tblendEquationAlpha = blendEquationAlpha || blendEquation;\n\t\tblendSrcAlpha = blendSrcAlpha || blendSrc;\n\t\tblendDstAlpha = blendDstAlpha || blendDst;\n\n\t\tif ( blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha ) {\n\n\t\t\tgl.blendEquationSeparate( equationToGL[ blendEquation ], equationToGL[ blendEquationAlpha ] );\n\n\t\t\tcurrentBlendEquation = blendEquation;\n\t\t\tcurrentBlendEquationAlpha = blendEquationAlpha;\n\n\t\t}\n\n\t\tif ( blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha ) {\n\n\t\t\tgl.blendFuncSeparate( factorToGL[ blendSrc ], factorToGL[ blendDst ], factorToGL[ blendSrcAlpha ], factorToGL[ blendDstAlpha ] );\n\n\t\t\tcurrentBlendSrc = blendSrc;\n\t\t\tcurrentBlendDst = blendDst;\n\t\t\tcurrentBlendSrcAlpha = blendSrcAlpha;\n\t\t\tcurrentBlendDstAlpha = blendDstAlpha;\n\n\t\t}\n\n\t\tcurrentBlending = blending;\n\t\tcurrentPremultipledAlpha = null;\n\n\t}\n\n\tfunction setMaterial( material, frontFaceCW ) {\n\n\t\tmaterial.side === DoubleSide\n\t\t\t? disable( 2884 )\n\t\t\t: enable( 2884 );\n\n\t\tlet flipSided = ( material.side === BackSide );\n\t\tif ( frontFaceCW ) flipSided = ! flipSided;\n\n\t\tsetFlipSided( flipSided );\n\n\t\t( material.blending === NormalBlending && material.transparent === false )\n\t\t\t? setBlending( NoBlending )\n\t\t\t: setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha );\n\n\t\tdepthBuffer.setFunc( material.depthFunc );\n\t\tdepthBuffer.setTest( material.depthTest );\n\t\tdepthBuffer.setMask( material.depthWrite );\n\t\tcolorBuffer.setMask( material.colorWrite );\n\n\t\tconst stencilWrite = material.stencilWrite;\n\t\tstencilBuffer.setTest( stencilWrite );\n\t\tif ( stencilWrite ) {\n\n\t\t\tstencilBuffer.setMask( material.stencilWriteMask );\n\t\t\tstencilBuffer.setFunc( material.stencilFunc, material.stencilRef, material.stencilFuncMask );\n\t\t\tstencilBuffer.setOp( material.stencilFail, material.stencilZFail, material.stencilZPass );\n\n\t\t}\n\n\t\tsetPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits );\n\n\t\tmaterial.alphaToCoverage === true\n\t\t\t? enable( 32926 )\n\t\t\t: disable( 32926 );\n\n\t}\n\n\t//\n\n\tfunction setFlipSided( flipSided ) {\n\n\t\tif ( currentFlipSided !== flipSided ) {\n\n\t\t\tif ( flipSided ) {\n\n\t\t\t\tgl.frontFace( 2304 );\n\n\t\t\t} else {\n\n\t\t\t\tgl.frontFace( 2305 );\n\n\t\t\t}\n\n\t\t\tcurrentFlipSided = flipSided;\n\n\t\t}\n\n\t}\n\n\tfunction setCullFace( cullFace ) {\n\n\t\tif ( cullFace !== CullFaceNone ) {\n\n\t\t\tenable( 2884 );\n\n\t\t\tif ( cullFace !== currentCullFace ) {\n\n\t\t\t\tif ( cullFace === CullFaceBack ) {\n\n\t\t\t\t\tgl.cullFace( 1029 );\n\n\t\t\t\t} else if ( cullFace === CullFaceFront ) {\n\n\t\t\t\t\tgl.cullFace( 1028 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgl.cullFace( 1032 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( 2884 );\n\n\t\t}\n\n\t\tcurrentCullFace = cullFace;\n\n\t}\n\n\tfunction setLineWidth( width ) {\n\n\t\tif ( width !== currentLineWidth ) {\n\n\t\t\tif ( lineWidthAvailable ) gl.lineWidth( width );\n\n\t\t\tcurrentLineWidth = width;\n\n\t\t}\n\n\t}\n\n\tfunction setPolygonOffset( polygonOffset, factor, units ) {\n\n\t\tif ( polygonOffset ) {\n\n\t\t\tenable( 32823 );\n\n\t\t\tif ( currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units ) {\n\n\t\t\t\tgl.polygonOffset( factor, units );\n\n\t\t\t\tcurrentPolygonOffsetFactor = factor;\n\t\t\t\tcurrentPolygonOffsetUnits = units;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( 32823 );\n\n\t\t}\n\n\t}\n\n\tfunction setScissorTest( scissorTest ) {\n\n\t\tif ( scissorTest ) {\n\n\t\t\tenable( 3089 );\n\n\t\t} else {\n\n\t\t\tdisable( 3089 );\n\n\t\t}\n\n\t}\n\n\t// texture\n\n\tfunction activeTexture( webglSlot ) {\n\n\t\tif ( webglSlot === undefined ) webglSlot = 33984 + maxTextures - 1;\n\n\t\tif ( currentTextureSlot !== webglSlot ) {\n\n\t\t\tgl.activeTexture( webglSlot );\n\t\t\tcurrentTextureSlot = webglSlot;\n\n\t\t}\n\n\t}\n\n\tfunction bindTexture( webglType, webglTexture ) {\n\n\t\tif ( currentTextureSlot === null ) {\n\n\t\t\tactiveTexture();\n\n\t\t}\n\n\t\tlet boundTexture = currentBoundTextures[ currentTextureSlot ];\n\n\t\tif ( boundTexture === undefined ) {\n\n\t\t\tboundTexture = { type: undefined, texture: undefined };\n\t\t\tcurrentBoundTextures[ currentTextureSlot ] = boundTexture;\n\n\t\t}\n\n\t\tif ( boundTexture.type !== webglType || boundTexture.texture !== webglTexture ) {\n\n\t\t\tgl.bindTexture( webglType, webglTexture || emptyTextures[ webglType ] );\n\n\t\t\tboundTexture.type = webglType;\n\t\t\tboundTexture.texture = webglTexture;\n\n\t\t}\n\n\t}\n\n\tfunction unbindTexture() {\n\n\t\tconst boundTexture = currentBoundTextures[ currentTextureSlot ];\n\n\t\tif ( boundTexture !== undefined && boundTexture.type !== undefined ) {\n\n\t\t\tgl.bindTexture( boundTexture.type, null );\n\n\t\t\tboundTexture.type = undefined;\n\t\t\tboundTexture.texture = undefined;\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.texImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.texImage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction scissor( scissor ) {\n\n\t\tif ( currentScissor.equals( scissor ) === false ) {\n\n\t\t\tgl.scissor( scissor.x, scissor.y, scissor.z, scissor.w );\n\t\t\tcurrentScissor.copy( scissor );\n\n\t\t}\n\n\t}\n\n\tfunction viewport( viewport ) {\n\n\t\tif ( currentViewport.equals( viewport ) === false ) {\n\n\t\t\tgl.viewport( viewport.x, viewport.y, viewport.z, viewport.w );\n\t\t\tcurrentViewport.copy( viewport );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction reset() {\n\n\t\t// reset state\n\n\t\tgl.disable( 3042 );\n\t\tgl.disable( 2884 );\n\t\tgl.disable( 2929 );\n\t\tgl.disable( 32823 );\n\t\tgl.disable( 3089 );\n\t\tgl.disable( 2960 );\n\t\tgl.disable( 32926 );\n\n\t\tgl.blendEquation( 32774 );\n\t\tgl.blendFunc( 1, 0 );\n\t\tgl.blendFuncSeparate( 1, 0, 1, 0 );\n\n\t\tgl.colorMask( true, true, true, true );\n\t\tgl.clearColor( 0, 0, 0, 0 );\n\n\t\tgl.depthMask( true );\n\t\tgl.depthFunc( 513 );\n\t\tgl.clearDepth( 1 );\n\n\t\tgl.stencilMask( 0xffffffff );\n\t\tgl.stencilFunc( 519, 0, 0xffffffff );\n\t\tgl.stencilOp( 7680, 7680, 7680 );\n\t\tgl.clearStencil( 0 );\n\n\t\tgl.cullFace( 1029 );\n\t\tgl.frontFace( 2305 );\n\n\t\tgl.polygonOffset( 0, 0 );\n\n\t\tgl.activeTexture( 33984 );\n\n\t\tgl.bindFramebuffer( 36160, null );\n\n\t\tif ( isWebGL2 === true ) {\n\n\t\t\tgl.bindFramebuffer( 36009, null );\n\t\t\tgl.bindFramebuffer( 36008, null );\n\n\t\t}\n\n\t\tgl.useProgram( null );\n\n\t\tgl.lineWidth( 1 );\n\n\t\tgl.scissor( 0, 0, gl.canvas.width, gl.canvas.height );\n\t\tgl.viewport( 0, 0, gl.canvas.width, gl.canvas.height );\n\n\t\t// reset internals\n\n\t\tenabledCapabilities = {};\n\n\t\tcurrentTextureSlot = null;\n\t\tcurrentBoundTextures = {};\n\n\t\txrFramebuffer = null;\n\t\tcurrentBoundFramebuffers = {};\n\n\t\tcurrentProgram = null;\n\n\t\tcurrentBlendingEnabled = false;\n\t\tcurrentBlending = null;\n\t\tcurrentBlendEquation = null;\n\t\tcurrentBlendSrc = null;\n\t\tcurrentBlendDst = null;\n\t\tcurrentBlendEquationAlpha = null;\n\t\tcurrentBlendSrcAlpha = null;\n\t\tcurrentBlendDstAlpha = null;\n\t\tcurrentPremultipledAlpha = false;\n\n\t\tcurrentFlipSided = null;\n\t\tcurrentCullFace = null;\n\n\t\tcurrentLineWidth = null;\n\n\t\tcurrentPolygonOffsetFactor = null;\n\t\tcurrentPolygonOffsetUnits = null;\n\n\t\tcurrentScissor.set( 0, 0, gl.canvas.width, gl.canvas.height );\n\t\tcurrentViewport.set( 0, 0, gl.canvas.width, gl.canvas.height );\n\n\t\tcolorBuffer.reset();\n\t\tdepthBuffer.reset();\n\t\tstencilBuffer.reset();\n\n\t}\n\n\treturn {\n\n\t\tbuffers: {\n\t\t\tcolor: colorBuffer,\n\t\t\tdepth: depthBuffer,\n\t\t\tstencil: stencilBuffer\n\t\t},\n\n\t\tenable: enable,\n\t\tdisable: disable,\n\n\t\tbindFramebuffer: bindFramebuffer,\n\t\tbindXRFramebuffer: bindXRFramebuffer,\n\n\t\tuseProgram: useProgram,\n\n\t\tsetBlending: setBlending,\n\t\tsetMaterial: setMaterial,\n\n\t\tsetFlipSided: setFlipSided,\n\t\tsetCullFace: setCullFace,\n\n\t\tsetLineWidth: setLineWidth,\n\t\tsetPolygonOffset: setPolygonOffset,\n\n\t\tsetScissorTest: setScissorTest,\n\n\t\tactiveTexture: activeTexture,\n\t\tbindTexture: bindTexture,\n\t\tunbindTexture: unbindTexture,\n\t\tcompressedTexImage2D: compressedTexImage2D,\n\t\ttexImage2D: texImage2D,\n\t\ttexImage3D: texImage3D,\n\n\t\tscissor: scissor,\n\t\tviewport: viewport,\n\n\t\treset: reset\n\n\t};\n\n}\n\nfunction WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\tconst maxTextures = capabilities.maxTextures;\n\tconst maxCubemapSize = capabilities.maxCubemapSize;\n\tconst maxTextureSize = capabilities.maxTextureSize;\n\tconst maxSamples = capabilities.maxSamples;\n\n\tconst _videoTextures = new WeakMap();\n\tlet _canvas;\n\n\t// cordova iOS (as of 5.0) still uses UIWebView, which provides OffscreenCanvas,\n\t// also OffscreenCanvas.getContext(\"webgl\"), but not OffscreenCanvas.getContext(\"2d\")!\n\t// Some implementations may only implement OffscreenCanvas partially (e.g. lacking 2d).\n\n\tlet useOffscreenCanvas = false;\n\n\ttry {\n\n\t\tuseOffscreenCanvas = typeof OffscreenCanvas !== 'undefined'\n\t\t\t&& ( new OffscreenCanvas( 1, 1 ).getContext( '2d' ) ) !== null;\n\n\t} catch ( err ) {\n\n\t\t// Ignore any errors\n\n\t}\n\n\tfunction createCanvas( width, height ) {\n\n\t\t// Use OffscreenCanvas when available. Specially needed in web workers\n\n\t\treturn useOffscreenCanvas ?\n\t\t\tnew OffscreenCanvas( width, height ) : createElementNS( 'canvas' );\n\n\t}\n\n\tfunction resizeImage( image, needsPowerOfTwo, needsNewCanvas, maxSize ) {\n\n\t\tlet scale = 1;\n\n\t\t// handle case if texture exceeds max size\n\n\t\tif ( image.width > maxSize || image.height > maxSize ) {\n\n\t\t\tscale = maxSize / Math.max( image.width, image.height );\n\n\t\t}\n\n\t\t// only perform resize if necessary\n\n\t\tif ( scale < 1 || needsPowerOfTwo === true ) {\n\n\t\t\t// only perform resize for certain image types\n\n\t\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t\t\tconst floor = needsPowerOfTwo ? floorPowerOfTwo : Math.floor;\n\n\t\t\t\tconst width = floor( scale * image.width );\n\t\t\t\tconst height = floor( scale * image.height );\n\n\t\t\t\tif ( _canvas === undefined ) _canvas = createCanvas( width, height );\n\n\t\t\t\t// cube textures can't reuse the same canvas\n\n\t\t\t\tconst canvas = needsNewCanvas ? createCanvas( width, height ) : _canvas;\n\n\t\t\t\tcanvas.width = width;\n\t\t\t\tcanvas.height = height;\n\n\t\t\t\tconst context = canvas.getContext( '2d' );\n\t\t\t\tcontext.drawImage( image, 0, 0, width, height );\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture has been resized from (' + image.width + 'x' + image.height + ') to (' + width + 'x' + height + ').' );\n\n\t\t\t\treturn canvas;\n\n\t\t\t} else {\n\n\t\t\t\tif ( 'data' in image ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Image in DataTexture is too big (' + image.width + 'x' + image.height + ').' );\n\n\t\t\t\t}\n\n\t\t\t\treturn image;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn image;\n\n\t}\n\n\tfunction isPowerOfTwo$1( image ) {\n\n\t\treturn isPowerOfTwo( image.width ) && isPowerOfTwo( image.height );\n\n\t}\n\n\tfunction textureNeedsPowerOfTwo( texture ) {\n\n\t\tif ( isWebGL2 ) return false;\n\n\t\treturn ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) ||\n\t\t\t( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter );\n\n\t}\n\n\tfunction textureNeedsGenerateMipmaps( texture, supportsMips ) {\n\n\t\treturn texture.generateMipmaps && supportsMips &&\n\t\t\ttexture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter;\n\n\t}\n\n\tfunction generateMipmap( target, texture, width, height, depth = 1 ) {\n\n\t\t_gl.generateMipmap( target );\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\ttextureProperties.__maxMipLevel = Math.log2( Math.max( width, height, depth ) );\n\n\t}\n\n\tfunction getInternalFormat( internalFormatName, glFormat, glType, encoding ) {\n\n\t\tif ( isWebGL2 === false ) return glFormat;\n\n\t\tif ( internalFormatName !== null ) {\n\n\t\t\tif ( _gl[ internalFormatName ] !== undefined ) return _gl[ internalFormatName ];\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format \\'' + internalFormatName + '\\'' );\n\n\t\t}\n\n\t\tlet internalFormat = glFormat;\n\n\t\tif ( glFormat === 6403 ) {\n\n\t\t\tif ( glType === 5126 ) internalFormat = 33326;\n\t\t\tif ( glType === 5131 ) internalFormat = 33325;\n\t\t\tif ( glType === 5121 ) internalFormat = 33321;\n\n\t\t}\n\n\t\tif ( glFormat === 6407 ) {\n\n\t\t\tif ( glType === 5126 ) internalFormat = 34837;\n\t\t\tif ( glType === 5131 ) internalFormat = 34843;\n\t\t\tif ( glType === 5121 ) internalFormat = 32849;\n\n\t\t}\n\n\t\tif ( glFormat === 6408 ) {\n\n\t\t\tif ( glType === 5126 ) internalFormat = 34836;\n\t\t\tif ( glType === 5131 ) internalFormat = 34842;\n\t\t\tif ( glType === 5121 ) internalFormat = ( encoding === sRGBEncoding ) ? 35907 : 32856;\n\n\t\t}\n\n\t\tif ( internalFormat === 33325 || internalFormat === 33326 ||\n\t\t\tinternalFormat === 34842 || internalFormat === 34836 ) {\n\n\t\t\textensions.get( 'EXT_color_buffer_float' );\n\n\t\t}\n\n\t\treturn internalFormat;\n\n\t}\n\n\t// Fallback filters for non-power-of-2 textures\n\n\tfunction filterFallback( f ) {\n\n\t\tif ( f === NearestFilter || f === NearestMipmapNearestFilter || f === NearestMipmapLinearFilter ) {\n\n\t\t\treturn 9728;\n\n\t\t}\n\n\t\treturn 9729;\n\n\t}\n\n\t//\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tdeallocateTexture( texture );\n\n\t\tif ( texture.isVideoTexture ) {\n\n\t\t\t_videoTextures.delete( texture );\n\n\t\t}\n\n\t\tinfo.memory.textures --;\n\n\t}\n\n\tfunction onRenderTargetDispose( event ) {\n\n\t\tconst renderTarget = event.target;\n\n\t\trenderTarget.removeEventListener( 'dispose', onRenderTargetDispose );\n\n\t\tdeallocateRenderTarget( renderTarget );\n\n\t}\n\n\t//\n\n\tfunction deallocateTexture( texture ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( textureProperties.__webglInit === undefined ) return;\n\n\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\tproperties.remove( texture );\n\n\t}\n\n\tfunction deallocateRenderTarget( renderTarget ) {\n\n\t\tconst texture = renderTarget.texture;\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( ! renderTarget ) return;\n\n\t\tif ( textureProperties.__webglTexture !== undefined ) {\n\n\t\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\t\tinfo.memory.textures --;\n\n\t\t}\n\n\t\tif ( renderTarget.depthTexture ) {\n\n\t\t\trenderTarget.depthTexture.dispose();\n\n\t\t}\n\n\t\tif ( renderTarget.isWebGLCubeRenderTarget ) {\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer );\n\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer );\n\t\t\tif ( renderTargetProperties.__webglMultisampledFramebuffer ) _gl.deleteFramebuffer( renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\tif ( renderTargetProperties.__webglColorRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglColorRenderbuffer );\n\t\t\tif ( renderTargetProperties.__webglDepthRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthRenderbuffer );\n\n\t\t}\n\n\t\tif ( renderTarget.isWebGLMultipleRenderTargets ) {\n\n\t\t\tfor ( let i = 0, il = texture.length; i < il; i ++ ) {\n\n\t\t\t\tconst attachmentProperties = properties.get( texture[ i ] );\n\n\t\t\t\tif ( attachmentProperties.__webglTexture ) {\n\n\t\t\t\t\t_gl.deleteTexture( attachmentProperties.__webglTexture );\n\n\t\t\t\t\tinfo.memory.textures --;\n\n\t\t\t\t}\n\n\t\t\t\tproperties.remove( texture[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tproperties.remove( texture );\n\t\tproperties.remove( renderTarget );\n\n\t}\n\n\t//\n\n\tlet textureUnits = 0;\n\n\tfunction resetTextureUnits() {\n\n\t\ttextureUnits = 0;\n\n\t}\n\n\tfunction allocateTextureUnit() {\n\n\t\tconst textureUnit = textureUnits;\n\n\t\tif ( textureUnit >= maxTextures ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLTextures: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + maxTextures );\n\n\t\t}\n\n\t\ttextureUnits += 1;\n\n\t\treturn textureUnit;\n\n\t}\n\n\t//\n\n\tfunction setTexture2D( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.isVideoTexture ) updateVideoTexture( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tconst image = texture.image;\n\n\t\t\tif ( image === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but image is undefined' );\n\n\t\t\t} else if ( image.complete === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but image is incomplete' );\n\n\t\t\t} else {\n\n\t\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 3553, textureProperties.__webglTexture );\n\n\t}\n\n\tfunction setTexture2DArray( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 35866, textureProperties.__webglTexture );\n\n\t}\n\n\tfunction setTexture3D( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 32879, textureProperties.__webglTexture );\n\n\t}\n\n\tfunction setTextureCube( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadCubeTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 34067, textureProperties.__webglTexture );\n\n\t}\n\n\tconst wrappingToGL = {\n\t\t[ RepeatWrapping ]: 10497,\n\t\t[ ClampToEdgeWrapping ]: 33071,\n\t\t[ MirroredRepeatWrapping ]: 33648\n\t};\n\n\tconst filterToGL = {\n\t\t[ NearestFilter ]: 9728,\n\t\t[ NearestMipmapNearestFilter ]: 9984,\n\t\t[ NearestMipmapLinearFilter ]: 9986,\n\n\t\t[ LinearFilter ]: 9729,\n\t\t[ LinearMipmapNearestFilter ]: 9985,\n\t\t[ LinearMipmapLinearFilter ]: 9987\n\t};\n\n\tfunction setTextureParameters( textureType, texture, supportsMips ) {\n\n\t\tif ( supportsMips ) {\n\n\t\t\t_gl.texParameteri( textureType, 10242, wrappingToGL[ texture.wrapS ] );\n\t\t\t_gl.texParameteri( textureType, 10243, wrappingToGL[ texture.wrapT ] );\n\n\t\t\tif ( textureType === 32879 || textureType === 35866 ) {\n\n\t\t\t\t_gl.texParameteri( textureType, 32882, wrappingToGL[ texture.wrapR ] );\n\n\t\t\t}\n\n\t\t\t_gl.texParameteri( textureType, 10240, filterToGL[ texture.magFilter ] );\n\t\t\t_gl.texParameteri( textureType, 10241, filterToGL[ texture.minFilter ] );\n\n\t\t} else {\n\n\t\t\t_gl.texParameteri( textureType, 10242, 33071 );\n\t\t\t_gl.texParameteri( textureType, 10243, 33071 );\n\n\t\t\tif ( textureType === 32879 || textureType === 35866 ) {\n\n\t\t\t\t_gl.texParameteri( textureType, 32882, 33071 );\n\n\t\t\t}\n\n\t\t\tif ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.' );\n\n\t\t\t}\n\n\t\t\t_gl.texParameteri( textureType, 10240, filterFallback( texture.magFilter ) );\n\t\t\t_gl.texParameteri( textureType, 10241, filterFallback( texture.minFilter ) );\n\n\t\t\tif ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) {\n\n\t\t\tconst extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\t\tif ( texture.type === FloatType && extensions.has( 'OES_texture_float_linear' ) === false ) return; // verify extension for WebGL 1 and WebGL 2\n\t\t\tif ( isWebGL2 === false && ( texture.type === HalfFloatType && extensions.has( 'OES_texture_half_float_linear' ) === false ) ) return; // verify extension for WebGL 1 only\n\n\t\t\tif ( texture.anisotropy > 1 || properties.get( texture ).__currentAnisotropy ) {\n\n\t\t\t\t_gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, capabilities.getMaxAnisotropy() ) );\n\t\t\t\tproperties.get( texture ).__currentAnisotropy = texture.anisotropy;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction initTexture( textureProperties, texture ) {\n\n\t\tif ( textureProperties.__webglInit === undefined ) {\n\n\t\t\ttextureProperties.__webglInit = true;\n\n\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\n\t\t\tinfo.memory.textures ++;\n\n\t\t}\n\n\t}\n\n\tfunction uploadTexture( textureProperties, texture, slot ) {\n\n\t\tlet textureType = 3553;\n\n\t\tif ( texture.isDataTexture2DArray ) textureType = 35866;\n\t\tif ( texture.isDataTexture3D ) textureType = 32879;\n\n\t\tinitTexture( textureProperties, texture );\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( textureType, textureProperties.__webglTexture );\n\n\t\t_gl.pixelStorei( 37440, texture.flipY );\n\t\t_gl.pixelStorei( 37441, texture.premultiplyAlpha );\n\t\t_gl.pixelStorei( 3317, texture.unpackAlignment );\n\t\t_gl.pixelStorei( 37443, 0 );\n\n\t\tconst needsPowerOfTwo = textureNeedsPowerOfTwo( texture ) && isPowerOfTwo$1( texture.image ) === false;\n\t\tconst image = resizeImage( texture.image, needsPowerOfTwo, false, maxTextureSize );\n\n\t\tconst supportsMips = isPowerOfTwo$1( image ) || isWebGL2,\n\t\t\tglFormat = utils.convert( texture.format );\n\n\t\tlet glType = utils.convert( texture.type ),\n\t\t\tglInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );\n\n\t\tsetTextureParameters( textureType, texture, supportsMips );\n\n\t\tlet mipmap;\n\t\tconst mipmaps = texture.mipmaps;\n\n\t\tif ( texture.isDepthTexture ) {\n\n\t\t\t// populate depth texture with dummy data\n\n\t\t\tglInternalFormat = 6402;\n\n\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\tif ( texture.type === FloatType ) {\n\n\t\t\t\t\tglInternalFormat = 36012;\n\n\t\t\t\t} else if ( texture.type === UnsignedIntType ) {\n\n\t\t\t\t\tglInternalFormat = 33190;\n\n\t\t\t\t} else if ( texture.type === UnsignedInt248Type ) {\n\n\t\t\t\t\tglInternalFormat = 35056;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tglInternalFormat = 33189; // WebGL2 requires sized internalformat for glTexImage2D\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( texture.type === FloatType ) {\n\n\t\t\t\t\tconsole.error( 'WebGLRenderer: Floating point depth texture requires WebGL2.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// validation checks for WebGL 1\n\n\t\t\tif ( texture.format === DepthFormat && glInternalFormat === 6402 ) {\n\n\t\t\t\t// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are\n\t\t\t\t// DEPTH_COMPONENT and type is not UNSIGNED_SHORT or UNSIGNED_INT\n\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\tif ( texture.type !== UnsignedShortType && texture.type !== UnsignedIntType ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.' );\n\n\t\t\t\t\ttexture.type = UnsignedShortType;\n\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( texture.format === DepthStencilFormat && glInternalFormat === 6402 ) {\n\n\t\t\t\t// Depth stencil textures need the DEPTH_STENCIL internal format\n\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\tglInternalFormat = 34041;\n\n\t\t\t\t// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are\n\t\t\t\t// DEPTH_STENCIL and type is not UNSIGNED_INT_24_8_WEBGL.\n\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\tif ( texture.type !== UnsignedInt248Type ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.' );\n\n\t\t\t\t\ttexture.type = UnsignedInt248Type;\n\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tstate.texImage2D( 3553, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, null );\n\n\t\t} else if ( texture.isDataTexture ) {\n\n\t\t\t// use manually created mipmaps if available\n\t\t\t// if there are no manual mipmaps\n\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\tif ( mipmaps.length > 0 && supportsMips ) {\n\n\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\tmipmap = mipmaps[ i ];\n\t\t\t\t\tstate.texImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t}\n\n\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\tstate.texImage2D( 3553, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, image.data );\n\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t\t}\n\n\t\t} else if ( texture.isCompressedTexture ) {\n\n\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\tif ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) {\n\n\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\tstate.compressedTexImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t} else if ( texture.isDataTexture2DArray ) {\n\n\t\t\tstate.texImage3D( 35866, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );\n\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t} else if ( texture.isDataTexture3D ) {\n\n\t\t\tstate.texImage3D( 32879, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );\n\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t} else {\n\n\t\t\t// regular Texture (image, video, canvas)\n\n\t\t\t// use manually created mipmaps if available\n\t\t\t// if there are no manual mipmaps\n\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\tif ( mipmaps.length > 0 && supportsMips ) {\n\n\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\tmipmap = mipmaps[ i ];\n\t\t\t\t\tstate.texImage2D( 3553, i, glInternalFormat, glFormat, glType, mipmap );\n\n\t\t\t\t}\n\n\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\tstate.texImage2D( 3553, 0, glInternalFormat, glFormat, glType, image );\n\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\tgenerateMipmap( textureType, texture, image.width, image.height );\n\n\t\t}\n\n\t\ttextureProperties.__version = texture.version;\n\n\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t}\n\n\tfunction uploadCubeTexture( textureProperties, texture, slot ) {\n\n\t\tif ( texture.image.length !== 6 ) return;\n\n\t\tinitTexture( textureProperties, texture );\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 34067, textureProperties.__webglTexture );\n\n\t\t_gl.pixelStorei( 37440, texture.flipY );\n\t\t_gl.pixelStorei( 37441, texture.premultiplyAlpha );\n\t\t_gl.pixelStorei( 3317, texture.unpackAlignment );\n\t\t_gl.pixelStorei( 37443, 0 );\n\n\t\tconst isCompressed = ( texture && ( texture.isCompressedTexture || texture.image[ 0 ].isCompressedTexture ) );\n\t\tconst isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture );\n\n\t\tconst cubeImage = [];\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tif ( ! isCompressed && ! isDataTexture ) {\n\n\t\t\t\tcubeImage[ i ] = resizeImage( texture.image[ i ], false, true, maxCubemapSize );\n\n\t\t\t} else {\n\n\t\t\t\tcubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst image = cubeImage[ 0 ],\n\t\t\tsupportsMips = isPowerOfTwo$1( image ) || isWebGL2,\n\t\t\tglFormat = utils.convert( texture.format ),\n\t\t\tglType = utils.convert( texture.type ),\n\t\t\tglInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );\n\n\t\tsetTextureParameters( 34067, texture, supportsMips );\n\n\t\tlet mipmaps;\n\n\t\tif ( isCompressed ) {\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tmipmaps = cubeImage[ i ].mipmaps;\n\n\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\n\t\t\t\t\tif ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) {\n\n\t\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\t\tstate.compressedTexImage2D( 34069 + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstate.texImage2D( 34069 + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t} else {\n\n\t\t\tmipmaps = texture.mipmaps;\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( isDataTexture ) {\n\n\t\t\t\t\tstate.texImage2D( 34069 + i, 0, glInternalFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data );\n\n\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\t\t\t\t\t\tconst mipmapImage = mipmap.image[ i ].image;\n\n\t\t\t\t\t\tstate.texImage2D( 34069 + i, j + 1, glInternalFormat, mipmapImage.width, mipmapImage.height, 0, glFormat, glType, mipmapImage.data );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage2D( 34069 + i, 0, glInternalFormat, glFormat, glType, cubeImage[ i ] );\n\n\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\n\t\t\t\t\t\tstate.texImage2D( 34069 + i, j + 1, glInternalFormat, glFormat, glType, mipmap.image[ i ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttextureProperties.__maxMipLevel = mipmaps.length;\n\n\t\t}\n\n\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\t// We assume images for cube map have the same size.\n\t\t\tgenerateMipmap( 34067, texture, image.width, image.height );\n\n\t\t}\n\n\t\ttextureProperties.__version = texture.version;\n\n\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t}\n\n\t// Render targets\n\n\t// Setup storage for target texture and bind it to correct framebuffer\n\tfunction setupFrameBufferTexture( framebuffer, renderTarget, texture, attachment, textureTarget ) {\n\n\t\tconst glFormat = utils.convert( texture.format );\n\t\tconst glType = utils.convert( texture.type );\n\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );\n\n\t\tif ( textureTarget === 32879 || textureTarget === 35866 ) {\n\n\t\t\tstate.texImage3D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, renderTarget.depth, 0, glFormat, glType, null );\n\n\t\t} else {\n\n\t\t\tstate.texImage2D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null );\n\n\t\t}\n\n\t\tstate.bindFramebuffer( 36160, framebuffer );\n\t\t_gl.framebufferTexture2D( 36160, attachment, textureTarget, properties.get( texture ).__webglTexture, 0 );\n\t\tstate.bindFramebuffer( 36160, null );\n\n\t}\n\n\t// Setup storage for internal depth/stencil buffers and bind to correct framebuffer\n\tfunction setupRenderBufferStorage( renderbuffer, renderTarget, isMultisample ) {\n\n\t\t_gl.bindRenderbuffer( 36161, renderbuffer );\n\n\t\tif ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) {\n\n\t\t\tlet glInternalFormat = 33189;\n\n\t\t\tif ( isMultisample ) {\n\n\t\t\t\tconst depthTexture = renderTarget.depthTexture;\n\n\t\t\t\tif ( depthTexture && depthTexture.isDepthTexture ) {\n\n\t\t\t\t\tif ( depthTexture.type === FloatType ) {\n\n\t\t\t\t\t\tglInternalFormat = 36012;\n\n\t\t\t\t\t} else if ( depthTexture.type === UnsignedIntType ) {\n\n\t\t\t\t\t\tglInternalFormat = 33190;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.renderbufferStorage( 36161, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\t_gl.framebufferRenderbuffer( 36160, 36096, 36161, renderbuffer );\n\n\t\t} else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) {\n\n\t\t\tif ( isMultisample ) {\n\n\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, 35056, renderTarget.width, renderTarget.height );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.renderbufferStorage( 36161, 34041, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\n\t\t\t_gl.framebufferRenderbuffer( 36160, 33306, 36161, renderbuffer );\n\n\t\t} else {\n\n\t\t\t// Use the first texture for MRT so far\n\t\t\tconst texture = renderTarget.isWebGLMultipleRenderTargets === true ? renderTarget.texture[ 0 ] : renderTarget.texture;\n\n\t\t\tconst glFormat = utils.convert( texture.format );\n\t\t\tconst glType = utils.convert( texture.type );\n\t\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );\n\n\t\t\tif ( isMultisample ) {\n\n\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.renderbufferStorage( 36161, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t}\n\n\t\t_gl.bindRenderbuffer( 36161, null );\n\n\t}\n\n\t// Setup resources for a Depth Texture for a FBO (needs an extension)\n\tfunction setupDepthTexture( framebuffer, renderTarget ) {\n\n\t\tconst isCube = ( renderTarget && renderTarget.isWebGLCubeRenderTarget );\n\t\tif ( isCube ) throw new Error( 'Depth Texture with cube render targets is not supported' );\n\n\t\tstate.bindFramebuffer( 36160, framebuffer );\n\n\t\tif ( ! ( renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture ) ) {\n\n\t\t\tthrow new Error( 'renderTarget.depthTexture must be an instance of THREE.DepthTexture' );\n\n\t\t}\n\n\t\t// upload an empty depth texture with framebuffer size\n\t\tif ( ! properties.get( renderTarget.depthTexture ).__webglTexture ||\n\t\t\t\trenderTarget.depthTexture.image.width !== renderTarget.width ||\n\t\t\t\trenderTarget.depthTexture.image.height !== renderTarget.height ) {\n\n\t\t\trenderTarget.depthTexture.image.width = renderTarget.width;\n\t\t\trenderTarget.depthTexture.image.height = renderTarget.height;\n\t\t\trenderTarget.depthTexture.needsUpdate = true;\n\n\t\t}\n\n\t\tsetTexture2D( renderTarget.depthTexture, 0 );\n\n\t\tconst webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture;\n\n\t\tif ( renderTarget.depthTexture.format === DepthFormat ) {\n\n\t\t\t_gl.framebufferTexture2D( 36160, 36096, 3553, webglDepthTexture, 0 );\n\n\t\t} else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {\n\n\t\t\t_gl.framebufferTexture2D( 36160, 33306, 3553, webglDepthTexture, 0 );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'Unknown depthTexture format' );\n\n\t\t}\n\n\t}\n\n\t// Setup GL resources for a non-texture depth buffer\n\tfunction setupDepthRenderbuffer( renderTarget ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\tconst isCube = ( renderTarget.isWebGLCubeRenderTarget === true );\n\n\t\tif ( renderTarget.depthTexture ) {\n\n\t\t\tif ( isCube ) throw new Error( 'target.depthTexture not supported in Cube render targets' );\n\n\t\t\tsetupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget );\n\n\t\t} else {\n\n\t\t\tif ( isCube ) {\n\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = [];\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tstate.bindFramebuffer( 36160, renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\t\trenderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer();\n\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget, false );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tstate.bindFramebuffer( 36160, renderTargetProperties.__webglFramebuffer );\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer();\n\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget, false );\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.bindFramebuffer( 36160, null );\n\n\t}\n\n\t// Set up GL resources for the render target\n\tfunction setupRenderTarget( renderTarget ) {\n\n\t\tconst texture = renderTarget.texture;\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst textureProperties = properties.get( texture );\n\n\t\trenderTarget.addEventListener( 'dispose', onRenderTargetDispose );\n\n\t\tif ( renderTarget.isWebGLMultipleRenderTargets !== true ) {\n\n\t\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\t\t\ttextureProperties.__version = texture.version;\n\t\t\tinfo.memory.textures ++;\n\n\t\t}\n\n\t\tconst isCube = ( renderTarget.isWebGLCubeRenderTarget === true );\n\t\tconst isMultipleRenderTargets = ( renderTarget.isWebGLMultipleRenderTargets === true );\n\t\tconst isMultisample = ( renderTarget.isWebGLMultisampleRenderTarget === true );\n\t\tconst isRenderTarget3D = texture.isDataTexture3D || texture.isDataTexture2DArray;\n\t\tconst supportsMips = isPowerOfTwo$1( renderTarget ) || isWebGL2;\n\n\t\t// Handles WebGL2 RGBFormat fallback - #18858\n\n\t\tif ( isWebGL2 && texture.format === RGBFormat && ( texture.type === FloatType || texture.type === HalfFloatType ) ) {\n\n\t\t\ttexture.format = RGBAFormat;\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.' );\n\n\t\t}\n\n\t\t// Setup framebuffer\n\n\t\tif ( isCube ) {\n\n\t\t\trenderTargetProperties.__webglFramebuffer = [];\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\trenderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\trenderTargetProperties.__webglFramebuffer = _gl.createFramebuffer();\n\n\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\tif ( capabilities.drawBuffers ) {\n\n\t\t\t\t\tconst textures = renderTarget.texture;\n\n\t\t\t\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst attachmentProperties = properties.get( textures[ i ] );\n\n\t\t\t\t\t\tif ( attachmentProperties.__webglTexture === undefined ) {\n\n\t\t\t\t\t\t\tattachmentProperties.__webglTexture = _gl.createTexture();\n\n\t\t\t\t\t\t\tinfo.memory.textures ++;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: WebGLMultipleRenderTargets can only be used with WebGL2 or WEBGL_draw_buffers extension.' );\n\n\t\t\t\t}\n\n\t\t\t} else if ( isMultisample ) {\n\n\t\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t\trenderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer();\n\t\t\t\t\trenderTargetProperties.__webglColorRenderbuffer = _gl.createRenderbuffer();\n\n\t\t\t\t\t_gl.bindRenderbuffer( 36161, renderTargetProperties.__webglColorRenderbuffer );\n\n\t\t\t\t\tconst glFormat = utils.convert( texture.format );\n\t\t\t\t\tconst glType = utils.convert( texture.type );\n\t\t\t\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );\n\t\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\t\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t\tstate.bindFramebuffer( 36160, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\t\t_gl.framebufferRenderbuffer( 36160, 36064, 36161, renderTargetProperties.__webglColorRenderbuffer );\n\t\t\t\t\t_gl.bindRenderbuffer( 36161, null );\n\n\t\t\t\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\t\t\t\trenderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer();\n\t\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tstate.bindFramebuffer( 36160, null );\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Setup color buffer\n\n\t\tif ( isCube ) {\n\n\t\t\tstate.bindTexture( 34067, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( 34067, texture, supportsMips );\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, texture, 36064, 34069 + i );\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\t\tgenerateMipmap( 34067, texture, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t} else if ( isMultipleRenderTargets ) {\n\n\t\t\tconst textures = renderTarget.texture;\n\n\t\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\t\tconst attachment = textures[ i ];\n\t\t\t\tconst attachmentProperties = properties.get( attachment );\n\n\t\t\t\tstate.bindTexture( 3553, attachmentProperties.__webglTexture );\n\t\t\t\tsetTextureParameters( 3553, attachment, supportsMips );\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, attachment, 36064 + i, 3553 );\n\n\t\t\t\tif ( textureNeedsGenerateMipmaps( attachment, supportsMips ) ) {\n\n\t\t\t\t\tgenerateMipmap( 3553, attachment, renderTarget.width, renderTarget.height );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t} else {\n\n\t\t\tlet glTextureType = 3553;\n\n\t\t\tif ( isRenderTarget3D ) {\n\n\t\t\t\t// Render targets containing layers, i.e: Texture 3D and 2d arrays\n\n\t\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t\tconst isTexture3D = texture.isDataTexture3D;\n\t\t\t\t\tglTextureType = isTexture3D ? 32879 : 35866;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.DataTexture3D and THREE.DataTexture2DArray only supported with WebGL2.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( glTextureType, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( glTextureType, texture, supportsMips );\n\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, texture, 36064, glTextureType );\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\t\tgenerateMipmap( glTextureType, texture, renderTarget.width, renderTarget.height, renderTarget.depth );\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t}\n\n\t\t// Setup depth and stencil buffers\n\n\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\tsetupDepthRenderbuffer( renderTarget );\n\n\t\t}\n\n\t}\n\n\tfunction updateRenderTargetMipmap( renderTarget ) {\n\n\t\tconst supportsMips = isPowerOfTwo$1( renderTarget ) || isWebGL2;\n\n\t\tconst textures = renderTarget.isWebGLMultipleRenderTargets === true ? renderTarget.texture : [ renderTarget.texture ];\n\n\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\tconst texture = textures[ i ];\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\t\tconst target = renderTarget.isWebGLCubeRenderTarget ? 34067 : 3553;\n\t\t\t\tconst webglTexture = properties.get( texture ).__webglTexture;\n\n\t\t\t\tstate.bindTexture( target, webglTexture );\n\t\t\t\tgenerateMipmap( target, texture, renderTarget.width, renderTarget.height );\n\t\t\t\tstate.unbindTexture();\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction updateMultisampleRenderTarget( renderTarget ) {\n\n\t\tif ( renderTarget.isWebGLMultisampleRenderTarget ) {\n\n\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\tconst width = renderTarget.width;\n\t\t\t\tconst height = renderTarget.height;\n\t\t\t\tlet mask = 16384;\n\n\t\t\t\tif ( renderTarget.depthBuffer ) mask |= 256;\n\t\t\t\tif ( renderTarget.stencilBuffer ) mask |= 1024;\n\n\t\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\t\t\tstate.bindFramebuffer( 36008, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\tstate.bindFramebuffer( 36009, renderTargetProperties.__webglFramebuffer );\n\n\t\t\t\t_gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, 9728 );\n\n\t\t\t\tstate.bindFramebuffer( 36008, null );\n\t\t\t\tstate.bindFramebuffer( 36009, renderTargetProperties.__webglMultisampledFramebuffer );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction getRenderTargetSamples( renderTarget ) {\n\n\t\treturn ( isWebGL2 && renderTarget.isWebGLMultisampleRenderTarget ) ?\n\t\t\tMath.min( maxSamples, renderTarget.samples ) : 0;\n\n\t}\n\n\tfunction updateVideoTexture( texture ) {\n\n\t\tconst frame = info.render.frame;\n\n\t\t// Check the last frame we updated the VideoTexture\n\n\t\tif ( _videoTextures.get( texture ) !== frame ) {\n\n\t\t\t_videoTextures.set( texture, frame );\n\t\t\ttexture.update();\n\n\t\t}\n\n\t}\n\n\t// backwards compatibility\n\n\tlet warnedTexture2D = false;\n\tlet warnedTextureCube = false;\n\n\tfunction safeSetTexture2D( texture, slot ) {\n\n\t\tif ( texture && texture.isWebGLRenderTarget ) {\n\n\t\t\tif ( warnedTexture2D === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLTextures.safeSetTexture2D: don\\'t use render targets as textures. Use their .texture property instead.' );\n\t\t\t\twarnedTexture2D = true;\n\n\t\t\t}\n\n\t\t\ttexture = texture.texture;\n\n\t\t}\n\n\t\tsetTexture2D( texture, slot );\n\n\t}\n\n\tfunction safeSetTextureCube( texture, slot ) {\n\n\t\tif ( texture && texture.isWebGLCubeRenderTarget ) {\n\n\t\t\tif ( warnedTextureCube === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLTextures.safeSetTextureCube: don\\'t use cube render targets as textures. Use their .texture property instead.' );\n\t\t\t\twarnedTextureCube = true;\n\n\t\t\t}\n\n\t\t\ttexture = texture.texture;\n\n\t\t}\n\n\n\t\tsetTextureCube( texture, slot );\n\n\t}\n\n\t//\n\n\tthis.allocateTextureUnit = allocateTextureUnit;\n\tthis.resetTextureUnits = resetTextureUnits;\n\n\tthis.setTexture2D = setTexture2D;\n\tthis.setTexture2DArray = setTexture2DArray;\n\tthis.setTexture3D = setTexture3D;\n\tthis.setTextureCube = setTextureCube;\n\tthis.setupRenderTarget = setupRenderTarget;\n\tthis.updateRenderTargetMipmap = updateRenderTargetMipmap;\n\tthis.updateMultisampleRenderTarget = updateMultisampleRenderTarget;\n\n\tthis.safeSetTexture2D = safeSetTexture2D;\n\tthis.safeSetTextureCube = safeSetTextureCube;\n\n}\n\nfunction WebGLUtils( gl, extensions, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tfunction convert( p ) {\n\n\t\tlet extension;\n\n\t\tif ( p === UnsignedByteType ) return 5121;\n\t\tif ( p === UnsignedShort4444Type ) return 32819;\n\t\tif ( p === UnsignedShort5551Type ) return 32820;\n\t\tif ( p === UnsignedShort565Type ) return 33635;\n\n\t\tif ( p === ByteType ) return 5120;\n\t\tif ( p === ShortType ) return 5122;\n\t\tif ( p === UnsignedShortType ) return 5123;\n\t\tif ( p === IntType ) return 5124;\n\t\tif ( p === UnsignedIntType ) return 5125;\n\t\tif ( p === FloatType ) return 5126;\n\n\t\tif ( p === HalfFloatType ) {\n\n\t\t\tif ( isWebGL2 ) return 5131;\n\n\t\t\textension = extensions.get( 'OES_texture_half_float' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn extension.HALF_FLOAT_OES;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === AlphaFormat ) return 6406;\n\t\tif ( p === RGBFormat ) return 6407;\n\t\tif ( p === RGBAFormat ) return 6408;\n\t\tif ( p === LuminanceFormat ) return 6409;\n\t\tif ( p === LuminanceAlphaFormat ) return 6410;\n\t\tif ( p === DepthFormat ) return 6402;\n\t\tif ( p === DepthStencilFormat ) return 34041;\n\t\tif ( p === RedFormat ) return 6403;\n\n\t\t// WebGL2 formats.\n\n\t\tif ( p === RedIntegerFormat ) return 36244;\n\t\tif ( p === RGFormat ) return 33319;\n\t\tif ( p === RGIntegerFormat ) return 33320;\n\t\tif ( p === RGBIntegerFormat ) return 36248;\n\t\tif ( p === RGBAIntegerFormat ) return 36249;\n\n\t\tif ( p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format ||\n\t\t\tp === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT;\n\t\t\t\tif ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT;\n\t\t\t\tif ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT;\n\t\t\t\tif ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format ||\n\t\t\tp === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGB_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGB_ETC1_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_etc1' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn extension.COMPRESSED_RGB_ETC1_WEBGL;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_etc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_ETC2_Format ) return extension.COMPRESSED_RGB8_ETC2;\n\t\t\t\tif ( p === RGBA_ETC2_EAC_Format ) return extension.COMPRESSED_RGBA8_ETC2_EAC;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format ||\n\t\t\tp === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format ||\n\t\t\tp === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format ||\n\t\t\tp === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format ||\n\t\t\tp === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format ||\n\t\t\tp === SRGB8_ALPHA8_ASTC_4x4_Format || p === SRGB8_ALPHA8_ASTC_5x4_Format || p === SRGB8_ALPHA8_ASTC_5x5_Format ||\n\t\t\tp === SRGB8_ALPHA8_ASTC_6x5_Format || p === SRGB8_ALPHA8_ASTC_6x6_Format || p === SRGB8_ALPHA8_ASTC_8x5_Format ||\n\t\t\tp === SRGB8_ALPHA8_ASTC_8x6_Format || p === SRGB8_ALPHA8_ASTC_8x8_Format || p === SRGB8_ALPHA8_ASTC_10x5_Format ||\n\t\t\tp === SRGB8_ALPHA8_ASTC_10x6_Format || p === SRGB8_ALPHA8_ASTC_10x8_Format || p === SRGB8_ALPHA8_ASTC_10x10_Format ||\n\t\t\tp === SRGB8_ALPHA8_ASTC_12x10_Format || p === SRGB8_ALPHA8_ASTC_12x12_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_astc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\t// TODO Complete?\n\n\t\t\t\treturn p;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGBA_BPTC_Format ) {\n\n\t\t\textension = extensions.get( 'EXT_texture_compression_bptc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\t// TODO Complete?\n\n\t\t\t\treturn p;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === UnsignedInt248Type ) {\n\n\t\t\tif ( isWebGL2 ) return 34042;\n\n\t\t\textension = extensions.get( 'WEBGL_depth_texture' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn extension.UNSIGNED_INT_24_8_WEBGL;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn { convert: convert };\n\n}\n\nclass ArrayCamera extends PerspectiveCamera {\n\n\tconstructor( array = [] ) {\n\n\t\tsuper();\n\n\t\tthis.cameras = array;\n\n\t}\n\n}\n\nArrayCamera.prototype.isArrayCamera = true;\n\nclass Group extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'Group';\n\n\t}\n\n}\n\nGroup.prototype.isGroup = true;\n\nconst _moveEvent = { type: 'move' };\n\nclass WebXRController {\n\n\tconstructor() {\n\n\t\tthis._targetRay = null;\n\t\tthis._grip = null;\n\t\tthis._hand = null;\n\n\t}\n\n\tgetHandSpace() {\n\n\t\tif ( this._hand === null ) {\n\n\t\t\tthis._hand = new Group();\n\t\t\tthis._hand.matrixAutoUpdate = false;\n\t\t\tthis._hand.visible = false;\n\n\t\t\tthis._hand.joints = {};\n\t\t\tthis._hand.inputState = { pinching: false };\n\n\t\t}\n\n\t\treturn this._hand;\n\n\t}\n\n\tgetTargetRaySpace() {\n\n\t\tif ( this._targetRay === null ) {\n\n\t\t\tthis._targetRay = new Group();\n\t\t\tthis._targetRay.matrixAutoUpdate = false;\n\t\t\tthis._targetRay.visible = false;\n\t\t\tthis._targetRay.hasLinearVelocity = false;\n\t\t\tthis._targetRay.linearVelocity = new Vector3();\n\t\t\tthis._targetRay.hasAngularVelocity = false;\n\t\t\tthis._targetRay.angularVelocity = new Vector3();\n\n\t\t}\n\n\t\treturn this._targetRay;\n\n\t}\n\n\tgetGripSpace() {\n\n\t\tif ( this._grip === null ) {\n\n\t\t\tthis._grip = new Group();\n\t\t\tthis._grip.matrixAutoUpdate = false;\n\t\t\tthis._grip.visible = false;\n\t\t\tthis._grip.hasLinearVelocity = false;\n\t\t\tthis._grip.linearVelocity = new Vector3();\n\t\t\tthis._grip.hasAngularVelocity = false;\n\t\t\tthis._grip.angularVelocity = new Vector3();\n\n\t\t}\n\n\t\treturn this._grip;\n\n\t}\n\n\tdispatchEvent( event ) {\n\n\t\tif ( this._targetRay !== null ) {\n\n\t\t\tthis._targetRay.dispatchEvent( event );\n\n\t\t}\n\n\t\tif ( this._grip !== null ) {\n\n\t\t\tthis._grip.dispatchEvent( event );\n\n\t\t}\n\n\t\tif ( this._hand !== null ) {\n\n\t\t\tthis._hand.dispatchEvent( event );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tdisconnect( inputSource ) {\n\n\t\tthis.dispatchEvent( { type: 'disconnected', data: inputSource } );\n\n\t\tif ( this._targetRay !== null ) {\n\n\t\t\tthis._targetRay.visible = false;\n\n\t\t}\n\n\t\tif ( this._grip !== null ) {\n\n\t\t\tthis._grip.visible = false;\n\n\t\t}\n\n\t\tif ( this._hand !== null ) {\n\n\t\t\tthis._hand.visible = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tupdate( inputSource, frame, referenceSpace ) {\n\n\t\tlet inputPose = null;\n\t\tlet gripPose = null;\n\t\tlet handPose = null;\n\n\t\tconst targetRay = this._targetRay;\n\t\tconst grip = this._grip;\n\t\tconst hand = this._hand;\n\n\t\tif ( inputSource && frame.session.visibilityState !== 'visible-blurred' ) {\n\n\t\t\tif ( targetRay !== null ) {\n\n\t\t\t\tinputPose = frame.getPose( inputSource.targetRaySpace, referenceSpace );\n\n\t\t\t\tif ( inputPose !== null ) {\n\n\t\t\t\t\ttargetRay.matrix.fromArray( inputPose.transform.matrix );\n\t\t\t\t\ttargetRay.matrix.decompose( targetRay.position, targetRay.rotation, targetRay.scale );\n\n\t\t\t\t\tif ( inputPose.linearVelocity ) {\n\n\t\t\t\t\t\ttargetRay.hasLinearVelocity = true;\n\t\t\t\t\t\ttargetRay.linearVelocity.copy( inputPose.linearVelocity );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttargetRay.hasLinearVelocity = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( inputPose.angularVelocity ) {\n\n\t\t\t\t\t\ttargetRay.hasAngularVelocity = true;\n\t\t\t\t\t\ttargetRay.angularVelocity.copy( inputPose.angularVelocity );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttargetRay.hasAngularVelocity = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.dispatchEvent( _moveEvent );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hand && inputSource.hand ) {\n\n\t\t\t\thandPose = true;\n\n\t\t\t\tfor ( const inputjoint of inputSource.hand.values() ) {\n\n\t\t\t\t\t// Update the joints groups with the XRJoint poses\n\t\t\t\t\tconst jointPose = frame.getJointPose( inputjoint, referenceSpace );\n\n\t\t\t\t\tif ( hand.joints[ inputjoint.jointName ] === undefined ) {\n\n\t\t\t\t\t\t// The transform of this joint will be updated with the joint pose on each frame\n\t\t\t\t\t\tconst joint = new Group();\n\t\t\t\t\t\tjoint.matrixAutoUpdate = false;\n\t\t\t\t\t\tjoint.visible = false;\n\t\t\t\t\t\thand.joints[ inputjoint.jointName ] = joint;\n\t\t\t\t\t\t// ??\n\t\t\t\t\t\thand.add( joint );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst joint = hand.joints[ inputjoint.jointName ];\n\n\t\t\t\t\tif ( jointPose !== null ) {\n\n\t\t\t\t\t\tjoint.matrix.fromArray( jointPose.transform.matrix );\n\t\t\t\t\t\tjoint.matrix.decompose( joint.position, joint.rotation, joint.scale );\n\t\t\t\t\t\tjoint.jointRadius = jointPose.radius;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tjoint.visible = jointPose !== null;\n\n\t\t\t\t}\n\n\t\t\t\t// Custom events\n\n\t\t\t\t// Check pinchz\n\t\t\t\tconst indexTip = hand.joints[ 'index-finger-tip' ];\n\t\t\t\tconst thumbTip = hand.joints[ 'thumb-tip' ];\n\t\t\t\tconst distance = indexTip.position.distanceTo( thumbTip.position );\n\n\t\t\t\tconst distanceToPinch = 0.02;\n\t\t\t\tconst threshold = 0.005;\n\n\t\t\t\tif ( hand.inputState.pinching && distance > distanceToPinch + threshold ) {\n\n\t\t\t\t\thand.inputState.pinching = false;\n\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\ttype: 'pinchend',\n\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\ttarget: this\n\t\t\t\t\t} );\n\n\t\t\t\t} else if ( ! hand.inputState.pinching && distance <= distanceToPinch - threshold ) {\n\n\t\t\t\t\thand.inputState.pinching = true;\n\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\ttype: 'pinchstart',\n\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\ttarget: this\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( grip !== null && inputSource.gripSpace ) {\n\n\t\t\t\t\tgripPose = frame.getPose( inputSource.gripSpace, referenceSpace );\n\n\t\t\t\t\tif ( gripPose !== null ) {\n\n\t\t\t\t\t\tgrip.matrix.fromArray( gripPose.transform.matrix );\n\t\t\t\t\t\tgrip.matrix.decompose( grip.position, grip.rotation, grip.scale );\n\n\t\t\t\t\t\tif ( gripPose.linearVelocity ) {\n\n\t\t\t\t\t\t\tgrip.hasLinearVelocity = true;\n\t\t\t\t\t\t\tgrip.linearVelocity.copy( gripPose.linearVelocity );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgrip.hasLinearVelocity = false;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( gripPose.angularVelocity ) {\n\n\t\t\t\t\t\t\tgrip.hasAngularVelocity = true;\n\t\t\t\t\t\t\tgrip.angularVelocity.copy( gripPose.angularVelocity );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgrip.hasAngularVelocity = false;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( targetRay !== null ) {\n\n\t\t\ttargetRay.visible = ( inputPose !== null );\n\n\t\t}\n\n\t\tif ( grip !== null ) {\n\n\t\t\tgrip.visible = ( gripPose !== null );\n\n\t\t}\n\n\t\tif ( hand !== null ) {\n\n\t\t\thand.visible = ( handPose !== null );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass WebXRManager extends EventDispatcher {\n\n\tconstructor( renderer, gl ) {\n\n\t\tsuper();\n\n\t\tconst scope = this;\n\t\tconst state = renderer.state;\n\n\t\tlet session = null;\n\t\tlet framebufferScaleFactor = 1.0;\n\n\t\tlet referenceSpace = null;\n\t\tlet referenceSpaceType = 'local-floor';\n\n\t\tlet pose = null;\n\t\tlet glBinding = null;\n\t\tlet glFramebuffer = null;\n\t\tlet glProjLayer = null;\n\t\tlet glBaseLayer = null;\n\t\tlet isMultisample = false;\n\t\tlet glMultisampledFramebuffer = null;\n\t\tlet glColorRenderbuffer = null;\n\t\tlet glDepthRenderbuffer = null;\n\t\tlet xrFrame = null;\n\t\tlet depthStyle = null;\n\t\tlet clearStyle = null;\n\n\t\tconst controllers = [];\n\t\tconst inputSourcesMap = new Map();\n\n\t\t//\n\n\t\tconst cameraL = new PerspectiveCamera();\n\t\tcameraL.layers.enable( 1 );\n\t\tcameraL.viewport = new Vector4();\n\n\t\tconst cameraR = new PerspectiveCamera();\n\t\tcameraR.layers.enable( 2 );\n\t\tcameraR.viewport = new Vector4();\n\n\t\tconst cameras = [ cameraL, cameraR ];\n\n\t\tconst cameraVR = new ArrayCamera();\n\t\tcameraVR.layers.enable( 1 );\n\t\tcameraVR.layers.enable( 2 );\n\n\t\tlet _currentDepthNear = null;\n\t\tlet _currentDepthFar = null;\n\n\t\t//\n\n\t\tthis.cameraAutoUpdate = true;\n\t\tthis.enabled = false;\n\n\t\tthis.isPresenting = false;\n\n\t\tthis.getController = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getTargetRaySpace();\n\n\t\t};\n\n\t\tthis.getControllerGrip = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getGripSpace();\n\n\t\t};\n\n\t\tthis.getHand = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getHandSpace();\n\n\t\t};\n\n\t\t//\n\n\t\tfunction onSessionEvent( event ) {\n\n\t\t\tconst controller = inputSourcesMap.get( event.inputSource );\n\n\t\t\tif ( controller ) {\n\n\t\t\t\tcontroller.dispatchEvent( { type: event.type, data: event.inputSource } );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onSessionEnd() {\n\n\t\t\tinputSourcesMap.forEach( function ( controller, inputSource ) {\n\n\t\t\t\tcontroller.disconnect( inputSource );\n\n\t\t\t} );\n\n\t\t\tinputSourcesMap.clear();\n\n\t\t\t_currentDepthNear = null;\n\t\t\t_currentDepthFar = null;\n\n\t\t\t// restore framebuffer/rendering state\n\n\t\t\tstate.bindXRFramebuffer( null );\n\t\t\trenderer.setRenderTarget( renderer.getRenderTarget() );\n\n\t\t\tif ( glFramebuffer ) gl.deleteFramebuffer( glFramebuffer );\n\t\t\tif ( glMultisampledFramebuffer ) gl.deleteFramebuffer( glMultisampledFramebuffer );\n\t\t\tif ( glColorRenderbuffer ) gl.deleteRenderbuffer( glColorRenderbuffer );\n\t\t\tif ( glDepthRenderbuffer ) gl.deleteRenderbuffer( glDepthRenderbuffer );\n\t\t\tglFramebuffer = null;\n\t\t\tglMultisampledFramebuffer = null;\n\t\t\tglColorRenderbuffer = null;\n\t\t\tglDepthRenderbuffer = null;\n\t\t\tglBaseLayer = null;\n\t\t\tglProjLayer = null;\n\t\t\tglBinding = null;\n\t\t\tsession = null;\n\n\t\t\t//\n\n\t\t\tanimation.stop();\n\n\t\t\tscope.isPresenting = false;\n\n\t\t\tscope.dispatchEvent( { type: 'sessionend' } );\n\n\t\t}\n\n\t\tthis.setFramebufferScaleFactor = function ( value ) {\n\n\t\t\tframebufferScaleFactor = value;\n\n\t\t\tif ( scope.isPresenting === true ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebXRManager: Cannot change framebuffer scale while presenting.' );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.setReferenceSpaceType = function ( value ) {\n\n\t\t\treferenceSpaceType = value;\n\n\t\t\tif ( scope.isPresenting === true ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebXRManager: Cannot change reference space type while presenting.' );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.getReferenceSpace = function () {\n\n\t\t\treturn referenceSpace;\n\n\t\t};\n\n\t\tthis.getBaseLayer = function () {\n\n\t\t\treturn glProjLayer !== null ? glProjLayer : glBaseLayer;\n\n\t\t};\n\n\t\tthis.getBinding = function () {\n\n\t\t\treturn glBinding;\n\n\t\t};\n\n\t\tthis.getFrame = function () {\n\n\t\t\treturn xrFrame;\n\n\t\t};\n\n\t\tthis.getSession = function () {\n\n\t\t\treturn session;\n\n\t\t};\n\n\t\tthis.setSession = async function ( value ) {\n\n\t\t\tsession = value;\n\n\t\t\tif ( session !== null ) {\n\n\t\t\t\tsession.addEventListener( 'select', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'selectstart', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'selectend', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeeze', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeezestart', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeezeend', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'end', onSessionEnd );\n\t\t\t\tsession.addEventListener( 'inputsourceschange', onInputSourcesChange );\n\n\t\t\t\tconst attributes = gl.getContextAttributes();\n\n\t\t\t\tif ( attributes.xrCompatible !== true ) {\n\n\t\t\t\t\tawait gl.makeXRCompatible();\n\n\t\t\t\t}\n\n\t\t\t\tif ( session.renderState.layers === undefined ) {\n\n\t\t\t\t\tconst layerInit = {\n\t\t\t\t\t\tantialias: attributes.antialias,\n\t\t\t\t\t\talpha: attributes.alpha,\n\t\t\t\t\t\tdepth: attributes.depth,\n\t\t\t\t\t\tstencil: attributes.stencil,\n\t\t\t\t\t\tframebufferScaleFactor: framebufferScaleFactor\n\t\t\t\t\t};\n\n\t\t\t\t\tglBaseLayer = new XRWebGLLayer( session, gl, layerInit );\n\n\t\t\t\t\tsession.updateRenderState( { baseLayer: glBaseLayer } );\n\n\t\t\t\t} else if ( gl instanceof WebGLRenderingContext ) {\n\n\t\t\t\t\t// Use old style webgl layer because we can't use MSAA\n\t\t\t\t\t// WebGL2 support.\n\n\t\t\t\t\tconst layerInit = {\n\t\t\t\t\t\tantialias: true,\n\t\t\t\t\t\talpha: attributes.alpha,\n\t\t\t\t\t\tdepth: attributes.depth,\n\t\t\t\t\t\tstencil: attributes.stencil,\n\t\t\t\t\t\tframebufferScaleFactor: framebufferScaleFactor\n\t\t\t\t\t};\n\n\t\t\t\t\tglBaseLayer = new XRWebGLLayer( session, gl, layerInit );\n\n\t\t\t\t\tsession.updateRenderState( { layers: [ glBaseLayer ] } );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tisMultisample = attributes.antialias;\n\t\t\t\t\tlet depthFormat = null;\n\n\n\t\t\t\t\tif ( attributes.depth ) {\n\n\t\t\t\t\t\tclearStyle = 256;\n\n\t\t\t\t\t\tif ( attributes.stencil ) clearStyle |= 1024;\n\n\t\t\t\t\t\tdepthStyle = attributes.stencil ? 33306 : 36096;\n\t\t\t\t\t\tdepthFormat = attributes.stencil ? 35056 : 33190;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst projectionlayerInit = {\n\t\t\t\t\t\tcolorFormat: attributes.alpha ? 32856 : 32849,\n\t\t\t\t\t\tdepthFormat: depthFormat,\n\t\t\t\t\t\tscaleFactor: framebufferScaleFactor\n\t\t\t\t\t};\n\n\t\t\t\t\tglBinding = new XRWebGLBinding( session, gl );\n\n\t\t\t\t\tglProjLayer = glBinding.createProjectionLayer( projectionlayerInit );\n\n\t\t\t\t\tglFramebuffer = gl.createFramebuffer();\n\n\t\t\t\t\tsession.updateRenderState( { layers: [ glProjLayer ] } );\n\n\t\t\t\t\tif ( isMultisample ) {\n\n\t\t\t\t\t\tglMultisampledFramebuffer = gl.createFramebuffer();\n\t\t\t\t\t\tglColorRenderbuffer = gl.createRenderbuffer();\n\t\t\t\t\t\tgl.bindRenderbuffer( 36161, glColorRenderbuffer );\n\t\t\t\t\t\tgl.renderbufferStorageMultisample(\n\t\t\t\t\t\t\t36161,\n\t\t\t\t\t\t\t4,\n\t\t\t\t\t\t\t32856,\n\t\t\t\t\t\t\tglProjLayer.textureWidth,\n\t\t\t\t\t\t\tglProjLayer.textureHeight );\n\t\t\t\t\t\tstate.bindFramebuffer( 36160, glMultisampledFramebuffer );\n\t\t\t\t\t\tgl.framebufferRenderbuffer( 36160, 36064, 36161, glColorRenderbuffer );\n\t\t\t\t\t\tgl.bindRenderbuffer( 36161, null );\n\n\t\t\t\t\t\tif ( depthFormat !== null ) {\n\n\t\t\t\t\t\t\tglDepthRenderbuffer = gl.createRenderbuffer();\n\t\t\t\t\t\t\tgl.bindRenderbuffer( 36161, glDepthRenderbuffer );\n\t\t\t\t\t\t\tgl.renderbufferStorageMultisample( 36161, 4, depthFormat, glProjLayer.textureWidth, glProjLayer.textureHeight );\n\t\t\t\t\t\t\tgl.framebufferRenderbuffer( 36160, depthStyle, 36161, glDepthRenderbuffer );\n\t\t\t\t\t\t\tgl.bindRenderbuffer( 36161, null );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstate.bindFramebuffer( 36160, null );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treferenceSpace = await session.requestReferenceSpace( referenceSpaceType );\n\n\t\t\t\tanimation.setContext( session );\n\t\t\t\tanimation.start();\n\n\t\t\t\tscope.isPresenting = true;\n\n\t\t\t\tscope.dispatchEvent( { type: 'sessionstart' } );\n\n\t\t\t}\n\n\t\t};\n\n\t\tfunction onInputSourcesChange( event ) {\n\n\t\t\tconst inputSources = session.inputSources;\n\n\t\t\t// Assign inputSources to available controllers\n\n\t\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\tinputSourcesMap.set( inputSources[ i ], controllers[ i ] );\n\n\t\t\t}\n\n\t\t\t// Notify disconnected\n\n\t\t\tfor ( let i = 0; i < event.removed.length; i ++ ) {\n\n\t\t\t\tconst inputSource = event.removed[ i ];\n\t\t\t\tconst controller = inputSourcesMap.get( inputSource );\n\n\t\t\t\tif ( controller ) {\n\n\t\t\t\t\tcontroller.dispatchEvent( { type: 'disconnected', data: inputSource } );\n\t\t\t\t\tinputSourcesMap.delete( inputSource );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Notify connected\n\n\t\t\tfor ( let i = 0; i < event.added.length; i ++ ) {\n\n\t\t\t\tconst inputSource = event.added[ i ];\n\t\t\t\tconst controller = inputSourcesMap.get( inputSource );\n\n\t\t\t\tif ( controller ) {\n\n\t\t\t\t\tcontroller.dispatchEvent( { type: 'connected', data: inputSource } );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst cameraLPos = new Vector3();\n\t\tconst cameraRPos = new Vector3();\n\n\t\t/**\n\t\t * Assumes 2 cameras that are parallel and share an X-axis, and that\n\t\t * the cameras' projection and world matrices have already been set.\n\t\t * And that near and far planes are identical for both cameras.\n\t\t * Visualization of this technique: https://computergraphics.stackexchange.com/a/4765\n\t\t */\n\t\tfunction setProjectionFromUnion( camera, cameraL, cameraR ) {\n\n\t\t\tcameraLPos.setFromMatrixPosition( cameraL.matrixWorld );\n\t\t\tcameraRPos.setFromMatrixPosition( cameraR.matrixWorld );\n\n\t\t\tconst ipd = cameraLPos.distanceTo( cameraRPos );\n\n\t\t\tconst projL = cameraL.projectionMatrix.elements;\n\t\t\tconst projR = cameraR.projectionMatrix.elements;\n\n\t\t\t// VR systems will have identical far and near planes, and\n\t\t\t// most likely identical top and bottom frustum extents.\n\t\t\t// Use the left camera for these values.\n\t\t\tconst near = projL[ 14 ] / ( projL[ 10 ] - 1 );\n\t\t\tconst far = projL[ 14 ] / ( projL[ 10 ] + 1 );\n\t\t\tconst topFov = ( projL[ 9 ] + 1 ) / projL[ 5 ];\n\t\t\tconst bottomFov = ( projL[ 9 ] - 1 ) / projL[ 5 ];\n\n\t\t\tconst leftFov = ( projL[ 8 ] - 1 ) / projL[ 0 ];\n\t\t\tconst rightFov = ( projR[ 8 ] + 1 ) / projR[ 0 ];\n\t\t\tconst left = near * leftFov;\n\t\t\tconst right = near * rightFov;\n\n\t\t\t// Calculate the new camera's position offset from the\n\t\t\t// left camera. xOffset should be roughly half `ipd`.\n\t\t\tconst zOffset = ipd / ( - leftFov + rightFov );\n\t\t\tconst xOffset = zOffset * - leftFov;\n\n\t\t\t// TODO: Better way to apply this offset?\n\t\t\tcameraL.matrixWorld.decompose( camera.position, camera.quaternion, camera.scale );\n\t\t\tcamera.translateX( xOffset );\n\t\t\tcamera.translateZ( zOffset );\n\t\t\tcamera.matrixWorld.compose( camera.position, camera.quaternion, camera.scale );\n\t\t\tcamera.matrixWorldInverse.copy( camera.matrixWorld ).invert();\n\n\t\t\t// Find the union of the frustum values of the cameras and scale\n\t\t\t// the values so that the near plane's position does not change in world space,\n\t\t\t// although must now be relative to the new union camera.\n\t\t\tconst near2 = near + zOffset;\n\t\t\tconst far2 = far + zOffset;\n\t\t\tconst left2 = left - xOffset;\n\t\t\tconst right2 = right + ( ipd - xOffset );\n\t\t\tconst top2 = topFov * far / far2 * near2;\n\t\t\tconst bottom2 = bottomFov * far / far2 * near2;\n\n\t\t\tcamera.projectionMatrix.makePerspective( left2, right2, top2, bottom2, near2, far2 );\n\n\t\t}\n\n\t\tfunction updateCamera( camera, parent ) {\n\n\t\t\tif ( parent === null ) {\n\n\t\t\t\tcamera.matrixWorld.copy( camera.matrix );\n\n\t\t\t} else {\n\n\t\t\t\tcamera.matrixWorld.multiplyMatrices( parent.matrixWorld, camera.matrix );\n\n\t\t\t}\n\n\t\t\tcamera.matrixWorldInverse.copy( camera.matrixWorld ).invert();\n\n\t\t}\n\n\t\tthis.updateCamera = function ( camera ) {\n\n\t\t\tif ( session === null ) return;\n\n\t\t\tcameraVR.near = cameraR.near = cameraL.near = camera.near;\n\t\t\tcameraVR.far = cameraR.far = cameraL.far = camera.far;\n\n\t\t\tif ( _currentDepthNear !== cameraVR.near || _currentDepthFar !== cameraVR.far ) {\n\n\t\t\t\t// Note that the new renderState won't apply until the next frame. See #18320\n\n\t\t\t\tsession.updateRenderState( {\n\t\t\t\t\tdepthNear: cameraVR.near,\n\t\t\t\t\tdepthFar: cameraVR.far\n\t\t\t\t} );\n\n\t\t\t\t_currentDepthNear = cameraVR.near;\n\t\t\t\t_currentDepthFar = cameraVR.far;\n\n\t\t\t}\n\n\t\t\tconst parent = camera.parent;\n\t\t\tconst cameras = cameraVR.cameras;\n\n\t\t\tupdateCamera( cameraVR, parent );\n\n\t\t\tfor ( let i = 0; i < cameras.length; i ++ ) {\n\n\t\t\t\tupdateCamera( cameras[ i ], parent );\n\n\t\t\t}\n\n\t\t\tcameraVR.matrixWorld.decompose( cameraVR.position, cameraVR.quaternion, cameraVR.scale );\n\n\t\t\t// update user camera and its children\n\n\t\t\tcamera.position.copy( cameraVR.position );\n\t\t\tcamera.quaternion.copy( cameraVR.quaternion );\n\t\t\tcamera.scale.copy( cameraVR.scale );\n\t\t\tcamera.matrix.copy( cameraVR.matrix );\n\t\t\tcamera.matrixWorld.copy( cameraVR.matrixWorld );\n\n\t\t\tconst children = camera.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tchildren[ i ].updateMatrixWorld( true );\n\n\t\t\t}\n\n\t\t\t// update projection matrix for proper view frustum culling\n\n\t\t\tif ( cameras.length === 2 ) {\n\n\t\t\t\tsetProjectionFromUnion( cameraVR, cameraL, cameraR );\n\n\t\t\t} else {\n\n\t\t\t\t// assume single camera setup (AR)\n\n\t\t\t\tcameraVR.projectionMatrix.copy( cameraL.projectionMatrix );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.getCamera = function () {\n\n\t\t\treturn cameraVR;\n\n\t\t};\n\n\t\tthis.getFoveation = function () {\n\n\t\t\tif ( glProjLayer !== null ) {\n\n\t\t\t\treturn glProjLayer.fixedFoveation;\n\n\t\t\t}\n\n\t\t\tif ( glBaseLayer !== null ) {\n\n\t\t\t\treturn glBaseLayer.fixedFoveation;\n\n\t\t\t}\n\n\t\t\treturn undefined;\n\n\t\t};\n\n\t\tthis.setFoveation = function ( foveation ) {\n\n\t\t\t// 0 = no foveation = full resolution\n\t\t\t// 1 = maximum foveation = the edges render at lower resolution\n\n\t\t\tif ( glProjLayer !== null ) {\n\n\t\t\t\tglProjLayer.fixedFoveation = foveation;\n\n\t\t\t}\n\n\t\t\tif ( glBaseLayer !== null && glBaseLayer.fixedFoveation !== undefined ) {\n\n\t\t\t\tglBaseLayer.fixedFoveation = foveation;\n\n\t\t\t}\n\n\t\t};\n\n\t\t// Animation Loop\n\n\t\tlet onAnimationFrameCallback = null;\n\n\t\tfunction onAnimationFrame( time, frame ) {\n\n\t\t\tpose = frame.getViewerPose( referenceSpace );\n\t\t\txrFrame = frame;\n\n\t\t\tif ( pose !== null ) {\n\n\t\t\t\tconst views = pose.views;\n\n\t\t\t\tif ( glBaseLayer !== null ) {\n\n\t\t\t\t\tstate.bindXRFramebuffer( glBaseLayer.framebuffer );\n\n\t\t\t\t}\n\n\t\t\t\tlet cameraVRNeedsUpdate = false;\n\n\t\t\t\t// check if it's necessary to rebuild cameraVR's camera list\n\n\t\t\t\tif ( views.length !== cameraVR.cameras.length ) {\n\n\t\t\t\t\tcameraVR.cameras.length = 0;\n\n\t\t\t\t\tcameraVRNeedsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < views.length; i ++ ) {\n\n\t\t\t\t\tconst view = views[ i ];\n\n\t\t\t\t\tlet viewport = null;\n\n\t\t\t\t\tif ( glBaseLayer !== null ) {\n\n\t\t\t\t\t\tviewport = glBaseLayer.getViewport( view );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst glSubImage = glBinding.getViewSubImage( glProjLayer, view );\n\n\t\t\t\t\t\tstate.bindXRFramebuffer( glFramebuffer );\n\n\t\t\t\t\t\tif ( glSubImage.depthStencilTexture !== undefined ) {\n\n\t\t\t\t\t\t\tgl.framebufferTexture2D( 36160, depthStyle, 3553, glSubImage.depthStencilTexture, 0 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgl.framebufferTexture2D( 36160, 36064, 3553, glSubImage.colorTexture, 0 );\n\n\t\t\t\t\t\tviewport = glSubImage.viewport;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst camera = cameras[ i ];\n\n\t\t\t\t\tcamera.matrix.fromArray( view.transform.matrix );\n\t\t\t\t\tcamera.projectionMatrix.fromArray( view.projectionMatrix );\n\t\t\t\t\tcamera.viewport.set( viewport.x, viewport.y, viewport.width, viewport.height );\n\n\t\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\t\tcameraVR.matrix.copy( camera.matrix );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( cameraVRNeedsUpdate === true ) {\n\n\t\t\t\t\t\tcameraVR.cameras.push( camera );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( isMultisample ) {\n\n\t\t\t\t\tstate.bindXRFramebuffer( glMultisampledFramebuffer );\n\n\t\t\t\t\tif ( clearStyle !== null ) gl.clear( clearStyle );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tconst inputSources = session.inputSources;\n\n\t\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\tconst controller = controllers[ i ];\n\t\t\t\tconst inputSource = inputSources[ i ];\n\n\t\t\t\tcontroller.update( inputSource, frame, referenceSpace );\n\n\t\t\t}\n\n\t\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time, frame );\n\n\t\t\tif ( isMultisample ) {\n\n\t\t\t\tconst width = glProjLayer.textureWidth;\n\t\t\t\tconst height = glProjLayer.textureHeight;\n\n\t\t\t\tstate.bindFramebuffer( 36008, glMultisampledFramebuffer );\n\t\t\t\tstate.bindFramebuffer( 36009, glFramebuffer );\n\t\t\t\t// Invalidate the depth here to avoid flush of the depth data to main memory.\n\t\t\t\tgl.invalidateFramebuffer( 36008, [ depthStyle ] );\n\t\t\t\tgl.invalidateFramebuffer( 36009, [ depthStyle ] );\n\t\t\t\tgl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, 16384, 9728 );\n\t\t\t\t// Invalidate the MSAA buffer because it's not needed anymore.\n\t\t\t\tgl.invalidateFramebuffer( 36008, [ 36064 ] );\n\t\t\t\tstate.bindFramebuffer( 36008, null );\n\t\t\t\tstate.bindFramebuffer( 36009, null );\n\n\t\t\t\tstate.bindFramebuffer( 36160, glMultisampledFramebuffer );\n\n\t\t\t}\n\n\t\t\txrFrame = null;\n\n\t\t}\n\n\t\tconst animation = new WebGLAnimation();\n\n\t\tanimation.setAnimationLoop( onAnimationFrame );\n\n\t\tthis.setAnimationLoop = function ( callback ) {\n\n\t\t\tonAnimationFrameCallback = callback;\n\n\t\t};\n\n\t\tthis.dispose = function () {};\n\n\t}\n\n}\n\nfunction WebGLMaterials( properties ) {\n\n\tfunction refreshFogUniforms( uniforms, fog ) {\n\n\t\tuniforms.fogColor.value.copy( fog.color );\n\n\t\tif ( fog.isFog ) {\n\n\t\t\tuniforms.fogNear.value = fog.near;\n\t\t\tuniforms.fogFar.value = fog.far;\n\n\t\t} else if ( fog.isFogExp2 ) {\n\n\t\t\tuniforms.fogDensity.value = fog.density;\n\n\t\t}\n\n\t}\n\n\tfunction refreshMaterialUniforms( uniforms, material, pixelRatio, height, transmissionRenderTarget ) {\n\n\t\tif ( material.isMeshBasicMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isMeshLambertMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsLambert( uniforms, material );\n\n\t\t} else if ( material.isMeshToonMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsToon( uniforms, material );\n\n\t\t} else if ( material.isMeshPhongMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsPhong( uniforms, material );\n\n\t\t} else if ( material.isMeshStandardMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t\tif ( material.isMeshPhysicalMaterial ) {\n\n\t\t\t\trefreshUniformsPhysical( uniforms, material, transmissionRenderTarget );\n\n\t\t\t} else {\n\n\t\t\t\trefreshUniformsStandard( uniforms, material );\n\n\t\t\t}\n\n\t\t} else if ( material.isMeshMatcapMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsMatcap( uniforms, material );\n\n\t\t} else if ( material.isMeshDepthMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsDepth( uniforms, material );\n\n\t\t} else if ( material.isMeshDistanceMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsDistance( uniforms, material );\n\n\t\t} else if ( material.isMeshNormalMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsNormal( uniforms, material );\n\n\t\t} else if ( material.isLineBasicMaterial ) {\n\n\t\t\trefreshUniformsLine( uniforms, material );\n\n\t\t\tif ( material.isLineDashedMaterial ) {\n\n\t\t\t\trefreshUniformsDash( uniforms, material );\n\n\t\t\t}\n\n\t\t} else if ( material.isPointsMaterial ) {\n\n\t\t\trefreshUniformsPoints( uniforms, material, pixelRatio, height );\n\n\t\t} else if ( material.isSpriteMaterial ) {\n\n\t\t\trefreshUniformsSprites( uniforms, material );\n\n\t\t} else if ( material.isShadowMaterial ) {\n\n\t\t\tuniforms.color.value.copy( material.color );\n\t\t\tuniforms.opacity.value = material.opacity;\n\n\t\t} else if ( material.isShaderMaterial ) {\n\n\t\t\tmaterial.uniformsNeedUpdate = false; // #15581\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsCommon( uniforms, material ) {\n\n\t\tuniforms.opacity.value = material.opacity;\n\n\t\tif ( material.color ) {\n\n\t\t\tuniforms.diffuse.value.copy( material.color );\n\n\t\t}\n\n\t\tif ( material.emissive ) {\n\n\t\t\tuniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity );\n\n\t\t}\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t}\n\n\t\tif ( material.specularMap ) {\n\n\t\t\tuniforms.specularMap.value = material.specularMap;\n\n\t\t}\n\n\t\tif ( material.alphaTest > 0 ) {\n\n\t\t\tuniforms.alphaTest.value = material.alphaTest;\n\n\t\t}\n\n\t\tconst envMap = properties.get( material ).envMap;\n\n\t\tif ( envMap ) {\n\n\t\t\tuniforms.envMap.value = envMap;\n\n\t\t\tuniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) ? - 1 : 1;\n\n\t\t\tuniforms.reflectivity.value = material.reflectivity;\n\t\t\tuniforms.ior.value = material.ior;\n\t\t\tuniforms.refractionRatio.value = material.refractionRatio;\n\n\t\t\tconst maxMipLevel = properties.get( envMap ).__maxMipLevel;\n\n\t\t\tif ( maxMipLevel !== undefined ) {\n\n\t\t\t\tuniforms.maxMipLevel.value = maxMipLevel;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.lightMap ) {\n\n\t\t\tuniforms.lightMap.value = material.lightMap;\n\t\t\tuniforms.lightMapIntensity.value = material.lightMapIntensity;\n\n\t\t}\n\n\t\tif ( material.aoMap ) {\n\n\t\t\tuniforms.aoMap.value = material.aoMap;\n\t\t\tuniforms.aoMapIntensity.value = material.aoMapIntensity;\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities\n\t\t// 1. color map\n\t\t// 2. specular map\n\t\t// 3. displacementMap map\n\t\t// 4. normal map\n\t\t// 5. bump map\n\t\t// 6. roughnessMap map\n\t\t// 7. metalnessMap map\n\t\t// 8. alphaMap map\n\t\t// 9. emissiveMap map\n\t\t// 10. clearcoat map\n\t\t// 11. clearcoat normal map\n\t\t// 12. clearcoat roughnessMap map\n\t\t// 13. specular intensity map\n\t\t// 14. specular tint map\n\t\t// 15. transmission map\n\t\t// 16. thickness map\n\n\t\tlet uvScaleMap;\n\n\t\tif ( material.map ) {\n\n\t\t\tuvScaleMap = material.map;\n\n\t\t} else if ( material.specularMap ) {\n\n\t\t\tuvScaleMap = material.specularMap;\n\n\t\t} else if ( material.displacementMap ) {\n\n\t\t\tuvScaleMap = material.displacementMap;\n\n\t\t} else if ( material.normalMap ) {\n\n\t\t\tuvScaleMap = material.normalMap;\n\n\t\t} else if ( material.bumpMap ) {\n\n\t\t\tuvScaleMap = material.bumpMap;\n\n\t\t} else if ( material.roughnessMap ) {\n\n\t\t\tuvScaleMap = material.roughnessMap;\n\n\t\t} else if ( material.metalnessMap ) {\n\n\t\t\tuvScaleMap = material.metalnessMap;\n\n\t\t} else if ( material.alphaMap ) {\n\n\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t} else if ( material.emissiveMap ) {\n\n\t\t\tuvScaleMap = material.emissiveMap;\n\n\t\t} else if ( material.clearcoatMap ) {\n\n\t\t\tuvScaleMap = material.clearcoatMap;\n\n\t\t} else if ( material.clearcoatNormalMap ) {\n\n\t\t\tuvScaleMap = material.clearcoatNormalMap;\n\n\t\t} else if ( material.clearcoatRoughnessMap ) {\n\n\t\t\tuvScaleMap = material.clearcoatRoughnessMap;\n\n\t\t} else if ( material.specularIntensityMap ) {\n\n\t\t\tuvScaleMap = material.specularIntensityMap;\n\n\t\t} else if ( material.specularTintMap ) {\n\n\t\t\tuvScaleMap = material.specularTintMap;\n\n\t\t} else if ( material.transmissionMap ) {\n\n\t\t\tuvScaleMap = material.transmissionMap;\n\n\t\t} else if ( material.thicknessMap ) {\n\n\t\t\tuvScaleMap = material.thicknessMap;\n\n\t\t}\n\n\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\t// backwards compatibility\n\t\t\tif ( uvScaleMap.isWebGLRenderTarget ) {\n\n\t\t\t\tuvScaleMap = uvScaleMap.texture;\n\n\t\t\t}\n\n\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuvScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities for uv2\n\t\t// 1. ao map\n\t\t// 2. light map\n\n\t\tlet uv2ScaleMap;\n\n\t\tif ( material.aoMap ) {\n\n\t\t\tuv2ScaleMap = material.aoMap;\n\n\t\t} else if ( material.lightMap ) {\n\n\t\t\tuv2ScaleMap = material.lightMap;\n\n\t\t}\n\n\t\tif ( uv2ScaleMap !== undefined ) {\n\n\t\t\t// backwards compatibility\n\t\t\tif ( uv2ScaleMap.isWebGLRenderTarget ) {\n\n\t\t\t\tuv2ScaleMap = uv2ScaleMap.texture;\n\n\t\t\t}\n\n\t\t\tif ( uv2ScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuv2ScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uv2Transform.value.copy( uv2ScaleMap.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsLine( uniforms, material ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\n\t}\n\n\tfunction refreshUniformsDash( uniforms, material ) {\n\n\t\tuniforms.dashSize.value = material.dashSize;\n\t\tuniforms.totalSize.value = material.dashSize + material.gapSize;\n\t\tuniforms.scale.value = material.scale;\n\n\t}\n\n\tfunction refreshUniformsPoints( uniforms, material, pixelRatio, height ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\t\tuniforms.size.value = material.size * pixelRatio;\n\t\tuniforms.scale.value = height * 0.5;\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t}\n\n\t\tif ( material.alphaTest > 0 ) {\n\n\t\t\tuniforms.alphaTest.value = material.alphaTest;\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities\n\t\t// 1. color map\n\t\t// 2. alpha map\n\n\t\tlet uvScaleMap;\n\n\t\tif ( material.map ) {\n\n\t\t\tuvScaleMap = material.map;\n\n\t\t} else if ( material.alphaMap ) {\n\n\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t}\n\n\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuvScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsSprites( uniforms, material ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\t\tuniforms.rotation.value = material.rotation;\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t}\n\n\t\tif ( material.alphaTest > 0 ) {\n\n\t\t\tuniforms.alphaTest.value = material.alphaTest;\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities\n\t\t// 1. color map\n\t\t// 2. alpha map\n\n\t\tlet uvScaleMap;\n\n\t\tif ( material.map ) {\n\n\t\t\tuvScaleMap = material.map;\n\n\t\t} else if ( material.alphaMap ) {\n\n\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t}\n\n\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuvScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsLambert( uniforms, material ) {\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhong( uniforms, material ) {\n\n\t\tuniforms.specular.value.copy( material.specular );\n\t\tuniforms.shininess.value = Math.max( material.shininess, 1e-4 ); // to prevent pow( 0.0, 0.0 )\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsToon( uniforms, material ) {\n\n\t\tif ( material.gradientMap ) {\n\n\t\t\tuniforms.gradientMap.value = material.gradientMap;\n\n\t\t}\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsStandard( uniforms, material ) {\n\n\t\tuniforms.roughness.value = material.roughness;\n\t\tuniforms.metalness.value = material.metalness;\n\n\t\tif ( material.roughnessMap ) {\n\n\t\t\tuniforms.roughnessMap.value = material.roughnessMap;\n\n\t\t}\n\n\t\tif ( material.metalnessMap ) {\n\n\t\t\tuniforms.metalnessMap.value = material.metalnessMap;\n\n\t\t}\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t\tconst envMap = properties.get( material ).envMap;\n\n\t\tif ( envMap ) {\n\n\t\t\t//uniforms.envMap.value = material.envMap; // part of uniforms common\n\t\t\tuniforms.envMapIntensity.value = material.envMapIntensity;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhysical( uniforms, material, transmissionRenderTarget ) {\n\n\t\trefreshUniformsStandard( uniforms, material );\n\n\t\tuniforms.ior.value = material.ior; // also part of uniforms common\n\n\t\tif ( material.sheen > 0 ) {\n\n\t\t\tuniforms.sheenTint.value.copy( material.sheenTint ).multiplyScalar( material.sheen );\n\n\t\t\tuniforms.sheenRoughness.value = material.sheenRoughness;\n\n\t\t}\n\n\t\tif ( material.clearcoat > 0 ) {\n\n\t\t\tuniforms.clearcoat.value = material.clearcoat;\n\t\t\tuniforms.clearcoatRoughness.value = material.clearcoatRoughness;\n\n\t\t\tif ( material.clearcoatMap ) {\n\n\t\t\t\tuniforms.clearcoatMap.value = material.clearcoatMap;\n\n\t\t\t}\n\n\t\t\tif ( material.clearcoatRoughnessMap ) {\n\n\t\t\t\tuniforms.clearcoatRoughnessMap.value = material.clearcoatRoughnessMap;\n\n\t\t\t}\n\n\t\t\tif ( material.clearcoatNormalMap ) {\n\n\t\t\t\tuniforms.clearcoatNormalScale.value.copy( material.clearcoatNormalScale );\n\t\t\t\tuniforms.clearcoatNormalMap.value = material.clearcoatNormalMap;\n\n\t\t\t\tif ( material.side === BackSide ) {\n\n\t\t\t\t\tuniforms.clearcoatNormalScale.value.negate();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.transmission > 0 ) {\n\n\t\t\tuniforms.transmission.value = material.transmission;\n\t\t\tuniforms.transmissionSamplerMap.value = transmissionRenderTarget.texture;\n\t\t\tuniforms.transmissionSamplerSize.value.set( transmissionRenderTarget.width, transmissionRenderTarget.height );\n\n\t\t\tif ( material.transmissionMap ) {\n\n\t\t\t\tuniforms.transmissionMap.value = material.transmissionMap;\n\n\t\t\t}\n\n\t\t\tuniforms.thickness.value = material.thickness;\n\n\t\t\tif ( material.thicknessMap ) {\n\n\t\t\t\tuniforms.thicknessMap.value = material.thicknessMap;\n\n\t\t\t}\n\n\t\t\tuniforms.attenuationDistance.value = material.attenuationDistance;\n\t\t\tuniforms.attenuationTint.value.copy( material.attenuationTint );\n\n\t\t}\n\n\t\tuniforms.specularIntensity.value = material.specularIntensity;\n\t\tuniforms.specularTint.value.copy( material.specularTint );\n\n\t\tif ( material.specularIntensityMap ) {\n\n\t\t\tuniforms.specularIntensityMap.value = material.specularIntensityMap;\n\n\t\t}\n\n\t\tif ( material.specularTintMap ) {\n\n\t\t\tuniforms.specularTintMap.value = material.specularTintMap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsMatcap( uniforms, material ) {\n\n\t\tif ( material.matcap ) {\n\n\t\t\tuniforms.matcap.value = material.matcap;\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsDepth( uniforms, material ) {\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsDistance( uniforms, material ) {\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t\tuniforms.referencePosition.value.copy( material.referencePosition );\n\t\tuniforms.nearDistance.value = material.nearDistance;\n\t\tuniforms.farDistance.value = material.farDistance;\n\n\t}\n\n\tfunction refreshUniformsNormal( uniforms, material ) {\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\trefreshFogUniforms: refreshFogUniforms,\n\t\trefreshMaterialUniforms: refreshMaterialUniforms\n\t};\n\n}\n\nfunction createCanvasElement() {\n\n\tconst canvas = createElementNS( 'canvas' );\n\tcanvas.style.display = 'block';\n\treturn canvas;\n\n}\n\nfunction WebGLRenderer( parameters = {} ) {\n\n\tconst _canvas = parameters.canvas !== undefined ? parameters.canvas : createCanvasElement(),\n\t\t_context = parameters.context !== undefined ? parameters.context : null,\n\n\t\t_alpha = parameters.alpha !== undefined ? parameters.alpha : false,\n\t\t_depth = parameters.depth !== undefined ? parameters.depth : true,\n\t\t_stencil = parameters.stencil !== undefined ? parameters.stencil : true,\n\t\t_antialias = parameters.antialias !== undefined ? parameters.antialias : false,\n\t\t_premultipliedAlpha = parameters.premultipliedAlpha !== undefined ? parameters.premultipliedAlpha : true,\n\t\t_preserveDrawingBuffer = parameters.preserveDrawingBuffer !== undefined ? parameters.preserveDrawingBuffer : false,\n\t\t_powerPreference = parameters.powerPreference !== undefined ? parameters.powerPreference : 'default',\n\t\t_failIfMajorPerformanceCaveat = parameters.failIfMajorPerformanceCaveat !== undefined ? parameters.failIfMajorPerformanceCaveat : false;\n\n\tlet currentRenderList = null;\n\tlet currentRenderState = null;\n\n\t// render() can be called from within a callback triggered by another render.\n\t// We track this so that the nested render call gets its list and state isolated from the parent render call.\n\n\tconst renderListStack = [];\n\tconst renderStateStack = [];\n\n\t// public properties\n\n\tthis.domElement = _canvas;\n\n\t// Debug configuration container\n\tthis.debug = {\n\n\t\t/**\n\t\t * Enables error checking and reporting when shader programs are being compiled\n\t\t * @type {boolean}\n\t\t */\n\t\tcheckShaderErrors: true\n\t};\n\n\t// clearing\n\n\tthis.autoClear = true;\n\tthis.autoClearColor = true;\n\tthis.autoClearDepth = true;\n\tthis.autoClearStencil = true;\n\n\t// scene graph\n\n\tthis.sortObjects = true;\n\n\t// user-defined clipping\n\n\tthis.clippingPlanes = [];\n\tthis.localClippingEnabled = false;\n\n\t// physically based shading\n\n\tthis.gammaFactor = 2.0;\t// for backwards compatibility\n\tthis.outputEncoding = LinearEncoding;\n\n\t// physical lights\n\n\tthis.physicallyCorrectLights = false;\n\n\t// tone mapping\n\n\tthis.toneMapping = NoToneMapping;\n\tthis.toneMappingExposure = 1.0;\n\n\t// internal properties\n\n\tconst _this = this;\n\n\tlet _isContextLost = false;\n\n\t// internal state cache\n\n\tlet _currentActiveCubeFace = 0;\n\tlet _currentActiveMipmapLevel = 0;\n\tlet _currentRenderTarget = null;\n\tlet _currentMaterialId = - 1;\n\n\tlet _currentCamera = null;\n\n\tconst _currentViewport = new Vector4();\n\tconst _currentScissor = new Vector4();\n\tlet _currentScissorTest = null;\n\n\t//\n\n\tlet _width = _canvas.width;\n\tlet _height = _canvas.height;\n\n\tlet _pixelRatio = 1;\n\tlet _opaqueSort = null;\n\tlet _transparentSort = null;\n\n\tconst _viewport = new Vector4( 0, 0, _width, _height );\n\tconst _scissor = new Vector4( 0, 0, _width, _height );\n\tlet _scissorTest = false;\n\n\t//\n\n\tconst _currentDrawBuffers = [];\n\n\t// frustum\n\n\tconst _frustum = new Frustum();\n\n\t// clipping\n\n\tlet _clippingEnabled = false;\n\tlet _localClippingEnabled = false;\n\n\t// transmission\n\n\tlet _transmissionRenderTarget = null;\n\n\t// camera matrices cache\n\n\tconst _projScreenMatrix = new Matrix4();\n\n\tconst _vector3 = new Vector3();\n\n\tconst _emptyScene = { background: null, fog: null, environment: null, overrideMaterial: null, isScene: true };\n\n\tfunction getTargetPixelRatio() {\n\n\t\treturn _currentRenderTarget === null ? _pixelRatio : 1;\n\n\t}\n\n\t// initialize\n\n\tlet _gl = _context;\n\n\tfunction getContext( contextNames, contextAttributes ) {\n\n\t\tfor ( let i = 0; i < contextNames.length; i ++ ) {\n\n\t\t\tconst contextName = contextNames[ i ];\n\t\t\tconst context = _canvas.getContext( contextName, contextAttributes );\n\t\t\tif ( context !== null ) return context;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\ttry {\n\n\t\tconst contextAttributes = {\n\t\t\talpha: _alpha,\n\t\t\tdepth: _depth,\n\t\t\tstencil: _stencil,\n\t\t\tantialias: _antialias,\n\t\t\tpremultipliedAlpha: _premultipliedAlpha,\n\t\t\tpreserveDrawingBuffer: _preserveDrawingBuffer,\n\t\t\tpowerPreference: _powerPreference,\n\t\t\tfailIfMajorPerformanceCaveat: _failIfMajorPerformanceCaveat\n\t\t};\n\n\t\t// event listeners must be registered before WebGL context is created, see #12753\n\n\t\t_canvas.addEventListener( 'webglcontextlost', onContextLost, false );\n\t\t_canvas.addEventListener( 'webglcontextrestored', onContextRestore, false );\n\n\t\tif ( _gl === null ) {\n\n\t\t\tconst contextNames = [ 'webgl2', 'webgl', 'experimental-webgl' ];\n\n\t\t\tif ( _this.isWebGL1Renderer === true ) {\n\n\t\t\t\tcontextNames.shift();\n\n\t\t\t}\n\n\t\t\t_gl = getContext( contextNames, contextAttributes );\n\n\t\t\tif ( _gl === null ) {\n\n\t\t\t\tif ( getContext( contextNames ) ) {\n\n\t\t\t\t\tthrow new Error( 'Error creating WebGL context with your selected attributes.' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( 'Error creating WebGL context.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Some experimental-webgl implementations do not have getShaderPrecisionFormat\n\n\t\tif ( _gl.getShaderPrecisionFormat === undefined ) {\n\n\t\t\t_gl.getShaderPrecisionFormat = function () {\n\n\t\t\t\treturn { 'rangeMin': 1, 'rangeMax': 1, 'precision': 1 };\n\n\t\t\t};\n\n\t\t}\n\n\t} catch ( error ) {\n\n\t\tconsole.error( 'THREE.WebGLRenderer: ' + error.message );\n\t\tthrow error;\n\n\t}\n\n\tlet extensions, capabilities, state, info;\n\tlet properties, textures, cubemaps, cubeuvmaps, attributes, geometries, objects;\n\tlet programCache, materials, renderLists, renderStates, clipping, shadowMap;\n\n\tlet background, morphtargets, bufferRenderer, indexedBufferRenderer;\n\n\tlet utils, bindingStates;\n\n\tfunction initGLContext() {\n\n\t\textensions = new WebGLExtensions( _gl );\n\n\t\tcapabilities = new WebGLCapabilities( _gl, extensions, parameters );\n\n\t\textensions.init( capabilities );\n\n\t\tutils = new WebGLUtils( _gl, extensions, capabilities );\n\n\t\tstate = new WebGLState( _gl, extensions, capabilities );\n\n\t\t_currentDrawBuffers[ 0 ] = 1029;\n\n\t\tinfo = new WebGLInfo( _gl );\n\t\tproperties = new WebGLProperties();\n\t\ttextures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info );\n\t\tcubemaps = new WebGLCubeMaps( _this );\n\t\tcubeuvmaps = new WebGLCubeUVMaps( _this );\n\t\tattributes = new WebGLAttributes( _gl, capabilities );\n\t\tbindingStates = new WebGLBindingStates( _gl, extensions, attributes, capabilities );\n\t\tgeometries = new WebGLGeometries( _gl, attributes, info, bindingStates );\n\t\tobjects = new WebGLObjects( _gl, geometries, attributes, info );\n\t\tmorphtargets = new WebGLMorphtargets( _gl, capabilities, textures );\n\t\tclipping = new WebGLClipping( properties );\n\t\tprogramCache = new WebGLPrograms( _this, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping );\n\t\tmaterials = new WebGLMaterials( properties );\n\t\trenderLists = new WebGLRenderLists( properties );\n\t\trenderStates = new WebGLRenderStates( extensions, capabilities );\n\t\tbackground = new WebGLBackground( _this, cubemaps, state, objects, _premultipliedAlpha );\n\t\tshadowMap = new WebGLShadowMap( _this, objects, capabilities );\n\n\t\tbufferRenderer = new WebGLBufferRenderer( _gl, extensions, info, capabilities );\n\t\tindexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info, capabilities );\n\n\t\tinfo.programs = programCache.programs;\n\n\t\t_this.capabilities = capabilities;\n\t\t_this.extensions = extensions;\n\t\t_this.properties = properties;\n\t\t_this.renderLists = renderLists;\n\t\t_this.shadowMap = shadowMap;\n\t\t_this.state = state;\n\t\t_this.info = info;\n\n\t}\n\n\tinitGLContext();\n\n\t// xr\n\n\tconst xr = new WebXRManager( _this, _gl );\n\n\tthis.xr = xr;\n\n\t// API\n\n\tthis.getContext = function () {\n\n\t\treturn _gl;\n\n\t};\n\n\tthis.getContextAttributes = function () {\n\n\t\treturn _gl.getContextAttributes();\n\n\t};\n\n\tthis.forceContextLoss = function () {\n\n\t\tconst extension = extensions.get( 'WEBGL_lose_context' );\n\t\tif ( extension ) extension.loseContext();\n\n\t};\n\n\tthis.forceContextRestore = function () {\n\n\t\tconst extension = extensions.get( 'WEBGL_lose_context' );\n\t\tif ( extension ) extension.restoreContext();\n\n\t};\n\n\tthis.getPixelRatio = function () {\n\n\t\treturn _pixelRatio;\n\n\t};\n\n\tthis.setPixelRatio = function ( value ) {\n\n\t\tif ( value === undefined ) return;\n\n\t\t_pixelRatio = value;\n\n\t\tthis.setSize( _width, _height, false );\n\n\t};\n\n\tthis.getSize = function ( target ) {\n\n\t\treturn target.set( _width, _height );\n\n\t};\n\n\tthis.setSize = function ( width, height, updateStyle ) {\n\n\t\tif ( xr.isPresenting ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Can\\'t change size while VR device is presenting.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\t_width = width;\n\t\t_height = height;\n\n\t\t_canvas.width = Math.floor( width * _pixelRatio );\n\t\t_canvas.height = Math.floor( height * _pixelRatio );\n\n\t\tif ( updateStyle !== false ) {\n\n\t\t\t_canvas.style.width = width + 'px';\n\t\t\t_canvas.style.height = height + 'px';\n\n\t\t}\n\n\t\tthis.setViewport( 0, 0, width, height );\n\n\t};\n\n\tthis.getDrawingBufferSize = function ( target ) {\n\n\t\treturn target.set( _width * _pixelRatio, _height * _pixelRatio ).floor();\n\n\t};\n\n\tthis.setDrawingBufferSize = function ( width, height, pixelRatio ) {\n\n\t\t_width = width;\n\t\t_height = height;\n\n\t\t_pixelRatio = pixelRatio;\n\n\t\t_canvas.width = Math.floor( width * pixelRatio );\n\t\t_canvas.height = Math.floor( height * pixelRatio );\n\n\t\tthis.setViewport( 0, 0, width, height );\n\n\t};\n\n\tthis.getCurrentViewport = function ( target ) {\n\n\t\treturn target.copy( _currentViewport );\n\n\t};\n\n\tthis.getViewport = function ( target ) {\n\n\t\treturn target.copy( _viewport );\n\n\t};\n\n\tthis.setViewport = function ( x, y, width, height ) {\n\n\t\tif ( x.isVector4 ) {\n\n\t\t\t_viewport.set( x.x, x.y, x.z, x.w );\n\n\t\t} else {\n\n\t\t\t_viewport.set( x, y, width, height );\n\n\t\t}\n\n\t\tstate.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor() );\n\n\t};\n\n\tthis.getScissor = function ( target ) {\n\n\t\treturn target.copy( _scissor );\n\n\t};\n\n\tthis.setScissor = function ( x, y, width, height ) {\n\n\t\tif ( x.isVector4 ) {\n\n\t\t\t_scissor.set( x.x, x.y, x.z, x.w );\n\n\t\t} else {\n\n\t\t\t_scissor.set( x, y, width, height );\n\n\t\t}\n\n\t\tstate.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor() );\n\n\t};\n\n\tthis.getScissorTest = function () {\n\n\t\treturn _scissorTest;\n\n\t};\n\n\tthis.setScissorTest = function ( boolean ) {\n\n\t\tstate.setScissorTest( _scissorTest = boolean );\n\n\t};\n\n\tthis.setOpaqueSort = function ( method ) {\n\n\t\t_opaqueSort = method;\n\n\t};\n\n\tthis.setTransparentSort = function ( method ) {\n\n\t\t_transparentSort = method;\n\n\t};\n\n\t// Clearing\n\n\tthis.getClearColor = function ( target ) {\n\n\t\treturn target.copy( background.getClearColor() );\n\n\t};\n\n\tthis.setClearColor = function () {\n\n\t\tbackground.setClearColor.apply( background, arguments );\n\n\t};\n\n\tthis.getClearAlpha = function () {\n\n\t\treturn background.getClearAlpha();\n\n\t};\n\n\tthis.setClearAlpha = function () {\n\n\t\tbackground.setClearAlpha.apply( background, arguments );\n\n\t};\n\n\tthis.clear = function ( color, depth, stencil ) {\n\n\t\tlet bits = 0;\n\n\t\tif ( color === undefined || color ) bits |= 16384;\n\t\tif ( depth === undefined || depth ) bits |= 256;\n\t\tif ( stencil === undefined || stencil ) bits |= 1024;\n\n\t\t_gl.clear( bits );\n\n\t};\n\n\tthis.clearColor = function () {\n\n\t\tthis.clear( true, false, false );\n\n\t};\n\n\tthis.clearDepth = function () {\n\n\t\tthis.clear( false, true, false );\n\n\t};\n\n\tthis.clearStencil = function () {\n\n\t\tthis.clear( false, false, true );\n\n\t};\n\n\t//\n\n\tthis.dispose = function () {\n\n\t\t_canvas.removeEventListener( 'webglcontextlost', onContextLost, false );\n\t\t_canvas.removeEventListener( 'webglcontextrestored', onContextRestore, false );\n\n\t\trenderLists.dispose();\n\t\trenderStates.dispose();\n\t\tproperties.dispose();\n\t\tcubemaps.dispose();\n\t\tcubeuvmaps.dispose();\n\t\tobjects.dispose();\n\t\tbindingStates.dispose();\n\n\t\txr.dispose();\n\n\t\txr.removeEventListener( 'sessionstart', onXRSessionStart );\n\t\txr.removeEventListener( 'sessionend', onXRSessionEnd );\n\n\t\tif ( _transmissionRenderTarget ) {\n\n\t\t\t_transmissionRenderTarget.dispose();\n\t\t\t_transmissionRenderTarget = null;\n\n\t\t}\n\n\t\tanimation.stop();\n\n\t};\n\n\t// Events\n\n\tfunction onContextLost( event ) {\n\n\t\tevent.preventDefault();\n\n\t\tconsole.log( 'THREE.WebGLRenderer: Context Lost.' );\n\n\t\t_isContextLost = true;\n\n\t}\n\n\tfunction onContextRestore( /* event */ ) {\n\n\t\tconsole.log( 'THREE.WebGLRenderer: Context Restored.' );\n\n\t\t_isContextLost = false;\n\n\t\tconst infoAutoReset = info.autoReset;\n\t\tconst shadowMapEnabled = shadowMap.enabled;\n\t\tconst shadowMapAutoUpdate = shadowMap.autoUpdate;\n\t\tconst shadowMapNeedsUpdate = shadowMap.needsUpdate;\n\t\tconst shadowMapType = shadowMap.type;\n\n\t\tinitGLContext();\n\n\t\tinfo.autoReset = infoAutoReset;\n\t\tshadowMap.enabled = shadowMapEnabled;\n\t\tshadowMap.autoUpdate = shadowMapAutoUpdate;\n\t\tshadowMap.needsUpdate = shadowMapNeedsUpdate;\n\t\tshadowMap.type = shadowMapType;\n\n\t}\n\n\tfunction onMaterialDispose( event ) {\n\n\t\tconst material = event.target;\n\n\t\tmaterial.removeEventListener( 'dispose', onMaterialDispose );\n\n\t\tdeallocateMaterial( material );\n\n\t}\n\n\t// Buffer deallocation\n\n\tfunction deallocateMaterial( material ) {\n\n\t\treleaseMaterialProgramReferences( material );\n\n\t\tproperties.remove( material );\n\n\t}\n\n\n\tfunction releaseMaterialProgramReferences( material ) {\n\n\t\tconst programs = properties.get( material ).programs;\n\n\t\tif ( programs !== undefined ) {\n\n\t\t\tprograms.forEach( function ( program ) {\n\n\t\t\t\tprogramCache.releaseProgram( program );\n\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n\t// Buffer rendering\n\n\tfunction renderObjectImmediate( object, program ) {\n\n\t\tobject.render( function ( object ) {\n\n\t\t\t_this.renderBufferImmediate( object, program );\n\n\t\t} );\n\n\t}\n\n\tthis.renderBufferImmediate = function ( object, program ) {\n\n\t\tbindingStates.initAttributes();\n\n\t\tconst buffers = properties.get( object );\n\n\t\tif ( object.hasPositions && ! buffers.position ) buffers.position = _gl.createBuffer();\n\t\tif ( object.hasNormals && ! buffers.normal ) buffers.normal = _gl.createBuffer();\n\t\tif ( object.hasUvs && ! buffers.uv ) buffers.uv = _gl.createBuffer();\n\t\tif ( object.hasColors && ! buffers.color ) buffers.color = _gl.createBuffer();\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tif ( object.hasPositions ) {\n\n\t\t\t_gl.bindBuffer( 34962, buffers.position );\n\t\t\t_gl.bufferData( 34962, object.positionArray, 35048 );\n\n\t\t\tbindingStates.enableAttribute( programAttributes.position.location );\n\t\t\t_gl.vertexAttribPointer( programAttributes.position.location, 3, 5126, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasNormals ) {\n\n\t\t\t_gl.bindBuffer( 34962, buffers.normal );\n\t\t\t_gl.bufferData( 34962, object.normalArray, 35048 );\n\n\t\t\tbindingStates.enableAttribute( programAttributes.normal.location );\n\t\t\t_gl.vertexAttribPointer( programAttributes.normal.location, 3, 5126, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasUvs ) {\n\n\t\t\t_gl.bindBuffer( 34962, buffers.uv );\n\t\t\t_gl.bufferData( 34962, object.uvArray, 35048 );\n\n\t\t\tbindingStates.enableAttribute( programAttributes.uv.location );\n\t\t\t_gl.vertexAttribPointer( programAttributes.uv.location, 2, 5126, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasColors ) {\n\n\t\t\t_gl.bindBuffer( 34962, buffers.color );\n\t\t\t_gl.bufferData( 34962, object.colorArray, 35048 );\n\n\t\t\tbindingStates.enableAttribute( programAttributes.color.location );\n\t\t\t_gl.vertexAttribPointer( programAttributes.color.location, 3, 5126, false, 0, 0 );\n\n\t\t}\n\n\t\tbindingStates.disableUnusedAttributes();\n\n\t\t_gl.drawArrays( 4, 0, object.count );\n\n\t\tobject.count = 0;\n\n\t};\n\n\tthis.renderBufferDirect = function ( camera, scene, geometry, material, object, group ) {\n\n\t\tif ( scene === null ) scene = _emptyScene; // renderBufferDirect second parameter used to be fog (could be null)\n\n\t\tconst frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );\n\n\t\tconst program = setProgram( camera, scene, geometry, material, object );\n\n\t\tstate.setMaterial( material, frontFaceCW );\n\n\t\t//\n\n\t\tlet index = geometry.index;\n\t\tconst position = geometry.attributes.position;\n\n\t\t//\n\n\t\tif ( index === null ) {\n\n\t\t\tif ( position === undefined || position.count === 0 ) return;\n\n\t\t} else if ( index.count === 0 ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t//\n\n\t\tlet rangeFactor = 1;\n\n\t\tif ( material.wireframe === true ) {\n\n\t\t\tindex = geometries.getWireframeAttribute( geometry );\n\t\t\trangeFactor = 2;\n\n\t\t}\n\n\t\tbindingStates.setup( object, material, program, geometry, index );\n\n\t\tlet attribute;\n\t\tlet renderer = bufferRenderer;\n\n\t\tif ( index !== null ) {\n\n\t\t\tattribute = attributes.get( index );\n\n\t\t\trenderer = indexedBufferRenderer;\n\t\t\trenderer.setIndex( attribute );\n\n\t\t}\n\n\t\t//\n\n\t\tconst dataCount = ( index !== null ) ? index.count : position.count;\n\n\t\tconst rangeStart = geometry.drawRange.start * rangeFactor;\n\t\tconst rangeCount = geometry.drawRange.count * rangeFactor;\n\n\t\tconst groupStart = group !== null ? group.start * rangeFactor : 0;\n\t\tconst groupCount = group !== null ? group.count * rangeFactor : Infinity;\n\n\t\tconst drawStart = Math.max( rangeStart, groupStart );\n\t\tconst drawEnd = Math.min( dataCount, rangeStart + rangeCount, groupStart + groupCount ) - 1;\n\n\t\tconst drawCount = Math.max( 0, drawEnd - drawStart + 1 );\n\n\t\tif ( drawCount === 0 ) return;\n\n\t\t//\n\n\t\tif ( object.isMesh ) {\n\n\t\t\tif ( material.wireframe === true ) {\n\n\t\t\t\tstate.setLineWidth( material.wireframeLinewidth * getTargetPixelRatio() );\n\t\t\t\trenderer.setMode( 1 );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.setMode( 4 );\n\n\t\t\t}\n\n\t\t} else if ( object.isLine ) {\n\n\t\t\tlet lineWidth = material.linewidth;\n\n\t\t\tif ( lineWidth === undefined ) lineWidth = 1; // Not using Line*Material\n\n\t\t\tstate.setLineWidth( lineWidth * getTargetPixelRatio() );\n\n\t\t\tif ( object.isLineSegments ) {\n\n\t\t\t\trenderer.setMode( 1 );\n\n\t\t\t} else if ( object.isLineLoop ) {\n\n\t\t\t\trenderer.setMode( 2 );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.setMode( 3 );\n\n\t\t\t}\n\n\t\t} else if ( object.isPoints ) {\n\n\t\t\trenderer.setMode( 0 );\n\n\t\t} else if ( object.isSprite ) {\n\n\t\t\trenderer.setMode( 4 );\n\n\t\t}\n\n\t\tif ( object.isInstancedMesh ) {\n\n\t\t\trenderer.renderInstances( drawStart, drawCount, object.count );\n\n\t\t} else if ( geometry.isInstancedBufferGeometry ) {\n\n\t\t\tconst instanceCount = Math.min( geometry.instanceCount, geometry._maxInstanceCount );\n\n\t\t\trenderer.renderInstances( drawStart, drawCount, instanceCount );\n\n\t\t} else {\n\n\t\t\trenderer.render( drawStart, drawCount );\n\n\t\t}\n\n\t};\n\n\t// Compile\n\n\tthis.compile = function ( scene, camera ) {\n\n\t\tcurrentRenderState = renderStates.get( scene );\n\t\tcurrentRenderState.init();\n\n\t\trenderStateStack.push( currentRenderState );\n\n\t\tscene.traverseVisible( function ( object ) {\n\n\t\t\tif ( object.isLight && object.layers.test( camera.layers ) ) {\n\n\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t\tcurrentRenderState.setupLights( _this.physicallyCorrectLights );\n\n\t\tscene.traverse( function ( object ) {\n\n\t\t\tconst material = object.material;\n\n\t\t\tif ( material ) {\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tfor ( let i = 0; i < material.length; i ++ ) {\n\n\t\t\t\t\t\tconst material2 = material[ i ];\n\n\t\t\t\t\t\tgetProgram( material2, scene, object );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgetProgram( material, scene, object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t\trenderStateStack.pop();\n\t\tcurrentRenderState = null;\n\n\t};\n\n\t// Animation Loop\n\n\tlet onAnimationFrameCallback = null;\n\n\tfunction onAnimationFrame( time ) {\n\n\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time );\n\n\t}\n\n\tfunction onXRSessionStart() {\n\n\t\tanimation.stop();\n\n\t}\n\n\tfunction onXRSessionEnd() {\n\n\t\tanimation.start();\n\n\t}\n\n\tconst animation = new WebGLAnimation();\n\tanimation.setAnimationLoop( onAnimationFrame );\n\n\tif ( typeof window !== 'undefined' ) animation.setContext( window );\n\n\tthis.setAnimationLoop = function ( callback ) {\n\n\t\tonAnimationFrameCallback = callback;\n\t\txr.setAnimationLoop( callback );\n\n\t\t( callback === null ) ? animation.stop() : animation.start();\n\n\t};\n\n\txr.addEventListener( 'sessionstart', onXRSessionStart );\n\txr.addEventListener( 'sessionend', onXRSessionEnd );\n\n\t// Rendering\n\n\tthis.render = function ( scene, camera ) {\n\n\t\tif ( camera !== undefined && camera.isCamera !== true ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( _isContextLost === true ) return;\n\n\t\t// update scene graph\n\n\t\tif ( scene.autoUpdate === true ) scene.updateMatrixWorld();\n\n\t\t// update camera matrices and frustum\n\n\t\tif ( camera.parent === null ) camera.updateMatrixWorld();\n\n\t\tif ( xr.enabled === true && xr.isPresenting === true ) {\n\n\t\t\tif ( xr.cameraAutoUpdate === true ) xr.updateCamera( camera );\n\n\t\t\tcamera = xr.getCamera(); // use XR camera for rendering\n\n\t\t}\n\n\t\t//\n\t\tif ( scene.isScene === true ) scene.onBeforeRender( _this, scene, camera, _currentRenderTarget );\n\n\t\tcurrentRenderState = renderStates.get( scene, renderStateStack.length );\n\t\tcurrentRenderState.init();\n\n\t\trenderStateStack.push( currentRenderState );\n\n\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\t_frustum.setFromProjectionMatrix( _projScreenMatrix );\n\n\t\t_localClippingEnabled = this.localClippingEnabled;\n\t\t_clippingEnabled = clipping.init( this.clippingPlanes, _localClippingEnabled, camera );\n\n\t\tcurrentRenderList = renderLists.get( scene, renderListStack.length );\n\t\tcurrentRenderList.init();\n\n\t\trenderListStack.push( currentRenderList );\n\n\t\tprojectObject( scene, camera, 0, _this.sortObjects );\n\n\t\tcurrentRenderList.finish();\n\n\t\tif ( _this.sortObjects === true ) {\n\n\t\t\tcurrentRenderList.sort( _opaqueSort, _transparentSort );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( _clippingEnabled === true ) clipping.beginShadows();\n\n\t\tconst shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\tshadowMap.render( shadowsArray, scene, camera );\n\n\t\tif ( _clippingEnabled === true ) clipping.endShadows();\n\n\t\t//\n\n\t\tif ( this.info.autoReset === true ) this.info.reset();\n\n\t\t//\n\n\t\tbackground.render( currentRenderList, scene );\n\n\t\t// render scene\n\n\t\tcurrentRenderState.setupLights( _this.physicallyCorrectLights );\n\n\t\tif ( camera.isArrayCamera ) {\n\n\t\t\tconst cameras = camera.cameras;\n\n\t\t\tfor ( let i = 0, l = cameras.length; i < l; i ++ ) {\n\n\t\t\t\tconst camera2 = cameras[ i ];\n\n\t\t\t\trenderScene( currentRenderList, scene, camera2, camera2.viewport );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\trenderScene( currentRenderList, scene, camera );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( _currentRenderTarget !== null ) {\n\n\t\t\t// resolve multisample renderbuffers to a single-sample texture if necessary\n\n\t\t\ttextures.updateMultisampleRenderTarget( _currentRenderTarget );\n\n\t\t\t// Generate mipmap if we're using any kind of mipmap filtering\n\n\t\t\ttextures.updateRenderTargetMipmap( _currentRenderTarget );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( scene.isScene === true ) scene.onAfterRender( _this, scene, camera );\n\n\t\t// Ensure depth buffer writing is enabled so it can be cleared on next render\n\n\t\tstate.buffers.depth.setTest( true );\n\t\tstate.buffers.depth.setMask( true );\n\t\tstate.buffers.color.setMask( true );\n\n\t\tstate.setPolygonOffset( false );\n\n\t\t// _gl.finish();\n\n\t\tbindingStates.resetDefaultState();\n\t\t_currentMaterialId = - 1;\n\t\t_currentCamera = null;\n\n\t\trenderStateStack.pop();\n\n\t\tif ( renderStateStack.length > 0 ) {\n\n\t\t\tcurrentRenderState = renderStateStack[ renderStateStack.length - 1 ];\n\n\t\t} else {\n\n\t\t\tcurrentRenderState = null;\n\n\t\t}\n\n\t\trenderListStack.pop();\n\n\t\tif ( renderListStack.length > 0 ) {\n\n\t\t\tcurrentRenderList = renderListStack[ renderListStack.length - 1 ];\n\n\t\t} else {\n\n\t\t\tcurrentRenderList = null;\n\n\t\t}\n\n\t};\n\n\tfunction projectObject( object, camera, groupOrder, sortObjects ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tconst visible = object.layers.test( camera.layers );\n\n\t\tif ( visible ) {\n\n\t\t\tif ( object.isGroup ) {\n\n\t\t\t\tgroupOrder = object.renderOrder;\n\n\t\t\t} else if ( object.isLOD ) {\n\n\t\t\t\tif ( object.autoUpdate === true ) object.update( camera );\n\n\t\t\t} else if ( object.isLight ) {\n\n\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsSprite( object ) ) {\n\n\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst geometry = objects.update( object );\n\t\t\t\t\tconst material = object.material;\n\n\t\t\t\t\tif ( material.visible ) {\n\n\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isImmediateRenderObject ) {\n\n\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t}\n\n\t\t\t\tcurrentRenderList.push( object, null, object.material, groupOrder, _vector3.z, null );\n\n\t\t\t} else if ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\t\t\t// update skeleton only once in a frame\n\n\t\t\t\t\tif ( object.skeleton.frame !== info.render.frame ) {\n\n\t\t\t\t\t\tobject.skeleton.update();\n\t\t\t\t\t\tobject.skeleton.frame = info.render.frame;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) {\n\n\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst geometry = objects.update( object );\n\t\t\t\t\tconst material = object.material;\n\n\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\t\tcurrentRenderList.push( object, geometry, groupMaterial, groupOrder, _vector3.z, group );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tprojectObject( children[ i ], camera, groupOrder, sortObjects );\n\n\t\t}\n\n\t}\n\n\tfunction renderScene( currentRenderList, scene, camera, viewport ) {\n\n\t\tconst opaqueObjects = currentRenderList.opaque;\n\t\tconst transmissiveObjects = currentRenderList.transmissive;\n\t\tconst transparentObjects = currentRenderList.transparent;\n\n\t\tcurrentRenderState.setupLightsView( camera );\n\n\t\tif ( transmissiveObjects.length > 0 ) renderTransmissionPass( opaqueObjects, scene, camera );\n\n\t\tif ( viewport ) state.viewport( _currentViewport.copy( viewport ) );\n\n\t\tif ( opaqueObjects.length > 0 ) renderObjects( opaqueObjects, scene, camera );\n\t\tif ( transmissiveObjects.length > 0 ) renderObjects( transmissiveObjects, scene, camera );\n\t\tif ( transparentObjects.length > 0 ) renderObjects( transparentObjects, scene, camera );\n\n\t}\n\n\tfunction renderTransmissionPass( opaqueObjects, scene, camera ) {\n\n\t\tif ( _transmissionRenderTarget === null ) {\n\n\t\t\tconst needsAntialias = _antialias === true && capabilities.isWebGL2 === true;\n\t\t\tconst renderTargetType = needsAntialias ? WebGLMultisampleRenderTarget : WebGLRenderTarget;\n\n\t\t\t_transmissionRenderTarget = new renderTargetType( 1024, 1024, {\n\t\t\t\tgenerateMipmaps: true,\n\t\t\t\ttype: utils.convert( HalfFloatType ) !== null ? HalfFloatType : UnsignedByteType,\n\t\t\t\tminFilter: LinearMipmapLinearFilter,\n\t\t\t\tmagFilter: NearestFilter,\n\t\t\t\twrapS: ClampToEdgeWrapping,\n\t\t\t\twrapT: ClampToEdgeWrapping\n\t\t\t} );\n\n\t\t}\n\n\t\tconst currentRenderTarget = _this.getRenderTarget();\n\t\t_this.setRenderTarget( _transmissionRenderTarget );\n\t\t_this.clear();\n\n\t\t// Turn off the features which can affect the frag color for opaque objects pass.\n\t\t// Otherwise they are applied twice in opaque objects pass and transmission objects pass.\n\t\tconst currentToneMapping = _this.toneMapping;\n\t\t_this.toneMapping = NoToneMapping;\n\n\t\trenderObjects( opaqueObjects, scene, camera );\n\n\t\t_this.toneMapping = currentToneMapping;\n\n\t\ttextures.updateMultisampleRenderTarget( _transmissionRenderTarget );\n\t\ttextures.updateRenderTargetMipmap( _transmissionRenderTarget );\n\n\t\t_this.setRenderTarget( currentRenderTarget );\n\n\t}\n\n\tfunction renderObjects( renderList, scene, camera ) {\n\n\t\tconst overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null;\n\n\t\tfor ( let i = 0, l = renderList.length; i < l; i ++ ) {\n\n\t\t\tconst renderItem = renderList[ i ];\n\n\t\t\tconst object = renderItem.object;\n\t\t\tconst geometry = renderItem.geometry;\n\t\t\tconst material = overrideMaterial === null ? renderItem.material : overrideMaterial;\n\t\t\tconst group = renderItem.group;\n\n\t\t\tif ( object.layers.test( camera.layers ) ) {\n\n\t\t\t\trenderObject( object, scene, camera, geometry, material, group );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction renderObject( object, scene, camera, geometry, material, group ) {\n\n\t\tobject.onBeforeRender( _this, scene, camera, geometry, material, group );\n\n\t\tobject.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );\n\t\tobject.normalMatrix.getNormalMatrix( object.modelViewMatrix );\n\n\t\tmaterial.onBeforeRender( _this, scene, camera, geometry, object, group );\n\n\t\tif ( object.isImmediateRenderObject ) {\n\n\t\t\tconst program = setProgram( camera, scene, geometry, material, object );\n\n\t\t\tstate.setMaterial( material );\n\n\t\t\tbindingStates.reset();\n\n\t\t\trenderObjectImmediate( object, program );\n\n\t\t} else {\n\n\t\t\tif ( material.transparent === true && material.side === DoubleSide ) {\n\n\t\t\t\tmaterial.side = BackSide;\n\t\t\t\tmaterial.needsUpdate = true;\n\t\t\t\t_this.renderBufferDirect( camera, scene, geometry, material, object, group );\n\n\t\t\t\tmaterial.side = FrontSide;\n\t\t\t\tmaterial.needsUpdate = true;\n\t\t\t\t_this.renderBufferDirect( camera, scene, geometry, material, object, group );\n\n\t\t\t\tmaterial.side = DoubleSide;\n\n\t\t\t} else {\n\n\t\t\t\t_this.renderBufferDirect( camera, scene, geometry, material, object, group );\n\n\t\t\t}\n\n\t\t}\n\n\t\tobject.onAfterRender( _this, scene, camera, geometry, material, group );\n\n\t}\n\n\tfunction getProgram( material, scene, object ) {\n\n\t\tif ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...\n\n\t\tconst materialProperties = properties.get( material );\n\n\t\tconst lights = currentRenderState.state.lights;\n\t\tconst shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\tconst lightsStateVersion = lights.state.version;\n\n\t\tconst parameters = programCache.getParameters( material, lights.state, shadowsArray, scene, object );\n\t\tconst programCacheKey = programCache.getProgramCacheKey( parameters );\n\n\t\tlet programs = materialProperties.programs;\n\n\t\t// always update environment and fog - changing these trigger an getProgram call, but it's possible that the program doesn't change\n\n\t\tmaterialProperties.environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\tmaterialProperties.fog = scene.fog;\n\t\tmaterialProperties.envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || materialProperties.environment );\n\n\t\tif ( programs === undefined ) {\n\n\t\t\t// new material\n\n\t\t\tmaterial.addEventListener( 'dispose', onMaterialDispose );\n\n\t\t\tprograms = new Map();\n\t\t\tmaterialProperties.programs = programs;\n\n\t\t}\n\n\t\tlet program = programs.get( programCacheKey );\n\n\t\tif ( program !== undefined ) {\n\n\t\t\t// early out if program and light state is identical\n\n\t\t\tif ( materialProperties.currentProgram === program && materialProperties.lightsStateVersion === lightsStateVersion ) {\n\n\t\t\t\tupdateCommonMaterialProperties( material, parameters );\n\n\t\t\t\treturn program;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tparameters.uniforms = programCache.getUniforms( material );\n\n\t\t\tmaterial.onBuild( parameters, _this );\n\n\t\t\tmaterial.onBeforeCompile( parameters, _this );\n\n\t\t\tprogram = programCache.acquireProgram( parameters, programCacheKey );\n\t\t\tprograms.set( programCacheKey, program );\n\n\t\t\tmaterialProperties.uniforms = parameters.uniforms;\n\n\t\t}\n\n\t\tconst uniforms = materialProperties.uniforms;\n\n\t\tif ( ( ! material.isShaderMaterial && ! material.isRawShaderMaterial ) || material.clipping === true ) {\n\n\t\t\tuniforms.clippingPlanes = clipping.uniform;\n\n\t\t}\n\n\t\tupdateCommonMaterialProperties( material, parameters );\n\n\t\t// store the light setup it was created for\n\n\t\tmaterialProperties.needsLights = materialNeedsLights( material );\n\t\tmaterialProperties.lightsStateVersion = lightsStateVersion;\n\n\t\tif ( materialProperties.needsLights ) {\n\n\t\t\t// wire up the material to this renderer's lighting state\n\n\t\t\tuniforms.ambientLightColor.value = lights.state.ambient;\n\t\t\tuniforms.lightProbe.value = lights.state.probe;\n\t\t\tuniforms.directionalLights.value = lights.state.directional;\n\t\t\tuniforms.directionalLightShadows.value = lights.state.directionalShadow;\n\t\t\tuniforms.spotLights.value = lights.state.spot;\n\t\t\tuniforms.spotLightShadows.value = lights.state.spotShadow;\n\t\t\tuniforms.rectAreaLights.value = lights.state.rectArea;\n\t\t\tuniforms.ltc_1.value = lights.state.rectAreaLTC1;\n\t\t\tuniforms.ltc_2.value = lights.state.rectAreaLTC2;\n\t\t\tuniforms.pointLights.value = lights.state.point;\n\t\t\tuniforms.pointLightShadows.value = lights.state.pointShadow;\n\t\t\tuniforms.hemisphereLights.value = lights.state.hemi;\n\n\t\t\tuniforms.directionalShadowMap.value = lights.state.directionalShadowMap;\n\t\t\tuniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix;\n\t\t\tuniforms.spotShadowMap.value = lights.state.spotShadowMap;\n\t\t\tuniforms.spotShadowMatrix.value = lights.state.spotShadowMatrix;\n\t\t\tuniforms.pointShadowMap.value = lights.state.pointShadowMap;\n\t\t\tuniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix;\n\t\t\t// TODO (abelnation): add area lights shadow info to uniforms\n\n\t\t}\n\n\t\tconst progUniforms = program.getUniforms();\n\t\tconst uniformsList = WebGLUniforms.seqWithValue( progUniforms.seq, uniforms );\n\n\t\tmaterialProperties.currentProgram = program;\n\t\tmaterialProperties.uniformsList = uniformsList;\n\n\t\treturn program;\n\n\t}\n\n\tfunction updateCommonMaterialProperties( material, parameters ) {\n\n\t\tconst materialProperties = properties.get( material );\n\n\t\tmaterialProperties.outputEncoding = parameters.outputEncoding;\n\t\tmaterialProperties.instancing = parameters.instancing;\n\t\tmaterialProperties.skinning = parameters.skinning;\n\t\tmaterialProperties.morphTargets = parameters.morphTargets;\n\t\tmaterialProperties.morphNormals = parameters.morphNormals;\n\t\tmaterialProperties.morphTargetsCount = parameters.morphTargetsCount;\n\t\tmaterialProperties.numClippingPlanes = parameters.numClippingPlanes;\n\t\tmaterialProperties.numIntersection = parameters.numClipIntersection;\n\t\tmaterialProperties.vertexAlphas = parameters.vertexAlphas;\n\t\tmaterialProperties.vertexTangents = parameters.vertexTangents;\n\n\t}\n\n\tfunction setProgram( camera, scene, geometry, material, object ) {\n\n\t\tif ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...\n\n\t\ttextures.resetTextureUnits();\n\n\t\tconst fog = scene.fog;\n\t\tconst environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\tconst encoding = ( _currentRenderTarget === null ) ? _this.outputEncoding : _currentRenderTarget.texture.encoding;\n\t\tconst envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || environment );\n\t\tconst vertexAlphas = material.vertexColors === true && !! geometry && !! geometry.attributes.color && geometry.attributes.color.itemSize === 4;\n\t\tconst vertexTangents = !! material.normalMap && !! geometry && !! geometry.attributes.tangent;\n\t\tconst morphTargets = !! geometry && !! geometry.morphAttributes.position;\n\t\tconst morphNormals = !! geometry && !! geometry.morphAttributes.normal;\n\t\tconst morphTargetsCount = ( !! geometry && !! geometry.morphAttributes.position ) ? geometry.morphAttributes.position.length : 0;\n\n\t\tconst materialProperties = properties.get( material );\n\t\tconst lights = currentRenderState.state.lights;\n\n\t\tif ( _clippingEnabled === true ) {\n\n\t\t\tif ( _localClippingEnabled === true || camera !== _currentCamera ) {\n\n\t\t\t\tconst useCache =\n\t\t\t\t\tcamera === _currentCamera &&\n\t\t\t\t\tmaterial.id === _currentMaterialId;\n\n\t\t\t\t// we might want to call this function with some ClippingGroup\n\t\t\t\t// object instead of the material, once it becomes feasible\n\t\t\t\t// (#8465, #8379)\n\t\t\t\tclipping.setState( material, camera, useCache );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tlet needsProgramChange = false;\n\n\t\tif ( material.version === materialProperties.__version ) {\n\n\t\t\tif ( materialProperties.needsLights && ( materialProperties.lightsStateVersion !== lights.state.version ) ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.outputEncoding !== encoding ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( object.isInstancedMesh && materialProperties.instancing === false ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( ! object.isInstancedMesh && materialProperties.instancing === true ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( object.isSkinnedMesh && materialProperties.skinning === false ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( ! object.isSkinnedMesh && materialProperties.skinning === true ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.envMap !== envMap ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( material.fog && materialProperties.fog !== fog ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.numClippingPlanes !== undefined &&\n\t\t\t\t( materialProperties.numClippingPlanes !== clipping.numPlanes ||\n\t\t\t\tmaterialProperties.numIntersection !== clipping.numIntersection ) ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.vertexAlphas !== vertexAlphas ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.vertexTangents !== vertexTangents ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.morphTargets !== morphTargets ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.morphNormals !== morphNormals ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( capabilities.isWebGL2 === true && materialProperties.morphTargetsCount !== morphTargetsCount ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tneedsProgramChange = true;\n\t\t\tmaterialProperties.__version = material.version;\n\n\t\t}\n\n\t\t//\n\n\t\tlet program = materialProperties.currentProgram;\n\n\t\tif ( needsProgramChange === true ) {\n\n\t\t\tprogram = getProgram( material, scene, object );\n\n\t\t}\n\n\t\tlet refreshProgram = false;\n\t\tlet refreshMaterial = false;\n\t\tlet refreshLights = false;\n\n\t\tconst p_uniforms = program.getUniforms(),\n\t\t\tm_uniforms = materialProperties.uniforms;\n\n\t\tif ( state.useProgram( program.program ) ) {\n\n\t\t\trefreshProgram = true;\n\t\t\trefreshMaterial = true;\n\t\t\trefreshLights = true;\n\n\t\t}\n\n\t\tif ( material.id !== _currentMaterialId ) {\n\n\t\t\t_currentMaterialId = material.id;\n\n\t\t\trefreshMaterial = true;\n\n\t\t}\n\n\t\tif ( refreshProgram || _currentCamera !== camera ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix );\n\n\t\t\tif ( capabilities.logarithmicDepthBuffer ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'logDepthBufFC',\n\t\t\t\t\t2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) );\n\n\t\t\t}\n\n\t\t\tif ( _currentCamera !== camera ) {\n\n\t\t\t\t_currentCamera = camera;\n\n\t\t\t\t// lighting uniforms depend on the camera so enforce an update\n\t\t\t\t// now, in case this material supports lights - or later, when\n\t\t\t\t// the next material that does gets activated:\n\n\t\t\t\trefreshMaterial = true;\t\t// set to true on material change\n\t\t\t\trefreshLights = true;\t\t// remains set until update done\n\n\t\t\t}\n\n\t\t\t// load material specific uniforms\n\t\t\t// (shader material also gets them for the sake of genericity)\n\n\t\t\tif ( material.isShaderMaterial ||\n\t\t\t\tmaterial.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshToonMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\tmaterial.envMap ) {\n\n\t\t\t\tconst uCamPos = p_uniforms.map.cameraPosition;\n\n\t\t\t\tif ( uCamPos !== undefined ) {\n\n\t\t\t\t\tuCamPos.setValue( _gl,\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( camera.matrixWorld ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( material.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshToonMaterial ||\n\t\t\t\tmaterial.isMeshLambertMaterial ||\n\t\t\t\tmaterial.isMeshBasicMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\tmaterial.isShaderMaterial ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'isOrthographic', camera.isOrthographicCamera === true );\n\n\t\t\t}\n\n\t\t\tif ( material.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshToonMaterial ||\n\t\t\t\tmaterial.isMeshLambertMaterial ||\n\t\t\t\tmaterial.isMeshBasicMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\tmaterial.isShaderMaterial ||\n\t\t\t\tmaterial.isShadowMaterial ||\n\t\t\t\tobject.isSkinnedMesh ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// skinning and morph target uniforms must be set even if material didn't change\n\t\t// auto-setting of texture unit for bone and morph texture must go before other textures\n\t\t// otherwise textures used for skinning and morphing can take over texture units reserved for other material textures\n\n\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrix' );\n\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrixInverse' );\n\n\t\t\tconst skeleton = object.skeleton;\n\n\t\t\tif ( skeleton ) {\n\n\t\t\t\tif ( capabilities.floatVertexTextures ) {\n\n\t\t\t\t\tif ( skeleton.boneTexture === null ) skeleton.computeBoneTexture();\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture, textures );\n\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTextureSize', skeleton.boneTextureSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tp_uniforms.setOptional( _gl, skeleton, 'boneMatrices' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( !! geometry && ( geometry.morphAttributes.position !== undefined || geometry.morphAttributes.normal !== undefined ) ) {\n\n\t\t\tmorphtargets.update( object, geometry, material, program );\n\n\t\t}\n\n\n\t\tif ( refreshMaterial || materialProperties.receiveShadow !== object.receiveShadow ) {\n\n\t\t\tmaterialProperties.receiveShadow = object.receiveShadow;\n\t\t\tp_uniforms.setValue( _gl, 'receiveShadow', object.receiveShadow );\n\n\t\t}\n\n\t\tif ( refreshMaterial ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure );\n\n\t\t\tif ( materialProperties.needsLights ) {\n\n\t\t\t\t// the current material requires lighting info\n\n\t\t\t\t// note: all lighting uniforms are always set correctly\n\t\t\t\t// they simply reference the renderer's state for their\n\t\t\t\t// values\n\t\t\t\t//\n\t\t\t\t// use the current material's .needsUpdate flags to set\n\t\t\t\t// the GL state when required\n\n\t\t\t\tmarkUniformsLightsNeedsUpdate( m_uniforms, refreshLights );\n\n\t\t\t}\n\n\t\t\t// refresh uniforms common to several materials\n\n\t\t\tif ( fog && material.fog ) {\n\n\t\t\t\tmaterials.refreshFogUniforms( m_uniforms, fog );\n\n\t\t\t}\n\n\t\t\tmaterials.refreshMaterialUniforms( m_uniforms, material, _pixelRatio, _height, _transmissionRenderTarget );\n\n\t\t\tWebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures );\n\n\t\t}\n\n\t\tif ( material.isShaderMaterial && material.uniformsNeedUpdate === true ) {\n\n\t\t\tWebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures );\n\t\t\tmaterial.uniformsNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( material.isSpriteMaterial ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'center', object.center );\n\n\t\t}\n\n\t\t// common matrices\n\n\t\tp_uniforms.setValue( _gl, 'modelViewMatrix', object.modelViewMatrix );\n\t\tp_uniforms.setValue( _gl, 'normalMatrix', object.normalMatrix );\n\t\tp_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld );\n\n\t\treturn program;\n\n\t}\n\n\t// If uniforms are marked as clean, they don't need to be loaded to the GPU.\n\n\tfunction markUniformsLightsNeedsUpdate( uniforms, value ) {\n\n\t\tuniforms.ambientLightColor.needsUpdate = value;\n\t\tuniforms.lightProbe.needsUpdate = value;\n\n\t\tuniforms.directionalLights.needsUpdate = value;\n\t\tuniforms.directionalLightShadows.needsUpdate = value;\n\t\tuniforms.pointLights.needsUpdate = value;\n\t\tuniforms.pointLightShadows.needsUpdate = value;\n\t\tuniforms.spotLights.needsUpdate = value;\n\t\tuniforms.spotLightShadows.needsUpdate = value;\n\t\tuniforms.rectAreaLights.needsUpdate = value;\n\t\tuniforms.hemisphereLights.needsUpdate = value;\n\n\t}\n\n\tfunction materialNeedsLights( material ) {\n\n\t\treturn material.isMeshLambertMaterial || material.isMeshToonMaterial || material.isMeshPhongMaterial ||\n\t\t\tmaterial.isMeshStandardMaterial || material.isShadowMaterial ||\n\t\t\t( material.isShaderMaterial && material.lights === true );\n\n\t}\n\n\tthis.getActiveCubeFace = function () {\n\n\t\treturn _currentActiveCubeFace;\n\n\t};\n\n\tthis.getActiveMipmapLevel = function () {\n\n\t\treturn _currentActiveMipmapLevel;\n\n\t};\n\n\tthis.getRenderTarget = function () {\n\n\t\treturn _currentRenderTarget;\n\n\t};\n\n\tthis.setRenderTarget = function ( renderTarget, activeCubeFace = 0, activeMipmapLevel = 0 ) {\n\n\t\t_currentRenderTarget = renderTarget;\n\t\t_currentActiveCubeFace = activeCubeFace;\n\t\t_currentActiveMipmapLevel = activeMipmapLevel;\n\n\t\tif ( renderTarget && properties.get( renderTarget ).__webglFramebuffer === undefined ) {\n\n\t\t\ttextures.setupRenderTarget( renderTarget );\n\n\t\t}\n\n\t\tlet framebuffer = null;\n\t\tlet isCube = false;\n\t\tlet isRenderTarget3D = false;\n\n\t\tif ( renderTarget ) {\n\n\t\t\tconst texture = renderTarget.texture;\n\n\t\t\tif ( texture.isDataTexture3D || texture.isDataTexture2DArray ) {\n\n\t\t\t\tisRenderTarget3D = true;\n\n\t\t\t}\n\n\t\t\tconst __webglFramebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\t\tif ( renderTarget.isWebGLCubeRenderTarget ) {\n\n\t\t\t\tframebuffer = __webglFramebuffer[ activeCubeFace ];\n\t\t\t\tisCube = true;\n\n\t\t\t} else if ( renderTarget.isWebGLMultisampleRenderTarget ) {\n\n\t\t\t\tframebuffer = properties.get( renderTarget ).__webglMultisampledFramebuffer;\n\n\t\t\t} else {\n\n\t\t\t\tframebuffer = __webglFramebuffer;\n\n\t\t\t}\n\n\t\t\t_currentViewport.copy( renderTarget.viewport );\n\t\t\t_currentScissor.copy( renderTarget.scissor );\n\t\t\t_currentScissorTest = renderTarget.scissorTest;\n\n\t\t} else {\n\n\t\t\t_currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor();\n\t\t\t_currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor();\n\t\t\t_currentScissorTest = _scissorTest;\n\n\t\t}\n\n\t\tconst framebufferBound = state.bindFramebuffer( 36160, framebuffer );\n\n\t\tif ( framebufferBound && capabilities.drawBuffers ) {\n\n\t\t\tlet needsUpdate = false;\n\n\t\t\tif ( renderTarget ) {\n\n\t\t\t\tif ( renderTarget.isWebGLMultipleRenderTargets ) {\n\n\t\t\t\t\tconst textures = renderTarget.texture;\n\n\t\t\t\t\tif ( _currentDrawBuffers.length !== textures.length || _currentDrawBuffers[ 0 ] !== 36064 ) {\n\n\t\t\t\t\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\t\t\t\t\t_currentDrawBuffers[ i ] = 36064 + i;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_currentDrawBuffers.length = textures.length;\n\n\t\t\t\t\t\tneedsUpdate = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( _currentDrawBuffers.length !== 1 || _currentDrawBuffers[ 0 ] !== 36064 ) {\n\n\t\t\t\t\t\t_currentDrawBuffers[ 0 ] = 36064;\n\t\t\t\t\t\t_currentDrawBuffers.length = 1;\n\n\t\t\t\t\t\tneedsUpdate = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( _currentDrawBuffers.length !== 1 || _currentDrawBuffers[ 0 ] !== 1029 ) {\n\n\t\t\t\t\t_currentDrawBuffers[ 0 ] = 1029;\n\t\t\t\t\t_currentDrawBuffers.length = 1;\n\n\t\t\t\t\tneedsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( needsUpdate ) {\n\n\t\t\t\tif ( capabilities.isWebGL2 ) {\n\n\t\t\t\t\t_gl.drawBuffers( _currentDrawBuffers );\n\n\t\t\t\t} else {\n\n\t\t\t\t\textensions.get( 'WEBGL_draw_buffers' ).drawBuffersWEBGL( _currentDrawBuffers );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.viewport( _currentViewport );\n\t\tstate.scissor( _currentScissor );\n\t\tstate.setScissorTest( _currentScissorTest );\n\n\t\tif ( isCube ) {\n\n\t\t\tconst textureProperties = properties.get( renderTarget.texture );\n\t\t\t_gl.framebufferTexture2D( 36160, 36064, 34069 + activeCubeFace, textureProperties.__webglTexture, activeMipmapLevel );\n\n\t\t} else if ( isRenderTarget3D ) {\n\n\t\t\tconst textureProperties = properties.get( renderTarget.texture );\n\t\t\tconst layer = activeCubeFace || 0;\n\t\t\t_gl.framebufferTextureLayer( 36160, 36064, textureProperties.__webglTexture, activeMipmapLevel || 0, layer );\n\n\t\t}\n\n\t\t_currentMaterialId = - 1; // reset current material to ensure correct uniform bindings\n\n\t};\n\n\tthis.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) {\n\n\t\tif ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tlet framebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\tif ( renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== undefined ) {\n\n\t\t\tframebuffer = framebuffer[ activeCubeFaceIndex ];\n\n\t\t}\n\n\t\tif ( framebuffer ) {\n\n\t\t\tstate.bindFramebuffer( 36160, framebuffer );\n\n\t\t\ttry {\n\n\t\t\t\tconst texture = renderTarget.texture;\n\t\t\t\tconst textureFormat = texture.format;\n\t\t\t\tconst textureType = texture.type;\n\n\t\t\t\tif ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== _gl.getParameter( 35739 ) ) {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tconst halfFloatSupportedByExt = ( textureType === HalfFloatType ) && ( extensions.has( 'EXT_color_buffer_half_float' ) || ( capabilities.isWebGL2 && extensions.has( 'EXT_color_buffer_float' ) ) );\n\n\t\t\t\tif ( textureType !== UnsignedByteType && utils.convert( textureType ) !== _gl.getParameter( 35738 ) && // Edge and Chrome Mac < 52 (#9513)\n\t\t\t\t\t! ( textureType === FloatType && ( capabilities.isWebGL2 || extensions.has( 'OES_texture_float' ) || extensions.has( 'WEBGL_color_buffer_float' ) ) ) && // Chrome Mac >= 52 and Firefox\n\t\t\t\t\t! halfFloatSupportedByExt ) {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( _gl.checkFramebufferStatus( 36160 ) === 36053 ) {\n\n\t\t\t\t\t// the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604)\n\n\t\t\t\t\tif ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {\n\n\t\t\t\t\t\t_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.' );\n\n\t\t\t\t}\n\n\t\t\t} finally {\n\n\t\t\t\t// restore framebuffer of current render target if necessary\n\n\t\t\t\tconst framebuffer = ( _currentRenderTarget !== null ) ? properties.get( _currentRenderTarget ).__webglFramebuffer : null;\n\t\t\t\tstate.bindFramebuffer( 36160, framebuffer );\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tthis.copyFramebufferToTexture = function ( position, texture, level = 0 ) {\n\n\t\tconst levelScale = Math.pow( 2, - level );\n\t\tconst width = Math.floor( texture.image.width * levelScale );\n\t\tconst height = Math.floor( texture.image.height * levelScale );\n\n\t\tlet glFormat = utils.convert( texture.format );\n\n\t\tif ( capabilities.isWebGL2 ) {\n\n\t\t\t// Workaround for https://bugs.chromium.org/p/chromium/issues/detail?id=1120100\n\t\t\t// Not needed in Chrome 93+\n\n\t\t\tif ( glFormat === 6407 ) glFormat = 32849;\n\t\t\tif ( glFormat === 6408 ) glFormat = 32856;\n\n\t\t}\n\n\t\ttextures.setTexture2D( texture, 0 );\n\n\t\t_gl.copyTexImage2D( 3553, level, glFormat, position.x, position.y, width, height, 0 );\n\n\t\tstate.unbindTexture();\n\n\t};\n\n\tthis.copyTextureToTexture = function ( position, srcTexture, dstTexture, level = 0 ) {\n\n\t\tconst width = srcTexture.image.width;\n\t\tconst height = srcTexture.image.height;\n\t\tconst glFormat = utils.convert( dstTexture.format );\n\t\tconst glType = utils.convert( dstTexture.type );\n\n\t\ttextures.setTexture2D( dstTexture, 0 );\n\n\t\t// As another texture upload may have changed pixelStorei\n\t\t// parameters, make sure they are correct for the dstTexture\n\t\t_gl.pixelStorei( 37440, dstTexture.flipY );\n\t\t_gl.pixelStorei( 37441, dstTexture.premultiplyAlpha );\n\t\t_gl.pixelStorei( 3317, dstTexture.unpackAlignment );\n\n\t\tif ( srcTexture.isDataTexture ) {\n\n\t\t\t_gl.texSubImage2D( 3553, level, position.x, position.y, width, height, glFormat, glType, srcTexture.image.data );\n\n\t\t} else {\n\n\t\t\tif ( srcTexture.isCompressedTexture ) {\n\n\t\t\t\t_gl.compressedTexSubImage2D( 3553, level, position.x, position.y, srcTexture.mipmaps[ 0 ].width, srcTexture.mipmaps[ 0 ].height, glFormat, srcTexture.mipmaps[ 0 ].data );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.texSubImage2D( 3553, level, position.x, position.y, glFormat, glType, srcTexture.image );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Generate mipmaps only when copying level 0\n\t\tif ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( 3553 );\n\n\t\tstate.unbindTexture();\n\n\t};\n\n\tthis.copyTextureToTexture3D = function ( sourceBox, position, srcTexture, dstTexture, level = 0 ) {\n\n\t\tif ( _this.isWebGL1Renderer ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst width = sourceBox.max.x - sourceBox.min.x + 1;\n\t\tconst height = sourceBox.max.y - sourceBox.min.y + 1;\n\t\tconst depth = sourceBox.max.z - sourceBox.min.z + 1;\n\t\tconst glFormat = utils.convert( dstTexture.format );\n\t\tconst glType = utils.convert( dstTexture.type );\n\t\tlet glTarget;\n\n\t\tif ( dstTexture.isDataTexture3D ) {\n\n\t\t\ttextures.setTexture3D( dstTexture, 0 );\n\t\t\tglTarget = 32879;\n\n\t\t} else if ( dstTexture.isDataTexture2DArray ) {\n\n\t\t\ttextures.setTexture2DArray( dstTexture, 0 );\n\t\t\tglTarget = 35866;\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\t_gl.pixelStorei( 37440, dstTexture.flipY );\n\t\t_gl.pixelStorei( 37441, dstTexture.premultiplyAlpha );\n\t\t_gl.pixelStorei( 3317, dstTexture.unpackAlignment );\n\n\t\tconst unpackRowLen = _gl.getParameter( 3314 );\n\t\tconst unpackImageHeight = _gl.getParameter( 32878 );\n\t\tconst unpackSkipPixels = _gl.getParameter( 3316 );\n\t\tconst unpackSkipRows = _gl.getParameter( 3315 );\n\t\tconst unpackSkipImages = _gl.getParameter( 32877 );\n\n\t\tconst image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[ 0 ] : srcTexture.image;\n\n\t\t_gl.pixelStorei( 3314, image.width );\n\t\t_gl.pixelStorei( 32878, image.height );\n\t\t_gl.pixelStorei( 3316, sourceBox.min.x );\n\t\t_gl.pixelStorei( 3315, sourceBox.min.y );\n\t\t_gl.pixelStorei( 32877, sourceBox.min.z );\n\n\t\tif ( srcTexture.isDataTexture || srcTexture.isDataTexture3D ) {\n\n\t\t\t_gl.texSubImage3D( glTarget, level, position.x, position.y, position.z, width, height, depth, glFormat, glType, image.data );\n\n\t\t} else {\n\n\t\t\tif ( srcTexture.isCompressedTexture ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture.' );\n\t\t\t\t_gl.compressedTexSubImage3D( glTarget, level, position.x, position.y, position.z, width, height, depth, glFormat, image.data );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.texSubImage3D( glTarget, level, position.x, position.y, position.z, width, height, depth, glFormat, glType, image );\n\n\t\t\t}\n\n\t\t}\n\n\t\t_gl.pixelStorei( 3314, unpackRowLen );\n\t\t_gl.pixelStorei( 32878, unpackImageHeight );\n\t\t_gl.pixelStorei( 3316, unpackSkipPixels );\n\t\t_gl.pixelStorei( 3315, unpackSkipRows );\n\t\t_gl.pixelStorei( 32877, unpackSkipImages );\n\n\t\t// Generate mipmaps only when copying level 0\n\t\tif ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( glTarget );\n\n\t\tstate.unbindTexture();\n\n\t};\n\n\tthis.initTexture = function ( texture ) {\n\n\t\ttextures.setTexture2D( texture, 0 );\n\n\t\tstate.unbindTexture();\n\n\t};\n\n\tthis.resetState = function () {\n\n\t\t_currentActiveCubeFace = 0;\n\t\t_currentActiveMipmapLevel = 0;\n\t\t_currentRenderTarget = null;\n\n\t\tstate.reset();\n\t\tbindingStates.reset();\n\n\t};\n\n\tif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) ); // eslint-disable-line no-undef\n\n\t}\n\n}\n\nclass WebGL1Renderer extends WebGLRenderer {}\n\nWebGL1Renderer.prototype.isWebGL1Renderer = true;\n\nclass FogExp2 {\n\n\tconstructor( color, density = 0.00025 ) {\n\n\t\tthis.name = '';\n\n\t\tthis.color = new Color( color );\n\t\tthis.density = density;\n\n\t}\n\n\tclone() {\n\n\t\treturn new FogExp2( this.color, this.density );\n\n\t}\n\n\ttoJSON( /* meta */ ) {\n\n\t\treturn {\n\t\t\ttype: 'FogExp2',\n\t\t\tcolor: this.color.getHex(),\n\t\t\tdensity: this.density\n\t\t};\n\n\t}\n\n}\n\nFogExp2.prototype.isFogExp2 = true;\n\nclass Fog {\n\n\tconstructor( color, near = 1, far = 1000 ) {\n\n\t\tthis.name = '';\n\n\t\tthis.color = new Color( color );\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Fog( this.color, this.near, this.far );\n\n\t}\n\n\ttoJSON( /* meta */ ) {\n\n\t\treturn {\n\t\t\ttype: 'Fog',\n\t\t\tcolor: this.color.getHex(),\n\t\t\tnear: this.near,\n\t\t\tfar: this.far\n\t\t};\n\n\t}\n\n}\n\nFog.prototype.isFog = true;\n\nclass Scene extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'Scene';\n\n\t\tthis.background = null;\n\t\tthis.environment = null;\n\t\tthis.fog = null;\n\n\t\tthis.overrideMaterial = null;\n\n\t\tthis.autoUpdate = true; // checked by the renderer\n\n\t\tif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t\t\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) ); // eslint-disable-line no-undef\n\n\t\t}\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tif ( source.background !== null ) this.background = source.background.clone();\n\t\tif ( source.environment !== null ) this.environment = source.environment.clone();\n\t\tif ( source.fog !== null ) this.fog = source.fog.clone();\n\n\t\tif ( source.overrideMaterial !== null ) this.overrideMaterial = source.overrideMaterial.clone();\n\n\t\tthis.autoUpdate = source.autoUpdate;\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tif ( this.fog !== null ) data.object.fog = this.fog.toJSON();\n\n\t\treturn data;\n\n\t}\n\n}\n\nScene.prototype.isScene = true;\n\nclass InterleavedBuffer {\n\n\tconstructor( array, stride ) {\n\n\t\tthis.array = array;\n\t\tthis.stride = stride;\n\t\tthis.count = array !== undefined ? array.length / stride : 0;\n\n\t\tthis.usage = StaticDrawUsage;\n\t\tthis.updateRange = { offset: 0, count: - 1 };\n\n\t\tthis.version = 0;\n\n\t\tthis.uuid = generateUUID();\n\n\t}\n\n\tonUploadCallback() {}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tsetUsage( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.count = source.count;\n\t\tthis.stride = source.stride;\n\t\tthis.usage = source.usage;\n\n\t\treturn this;\n\n\t}\n\n\tcopyAt( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.stride;\n\t\tindex2 *= attribute.stride;\n\n\t\tfor ( let i = 0, l = this.stride; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tset( value, offset = 0 ) {\n\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t}\n\n\tclone( data ) {\n\n\t\tif ( data.arrayBuffers === undefined ) {\n\n\t\t\tdata.arrayBuffers = {};\n\n\t\t}\n\n\t\tif ( this.array.buffer._uuid === undefined ) {\n\n\t\t\tthis.array.buffer._uuid = generateUUID();\n\n\t\t}\n\n\t\tif ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {\n\n\t\t\tdata.arrayBuffers[ this.array.buffer._uuid ] = this.array.slice( 0 ).buffer;\n\n\t\t}\n\n\t\tconst array = new this.array.constructor( data.arrayBuffers[ this.array.buffer._uuid ] );\n\n\t\tconst ib = new this.constructor( array, this.stride );\n\t\tib.setUsage( this.usage );\n\n\t\treturn ib;\n\n\t}\n\n\tonUpload( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( data ) {\n\n\t\tif ( data.arrayBuffers === undefined ) {\n\n\t\t\tdata.arrayBuffers = {};\n\n\t\t}\n\n\t\t// generate UUID for array buffer if necessary\n\n\t\tif ( this.array.buffer._uuid === undefined ) {\n\n\t\t\tthis.array.buffer._uuid = generateUUID();\n\n\t\t}\n\n\t\tif ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {\n\n\t\t\tdata.arrayBuffers[ this.array.buffer._uuid ] = Array.prototype.slice.call( new Uint32Array( this.array.buffer ) );\n\n\t\t}\n\n\t\t//\n\n\t\treturn {\n\t\t\tuuid: this.uuid,\n\t\t\tbuffer: this.array.buffer._uuid,\n\t\t\ttype: this.array.constructor.name,\n\t\t\tstride: this.stride\n\t\t};\n\n\t}\n\n}\n\nInterleavedBuffer.prototype.isInterleavedBuffer = true;\n\nconst _vector$6 = /*@__PURE__*/ new Vector3();\n\nclass InterleavedBufferAttribute {\n\n\tconstructor( interleavedBuffer, itemSize, offset, normalized = false ) {\n\n\t\tthis.name = '';\n\n\t\tthis.data = interleavedBuffer;\n\t\tthis.itemSize = itemSize;\n\t\tthis.offset = offset;\n\n\t\tthis.normalized = normalized === true;\n\n\t}\n\n\tget count() {\n\n\t\treturn this.data.count;\n\n\t}\n\n\tget array() {\n\n\t\treturn this.data.array;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tthis.data.needsUpdate = value;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tfor ( let i = 0, l = this.data.count; i < l; i ++ ) {\n\n\t\t\t_vector$6.x = this.getX( i );\n\t\t\t_vector$6.y = this.getY( i );\n\t\t\t_vector$6.z = this.getZ( i );\n\n\t\t\t_vector$6.applyMatrix4( m );\n\n\t\t\tthis.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$6.x = this.getX( i );\n\t\t\t_vector$6.y = this.getY( i );\n\t\t\t_vector$6.z = this.getZ( i );\n\n\t\t\t_vector$6.applyNormalMatrix( m );\n\n\t\t\tthis.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$6.x = this.getX( i );\n\t\t\t_vector$6.y = this.getY( i );\n\t\t\t_vector$6.z = this.getZ( i );\n\n\t\t\t_vector$6.transformDirection( m );\n\n\t\t\tthis.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetX( index, x ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset ] = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( index, y ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( index, z ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetW( index, w ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tgetX( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset ];\n\n\t}\n\n\tgetY( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 1 ];\n\n\t}\n\n\tgetZ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 2 ];\n\n\t}\n\n\tgetW( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 3 ];\n\n\t}\n\n\tsetXY( index, x, y ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZ( index, x, y, z ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZW( index, x, y, z, w ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\t\tthis.data.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tclone( data ) {\n\n\t\tif ( data === undefined ) {\n\n\t\t\tconsole.log( 'THREE.InterleavedBufferAttribute.clone(): Cloning an interlaved buffer attribute will deinterleave buffer data.' );\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0; i < this.count; i ++ ) {\n\n\t\t\t\tconst index = i * this.data.stride + this.offset;\n\n\t\t\t\tfor ( let j = 0; j < this.itemSize; j ++ ) {\n\n\t\t\t\t\tarray.push( this.data.array[ index + j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new BufferAttribute( new this.array.constructor( array ), this.itemSize, this.normalized );\n\n\t\t} else {\n\n\t\t\tif ( data.interleavedBuffers === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers = {};\n\n\t\t\t}\n\n\t\t\tif ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers[ this.data.uuid ] = this.data.clone( data );\n\n\t\t\t}\n\n\t\t\treturn new InterleavedBufferAttribute( data.interleavedBuffers[ this.data.uuid ], this.itemSize, this.offset, this.normalized );\n\n\t\t}\n\n\t}\n\n\ttoJSON( data ) {\n\n\t\tif ( data === undefined ) {\n\n\t\t\tconsole.log( 'THREE.InterleavedBufferAttribute.toJSON(): Serializing an interlaved buffer attribute will deinterleave buffer data.' );\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0; i < this.count; i ++ ) {\n\n\t\t\t\tconst index = i * this.data.stride + this.offset;\n\n\t\t\t\tfor ( let j = 0; j < this.itemSize; j ++ ) {\n\n\t\t\t\t\tarray.push( this.data.array[ index + j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// deinterleave data and save it as an ordinary buffer attribute for now\n\n\t\t\treturn {\n\t\t\t\titemSize: this.itemSize,\n\t\t\t\ttype: this.array.constructor.name,\n\t\t\t\tarray: array,\n\t\t\t\tnormalized: this.normalized\n\t\t\t};\n\n\t\t} else {\n\n\t\t\t// save as true interlaved attribtue\n\n\t\t\tif ( data.interleavedBuffers === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers = {};\n\n\t\t\t}\n\n\t\t\tif ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers[ this.data.uuid ] = this.data.toJSON( data );\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tisInterleavedBufferAttribute: true,\n\t\t\t\titemSize: this.itemSize,\n\t\t\t\tdata: this.data.uuid,\n\t\t\t\toffset: this.offset,\n\t\t\t\tnormalized: this.normalized\n\t\t\t};\n\n\t\t}\n\n\t}\n\n}\n\nInterleavedBufferAttribute.prototype.isInterleavedBufferAttribute = true;\n\n/**\n * parameters = {\n * color: ,\n * map: new THREE.Texture( ),\n * alphaMap: new THREE.Texture( ),\n * rotation: ,\n * sizeAttenuation: \n * }\n */\n\nclass SpriteMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'SpriteMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.rotation = 0;\n\n\t\tthis.sizeAttenuation = true;\n\n\t\tthis.transparent = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.rotation = source.rotation;\n\n\t\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\t\treturn this;\n\n\t}\n\n}\n\nSpriteMaterial.prototype.isSpriteMaterial = true;\n\nlet _geometry;\n\nconst _intersectPoint = /*@__PURE__*/ new Vector3();\nconst _worldScale = /*@__PURE__*/ new Vector3();\nconst _mvPosition = /*@__PURE__*/ new Vector3();\n\nconst _alignedPosition = /*@__PURE__*/ new Vector2();\nconst _rotatedPosition = /*@__PURE__*/ new Vector2();\nconst _viewWorldMatrix = /*@__PURE__*/ new Matrix4();\n\nconst _vA = /*@__PURE__*/ new Vector3();\nconst _vB = /*@__PURE__*/ new Vector3();\nconst _vC = /*@__PURE__*/ new Vector3();\n\nconst _uvA = /*@__PURE__*/ new Vector2();\nconst _uvB = /*@__PURE__*/ new Vector2();\nconst _uvC = /*@__PURE__*/ new Vector2();\n\nclass Sprite extends Object3D {\n\n\tconstructor( material ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Sprite';\n\n\t\tif ( _geometry === undefined ) {\n\n\t\t\t_geometry = new BufferGeometry();\n\n\t\t\tconst float32Array = new Float32Array( [\n\t\t\t\t- 0.5, - 0.5, 0, 0, 0,\n\t\t\t\t0.5, - 0.5, 0, 1, 0,\n\t\t\t\t0.5, 0.5, 0, 1, 1,\n\t\t\t\t- 0.5, 0.5, 0, 0, 1\n\t\t\t] );\n\n\t\t\tconst interleavedBuffer = new InterleavedBuffer( float32Array, 5 );\n\n\t\t\t_geometry.setIndex( [ 0, 1, 2,\t0, 2, 3 ] );\n\t\t\t_geometry.setAttribute( 'position', new InterleavedBufferAttribute( interleavedBuffer, 3, 0, false ) );\n\t\t\t_geometry.setAttribute( 'uv', new InterleavedBufferAttribute( interleavedBuffer, 2, 3, false ) );\n\n\t\t}\n\n\t\tthis.geometry = _geometry;\n\t\tthis.material = ( material !== undefined ) ? material : new SpriteMaterial();\n\n\t\tthis.center = new Vector2( 0.5, 0.5 );\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tif ( raycaster.camera === null ) {\n\n\t\t\tconsole.error( 'THREE.Sprite: \"Raycaster.camera\" needs to be set in order to raycast against sprites.' );\n\n\t\t}\n\n\t\t_worldScale.setFromMatrixScale( this.matrixWorld );\n\n\t\t_viewWorldMatrix.copy( raycaster.camera.matrixWorld );\n\t\tthis.modelViewMatrix.multiplyMatrices( raycaster.camera.matrixWorldInverse, this.matrixWorld );\n\n\t\t_mvPosition.setFromMatrixPosition( this.modelViewMatrix );\n\n\t\tif ( raycaster.camera.isPerspectiveCamera && this.material.sizeAttenuation === false ) {\n\n\t\t\t_worldScale.multiplyScalar( - _mvPosition.z );\n\n\t\t}\n\n\t\tconst rotation = this.material.rotation;\n\t\tlet sin, cos;\n\n\t\tif ( rotation !== 0 ) {\n\n\t\t\tcos = Math.cos( rotation );\n\t\t\tsin = Math.sin( rotation );\n\n\t\t}\n\n\t\tconst center = this.center;\n\n\t\ttransformVertex( _vA.set( - 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\ttransformVertex( _vB.set( 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\ttransformVertex( _vC.set( 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\n\t\t_uvA.set( 0, 0 );\n\t\t_uvB.set( 1, 0 );\n\t\t_uvC.set( 1, 1 );\n\n\t\t// check first triangle\n\t\tlet intersect = raycaster.ray.intersectTriangle( _vA, _vB, _vC, false, _intersectPoint );\n\n\t\tif ( intersect === null ) {\n\n\t\t\t// check second triangle\n\t\t\ttransformVertex( _vB.set( - 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\t\t_uvB.set( 0, 1 );\n\n\t\t\tintersect = raycaster.ray.intersectTriangle( _vA, _vC, _vB, false, _intersectPoint );\n\t\t\tif ( intersect === null ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( _intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tpoint: _intersectPoint.clone(),\n\t\t\tuv: Triangle.getUV( _intersectPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() ),\n\t\t\tface: null,\n\t\t\tobject: this\n\n\t\t} );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tif ( source.center !== undefined ) this.center.copy( source.center );\n\n\t\tthis.material = source.material;\n\n\t\treturn this;\n\n\t}\n\n}\n\nSprite.prototype.isSprite = true;\n\nfunction transformVertex( vertexPosition, mvPosition, center, scale, sin, cos ) {\n\n\t// compute position in camera space\n\t_alignedPosition.subVectors( vertexPosition, center ).addScalar( 0.5 ).multiply( scale );\n\n\t// to check if rotation is not zero\n\tif ( sin !== undefined ) {\n\n\t\t_rotatedPosition.x = ( cos * _alignedPosition.x ) - ( sin * _alignedPosition.y );\n\t\t_rotatedPosition.y = ( sin * _alignedPosition.x ) + ( cos * _alignedPosition.y );\n\n\t} else {\n\n\t\t_rotatedPosition.copy( _alignedPosition );\n\n\t}\n\n\n\tvertexPosition.copy( mvPosition );\n\tvertexPosition.x += _rotatedPosition.x;\n\tvertexPosition.y += _rotatedPosition.y;\n\n\t// transform to world space\n\tvertexPosition.applyMatrix4( _viewWorldMatrix );\n\n}\n\nconst _v1$2 = /*@__PURE__*/ new Vector3();\nconst _v2$1 = /*@__PURE__*/ new Vector3();\n\nclass LOD extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis._currentLevel = 0;\n\n\t\tthis.type = 'LOD';\n\n\t\tObject.defineProperties( this, {\n\t\t\tlevels: {\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: []\n\t\t\t},\n\t\t\tisLOD: {\n\t\t\t\tvalue: true,\n\t\t\t}\n\t\t} );\n\n\t\tthis.autoUpdate = true;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source, false );\n\n\t\tconst levels = source.levels;\n\n\t\tfor ( let i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tconst level = levels[ i ];\n\n\t\t\tthis.addLevel( level.object.clone(), level.distance );\n\n\t\t}\n\n\t\tthis.autoUpdate = source.autoUpdate;\n\n\t\treturn this;\n\n\t}\n\n\taddLevel( object, distance = 0 ) {\n\n\t\tdistance = Math.abs( distance );\n\n\t\tconst levels = this.levels;\n\n\t\tlet l;\n\n\t\tfor ( l = 0; l < levels.length; l ++ ) {\n\n\t\t\tif ( distance < levels[ l ].distance ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlevels.splice( l, 0, { distance: distance, object: object } );\n\n\t\tthis.add( object );\n\n\t\treturn this;\n\n\t}\n\n\tgetCurrentLevel() {\n\n\t\treturn this._currentLevel;\n\n\t}\n\n\tgetObjectForDistance( distance ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 0 ) {\n\n\t\t\tlet i, l;\n\n\t\t\tfor ( i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\tif ( distance < levels[ i ].distance ) {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn levels[ i - 1 ].object;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 0 ) {\n\n\t\t\t_v1$2.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tconst distance = raycaster.ray.origin.distanceTo( _v1$2 );\n\n\t\t\tthis.getObjectForDistance( distance ).raycast( raycaster, intersects );\n\n\t\t}\n\n\t}\n\n\tupdate( camera ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 1 ) {\n\n\t\t\t_v1$2.setFromMatrixPosition( camera.matrixWorld );\n\t\t\t_v2$1.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tconst distance = _v1$2.distanceTo( _v2$1 ) / camera.zoom;\n\n\t\t\tlevels[ 0 ].object.visible = true;\n\n\t\t\tlet i, l;\n\n\t\t\tfor ( i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\tif ( distance >= levels[ i ].distance ) {\n\n\t\t\t\t\tlevels[ i - 1 ].object.visible = false;\n\t\t\t\t\tlevels[ i ].object.visible = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._currentLevel = i - 1;\n\n\t\t\tfor ( ; i < l; i ++ ) {\n\n\t\t\t\tlevels[ i ].object.visible = false;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tif ( this.autoUpdate === false ) data.object.autoUpdate = false;\n\n\t\tdata.object.levels = [];\n\n\t\tconst levels = this.levels;\n\n\t\tfor ( let i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tconst level = levels[ i ];\n\n\t\t\tdata.object.levels.push( {\n\t\t\t\tobject: level.object.uuid,\n\t\t\t\tdistance: level.distance\n\t\t\t} );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst _basePosition = /*@__PURE__*/ new Vector3();\n\nconst _skinIndex = /*@__PURE__*/ new Vector4();\nconst _skinWeight = /*@__PURE__*/ new Vector4();\n\nconst _vector$5 = /*@__PURE__*/ new Vector3();\nconst _matrix = /*@__PURE__*/ new Matrix4();\n\nclass SkinnedMesh extends Mesh {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'SkinnedMesh';\n\n\t\tthis.bindMode = 'attached';\n\t\tthis.bindMatrix = new Matrix4();\n\t\tthis.bindMatrixInverse = new Matrix4();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.bindMode = source.bindMode;\n\t\tthis.bindMatrix.copy( source.bindMatrix );\n\t\tthis.bindMatrixInverse.copy( source.bindMatrixInverse );\n\n\t\tthis.skeleton = source.skeleton;\n\n\t\treturn this;\n\n\t}\n\n\tbind( skeleton, bindMatrix ) {\n\n\t\tthis.skeleton = skeleton;\n\n\t\tif ( bindMatrix === undefined ) {\n\n\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\tthis.skeleton.calculateInverses();\n\n\t\t\tbindMatrix = this.matrixWorld;\n\n\t\t}\n\n\t\tthis.bindMatrix.copy( bindMatrix );\n\t\tthis.bindMatrixInverse.copy( bindMatrix ).invert();\n\n\t}\n\n\tpose() {\n\n\t\tthis.skeleton.pose();\n\n\t}\n\n\tnormalizeSkinWeights() {\n\n\t\tconst vector = new Vector4();\n\n\t\tconst skinWeight = this.geometry.attributes.skinWeight;\n\n\t\tfor ( let i = 0, l = skinWeight.count; i < l; i ++ ) {\n\n\t\t\tvector.x = skinWeight.getX( i );\n\t\t\tvector.y = skinWeight.getY( i );\n\t\t\tvector.z = skinWeight.getZ( i );\n\t\t\tvector.w = skinWeight.getW( i );\n\n\t\t\tconst scale = 1.0 / vector.manhattanLength();\n\n\t\t\tif ( scale !== Infinity ) {\n\n\t\t\t\tvector.multiplyScalar( scale );\n\n\t\t\t} else {\n\n\t\t\t\tvector.set( 1, 0, 0, 0 ); // do something reasonable\n\n\t\t\t}\n\n\t\t\tskinWeight.setXYZW( i, vector.x, vector.y, vector.z, vector.w );\n\n\t\t}\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tif ( this.bindMode === 'attached' ) {\n\n\t\t\tthis.bindMatrixInverse.copy( this.matrixWorld ).invert();\n\n\t\t} else if ( this.bindMode === 'detached' ) {\n\n\t\t\tthis.bindMatrixInverse.copy( this.bindMatrix ).invert();\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode );\n\n\t\t}\n\n\t}\n\n\tboneTransform( index, target ) {\n\n\t\tconst skeleton = this.skeleton;\n\t\tconst geometry = this.geometry;\n\n\t\t_skinIndex.fromBufferAttribute( geometry.attributes.skinIndex, index );\n\t\t_skinWeight.fromBufferAttribute( geometry.attributes.skinWeight, index );\n\n\t\t_basePosition.copy( target ).applyMatrix4( this.bindMatrix );\n\n\t\ttarget.set( 0, 0, 0 );\n\n\t\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\t\tconst weight = _skinWeight.getComponent( i );\n\n\t\t\tif ( weight !== 0 ) {\n\n\t\t\t\tconst boneIndex = _skinIndex.getComponent( i );\n\n\t\t\t\t_matrix.multiplyMatrices( skeleton.bones[ boneIndex ].matrixWorld, skeleton.boneInverses[ boneIndex ] );\n\n\t\t\t\ttarget.addScaledVector( _vector$5.copy( _basePosition ).applyMatrix4( _matrix ), weight );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn target.applyMatrix4( this.bindMatrixInverse );\n\n\t}\n\n}\n\nSkinnedMesh.prototype.isSkinnedMesh = true;\n\nclass Bone extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'Bone';\n\n\t}\n\n}\n\nBone.prototype.isBone = true;\n\nclass DataTexture extends Texture {\n\n\tconstructor( data = null, width = 1, height = 1, format, type, mapping, wrapS, wrapT, magFilter = NearestFilter, minFilter = NearestFilter, anisotropy, encoding ) {\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\t\tthis.image = { data: data, width: width, height: height };\n\n\t\tthis.magFilter = magFilter;\n\t\tthis.minFilter = minFilter;\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\nDataTexture.prototype.isDataTexture = true;\n\nconst _offsetMatrix = /*@__PURE__*/ new Matrix4();\nconst _identityMatrix = /*@__PURE__*/ new Matrix4();\n\nclass Skeleton {\n\n\tconstructor( bones = [], boneInverses = [] ) {\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.bones = bones.slice( 0 );\n\t\tthis.boneInverses = boneInverses;\n\t\tthis.boneMatrices = null;\n\n\t\tthis.boneTexture = null;\n\t\tthis.boneTextureSize = 0;\n\n\t\tthis.frame = - 1;\n\n\t\tthis.init();\n\n\t}\n\n\tinit() {\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\n\t\tthis.boneMatrices = new Float32Array( bones.length * 16 );\n\n\t\t// calculate inverse bone matrices if necessary\n\n\t\tif ( boneInverses.length === 0 ) {\n\n\t\t\tthis.calculateInverses();\n\n\t\t} else {\n\n\t\t\t// handle special case\n\n\t\t\tif ( bones.length !== boneInverses.length ) {\n\n\t\t\t\tconsole.warn( 'THREE.Skeleton: Number of inverse bone matrices does not match amount of bones.' );\n\n\t\t\t\tthis.boneInverses = [];\n\n\t\t\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\t\t\tthis.boneInverses.push( new Matrix4() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcalculateInverses() {\n\n\t\tthis.boneInverses.length = 0;\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst inverse = new Matrix4();\n\n\t\t\tif ( this.bones[ i ] ) {\n\n\t\t\t\tinverse.copy( this.bones[ i ].matrixWorld ).invert();\n\n\t\t\t}\n\n\t\t\tthis.boneInverses.push( inverse );\n\n\t\t}\n\n\t}\n\n\tpose() {\n\n\t\t// recover the bind-time world matrices\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tbone.matrixWorld.copy( this.boneInverses[ i ] ).invert();\n\n\t\t\t}\n\n\t\t}\n\n\t\t// compute the local matrices, positions, rotations and scales\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t\tbone.matrix.copy( bone.parent.matrixWorld ).invert();\n\t\t\t\t\tbone.matrix.multiply( bone.matrixWorld );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbone.matrix.copy( bone.matrixWorld );\n\n\t\t\t\t}\n\n\t\t\t\tbone.matrix.decompose( bone.position, bone.quaternion, bone.scale );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdate() {\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\t\tconst boneMatrices = this.boneMatrices;\n\t\tconst boneTexture = this.boneTexture;\n\n\t\t// flatten bone matrices to array\n\n\t\tfor ( let i = 0, il = bones.length; i < il; i ++ ) {\n\n\t\t\t// compute the offset between the current and the original transform\n\n\t\t\tconst matrix = bones[ i ] ? bones[ i ].matrixWorld : _identityMatrix;\n\n\t\t\t_offsetMatrix.multiplyMatrices( matrix, boneInverses[ i ] );\n\t\t\t_offsetMatrix.toArray( boneMatrices, i * 16 );\n\n\t\t}\n\n\t\tif ( boneTexture !== null ) {\n\n\t\t\tboneTexture.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new Skeleton( this.bones, this.boneInverses );\n\n\t}\n\n\tcomputeBoneTexture() {\n\n\t\t// layout (1 matrix = 4 pixels)\n\t\t// RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4)\n\t\t// with 8x8 pixel texture max 16 bones * 4 pixels = (8 * 8)\n\t\t// 16x16 pixel texture max 64 bones * 4 pixels = (16 * 16)\n\t\t// 32x32 pixel texture max 256 bones * 4 pixels = (32 * 32)\n\t\t// 64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64)\n\n\t\tlet size = Math.sqrt( this.bones.length * 4 ); // 4 pixels needed for 1 matrix\n\t\tsize = ceilPowerOfTwo( size );\n\t\tsize = Math.max( size, 4 );\n\n\t\tconst boneMatrices = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel\n\t\tboneMatrices.set( this.boneMatrices ); // copy current values\n\n\t\tconst boneTexture = new DataTexture( boneMatrices, size, size, RGBAFormat, FloatType );\n\n\t\tthis.boneMatrices = boneMatrices;\n\t\tthis.boneTexture = boneTexture;\n\t\tthis.boneTextureSize = size;\n\n\t\treturn this;\n\n\t}\n\n\tgetBoneByName( name ) {\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone.name === name ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t}\n\n\tdispose( ) {\n\n\t\tif ( this.boneTexture !== null ) {\n\n\t\t\tthis.boneTexture.dispose();\n\n\t\t\tthis.boneTexture = null;\n\n\t\t}\n\n\t}\n\n\tfromJSON( json, bones ) {\n\n\t\tthis.uuid = json.uuid;\n\n\t\tfor ( let i = 0, l = json.bones.length; i < l; i ++ ) {\n\n\t\t\tconst uuid = json.bones[ i ];\n\t\t\tlet bone = bones[ uuid ];\n\n\t\t\tif ( bone === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Skeleton: No bone found with UUID:', uuid );\n\t\t\t\tbone = new Bone();\n\n\t\t\t}\n\n\t\t\tthis.bones.push( bone );\n\t\t\tthis.boneInverses.push( new Matrix4().fromArray( json.boneInverses[ i ] ) );\n\n\t\t}\n\n\t\tthis.init();\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Skeleton',\n\t\t\t\tgenerator: 'Skeleton.toJSON'\n\t\t\t},\n\t\t\tbones: [],\n\t\t\tboneInverses: []\n\t\t};\n\n\t\tdata.uuid = this.uuid;\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\n\t\tfor ( let i = 0, l = bones.length; i < l; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\t\t\tdata.bones.push( bone.uuid );\n\n\t\t\tconst boneInverse = boneInverses[ i ];\n\t\t\tdata.boneInverses.push( boneInverse.toArray() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass InstancedBufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized, meshPerAttribute = 1 ) {\n\n\t\tif ( typeof normalized === 'number' ) {\n\n\t\t\tmeshPerAttribute = normalized;\n\n\t\t\tnormalized = false;\n\n\t\t\tconsole.error( 'THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.' );\n\n\t\t}\n\n\t\tsuper( array, itemSize, normalized );\n\n\t\tthis.meshPerAttribute = meshPerAttribute;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.meshPerAttribute = this.meshPerAttribute;\n\n\t\tdata.isInstancedBufferAttribute = true;\n\n\t\treturn data;\n\n\t}\n\n}\n\nInstancedBufferAttribute.prototype.isInstancedBufferAttribute = true;\n\nconst _instanceLocalMatrix = /*@__PURE__*/ new Matrix4();\nconst _instanceWorldMatrix = /*@__PURE__*/ new Matrix4();\n\nconst _instanceIntersects = [];\n\nconst _mesh = /*@__PURE__*/ new Mesh();\n\nclass InstancedMesh extends Mesh {\n\n\tconstructor( geometry, material, count ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.instanceMatrix = new InstancedBufferAttribute( new Float32Array( count * 16 ), 16 );\n\t\tthis.instanceColor = null;\n\n\t\tthis.count = count;\n\n\t\tthis.frustumCulled = false;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.instanceMatrix.copy( source.instanceMatrix );\n\n\t\tif ( source.instanceColor !== null ) this.instanceColor = source.instanceColor.clone();\n\n\t\tthis.count = source.count;\n\n\t\treturn this;\n\n\t}\n\n\tgetColorAt( index, color ) {\n\n\t\tcolor.fromArray( this.instanceColor.array, index * 3 );\n\n\t}\n\n\tgetMatrixAt( index, matrix ) {\n\n\t\tmatrix.fromArray( this.instanceMatrix.array, index * 16 );\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst raycastTimes = this.count;\n\n\t\t_mesh.geometry = this.geometry;\n\t\t_mesh.material = this.material;\n\n\t\tif ( _mesh.material === undefined ) return;\n\n\t\tfor ( let instanceId = 0; instanceId < raycastTimes; instanceId ++ ) {\n\n\t\t\t// calculate the world matrix for each instance\n\n\t\t\tthis.getMatrixAt( instanceId, _instanceLocalMatrix );\n\n\t\t\t_instanceWorldMatrix.multiplyMatrices( matrixWorld, _instanceLocalMatrix );\n\n\t\t\t// the mesh represents this single instance\n\n\t\t\t_mesh.matrixWorld = _instanceWorldMatrix;\n\n\t\t\t_mesh.raycast( raycaster, _instanceIntersects );\n\n\t\t\t// process the result of raycast\n\n\t\t\tfor ( let i = 0, l = _instanceIntersects.length; i < l; i ++ ) {\n\n\t\t\t\tconst intersect = _instanceIntersects[ i ];\n\t\t\t\tintersect.instanceId = instanceId;\n\t\t\t\tintersect.object = this;\n\t\t\t\tintersects.push( intersect );\n\n\t\t\t}\n\n\t\t\t_instanceIntersects.length = 0;\n\n\t\t}\n\n\t}\n\n\tsetColorAt( index, color ) {\n\n\t\tif ( this.instanceColor === null ) {\n\n\t\t\tthis.instanceColor = new InstancedBufferAttribute( new Float32Array( this.instanceMatrix.count * 3 ), 3 );\n\n\t\t}\n\n\t\tcolor.toArray( this.instanceColor.array, index * 3 );\n\n\t}\n\n\tsetMatrixAt( index, matrix ) {\n\n\t\tmatrix.toArray( this.instanceMatrix.array, index * 16 );\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n}\n\nInstancedMesh.prototype.isInstancedMesh = true;\n\n/**\n * parameters = {\n * color: ,\n * opacity: ,\n *\n * linewidth: ,\n * linecap: \"round\",\n * linejoin: \"round\"\n * }\n */\n\nclass LineBasicMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'LineBasicMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.linewidth = 1;\n\t\tthis.linecap = 'round';\n\t\tthis.linejoin = 'round';\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.linewidth = source.linewidth;\n\t\tthis.linecap = source.linecap;\n\t\tthis.linejoin = source.linejoin;\n\n\t\treturn this;\n\n\t}\n\n}\n\nLineBasicMaterial.prototype.isLineBasicMaterial = true;\n\nconst _start$1 = /*@__PURE__*/ new Vector3();\nconst _end$1 = /*@__PURE__*/ new Vector3();\nconst _inverseMatrix$1 = /*@__PURE__*/ new Matrix4();\nconst _ray$1 = /*@__PURE__*/ new Ray();\nconst _sphere$1 = /*@__PURE__*/ new Sphere();\n\nclass Line extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new LineBasicMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Line';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t// we assume non-indexed geometry\n\n\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\t\tconst lineDistances = [ 0 ];\n\n\t\t\t\tfor ( let i = 1, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t\t_start$1.fromBufferAttribute( positionAttribute, i - 1 );\n\t\t\t\t\t_end$1.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i ] += _start$1.distanceTo( _end$1 );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconsole.error( 'THREE.Line.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Line.threshold;\n\t\tconst drawRange = geometry.drawRange;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$1.copy( geometry.boundingSphere );\n\t\t_sphere$1.applyMatrix4( matrixWorld );\n\t\t_sphere$1.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$1 ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix$1.copy( matrixWorld ).invert();\n\t\t_ray$1.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$1 );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tconst vStart = new Vector3();\n\t\tconst vEnd = new Vector3();\n\t\tconst interSegment = new Vector3();\n\t\tconst interRay = new Vector3();\n\t\tconst step = this.isLineSegments ? 2 : 1;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst attributes = geometry.attributes;\n\t\t\tconst positionAttribute = attributes.position;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n\t\t\t\t\tconst a = index.getX( i );\n\t\t\t\t\tconst b = index.getX( i + 1 );\n\n\t\t\t\t\tvStart.fromBufferAttribute( positionAttribute, a );\n\t\t\t\t\tvEnd.fromBufferAttribute( positionAttribute, b );\n\n\t\t\t\t\tconst distSq = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\tif ( distSq > localThresholdSq ) continue;\n\n\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n\t\t\t\t\tvStart.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t\tvEnd.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\t\tconst distSq = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\tif ( distSq > localThresholdSq ) continue;\n\n\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconsole.error( 'THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nLine.prototype.isLine = true;\n\nconst _start = /*@__PURE__*/ new Vector3();\nconst _end = /*@__PURE__*/ new Vector3();\n\nclass LineSegments extends Line {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'LineSegments';\n\n\t}\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t// we assume non-indexed geometry\n\n\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\t\tconst lineDistances = [];\n\n\t\t\t\tfor ( let i = 0, l = positionAttribute.count; i < l; i += 2 ) {\n\n\t\t\t\t\t_start.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t\t_end.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + _start.distanceTo( _end );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconsole.error( 'THREE.LineSegments.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nLineSegments.prototype.isLineSegments = true;\n\nclass LineLoop extends Line {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'LineLoop';\n\n\t}\n\n}\n\nLineLoop.prototype.isLineLoop = true;\n\n/**\n * parameters = {\n * color: ,\n * opacity: ,\n * map: new THREE.Texture( ),\n * alphaMap: new THREE.Texture( ),\n *\n * size: ,\n * sizeAttenuation: \n *\n * }\n */\n\nclass PointsMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PointsMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.size = 1;\n\t\tthis.sizeAttenuation = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.size = source.size;\n\t\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\t\treturn this;\n\n\t}\n\n}\n\nPointsMaterial.prototype.isPointsMaterial = true;\n\nconst _inverseMatrix = /*@__PURE__*/ new Matrix4();\nconst _ray = /*@__PURE__*/ new Ray();\nconst _sphere = /*@__PURE__*/ new Sphere();\nconst _position$2 = /*@__PURE__*/ new Vector3();\n\nclass Points extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new PointsMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Points';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Points.threshold;\n\t\tconst drawRange = geometry.drawRange;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere );\n\t\t_sphere.applyMatrix4( matrixWorld );\n\t\t_sphere.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix.copy( matrixWorld ).invert();\n\t\t_ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst attributes = geometry.attributes;\n\t\t\tconst positionAttribute = attributes.position;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, il = end; i < il; i ++ ) {\n\n\t\t\t\t\tconst a = index.getX( i );\n\n\t\t\t\t\t_position$2.fromBufferAttribute( positionAttribute, a );\n\n\t\t\t\t\ttestPoint( _position$2, a, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, l = end; i < l; i ++ ) {\n\n\t\t\t\t\t_position$2.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\t\ttestPoint( _position$2, i, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Points.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nPoints.prototype.isPoints = true;\n\nfunction testPoint( point, index, localThresholdSq, matrixWorld, raycaster, intersects, object ) {\n\n\tconst rayPointDistanceSq = _ray.distanceSqToPoint( point );\n\n\tif ( rayPointDistanceSq < localThresholdSq ) {\n\n\t\tconst intersectPoint = new Vector3();\n\n\t\t_ray.closestPointToPoint( point, intersectPoint );\n\t\tintersectPoint.applyMatrix4( matrixWorld );\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tdistanceToRay: Math.sqrt( rayPointDistanceSq ),\n\t\t\tpoint: intersectPoint,\n\t\t\tindex: index,\n\t\t\tface: null,\n\t\t\tobject: object\n\n\t\t} );\n\n\t}\n\n}\n\nclass VideoTexture extends Texture {\n\n\tconstructor( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\t\tsuper( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.format = format !== undefined ? format : RGBFormat;\n\n\t\tthis.minFilter = minFilter !== undefined ? minFilter : LinearFilter;\n\t\tthis.magFilter = magFilter !== undefined ? magFilter : LinearFilter;\n\n\t\tthis.generateMipmaps = false;\n\n\t\tconst scope = this;\n\n\t\tfunction updateVideo() {\n\n\t\t\tscope.needsUpdate = true;\n\t\t\tvideo.requestVideoFrameCallback( updateVideo );\n\n\t\t}\n\n\t\tif ( 'requestVideoFrameCallback' in video ) {\n\n\t\t\tvideo.requestVideoFrameCallback( updateVideo );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.image ).copy( this );\n\n\t}\n\n\tupdate() {\n\n\t\tconst video = this.image;\n\t\tconst hasVideoFrameCallback = 'requestVideoFrameCallback' in video;\n\n\t\tif ( hasVideoFrameCallback === false && video.readyState >= video.HAVE_CURRENT_DATA ) {\n\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n}\n\nVideoTexture.prototype.isVideoTexture = true;\n\nclass CompressedTexture extends Texture {\n\n\tconstructor( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) {\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\t\tthis.image = { width: width, height: height };\n\t\tthis.mipmaps = mipmaps;\n\n\t\t// no flipping for cube textures\n\t\t// (also flipping doesn't work for compressed textures )\n\n\t\tthis.flipY = false;\n\n\t\t// can't generate mipmaps for compressed textures\n\t\t// mips must be embedded in DDS files\n\n\t\tthis.generateMipmaps = false;\n\n\t}\n\n}\n\nCompressedTexture.prototype.isCompressedTexture = true;\n\nclass CanvasTexture extends Texture {\n\n\tconstructor( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\t\tsuper( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\nCanvasTexture.prototype.isCanvasTexture = true;\n\nclass DepthTexture extends Texture {\n\n\tconstructor( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format ) {\n\n\t\tformat = format !== undefined ? format : DepthFormat;\n\n\t\tif ( format !== DepthFormat && format !== DepthStencilFormat ) {\n\n\t\t\tthrow new Error( 'DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat' );\n\n\t\t}\n\n\t\tif ( type === undefined && format === DepthFormat ) type = UnsignedShortType;\n\t\tif ( type === undefined && format === DepthStencilFormat ) type = UnsignedInt248Type;\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.image = { width: width, height: height };\n\n\t\tthis.magFilter = magFilter !== undefined ? magFilter : NearestFilter;\n\t\tthis.minFilter = minFilter !== undefined ? minFilter : NearestFilter;\n\n\t\tthis.flipY = false;\n\t\tthis.generateMipmaps\t= false;\n\n\t}\n\n\n}\n\nDepthTexture.prototype.isDepthTexture = true;\n\nclass CircleGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, segments = 8, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CircleGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tsegments: segments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tsegments = Math.max( 3, segments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\t// center point\n\n\t\tvertices.push( 0, 0, 0 );\n\t\tnormals.push( 0, 0, 1 );\n\t\tuvs.push( 0.5, 0.5 );\n\n\t\tfor ( let s = 0, i = 3; s <= segments; s ++, i += 3 ) {\n\n\t\t\tconst segment = thetaStart + s / segments * thetaLength;\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal\n\n\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t// uvs\n\n\t\t\tuv.x = ( vertices[ i ] / radius + 1 ) / 2;\n\t\t\tuv.y = ( vertices[ i + 1 ] / radius + 1 ) / 2;\n\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\tindices.push( i, i + 1, 0 );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new CircleGeometry( data.radius, data.segments, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass CylinderGeometry extends BufferGeometry {\n\n\tconstructor( radiusTop = 1, radiusBottom = 1, height = 1, radialSegments = 8, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\t\tthis.type = 'CylinderGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradiusTop: radiusTop,\n\t\t\tradiusBottom: radiusBottom,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tconst scope = this;\n\n\t\tradialSegments = Math.floor( radialSegments );\n\t\theightSegments = Math.floor( heightSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet index = 0;\n\t\tconst indexArray = [];\n\t\tconst halfHeight = height / 2;\n\t\tlet groupStart = 0;\n\n\t\t// generate geometry\n\n\t\tgenerateTorso();\n\n\t\tif ( openEnded === false ) {\n\n\t\t\tif ( radiusTop > 0 ) generateCap( true );\n\t\t\tif ( radiusBottom > 0 ) generateCap( false );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\tfunction generateTorso() {\n\n\t\t\tconst normal = new Vector3();\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tlet groupCount = 0;\n\n\t\t\t// this will be used to calculate the normal\n\t\t\tconst slope = ( radiusBottom - radiusTop ) / height;\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( let y = 0; y <= heightSegments; y ++ ) {\n\n\t\t\t\tconst indexRow = [];\n\n\t\t\t\tconst v = y / heightSegments;\n\n\t\t\t\t// calculate the radius of the current row\n\n\t\t\t\tconst radius = v * ( radiusBottom - radiusTop ) + radiusTop;\n\n\t\t\t\tfor ( let x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\t\tconst u = x / radialSegments;\n\n\t\t\t\t\tconst theta = u * thetaLength + thetaStart;\n\n\t\t\t\t\tconst sinTheta = Math.sin( theta );\n\t\t\t\t\tconst cosTheta = Math.cos( theta );\n\n\t\t\t\t\t// vertex\n\n\t\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\t\tvertex.y = - v * height + halfHeight;\n\t\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\t// normal\n\n\t\t\t\t\tnormal.set( sinTheta, slope, cosTheta ).normalize();\n\t\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t\t// uv\n\n\t\t\t\t\tuvs.push( u, 1 - v );\n\n\t\t\t\t\t// save index of vertex in respective row\n\n\t\t\t\t\tindexRow.push( index ++ );\n\n\t\t\t\t}\n\n\t\t\t\t// now save vertices of the row in our index array\n\n\t\t\t\tindexArray.push( indexRow );\n\n\t\t\t}\n\n\t\t\t// generate indices\n\n\t\t\tfor ( let x = 0; x < radialSegments; x ++ ) {\n\n\t\t\t\tfor ( let y = 0; y < heightSegments; y ++ ) {\n\n\t\t\t\t\t// we use the index array to access the correct indices\n\n\t\t\t\t\tconst a = indexArray[ y ][ x ];\n\t\t\t\t\tconst b = indexArray[ y + 1 ][ x ];\n\t\t\t\t\tconst c = indexArray[ y + 1 ][ x + 1 ];\n\t\t\t\t\tconst d = indexArray[ y ][ x + 1 ];\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t\t// update group counter\n\n\t\t\t\t\tgroupCount += 6;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, 0 );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t}\n\n\t\tfunction generateCap( top ) {\n\n\t\t\t// save the index of the first center vertex\n\t\t\tconst centerIndexStart = index;\n\n\t\t\tconst uv = new Vector2();\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tlet groupCount = 0;\n\n\t\t\tconst radius = ( top === true ) ? radiusTop : radiusBottom;\n\t\t\tconst sign = ( top === true ) ? 1 : - 1;\n\n\t\t\t// first we generate the center vertex data of the cap.\n\t\t\t// because the geometry needs one set of uvs per face,\n\t\t\t// we must generate a center vertex per face/segment\n\n\t\t\tfor ( let x = 1; x <= radialSegments; x ++ ) {\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertices.push( 0, halfHeight * sign, 0 );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( 0.5, 0.5 );\n\n\t\t\t\t// increase index\n\n\t\t\t\tindex ++;\n\n\t\t\t}\n\n\t\t\t// save the index of the last center vertex\n\t\t\tconst centerIndexEnd = index;\n\n\t\t\t// now we generate the surrounding vertices, normals and uvs\n\n\t\t\tfor ( let x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\tconst u = x / radialSegments;\n\t\t\t\tconst theta = u * thetaLength + thetaStart;\n\n\t\t\t\tconst cosTheta = Math.cos( theta );\n\t\t\t\tconst sinTheta = Math.sin( theta );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\tvertex.y = halfHeight * sign;\n\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = ( cosTheta * 0.5 ) + 0.5;\n\t\t\t\tuv.y = ( sinTheta * 0.5 * sign ) + 0.5;\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t// increase index\n\n\t\t\t\tindex ++;\n\n\t\t\t}\n\n\t\t\t// generate indices\n\n\t\t\tfor ( let x = 0; x < radialSegments; x ++ ) {\n\n\t\t\t\tconst c = centerIndexStart + x;\n\t\t\t\tconst i = centerIndexEnd + x;\n\n\t\t\t\tif ( top === true ) {\n\n\t\t\t\t\t// face top\n\n\t\t\t\t\tindices.push( i, i + 1, c );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// face bottom\n\n\t\t\t\t\tindices.push( i + 1, i, c );\n\n\t\t\t\t}\n\n\t\t\t\tgroupCount += 3;\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, top === true ? 1 : 2 );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t}\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new CylinderGeometry( data.radiusTop, data.radiusBottom, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass ConeGeometry extends CylinderGeometry {\n\n\tconstructor( radius = 1, height = 1, radialSegments = 8, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper( 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );\n\n\t\tthis.type = 'ConeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new ConeGeometry( data.radius, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass PolyhedronGeometry extends BufferGeometry {\n\n\tconstructor( vertices = [], indices = [], radius = 1, detail = 0 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PolyhedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tvertices: vertices,\n\t\t\tindices: indices,\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t\t// default buffer data\n\n\t\tconst vertexBuffer = [];\n\t\tconst uvBuffer = [];\n\n\t\t// the subdivision creates the vertex buffer data\n\n\t\tsubdivide( detail );\n\n\t\t// all vertices should lie on a conceptual sphere with a given radius\n\n\t\tapplyRadius( radius );\n\n\t\t// finally, create the uv data\n\n\t\tgenerateUVs();\n\n\t\t// build non-indexed geometry\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertexBuffer, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( vertexBuffer.slice(), 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvBuffer, 2 ) );\n\n\t\tif ( detail === 0 ) {\n\n\t\t\tthis.computeVertexNormals(); // flat normals\n\n\t\t} else {\n\n\t\t\tthis.normalizeNormals(); // smooth normals\n\n\t\t}\n\n\t\t// helper functions\n\n\t\tfunction subdivide( detail ) {\n\n\t\t\tconst a = new Vector3();\n\t\t\tconst b = new Vector3();\n\t\t\tconst c = new Vector3();\n\n\t\t\t// iterate over all faces and apply a subdivison with the given detail value\n\n\t\t\tfor ( let i = 0; i < indices.length; i += 3 ) {\n\n\t\t\t\t// get the vertices of the face\n\n\t\t\t\tgetVertexByIndex( indices[ i + 0 ], a );\n\t\t\t\tgetVertexByIndex( indices[ i + 1 ], b );\n\t\t\t\tgetVertexByIndex( indices[ i + 2 ], c );\n\n\t\t\t\t// perform subdivision\n\n\t\t\t\tsubdivideFace( a, b, c, detail );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction subdivideFace( a, b, c, detail ) {\n\n\t\t\tconst cols = detail + 1;\n\n\t\t\t// we use this multidimensional array as a data structure for creating the subdivision\n\n\t\t\tconst v = [];\n\n\t\t\t// construct all of the vertices for this subdivision\n\n\t\t\tfor ( let i = 0; i <= cols; i ++ ) {\n\n\t\t\t\tv[ i ] = [];\n\n\t\t\t\tconst aj = a.clone().lerp( c, i / cols );\n\t\t\t\tconst bj = b.clone().lerp( c, i / cols );\n\n\t\t\t\tconst rows = cols - i;\n\n\t\t\t\tfor ( let j = 0; j <= rows; j ++ ) {\n\n\t\t\t\t\tif ( j === 0 && i === cols ) {\n\n\t\t\t\t\t\tv[ i ][ j ] = aj;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tv[ i ][ j ] = aj.clone().lerp( bj, j / rows );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// construct all of the faces\n\n\t\t\tfor ( let i = 0; i < cols; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j < 2 * ( cols - i ) - 1; j ++ ) {\n\n\t\t\t\t\tconst k = Math.floor( j / 2 );\n\n\t\t\t\t\tif ( j % 2 === 0 ) {\n\n\t\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\t\t\t\t\t\tpushVertex( v[ i ][ k ] );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction applyRadius( radius ) {\n\n\t\t\tconst vertex = new Vector3();\n\n\t\t\t// iterate over the entire buffer and apply the radius to each vertex\n\n\t\t\tfor ( let i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\t\tvertex.normalize().multiplyScalar( radius );\n\n\t\t\t\tvertexBuffer[ i + 0 ] = vertex.x;\n\t\t\t\tvertexBuffer[ i + 1 ] = vertex.y;\n\t\t\t\tvertexBuffer[ i + 2 ] = vertex.z;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateUVs() {\n\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tfor ( let i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\t\tconst u = azimuth( vertex ) / 2 / Math.PI + 0.5;\n\t\t\t\tconst v = inclination( vertex ) / Math.PI + 0.5;\n\t\t\t\tuvBuffer.push( u, 1 - v );\n\n\t\t\t}\n\n\t\t\tcorrectUVs();\n\n\t\t\tcorrectSeam();\n\n\t\t}\n\n\t\tfunction correctSeam() {\n\n\t\t\t// handle case when face straddles the seam, see #3269\n\n\t\t\tfor ( let i = 0; i < uvBuffer.length; i += 6 ) {\n\n\t\t\t\t// uv data of a single face\n\n\t\t\t\tconst x0 = uvBuffer[ i + 0 ];\n\t\t\t\tconst x1 = uvBuffer[ i + 2 ];\n\t\t\t\tconst x2 = uvBuffer[ i + 4 ];\n\n\t\t\t\tconst max = Math.max( x0, x1, x2 );\n\t\t\t\tconst min = Math.min( x0, x1, x2 );\n\n\t\t\t\t// 0.9 is somewhat arbitrary\n\n\t\t\t\tif ( max > 0.9 && min < 0.1 ) {\n\n\t\t\t\t\tif ( x0 < 0.2 ) uvBuffer[ i + 0 ] += 1;\n\t\t\t\t\tif ( x1 < 0.2 ) uvBuffer[ i + 2 ] += 1;\n\t\t\t\t\tif ( x2 < 0.2 ) uvBuffer[ i + 4 ] += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction pushVertex( vertex ) {\n\n\t\t\tvertexBuffer.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t\tfunction getVertexByIndex( index, vertex ) {\n\n\t\t\tconst stride = index * 3;\n\n\t\t\tvertex.x = vertices[ stride + 0 ];\n\t\t\tvertex.y = vertices[ stride + 1 ];\n\t\t\tvertex.z = vertices[ stride + 2 ];\n\n\t\t}\n\n\t\tfunction correctUVs() {\n\n\t\t\tconst a = new Vector3();\n\t\t\tconst b = new Vector3();\n\t\t\tconst c = new Vector3();\n\n\t\t\tconst centroid = new Vector3();\n\n\t\t\tconst uvA = new Vector2();\n\t\t\tconst uvB = new Vector2();\n\t\t\tconst uvC = new Vector2();\n\n\t\t\tfor ( let i = 0, j = 0; i < vertexBuffer.length; i += 9, j += 6 ) {\n\n\t\t\t\ta.set( vertexBuffer[ i + 0 ], vertexBuffer[ i + 1 ], vertexBuffer[ i + 2 ] );\n\t\t\t\tb.set( vertexBuffer[ i + 3 ], vertexBuffer[ i + 4 ], vertexBuffer[ i + 5 ] );\n\t\t\t\tc.set( vertexBuffer[ i + 6 ], vertexBuffer[ i + 7 ], vertexBuffer[ i + 8 ] );\n\n\t\t\t\tuvA.set( uvBuffer[ j + 0 ], uvBuffer[ j + 1 ] );\n\t\t\t\tuvB.set( uvBuffer[ j + 2 ], uvBuffer[ j + 3 ] );\n\t\t\t\tuvC.set( uvBuffer[ j + 4 ], uvBuffer[ j + 5 ] );\n\n\t\t\t\tcentroid.copy( a ).add( b ).add( c ).divideScalar( 3 );\n\n\t\t\t\tconst azi = azimuth( centroid );\n\n\t\t\t\tcorrectUV( uvA, j + 0, a, azi );\n\t\t\t\tcorrectUV( uvB, j + 2, b, azi );\n\t\t\t\tcorrectUV( uvC, j + 4, c, azi );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction correctUV( uv, stride, vector, azimuth ) {\n\n\t\t\tif ( ( azimuth < 0 ) && ( uv.x === 1 ) ) {\n\n\t\t\t\tuvBuffer[ stride ] = uv.x - 1;\n\n\t\t\t}\n\n\t\t\tif ( ( vector.x === 0 ) && ( vector.z === 0 ) ) {\n\n\t\t\t\tuvBuffer[ stride ] = azimuth / 2 / Math.PI + 0.5;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Angle around the Y axis, counter-clockwise when looking from above.\n\n\t\tfunction azimuth( vector ) {\n\n\t\t\treturn Math.atan2( vector.z, - vector.x );\n\n\t\t}\n\n\n\t\t// Angle above the XZ plane.\n\n\t\tfunction inclination( vector ) {\n\n\t\t\treturn Math.atan2( - vector.y, Math.sqrt( ( vector.x * vector.x ) + ( vector.z * vector.z ) ) );\n\n\t\t}\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new PolyhedronGeometry( data.vertices, data.indices, data.radius, data.details );\n\n\t}\n\n}\n\nclass DodecahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\t\tconst r = 1 / t;\n\n\t\tconst vertices = [\n\n\t\t\t// (±1, ±1, ±1)\n\t\t\t- 1, - 1, - 1,\t- 1, - 1, 1,\n\t\t\t- 1, 1, - 1, - 1, 1, 1,\n\t\t\t1, - 1, - 1, 1, - 1, 1,\n\t\t\t1, 1, - 1, 1, 1, 1,\n\n\t\t\t// (0, ±1/φ, ±φ)\n\t\t\t0, - r, - t, 0, - r, t,\n\t\t\t0, r, - t, 0, r, t,\n\n\t\t\t// (±1/φ, ±φ, 0)\n\t\t\t- r, - t, 0, - r, t, 0,\n\t\t\tr, - t, 0, r, t, 0,\n\n\t\t\t// (±φ, 0, ±1/φ)\n\t\t\t- t, 0, - r, t, 0, - r,\n\t\t\t- t, 0, r, t, 0, r\n\t\t];\n\n\t\tconst indices = [\n\t\t\t3, 11, 7, \t3, 7, 15, \t3, 15, 13,\n\t\t\t7, 19, 17, \t7, 17, 6, \t7, 6, 15,\n\t\t\t17, 4, 8, \t17, 8, 10, \t17, 10, 6,\n\t\t\t8, 0, 16, \t8, 16, 2, \t8, 2, 10,\n\t\t\t0, 12, 1, \t0, 1, 18, \t0, 18, 16,\n\t\t\t6, 10, 2, \t6, 2, 13, \t6, 13, 15,\n\t\t\t2, 16, 18, \t2, 18, 3, \t2, 3, 13,\n\t\t\t18, 1, 9, \t18, 9, 11, \t18, 11, 3,\n\t\t\t4, 14, 12, \t4, 12, 0, \t4, 0, 8,\n\t\t\t11, 9, 5, \t11, 5, 19, \t11, 19, 7,\n\t\t\t19, 5, 14, \t19, 14, 4, \t19, 4, 17,\n\t\t\t1, 12, 14, \t1, 14, 5, \t1, 5, 9\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'DodecahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new DodecahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\nconst _v0 = new Vector3();\nconst _v1$1 = new Vector3();\nconst _normal = new Vector3();\nconst _triangle = new Triangle();\n\nclass EdgesGeometry extends BufferGeometry {\n\n\tconstructor( geometry = null, thresholdAngle = 1 ) {\n\n\t\tsuper();\n\t\tthis.type = 'EdgesGeometry';\n\n\t\tthis.parameters = {\n\t\t\tgeometry: geometry,\n\t\t\tthresholdAngle: thresholdAngle\n\t\t};\n\n\t\tif ( geometry !== null ) {\n\n\t\t\tconst precisionPoints = 4;\n\t\t\tconst precision = Math.pow( 10, precisionPoints );\n\t\t\tconst thresholdDot = Math.cos( DEG2RAD * thresholdAngle );\n\n\t\t\tconst indexAttr = geometry.getIndex();\n\t\t\tconst positionAttr = geometry.getAttribute( 'position' );\n\t\t\tconst indexCount = indexAttr ? indexAttr.count : positionAttr.count;\n\n\t\t\tconst indexArr = [ 0, 0, 0 ];\n\t\t\tconst vertKeys = [ 'a', 'b', 'c' ];\n\t\t\tconst hashes = new Array( 3 );\n\n\t\t\tconst edgeData = {};\n\t\t\tconst vertices = [];\n\t\t\tfor ( let i = 0; i < indexCount; i += 3 ) {\n\n\t\t\t\tif ( indexAttr ) {\n\n\t\t\t\t\tindexArr[ 0 ] = indexAttr.getX( i );\n\t\t\t\t\tindexArr[ 1 ] = indexAttr.getX( i + 1 );\n\t\t\t\t\tindexArr[ 2 ] = indexAttr.getX( i + 2 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tindexArr[ 0 ] = i;\n\t\t\t\t\tindexArr[ 1 ] = i + 1;\n\t\t\t\t\tindexArr[ 2 ] = i + 2;\n\n\t\t\t\t}\n\n\t\t\t\tconst { a, b, c } = _triangle;\n\t\t\t\ta.fromBufferAttribute( positionAttr, indexArr[ 0 ] );\n\t\t\t\tb.fromBufferAttribute( positionAttr, indexArr[ 1 ] );\n\t\t\t\tc.fromBufferAttribute( positionAttr, indexArr[ 2 ] );\n\t\t\t\t_triangle.getNormal( _normal );\n\n\t\t\t\t// create hashes for the edge from the vertices\n\t\t\t\thashes[ 0 ] = `${ Math.round( a.x * precision ) },${ Math.round( a.y * precision ) },${ Math.round( a.z * precision ) }`;\n\t\t\t\thashes[ 1 ] = `${ Math.round( b.x * precision ) },${ Math.round( b.y * precision ) },${ Math.round( b.z * precision ) }`;\n\t\t\t\thashes[ 2 ] = `${ Math.round( c.x * precision ) },${ Math.round( c.y * precision ) },${ Math.round( c.z * precision ) }`;\n\n\t\t\t\t// skip degenerate triangles\n\t\t\t\tif ( hashes[ 0 ] === hashes[ 1 ] || hashes[ 1 ] === hashes[ 2 ] || hashes[ 2 ] === hashes[ 0 ] ) {\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\t// iterate over every edge\n\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t// get the first and next vertex making up the edge\n\t\t\t\t\tconst jNext = ( j + 1 ) % 3;\n\t\t\t\t\tconst vecHash0 = hashes[ j ];\n\t\t\t\t\tconst vecHash1 = hashes[ jNext ];\n\t\t\t\t\tconst v0 = _triangle[ vertKeys[ j ] ];\n\t\t\t\t\tconst v1 = _triangle[ vertKeys[ jNext ] ];\n\n\t\t\t\t\tconst hash = `${ vecHash0 }_${ vecHash1 }`;\n\t\t\t\t\tconst reverseHash = `${ vecHash1 }_${ vecHash0 }`;\n\n\t\t\t\t\tif ( reverseHash in edgeData && edgeData[ reverseHash ] ) {\n\n\t\t\t\t\t\t// if we found a sibling edge add it into the vertex array if\n\t\t\t\t\t\t// it meets the angle threshold and delete the edge from the map.\n\t\t\t\t\t\tif ( _normal.dot( edgeData[ reverseHash ].normal ) <= thresholdDot ) {\n\n\t\t\t\t\t\t\tvertices.push( v0.x, v0.y, v0.z );\n\t\t\t\t\t\t\tvertices.push( v1.x, v1.y, v1.z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tedgeData[ reverseHash ] = null;\n\n\t\t\t\t\t} else if ( ! ( hash in edgeData ) ) {\n\n\t\t\t\t\t\t// if we've already got an edge here then skip adding a new one\n\t\t\t\t\t\tedgeData[ hash ] = {\n\n\t\t\t\t\t\t\tindex0: indexArr[ j ],\n\t\t\t\t\t\t\tindex1: indexArr[ jNext ],\n\t\t\t\t\t\t\tnormal: _normal.clone(),\n\n\t\t\t\t\t\t};\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// iterate over all remaining, unmatched edges and add them to the vertex array\n\t\t\tfor ( const key in edgeData ) {\n\n\t\t\t\tif ( edgeData[ key ] ) {\n\n\t\t\t\t\tconst { index0, index1 } = edgeData[ key ];\n\t\t\t\t\t_v0.fromBufferAttribute( positionAttr, index0 );\n\t\t\t\t\t_v1$1.fromBufferAttribute( positionAttr, index1 );\n\n\t\t\t\t\tvertices.push( _v0.x, _v0.y, _v0.z );\n\t\t\t\t\tvertices.push( _v1$1.x, _v1$1.y, _v1$1.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Extensible curve object.\n *\n * Some common of curve methods:\n * .getPoint( t, optionalTarget ), .getTangent( t, optionalTarget )\n * .getPointAt( u, optionalTarget ), .getTangentAt( u, optionalTarget )\n * .getPoints(), .getSpacedPoints()\n * .getLength()\n * .updateArcLengths()\n *\n * This following curves inherit from THREE.Curve:\n *\n * -- 2D curves --\n * THREE.ArcCurve\n * THREE.CubicBezierCurve\n * THREE.EllipseCurve\n * THREE.LineCurve\n * THREE.QuadraticBezierCurve\n * THREE.SplineCurve\n *\n * -- 3D curves --\n * THREE.CatmullRomCurve3\n * THREE.CubicBezierCurve3\n * THREE.LineCurve3\n * THREE.QuadraticBezierCurve3\n *\n * A series of curves can be represented as a THREE.CurvePath.\n *\n **/\n\nclass Curve {\n\n\tconstructor() {\n\n\t\tthis.type = 'Curve';\n\n\t\tthis.arcLengthDivisions = 200;\n\n\t}\n\n\t// Virtual base class method to overwrite and implement in subclasses\n\t//\t- t [0 .. 1]\n\n\tgetPoint( /* t, optionalTarget */ ) {\n\n\t\tconsole.warn( 'THREE.Curve: .getPoint() not implemented.' );\n\t\treturn null;\n\n\t}\n\n\t// Get point at relative position in curve according to arc length\n\t// - u [0 .. 1]\n\n\tgetPointAt( u, optionalTarget ) {\n\n\t\tconst t = this.getUtoTmapping( u );\n\t\treturn this.getPoint( t, optionalTarget );\n\n\t}\n\n\t// Get sequence of points using getPoint( t )\n\n\tgetPoints( divisions = 5 ) {\n\n\t\tconst points = [];\n\n\t\tfor ( let d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPoint( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t}\n\n\t// Get sequence of points using getPointAt( u )\n\n\tgetSpacedPoints( divisions = 5 ) {\n\n\t\tconst points = [];\n\n\t\tfor ( let d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPointAt( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t}\n\n\t// Get total curve arc length\n\n\tgetLength() {\n\n\t\tconst lengths = this.getLengths();\n\t\treturn lengths[ lengths.length - 1 ];\n\n\t}\n\n\t// Get list of cumulative segment lengths\n\n\tgetLengths( divisions = this.arcLengthDivisions ) {\n\n\t\tif ( this.cacheArcLengths &&\n\t\t\t( this.cacheArcLengths.length === divisions + 1 ) &&\n\t\t\t! this.needsUpdate ) {\n\n\t\t\treturn this.cacheArcLengths;\n\n\t\t}\n\n\t\tthis.needsUpdate = false;\n\n\t\tconst cache = [];\n\t\tlet current, last = this.getPoint( 0 );\n\t\tlet sum = 0;\n\n\t\tcache.push( 0 );\n\n\t\tfor ( let p = 1; p <= divisions; p ++ ) {\n\n\t\t\tcurrent = this.getPoint( p / divisions );\n\t\t\tsum += current.distanceTo( last );\n\t\t\tcache.push( sum );\n\t\t\tlast = current;\n\n\t\t}\n\n\t\tthis.cacheArcLengths = cache;\n\n\t\treturn cache; // { sums: cache, sum: sum }; Sum is in the last element.\n\n\t}\n\n\tupdateArcLengths() {\n\n\t\tthis.needsUpdate = true;\n\t\tthis.getLengths();\n\n\t}\n\n\t// Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant\n\n\tgetUtoTmapping( u, distance ) {\n\n\t\tconst arcLengths = this.getLengths();\n\n\t\tlet i = 0;\n\t\tconst il = arcLengths.length;\n\n\t\tlet targetArcLength; // The targeted u distance value to get\n\n\t\tif ( distance ) {\n\n\t\t\ttargetArcLength = distance;\n\n\t\t} else {\n\n\t\t\ttargetArcLength = u * arcLengths[ il - 1 ];\n\n\t\t}\n\n\t\t// binary search for the index with largest value smaller than target u distance\n\n\t\tlet low = 0, high = il - 1, comparison;\n\n\t\twhile ( low <= high ) {\n\n\t\t\ti = Math.floor( low + ( high - low ) / 2 ); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats\n\n\t\t\tcomparison = arcLengths[ i ] - targetArcLength;\n\n\t\t\tif ( comparison < 0 ) {\n\n\t\t\t\tlow = i + 1;\n\n\t\t\t} else if ( comparison > 0 ) {\n\n\t\t\t\thigh = i - 1;\n\n\t\t\t} else {\n\n\t\t\t\thigh = i;\n\t\t\t\tbreak;\n\n\t\t\t\t// DONE\n\n\t\t\t}\n\n\t\t}\n\n\t\ti = high;\n\n\t\tif ( arcLengths[ i ] === targetArcLength ) {\n\n\t\t\treturn i / ( il - 1 );\n\n\t\t}\n\n\t\t// we could get finer grain at lengths, or use simple interpolation between two points\n\n\t\tconst lengthBefore = arcLengths[ i ];\n\t\tconst lengthAfter = arcLengths[ i + 1 ];\n\n\t\tconst segmentLength = lengthAfter - lengthBefore;\n\n\t\t// determine where we are between the 'before' and 'after' points\n\n\t\tconst segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength;\n\n\t\t// add that fractional amount to t\n\n\t\tconst t = ( i + segmentFraction ) / ( il - 1 );\n\n\t\treturn t;\n\n\t}\n\n\t// Returns a unit vector tangent at t\n\t// In case any sub curve does not implement its tangent derivation,\n\t// 2 points a small delta apart will be used to find its gradient\n\t// which seems to give a reasonable approximation\n\n\tgetTangent( t, optionalTarget ) {\n\n\t\tconst delta = 0.0001;\n\t\tlet t1 = t - delta;\n\t\tlet t2 = t + delta;\n\n\t\t// Capping in case of danger\n\n\t\tif ( t1 < 0 ) t1 = 0;\n\t\tif ( t2 > 1 ) t2 = 1;\n\n\t\tconst pt1 = this.getPoint( t1 );\n\t\tconst pt2 = this.getPoint( t2 );\n\n\t\tconst tangent = optionalTarget || ( ( pt1.isVector2 ) ? new Vector2() : new Vector3() );\n\n\t\ttangent.copy( pt2 ).sub( pt1 ).normalize();\n\n\t\treturn tangent;\n\n\t}\n\n\tgetTangentAt( u, optionalTarget ) {\n\n\t\tconst t = this.getUtoTmapping( u );\n\t\treturn this.getTangent( t, optionalTarget );\n\n\t}\n\n\tcomputeFrenetFrames( segments, closed ) {\n\n\t\t// see http://www.cs.indiana.edu/pub/techreports/TR425.pdf\n\n\t\tconst normal = new Vector3();\n\n\t\tconst tangents = [];\n\t\tconst normals = [];\n\t\tconst binormals = [];\n\n\t\tconst vec = new Vector3();\n\t\tconst mat = new Matrix4();\n\n\t\t// compute the tangent vectors for each segment on the curve\n\n\t\tfor ( let i = 0; i <= segments; i ++ ) {\n\n\t\t\tconst u = i / segments;\n\n\t\t\ttangents[ i ] = this.getTangentAt( u, new Vector3() );\n\n\t\t}\n\n\t\t// select an initial normal vector perpendicular to the first tangent vector,\n\t\t// and in the direction of the minimum tangent xyz component\n\n\t\tnormals[ 0 ] = new Vector3();\n\t\tbinormals[ 0 ] = new Vector3();\n\t\tlet min = Number.MAX_VALUE;\n\t\tconst tx = Math.abs( tangents[ 0 ].x );\n\t\tconst ty = Math.abs( tangents[ 0 ].y );\n\t\tconst tz = Math.abs( tangents[ 0 ].z );\n\n\t\tif ( tx <= min ) {\n\n\t\t\tmin = tx;\n\t\t\tnormal.set( 1, 0, 0 );\n\n\t\t}\n\n\t\tif ( ty <= min ) {\n\n\t\t\tmin = ty;\n\t\t\tnormal.set( 0, 1, 0 );\n\n\t\t}\n\n\t\tif ( tz <= min ) {\n\n\t\t\tnormal.set( 0, 0, 1 );\n\n\t\t}\n\n\t\tvec.crossVectors( tangents[ 0 ], normal ).normalize();\n\n\t\tnormals[ 0 ].crossVectors( tangents[ 0 ], vec );\n\t\tbinormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] );\n\n\n\t\t// compute the slowly-varying normal and binormal vectors for each segment on the curve\n\n\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\tnormals[ i ] = normals[ i - 1 ].clone();\n\n\t\t\tbinormals[ i ] = binormals[ i - 1 ].clone();\n\n\t\t\tvec.crossVectors( tangents[ i - 1 ], tangents[ i ] );\n\n\t\t\tif ( vec.length() > Number.EPSILON ) {\n\n\t\t\t\tvec.normalize();\n\n\t\t\t\tconst theta = Math.acos( clamp( tangents[ i - 1 ].dot( tangents[ i ] ), - 1, 1 ) ); // clamp for floating pt errors\n\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( vec, theta ) );\n\n\t\t\t}\n\n\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t}\n\n\t\t// if the curve is closed, postprocess the vectors so the first and last normal vectors are the same\n\n\t\tif ( closed === true ) {\n\n\t\t\tlet theta = Math.acos( clamp( normals[ 0 ].dot( normals[ segments ] ), - 1, 1 ) );\n\t\t\ttheta /= segments;\n\n\t\t\tif ( tangents[ 0 ].dot( vec.crossVectors( normals[ 0 ], normals[ segments ] ) ) > 0 ) {\n\n\t\t\t\ttheta = - theta;\n\n\t\t\t}\n\n\t\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\t\t// twist a little...\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( tangents[ i ], theta * i ) );\n\t\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\ttangents: tangents,\n\t\t\tnormals: normals,\n\t\t\tbinormals: binormals\n\t\t};\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.arcLengthDivisions = source.arcLengthDivisions;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Curve',\n\t\t\t\tgenerator: 'Curve.toJSON'\n\t\t\t}\n\t\t};\n\n\t\tdata.arcLengthDivisions = this.arcLengthDivisions;\n\t\tdata.type = this.type;\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tthis.arcLengthDivisions = json.arcLengthDivisions;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass EllipseCurve extends Curve {\n\n\tconstructor( aX = 0, aY = 0, xRadius = 1, yRadius = 1, aStartAngle = 0, aEndAngle = Math.PI * 2, aClockwise = false, aRotation = 0 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'EllipseCurve';\n\n\t\tthis.aX = aX;\n\t\tthis.aY = aY;\n\n\t\tthis.xRadius = xRadius;\n\t\tthis.yRadius = yRadius;\n\n\t\tthis.aStartAngle = aStartAngle;\n\t\tthis.aEndAngle = aEndAngle;\n\n\t\tthis.aClockwise = aClockwise;\n\n\t\tthis.aRotation = aRotation;\n\n\t}\n\n\tgetPoint( t, optionalTarget ) {\n\n\t\tconst point = optionalTarget || new Vector2();\n\n\t\tconst twoPi = Math.PI * 2;\n\t\tlet deltaAngle = this.aEndAngle - this.aStartAngle;\n\t\tconst samePoints = Math.abs( deltaAngle ) < Number.EPSILON;\n\n\t\t// ensures that deltaAngle is 0 .. 2 PI\n\t\twhile ( deltaAngle < 0 ) deltaAngle += twoPi;\n\t\twhile ( deltaAngle > twoPi ) deltaAngle -= twoPi;\n\n\t\tif ( deltaAngle < Number.EPSILON ) {\n\n\t\t\tif ( samePoints ) {\n\n\t\t\t\tdeltaAngle = 0;\n\n\t\t\t} else {\n\n\t\t\t\tdeltaAngle = twoPi;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.aClockwise === true && ! samePoints ) {\n\n\t\t\tif ( deltaAngle === twoPi ) {\n\n\t\t\t\tdeltaAngle = - twoPi;\n\n\t\t\t} else {\n\n\t\t\t\tdeltaAngle = deltaAngle - twoPi;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst angle = this.aStartAngle + t * deltaAngle;\n\t\tlet x = this.aX + this.xRadius * Math.cos( angle );\n\t\tlet y = this.aY + this.yRadius * Math.sin( angle );\n\n\t\tif ( this.aRotation !== 0 ) {\n\n\t\t\tconst cos = Math.cos( this.aRotation );\n\t\t\tconst sin = Math.sin( this.aRotation );\n\n\t\t\tconst tx = x - this.aX;\n\t\t\tconst ty = y - this.aY;\n\n\t\t\t// Rotate the point about the center of the ellipse.\n\t\t\tx = tx * cos - ty * sin + this.aX;\n\t\t\ty = tx * sin + ty * cos + this.aY;\n\n\t\t}\n\n\t\treturn point.set( x, y );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.aX = source.aX;\n\t\tthis.aY = source.aY;\n\n\t\tthis.xRadius = source.xRadius;\n\t\tthis.yRadius = source.yRadius;\n\n\t\tthis.aStartAngle = source.aStartAngle;\n\t\tthis.aEndAngle = source.aEndAngle;\n\n\t\tthis.aClockwise = source.aClockwise;\n\n\t\tthis.aRotation = source.aRotation;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.aX = this.aX;\n\t\tdata.aY = this.aY;\n\n\t\tdata.xRadius = this.xRadius;\n\t\tdata.yRadius = this.yRadius;\n\n\t\tdata.aStartAngle = this.aStartAngle;\n\t\tdata.aEndAngle = this.aEndAngle;\n\n\t\tdata.aClockwise = this.aClockwise;\n\n\t\tdata.aRotation = this.aRotation;\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.aX = json.aX;\n\t\tthis.aY = json.aY;\n\n\t\tthis.xRadius = json.xRadius;\n\t\tthis.yRadius = json.yRadius;\n\n\t\tthis.aStartAngle = json.aStartAngle;\n\t\tthis.aEndAngle = json.aEndAngle;\n\n\t\tthis.aClockwise = json.aClockwise;\n\n\t\tthis.aRotation = json.aRotation;\n\n\t\treturn this;\n\n\t}\n\n}\n\nEllipseCurve.prototype.isEllipseCurve = true;\n\nclass ArcCurve extends EllipseCurve {\n\n\tconstructor( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tsuper( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\t\tthis.type = 'ArcCurve';\n\n\t}\n\n}\n\nArcCurve.prototype.isArcCurve = true;\n\n/**\n * Centripetal CatmullRom Curve - which is useful for avoiding\n * cusps and self-intersections in non-uniform catmull rom curves.\n * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf\n *\n * curve.type accepts centripetal(default), chordal and catmullrom\n * curve.tension is used for catmullrom which defaults to 0.5\n */\n\n\n/*\nBased on an optimized c++ solution in\n - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/\n - http://ideone.com/NoEbVM\n\nThis CubicPoly class could be used for reusing some variables and calculations,\nbut for three.js curve use, it could be possible inlined and flatten into a single function call\nwhich can be placed in CurveUtils.\n*/\n\nfunction CubicPoly() {\n\n\tlet c0 = 0, c1 = 0, c2 = 0, c3 = 0;\n\n\t/*\n\t * Compute coefficients for a cubic polynomial\n\t * p(s) = c0 + c1*s + c2*s^2 + c3*s^3\n\t * such that\n\t * p(0) = x0, p(1) = x1\n\t * and\n\t * p'(0) = t0, p'(1) = t1.\n\t */\n\tfunction init( x0, x1, t0, t1 ) {\n\n\t\tc0 = x0;\n\t\tc1 = t0;\n\t\tc2 = - 3 * x0 + 3 * x1 - 2 * t0 - t1;\n\t\tc3 = 2 * x0 - 2 * x1 + t0 + t1;\n\n\t}\n\n\treturn {\n\n\t\tinitCatmullRom: function ( x0, x1, x2, x3, tension ) {\n\n\t\t\tinit( x1, x2, tension * ( x2 - x0 ), tension * ( x3 - x1 ) );\n\n\t\t},\n\n\t\tinitNonuniformCatmullRom: function ( x0, x1, x2, x3, dt0, dt1, dt2 ) {\n\n\t\t\t// compute tangents when parameterized in [t1,t2]\n\t\t\tlet t1 = ( x1 - x0 ) / dt0 - ( x2 - x0 ) / ( dt0 + dt1 ) + ( x2 - x1 ) / dt1;\n\t\t\tlet t2 = ( x2 - x1 ) / dt1 - ( x3 - x1 ) / ( dt1 + dt2 ) + ( x3 - x2 ) / dt2;\n\n\t\t\t// rescale tangents for parametrization in [0,1]\n\t\t\tt1 *= dt1;\n\t\t\tt2 *= dt1;\n\n\t\t\tinit( x1, x2, t1, t2 );\n\n\t\t},\n\n\t\tcalc: function ( t ) {\n\n\t\t\tconst t2 = t * t;\n\t\t\tconst t3 = t2 * t;\n\t\t\treturn c0 + c1 * t + c2 * t2 + c3 * t3;\n\n\t\t}\n\n\t};\n\n}\n\n//\n\nconst tmp = new Vector3();\nconst px = new CubicPoly(), py = new CubicPoly(), pz = new CubicPoly();\n\nclass CatmullRomCurve3 extends Curve {\n\n\tconstructor( points = [], closed = false, curveType = 'centripetal', tension = 0.5 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CatmullRomCurve3';\n\n\t\tthis.points = points;\n\t\tthis.closed = closed;\n\t\tthis.curveType = curveType;\n\t\tthis.tension = tension;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst points = this.points;\n\t\tconst l = points.length;\n\n\t\tconst p = ( l - ( this.closed ? 0 : 1 ) ) * t;\n\t\tlet intPoint = Math.floor( p );\n\t\tlet weight = p - intPoint;\n\n\t\tif ( this.closed ) {\n\n\t\t\tintPoint += intPoint > 0 ? 0 : ( Math.floor( Math.abs( intPoint ) / l ) + 1 ) * l;\n\n\t\t} else if ( weight === 0 && intPoint === l - 1 ) {\n\n\t\t\tintPoint = l - 2;\n\t\t\tweight = 1;\n\n\t\t}\n\n\t\tlet p0, p3; // 4 points (p1 & p2 defined below)\n\n\t\tif ( this.closed || intPoint > 0 ) {\n\n\t\t\tp0 = points[ ( intPoint - 1 ) % l ];\n\n\t\t} else {\n\n\t\t\t// extrapolate first point\n\t\t\ttmp.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] );\n\t\t\tp0 = tmp;\n\n\t\t}\n\n\t\tconst p1 = points[ intPoint % l ];\n\t\tconst p2 = points[ ( intPoint + 1 ) % l ];\n\n\t\tif ( this.closed || intPoint + 2 < l ) {\n\n\t\t\tp3 = points[ ( intPoint + 2 ) % l ];\n\n\t\t} else {\n\n\t\t\t// extrapolate last point\n\t\t\ttmp.subVectors( points[ l - 1 ], points[ l - 2 ] ).add( points[ l - 1 ] );\n\t\t\tp3 = tmp;\n\n\t\t}\n\n\t\tif ( this.curveType === 'centripetal' || this.curveType === 'chordal' ) {\n\n\t\t\t// init Centripetal / Chordal Catmull-Rom\n\t\t\tconst pow = this.curveType === 'chordal' ? 0.5 : 0.25;\n\t\t\tlet dt0 = Math.pow( p0.distanceToSquared( p1 ), pow );\n\t\t\tlet dt1 = Math.pow( p1.distanceToSquared( p2 ), pow );\n\t\t\tlet dt2 = Math.pow( p2.distanceToSquared( p3 ), pow );\n\n\t\t\t// safety check for repeated points\n\t\t\tif ( dt1 < 1e-4 ) dt1 = 1.0;\n\t\t\tif ( dt0 < 1e-4 ) dt0 = dt1;\n\t\t\tif ( dt2 < 1e-4 ) dt2 = dt1;\n\n\t\t\tpx.initNonuniformCatmullRom( p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2 );\n\t\t\tpy.initNonuniformCatmullRom( p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2 );\n\t\t\tpz.initNonuniformCatmullRom( p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2 );\n\n\t\t} else if ( this.curveType === 'catmullrom' ) {\n\n\t\t\tpx.initCatmullRom( p0.x, p1.x, p2.x, p3.x, this.tension );\n\t\t\tpy.initCatmullRom( p0.y, p1.y, p2.y, p3.y, this.tension );\n\t\t\tpz.initCatmullRom( p0.z, p1.z, p2.z, p3.z, this.tension );\n\n\t\t}\n\n\t\tpoint.set(\n\t\t\tpx.calc( weight ),\n\t\t\tpy.calc( weight ),\n\t\t\tpz.calc( weight )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = source.points[ i ];\n\n\t\t\tthis.points.push( point.clone() );\n\n\t\t}\n\n\t\tthis.closed = source.closed;\n\t\tthis.curveType = source.curveType;\n\t\tthis.tension = source.tension;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.points = [];\n\n\t\tfor ( let i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = this.points[ i ];\n\t\t\tdata.points.push( point.toArray() );\n\n\t\t}\n\n\t\tdata.closed = this.closed;\n\t\tdata.curveType = this.curveType;\n\t\tdata.tension = this.tension;\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = json.points[ i ];\n\t\t\tthis.points.push( new Vector3().fromArray( point ) );\n\n\t\t}\n\n\t\tthis.closed = json.closed;\n\t\tthis.curveType = json.curveType;\n\t\tthis.tension = json.tension;\n\n\t\treturn this;\n\n\t}\n\n}\n\nCatmullRomCurve3.prototype.isCatmullRomCurve3 = true;\n\n/**\n * Bezier Curves formulas obtained from\n * http://en.wikipedia.org/wiki/Bézier_curve\n */\n\nfunction CatmullRom( t, p0, p1, p2, p3 ) {\n\n\tconst v0 = ( p2 - p0 ) * 0.5;\n\tconst v1 = ( p3 - p1 ) * 0.5;\n\tconst t2 = t * t;\n\tconst t3 = t * t2;\n\treturn ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1;\n\n}\n\n//\n\nfunction QuadraticBezierP0( t, p ) {\n\n\tconst k = 1 - t;\n\treturn k * k * p;\n\n}\n\nfunction QuadraticBezierP1( t, p ) {\n\n\treturn 2 * ( 1 - t ) * t * p;\n\n}\n\nfunction QuadraticBezierP2( t, p ) {\n\n\treturn t * t * p;\n\n}\n\nfunction QuadraticBezier( t, p0, p1, p2 ) {\n\n\treturn QuadraticBezierP0( t, p0 ) + QuadraticBezierP1( t, p1 ) +\n\t\tQuadraticBezierP2( t, p2 );\n\n}\n\n//\n\nfunction CubicBezierP0( t, p ) {\n\n\tconst k = 1 - t;\n\treturn k * k * k * p;\n\n}\n\nfunction CubicBezierP1( t, p ) {\n\n\tconst k = 1 - t;\n\treturn 3 * k * k * t * p;\n\n}\n\nfunction CubicBezierP2( t, p ) {\n\n\treturn 3 * ( 1 - t ) * t * t * p;\n\n}\n\nfunction CubicBezierP3( t, p ) {\n\n\treturn t * t * t * p;\n\n}\n\nfunction CubicBezier( t, p0, p1, p2, p3 ) {\n\n\treturn CubicBezierP0( t, p0 ) + CubicBezierP1( t, p1 ) + CubicBezierP2( t, p2 ) +\n\t\tCubicBezierP3( t, p3 );\n\n}\n\nclass CubicBezierCurve extends Curve {\n\n\tconstructor( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2(), v3 = new Vector2() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CubicBezierCurve';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\t\tthis.v3 = v3;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\t\tpoint.set(\n\t\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\t\tthis.v3.copy( source.v3 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\t\tdata.v3 = this.v3.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\t\tthis.v3.fromArray( json.v3 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nCubicBezierCurve.prototype.isCubicBezierCurve = true;\n\nclass CubicBezierCurve3 extends Curve {\n\n\tconstructor( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3(), v3 = new Vector3() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CubicBezierCurve3';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\t\tthis.v3 = v3;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\t\tpoint.set(\n\t\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y ),\n\t\t\tCubicBezier( t, v0.z, v1.z, v2.z, v3.z )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\t\tthis.v3.copy( source.v3 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\t\tdata.v3 = this.v3.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\t\tthis.v3.fromArray( json.v3 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nCubicBezierCurve3.prototype.isCubicBezierCurve3 = true;\n\nclass LineCurve extends Curve {\n\n\tconstructor( v1 = new Vector2(), v2 = new Vector2() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'LineCurve';\n\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tif ( t === 1 ) {\n\n\t\t\tpoint.copy( this.v2 );\n\n\t\t} else {\n\n\t\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t\t}\n\n\t\treturn point;\n\n\t}\n\n\t// Line curve is linear, so we can overwrite default getPointAt\n\tgetPointAt( u, optionalTarget ) {\n\n\t\treturn this.getPoint( u, optionalTarget );\n\n\t}\n\n\tgetTangent( t, optionalTarget ) {\n\n\t\tconst tangent = optionalTarget || new Vector2();\n\n\t\ttangent.copy( this.v2 ).sub( this.v1 ).normalize();\n\n\t\treturn tangent;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nLineCurve.prototype.isLineCurve = true;\n\nclass LineCurve3 extends Curve {\n\n\tconstructor( v1 = new Vector3(), v2 = new Vector3() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'LineCurve3';\n\t\tthis.isLineCurve3 = true;\n\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tif ( t === 1 ) {\n\n\t\t\tpoint.copy( this.v2 );\n\n\t\t} else {\n\n\t\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t\t}\n\n\t\treturn point;\n\n\t}\n\t// Line curve is linear, so we can overwrite default getPointAt\n\tgetPointAt( u, optionalTarget ) {\n\n\t\treturn this.getPoint( u, optionalTarget );\n\n\t}\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass QuadraticBezierCurve extends Curve {\n\n\tconstructor( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'QuadraticBezierCurve';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\t\tpoint.set(\n\t\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\t\tQuadraticBezier( t, v0.y, v1.y, v2.y )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nQuadraticBezierCurve.prototype.isQuadraticBezierCurve = true;\n\nclass QuadraticBezierCurve3 extends Curve {\n\n\tconstructor( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'QuadraticBezierCurve3';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\t\tpoint.set(\n\t\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\t\tQuadraticBezier( t, v0.y, v1.y, v2.y ),\n\t\t\tQuadraticBezier( t, v0.z, v1.z, v2.z )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nQuadraticBezierCurve3.prototype.isQuadraticBezierCurve3 = true;\n\nclass SplineCurve extends Curve {\n\n\tconstructor( points = [] ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'SplineCurve';\n\n\t\tthis.points = points;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst points = this.points;\n\t\tconst p = ( points.length - 1 ) * t;\n\n\t\tconst intPoint = Math.floor( p );\n\t\tconst weight = p - intPoint;\n\n\t\tconst p0 = points[ intPoint === 0 ? intPoint : intPoint - 1 ];\n\t\tconst p1 = points[ intPoint ];\n\t\tconst p2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ];\n\t\tconst p3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ];\n\n\t\tpoint.set(\n\t\t\tCatmullRom( weight, p0.x, p1.x, p2.x, p3.x ),\n\t\t\tCatmullRom( weight, p0.y, p1.y, p2.y, p3.y )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = source.points[ i ];\n\n\t\t\tthis.points.push( point.clone() );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.points = [];\n\n\t\tfor ( let i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = this.points[ i ];\n\t\t\tdata.points.push( point.toArray() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = json.points[ i ];\n\t\t\tthis.points.push( new Vector2().fromArray( point ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nSplineCurve.prototype.isSplineCurve = true;\n\nvar Curves = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tArcCurve: ArcCurve,\n\tCatmullRomCurve3: CatmullRomCurve3,\n\tCubicBezierCurve: CubicBezierCurve,\n\tCubicBezierCurve3: CubicBezierCurve3,\n\tEllipseCurve: EllipseCurve,\n\tLineCurve: LineCurve,\n\tLineCurve3: LineCurve3,\n\tQuadraticBezierCurve: QuadraticBezierCurve,\n\tQuadraticBezierCurve3: QuadraticBezierCurve3,\n\tSplineCurve: SplineCurve\n});\n\n/**************************************************************\n *\tCurved Path - a curve path is simply a array of connected\n * curves, but retains the api of a curve\n **************************************************************/\n\nclass CurvePath extends Curve {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'CurvePath';\n\n\t\tthis.curves = [];\n\t\tthis.autoClose = false; // Automatically closes the path\n\n\t}\n\n\tadd( curve ) {\n\n\t\tthis.curves.push( curve );\n\n\t}\n\n\tclosePath() {\n\n\t\t// Add a line curve if start and end of lines are not connected\n\t\tconst startPoint = this.curves[ 0 ].getPoint( 0 );\n\t\tconst endPoint = this.curves[ this.curves.length - 1 ].getPoint( 1 );\n\n\t\tif ( ! startPoint.equals( endPoint ) ) {\n\n\t\t\tthis.curves.push( new LineCurve( endPoint, startPoint ) );\n\n\t\t}\n\n\t}\n\n\t// To get accurate point with reference to\n\t// entire path distance at time t,\n\t// following has to be done:\n\n\t// 1. Length of each sub path have to be known\n\t// 2. Locate and identify type of curve\n\t// 3. Get t for the curve\n\t// 4. Return curve.getPointAt(t')\n\n\tgetPoint( t, optionalTarget ) {\n\n\t\tconst d = t * this.getLength();\n\t\tconst curveLengths = this.getCurveLengths();\n\t\tlet i = 0;\n\n\t\t// To think about boundaries points.\n\n\t\twhile ( i < curveLengths.length ) {\n\n\t\t\tif ( curveLengths[ i ] >= d ) {\n\n\t\t\t\tconst diff = curveLengths[ i ] - d;\n\t\t\t\tconst curve = this.curves[ i ];\n\n\t\t\t\tconst segmentLength = curve.getLength();\n\t\t\t\tconst u = segmentLength === 0 ? 0 : 1 - diff / segmentLength;\n\n\t\t\t\treturn curve.getPointAt( u, optionalTarget );\n\n\t\t\t}\n\n\t\t\ti ++;\n\n\t\t}\n\n\t\treturn null;\n\n\t\t// loop where sum != 0, sum > d , sum+1 1 && ! points[ points.length - 1 ].equals( points[ 0 ] ) ) {\n\n\t\t\tpoints.push( points[ 0 ] );\n\n\t\t}\n\n\t\treturn points;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.curves = [];\n\n\t\tfor ( let i = 0, l = source.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = source.curves[ i ];\n\n\t\t\tthis.curves.push( curve.clone() );\n\n\t\t}\n\n\t\tthis.autoClose = source.autoClose;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.autoClose = this.autoClose;\n\t\tdata.curves = [];\n\n\t\tfor ( let i = 0, l = this.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = this.curves[ i ];\n\t\t\tdata.curves.push( curve.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.autoClose = json.autoClose;\n\t\tthis.curves = [];\n\n\t\tfor ( let i = 0, l = json.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = json.curves[ i ];\n\t\t\tthis.curves.push( new Curves[ curve.type ]().fromJSON( curve ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Path extends CurvePath {\n\n\tconstructor( points ) {\n\n\t\tsuper();\n\t\tthis.type = 'Path';\n\n\t\tthis.currentPoint = new Vector2();\n\n\t\tif ( points ) {\n\n\t\t\tthis.setFromPoints( points );\n\n\t\t}\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.moveTo( points[ 0 ].x, points[ 0 ].y );\n\n\t\tfor ( let i = 1, l = points.length; i < l; i ++ ) {\n\n\t\t\tthis.lineTo( points[ i ].x, points[ i ].y );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tmoveTo( x, y ) {\n\n\t\tthis.currentPoint.set( x, y ); // TODO consider referencing vectors instead of copying?\n\n\t\treturn this;\n\n\t}\n\n\tlineTo( x, y ) {\n\n\t\tconst curve = new LineCurve( this.currentPoint.clone(), new Vector2( x, y ) );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( x, y );\n\n\t\treturn this;\n\n\t}\n\n\tquadraticCurveTo( aCPx, aCPy, aX, aY ) {\n\n\t\tconst curve = new QuadraticBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew Vector2( aCPx, aCPy ),\n\t\t\tnew Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tbezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tconst curve = new CubicBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew Vector2( aCP1x, aCP1y ),\n\t\t\tnew Vector2( aCP2x, aCP2y ),\n\t\t\tnew Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tsplineThru( pts /*Array of Vector*/ ) {\n\n\t\tconst npts = [ this.currentPoint.clone() ].concat( pts );\n\n\t\tconst curve = new SplineCurve( npts );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.copy( pts[ pts.length - 1 ] );\n\n\t\treturn this;\n\n\t}\n\n\tarc( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tconst x0 = this.currentPoint.x;\n\t\tconst y0 = this.currentPoint.y;\n\n\t\tthis.absarc( aX + x0, aY + y0, aRadius,\n\t\t\taStartAngle, aEndAngle, aClockwise );\n\n\t\treturn this;\n\n\t}\n\n\tabsarc( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tthis.absellipse( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\t\treturn this;\n\n\t}\n\n\tellipse( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tconst x0 = this.currentPoint.x;\n\t\tconst y0 = this.currentPoint.y;\n\n\t\tthis.absellipse( aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\treturn this;\n\n\t}\n\n\tabsellipse( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tconst curve = new EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\tif ( this.curves.length > 0 ) {\n\n\t\t\t// if a previous curve is present, attempt to join\n\t\t\tconst firstPoint = curve.getPoint( 0 );\n\n\t\t\tif ( ! firstPoint.equals( this.currentPoint ) ) {\n\n\t\t\t\tthis.lineTo( firstPoint.x, firstPoint.y );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.curves.push( curve );\n\n\t\tconst lastPoint = curve.getPoint( 1 );\n\t\tthis.currentPoint.copy( lastPoint );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.currentPoint.copy( source.currentPoint );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.currentPoint = this.currentPoint.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.currentPoint.fromArray( json.currentPoint );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Shape extends Path {\n\n\tconstructor( points ) {\n\n\t\tsuper( points );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.type = 'Shape';\n\n\t\tthis.holes = [];\n\n\t}\n\n\tgetPointsHoles( divisions ) {\n\n\t\tconst holesPts = [];\n\n\t\tfor ( let i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tholesPts[ i ] = this.holes[ i ].getPoints( divisions );\n\n\t\t}\n\n\t\treturn holesPts;\n\n\t}\n\n\t// get points of shape and holes (keypoints based on segments parameter)\n\n\textractPoints( divisions ) {\n\n\t\treturn {\n\n\t\t\tshape: this.getPoints( divisions ),\n\t\t\tholes: this.getPointsHoles( divisions )\n\n\t\t};\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.holes = [];\n\n\t\tfor ( let i = 0, l = source.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = source.holes[ i ];\n\n\t\t\tthis.holes.push( hole.clone() );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.holes = [];\n\n\t\tfor ( let i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = this.holes[ i ];\n\t\t\tdata.holes.push( hole.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.uuid = json.uuid;\n\t\tthis.holes = [];\n\n\t\tfor ( let i = 0, l = json.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = json.holes[ i ];\n\t\t\tthis.holes.push( new Path().fromJSON( hole ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * Port from https://github.com/mapbox/earcut (v2.2.2)\n */\n\nconst Earcut = {\n\n\ttriangulate: function ( data, holeIndices, dim = 2 ) {\n\n\t\tconst hasHoles = holeIndices && holeIndices.length;\n\t\tconst outerLen = hasHoles ? holeIndices[ 0 ] * dim : data.length;\n\t\tlet outerNode = linkedList( data, 0, outerLen, dim, true );\n\t\tconst triangles = [];\n\n\t\tif ( ! outerNode || outerNode.next === outerNode.prev ) return triangles;\n\n\t\tlet minX, minY, maxX, maxY, x, y, invSize;\n\n\t\tif ( hasHoles ) outerNode = eliminateHoles( data, holeIndices, outerNode, dim );\n\n\t\t// if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n\t\tif ( data.length > 80 * dim ) {\n\n\t\t\tminX = maxX = data[ 0 ];\n\t\t\tminY = maxY = data[ 1 ];\n\n\t\t\tfor ( let i = dim; i < outerLen; i += dim ) {\n\n\t\t\t\tx = data[ i ];\n\t\t\t\ty = data[ i + 1 ];\n\t\t\t\tif ( x < minX ) minX = x;\n\t\t\t\tif ( y < minY ) minY = y;\n\t\t\t\tif ( x > maxX ) maxX = x;\n\t\t\t\tif ( y > maxY ) maxY = y;\n\n\t\t\t}\n\n\t\t\t// minX, minY and invSize are later used to transform coords into integers for z-order calculation\n\t\t\tinvSize = Math.max( maxX - minX, maxY - minY );\n\t\t\tinvSize = invSize !== 0 ? 1 / invSize : 0;\n\n\t\t}\n\n\t\tearcutLinked( outerNode, triangles, dim, minX, minY, invSize );\n\n\t\treturn triangles;\n\n\t}\n\n};\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList( data, start, end, dim, clockwise ) {\n\n\tlet i, last;\n\n\tif ( clockwise === ( signedArea( data, start, end, dim ) > 0 ) ) {\n\n\t\tfor ( i = start; i < end; i += dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t} else {\n\n\t\tfor ( i = end - dim; i >= start; i -= dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t}\n\n\tif ( last && equals( last, last.next ) ) {\n\n\t\tremoveNode( last );\n\t\tlast = last.next;\n\n\t}\n\n\treturn last;\n\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints( start, end ) {\n\n\tif ( ! start ) return start;\n\tif ( ! end ) end = start;\n\n\tlet p = start,\n\t\tagain;\n\tdo {\n\n\t\tagain = false;\n\n\t\tif ( ! p.steiner && ( equals( p, p.next ) || area( p.prev, p, p.next ) === 0 ) ) {\n\n\t\t\tremoveNode( p );\n\t\t\tp = end = p.prev;\n\t\t\tif ( p === p.next ) break;\n\t\t\tagain = true;\n\n\t\t} else {\n\n\t\t\tp = p.next;\n\n\t\t}\n\n\t} while ( again || p !== end );\n\n\treturn end;\n\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked( ear, triangles, dim, minX, minY, invSize, pass ) {\n\n\tif ( ! ear ) return;\n\n\t// interlink polygon nodes in z-order\n\tif ( ! pass && invSize ) indexCurve( ear, minX, minY, invSize );\n\n\tlet stop = ear,\n\t\tprev, next;\n\n\t// iterate through ears, slicing them one by one\n\twhile ( ear.prev !== ear.next ) {\n\n\t\tprev = ear.prev;\n\t\tnext = ear.next;\n\n\t\tif ( invSize ? isEarHashed( ear, minX, minY, invSize ) : isEar( ear ) ) {\n\n\t\t\t// cut off the triangle\n\t\t\ttriangles.push( prev.i / dim );\n\t\t\ttriangles.push( ear.i / dim );\n\t\t\ttriangles.push( next.i / dim );\n\n\t\t\tremoveNode( ear );\n\n\t\t\t// skipping the next vertex leads to less sliver triangles\n\t\t\tear = next.next;\n\t\t\tstop = next.next;\n\n\t\t\tcontinue;\n\n\t\t}\n\n\t\tear = next;\n\n\t\t// if we looped through the whole remaining polygon and can't find any more ears\n\t\tif ( ear === stop ) {\n\n\t\t\t// try filtering points and slicing again\n\t\t\tif ( ! pass ) {\n\n\t\t\t\tearcutLinked( filterPoints( ear ), triangles, dim, minX, minY, invSize, 1 );\n\n\t\t\t\t// if this didn't work, try curing all small self-intersections locally\n\n\t\t\t} else if ( pass === 1 ) {\n\n\t\t\t\tear = cureLocalIntersections( filterPoints( ear ), triangles, dim );\n\t\t\t\tearcutLinked( ear, triangles, dim, minX, minY, invSize, 2 );\n\n\t\t\t\t// as a last resort, try splitting the remaining polygon into two\n\n\t\t\t} else if ( pass === 2 ) {\n\n\t\t\t\tsplitEarcut( ear, triangles, dim, minX, minY, invSize );\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar( ear ) {\n\n\tconst a = ear.prev,\n\t\tb = ear,\n\t\tc = ear.next;\n\n\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\t// now make sure we don't have other points inside the potential ear\n\tlet p = ear.next.next;\n\n\twhile ( p !== ear.prev ) {\n\n\t\tif ( pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.next;\n\n\t}\n\n\treturn true;\n\n}\n\nfunction isEarHashed( ear, minX, minY, invSize ) {\n\n\tconst a = ear.prev,\n\t\tb = ear,\n\t\tc = ear.next;\n\n\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\t// triangle bbox; min & max are calculated like this for speed\n\tconst minTX = a.x < b.x ? ( a.x < c.x ? a.x : c.x ) : ( b.x < c.x ? b.x : c.x ),\n\t\tminTY = a.y < b.y ? ( a.y < c.y ? a.y : c.y ) : ( b.y < c.y ? b.y : c.y ),\n\t\tmaxTX = a.x > b.x ? ( a.x > c.x ? a.x : c.x ) : ( b.x > c.x ? b.x : c.x ),\n\t\tmaxTY = a.y > b.y ? ( a.y > c.y ? a.y : c.y ) : ( b.y > c.y ? b.y : c.y );\n\n\t// z-order range for the current triangle bbox;\n\tconst minZ = zOrder( minTX, minTY, minX, minY, invSize ),\n\t\tmaxZ = zOrder( maxTX, maxTY, minX, minY, invSize );\n\n\tlet p = ear.prevZ,\n\t\tn = ear.nextZ;\n\n\t// look for points inside the triangle in both directions\n\twhile ( p && p.z >= minZ && n && n.z <= maxZ ) {\n\n\t\tif ( p !== ear.prev && p !== ear.next &&\n\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.prevZ;\n\n\t\tif ( n !== ear.prev && n !== ear.next &&\n\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y ) &&\n\t\t\tarea( n.prev, n, n.next ) >= 0 ) return false;\n\t\tn = n.nextZ;\n\n\t}\n\n\t// look for remaining points in decreasing z-order\n\twhile ( p && p.z >= minZ ) {\n\n\t\tif ( p !== ear.prev && p !== ear.next &&\n\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.prevZ;\n\n\t}\n\n\t// look for remaining points in increasing z-order\n\twhile ( n && n.z <= maxZ ) {\n\n\t\tif ( n !== ear.prev && n !== ear.next &&\n\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y ) &&\n\t\t\tarea( n.prev, n, n.next ) >= 0 ) return false;\n\t\tn = n.nextZ;\n\n\t}\n\n\treturn true;\n\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections( start, triangles, dim ) {\n\n\tlet p = start;\n\tdo {\n\n\t\tconst a = p.prev,\n\t\t\tb = p.next.next;\n\n\t\tif ( ! equals( a, b ) && intersects( a, p, p.next, b ) && locallyInside( a, b ) && locallyInside( b, a ) ) {\n\n\t\t\ttriangles.push( a.i / dim );\n\t\t\ttriangles.push( p.i / dim );\n\t\t\ttriangles.push( b.i / dim );\n\n\t\t\t// remove two nodes involved\n\t\t\tremoveNode( p );\n\t\t\tremoveNode( p.next );\n\n\t\t\tp = start = b;\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\treturn filterPoints( p );\n\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut( start, triangles, dim, minX, minY, invSize ) {\n\n\t// look for a valid diagonal that divides the polygon into two\n\tlet a = start;\n\tdo {\n\n\t\tlet b = a.next.next;\n\t\twhile ( b !== a.prev ) {\n\n\t\t\tif ( a.i !== b.i && isValidDiagonal( a, b ) ) {\n\n\t\t\t\t// split the polygon in two by the diagonal\n\t\t\t\tlet c = splitPolygon( a, b );\n\n\t\t\t\t// filter colinear points around the cuts\n\t\t\t\ta = filterPoints( a, a.next );\n\t\t\t\tc = filterPoints( c, c.next );\n\n\t\t\t\t// run earcut on each half\n\t\t\t\tearcutLinked( a, triangles, dim, minX, minY, invSize );\n\t\t\t\tearcutLinked( c, triangles, dim, minX, minY, invSize );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tb = b.next;\n\n\t\t}\n\n\t\ta = a.next;\n\n\t} while ( a !== start );\n\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles( data, holeIndices, outerNode, dim ) {\n\n\tconst queue = [];\n\tlet i, len, start, end, list;\n\n\tfor ( i = 0, len = holeIndices.length; i < len; i ++ ) {\n\n\t\tstart = holeIndices[ i ] * dim;\n\t\tend = i < len - 1 ? holeIndices[ i + 1 ] * dim : data.length;\n\t\tlist = linkedList( data, start, end, dim, false );\n\t\tif ( list === list.next ) list.steiner = true;\n\t\tqueue.push( getLeftmost( list ) );\n\n\t}\n\n\tqueue.sort( compareX );\n\n\t// process holes from left to right\n\tfor ( i = 0; i < queue.length; i ++ ) {\n\n\t\teliminateHole( queue[ i ], outerNode );\n\t\touterNode = filterPoints( outerNode, outerNode.next );\n\n\t}\n\n\treturn outerNode;\n\n}\n\nfunction compareX( a, b ) {\n\n\treturn a.x - b.x;\n\n}\n\n// find a bridge between vertices that connects hole with an outer ring and and link it\nfunction eliminateHole( hole, outerNode ) {\n\n\touterNode = findHoleBridge( hole, outerNode );\n\tif ( outerNode ) {\n\n\t\tconst b = splitPolygon( outerNode, hole );\n\n\t\t// filter collinear points around the cuts\n\t\tfilterPoints( outerNode, outerNode.next );\n\t\tfilterPoints( b, b.next );\n\n\t}\n\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge( hole, outerNode ) {\n\n\tlet p = outerNode;\n\tconst hx = hole.x;\n\tconst hy = hole.y;\n\tlet qx = - Infinity, m;\n\n\t// find a segment intersected by a ray from the hole's leftmost point to the left;\n\t// segment's endpoint with lesser x will be potential connection point\n\tdo {\n\n\t\tif ( hy <= p.y && hy >= p.next.y && p.next.y !== p.y ) {\n\n\t\t\tconst x = p.x + ( hy - p.y ) * ( p.next.x - p.x ) / ( p.next.y - p.y );\n\t\t\tif ( x <= hx && x > qx ) {\n\n\t\t\t\tqx = x;\n\t\t\t\tif ( x === hx ) {\n\n\t\t\t\t\tif ( hy === p.y ) return p;\n\t\t\t\t\tif ( hy === p.next.y ) return p.next;\n\n\t\t\t\t}\n\n\t\t\t\tm = p.x < p.next.x ? p : p.next;\n\n\t\t\t}\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== outerNode );\n\n\tif ( ! m ) return null;\n\n\tif ( hx === qx ) return m; // hole touches outer segment; pick leftmost endpoint\n\n\t// look for points inside the triangle of hole point, segment intersection and endpoint;\n\t// if there are no points found, we have a valid connection;\n\t// otherwise choose the point of the minimum angle with the ray as connection point\n\n\tconst stop = m,\n\t\tmx = m.x,\n\t\tmy = m.y;\n\tlet tanMin = Infinity, tan;\n\n\tp = m;\n\n\tdo {\n\n\t\tif ( hx >= p.x && p.x >= mx && hx !== p.x &&\n\t\t\t\tpointInTriangle( hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y ) ) {\n\n\t\t\ttan = Math.abs( hy - p.y ) / ( hx - p.x ); // tangential\n\n\t\t\tif ( locallyInside( p, hole ) && ( tan < tanMin || ( tan === tanMin && ( p.x > m.x || ( p.x === m.x && sectorContainsSector( m, p ) ) ) ) ) ) {\n\n\t\t\t\tm = p;\n\t\t\t\ttanMin = tan;\n\n\t\t\t}\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== stop );\n\n\treturn m;\n\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector( m, p ) {\n\n\treturn area( m.prev, m, p.prev ) < 0 && area( p.next, m, m.next ) < 0;\n\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve( start, minX, minY, invSize ) {\n\n\tlet p = start;\n\tdo {\n\n\t\tif ( p.z === null ) p.z = zOrder( p.x, p.y, minX, minY, invSize );\n\t\tp.prevZ = p.prev;\n\t\tp.nextZ = p.next;\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\tp.prevZ.nextZ = null;\n\tp.prevZ = null;\n\n\tsortLinked( p );\n\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked( list ) {\n\n\tlet i, p, q, e, tail, numMerges, pSize, qSize,\n\t\tinSize = 1;\n\n\tdo {\n\n\t\tp = list;\n\t\tlist = null;\n\t\ttail = null;\n\t\tnumMerges = 0;\n\n\t\twhile ( p ) {\n\n\t\t\tnumMerges ++;\n\t\t\tq = p;\n\t\t\tpSize = 0;\n\t\t\tfor ( i = 0; i < inSize; i ++ ) {\n\n\t\t\t\tpSize ++;\n\t\t\t\tq = q.nextZ;\n\t\t\t\tif ( ! q ) break;\n\n\t\t\t}\n\n\t\t\tqSize = inSize;\n\n\t\t\twhile ( pSize > 0 || ( qSize > 0 && q ) ) {\n\n\t\t\t\tif ( pSize !== 0 && ( qSize === 0 || ! q || p.z <= q.z ) ) {\n\n\t\t\t\t\te = p;\n\t\t\t\t\tp = p.nextZ;\n\t\t\t\t\tpSize --;\n\n\t\t\t\t} else {\n\n\t\t\t\t\te = q;\n\t\t\t\t\tq = q.nextZ;\n\t\t\t\t\tqSize --;\n\n\t\t\t\t}\n\n\t\t\t\tif ( tail ) tail.nextZ = e;\n\t\t\t\telse list = e;\n\n\t\t\t\te.prevZ = tail;\n\t\t\t\ttail = e;\n\n\t\t\t}\n\n\t\t\tp = q;\n\n\t\t}\n\n\t\ttail.nextZ = null;\n\t\tinSize *= 2;\n\n\t} while ( numMerges > 1 );\n\n\treturn list;\n\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder( x, y, minX, minY, invSize ) {\n\n\t// coords are transformed into non-negative 15-bit integer range\n\tx = 32767 * ( x - minX ) * invSize;\n\ty = 32767 * ( y - minY ) * invSize;\n\n\tx = ( x | ( x << 8 ) ) & 0x00FF00FF;\n\tx = ( x | ( x << 4 ) ) & 0x0F0F0F0F;\n\tx = ( x | ( x << 2 ) ) & 0x33333333;\n\tx = ( x | ( x << 1 ) ) & 0x55555555;\n\n\ty = ( y | ( y << 8 ) ) & 0x00FF00FF;\n\ty = ( y | ( y << 4 ) ) & 0x0F0F0F0F;\n\ty = ( y | ( y << 2 ) ) & 0x33333333;\n\ty = ( y | ( y << 1 ) ) & 0x55555555;\n\n\treturn x | ( y << 1 );\n\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost( start ) {\n\n\tlet p = start,\n\t\tleftmost = start;\n\tdo {\n\n\t\tif ( p.x < leftmost.x || ( p.x === leftmost.x && p.y < leftmost.y ) ) leftmost = p;\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\treturn leftmost;\n\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle( ax, ay, bx, by, cx, cy, px, py ) {\n\n\treturn ( cx - px ) * ( ay - py ) - ( ax - px ) * ( cy - py ) >= 0 &&\n\t\t\t( ax - px ) * ( by - py ) - ( bx - px ) * ( ay - py ) >= 0 &&\n\t\t\t( bx - px ) * ( cy - py ) - ( cx - px ) * ( by - py ) >= 0;\n\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal( a, b ) {\n\n\treturn a.next.i !== b.i && a.prev.i !== b.i && ! intersectsPolygon( a, b ) && // dones't intersect other edges\n\t\t( locallyInside( a, b ) && locallyInside( b, a ) && middleInside( a, b ) && // locally visible\n\t\t( area( a.prev, a, b.prev ) || area( a, b.prev, b ) ) || // does not create opposite-facing sectors\n\t\tequals( a, b ) && area( a.prev, a, a.next ) > 0 && area( b.prev, b, b.next ) > 0 ); // special zero-length case\n\n}\n\n// signed area of a triangle\nfunction area( p, q, r ) {\n\n\treturn ( q.y - p.y ) * ( r.x - q.x ) - ( q.x - p.x ) * ( r.y - q.y );\n\n}\n\n// check if two points are equal\nfunction equals( p1, p2 ) {\n\n\treturn p1.x === p2.x && p1.y === p2.y;\n\n}\n\n// check if two segments intersect\nfunction intersects( p1, q1, p2, q2 ) {\n\n\tconst o1 = sign( area( p1, q1, p2 ) );\n\tconst o2 = sign( area( p1, q1, q2 ) );\n\tconst o3 = sign( area( p2, q2, p1 ) );\n\tconst o4 = sign( area( p2, q2, q1 ) );\n\n\tif ( o1 !== o2 && o3 !== o4 ) return true; // general case\n\n\tif ( o1 === 0 && onSegment( p1, p2, q1 ) ) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n\tif ( o2 === 0 && onSegment( p1, q2, q1 ) ) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n\tif ( o3 === 0 && onSegment( p2, p1, q2 ) ) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n\tif ( o4 === 0 && onSegment( p2, q1, q2 ) ) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n\treturn false;\n\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment( p, q, r ) {\n\n\treturn q.x <= Math.max( p.x, r.x ) && q.x >= Math.min( p.x, r.x ) && q.y <= Math.max( p.y, r.y ) && q.y >= Math.min( p.y, r.y );\n\n}\n\nfunction sign( num ) {\n\n\treturn num > 0 ? 1 : num < 0 ? - 1 : 0;\n\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon( a, b ) {\n\n\tlet p = a;\n\tdo {\n\n\t\tif ( p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n\t\t\t\tintersects( p, p.next, a, b ) ) return true;\n\t\tp = p.next;\n\n\t} while ( p !== a );\n\n\treturn false;\n\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside( a, b ) {\n\n\treturn area( a.prev, a, a.next ) < 0 ?\n\t\tarea( a, b, a.next ) >= 0 && area( a, a.prev, b ) >= 0 :\n\t\tarea( a, b, a.prev ) < 0 || area( a, a.next, b ) < 0;\n\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside( a, b ) {\n\n\tlet p = a,\n\t\tinside = false;\n\tconst px = ( a.x + b.x ) / 2,\n\t\tpy = ( a.y + b.y ) / 2;\n\tdo {\n\n\t\tif ( ( ( p.y > py ) !== ( p.next.y > py ) ) && p.next.y !== p.y &&\n\t\t\t\t( px < ( p.next.x - p.x ) * ( py - p.y ) / ( p.next.y - p.y ) + p.x ) )\n\t\t\tinside = ! inside;\n\t\tp = p.next;\n\n\t} while ( p !== a );\n\n\treturn inside;\n\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon( a, b ) {\n\n\tconst a2 = new Node( a.i, a.x, a.y ),\n\t\tb2 = new Node( b.i, b.x, b.y ),\n\t\tan = a.next,\n\t\tbp = b.prev;\n\n\ta.next = b;\n\tb.prev = a;\n\n\ta2.next = an;\n\tan.prev = a2;\n\n\tb2.next = a2;\n\ta2.prev = b2;\n\n\tbp.next = b2;\n\tb2.prev = bp;\n\n\treturn b2;\n\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode( i, x, y, last ) {\n\n\tconst p = new Node( i, x, y );\n\n\tif ( ! last ) {\n\n\t\tp.prev = p;\n\t\tp.next = p;\n\n\t} else {\n\n\t\tp.next = last.next;\n\t\tp.prev = last;\n\t\tlast.next.prev = p;\n\t\tlast.next = p;\n\n\t}\n\n\treturn p;\n\n}\n\nfunction removeNode( p ) {\n\n\tp.next.prev = p.prev;\n\tp.prev.next = p.next;\n\n\tif ( p.prevZ ) p.prevZ.nextZ = p.nextZ;\n\tif ( p.nextZ ) p.nextZ.prevZ = p.prevZ;\n\n}\n\nfunction Node( i, x, y ) {\n\n\t// vertex index in coordinates array\n\tthis.i = i;\n\n\t// vertex coordinates\n\tthis.x = x;\n\tthis.y = y;\n\n\t// previous and next vertex nodes in a polygon ring\n\tthis.prev = null;\n\tthis.next = null;\n\n\t// z-order curve value\n\tthis.z = null;\n\n\t// previous and next nodes in z-order\n\tthis.prevZ = null;\n\tthis.nextZ = null;\n\n\t// indicates whether this is a steiner point\n\tthis.steiner = false;\n\n}\n\nfunction signedArea( data, start, end, dim ) {\n\n\tlet sum = 0;\n\tfor ( let i = start, j = end - dim; i < end; i += dim ) {\n\n\t\tsum += ( data[ j ] - data[ i ] ) * ( data[ i + 1 ] + data[ j + 1 ] );\n\t\tj = i;\n\n\t}\n\n\treturn sum;\n\n}\n\nclass ShapeUtils {\n\n\t// calculate area of the contour polygon\n\n\tstatic area( contour ) {\n\n\t\tconst n = contour.length;\n\t\tlet a = 0.0;\n\n\t\tfor ( let p = n - 1, q = 0; q < n; p = q ++ ) {\n\n\t\t\ta += contour[ p ].x * contour[ q ].y - contour[ q ].x * contour[ p ].y;\n\n\t\t}\n\n\t\treturn a * 0.5;\n\n\t}\n\n\tstatic isClockWise( pts ) {\n\n\t\treturn ShapeUtils.area( pts ) < 0;\n\n\t}\n\n\tstatic triangulateShape( contour, holes ) {\n\n\t\tconst vertices = []; // flat array of vertices like [ x0,y0, x1,y1, x2,y2, ... ]\n\t\tconst holeIndices = []; // array of hole indices\n\t\tconst faces = []; // final array of vertex indices like [ [ a,b,d ], [ b,c,d ] ]\n\n\t\tremoveDupEndPts( contour );\n\t\taddContour( vertices, contour );\n\n\t\t//\n\n\t\tlet holeIndex = contour.length;\n\n\t\tholes.forEach( removeDupEndPts );\n\n\t\tfor ( let i = 0; i < holes.length; i ++ ) {\n\n\t\t\tholeIndices.push( holeIndex );\n\t\t\tholeIndex += holes[ i ].length;\n\t\t\taddContour( vertices, holes[ i ] );\n\n\t\t}\n\n\t\t//\n\n\t\tconst triangles = Earcut.triangulate( vertices, holeIndices );\n\n\t\t//\n\n\t\tfor ( let i = 0; i < triangles.length; i += 3 ) {\n\n\t\t\tfaces.push( triangles.slice( i, i + 3 ) );\n\n\t\t}\n\n\t\treturn faces;\n\n\t}\n\n}\n\nfunction removeDupEndPts( points ) {\n\n\tconst l = points.length;\n\n\tif ( l > 2 && points[ l - 1 ].equals( points[ 0 ] ) ) {\n\n\t\tpoints.pop();\n\n\t}\n\n}\n\nfunction addContour( vertices, contour ) {\n\n\tfor ( let i = 0; i < contour.length; i ++ ) {\n\n\t\tvertices.push( contour[ i ].x );\n\t\tvertices.push( contour[ i ].y );\n\n\t}\n\n}\n\n/**\n * Creates extruded geometry from a path shape.\n *\n * parameters = {\n *\n * curveSegments: , // number of points on the curves\n * steps: , // number of points for z-side extrusions / used for subdividing segments of extrude spline too\n * depth: , // Depth to extrude the shape\n *\n * bevelEnabled: , // turn on bevel\n * bevelThickness: , // how deep into the original shape bevel goes\n * bevelSize: , // how far from shape outline (including bevelOffset) is bevel\n * bevelOffset: , // how far from shape outline does bevel start\n * bevelSegments: , // number of bevel layers\n *\n * extrudePath: // curve to extrude shape along\n *\n * UVGenerator: // object that provides UV generator functions\n *\n * }\n */\n\nclass ExtrudeGeometry extends BufferGeometry {\n\n\tconstructor( shapes = new Shape( [ new Vector2( 0.5, 0.5 ), new Vector2( - 0.5, 0.5 ), new Vector2( - 0.5, - 0.5 ), new Vector2( 0.5, - 0.5 ) ] ), options = {} ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ExtrudeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\toptions: options\n\t\t};\n\n\t\tshapes = Array.isArray( shapes ) ? shapes : [ shapes ];\n\n\t\tconst scope = this;\n\n\t\tconst verticesArray = [];\n\t\tconst uvArray = [];\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\t\t\taddShape( shape );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( verticesArray, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvArray, 2 ) );\n\n\t\tthis.computeVertexNormals();\n\n\t\t// functions\n\n\t\tfunction addShape( shape ) {\n\n\t\t\tconst placeholder = [];\n\n\t\t\t// options\n\n\t\t\tconst curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12;\n\t\t\tconst steps = options.steps !== undefined ? options.steps : 1;\n\t\t\tlet depth = options.depth !== undefined ? options.depth : 1;\n\n\t\t\tlet bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true;\n\t\t\tlet bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 0.2;\n\t\t\tlet bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 0.1;\n\t\t\tlet bevelOffset = options.bevelOffset !== undefined ? options.bevelOffset : 0;\n\t\t\tlet bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3;\n\n\t\t\tconst extrudePath = options.extrudePath;\n\n\t\t\tconst uvgen = options.UVGenerator !== undefined ? options.UVGenerator : WorldUVGenerator;\n\n\t\t\t// deprecated options\n\n\t\t\tif ( options.amount !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ExtrudeBufferGeometry: amount has been renamed to depth.' );\n\t\t\t\tdepth = options.amount;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tlet extrudePts, extrudeByPath = false;\n\t\t\tlet splineTube, binormal, normal, position2;\n\n\t\t\tif ( extrudePath ) {\n\n\t\t\t\textrudePts = extrudePath.getSpacedPoints( steps );\n\n\t\t\t\textrudeByPath = true;\n\t\t\t\tbevelEnabled = false; // bevels not supported for path extrusion\n\n\t\t\t\t// SETUP TNB variables\n\n\t\t\t\t// TODO1 - have a .isClosed in spline?\n\n\t\t\t\tsplineTube = extrudePath.computeFrenetFrames( steps, false );\n\n\t\t\t\t// console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length);\n\n\t\t\t\tbinormal = new Vector3();\n\t\t\t\tnormal = new Vector3();\n\t\t\t\tposition2 = new Vector3();\n\n\t\t\t}\n\n\t\t\t// Safeguards if bevels are not enabled\n\n\t\t\tif ( ! bevelEnabled ) {\n\n\t\t\t\tbevelSegments = 0;\n\t\t\t\tbevelThickness = 0;\n\t\t\t\tbevelSize = 0;\n\t\t\t\tbevelOffset = 0;\n\n\t\t\t}\n\n\t\t\t// Variables initialization\n\n\t\t\tconst shapePoints = shape.extractPoints( curveSegments );\n\n\t\t\tlet vertices = shapePoints.shape;\n\t\t\tconst holes = shapePoints.holes;\n\n\t\t\tconst reverse = ! ShapeUtils.isClockWise( vertices );\n\n\t\t\tif ( reverse ) {\n\n\t\t\t\tvertices = vertices.reverse();\n\n\t\t\t\t// Maybe we should also check if holes are in the opposite direction, just to be safe ...\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\t\tif ( ShapeUtils.isClockWise( ahole ) ) {\n\n\t\t\t\t\t\tholes[ h ] = ahole.reverse();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\tconst faces = ShapeUtils.triangulateShape( vertices, holes );\n\n\t\t\t/* Vertices */\n\n\t\t\tconst contour = vertices; // vertices has all points but contour has only points of circumference\n\n\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\tvertices = vertices.concat( ahole );\n\n\t\t\t}\n\n\n\t\t\tfunction scalePt2( pt, vec, size ) {\n\n\t\t\t\tif ( ! vec ) console.error( 'THREE.ExtrudeGeometry: vec does not exist' );\n\n\t\t\t\treturn vec.clone().multiplyScalar( size ).add( pt );\n\n\t\t\t}\n\n\t\t\tconst vlen = vertices.length, flen = faces.length;\n\n\n\t\t\t// Find directions for point movement\n\n\n\t\t\tfunction getBevelVec( inPt, inPrev, inNext ) {\n\n\t\t\t\t// computes for inPt the corresponding point inPt' on a new contour\n\t\t\t\t// shifted by 1 unit (length of normalized vector) to the left\n\t\t\t\t// if we walk along contour clockwise, this new contour is outside the old one\n\t\t\t\t//\n\t\t\t\t// inPt' is the intersection of the two lines parallel to the two\n\t\t\t\t// adjacent edges of inPt at a distance of 1 unit on the left side.\n\n\t\t\t\tlet v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt\n\n\t\t\t\t// good reading for geometry algorithms (here: line-line intersection)\n\t\t\t\t// http://geomalgorithms.com/a05-_intersect-1.html\n\n\t\t\t\tconst v_prev_x = inPt.x - inPrev.x,\n\t\t\t\t\tv_prev_y = inPt.y - inPrev.y;\n\t\t\t\tconst v_next_x = inNext.x - inPt.x,\n\t\t\t\t\tv_next_y = inNext.y - inPt.y;\n\n\t\t\t\tconst v_prev_lensq = ( v_prev_x * v_prev_x + v_prev_y * v_prev_y );\n\n\t\t\t\t// check for collinear edges\n\t\t\t\tconst collinear0 = ( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\tif ( Math.abs( collinear0 ) > Number.EPSILON ) {\n\n\t\t\t\t\t// not collinear\n\n\t\t\t\t\t// length of vectors for normalizing\n\n\t\t\t\t\tconst v_prev_len = Math.sqrt( v_prev_lensq );\n\t\t\t\t\tconst v_next_len = Math.sqrt( v_next_x * v_next_x + v_next_y * v_next_y );\n\n\t\t\t\t\t// shift adjacent points by unit vectors to the left\n\n\t\t\t\t\tconst ptPrevShift_x = ( inPrev.x - v_prev_y / v_prev_len );\n\t\t\t\t\tconst ptPrevShift_y = ( inPrev.y + v_prev_x / v_prev_len );\n\n\t\t\t\t\tconst ptNextShift_x = ( inNext.x - v_next_y / v_next_len );\n\t\t\t\t\tconst ptNextShift_y = ( inNext.y + v_next_x / v_next_len );\n\n\t\t\t\t\t// scaling factor for v_prev to intersection point\n\n\t\t\t\t\tconst sf = ( ( ptNextShift_x - ptPrevShift_x ) * v_next_y -\n\t\t\t\t\t\t\t( ptNextShift_y - ptPrevShift_y ) * v_next_x ) /\n\t\t\t\t\t\t( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\t\t// vector from inPt to intersection point\n\n\t\t\t\t\tv_trans_x = ( ptPrevShift_x + v_prev_x * sf - inPt.x );\n\t\t\t\t\tv_trans_y = ( ptPrevShift_y + v_prev_y * sf - inPt.y );\n\n\t\t\t\t\t// Don't normalize!, otherwise sharp corners become ugly\n\t\t\t\t\t// but prevent crazy spikes\n\t\t\t\t\tconst v_trans_lensq = ( v_trans_x * v_trans_x + v_trans_y * v_trans_y );\n\t\t\t\t\tif ( v_trans_lensq <= 2 ) {\n\n\t\t\t\t\t\treturn new Vector2( v_trans_x, v_trans_y );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_trans_lensq / 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// handle special case of collinear edges\n\n\t\t\t\t\tlet direction_eq = false; // assumes: opposite\n\n\t\t\t\t\tif ( v_prev_x > Number.EPSILON ) {\n\n\t\t\t\t\t\tif ( v_next_x > Number.EPSILON ) {\n\n\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( v_prev_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\tif ( v_next_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( Math.sign( v_prev_y ) === Math.sign( v_next_y ) ) {\n\n\t\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( direction_eq ) {\n\n\t\t\t\t\t\t// console.log(\"Warning: lines are a straight sequence\");\n\t\t\t\t\t\tv_trans_x = - v_prev_y;\n\t\t\t\t\t\tv_trans_y = v_prev_x;\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// console.log(\"Warning: lines are a straight spike\");\n\t\t\t\t\t\tv_trans_x = v_prev_x;\n\t\t\t\t\t\tv_trans_y = v_prev_y;\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq / 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn new Vector2( v_trans_x / shrink_by, v_trans_y / shrink_by );\n\n\t\t\t}\n\n\n\t\t\tconst contourMovements = [];\n\n\t\t\tfor ( let i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\t\tif ( j === il ) j = 0;\n\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t// (j)---(i)---(k)\n\t\t\t\t// console.log('i,j,k', i, j , k)\n\n\t\t\t\tcontourMovements[ i ] = getBevelVec( contour[ i ], contour[ j ], contour[ k ] );\n\n\t\t\t}\n\n\t\t\tconst holesMovements = [];\n\t\t\tlet oneHoleMovements, verticesMovements = contourMovements.concat();\n\n\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\toneHoleMovements = [];\n\n\t\t\t\tfor ( let i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\t\t\tif ( j === il ) j = 0;\n\t\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t\t// (j)---(i)---(k)\n\t\t\t\t\toneHoleMovements[ i ] = getBevelVec( ahole[ i ], ahole[ j ], ahole[ k ] );\n\n\t\t\t\t}\n\n\t\t\t\tholesMovements.push( oneHoleMovements );\n\t\t\t\tverticesMovements = verticesMovements.concat( oneHoleMovements );\n\n\t\t\t}\n\n\n\t\t\t// Loop bevelSegments, 1 for the front, 1 for the back\n\n\t\t\tfor ( let b = 0; b < bevelSegments; b ++ ) {\n\n\t\t\t\t//for ( b = bevelSegments; b > 0; b -- ) {\n\n\t\t\t\tconst t = b / bevelSegments;\n\t\t\t\tconst z = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\t\tconst bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;\n\n\t\t\t\t// contract shape\n\n\t\t\t\tfor ( let i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst vert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\n\t\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t\t}\n\n\t\t\t\t// expand holes\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\t\tfor ( let i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst bs = bevelSize + bevelOffset;\n\n\t\t\t// Back facing vertices\n\n\t\t\tfor ( let i = 0; i < vlen; i ++ ) {\n\n\t\t\t\tconst vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\tv( vert.x, vert.y, 0 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x );\n\n\t\t\t\t\tnormal.copy( splineTube.normals[ 0 ] ).multiplyScalar( vert.x );\n\t\t\t\t\tbinormal.copy( splineTube.binormals[ 0 ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\tposition2.copy( extrudePts[ 0 ] ).add( normal ).add( binormal );\n\n\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Add stepped vertices...\n\t\t\t// Including front facing vertices\n\n\t\t\tfor ( let s = 1; s <= steps; s ++ ) {\n\n\t\t\t\tfor ( let i = 0; i < vlen; i ++ ) {\n\n\t\t\t\t\tconst vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\tv( vert.x, vert.y, depth / steps * s );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x );\n\n\t\t\t\t\t\tnormal.copy( splineTube.normals[ s ] ).multiplyScalar( vert.x );\n\t\t\t\t\t\tbinormal.copy( splineTube.binormals[ s ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\t\tposition2.copy( extrudePts[ s ] ).add( normal ).add( binormal );\n\n\t\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\t// Add bevel segments planes\n\n\t\t\t//for ( b = 1; b <= bevelSegments; b ++ ) {\n\t\t\tfor ( let b = bevelSegments - 1; b >= 0; b -- ) {\n\n\t\t\t\tconst t = b / bevelSegments;\n\t\t\t\tconst z = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\t\tconst bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;\n\n\t\t\t\t// contract shape\n\n\t\t\t\tfor ( let i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst vert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\t\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t\t}\n\n\t\t\t\t// expand holes\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\t\tfor ( let i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tv( vert.x, vert.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x + z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t/* Faces */\n\n\t\t\t// Top and bottom faces\n\n\t\t\tbuildLidFaces();\n\n\t\t\t// Sides faces\n\n\t\t\tbuildSideFaces();\n\n\n\t\t\t///// Internal functions\n\n\t\t\tfunction buildLidFaces() {\n\n\t\t\t\tconst start = verticesArray.length / 3;\n\n\t\t\t\tif ( bevelEnabled ) {\n\n\t\t\t\t\tlet layer = 0; // steps + 1\n\t\t\t\t\tlet offset = vlen * layer;\n\n\t\t\t\t\t// Bottom faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 2 ] + offset, face[ 1 ] + offset, face[ 0 ] + offset );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlayer = steps + bevelSegments * 2;\n\t\t\t\t\toffset = vlen * layer;\n\n\t\t\t\t\t// Top faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 0 ] + offset, face[ 1 ] + offset, face[ 2 ] + offset );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Bottom faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 2 ], face[ 1 ], face[ 0 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Top faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 0 ] + vlen * steps, face[ 1 ] + vlen * steps, face[ 2 ] + vlen * steps );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 0 );\n\n\t\t\t}\n\n\t\t\t// Create faces for the z-sides of the shape\n\n\t\t\tfunction buildSideFaces() {\n\n\t\t\t\tconst start = verticesArray.length / 3;\n\t\t\t\tlet layeroffset = 0;\n\t\t\t\tsidewalls( contour, layeroffset );\n\t\t\t\tlayeroffset += contour.length;\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\tsidewalls( ahole, layeroffset );\n\n\t\t\t\t\t//, true\n\t\t\t\t\tlayeroffset += ahole.length;\n\n\t\t\t\t}\n\n\n\t\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 1 );\n\n\n\t\t\t}\n\n\t\t\tfunction sidewalls( contour, layeroffset ) {\n\n\t\t\t\tlet i = contour.length;\n\n\t\t\t\twhile ( -- i >= 0 ) {\n\n\t\t\t\t\tconst j = i;\n\t\t\t\t\tlet k = i - 1;\n\t\t\t\t\tif ( k < 0 ) k = contour.length - 1;\n\n\t\t\t\t\t//console.log('b', i,j, i-1, k,vertices.length);\n\n\t\t\t\t\tfor ( let s = 0, sl = ( steps + bevelSegments * 2 ); s < sl; s ++ ) {\n\n\t\t\t\t\t\tconst slen1 = vlen * s;\n\t\t\t\t\t\tconst slen2 = vlen * ( s + 1 );\n\n\t\t\t\t\t\tconst a = layeroffset + j + slen1,\n\t\t\t\t\t\t\tb = layeroffset + k + slen1,\n\t\t\t\t\t\t\tc = layeroffset + k + slen2,\n\t\t\t\t\t\t\td = layeroffset + j + slen2;\n\n\t\t\t\t\t\tf4( a, b, c, d );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction v( x, y, z ) {\n\n\t\t\t\tplaceholder.push( x );\n\t\t\t\tplaceholder.push( y );\n\t\t\t\tplaceholder.push( z );\n\n\t\t\t}\n\n\n\t\t\tfunction f3( a, b, c ) {\n\n\t\t\t\taddVertex( a );\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( c );\n\n\t\t\t\tconst nextIndex = verticesArray.length / 3;\n\t\t\t\tconst uvs = uvgen.generateTopUV( scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\t\taddUV( uvs[ 0 ] );\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 2 ] );\n\n\t\t\t}\n\n\t\t\tfunction f4( a, b, c, d ) {\n\n\t\t\t\taddVertex( a );\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( d );\n\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( c );\n\t\t\t\taddVertex( d );\n\n\n\t\t\t\tconst nextIndex = verticesArray.length / 3;\n\t\t\t\tconst uvs = uvgen.generateSideWallUV( scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\t\taddUV( uvs[ 0 ] );\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 2 ] );\n\t\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\t}\n\n\t\t\tfunction addVertex( index ) {\n\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 0 ] );\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 1 ] );\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 2 ] );\n\n\t\t\t}\n\n\n\t\t\tfunction addUV( vector2 ) {\n\n\t\t\t\tuvArray.push( vector2.x );\n\t\t\t\tuvArray.push( vector2.y );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tconst shapes = this.parameters.shapes;\n\t\tconst options = this.parameters.options;\n\n\t\treturn toJSON$1( shapes, options, data );\n\n\t}\n\n\tstatic fromJSON( data, shapes ) {\n\n\t\tconst geometryShapes = [];\n\n\t\tfor ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\tconst shape = shapes[ data.shapes[ j ] ];\n\n\t\t\tgeometryShapes.push( shape );\n\n\t\t}\n\n\t\tconst extrudePath = data.options.extrudePath;\n\n\t\tif ( extrudePath !== undefined ) {\n\n\t\t\tdata.options.extrudePath = new Curves[ extrudePath.type ]().fromJSON( extrudePath );\n\n\t\t}\n\n\t\treturn new ExtrudeGeometry( geometryShapes, data.options );\n\n\t}\n\n}\n\nconst WorldUVGenerator = {\n\n\tgenerateTopUV: function ( geometry, vertices, indexA, indexB, indexC ) {\n\n\t\tconst a_x = vertices[ indexA * 3 ];\n\t\tconst a_y = vertices[ indexA * 3 + 1 ];\n\t\tconst b_x = vertices[ indexB * 3 ];\n\t\tconst b_y = vertices[ indexB * 3 + 1 ];\n\t\tconst c_x = vertices[ indexC * 3 ];\n\t\tconst c_y = vertices[ indexC * 3 + 1 ];\n\n\t\treturn [\n\t\t\tnew Vector2( a_x, a_y ),\n\t\t\tnew Vector2( b_x, b_y ),\n\t\t\tnew Vector2( c_x, c_y )\n\t\t];\n\n\t},\n\n\tgenerateSideWallUV: function ( geometry, vertices, indexA, indexB, indexC, indexD ) {\n\n\t\tconst a_x = vertices[ indexA * 3 ];\n\t\tconst a_y = vertices[ indexA * 3 + 1 ];\n\t\tconst a_z = vertices[ indexA * 3 + 2 ];\n\t\tconst b_x = vertices[ indexB * 3 ];\n\t\tconst b_y = vertices[ indexB * 3 + 1 ];\n\t\tconst b_z = vertices[ indexB * 3 + 2 ];\n\t\tconst c_x = vertices[ indexC * 3 ];\n\t\tconst c_y = vertices[ indexC * 3 + 1 ];\n\t\tconst c_z = vertices[ indexC * 3 + 2 ];\n\t\tconst d_x = vertices[ indexD * 3 ];\n\t\tconst d_y = vertices[ indexD * 3 + 1 ];\n\t\tconst d_z = vertices[ indexD * 3 + 2 ];\n\n\t\tif ( Math.abs( a_y - b_y ) < Math.abs( a_x - b_x ) ) {\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_x, 1 - a_z ),\n\t\t\t\tnew Vector2( b_x, 1 - b_z ),\n\t\t\t\tnew Vector2( c_x, 1 - c_z ),\n\t\t\t\tnew Vector2( d_x, 1 - d_z )\n\t\t\t];\n\n\t\t} else {\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_y, 1 - a_z ),\n\t\t\t\tnew Vector2( b_y, 1 - b_z ),\n\t\t\t\tnew Vector2( c_y, 1 - c_z ),\n\t\t\t\tnew Vector2( d_y, 1 - d_z )\n\t\t\t];\n\n\t\t}\n\n\t}\n\n};\n\nfunction toJSON$1( shapes, options, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\tif ( options.extrudePath !== undefined ) data.options.extrudePath = options.extrudePath.toJSON();\n\n\treturn data;\n\n}\n\nclass IcosahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\n\t\tconst vertices = [\n\t\t\t- 1, t, 0, \t1, t, 0, \t- 1, - t, 0, \t1, - t, 0,\n\t\t\t0, - 1, t, \t0, 1, t,\t0, - 1, - t, \t0, 1, - t,\n\t\t\tt, 0, - 1, \tt, 0, 1, \t- t, 0, - 1, \t- t, 0, 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t0, 11, 5, \t0, 5, 1, \t0, 1, 7, \t0, 7, 10, \t0, 10, 11,\n\t\t\t1, 5, 9, \t5, 11, 4,\t11, 10, 2,\t10, 7, 6,\t7, 1, 8,\n\t\t\t3, 9, 4, \t3, 4, 2,\t3, 2, 6,\t3, 6, 8,\t3, 8, 9,\n\t\t\t4, 9, 5, \t2, 4, 11,\t6, 2, 10,\t8, 6, 7,\t9, 8, 1\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'IcosahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new IcosahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\nclass LatheGeometry extends BufferGeometry {\n\n\tconstructor( points = [ new Vector2( 0, 0.5 ), new Vector2( 0.5, 0 ), new Vector2( 0, - 0.5 ) ], segments = 12, phiStart = 0, phiLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'LatheGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpoints: points,\n\t\t\tsegments: segments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength\n\t\t};\n\n\t\tsegments = Math.floor( segments );\n\n\t\t// clamp phiLength so it's in range of [ 0, 2PI ]\n\n\t\tphiLength = clamp( phiLength, 0, Math.PI * 2 );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst inverseSegments = 1.0 / segments;\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\t// generate vertices and uvs\n\n\t\tfor ( let i = 0; i <= segments; i ++ ) {\n\n\t\t\tconst phi = phiStart + i * inverseSegments * phiLength;\n\n\t\t\tconst sin = Math.sin( phi );\n\t\t\tconst cos = Math.cos( phi );\n\n\t\t\tfor ( let j = 0; j <= ( points.length - 1 ); j ++ ) {\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = points[ j ].x * sin;\n\t\t\t\tvertex.y = points[ j ].y;\n\t\t\t\tvertex.z = points[ j ].x * cos;\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = i / segments;\n\t\t\t\tuv.y = j / ( points.length - 1 );\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\n\t\t\t}\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let i = 0; i < segments; i ++ ) {\n\n\t\t\tfor ( let j = 0; j < ( points.length - 1 ); j ++ ) {\n\n\t\t\t\tconst base = j + i * points.length;\n\n\t\t\t\tconst a = base;\n\t\t\t\tconst b = base + points.length;\n\t\t\t\tconst c = base + points.length + 1;\n\t\t\t\tconst d = base + 1;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// generate normals\n\n\t\tthis.computeVertexNormals();\n\n\t\t// if the geometry is closed, we need to average the normals along the seam.\n\t\t// because the corresponding vertices are identical (but still have different UVs).\n\n\t\tif ( phiLength === Math.PI * 2 ) {\n\n\t\t\tconst normals = this.attributes.normal.array;\n\t\t\tconst n1 = new Vector3();\n\t\t\tconst n2 = new Vector3();\n\t\t\tconst n = new Vector3();\n\n\t\t\t// this is the buffer offset for the last line of vertices\n\n\t\t\tconst base = segments * points.length * 3;\n\n\t\t\tfor ( let i = 0, j = 0; i < points.length; i ++, j += 3 ) {\n\n\t\t\t\t// select the normal of the vertex in the first line\n\n\t\t\t\tn1.x = normals[ j + 0 ];\n\t\t\t\tn1.y = normals[ j + 1 ];\n\t\t\t\tn1.z = normals[ j + 2 ];\n\n\t\t\t\t// select the normal of the vertex in the last line\n\n\t\t\t\tn2.x = normals[ base + j + 0 ];\n\t\t\t\tn2.y = normals[ base + j + 1 ];\n\t\t\t\tn2.z = normals[ base + j + 2 ];\n\n\t\t\t\t// average normals\n\n\t\t\t\tn.addVectors( n1, n2 ).normalize();\n\n\t\t\t\t// assign the new values to both normals\n\n\t\t\t\tnormals[ j + 0 ] = normals[ base + j + 0 ] = n.x;\n\t\t\t\tnormals[ j + 1 ] = normals[ base + j + 1 ] = n.y;\n\t\t\t\tnormals[ j + 2 ] = normals[ base + j + 2 ] = n.z;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new LatheGeometry( data.points, data.segments, data.phiStart, data.phiLength );\n\n\t}\n\n}\n\nclass OctahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst vertices = [\n\t\t\t1, 0, 0, \t- 1, 0, 0,\t0, 1, 0,\n\t\t\t0, - 1, 0, \t0, 0, 1,\t0, 0, - 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t0, 2, 4,\t0, 4, 3,\t0, 3, 5,\n\t\t\t0, 5, 2,\t1, 2, 5,\t1, 5, 3,\n\t\t\t1, 3, 4,\t1, 4, 2\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'OctahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new OctahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\nclass RingGeometry extends BufferGeometry {\n\n\tconstructor( innerRadius = 0.5, outerRadius = 1, thetaSegments = 8, phiSegments = 1, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'RingGeometry';\n\n\t\tthis.parameters = {\n\t\t\tinnerRadius: innerRadius,\n\t\t\touterRadius: outerRadius,\n\t\t\tthetaSegments: thetaSegments,\n\t\t\tphiSegments: phiSegments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tthetaSegments = Math.max( 3, thetaSegments );\n\t\tphiSegments = Math.max( 1, phiSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// some helper variables\n\n\t\tlet radius = innerRadius;\n\t\tconst radiusStep = ( ( outerRadius - innerRadius ) / phiSegments );\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let j = 0; j <= phiSegments; j ++ ) {\n\n\t\t\tfor ( let i = 0; i <= thetaSegments; i ++ ) {\n\n\t\t\t\t// values are generate from the inside of the ring to the outside\n\n\t\t\t\tconst segment = thetaStart + i / thetaSegments * thetaLength;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = ( vertex.x / outerRadius + 1 ) / 2;\n\t\t\t\tuv.y = ( vertex.y / outerRadius + 1 ) / 2;\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t}\n\n\t\t\t// increase the radius for next row of vertices\n\n\t\t\tradius += radiusStep;\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let j = 0; j < phiSegments; j ++ ) {\n\n\t\t\tconst thetaSegmentLevel = j * ( thetaSegments + 1 );\n\n\t\t\tfor ( let i = 0; i < thetaSegments; i ++ ) {\n\n\t\t\t\tconst segment = i + thetaSegmentLevel;\n\n\t\t\t\tconst a = segment;\n\t\t\t\tconst b = segment + thetaSegments + 1;\n\t\t\t\tconst c = segment + thetaSegments + 2;\n\t\t\t\tconst d = segment + 1;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new RingGeometry( data.innerRadius, data.outerRadius, data.thetaSegments, data.phiSegments, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass ShapeGeometry extends BufferGeometry {\n\n\tconstructor( shapes = new Shape( [ new Vector2( 0, 0.5 ), new Vector2( - 0.5, - 0.5 ), new Vector2( 0.5, - 0.5 ) ] ), curveSegments = 12 ) {\n\n\t\tsuper();\n\t\tthis.type = 'ShapeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\tcurveSegments: curveSegments\n\t\t};\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet groupStart = 0;\n\t\tlet groupCount = 0;\n\n\t\t// allow single and array values for \"shapes\" parameter\n\n\t\tif ( Array.isArray( shapes ) === false ) {\n\n\t\t\taddShape( shapes );\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0; i < shapes.length; i ++ ) {\n\n\t\t\t\taddShape( shapes[ i ] );\n\n\t\t\t\tthis.addGroup( groupStart, groupCount, i ); // enables MultiMaterial support\n\n\t\t\t\tgroupStart += groupCount;\n\t\t\t\tgroupCount = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\n\t\t// helper functions\n\n\t\tfunction addShape( shape ) {\n\n\t\t\tconst indexOffset = vertices.length / 3;\n\t\t\tconst points = shape.extractPoints( curveSegments );\n\n\t\t\tlet shapeVertices = points.shape;\n\t\t\tconst shapeHoles = points.holes;\n\n\t\t\t// check direction of vertices\n\n\t\t\tif ( ShapeUtils.isClockWise( shapeVertices ) === false ) {\n\n\t\t\t\tshapeVertices = shapeVertices.reverse();\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\tconst shapeHole = shapeHoles[ i ];\n\n\t\t\t\tif ( ShapeUtils.isClockWise( shapeHole ) === true ) {\n\n\t\t\t\t\tshapeHoles[ i ] = shapeHole.reverse();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst faces = ShapeUtils.triangulateShape( shapeVertices, shapeHoles );\n\n\t\t\t// join vertices of inner and outer paths to a single array\n\n\t\t\tfor ( let i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\tconst shapeHole = shapeHoles[ i ];\n\t\t\t\tshapeVertices = shapeVertices.concat( shapeHole );\n\n\t\t\t}\n\n\t\t\t// vertices, normals, uvs\n\n\t\t\tfor ( let i = 0, l = shapeVertices.length; i < l; i ++ ) {\n\n\t\t\t\tconst vertex = shapeVertices[ i ];\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, 0 );\n\t\t\t\tnormals.push( 0, 0, 1 );\n\t\t\t\tuvs.push( vertex.x, vertex.y ); // world uvs\n\n\t\t\t}\n\n\t\t\t// incides\n\n\t\t\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\tconst face = faces[ i ];\n\n\t\t\t\tconst a = face[ 0 ] + indexOffset;\n\t\t\t\tconst b = face[ 1 ] + indexOffset;\n\t\t\t\tconst c = face[ 2 ] + indexOffset;\n\n\t\t\t\tindices.push( a, b, c );\n\t\t\t\tgroupCount += 3;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tconst shapes = this.parameters.shapes;\n\n\t\treturn toJSON( shapes, data );\n\n\t}\n\n\tstatic fromJSON( data, shapes ) {\n\n\t\tconst geometryShapes = [];\n\n\t\tfor ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\tconst shape = shapes[ data.shapes[ j ] ];\n\n\t\t\tgeometryShapes.push( shape );\n\n\t\t}\n\n\t\treturn new ShapeGeometry( geometryShapes, data.curveSegments );\n\n\t}\n\n}\n\nfunction toJSON( shapes, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\treturn data;\n\n}\n\nclass SphereGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, widthSegments = 32, heightSegments = 16, phiStart = 0, phiLength = Math.PI * 2, thetaStart = 0, thetaLength = Math.PI ) {\n\n\t\tsuper();\n\t\tthis.type = 'SphereGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\twidthSegments = Math.max( 3, Math.floor( widthSegments ) );\n\t\theightSegments = Math.max( 2, Math.floor( heightSegments ) );\n\n\t\tconst thetaEnd = Math.min( thetaStart + thetaLength, Math.PI );\n\n\t\tlet index = 0;\n\t\tconst grid = [];\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let iy = 0; iy <= heightSegments; iy ++ ) {\n\n\t\t\tconst verticesRow = [];\n\n\t\t\tconst v = iy / heightSegments;\n\n\t\t\t// special case for the poles\n\n\t\t\tlet uOffset = 0;\n\n\t\t\tif ( iy == 0 && thetaStart == 0 ) {\n\n\t\t\t\tuOffset = 0.5 / widthSegments;\n\n\t\t\t} else if ( iy == heightSegments && thetaEnd == Math.PI ) {\n\n\t\t\t\tuOffset = - 0.5 / widthSegments;\n\n\t\t\t}\n\n\t\t\tfor ( let ix = 0; ix <= widthSegments; ix ++ ) {\n\n\t\t\t\tconst u = ix / widthSegments;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = - radius * Math.cos( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\t\t\t\tvertex.y = radius * Math.cos( thetaStart + v * thetaLength );\n\t\t\t\tvertex.z = radius * Math.sin( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormal.copy( vertex ).normalize();\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( u + uOffset, 1 - v );\n\n\t\t\t\tverticesRow.push( index ++ );\n\n\t\t\t}\n\n\t\t\tgrid.push( verticesRow );\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let iy = 0; iy < heightSegments; iy ++ ) {\n\n\t\t\tfor ( let ix = 0; ix < widthSegments; ix ++ ) {\n\n\t\t\t\tconst a = grid[ iy ][ ix + 1 ];\n\t\t\t\tconst b = grid[ iy ][ ix ];\n\t\t\t\tconst c = grid[ iy + 1 ][ ix ];\n\t\t\t\tconst d = grid[ iy + 1 ][ ix + 1 ];\n\n\t\t\t\tif ( iy !== 0 || thetaStart > 0 ) indices.push( a, b, d );\n\t\t\t\tif ( iy !== heightSegments - 1 || thetaEnd < Math.PI ) indices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new SphereGeometry( data.radius, data.widthSegments, data.heightSegments, data.phiStart, data.phiLength, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass TetrahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst vertices = [\n\t\t\t1, 1, 1, \t- 1, - 1, 1, \t- 1, 1, - 1, \t1, - 1, - 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t2, 1, 0, \t0, 3, 2,\t1, 3, 0,\t2, 3, 1\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'TetrahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new TetrahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\nclass TorusGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, tube = 0.4, radialSegments = 8, tubularSegments = 6, arc = Math.PI * 2 ) {\n\n\t\tsuper();\n\t\tthis.type = 'TorusGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\tradialSegments: radialSegments,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tarc: arc\n\t\t};\n\n\t\tradialSegments = Math.floor( radialSegments );\n\t\ttubularSegments = Math.floor( tubularSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst center = new Vector3();\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\tfor ( let i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\t\tconst u = i / tubularSegments * arc;\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = ( radius + tube * Math.cos( v ) ) * Math.cos( u );\n\t\t\t\tvertex.y = ( radius + tube * Math.cos( v ) ) * Math.sin( u );\n\t\t\t\tvertex.z = tube * Math.sin( v );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tcenter.x = radius * Math.cos( u );\n\t\t\t\tcenter.y = radius * Math.sin( u );\n\t\t\t\tnormal.subVectors( vertex, center ).normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( i / tubularSegments );\n\t\t\t\tuvs.push( j / radialSegments );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( let j = 1; j <= radialSegments; j ++ ) {\n\n\t\t\tfor ( let i = 1; i <= tubularSegments; i ++ ) {\n\n\t\t\t\t// indices\n\n\t\t\t\tconst a = ( tubularSegments + 1 ) * j + i - 1;\n\t\t\t\tconst b = ( tubularSegments + 1 ) * ( j - 1 ) + i - 1;\n\t\t\t\tconst c = ( tubularSegments + 1 ) * ( j - 1 ) + i;\n\t\t\t\tconst d = ( tubularSegments + 1 ) * j + i;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new TorusGeometry( data.radius, data.tube, data.radialSegments, data.tubularSegments, data.arc );\n\n\t}\n\n}\n\nclass TorusKnotGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, tube = 0.4, tubularSegments = 64, radialSegments = 8, p = 2, q = 3 ) {\n\n\t\tsuper();\n\t\tthis.type = 'TorusKnotGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradialSegments: radialSegments,\n\t\t\tp: p,\n\t\t\tq: q\n\t\t};\n\n\t\ttubularSegments = Math.floor( tubularSegments );\n\t\tradialSegments = Math.floor( radialSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\tconst P1 = new Vector3();\n\t\tconst P2 = new Vector3();\n\n\t\tconst B = new Vector3();\n\t\tconst T = new Vector3();\n\t\tconst N = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let i = 0; i <= tubularSegments; ++ i ) {\n\n\t\t\t// the radian \"u\" is used to calculate the position on the torus curve of the current tubular segement\n\n\t\t\tconst u = i / tubularSegments * p * Math.PI * 2;\n\n\t\t\t// now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead.\n\t\t\t// these points are used to create a special \"coordinate space\", which is necessary to calculate the correct vertex positions\n\n\t\t\tcalculatePositionOnCurve( u, p, q, radius, P1 );\n\t\t\tcalculatePositionOnCurve( u + 0.01, p, q, radius, P2 );\n\n\t\t\t// calculate orthonormal basis\n\n\t\t\tT.subVectors( P2, P1 );\n\t\t\tN.addVectors( P2, P1 );\n\t\t\tB.crossVectors( T, N );\n\t\t\tN.crossVectors( B, T );\n\n\t\t\t// normalize B, N. T can be ignored, we don't use it\n\n\t\t\tB.normalize();\n\t\t\tN.normalize();\n\n\t\t\tfor ( let j = 0; j <= radialSegments; ++ j ) {\n\n\t\t\t\t// now calculate the vertices. they are nothing more than an extrusion of the torus curve.\n\t\t\t\t// because we extrude a shape in the xy-plane, there is no need to calculate a z-value.\n\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\t\t\t\tconst cx = - tube * Math.cos( v );\n\t\t\t\tconst cy = tube * Math.sin( v );\n\n\t\t\t\t// now calculate the final vertex position.\n\t\t\t\t// first we orient the extrusion with our basis vectos, then we add it to the current position on the curve\n\n\t\t\t\tvertex.x = P1.x + ( cx * N.x + cy * B.x );\n\t\t\t\tvertex.y = P1.y + ( cx * N.y + cy * B.y );\n\t\t\t\tvertex.z = P1.z + ( cx * N.z + cy * B.z );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal (P1 is always the center/origin of the extrusion, thus we can use it to calculate the normal)\n\n\t\t\t\tnormal.subVectors( vertex, P1 ).normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( i / tubularSegments );\n\t\t\t\tuvs.push( j / radialSegments );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( let j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\tfor ( let i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\t// indices\n\n\t\t\t\tconst a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\tconst b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\tconst c = ( radialSegments + 1 ) * j + i;\n\t\t\t\tconst d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// this function calculates the current position on the torus curve\n\n\t\tfunction calculatePositionOnCurve( u, p, q, radius, position ) {\n\n\t\t\tconst cu = Math.cos( u );\n\t\t\tconst su = Math.sin( u );\n\t\t\tconst quOverP = q / p * u;\n\t\t\tconst cs = Math.cos( quOverP );\n\n\t\t\tposition.x = radius * ( 2 + cs ) * 0.5 * cu;\n\t\t\tposition.y = radius * ( 2 + cs ) * su * 0.5;\n\t\t\tposition.z = radius * Math.sin( quOverP ) * 0.5;\n\n\t\t}\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new TorusKnotGeometry( data.radius, data.tube, data.tubularSegments, data.radialSegments, data.p, data.q );\n\n\t}\n\n}\n\nclass TubeGeometry extends BufferGeometry {\n\n\tconstructor( path = new QuadraticBezierCurve3( new Vector3( - 1, - 1, 0 ), new Vector3( - 1, 1, 0 ), new Vector3( 1, 1, 0 ) ), tubularSegments = 64, radius = 1, radialSegments = 8, closed = false ) {\n\n\t\tsuper();\n\t\tthis.type = 'TubeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpath: path,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradius: radius,\n\t\t\tradialSegments: radialSegments,\n\t\t\tclosed: closed\n\t\t};\n\n\t\tconst frames = path.computeFrenetFrames( tubularSegments, closed );\n\n\t\t// expose internals\n\n\t\tthis.tangents = frames.tangents;\n\t\tthis.normals = frames.normals;\n\t\tthis.binormals = frames.binormals;\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\t\tconst uv = new Vector2();\n\t\tlet P = new Vector3();\n\n\t\t// buffer\n\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\t\tconst indices = [];\n\n\t\t// create buffer data\n\n\t\tgenerateBufferData();\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// functions\n\n\t\tfunction generateBufferData() {\n\n\t\t\tfor ( let i = 0; i < tubularSegments; i ++ ) {\n\n\t\t\t\tgenerateSegment( i );\n\n\t\t\t}\n\n\t\t\t// if the geometry is not closed, generate the last row of vertices and normals\n\t\t\t// at the regular position on the given path\n\t\t\t//\n\t\t\t// if the geometry is closed, duplicate the first row of vertices and normals (uvs will differ)\n\n\t\t\tgenerateSegment( ( closed === false ) ? tubularSegments : 0 );\n\n\t\t\t// uvs are generated in a separate function.\n\t\t\t// this makes it easy compute correct values for closed geometries\n\n\t\t\tgenerateUVs();\n\n\t\t\t// finally create faces\n\n\t\t\tgenerateIndices();\n\n\t\t}\n\n\t\tfunction generateSegment( i ) {\n\n\t\t\t// we use getPointAt to sample evenly distributed points from the given path\n\n\t\t\tP = path.getPointAt( i / tubularSegments, P );\n\n\t\t\t// retrieve corresponding normal and binormal\n\n\t\t\tconst N = frames.normals[ i ];\n\t\t\tconst B = frames.binormals[ i ];\n\n\t\t\t// generate normals and vertices for the current segment\n\n\t\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\n\t\t\t\tconst sin = Math.sin( v );\n\t\t\t\tconst cos = - Math.cos( v );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormal.x = ( cos * N.x + sin * B.x );\n\t\t\t\tnormal.y = ( cos * N.y + sin * B.y );\n\t\t\t\tnormal.z = ( cos * N.z + sin * B.z );\n\t\t\t\tnormal.normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = P.x + radius * normal.x;\n\t\t\t\tvertex.y = P.y + radius * normal.y;\n\t\t\t\tvertex.z = P.z + radius * normal.z;\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateIndices() {\n\n\t\t\tfor ( let j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\t\tfor ( let i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\t\tconst a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\t\tconst b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\t\tconst c = ( radialSegments + 1 ) * j + i;\n\t\t\t\t\tconst d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateUVs() {\n\n\t\t\tfor ( let i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\t\tuv.x = i / tubularSegments;\n\t\t\t\t\tuv.y = j / radialSegments;\n\n\t\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.path = this.parameters.path.toJSON();\n\n\t\treturn data;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\t// This only works for built-in curves (e.g. CatmullRomCurve3).\n\t\t// User defined curves or instances of CurvePath will not be deserialized.\n\t\treturn new TubeGeometry(\n\t\t\tnew Curves[ data.path.type ]().fromJSON( data.path ),\n\t\t\tdata.tubularSegments,\n\t\t\tdata.radius,\n\t\t\tdata.radialSegments,\n\t\t\tdata.closed\n\t\t);\n\n\t}\n\n}\n\nclass WireframeGeometry extends BufferGeometry {\n\n\tconstructor( geometry = null ) {\n\n\t\tsuper();\n\t\tthis.type = 'WireframeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tgeometry: geometry\n\t\t};\n\n\t\tif ( geometry !== null ) {\n\n\t\t\t// buffer\n\n\t\t\tconst vertices = [];\n\t\t\tconst edges = new Set();\n\n\t\t\t// helper variables\n\n\t\t\tconst start = new Vector3();\n\t\t\tconst end = new Vector3();\n\n\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\t// indexed BufferGeometry\n\n\t\t\t\tconst position = geometry.attributes.position;\n\t\t\t\tconst indices = geometry.index;\n\t\t\t\tlet groups = geometry.groups;\n\n\t\t\t\tif ( groups.length === 0 ) {\n\n\t\t\t\t\tgroups = [ { start: 0, count: indices.count, materialIndex: 0 } ];\n\n\t\t\t\t}\n\n\t\t\t\t// create a data structure that contains all eges without duplicates\n\n\t\t\t\tfor ( let o = 0, ol = groups.length; o < ol; ++ o ) {\n\n\t\t\t\t\tconst group = groups[ o ];\n\n\t\t\t\t\tconst groupStart = group.start;\n\t\t\t\t\tconst groupCount = group.count;\n\n\t\t\t\t\tfor ( let i = groupStart, l = ( groupStart + groupCount ); i < l; i += 3 ) {\n\n\t\t\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t\tconst index1 = indices.getX( i + j );\n\t\t\t\t\t\t\tconst index2 = indices.getX( i + ( j + 1 ) % 3 );\n\n\t\t\t\t\t\t\tstart.fromBufferAttribute( position, index1 );\n\t\t\t\t\t\t\tend.fromBufferAttribute( position, index2 );\n\n\t\t\t\t\t\t\tif ( isUniqueEdge( start, end, edges ) === true ) {\n\n\t\t\t\t\t\t\t\tvertices.push( start.x, start.y, start.z );\n\t\t\t\t\t\t\t\tvertices.push( end.x, end.y, end.z );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// non-indexed BufferGeometry\n\n\t\t\t\tconst position = geometry.attributes.position;\n\n\t\t\t\tfor ( let i = 0, l = ( position.count / 3 ); i < l; i ++ ) {\n\n\t\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t// three edges per triangle, an edge is represented as (index1, index2)\n\t\t\t\t\t\t// e.g. the first triangle has the following edges: (0,1),(1,2),(2,0)\n\n\t\t\t\t\t\tconst index1 = 3 * i + j;\n\t\t\t\t\t\tconst index2 = 3 * i + ( ( j + 1 ) % 3 );\n\n\t\t\t\t\t\tstart.fromBufferAttribute( position, index1 );\n\t\t\t\t\t\tend.fromBufferAttribute( position, index2 );\n\n\t\t\t\t\t\tif ( isUniqueEdge( start, end, edges ) === true ) {\n\n\t\t\t\t\t\t\tvertices.push( start.x, start.y, start.z );\n\t\t\t\t\t\t\tvertices.push( end.x, end.y, end.z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// build geometry\n\n\t\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t\t}\n\n\t}\n\n}\n\nfunction isUniqueEdge( start, end, edges ) {\n\n\tconst hash1 = `${start.x},${start.y},${start.z}-${end.x},${end.y},${end.z}`;\n\tconst hash2 = `${end.x},${end.y},${end.z}-${start.x},${start.y},${start.z}`; // coincident edge\n\n\tif ( edges.has( hash1 ) === true || edges.has( hash2 ) === true ) {\n\n\t\treturn false;\n\n\t} else {\n\n\t\tedges.add( hash1, hash2 );\n\t\treturn true;\n\n\t}\n\n}\n\nvar Geometries = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tBoxGeometry: BoxGeometry,\n\tBoxBufferGeometry: BoxGeometry,\n\tCircleGeometry: CircleGeometry,\n\tCircleBufferGeometry: CircleGeometry,\n\tConeGeometry: ConeGeometry,\n\tConeBufferGeometry: ConeGeometry,\n\tCylinderGeometry: CylinderGeometry,\n\tCylinderBufferGeometry: CylinderGeometry,\n\tDodecahedronGeometry: DodecahedronGeometry,\n\tDodecahedronBufferGeometry: DodecahedronGeometry,\n\tEdgesGeometry: EdgesGeometry,\n\tExtrudeGeometry: ExtrudeGeometry,\n\tExtrudeBufferGeometry: ExtrudeGeometry,\n\tIcosahedronGeometry: IcosahedronGeometry,\n\tIcosahedronBufferGeometry: IcosahedronGeometry,\n\tLatheGeometry: LatheGeometry,\n\tLatheBufferGeometry: LatheGeometry,\n\tOctahedronGeometry: OctahedronGeometry,\n\tOctahedronBufferGeometry: OctahedronGeometry,\n\tPlaneGeometry: PlaneGeometry,\n\tPlaneBufferGeometry: PlaneGeometry,\n\tPolyhedronGeometry: PolyhedronGeometry,\n\tPolyhedronBufferGeometry: PolyhedronGeometry,\n\tRingGeometry: RingGeometry,\n\tRingBufferGeometry: RingGeometry,\n\tShapeGeometry: ShapeGeometry,\n\tShapeBufferGeometry: ShapeGeometry,\n\tSphereGeometry: SphereGeometry,\n\tSphereBufferGeometry: SphereGeometry,\n\tTetrahedronGeometry: TetrahedronGeometry,\n\tTetrahedronBufferGeometry: TetrahedronGeometry,\n\tTorusGeometry: TorusGeometry,\n\tTorusBufferGeometry: TorusGeometry,\n\tTorusKnotGeometry: TorusKnotGeometry,\n\tTorusKnotBufferGeometry: TorusKnotGeometry,\n\tTubeGeometry: TubeGeometry,\n\tTubeBufferGeometry: TubeGeometry,\n\tWireframeGeometry: WireframeGeometry\n});\n\n/**\n * parameters = {\n * color: \n * }\n */\n\nclass ShadowMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ShadowMaterial';\n\n\t\tthis.color = new Color( 0x000000 );\n\t\tthis.transparent = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\treturn this;\n\n\t}\n\n}\n\nShadowMaterial.prototype.isShadowMaterial = true;\n\n/**\n * parameters = {\n * color: ,\n * roughness: ,\n * metalness: ,\n * opacity: ,\n *\n * map: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * emissive: ,\n * emissiveIntensity: \n * emissiveMap: new THREE.Texture( ),\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * roughnessMap: new THREE.Texture( ),\n *\n * metalnessMap: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * envMapIntensity: \n *\n * refractionRatio: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * flatShading: \n * }\n */\n\nclass MeshStandardMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.defines = { 'STANDARD': '' };\n\n\t\tthis.type = 'MeshStandardMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\t\tthis.roughness = 1.0;\n\t\tthis.metalness = 0.0;\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.roughnessMap = null;\n\n\t\tthis.metalnessMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.envMapIntensity = 1.0;\n\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.flatShading = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = { 'STANDARD': '' };\n\n\t\tthis.color.copy( source.color );\n\t\tthis.roughness = source.roughness;\n\t\tthis.metalness = source.metalness;\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.roughnessMap = source.roughnessMap;\n\n\t\tthis.metalnessMap = source.metalnessMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.envMapIntensity = source.envMapIntensity;\n\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshStandardMaterial.prototype.isMeshStandardMaterial = true;\n\n/**\n * parameters = {\n * clearcoat: ,\n * clearcoatMap: new THREE.Texture( ),\n * clearcoatRoughness: ,\n * clearcoatRoughnessMap: new THREE.Texture( ),\n * clearcoatNormalScale: ,\n * clearcoatNormalMap: new THREE.Texture( ),\n *\n * ior: ,\n * reflectivity: ,\n *\n * sheen: ,\n * sheenTint: ,\n * sheenRoughness: ,\n *\n * transmission: ,\n * transmissionMap: new THREE.Texture( ),\n *\n * thickness: ,\n * thicknessMap: new THREE.Texture( ),\n * attenuationDistance: ,\n * attenuationTint: ,\n *\n * specularIntensity: ,\n * specularIntensityhMap: new THREE.Texture( ),\n * specularTint: ,\n * specularTintMap: new THREE.Texture( )\n * }\n */\n\nclass MeshPhysicalMaterial extends MeshStandardMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.defines = {\n\n\t\t\t'STANDARD': '',\n\t\t\t'PHYSICAL': ''\n\n\t\t};\n\n\t\tthis.type = 'MeshPhysicalMaterial';\n\n\t\tthis.clearcoatMap = null;\n\t\tthis.clearcoatRoughness = 0.0;\n\t\tthis.clearcoatRoughnessMap = null;\n\t\tthis.clearcoatNormalScale = new Vector2( 1, 1 );\n\t\tthis.clearcoatNormalMap = null;\n\n\t\tthis.ior = 1.5;\n\n\t\tObject.defineProperty( this, 'reflectivity', {\n\t\t\tget: function () {\n\n\t\t\t\treturn ( clamp( 2.5 * ( this.ior - 1 ) / ( this.ior + 1 ), 0, 1 ) );\n\n\t\t\t},\n\t\t\tset: function ( reflectivity ) {\n\n\t\t\t\tthis.ior = ( 1 + 0.4 * reflectivity ) / ( 1 - 0.4 * reflectivity );\n\n\t\t\t}\n\t\t} );\n\n\t\tthis.sheenTint = new Color( 0x000000 );\n\t\tthis.sheenRoughness = 1.0;\n\n\t\tthis.transmissionMap = null;\n\n\t\tthis.thickness = 0.01;\n\t\tthis.thicknessMap = null;\n\t\tthis.attenuationDistance = 0.0;\n\t\tthis.attenuationTint = new Color( 1, 1, 1 );\n\n\t\tthis.specularIntensity = 1.0;\n\t\tthis.specularIntensityMap = null;\n\t\tthis.specularTint = new Color( 1, 1, 1 );\n\t\tthis.specularTintMap = null;\n\n\t\tthis._sheen = 0.0;\n\t\tthis._clearcoat = 0;\n\t\tthis._transmission = 0;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tget sheen() {\n\n\t\treturn this._sheen;\n\n\t}\n\n\tset sheen( value ) {\n\n\t\tif ( this._sheen > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._sheen = value;\n\n\t}\n\n\tget clearcoat() {\n\n\t\treturn this._clearcoat;\n\n\t}\n\n\tset clearcoat( value ) {\n\n\t\tif ( this._clearcoat > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._clearcoat = value;\n\n\t}\n\n\tget transmission() {\n\n\t\treturn this._transmission;\n\n\t}\n\n\tset transmission( value ) {\n\n\t\tif ( this._transmission > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._transmission = value;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = {\n\n\t\t\t'STANDARD': '',\n\t\t\t'PHYSICAL': ''\n\n\t\t};\n\n\t\tthis.clearcoat = source.clearcoat;\n\t\tthis.clearcoatMap = source.clearcoatMap;\n\t\tthis.clearcoatRoughness = source.clearcoatRoughness;\n\t\tthis.clearcoatRoughnessMap = source.clearcoatRoughnessMap;\n\t\tthis.clearcoatNormalMap = source.clearcoatNormalMap;\n\t\tthis.clearcoatNormalScale.copy( source.clearcoatNormalScale );\n\n\t\tthis.ior = source.ior;\n\n\t\tthis.sheen = source.sheen;\n\t\tthis.sheenTint.copy( source.sheenTint );\n\t\tthis.sheenRoughness = source.sheenRoughness;\n\n\t\tthis.transmission = source.transmission;\n\t\tthis.transmissionMap = source.transmissionMap;\n\n\t\tthis.thickness = source.thickness;\n\t\tthis.thicknessMap = source.thicknessMap;\n\t\tthis.attenuationDistance = source.attenuationDistance;\n\t\tthis.attenuationTint.copy( source.attenuationTint );\n\n\t\tthis.specularIntensity = source.specularIntensity;\n\t\tthis.specularIntensityMap = source.specularIntensityMap;\n\t\tthis.specularTint.copy( source.specularTint );\n\t\tthis.specularTintMap = source.specularTintMap;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshPhysicalMaterial.prototype.isMeshPhysicalMaterial = true;\n\n/**\n * parameters = {\n * color: ,\n * specular: ,\n * shininess: ,\n * opacity: ,\n *\n * map: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * emissive: ,\n * emissiveIntensity: \n * emissiveMap: new THREE.Texture( ),\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * specularMap: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * combine: THREE.MultiplyOperation,\n * reflectivity: ,\n * refractionRatio: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * flatShading: \n * }\n */\n\nclass MeshPhongMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'MeshPhongMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\t\tthis.specular = new Color( 0x111111 );\n\t\tthis.shininess = 30;\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.flatShading = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\t\tthis.specular.copy( source.specular );\n\t\tthis.shininess = source.shininess;\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshPhongMaterial.prototype.isMeshPhongMaterial = true;\n\n/**\n * parameters = {\n * color: ,\n *\n * map: new THREE.Texture( ),\n * gradientMap: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * emissive: ,\n * emissiveIntensity: \n * emissiveMap: new THREE.Texture( ),\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * alphaMap: new THREE.Texture( ),\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * }\n */\n\nclass MeshToonMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.defines = { 'TOON': '' };\n\n\t\tthis.type = 'MeshToonMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\t\tthis.gradientMap = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\t\tthis.gradientMap = source.gradientMap;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshToonMaterial.prototype.isMeshToonMaterial = true;\n\n/**\n * parameters = {\n * opacity: ,\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * wireframe: ,\n * wireframeLinewidth: \n *\n * flatShading: \n * }\n */\n\nclass MeshNormalMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'MeshNormalMaterial';\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.fog = false;\n\n\t\tthis.flatShading = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshNormalMaterial.prototype.isMeshNormalMaterial = true;\n\n/**\n * parameters = {\n * color: ,\n * opacity: ,\n *\n * map: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * emissive: ,\n * emissiveIntensity: \n * emissiveMap: new THREE.Texture( ),\n *\n * specularMap: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * combine: THREE.Multiply,\n * reflectivity: ,\n * refractionRatio: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * }\n */\n\nclass MeshLambertMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'MeshLambertMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshLambertMaterial.prototype.isMeshLambertMaterial = true;\n\n/**\n * parameters = {\n * color: ,\n * opacity: ,\n *\n * matcap: new THREE.Texture( ),\n *\n * map: new THREE.Texture( ),\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * alphaMap: new THREE.Texture( ),\n *\n * flatShading: \n * }\n */\n\nclass MeshMatcapMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.defines = { 'MATCAP': '' };\n\n\t\tthis.type = 'MeshMatcapMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\n\t\tthis.matcap = null;\n\n\t\tthis.map = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.flatShading = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = { 'MATCAP': '' };\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.matcap = source.matcap;\n\n\t\tthis.map = source.map;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshMatcapMaterial.prototype.isMeshMatcapMaterial = true;\n\n/**\n * parameters = {\n * color: ,\n * opacity: ,\n *\n * linewidth: ,\n *\n * scale: ,\n * dashSize: ,\n * gapSize: \n * }\n */\n\nclass LineDashedMaterial extends LineBasicMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'LineDashedMaterial';\n\n\t\tthis.scale = 1;\n\t\tthis.dashSize = 3;\n\t\tthis.gapSize = 1;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.scale = source.scale;\n\t\tthis.dashSize = source.dashSize;\n\t\tthis.gapSize = source.gapSize;\n\n\t\treturn this;\n\n\t}\n\n}\n\nLineDashedMaterial.prototype.isLineDashedMaterial = true;\n\nvar Materials = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tShadowMaterial: ShadowMaterial,\n\tSpriteMaterial: SpriteMaterial,\n\tRawShaderMaterial: RawShaderMaterial,\n\tShaderMaterial: ShaderMaterial,\n\tPointsMaterial: PointsMaterial,\n\tMeshPhysicalMaterial: MeshPhysicalMaterial,\n\tMeshStandardMaterial: MeshStandardMaterial,\n\tMeshPhongMaterial: MeshPhongMaterial,\n\tMeshToonMaterial: MeshToonMaterial,\n\tMeshNormalMaterial: MeshNormalMaterial,\n\tMeshLambertMaterial: MeshLambertMaterial,\n\tMeshDepthMaterial: MeshDepthMaterial,\n\tMeshDistanceMaterial: MeshDistanceMaterial,\n\tMeshBasicMaterial: MeshBasicMaterial,\n\tMeshMatcapMaterial: MeshMatcapMaterial,\n\tLineDashedMaterial: LineDashedMaterial,\n\tLineBasicMaterial: LineBasicMaterial,\n\tMaterial: Material\n});\n\nconst AnimationUtils = {\n\n\t// same as Array.prototype.slice, but also works on typed arrays\n\tarraySlice: function ( array, from, to ) {\n\n\t\tif ( AnimationUtils.isTypedArray( array ) ) {\n\n\t\t\t// in ios9 array.subarray(from, undefined) will return empty array\n\t\t\t// but array.subarray(from) or array.subarray(from, len) is correct\n\t\t\treturn new array.constructor( array.subarray( from, to !== undefined ? to : array.length ) );\n\n\t\t}\n\n\t\treturn array.slice( from, to );\n\n\t},\n\n\t// converts an array to a specific type\n\tconvertArray: function ( array, type, forceClone ) {\n\n\t\tif ( ! array || // let 'undefined' and 'null' pass\n\t\t\t! forceClone && array.constructor === type ) return array;\n\n\t\tif ( typeof type.BYTES_PER_ELEMENT === 'number' ) {\n\n\t\t\treturn new type( array ); // create typed array\n\n\t\t}\n\n\t\treturn Array.prototype.slice.call( array ); // create Array\n\n\t},\n\n\tisTypedArray: function ( object ) {\n\n\t\treturn ArrayBuffer.isView( object ) &&\n\t\t\t! ( object instanceof DataView );\n\n\t},\n\n\t// returns an array by which times and values can be sorted\n\tgetKeyframeOrder: function ( times ) {\n\n\t\tfunction compareTime( i, j ) {\n\n\t\t\treturn times[ i ] - times[ j ];\n\n\t\t}\n\n\t\tconst n = times.length;\n\t\tconst result = new Array( n );\n\t\tfor ( let i = 0; i !== n; ++ i ) result[ i ] = i;\n\n\t\tresult.sort( compareTime );\n\n\t\treturn result;\n\n\t},\n\n\t// uses the array previously returned by 'getKeyframeOrder' to sort data\n\tsortedArray: function ( values, stride, order ) {\n\n\t\tconst nValues = values.length;\n\t\tconst result = new values.constructor( nValues );\n\n\t\tfor ( let i = 0, dstOffset = 0; dstOffset !== nValues; ++ i ) {\n\n\t\t\tconst srcOffset = order[ i ] * stride;\n\n\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\tresult[ dstOffset ++ ] = values[ srcOffset + j ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn result;\n\n\t},\n\n\t// function for parsing AOS keyframe formats\n\tflattenJSON: function ( jsonKeys, times, values, valuePropertyName ) {\n\n\t\tlet i = 1, key = jsonKeys[ 0 ];\n\n\t\twhile ( key !== undefined && key[ valuePropertyName ] === undefined ) {\n\n\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t}\n\n\t\tif ( key === undefined ) return; // no data\n\n\t\tlet value = key[ valuePropertyName ];\n\t\tif ( value === undefined ) return; // no data\n\n\t\tif ( Array.isArray( value ) ) {\n\n\t\t\tdo {\n\n\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\tvalues.push.apply( values, value ); // push all elements\n\n\t\t\t\t}\n\n\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t} while ( key !== undefined );\n\n\t\t} else if ( value.toArray !== undefined ) {\n\n\t\t\t// ...assume THREE.Math-ish\n\n\t\t\tdo {\n\n\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\tvalue.toArray( values, values.length );\n\n\t\t\t\t}\n\n\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t} while ( key !== undefined );\n\n\t\t} else {\n\n\t\t\t// otherwise push as-is\n\n\t\t\tdo {\n\n\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\tvalues.push( value );\n\n\t\t\t\t}\n\n\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t} while ( key !== undefined );\n\n\t\t}\n\n\t},\n\n\tsubclip: function ( sourceClip, name, startFrame, endFrame, fps = 30 ) {\n\n\t\tconst clip = sourceClip.clone();\n\n\t\tclip.name = name;\n\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\t\tconst track = clip.tracks[ i ];\n\t\t\tconst valueSize = track.getValueSize();\n\n\t\t\tconst times = [];\n\t\t\tconst values = [];\n\n\t\t\tfor ( let j = 0; j < track.times.length; ++ j ) {\n\n\t\t\t\tconst frame = track.times[ j ] * fps;\n\n\t\t\t\tif ( frame < startFrame || frame >= endFrame ) continue;\n\n\t\t\t\ttimes.push( track.times[ j ] );\n\n\t\t\t\tfor ( let k = 0; k < valueSize; ++ k ) {\n\n\t\t\t\t\tvalues.push( track.values[ j * valueSize + k ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( times.length === 0 ) continue;\n\n\t\t\ttrack.times = AnimationUtils.convertArray( times, track.times.constructor );\n\t\t\ttrack.values = AnimationUtils.convertArray( values, track.values.constructor );\n\n\t\t\ttracks.push( track );\n\n\t\t}\n\n\t\tclip.tracks = tracks;\n\n\t\t// find minimum .times value across all tracks in the trimmed clip\n\n\t\tlet minStartTime = Infinity;\n\n\t\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\t\tif ( minStartTime > clip.tracks[ i ].times[ 0 ] ) {\n\n\t\t\t\tminStartTime = clip.tracks[ i ].times[ 0 ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// shift all tracks such that clip begins at t=0\n\n\t\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\t\tclip.tracks[ i ].shift( - 1 * minStartTime );\n\n\t\t}\n\n\t\tclip.resetDuration();\n\n\t\treturn clip;\n\n\t},\n\n\tmakeClipAdditive: function ( targetClip, referenceFrame = 0, referenceClip = targetClip, fps = 30 ) {\n\n\t\tif ( fps <= 0 ) fps = 30;\n\n\t\tconst numTracks = referenceClip.tracks.length;\n\t\tconst referenceTime = referenceFrame / fps;\n\n\t\t// Make each track's values relative to the values at the reference frame\n\t\tfor ( let i = 0; i < numTracks; ++ i ) {\n\n\t\t\tconst referenceTrack = referenceClip.tracks[ i ];\n\t\t\tconst referenceTrackType = referenceTrack.ValueTypeName;\n\n\t\t\t// Skip this track if it's non-numeric\n\t\t\tif ( referenceTrackType === 'bool' || referenceTrackType === 'string' ) continue;\n\n\t\t\t// Find the track in the target clip whose name and type matches the reference track\n\t\t\tconst targetTrack = targetClip.tracks.find( function ( track ) {\n\n\t\t\t\treturn track.name === referenceTrack.name\n\t\t\t\t\t&& track.ValueTypeName === referenceTrackType;\n\n\t\t\t} );\n\n\t\t\tif ( targetTrack === undefined ) continue;\n\n\t\t\tlet referenceOffset = 0;\n\t\t\tconst referenceValueSize = referenceTrack.getValueSize();\n\n\t\t\tif ( referenceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\t\treferenceOffset = referenceValueSize / 3;\n\n\t\t\t}\n\n\t\t\tlet targetOffset = 0;\n\t\t\tconst targetValueSize = targetTrack.getValueSize();\n\n\t\t\tif ( targetTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\t\ttargetOffset = targetValueSize / 3;\n\n\t\t\t}\n\n\t\t\tconst lastIndex = referenceTrack.times.length - 1;\n\t\t\tlet referenceValue;\n\n\t\t\t// Find the value to subtract out of the track\n\t\t\tif ( referenceTime <= referenceTrack.times[ 0 ] ) {\n\n\t\t\t\t// Reference frame is earlier than the first keyframe, so just use the first keyframe\n\t\t\t\tconst startIndex = referenceOffset;\n\t\t\t\tconst endIndex = referenceValueSize - referenceOffset;\n\t\t\t\treferenceValue = AnimationUtils.arraySlice( referenceTrack.values, startIndex, endIndex );\n\n\t\t\t} else if ( referenceTime >= referenceTrack.times[ lastIndex ] ) {\n\n\t\t\t\t// Reference frame is after the last keyframe, so just use the last keyframe\n\t\t\t\tconst startIndex = lastIndex * referenceValueSize + referenceOffset;\n\t\t\t\tconst endIndex = startIndex + referenceValueSize - referenceOffset;\n\t\t\t\treferenceValue = AnimationUtils.arraySlice( referenceTrack.values, startIndex, endIndex );\n\n\t\t\t} else {\n\n\t\t\t\t// Interpolate to the reference value\n\t\t\t\tconst interpolant = referenceTrack.createInterpolant();\n\t\t\t\tconst startIndex = referenceOffset;\n\t\t\t\tconst endIndex = referenceValueSize - referenceOffset;\n\t\t\t\tinterpolant.evaluate( referenceTime );\n\t\t\t\treferenceValue = AnimationUtils.arraySlice( interpolant.resultBuffer, startIndex, endIndex );\n\n\t\t\t}\n\n\t\t\t// Conjugate the quaternion\n\t\t\tif ( referenceTrackType === 'quaternion' ) {\n\n\t\t\t\tconst referenceQuat = new Quaternion().fromArray( referenceValue ).normalize().conjugate();\n\t\t\t\treferenceQuat.toArray( referenceValue );\n\n\t\t\t}\n\n\t\t\t// Subtract the reference value from all of the track values\n\n\t\t\tconst numTimes = targetTrack.times.length;\n\t\t\tfor ( let j = 0; j < numTimes; ++ j ) {\n\n\t\t\t\tconst valueStart = j * targetValueSize + targetOffset;\n\n\t\t\t\tif ( referenceTrackType === 'quaternion' ) {\n\n\t\t\t\t\t// Multiply the conjugate for quaternion track types\n\t\t\t\t\tQuaternion.multiplyQuaternionsFlat(\n\t\t\t\t\t\ttargetTrack.values,\n\t\t\t\t\t\tvalueStart,\n\t\t\t\t\t\treferenceValue,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\ttargetTrack.values,\n\t\t\t\t\t\tvalueStart\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst valueEnd = targetValueSize - targetOffset * 2;\n\n\t\t\t\t\t// Subtract each value for all other numeric track types\n\t\t\t\t\tfor ( let k = 0; k < valueEnd; ++ k ) {\n\n\t\t\t\t\t\ttargetTrack.values[ valueStart + k ] -= referenceValue[ k ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\ttargetClip.blendMode = AdditiveAnimationBlendMode;\n\n\t\treturn targetClip;\n\n\t}\n\n};\n\n/**\n * Abstract base class of interpolants over parametric samples.\n *\n * The parameter domain is one dimensional, typically the time or a path\n * along a curve defined by the data.\n *\n * The sample values can have any dimensionality and derived classes may\n * apply special interpretations to the data.\n *\n * This class provides the interval seek in a Template Method, deferring\n * the actual interpolation to derived classes.\n *\n * Time complexity is O(1) for linear access crossing at most two points\n * and O(log N) for random access, where N is the number of positions.\n *\n * References:\n *\n * \t\thttp://www.oodesign.com/template-method-pattern.html\n *\n */\n\nclass Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tthis.parameterPositions = parameterPositions;\n\t\tthis._cachedIndex = 0;\n\n\t\tthis.resultBuffer = resultBuffer !== undefined ?\n\t\t\tresultBuffer : new sampleValues.constructor( sampleSize );\n\t\tthis.sampleValues = sampleValues;\n\t\tthis.valueSize = sampleSize;\n\n\t\tthis.settings = null;\n\t\tthis.DefaultSettings_ = {};\n\n\t}\n\n\tevaluate( t ) {\n\n\t\tconst pp = this.parameterPositions;\n\t\tlet i1 = this._cachedIndex,\n\t\t\tt1 = pp[ i1 ],\n\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\tvalidate_interval: {\n\n\t\t\tseek: {\n\n\t\t\t\tlet right;\n\n\t\t\t\tlinear_scan: {\n\n\t\t\t\t\t//- See http://jsperf.com/comparison-to-undefined/3\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\n\t\t\t\t\t//- \t\t\t\tif ( t >= t1 || t1 === undefined ) {\n\t\t\t\t\tforward_scan: if ( ! ( t < t1 ) ) {\n\n\t\t\t\t\t\tfor ( let giveUpAt = i1 + 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\t\t\t\tif ( t < t0 ) break forward_scan;\n\n\t\t\t\t\t\t\t\t// after end\n\n\t\t\t\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\t\t\t\treturn this.afterEnd_( i1 - 1, t, t0 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt0 = t1;\n\t\t\t\t\t\t\tt1 = pp[ ++ i1 ];\n\n\t\t\t\t\t\t\tif ( t < t1 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the right side of the index\n\t\t\t\t\t\tright = pp.length;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\t\t\t\t\tif ( t < t0 || t0 === undefined ) {\n\t\t\t\t\tif ( ! ( t >= t0 ) ) {\n\n\t\t\t\t\t\t// looping?\n\n\t\t\t\t\t\tconst t1global = pp[ 1 ];\n\n\t\t\t\t\t\tif ( t < t1global ) {\n\n\t\t\t\t\t\t\ti1 = 2; // + 1, using the scan for the details\n\t\t\t\t\t\t\tt0 = t1global;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// linear reverse scan\n\n\t\t\t\t\t\tfor ( let giveUpAt = i1 - 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\t\t\t\t// before start\n\n\t\t\t\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\t\t\t\treturn this.beforeStart_( 0, t, t1 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt1 = t0;\n\t\t\t\t\t\t\tt0 = pp[ -- i1 - 1 ];\n\n\t\t\t\t\t\t\tif ( t >= t0 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the left side of the index\n\t\t\t\t\t\tright = i1;\n\t\t\t\t\t\ti1 = 0;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// the interval is valid\n\n\t\t\t\t\tbreak validate_interval;\n\n\t\t\t\t} // linear scan\n\n\t\t\t\t// binary search\n\n\t\t\t\twhile ( i1 < right ) {\n\n\t\t\t\t\tconst mid = ( i1 + right ) >>> 1;\n\n\t\t\t\t\tif ( t < pp[ mid ] ) {\n\n\t\t\t\t\t\tright = mid;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ti1 = mid + 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tt1 = pp[ i1 ];\n\t\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\t\t\t// check boundary cases, again\n\n\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\treturn this.beforeStart_( 0, t, t1 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\treturn this.afterEnd_( i1 - 1, t0, t );\n\n\t\t\t\t}\n\n\t\t\t} // seek\n\n\t\t\tthis._cachedIndex = i1;\n\n\t\t\tthis.intervalChanged_( i1, t0, t1 );\n\n\t\t} // validate_interval\n\n\t\treturn this.interpolate_( i1, t0, t, t1 );\n\n\t}\n\n\tgetSettings_() {\n\n\t\treturn this.settings || this.DefaultSettings_;\n\n\t}\n\n\tcopySampleValue_( index ) {\n\n\t\t// copies a sample value to the result buffer\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = index * stride;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] = values[ offset + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\t// Template methods for derived classes:\n\n\tinterpolate_( /* i1, t0, t, t1 */ ) {\n\n\t\tthrow new Error( 'call to abstract method' );\n\t\t// implementations shall return this.resultBuffer\n\n\t}\n\n\tintervalChanged_( /* i1, t0, t1 */ ) {\n\n\t\t// empty\n\n\t}\n\n}\n\n// ALIAS DEFINITIONS\n\nInterpolant.prototype.beforeStart_ = Interpolant.prototype.copySampleValue_;\nInterpolant.prototype.afterEnd_ = Interpolant.prototype.copySampleValue_;\n\n/**\n * Fast and simple cubic spline interpolant.\n *\n * It was derived from a Hermitian construction setting the first derivative\n * at each sample position to the linear slope between neighboring positions\n * over their parameter interval.\n */\n\nclass CubicInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t\tthis._weightPrev = - 0;\n\t\tthis._offsetPrev = - 0;\n\t\tthis._weightNext = - 0;\n\t\tthis._offsetNext = - 0;\n\n\t\tthis.DefaultSettings_ = {\n\n\t\t\tendingStart: ZeroCurvatureEnding,\n\t\t\tendingEnd: ZeroCurvatureEnding\n\n\t\t};\n\n\t}\n\n\tintervalChanged_( i1, t0, t1 ) {\n\n\t\tconst pp = this.parameterPositions;\n\t\tlet iPrev = i1 - 2,\n\t\t\tiNext = i1 + 1,\n\n\t\t\ttPrev = pp[ iPrev ],\n\t\t\ttNext = pp[ iNext ];\n\n\t\tif ( tPrev === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingStart ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(t0) = 0\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = 2 * t0 - t1;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiPrev = pp.length - 2;\n\t\t\t\t\ttPrev = t0 + pp[ iPrev ] - pp[ iPrev + 1 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(t0) = 0 a.k.a. Natural Spline\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = t1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tNext === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingEnd ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(tN) = 0\n\t\t\t\t\tiNext = i1;\n\t\t\t\t\ttNext = 2 * t1 - t0;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiNext = 1;\n\t\t\t\t\ttNext = t1 + pp[ 1 ] - pp[ 0 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(tN) = 0, a.k.a. Natural Spline\n\t\t\t\t\tiNext = i1 - 1;\n\t\t\t\t\ttNext = t0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst halfDt = ( t1 - t0 ) * 0.5,\n\t\t\tstride = this.valueSize;\n\n\t\tthis._weightPrev = halfDt / ( t0 - tPrev );\n\t\tthis._weightNext = halfDt / ( tNext - t1 );\n\t\tthis._offsetPrev = iPrev * stride;\n\t\tthis._offsetNext = iNext * stride;\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\to1 = i1 * stride,\t\to0 = o1 - stride,\n\t\t\toP = this._offsetPrev, \toN = this._offsetNext,\n\t\t\twP = this._weightPrev,\twN = this._weightNext,\n\n\t\t\tp = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tpp = p * p,\n\t\t\tppp = pp * p;\n\n\t\t// evaluate polynomials\n\n\t\tconst sP = - wP * ppp + 2 * wP * pp - wP * p;\n\t\tconst s0 = ( 1 + wP ) * ppp + ( - 1.5 - 2 * wP ) * pp + ( - 0.5 + wP ) * p + 1;\n\t\tconst s1 = ( - 1 - wN ) * ppp + ( 1.5 + wN ) * pp + 0.5 * p;\n\t\tconst sN = wN * ppp - wN * pp;\n\n\t\t// combine data linearly\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tsP * values[ oP + i ] +\n\t\t\t\t\ts0 * values[ o0 + i ] +\n\t\t\t\t\ts1 * values[ o1 + i ] +\n\t\t\t\t\tsN * values[ oN + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\nclass LinearInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\toffset1 = i1 * stride,\n\t\t\toffset0 = offset1 - stride,\n\n\t\t\tweight1 = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tweight0 = 1 - weight1;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tvalues[ offset0 + i ] * weight0 +\n\t\t\t\t\tvalues[ offset1 + i ] * weight1;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\n/**\n *\n * Interpolant that evaluates to the sample value at the position preceeding\n * the parameter.\n */\n\nclass DiscreteInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1 /*, t0, t, t1 */ ) {\n\n\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t}\n\n}\n\nclass KeyframeTrack {\n\n\tconstructor( name, times, values, interpolation ) {\n\n\t\tif ( name === undefined ) throw new Error( 'THREE.KeyframeTrack: track name is undefined' );\n\t\tif ( times === undefined || times.length === 0 ) throw new Error( 'THREE.KeyframeTrack: no keyframes in track named ' + name );\n\n\t\tthis.name = name;\n\n\t\tthis.times = AnimationUtils.convertArray( times, this.TimeBufferType );\n\t\tthis.values = AnimationUtils.convertArray( values, this.ValueBufferType );\n\n\t\tthis.setInterpolation( interpolation || this.DefaultInterpolation );\n\n\t}\n\n\t// Serialization (in static context, because of constructor invocation\n\t// and automatic invocation of .toJSON):\n\n\tstatic toJSON( track ) {\n\n\t\tconst trackType = track.constructor;\n\n\t\tlet json;\n\n\t\t// derived classes can define a static toJSON method\n\t\tif ( trackType.toJSON !== this.toJSON ) {\n\n\t\t\tjson = trackType.toJSON( track );\n\n\t\t} else {\n\n\t\t\t// by default, we assume the data can be serialized as-is\n\t\t\tjson = {\n\n\t\t\t\t'name': track.name,\n\t\t\t\t'times': AnimationUtils.convertArray( track.times, Array ),\n\t\t\t\t'values': AnimationUtils.convertArray( track.values, Array )\n\n\t\t\t};\n\n\t\t\tconst interpolation = track.getInterpolation();\n\n\t\t\tif ( interpolation !== track.DefaultInterpolation ) {\n\n\t\t\t\tjson.interpolation = interpolation;\n\n\t\t\t}\n\n\t\t}\n\n\t\tjson.type = track.ValueTypeName; // mandatory\n\n\t\treturn json;\n\n\t}\n\n\tInterpolantFactoryMethodDiscrete( result ) {\n\n\t\treturn new DiscreteInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tInterpolantFactoryMethodLinear( result ) {\n\n\t\treturn new LinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tInterpolantFactoryMethodSmooth( result ) {\n\n\t\treturn new CubicInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tsetInterpolation( interpolation ) {\n\n\t\tlet factoryMethod;\n\n\t\tswitch ( interpolation ) {\n\n\t\t\tcase InterpolateDiscrete:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodDiscrete;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateLinear:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodLinear;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateSmooth:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodSmooth;\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( factoryMethod === undefined ) {\n\n\t\t\tconst message = 'unsupported interpolation for ' +\n\t\t\t\tthis.ValueTypeName + ' keyframe track named ' + this.name;\n\n\t\t\tif ( this.createInterpolant === undefined ) {\n\n\t\t\t\t// fall back to default, unless the default itself is messed up\n\t\t\t\tif ( interpolation !== this.DefaultInterpolation ) {\n\n\t\t\t\t\tthis.setInterpolation( this.DefaultInterpolation );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( message ); // fatal, in this case\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconsole.warn( 'THREE.KeyframeTrack:', message );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tthis.createInterpolant = factoryMethod;\n\n\t\treturn this;\n\n\t}\n\n\tgetInterpolation() {\n\n\t\tswitch ( this.createInterpolant ) {\n\n\t\t\tcase this.InterpolantFactoryMethodDiscrete:\n\n\t\t\t\treturn InterpolateDiscrete;\n\n\t\t\tcase this.InterpolantFactoryMethodLinear:\n\n\t\t\t\treturn InterpolateLinear;\n\n\t\t\tcase this.InterpolantFactoryMethodSmooth:\n\n\t\t\t\treturn InterpolateSmooth;\n\n\t\t}\n\n\t}\n\n\tgetValueSize() {\n\n\t\treturn this.values.length / this.times.length;\n\n\t}\n\n\t// move all keyframes either forwards or backwards in time\n\tshift( timeOffset ) {\n\n\t\tif ( timeOffset !== 0.0 ) {\n\n\t\t\tconst times = this.times;\n\n\t\t\tfor ( let i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] += timeOffset;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// scale all keyframe times by a factor (useful for frame <-> seconds conversions)\n\tscale( timeScale ) {\n\n\t\tif ( timeScale !== 1.0 ) {\n\n\t\t\tconst times = this.times;\n\n\t\t\tfor ( let i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] *= timeScale;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// removes keyframes before and after animation without changing any values within the range [startTime, endTime].\n\t// IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values\n\ttrim( startTime, endTime ) {\n\n\t\tconst times = this.times,\n\t\t\tnKeys = times.length;\n\n\t\tlet from = 0,\n\t\t\tto = nKeys - 1;\n\n\t\twhile ( from !== nKeys && times[ from ] < startTime ) {\n\n\t\t\t++ from;\n\n\t\t}\n\n\t\twhile ( to !== - 1 && times[ to ] > endTime ) {\n\n\t\t\t-- to;\n\n\t\t}\n\n\t\t++ to; // inclusive -> exclusive bound\n\n\t\tif ( from !== 0 || to !== nKeys ) {\n\n\t\t\t// empty tracks are forbidden, so keep at least one keyframe\n\t\t\tif ( from >= to ) {\n\n\t\t\t\tto = Math.max( to, 1 );\n\t\t\t\tfrom = to - 1;\n\n\t\t\t}\n\n\t\t\tconst stride = this.getValueSize();\n\t\t\tthis.times = AnimationUtils.arraySlice( times, from, to );\n\t\t\tthis.values = AnimationUtils.arraySlice( this.values, from * stride, to * stride );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable\n\tvalidate() {\n\n\t\tlet valid = true;\n\n\t\tconst valueSize = this.getValueSize();\n\t\tif ( valueSize - Math.floor( valueSize ) !== 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Invalid value size in track.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tconst times = this.times,\n\t\t\tvalues = this.values,\n\n\t\t\tnKeys = times.length;\n\n\t\tif ( nKeys === 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Track is empty.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tlet prevTime = null;\n\n\t\tfor ( let i = 0; i !== nKeys; i ++ ) {\n\n\t\t\tconst currTime = times[ i ];\n\n\t\t\tif ( typeof currTime === 'number' && isNaN( currTime ) ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Time is not a valid number.', this, i, currTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( prevTime !== null && prevTime > currTime ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Out of order keys.', this, i, currTime, prevTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tprevTime = currTime;\n\n\t\t}\n\n\t\tif ( values !== undefined ) {\n\n\t\t\tif ( AnimationUtils.isTypedArray( values ) ) {\n\n\t\t\t\tfor ( let i = 0, n = values.length; i !== n; ++ i ) {\n\n\t\t\t\t\tconst value = values[ i ];\n\n\t\t\t\t\tif ( isNaN( value ) ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Value is not a valid number.', this, i, value );\n\t\t\t\t\t\tvalid = false;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn valid;\n\n\t}\n\n\t// removes equivalent sequential keys as common in morph target sequences\n\t// (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0)\n\toptimize() {\n\n\t\t// times or values may be shared with other tracks, so overwriting is unsafe\n\t\tconst times = AnimationUtils.arraySlice( this.times ),\n\t\t\tvalues = AnimationUtils.arraySlice( this.values ),\n\t\t\tstride = this.getValueSize(),\n\n\t\t\tsmoothInterpolation = this.getInterpolation() === InterpolateSmooth,\n\n\t\t\tlastIndex = times.length - 1;\n\n\t\tlet writeIndex = 1;\n\n\t\tfor ( let i = 1; i < lastIndex; ++ i ) {\n\n\t\t\tlet keep = false;\n\n\t\t\tconst time = times[ i ];\n\t\t\tconst timeNext = times[ i + 1 ];\n\n\t\t\t// remove adjacent keyframes scheduled at the same time\n\n\t\t\tif ( time !== timeNext && ( i !== 1 || time !== times[ 0 ] ) ) {\n\n\t\t\t\tif ( ! smoothInterpolation ) {\n\n\t\t\t\t\t// remove unnecessary keyframes same as their neighbors\n\n\t\t\t\t\tconst offset = i * stride,\n\t\t\t\t\t\toffsetP = offset - stride,\n\t\t\t\t\t\toffsetN = offset + stride;\n\n\t\t\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tconst value = values[ offset + j ];\n\n\t\t\t\t\t\tif ( value !== values[ offsetP + j ] ||\n\t\t\t\t\t\t\tvalue !== values[ offsetN + j ] ) {\n\n\t\t\t\t\t\t\tkeep = true;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tkeep = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// in-place compaction\n\n\t\t\tif ( keep ) {\n\n\t\t\t\tif ( i !== writeIndex ) {\n\n\t\t\t\t\ttimes[ writeIndex ] = times[ i ];\n\n\t\t\t\t\tconst readOffset = i * stride,\n\t\t\t\t\t\twriteOffset = writeIndex * stride;\n\n\t\t\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t++ writeIndex;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// flush last keyframe (compaction looks ahead)\n\n\t\tif ( lastIndex > 0 ) {\n\n\t\t\ttimes[ writeIndex ] = times[ lastIndex ];\n\n\t\t\tfor ( let readOffset = lastIndex * stride, writeOffset = writeIndex * stride, j = 0; j !== stride; ++ j ) {\n\n\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t}\n\n\t\t\t++ writeIndex;\n\n\t\t}\n\n\t\tif ( writeIndex !== times.length ) {\n\n\t\t\tthis.times = AnimationUtils.arraySlice( times, 0, writeIndex );\n\t\t\tthis.values = AnimationUtils.arraySlice( values, 0, writeIndex * stride );\n\n\t\t} else {\n\n\t\t\tthis.times = times;\n\t\t\tthis.values = values;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\tconst times = AnimationUtils.arraySlice( this.times, 0 );\n\t\tconst values = AnimationUtils.arraySlice( this.values, 0 );\n\n\t\tconst TypedKeyframeTrack = this.constructor;\n\t\tconst track = new TypedKeyframeTrack( this.name, times, values );\n\n\t\t// Interpolant argument to constructor is not saved, so copy the factory method directly.\n\t\ttrack.createInterpolant = this.createInterpolant;\n\n\t\treturn track;\n\n\t}\n\n}\n\nKeyframeTrack.prototype.TimeBufferType = Float32Array;\nKeyframeTrack.prototype.ValueBufferType = Float32Array;\nKeyframeTrack.prototype.DefaultInterpolation = InterpolateLinear;\n\n/**\n * A Track of Boolean keyframe values.\n */\nclass BooleanKeyframeTrack extends KeyframeTrack {}\n\nBooleanKeyframeTrack.prototype.ValueTypeName = 'bool';\nBooleanKeyframeTrack.prototype.ValueBufferType = Array;\nBooleanKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete;\nBooleanKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined;\nBooleanKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A Track of keyframe values that represent color.\n */\nclass ColorKeyframeTrack extends KeyframeTrack {}\n\nColorKeyframeTrack.prototype.ValueTypeName = 'color';\n\n/**\n * A Track of numeric keyframe values.\n */\nclass NumberKeyframeTrack extends KeyframeTrack {}\n\nNumberKeyframeTrack.prototype.ValueTypeName = 'number';\n\n/**\n * Spherical linear unit quaternion interpolant.\n */\n\nclass QuaternionLinearInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\talpha = ( t - t0 ) / ( t1 - t0 );\n\n\t\tlet offset = i1 * stride;\n\n\t\tfor ( let end = offset + stride; offset !== end; offset += 4 ) {\n\n\t\t\tQuaternion.slerpFlat( result, 0, values, offset - stride, values, offset, alpha );\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\n/**\n * A Track of quaternion keyframe values.\n */\nclass QuaternionKeyframeTrack extends KeyframeTrack {\n\n\tInterpolantFactoryMethodLinear( result ) {\n\n\t\treturn new QuaternionLinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n}\n\nQuaternionKeyframeTrack.prototype.ValueTypeName = 'quaternion';\n// ValueBufferType is inherited\nQuaternionKeyframeTrack.prototype.DefaultInterpolation = InterpolateLinear;\nQuaternionKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A Track that interpolates Strings\n */\nclass StringKeyframeTrack extends KeyframeTrack {}\n\nStringKeyframeTrack.prototype.ValueTypeName = 'string';\nStringKeyframeTrack.prototype.ValueBufferType = Array;\nStringKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete;\nStringKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined;\nStringKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A Track of vectored keyframe values.\n */\nclass VectorKeyframeTrack extends KeyframeTrack {}\n\nVectorKeyframeTrack.prototype.ValueTypeName = 'vector';\n\nclass AnimationClip {\n\n\tconstructor( name, duration = - 1, tracks, blendMode = NormalAnimationBlendMode ) {\n\n\t\tthis.name = name;\n\t\tthis.tracks = tracks;\n\t\tthis.duration = duration;\n\t\tthis.blendMode = blendMode;\n\n\t\tthis.uuid = generateUUID();\n\n\t\t// this means it should figure out its duration by scanning the tracks\n\t\tif ( this.duration < 0 ) {\n\n\t\t\tthis.resetDuration();\n\n\t\t}\n\n\t}\n\n\n\tstatic parse( json ) {\n\n\t\tconst tracks = [],\n\t\t\tjsonTracks = json.tracks,\n\t\t\tframeTime = 1.0 / ( json.fps || 1.0 );\n\n\t\tfor ( let i = 0, n = jsonTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( parseKeyframeTrack( jsonTracks[ i ] ).scale( frameTime ) );\n\n\t\t}\n\n\t\tconst clip = new this( json.name, json.duration, tracks, json.blendMode );\n\t\tclip.uuid = json.uuid;\n\n\t\treturn clip;\n\n\t}\n\n\tstatic toJSON( clip ) {\n\n\t\tconst tracks = [],\n\t\t\tclipTracks = clip.tracks;\n\n\t\tconst json = {\n\n\t\t\t'name': clip.name,\n\t\t\t'duration': clip.duration,\n\t\t\t'tracks': tracks,\n\t\t\t'uuid': clip.uuid,\n\t\t\t'blendMode': clip.blendMode\n\n\t\t};\n\n\t\tfor ( let i = 0, n = clipTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( KeyframeTrack.toJSON( clipTracks[ i ] ) );\n\n\t\t}\n\n\t\treturn json;\n\n\t}\n\n\tstatic CreateFromMorphTargetSequence( name, morphTargetSequence, fps, noLoop ) {\n\n\t\tconst numMorphTargets = morphTargetSequence.length;\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < numMorphTargets; i ++ ) {\n\n\t\t\tlet times = [];\n\t\t\tlet values = [];\n\n\t\t\ttimes.push(\n\t\t\t\t( i + numMorphTargets - 1 ) % numMorphTargets,\n\t\t\t\ti,\n\t\t\t\t( i + 1 ) % numMorphTargets );\n\n\t\t\tvalues.push( 0, 1, 0 );\n\n\t\t\tconst order = AnimationUtils.getKeyframeOrder( times );\n\t\t\ttimes = AnimationUtils.sortedArray( times, 1, order );\n\t\t\tvalues = AnimationUtils.sortedArray( values, 1, order );\n\n\t\t\t// if there is a key at the first frame, duplicate it as the\n\t\t\t// last frame as well for perfect loop.\n\t\t\tif ( ! noLoop && times[ 0 ] === 0 ) {\n\n\t\t\t\ttimes.push( numMorphTargets );\n\t\t\t\tvalues.push( values[ 0 ] );\n\n\t\t\t}\n\n\t\t\ttracks.push(\n\t\t\t\tnew NumberKeyframeTrack(\n\t\t\t\t\t'.morphTargetInfluences[' + morphTargetSequence[ i ].name + ']',\n\t\t\t\t\ttimes, values\n\t\t\t\t).scale( 1.0 / fps ) );\n\n\t\t}\n\n\t\treturn new this( name, - 1, tracks );\n\n\t}\n\n\tstatic findByName( objectOrClipArray, name ) {\n\n\t\tlet clipArray = objectOrClipArray;\n\n\t\tif ( ! Array.isArray( objectOrClipArray ) ) {\n\n\t\t\tconst o = objectOrClipArray;\n\t\t\tclipArray = o.geometry && o.geometry.animations || o.animations;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < clipArray.length; i ++ ) {\n\n\t\t\tif ( clipArray[ i ].name === name ) {\n\n\t\t\t\treturn clipArray[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\tstatic CreateClipsFromMorphTargetSequences( morphTargets, fps, noLoop ) {\n\n\t\tconst animationToMorphTargets = {};\n\n\t\t// tested with https://regex101.com/ on trick sequences\n\t\t// such flamingo_flyA_003, flamingo_run1_003, crdeath0059\n\t\tconst pattern = /^([\\w-]*?)([\\d]+)$/;\n\n\t\t// sort morph target names into animation groups based\n\t\t// patterns like Walk_001, Walk_002, Run_001, Run_002\n\t\tfor ( let i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\tconst morphTarget = morphTargets[ i ];\n\t\t\tconst parts = morphTarget.name.match( pattern );\n\n\t\t\tif ( parts && parts.length > 1 ) {\n\n\t\t\t\tconst name = parts[ 1 ];\n\n\t\t\t\tlet animationMorphTargets = animationToMorphTargets[ name ];\n\n\t\t\t\tif ( ! animationMorphTargets ) {\n\n\t\t\t\t\tanimationToMorphTargets[ name ] = animationMorphTargets = [];\n\n\t\t\t\t}\n\n\t\t\t\tanimationMorphTargets.push( morphTarget );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst clips = [];\n\n\t\tfor ( const name in animationToMorphTargets ) {\n\n\t\t\tclips.push( this.CreateFromMorphTargetSequence( name, animationToMorphTargets[ name ], fps, noLoop ) );\n\n\t\t}\n\n\t\treturn clips;\n\n\t}\n\n\t// parse the animation.hierarchy format\n\tstatic parseAnimation( animation, bones ) {\n\n\t\tif ( ! animation ) {\n\n\t\t\tconsole.error( 'THREE.AnimationClip: No animation in JSONLoader data.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst addNonemptyTrack = function ( trackType, trackName, animationKeys, propertyName, destTracks ) {\n\n\t\t\t// only return track if there are actually keys.\n\t\t\tif ( animationKeys.length !== 0 ) {\n\n\t\t\t\tconst times = [];\n\t\t\t\tconst values = [];\n\n\t\t\t\tAnimationUtils.flattenJSON( animationKeys, times, values, propertyName );\n\n\t\t\t\t// empty keys are filtered out, so check again\n\t\t\t\tif ( times.length !== 0 ) {\n\n\t\t\t\t\tdestTracks.push( new trackType( trackName, times, values ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tconst tracks = [];\n\n\t\tconst clipName = animation.name || 'default';\n\t\tconst fps = animation.fps || 30;\n\t\tconst blendMode = animation.blendMode;\n\n\t\t// automatic length determination in AnimationClip.\n\t\tlet duration = animation.length || - 1;\n\n\t\tconst hierarchyTracks = animation.hierarchy || [];\n\n\t\tfor ( let h = 0; h < hierarchyTracks.length; h ++ ) {\n\n\t\t\tconst animationKeys = hierarchyTracks[ h ].keys;\n\n\t\t\t// skip empty tracks\n\t\t\tif ( ! animationKeys || animationKeys.length === 0 ) continue;\n\n\t\t\t// process morph targets\n\t\t\tif ( animationKeys[ 0 ].morphTargets ) {\n\n\t\t\t\t// figure out all morph targets used in this track\n\t\t\t\tconst morphTargetNames = {};\n\n\t\t\t\tlet k;\n\n\t\t\t\tfor ( k = 0; k < animationKeys.length; k ++ ) {\n\n\t\t\t\t\tif ( animationKeys[ k ].morphTargets ) {\n\n\t\t\t\t\t\tfor ( let m = 0; m < animationKeys[ k ].morphTargets.length; m ++ ) {\n\n\t\t\t\t\t\t\tmorphTargetNames[ animationKeys[ k ].morphTargets[ m ] ] = - 1;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// create a track for each morph target with all zero\n\t\t\t\t// morphTargetInfluences except for the keys in which\n\t\t\t\t// the morphTarget is named.\n\t\t\t\tfor ( const morphTargetName in morphTargetNames ) {\n\n\t\t\t\t\tconst times = [];\n\t\t\t\t\tconst values = [];\n\n\t\t\t\t\tfor ( let m = 0; m !== animationKeys[ k ].morphTargets.length; ++ m ) {\n\n\t\t\t\t\t\tconst animationKey = animationKeys[ k ];\n\n\t\t\t\t\t\ttimes.push( animationKey.time );\n\t\t\t\t\t\tvalues.push( ( animationKey.morphTarget === morphTargetName ) ? 1 : 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttracks.push( new NumberKeyframeTrack( '.morphTargetInfluence[' + morphTargetName + ']', times, values ) );\n\n\t\t\t\t}\n\n\t\t\t\tduration = morphTargetNames.length * ( fps || 1.0 );\n\n\t\t\t} else {\n\n\t\t\t\t// ...assume skeletal animation\n\n\t\t\t\tconst boneName = '.bones[' + bones[ h ].name + ']';\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.position',\n\t\t\t\t\tanimationKeys, 'pos', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tQuaternionKeyframeTrack, boneName + '.quaternion',\n\t\t\t\t\tanimationKeys, 'rot', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.scale',\n\t\t\t\t\tanimationKeys, 'scl', tracks );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tracks.length === 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst clip = new this( clipName, duration, tracks, blendMode );\n\n\t\treturn clip;\n\n\t}\n\n\tresetDuration() {\n\n\t\tconst tracks = this.tracks;\n\t\tlet duration = 0;\n\n\t\tfor ( let i = 0, n = tracks.length; i !== n; ++ i ) {\n\n\t\t\tconst track = this.tracks[ i ];\n\n\t\t\tduration = Math.max( duration, track.times[ track.times.length - 1 ] );\n\n\t\t}\n\n\t\tthis.duration = duration;\n\n\t\treturn this;\n\n\t}\n\n\ttrim() {\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].trim( 0, this.duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tvalidate() {\n\n\t\tlet valid = true;\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tvalid = valid && this.tracks[ i ].validate();\n\n\t\t}\n\n\t\treturn valid;\n\n\t}\n\n\toptimize() {\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].optimize();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\ttracks.push( this.tracks[ i ].clone() );\n\n\t\t}\n\n\t\treturn new this.constructor( this.name, this.duration, tracks, this.blendMode );\n\n\t}\n\n\ttoJSON() {\n\n\t\treturn this.constructor.toJSON( this );\n\n\t}\n\n}\n\nfunction getTrackTypeForValueTypeName( typeName ) {\n\n\tswitch ( typeName.toLowerCase() ) {\n\n\t\tcase 'scalar':\n\t\tcase 'double':\n\t\tcase 'float':\n\t\tcase 'number':\n\t\tcase 'integer':\n\n\t\t\treturn NumberKeyframeTrack;\n\n\t\tcase 'vector':\n\t\tcase 'vector2':\n\t\tcase 'vector3':\n\t\tcase 'vector4':\n\n\t\t\treturn VectorKeyframeTrack;\n\n\t\tcase 'color':\n\n\t\t\treturn ColorKeyframeTrack;\n\n\t\tcase 'quaternion':\n\n\t\t\treturn QuaternionKeyframeTrack;\n\n\t\tcase 'bool':\n\t\tcase 'boolean':\n\n\t\t\treturn BooleanKeyframeTrack;\n\n\t\tcase 'string':\n\n\t\t\treturn StringKeyframeTrack;\n\n\t}\n\n\tthrow new Error( 'THREE.KeyframeTrack: Unsupported typeName: ' + typeName );\n\n}\n\nfunction parseKeyframeTrack( json ) {\n\n\tif ( json.type === undefined ) {\n\n\t\tthrow new Error( 'THREE.KeyframeTrack: track type undefined, can not parse' );\n\n\t}\n\n\tconst trackType = getTrackTypeForValueTypeName( json.type );\n\n\tif ( json.times === undefined ) {\n\n\t\tconst times = [], values = [];\n\n\t\tAnimationUtils.flattenJSON( json.keys, times, values, 'value' );\n\n\t\tjson.times = times;\n\t\tjson.values = values;\n\n\t}\n\n\t// derived classes can define a static parse method\n\tif ( trackType.parse !== undefined ) {\n\n\t\treturn trackType.parse( json );\n\n\t} else {\n\n\t\t// by default, we assume a constructor compatible with the base\n\t\treturn new trackType( json.name, json.times, json.values, json.interpolation );\n\n\t}\n\n}\n\nconst Cache = {\n\n\tenabled: false,\n\n\tfiles: {},\n\n\tadd: function ( key, file ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Adding key:', key );\n\n\t\tthis.files[ key ] = file;\n\n\t},\n\n\tget: function ( key ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Checking key:', key );\n\n\t\treturn this.files[ key ];\n\n\t},\n\n\tremove: function ( key ) {\n\n\t\tdelete this.files[ key ];\n\n\t},\n\n\tclear: function () {\n\n\t\tthis.files = {};\n\n\t}\n\n};\n\nclass LoadingManager {\n\n\tconstructor( onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tlet isLoading = false;\n\t\tlet itemsLoaded = 0;\n\t\tlet itemsTotal = 0;\n\t\tlet urlModifier = undefined;\n\t\tconst handlers = [];\n\n\t\t// Refer to #5689 for the reason why we don't set .onStart\n\t\t// in the constructor\n\n\t\tthis.onStart = undefined;\n\t\tthis.onLoad = onLoad;\n\t\tthis.onProgress = onProgress;\n\t\tthis.onError = onError;\n\n\t\tthis.itemStart = function ( url ) {\n\n\t\t\titemsTotal ++;\n\n\t\t\tif ( isLoading === false ) {\n\n\t\t\t\tif ( scope.onStart !== undefined ) {\n\n\t\t\t\t\tscope.onStart( url, itemsLoaded, itemsTotal );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tisLoading = true;\n\n\t\t};\n\n\t\tthis.itemEnd = function ( url ) {\n\n\t\t\titemsLoaded ++;\n\n\t\t\tif ( scope.onProgress !== undefined ) {\n\n\t\t\t\tscope.onProgress( url, itemsLoaded, itemsTotal );\n\n\t\t\t}\n\n\t\t\tif ( itemsLoaded === itemsTotal ) {\n\n\t\t\t\tisLoading = false;\n\n\t\t\t\tif ( scope.onLoad !== undefined ) {\n\n\t\t\t\t\tscope.onLoad();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.itemError = function ( url ) {\n\n\t\t\tif ( scope.onError !== undefined ) {\n\n\t\t\t\tscope.onError( url );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.resolveURL = function ( url ) {\n\n\t\t\tif ( urlModifier ) {\n\n\t\t\t\treturn urlModifier( url );\n\n\t\t\t}\n\n\t\t\treturn url;\n\n\t\t};\n\n\t\tthis.setURLModifier = function ( transform ) {\n\n\t\t\turlModifier = transform;\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.addHandler = function ( regex, loader ) {\n\n\t\t\thandlers.push( regex, loader );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.removeHandler = function ( regex ) {\n\n\t\t\tconst index = handlers.indexOf( regex );\n\n\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\thandlers.splice( index, 2 );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.getHandler = function ( file ) {\n\n\t\t\tfor ( let i = 0, l = handlers.length; i < l; i += 2 ) {\n\n\t\t\t\tconst regex = handlers[ i ];\n\t\t\t\tconst loader = handlers[ i + 1 ];\n\n\t\t\t\tif ( regex.global ) regex.lastIndex = 0; // see #17920\n\n\t\t\t\tif ( regex.test( file ) ) {\n\n\t\t\t\t\treturn loader;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t};\n\n\t}\n\n}\n\nconst DefaultLoadingManager = new LoadingManager();\n\nclass Loader {\n\n\tconstructor( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t\tthis.crossOrigin = 'anonymous';\n\t\tthis.withCredentials = false;\n\t\tthis.path = '';\n\t\tthis.resourcePath = '';\n\t\tthis.requestHeader = {};\n\n\t}\n\n\tload( /* url, onLoad, onProgress, onError */ ) {}\n\n\tloadAsync( url, onProgress ) {\n\n\t\tconst scope = this;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tscope.load( url, resolve, onProgress, reject );\n\n\t\t} );\n\n\t}\n\n\tparse( /* data */ ) {}\n\n\tsetCrossOrigin( crossOrigin ) {\n\n\t\tthis.crossOrigin = crossOrigin;\n\t\treturn this;\n\n\t}\n\n\tsetWithCredentials( value ) {\n\n\t\tthis.withCredentials = value;\n\t\treturn this;\n\n\t}\n\n\tsetPath( path ) {\n\n\t\tthis.path = path;\n\t\treturn this;\n\n\t}\n\n\tsetResourcePath( resourcePath ) {\n\n\t\tthis.resourcePath = resourcePath;\n\t\treturn this;\n\n\t}\n\n\tsetRequestHeader( requestHeader ) {\n\n\t\tthis.requestHeader = requestHeader;\n\t\treturn this;\n\n\t}\n\n}\n\nconst loading = {};\n\nclass FileLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\t// Check if request is duplicate\n\n\t\tif ( loading[ url ] !== undefined ) {\n\n\t\t\tloading[ url ].push( {\n\n\t\t\t\tonLoad: onLoad,\n\t\t\t\tonProgress: onProgress,\n\t\t\t\tonError: onError\n\n\t\t\t} );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// Check for data: URI\n\t\tconst dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/;\n\t\tconst dataUriRegexResult = url.match( dataUriRegex );\n\t\tlet request;\n\n\t\t// Safari can not handle Data URIs through XMLHttpRequest so process manually\n\t\tif ( dataUriRegexResult ) {\n\n\t\t\tconst mimeType = dataUriRegexResult[ 1 ];\n\t\t\tconst isBase64 = !! dataUriRegexResult[ 2 ];\n\n\t\t\tlet data = dataUriRegexResult[ 3 ];\n\t\t\tdata = decodeURIComponent( data );\n\n\t\t\tif ( isBase64 ) data = atob( data );\n\n\t\t\ttry {\n\n\t\t\t\tlet response;\n\t\t\t\tconst responseType = ( this.responseType || '' ).toLowerCase();\n\n\t\t\t\tswitch ( responseType ) {\n\n\t\t\t\t\tcase 'arraybuffer':\n\t\t\t\t\tcase 'blob':\n\n\t\t\t\t\t\tconst view = new Uint8Array( data.length );\n\n\t\t\t\t\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\t\t\t\t\tview[ i ] = data.charCodeAt( i );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( responseType === 'blob' ) {\n\n\t\t\t\t\t\t\tresponse = new Blob( [ view.buffer ], { type: mimeType } );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tresponse = view.buffer;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'document':\n\n\t\t\t\t\t\tconst parser = new DOMParser();\n\t\t\t\t\t\tresponse = parser.parseFromString( data, mimeType );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'json':\n\n\t\t\t\t\t\tresponse = JSON.parse( data );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault: // 'text' or other\n\n\t\t\t\t\t\tresponse = data;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\t// Wait for next browser tick like standard XMLHttpRequest event dispatching does\n\t\t\t\tsetTimeout( function () {\n\n\t\t\t\t\tif ( onLoad ) onLoad( response );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, 0 );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\t// Wait for next browser tick like standard XMLHttpRequest event dispatching does\n\t\t\t\tsetTimeout( function () {\n\n\t\t\t\t\tif ( onError ) onError( error );\n\n\t\t\t\t\tscope.manager.itemError( url );\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, 0 );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Initialise array for duplicate requests\n\n\t\t\tloading[ url ] = [];\n\n\t\t\tloading[ url ].push( {\n\n\t\t\t\tonLoad: onLoad,\n\t\t\t\tonProgress: onProgress,\n\t\t\t\tonError: onError\n\n\t\t\t} );\n\n\t\t\trequest = new XMLHttpRequest();\n\n\t\t\trequest.open( 'GET', url, true );\n\n\t\t\trequest.addEventListener( 'load', function ( event ) {\n\n\t\t\t\tconst response = this.response;\n\n\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tif ( this.status === 200 || this.status === 0 ) {\n\n\t\t\t\t\t// Some browsers return HTTP Status 0 when using non-http protocol\n\t\t\t\t\t// e.g. 'file://' or 'data://'. Handle as success.\n\n\t\t\t\t\tif ( this.status === 0 ) console.warn( 'THREE.FileLoader: HTTP Status 0 received.' );\n\n\t\t\t\t\t// Add to cache only on HTTP success, so that we do not cache\n\t\t\t\t\t// error response bodies as proper responses to requests.\n\t\t\t\t\tCache.add( url, response );\n\n\t\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\t\tif ( callback.onLoad ) callback.onLoad( response );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\t\tif ( callback.onError ) callback.onError( event );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemError( url );\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}\n\n\t\t\t}, false );\n\n\t\t\trequest.addEventListener( 'progress', function ( event ) {\n\n\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onProgress ) callback.onProgress( event );\n\n\t\t\t\t}\n\n\t\t\t}, false );\n\n\t\t\trequest.addEventListener( 'error', function ( event ) {\n\n\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onError ) callback.onError( event );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, false );\n\n\t\t\trequest.addEventListener( 'abort', function ( event ) {\n\n\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onError ) callback.onError( event );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, false );\n\n\t\t\tif ( this.responseType !== undefined ) request.responseType = this.responseType;\n\t\t\tif ( this.withCredentials !== undefined ) request.withCredentials = this.withCredentials;\n\n\t\t\tif ( request.overrideMimeType ) request.overrideMimeType( this.mimeType !== undefined ? this.mimeType : 'text/plain' );\n\n\t\t\tfor ( const header in this.requestHeader ) {\n\n\t\t\t\trequest.setRequestHeader( header, this.requestHeader[ header ] );\n\n\t\t\t}\n\n\t\t\trequest.send( null );\n\n\t\t}\n\n\t\tscope.manager.itemStart( url );\n\n\t\treturn request;\n\n\t}\n\n\tsetResponseType( value ) {\n\n\t\tthis.responseType = value;\n\t\treturn this;\n\n\t}\n\n\tsetMimeType( value ) {\n\n\t\tthis.mimeType = value;\n\t\treturn this;\n\n\t}\n\n}\n\nclass AnimationLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( json ) {\n\n\t\tconst animations = [];\n\n\t\tfor ( let i = 0; i < json.length; i ++ ) {\n\n\t\t\tconst clip = AnimationClip.parse( json[ i ] );\n\n\t\t\tanimations.push( clip );\n\n\t\t}\n\n\t\treturn animations;\n\n\t}\n\n}\n\n/**\n * Abstract Base class to block based textures loader (dds, pvr, ...)\n *\n * Sub classes have to implement the parse() method which will be used in load().\n */\n\nclass CompressedTextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst images = [];\n\n\t\tconst texture = new CompressedTexture();\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\n\t\tlet loaded = 0;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( url[ i ], function ( buffer ) {\n\n\t\t\t\tconst texDatas = scope.parse( buffer, true );\n\n\t\t\t\timages[ i ] = {\n\t\t\t\t\twidth: texDatas.width,\n\t\t\t\t\theight: texDatas.height,\n\t\t\t\t\tformat: texDatas.format,\n\t\t\t\t\tmipmaps: texDatas.mipmaps\n\t\t\t\t};\n\n\t\t\t\tloaded += 1;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\tif ( texDatas.mipmapCount === 1 ) texture.minFilter = LinearFilter;\n\n\t\t\t\t\ttexture.image = images;\n\t\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\tif ( Array.isArray( url ) ) {\n\n\t\t\tfor ( let i = 0, il = url.length; i < il; ++ i ) {\n\n\t\t\t\tloadTexture( i );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// compressed cubemap texture stored in a single DDS file\n\n\t\t\tloader.load( url, function ( buffer ) {\n\n\t\t\t\tconst texDatas = scope.parse( buffer, true );\n\n\t\t\t\tif ( texDatas.isCubemap ) {\n\n\t\t\t\t\tconst faces = texDatas.mipmaps.length / texDatas.mipmapCount;\n\n\t\t\t\t\tfor ( let f = 0; f < faces; f ++ ) {\n\n\t\t\t\t\t\timages[ f ] = { mipmaps: [] };\n\n\t\t\t\t\t\tfor ( let i = 0; i < texDatas.mipmapCount; i ++ ) {\n\n\t\t\t\t\t\t\timages[ f ].mipmaps.push( texDatas.mipmaps[ f * texDatas.mipmapCount + i ] );\n\t\t\t\t\t\t\timages[ f ].format = texDatas.format;\n\t\t\t\t\t\t\timages[ f ].width = texDatas.width;\n\t\t\t\t\t\t\timages[ f ].height = texDatas.height;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.image = images;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttexture.image.width = texDatas.width;\n\t\t\t\t\ttexture.image.height = texDatas.height;\n\t\t\t\t\ttexture.mipmaps = texDatas.mipmaps;\n\n\t\t\t\t}\n\n\t\t\t\tif ( texDatas.mipmapCount === 1 ) {\n\n\t\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t\t}\n\n\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n}\n\nclass ImageLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tconst image = createElementNS( 'img' );\n\n\t\tfunction onImageLoad() {\n\n\t\t\timage.removeEventListener( 'load', onImageLoad, false );\n\t\t\timage.removeEventListener( 'error', onImageError, false );\n\n\t\t\tCache.add( url, this );\n\n\t\t\tif ( onLoad ) onLoad( this );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}\n\n\t\tfunction onImageError( event ) {\n\n\t\t\timage.removeEventListener( 'load', onImageLoad, false );\n\t\t\timage.removeEventListener( 'error', onImageError, false );\n\n\t\t\tif ( onError ) onError( event );\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}\n\n\t\timage.addEventListener( 'load', onImageLoad, false );\n\t\timage.addEventListener( 'error', onImageError, false );\n\n\t\tif ( url.substr( 0, 5 ) !== 'data:' ) {\n\n\t\t\tif ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin;\n\n\t\t}\n\n\t\tscope.manager.itemStart( url );\n\n\t\timage.src = url;\n\n\t\treturn image;\n\n\t}\n\n}\n\nclass CubeTextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( urls, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new CubeTexture();\n\n\t\tconst loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tlet loaded = 0;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( urls[ i ], function ( image ) {\n\n\t\t\t\ttexture.images[ i ] = image;\n\n\t\t\t\tloaded ++;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, undefined, onError );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < urls.length; ++ i ) {\n\n\t\t\tloadTexture( i );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n}\n\n/**\n * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...)\n *\n * Sub classes have to implement the parse() method which will be used in load().\n */\n\nclass DataTextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst texture = new DataTexture();\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setPath( this.path );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\tconst texData = scope.parse( buffer );\n\n\t\t\tif ( ! texData ) return;\n\n\t\t\tif ( texData.image !== undefined ) {\n\n\t\t\t\ttexture.image = texData.image;\n\n\t\t\t} else if ( texData.data !== undefined ) {\n\n\t\t\t\ttexture.image.width = texData.width;\n\t\t\t\ttexture.image.height = texData.height;\n\t\t\t\ttexture.image.data = texData.data;\n\n\t\t\t}\n\n\t\t\ttexture.wrapS = texData.wrapS !== undefined ? texData.wrapS : ClampToEdgeWrapping;\n\t\t\ttexture.wrapT = texData.wrapT !== undefined ? texData.wrapT : ClampToEdgeWrapping;\n\n\t\t\ttexture.magFilter = texData.magFilter !== undefined ? texData.magFilter : LinearFilter;\n\t\t\ttexture.minFilter = texData.minFilter !== undefined ? texData.minFilter : LinearFilter;\n\n\t\t\ttexture.anisotropy = texData.anisotropy !== undefined ? texData.anisotropy : 1;\n\n\t\t\tif ( texData.encoding !== undefined ) {\n\n\t\t\t\ttexture.encoding = texData.encoding;\n\n\t\t\t}\n\n\t\t\tif ( texData.flipY !== undefined ) {\n\n\t\t\t\ttexture.flipY = texData.flipY;\n\n\t\t\t}\n\n\t\t\tif ( texData.format !== undefined ) {\n\n\t\t\t\ttexture.format = texData.format;\n\n\t\t\t}\n\n\t\t\tif ( texData.type !== undefined ) {\n\n\t\t\t\ttexture.type = texData.type;\n\n\t\t\t}\n\n\t\t\tif ( texData.mipmaps !== undefined ) {\n\n\t\t\t\ttexture.mipmaps = texData.mipmaps;\n\t\t\t\ttexture.minFilter = LinearMipmapLinearFilter; // presumably...\n\n\t\t\t}\n\n\t\t\tif ( texData.mipmapCount === 1 ) {\n\n\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t}\n\n\t\t\tif ( texData.generateMipmaps !== undefined ) {\n\n\t\t\t\ttexture.generateMipmaps = texData.generateMipmaps;\n\n\t\t\t}\n\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad ) onLoad( texture, texData );\n\n\t\t}, onProgress, onError );\n\n\n\t\treturn texture;\n\n\t}\n\n}\n\nclass TextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new Texture();\n\n\t\tconst loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tloader.load( url, function ( image ) {\n\n\t\t\ttexture.image = image;\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad !== undefined ) {\n\n\t\t\t\tonLoad( texture );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t\treturn texture;\n\n\t}\n\n}\n\nclass Light extends Object3D {\n\n\tconstructor( color, intensity = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Light';\n\n\t\tthis.color = new Color( color );\n\t\tthis.intensity = intensity;\n\n\t}\n\n\tdispose() {\n\n\t\t// Empty here in base class; some subclasses override.\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\t\tthis.intensity = source.intensity;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.color = this.color.getHex();\n\t\tdata.object.intensity = this.intensity;\n\n\t\tif ( this.groundColor !== undefined ) data.object.groundColor = this.groundColor.getHex();\n\n\t\tif ( this.distance !== undefined ) data.object.distance = this.distance;\n\t\tif ( this.angle !== undefined ) data.object.angle = this.angle;\n\t\tif ( this.decay !== undefined ) data.object.decay = this.decay;\n\t\tif ( this.penumbra !== undefined ) data.object.penumbra = this.penumbra;\n\n\t\tif ( this.shadow !== undefined ) data.object.shadow = this.shadow.toJSON();\n\n\t\treturn data;\n\n\t}\n\n}\n\nLight.prototype.isLight = true;\n\nclass HemisphereLight extends Light {\n\n\tconstructor( skyColor, groundColor, intensity ) {\n\n\t\tsuper( skyColor, intensity );\n\n\t\tthis.type = 'HemisphereLight';\n\n\t\tthis.position.copy( Object3D.DefaultUp );\n\t\tthis.updateMatrix();\n\n\t\tthis.groundColor = new Color( groundColor );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.groundColor.copy( source.groundColor );\n\n\t\treturn this;\n\n\t}\n\n}\n\nHemisphereLight.prototype.isHemisphereLight = true;\n\nconst _projScreenMatrix$1 = /*@__PURE__*/ new Matrix4();\nconst _lightPositionWorld$1 = /*@__PURE__*/ new Vector3();\nconst _lookTarget$1 = /*@__PURE__*/ new Vector3();\n\nclass LightShadow {\n\n\tconstructor( camera ) {\n\n\t\tthis.camera = camera;\n\n\t\tthis.bias = 0;\n\t\tthis.normalBias = 0;\n\t\tthis.radius = 1;\n\t\tthis.blurSamples = 8;\n\n\t\tthis.mapSize = new Vector2( 512, 512 );\n\n\t\tthis.map = null;\n\t\tthis.mapPass = null;\n\t\tthis.matrix = new Matrix4();\n\n\t\tthis.autoUpdate = true;\n\t\tthis.needsUpdate = false;\n\n\t\tthis._frustum = new Frustum();\n\t\tthis._frameExtents = new Vector2( 1, 1 );\n\n\t\tthis._viewportCount = 1;\n\n\t\tthis._viewports = [\n\n\t\t\tnew Vector4( 0, 0, 1, 1 )\n\n\t\t];\n\n\t}\n\n\tgetViewportCount() {\n\n\t\treturn this._viewportCount;\n\n\t}\n\n\tgetFrustum() {\n\n\t\treturn this._frustum;\n\n\t}\n\n\tupdateMatrices( light ) {\n\n\t\tconst shadowCamera = this.camera;\n\t\tconst shadowMatrix = this.matrix;\n\n\t\t_lightPositionWorld$1.setFromMatrixPosition( light.matrixWorld );\n\t\tshadowCamera.position.copy( _lightPositionWorld$1 );\n\n\t\t_lookTarget$1.setFromMatrixPosition( light.target.matrixWorld );\n\t\tshadowCamera.lookAt( _lookTarget$1 );\n\t\tshadowCamera.updateMatrixWorld();\n\n\t\t_projScreenMatrix$1.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse );\n\t\tthis._frustum.setFromProjectionMatrix( _projScreenMatrix$1 );\n\n\t\tshadowMatrix.set(\n\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t);\n\n\t\tshadowMatrix.multiply( shadowCamera.projectionMatrix );\n\t\tshadowMatrix.multiply( shadowCamera.matrixWorldInverse );\n\n\t}\n\n\tgetViewport( viewportIndex ) {\n\n\t\treturn this._viewports[ viewportIndex ];\n\n\t}\n\n\tgetFrameExtents() {\n\n\t\treturn this._frameExtents;\n\n\t}\n\n\tdispose() {\n\n\t\tif ( this.map ) {\n\n\t\t\tthis.map.dispose();\n\n\t\t}\n\n\t\tif ( this.mapPass ) {\n\n\t\t\tthis.mapPass.dispose();\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.camera = source.camera.clone();\n\n\t\tthis.bias = source.bias;\n\t\tthis.radius = source.radius;\n\n\t\tthis.mapSize.copy( source.mapSize );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst object = {};\n\n\t\tif ( this.bias !== 0 ) object.bias = this.bias;\n\t\tif ( this.normalBias !== 0 ) object.normalBias = this.normalBias;\n\t\tif ( this.radius !== 1 ) object.radius = this.radius;\n\t\tif ( this.mapSize.x !== 512 || this.mapSize.y !== 512 ) object.mapSize = this.mapSize.toArray();\n\n\t\tobject.camera = this.camera.toJSON( false ).object;\n\t\tdelete object.camera.matrix;\n\n\t\treturn object;\n\n\t}\n\n}\n\nclass SpotLightShadow extends LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new PerspectiveCamera( 50, 1, 0.5, 500 ) );\n\n\t\tthis.focus = 1;\n\n\t}\n\n\tupdateMatrices( light ) {\n\n\t\tconst camera = this.camera;\n\n\t\tconst fov = RAD2DEG * 2 * light.angle * this.focus;\n\t\tconst aspect = this.mapSize.width / this.mapSize.height;\n\t\tconst far = light.distance || camera.far;\n\n\t\tif ( fov !== camera.fov || aspect !== camera.aspect || far !== camera.far ) {\n\n\t\t\tcamera.fov = fov;\n\t\t\tcamera.aspect = aspect;\n\t\t\tcamera.far = far;\n\t\t\tcamera.updateProjectionMatrix();\n\n\t\t}\n\n\t\tsuper.updateMatrices( light );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.focus = source.focus;\n\n\t\treturn this;\n\n\t}\n\n}\n\nSpotLightShadow.prototype.isSpotLightShadow = true;\n\nclass SpotLight extends Light {\n\n\tconstructor( color, intensity, distance = 0, angle = Math.PI / 3, penumbra = 0, decay = 1 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.type = 'SpotLight';\n\n\t\tthis.position.copy( Object3D.DefaultUp );\n\t\tthis.updateMatrix();\n\n\t\tthis.target = new Object3D();\n\n\t\tthis.distance = distance;\n\t\tthis.angle = angle;\n\t\tthis.penumbra = penumbra;\n\t\tthis.decay = decay; // for physically correct lights, should be 2.\n\n\t\tthis.shadow = new SpotLightShadow();\n\n\t}\n\n\tget power() {\n\n\t\t// compute the light's luminous power (in lumens) from its intensity (in candela)\n\t\t// by convention for a spotlight, luminous power (lm) = π * luminous intensity (cd)\n\t\treturn this.intensity * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// set the light's intensity (in candela) from the desired luminous power (in lumens)\n\t\tthis.intensity = power / Math.PI;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.distance = source.distance;\n\t\tthis.angle = source.angle;\n\t\tthis.penumbra = source.penumbra;\n\t\tthis.decay = source.decay;\n\n\t\tthis.target = source.target.clone();\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n}\n\nSpotLight.prototype.isSpotLight = true;\n\nconst _projScreenMatrix = /*@__PURE__*/ new Matrix4();\nconst _lightPositionWorld = /*@__PURE__*/ new Vector3();\nconst _lookTarget = /*@__PURE__*/ new Vector3();\n\nclass PointLightShadow extends LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new PerspectiveCamera( 90, 1, 0.5, 500 ) );\n\n\t\tthis._frameExtents = new Vector2( 4, 2 );\n\n\t\tthis._viewportCount = 6;\n\n\t\tthis._viewports = [\n\t\t\t// These viewports map a cube-map onto a 2D texture with the\n\t\t\t// following orientation:\n\t\t\t//\n\t\t\t// xzXZ\n\t\t\t// y Y\n\t\t\t//\n\t\t\t// X - Positive x direction\n\t\t\t// x - Negative x direction\n\t\t\t// Y - Positive y direction\n\t\t\t// y - Negative y direction\n\t\t\t// Z - Positive z direction\n\t\t\t// z - Negative z direction\n\n\t\t\t// positive X\n\t\t\tnew Vector4( 2, 1, 1, 1 ),\n\t\t\t// negative X\n\t\t\tnew Vector4( 0, 1, 1, 1 ),\n\t\t\t// positive Z\n\t\t\tnew Vector4( 3, 1, 1, 1 ),\n\t\t\t// negative Z\n\t\t\tnew Vector4( 1, 1, 1, 1 ),\n\t\t\t// positive Y\n\t\t\tnew Vector4( 3, 0, 1, 1 ),\n\t\t\t// negative Y\n\t\t\tnew Vector4( 1, 0, 1, 1 )\n\t\t];\n\n\t\tthis._cubeDirections = [\n\t\t\tnew Vector3( 1, 0, 0 ), new Vector3( - 1, 0, 0 ), new Vector3( 0, 0, 1 ),\n\t\t\tnew Vector3( 0, 0, - 1 ), new Vector3( 0, 1, 0 ), new Vector3( 0, - 1, 0 )\n\t\t];\n\n\t\tthis._cubeUps = [\n\t\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ),\n\t\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ),\tnew Vector3( 0, 0, - 1 )\n\t\t];\n\n\t}\n\n\tupdateMatrices( light, viewportIndex = 0 ) {\n\n\t\tconst camera = this.camera;\n\t\tconst shadowMatrix = this.matrix;\n\n\t\tconst far = light.distance || camera.far;\n\n\t\tif ( far !== camera.far ) {\n\n\t\t\tcamera.far = far;\n\t\t\tcamera.updateProjectionMatrix();\n\n\t\t}\n\n\t\t_lightPositionWorld.setFromMatrixPosition( light.matrixWorld );\n\t\tcamera.position.copy( _lightPositionWorld );\n\n\t\t_lookTarget.copy( camera.position );\n\t\t_lookTarget.add( this._cubeDirections[ viewportIndex ] );\n\t\tcamera.up.copy( this._cubeUps[ viewportIndex ] );\n\t\tcamera.lookAt( _lookTarget );\n\t\tcamera.updateMatrixWorld();\n\n\t\tshadowMatrix.makeTranslation( - _lightPositionWorld.x, - _lightPositionWorld.y, - _lightPositionWorld.z );\n\n\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\tthis._frustum.setFromProjectionMatrix( _projScreenMatrix );\n\n\t}\n\n}\n\nPointLightShadow.prototype.isPointLightShadow = true;\n\nclass PointLight extends Light {\n\n\tconstructor( color, intensity, distance = 0, decay = 1 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.type = 'PointLight';\n\n\t\tthis.distance = distance;\n\t\tthis.decay = decay; // for physically correct lights, should be 2.\n\n\t\tthis.shadow = new PointLightShadow();\n\n\t}\n\n\tget power() {\n\n\t\t// compute the light's luminous power (in lumens) from its intensity (in candela)\n\t\t// for an isotropic light source, luminous power (lm) = 4 π luminous intensity (cd)\n\t\treturn this.intensity * 4 * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// set the light's intensity (in candela) from the desired luminous power (in lumens)\n\t\tthis.intensity = power / ( 4 * Math.PI );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.distance = source.distance;\n\t\tthis.decay = source.decay;\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n}\n\nPointLight.prototype.isPointLight = true;\n\nclass DirectionalLightShadow extends LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new OrthographicCamera( - 5, 5, 5, - 5, 0.5, 500 ) );\n\n\t}\n\n}\n\nDirectionalLightShadow.prototype.isDirectionalLightShadow = true;\n\nclass DirectionalLight extends Light {\n\n\tconstructor( color, intensity ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.type = 'DirectionalLight';\n\n\t\tthis.position.copy( Object3D.DefaultUp );\n\t\tthis.updateMatrix();\n\n\t\tthis.target = new Object3D();\n\n\t\tthis.shadow = new DirectionalLightShadow();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.target = source.target.clone();\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n}\n\nDirectionalLight.prototype.isDirectionalLight = true;\n\nclass AmbientLight extends Light {\n\n\tconstructor( color, intensity ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.type = 'AmbientLight';\n\n\t}\n\n}\n\nAmbientLight.prototype.isAmbientLight = true;\n\nclass RectAreaLight extends Light {\n\n\tconstructor( color, intensity, width = 10, height = 10 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.type = 'RectAreaLight';\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\n\t}\n\n\tget power() {\n\n\t\t// compute the light's luminous power (in lumens) from its intensity (in nits)\n\t\treturn this.intensity * this.width * this.height * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// set the light's intensity (in nits) from the desired luminous power (in lumens)\n\t\tthis.intensity = power / ( this.width * this.height * Math.PI );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.width = this.width;\n\t\tdata.object.height = this.height;\n\n\t\treturn data;\n\n\t}\n\n}\n\nRectAreaLight.prototype.isRectAreaLight = true;\n\n/**\n * Primary reference:\n * https://graphics.stanford.edu/papers/envmap/envmap.pdf\n *\n * Secondary reference:\n * https://www.ppsloan.org/publications/StupidSH36.pdf\n */\n\n// 3-band SH defined by 9 coefficients\n\nclass SphericalHarmonics3 {\n\n\tconstructor() {\n\n\t\tthis.coefficients = [];\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients.push( new Vector3() );\n\n\t\t}\n\n\t}\n\n\tset( coefficients ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].copy( coefficients[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tzero() {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].set( 0, 0, 0 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// get the radiance in the direction of the normal\n\t// target is a Vector3\n\tgetAt( normal, target ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\tconst coeff = this.coefficients;\n\n\t\t// band 0\n\t\ttarget.copy( coeff[ 0 ] ).multiplyScalar( 0.282095 );\n\n\t\t// band 1\n\t\ttarget.addScaledVector( coeff[ 1 ], 0.488603 * y );\n\t\ttarget.addScaledVector( coeff[ 2 ], 0.488603 * z );\n\t\ttarget.addScaledVector( coeff[ 3 ], 0.488603 * x );\n\n\t\t// band 2\n\t\ttarget.addScaledVector( coeff[ 4 ], 1.092548 * ( x * y ) );\n\t\ttarget.addScaledVector( coeff[ 5 ], 1.092548 * ( y * z ) );\n\t\ttarget.addScaledVector( coeff[ 6 ], 0.315392 * ( 3.0 * z * z - 1.0 ) );\n\t\ttarget.addScaledVector( coeff[ 7 ], 1.092548 * ( x * z ) );\n\t\ttarget.addScaledVector( coeff[ 8 ], 0.546274 * ( x * x - y * y ) );\n\n\t\treturn target;\n\n\t}\n\n\t// get the irradiance (radiance convolved with cosine lobe) in the direction of the normal\n\t// target is a Vector3\n\t// https://graphics.stanford.edu/papers/envmap/envmap.pdf\n\tgetIrradianceAt( normal, target ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\tconst coeff = this.coefficients;\n\n\t\t// band 0\n\t\ttarget.copy( coeff[ 0 ] ).multiplyScalar( 0.886227 ); // π * 0.282095\n\n\t\t// band 1\n\t\ttarget.addScaledVector( coeff[ 1 ], 2.0 * 0.511664 * y ); // ( 2 * π / 3 ) * 0.488603\n\t\ttarget.addScaledVector( coeff[ 2 ], 2.0 * 0.511664 * z );\n\t\ttarget.addScaledVector( coeff[ 3 ], 2.0 * 0.511664 * x );\n\n\t\t// band 2\n\t\ttarget.addScaledVector( coeff[ 4 ], 2.0 * 0.429043 * x * y ); // ( π / 4 ) * 1.092548\n\t\ttarget.addScaledVector( coeff[ 5 ], 2.0 * 0.429043 * y * z );\n\t\ttarget.addScaledVector( coeff[ 6 ], 0.743125 * z * z - 0.247708 ); // ( π / 4 ) * 0.315392 * 3\n\t\ttarget.addScaledVector( coeff[ 7 ], 2.0 * 0.429043 * x * z );\n\t\ttarget.addScaledVector( coeff[ 8 ], 0.429043 * ( x * x - y * y ) ); // ( π / 4 ) * 0.546274\n\n\t\treturn target;\n\n\t}\n\n\tadd( sh ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].add( sh.coefficients[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\taddScaledSH( sh, s ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].addScaledVector( sh.coefficients[ i ], s );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tscale( s ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].multiplyScalar( s );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tlerp( sh, alpha ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].lerp( sh.coefficients[ i ], alpha );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tequals( sh ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tif ( ! this.coefficients[ i ].equals( sh.coefficients[ i ] ) ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tcopy( sh ) {\n\n\t\treturn this.set( sh.coefficients );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tconst coefficients = this.coefficients;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tcoefficients[ i ].fromArray( array, offset + ( i * 3 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst coefficients = this.coefficients;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tcoefficients[ i ].toArray( array, offset + ( i * 3 ) );\n\n\t\t}\n\n\t\treturn array;\n\n\t}\n\n\t// evaluate the basis functions\n\t// shBasis is an Array[ 9 ]\n\tstatic getBasisAt( normal, shBasis ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\t// band 0\n\t\tshBasis[ 0 ] = 0.282095;\n\n\t\t// band 1\n\t\tshBasis[ 1 ] = 0.488603 * y;\n\t\tshBasis[ 2 ] = 0.488603 * z;\n\t\tshBasis[ 3 ] = 0.488603 * x;\n\n\t\t// band 2\n\t\tshBasis[ 4 ] = 1.092548 * x * y;\n\t\tshBasis[ 5 ] = 1.092548 * y * z;\n\t\tshBasis[ 6 ] = 0.315392 * ( 3 * z * z - 1 );\n\t\tshBasis[ 7 ] = 1.092548 * x * z;\n\t\tshBasis[ 8 ] = 0.546274 * ( x * x - y * y );\n\n\t}\n\n}\n\nSphericalHarmonics3.prototype.isSphericalHarmonics3 = true;\n\nclass LightProbe extends Light {\n\n\tconstructor( sh = new SphericalHarmonics3(), intensity = 1 ) {\n\n\t\tsuper( undefined, intensity );\n\n\t\tthis.sh = sh;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.sh.copy( source.sh );\n\n\t\treturn this;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tthis.intensity = json.intensity; // TODO: Move this bit to Light.fromJSON();\n\t\tthis.sh.fromArray( json.sh );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.sh = this.sh.toArray();\n\n\t\treturn data;\n\n\t}\n\n}\n\nLightProbe.prototype.isLightProbe = true;\n\nclass MaterialLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\t\tthis.textures = {};\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( json ) {\n\n\t\tconst textures = this.textures;\n\n\t\tfunction getTexture( name ) {\n\n\t\t\tif ( textures[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.MaterialLoader: Undefined texture', name );\n\n\t\t\t}\n\n\t\t\treturn textures[ name ];\n\n\t\t}\n\n\t\tconst material = new Materials[ json.type ]();\n\n\t\tif ( json.uuid !== undefined ) material.uuid = json.uuid;\n\t\tif ( json.name !== undefined ) material.name = json.name;\n\t\tif ( json.color !== undefined && material.color !== undefined ) material.color.setHex( json.color );\n\t\tif ( json.roughness !== undefined ) material.roughness = json.roughness;\n\t\tif ( json.metalness !== undefined ) material.metalness = json.metalness;\n\t\tif ( json.sheen !== undefined ) material.sheen = json.sheen;\n\t\tif ( json.sheenTint !== undefined ) material.sheenTint = new Color().setHex( json.sheenTint );\n\t\tif ( json.sheenRoughness !== undefined ) material.sheenRoughness = json.sheenRoughness;\n\t\tif ( json.emissive !== undefined && material.emissive !== undefined ) material.emissive.setHex( json.emissive );\n\t\tif ( json.specular !== undefined && material.specular !== undefined ) material.specular.setHex( json.specular );\n\t\tif ( json.specularIntensity !== undefined ) material.specularIntensity = json.specularIntensity;\n\t\tif ( json.specularTint !== undefined && material.specularTint !== undefined ) material.specularTint.setHex( json.specularTint );\n\t\tif ( json.shininess !== undefined ) material.shininess = json.shininess;\n\t\tif ( json.clearcoat !== undefined ) material.clearcoat = json.clearcoat;\n\t\tif ( json.clearcoatRoughness !== undefined ) material.clearcoatRoughness = json.clearcoatRoughness;\n\t\tif ( json.transmission !== undefined ) material.transmission = json.transmission;\n\t\tif ( json.thickness !== undefined ) material.thickness = json.thickness;\n\t\tif ( json.attenuationDistance !== undefined ) material.attenuationDistance = json.attenuationDistance;\n\t\tif ( json.attenuationTint !== undefined && material.attenuationTint !== undefined ) material.attenuationTint.setHex( json.attenuationTint );\n\t\tif ( json.fog !== undefined ) material.fog = json.fog;\n\t\tif ( json.flatShading !== undefined ) material.flatShading = json.flatShading;\n\t\tif ( json.blending !== undefined ) material.blending = json.blending;\n\t\tif ( json.combine !== undefined ) material.combine = json.combine;\n\t\tif ( json.side !== undefined ) material.side = json.side;\n\t\tif ( json.shadowSide !== undefined ) material.shadowSide = json.shadowSide;\n\t\tif ( json.opacity !== undefined ) material.opacity = json.opacity;\n\t\tif ( json.format !== undefined ) material.format = json.format;\n\t\tif ( json.transparent !== undefined ) material.transparent = json.transparent;\n\t\tif ( json.alphaTest !== undefined ) material.alphaTest = json.alphaTest;\n\t\tif ( json.depthTest !== undefined ) material.depthTest = json.depthTest;\n\t\tif ( json.depthWrite !== undefined ) material.depthWrite = json.depthWrite;\n\t\tif ( json.colorWrite !== undefined ) material.colorWrite = json.colorWrite;\n\n\t\tif ( json.stencilWrite !== undefined ) material.stencilWrite = json.stencilWrite;\n\t\tif ( json.stencilWriteMask !== undefined ) material.stencilWriteMask = json.stencilWriteMask;\n\t\tif ( json.stencilFunc !== undefined ) material.stencilFunc = json.stencilFunc;\n\t\tif ( json.stencilRef !== undefined ) material.stencilRef = json.stencilRef;\n\t\tif ( json.stencilFuncMask !== undefined ) material.stencilFuncMask = json.stencilFuncMask;\n\t\tif ( json.stencilFail !== undefined ) material.stencilFail = json.stencilFail;\n\t\tif ( json.stencilZFail !== undefined ) material.stencilZFail = json.stencilZFail;\n\t\tif ( json.stencilZPass !== undefined ) material.stencilZPass = json.stencilZPass;\n\n\t\tif ( json.wireframe !== undefined ) material.wireframe = json.wireframe;\n\t\tif ( json.wireframeLinewidth !== undefined ) material.wireframeLinewidth = json.wireframeLinewidth;\n\t\tif ( json.wireframeLinecap !== undefined ) material.wireframeLinecap = json.wireframeLinecap;\n\t\tif ( json.wireframeLinejoin !== undefined ) material.wireframeLinejoin = json.wireframeLinejoin;\n\n\t\tif ( json.rotation !== undefined ) material.rotation = json.rotation;\n\n\t\tif ( json.linewidth !== 1 ) material.linewidth = json.linewidth;\n\t\tif ( json.dashSize !== undefined ) material.dashSize = json.dashSize;\n\t\tif ( json.gapSize !== undefined ) material.gapSize = json.gapSize;\n\t\tif ( json.scale !== undefined ) material.scale = json.scale;\n\n\t\tif ( json.polygonOffset !== undefined ) material.polygonOffset = json.polygonOffset;\n\t\tif ( json.polygonOffsetFactor !== undefined ) material.polygonOffsetFactor = json.polygonOffsetFactor;\n\t\tif ( json.polygonOffsetUnits !== undefined ) material.polygonOffsetUnits = json.polygonOffsetUnits;\n\n\t\tif ( json.dithering !== undefined ) material.dithering = json.dithering;\n\n\t\tif ( json.alphaToCoverage !== undefined ) material.alphaToCoverage = json.alphaToCoverage;\n\t\tif ( json.premultipliedAlpha !== undefined ) material.premultipliedAlpha = json.premultipliedAlpha;\n\n\t\tif ( json.visible !== undefined ) material.visible = json.visible;\n\n\t\tif ( json.toneMapped !== undefined ) material.toneMapped = json.toneMapped;\n\n\t\tif ( json.userData !== undefined ) material.userData = json.userData;\n\n\t\tif ( json.vertexColors !== undefined ) {\n\n\t\t\tif ( typeof json.vertexColors === 'number' ) {\n\n\t\t\t\tmaterial.vertexColors = ( json.vertexColors > 0 ) ? true : false;\n\n\t\t\t} else {\n\n\t\t\t\tmaterial.vertexColors = json.vertexColors;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Shader Material\n\n\t\tif ( json.uniforms !== undefined ) {\n\n\t\t\tfor ( const name in json.uniforms ) {\n\n\t\t\t\tconst uniform = json.uniforms[ name ];\n\n\t\t\t\tmaterial.uniforms[ name ] = {};\n\n\t\t\t\tswitch ( uniform.type ) {\n\n\t\t\t\t\tcase 't':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = getTexture( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'c':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Color().setHex( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v2':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector2().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v3':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector3().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v4':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector4().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'm3':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Matrix3().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'm4':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Matrix4().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = uniform.value;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json.defines !== undefined ) material.defines = json.defines;\n\t\tif ( json.vertexShader !== undefined ) material.vertexShader = json.vertexShader;\n\t\tif ( json.fragmentShader !== undefined ) material.fragmentShader = json.fragmentShader;\n\n\t\tif ( json.extensions !== undefined ) {\n\n\t\t\tfor ( const key in json.extensions ) {\n\n\t\t\t\tmaterial.extensions[ key ] = json.extensions[ key ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Deprecated\n\n\t\tif ( json.shading !== undefined ) material.flatShading = json.shading === 1; // THREE.FlatShading\n\n\t\t// for PointsMaterial\n\n\t\tif ( json.size !== undefined ) material.size = json.size;\n\t\tif ( json.sizeAttenuation !== undefined ) material.sizeAttenuation = json.sizeAttenuation;\n\n\t\t// maps\n\n\t\tif ( json.map !== undefined ) material.map = getTexture( json.map );\n\t\tif ( json.matcap !== undefined ) material.matcap = getTexture( json.matcap );\n\n\t\tif ( json.alphaMap !== undefined ) material.alphaMap = getTexture( json.alphaMap );\n\n\t\tif ( json.bumpMap !== undefined ) material.bumpMap = getTexture( json.bumpMap );\n\t\tif ( json.bumpScale !== undefined ) material.bumpScale = json.bumpScale;\n\n\t\tif ( json.normalMap !== undefined ) material.normalMap = getTexture( json.normalMap );\n\t\tif ( json.normalMapType !== undefined ) material.normalMapType = json.normalMapType;\n\t\tif ( json.normalScale !== undefined ) {\n\n\t\t\tlet normalScale = json.normalScale;\n\n\t\t\tif ( Array.isArray( normalScale ) === false ) {\n\n\t\t\t\t// Blender exporter used to export a scalar. See #7459\n\n\t\t\t\tnormalScale = [ normalScale, normalScale ];\n\n\t\t\t}\n\n\t\t\tmaterial.normalScale = new Vector2().fromArray( normalScale );\n\n\t\t}\n\n\t\tif ( json.displacementMap !== undefined ) material.displacementMap = getTexture( json.displacementMap );\n\t\tif ( json.displacementScale !== undefined ) material.displacementScale = json.displacementScale;\n\t\tif ( json.displacementBias !== undefined ) material.displacementBias = json.displacementBias;\n\n\t\tif ( json.roughnessMap !== undefined ) material.roughnessMap = getTexture( json.roughnessMap );\n\t\tif ( json.metalnessMap !== undefined ) material.metalnessMap = getTexture( json.metalnessMap );\n\n\t\tif ( json.emissiveMap !== undefined ) material.emissiveMap = getTexture( json.emissiveMap );\n\t\tif ( json.emissiveIntensity !== undefined ) material.emissiveIntensity = json.emissiveIntensity;\n\n\t\tif ( json.specularMap !== undefined ) material.specularMap = getTexture( json.specularMap );\n\t\tif ( json.specularIntensityMap !== undefined ) material.specularIntensityMap = getTexture( json.specularIntensityMap );\n\t\tif ( json.specularTintMap !== undefined ) material.specularTintMap = getTexture( json.specularTintMap );\n\n\t\tif ( json.envMap !== undefined ) material.envMap = getTexture( json.envMap );\n\t\tif ( json.envMapIntensity !== undefined ) material.envMapIntensity = json.envMapIntensity;\n\n\t\tif ( json.reflectivity !== undefined ) material.reflectivity = json.reflectivity;\n\t\tif ( json.refractionRatio !== undefined ) material.refractionRatio = json.refractionRatio;\n\n\t\tif ( json.lightMap !== undefined ) material.lightMap = getTexture( json.lightMap );\n\t\tif ( json.lightMapIntensity !== undefined ) material.lightMapIntensity = json.lightMapIntensity;\n\n\t\tif ( json.aoMap !== undefined ) material.aoMap = getTexture( json.aoMap );\n\t\tif ( json.aoMapIntensity !== undefined ) material.aoMapIntensity = json.aoMapIntensity;\n\n\t\tif ( json.gradientMap !== undefined ) material.gradientMap = getTexture( json.gradientMap );\n\n\t\tif ( json.clearcoatMap !== undefined ) material.clearcoatMap = getTexture( json.clearcoatMap );\n\t\tif ( json.clearcoatRoughnessMap !== undefined ) material.clearcoatRoughnessMap = getTexture( json.clearcoatRoughnessMap );\n\t\tif ( json.clearcoatNormalMap !== undefined ) material.clearcoatNormalMap = getTexture( json.clearcoatNormalMap );\n\t\tif ( json.clearcoatNormalScale !== undefined ) material.clearcoatNormalScale = new Vector2().fromArray( json.clearcoatNormalScale );\n\n\t\tif ( json.transmissionMap !== undefined ) material.transmissionMap = getTexture( json.transmissionMap );\n\t\tif ( json.thicknessMap !== undefined ) material.thicknessMap = getTexture( json.thicknessMap );\n\n\t\treturn material;\n\n\t}\n\n\tsetTextures( value ) {\n\n\t\tthis.textures = value;\n\t\treturn this;\n\n\t}\n\n}\n\nclass LoaderUtils {\n\n\tstatic decodeText( array ) {\n\n\t\tif ( typeof TextDecoder !== 'undefined' ) {\n\n\t\t\treturn new TextDecoder().decode( array );\n\n\t\t}\n\n\t\t// Avoid the String.fromCharCode.apply(null, array) shortcut, which\n\t\t// throws a \"maximum call stack size exceeded\" error for large arrays.\n\n\t\tlet s = '';\n\n\t\tfor ( let i = 0, il = array.length; i < il; i ++ ) {\n\n\t\t\t// Implicitly assumes little-endian.\n\t\t\ts += String.fromCharCode( array[ i ] );\n\n\t\t}\n\n\t\ttry {\n\n\t\t\t// merges multi-byte utf-8 characters.\n\n\t\t\treturn decodeURIComponent( escape( s ) );\n\n\t\t} catch ( e ) { // see #16358\n\n\t\t\treturn s;\n\n\t\t}\n\n\t}\n\n\tstatic extractUrlBase( url ) {\n\n\t\tconst index = url.lastIndexOf( '/' );\n\n\t\tif ( index === - 1 ) return './';\n\n\t\treturn url.substr( 0, index + 1 );\n\n\t}\n\n}\n\nclass InstancedBufferGeometry extends BufferGeometry {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'InstancedBufferGeometry';\n\t\tthis.instanceCount = Infinity;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.instanceCount = source.instanceCount;\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON( this );\n\n\t\tdata.instanceCount = this.instanceCount;\n\n\t\tdata.isInstancedBufferGeometry = true;\n\n\t\treturn data;\n\n\t}\n\n}\n\nInstancedBufferGeometry.prototype.isInstancedBufferGeometry = true;\n\nclass BufferGeometryLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( json ) {\n\n\t\tconst interleavedBufferMap = {};\n\t\tconst arrayBufferMap = {};\n\n\t\tfunction getInterleavedBuffer( json, uuid ) {\n\n\t\t\tif ( interleavedBufferMap[ uuid ] !== undefined ) return interleavedBufferMap[ uuid ];\n\n\t\t\tconst interleavedBuffers = json.interleavedBuffers;\n\t\t\tconst interleavedBuffer = interleavedBuffers[ uuid ];\n\n\t\t\tconst buffer = getArrayBuffer( json, interleavedBuffer.buffer );\n\n\t\t\tconst array = getTypedArray( interleavedBuffer.type, buffer );\n\t\t\tconst ib = new InterleavedBuffer( array, interleavedBuffer.stride );\n\t\t\tib.uuid = interleavedBuffer.uuid;\n\n\t\t\tinterleavedBufferMap[ uuid ] = ib;\n\n\t\t\treturn ib;\n\n\t\t}\n\n\t\tfunction getArrayBuffer( json, uuid ) {\n\n\t\t\tif ( arrayBufferMap[ uuid ] !== undefined ) return arrayBufferMap[ uuid ];\n\n\t\t\tconst arrayBuffers = json.arrayBuffers;\n\t\t\tconst arrayBuffer = arrayBuffers[ uuid ];\n\n\t\t\tconst ab = new Uint32Array( arrayBuffer ).buffer;\n\n\t\t\tarrayBufferMap[ uuid ] = ab;\n\n\t\t\treturn ab;\n\n\t\t}\n\n\t\tconst geometry = json.isInstancedBufferGeometry ? new InstancedBufferGeometry() : new BufferGeometry();\n\n\t\tconst index = json.data.index;\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tconst typedArray = getTypedArray( index.type, index.array );\n\t\t\tgeometry.setIndex( new BufferAttribute( typedArray, 1 ) );\n\n\t\t}\n\n\t\tconst attributes = json.data.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\t\t\tlet bufferAttribute;\n\n\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\tconst interleavedBuffer = getInterleavedBuffer( json.data, attribute.data );\n\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized );\n\n\t\t\t} else {\n\n\t\t\t\tconst typedArray = getTypedArray( attribute.type, attribute.array );\n\t\t\t\tconst bufferAttributeConstr = attribute.isInstancedBufferAttribute ? InstancedBufferAttribute : BufferAttribute;\n\t\t\t\tbufferAttribute = new bufferAttributeConstr( typedArray, attribute.itemSize, attribute.normalized );\n\n\t\t\t}\n\n\t\t\tif ( attribute.name !== undefined ) bufferAttribute.name = attribute.name;\n\t\t\tif ( attribute.usage !== undefined ) bufferAttribute.setUsage( attribute.usage );\n\n\t\t\tif ( attribute.updateRange !== undefined ) {\n\n\t\t\t\tbufferAttribute.updateRange.offset = attribute.updateRange.offset;\n\t\t\t\tbufferAttribute.updateRange.count = attribute.updateRange.count;\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( key, bufferAttribute );\n\n\t\t}\n\n\t\tconst morphAttributes = json.data.morphAttributes;\n\n\t\tif ( morphAttributes ) {\n\n\t\t\tfor ( const key in morphAttributes ) {\n\n\t\t\t\tconst attributeArray = morphAttributes[ key ];\n\n\t\t\t\tconst array = [];\n\n\t\t\t\tfor ( let i = 0, il = attributeArray.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst attribute = attributeArray[ i ];\n\t\t\t\t\tlet bufferAttribute;\n\n\t\t\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\tconst interleavedBuffer = getInterleavedBuffer( json.data, attribute.data );\n\t\t\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst typedArray = getTypedArray( attribute.type, attribute.array );\n\t\t\t\t\t\tbufferAttribute = new BufferAttribute( typedArray, attribute.itemSize, attribute.normalized );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attribute.name !== undefined ) bufferAttribute.name = attribute.name;\n\t\t\t\t\tarray.push( bufferAttribute );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.morphAttributes[ key ] = array;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst morphTargetsRelative = json.data.morphTargetsRelative;\n\n\t\tif ( morphTargetsRelative ) {\n\n\t\t\tgeometry.morphTargetsRelative = true;\n\n\t\t}\n\n\t\tconst groups = json.data.groups || json.data.drawcalls || json.data.offsets;\n\n\t\tif ( groups !== undefined ) {\n\n\t\t\tfor ( let i = 0, n = groups.length; i !== n; ++ i ) {\n\n\t\t\t\tconst group = groups[ i ];\n\n\t\t\t\tgeometry.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst boundingSphere = json.data.boundingSphere;\n\n\t\tif ( boundingSphere !== undefined ) {\n\n\t\t\tconst center = new Vector3();\n\n\t\t\tif ( boundingSphere.center !== undefined ) {\n\n\t\t\t\tcenter.fromArray( boundingSphere.center );\n\n\t\t\t}\n\n\t\t\tgeometry.boundingSphere = new Sphere( center, boundingSphere.radius );\n\n\t\t}\n\n\t\tif ( json.name ) geometry.name = json.name;\n\t\tif ( json.userData ) geometry.userData = json.userData;\n\n\t\treturn geometry;\n\n\t}\n\n}\n\nclass ObjectLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path;\n\t\tthis.resourcePath = this.resourcePath || path;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tlet json = null;\n\n\t\t\ttry {\n\n\t\t\t\tjson = JSON.parse( text );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\tif ( onError !== undefined ) onError( error );\n\n\t\t\t\tconsole.error( 'THREE:ObjectLoader: Can\\'t parse ' + url + '.', error.message );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst metadata = json.metadata;\n\n\t\t\tif ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) {\n\n\t\t\t\tconsole.error( 'THREE.ObjectLoader: Can\\'t load ' + url );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tscope.parse( json, onLoad );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tasync loadAsync( url, onProgress ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path;\n\t\tthis.resourcePath = this.resourcePath || path;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tconst text = await loader.loadAsync( url, onProgress );\n\n\t\tconst json = JSON.parse( text );\n\n\t\tconst metadata = json.metadata;\n\n\t\tif ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) {\n\n\t\t\tthrow new Error( 'THREE.ObjectLoader: Can\\'t load ' + url );\n\n\t\t}\n\n\t\treturn await scope.parseAsync( json );\n\n\t}\n\n\tparse( json, onLoad ) {\n\n\t\tconst animations = this.parseAnimations( json.animations );\n\t\tconst shapes = this.parseShapes( json.shapes );\n\t\tconst geometries = this.parseGeometries( json.geometries, shapes );\n\n\t\tconst images = this.parseImages( json.images, function () {\n\n\t\t\tif ( onLoad !== undefined ) onLoad( object );\n\n\t\t} );\n\n\t\tconst textures = this.parseTextures( json.textures, images );\n\t\tconst materials = this.parseMaterials( json.materials, textures );\n\n\t\tconst object = this.parseObject( json.object, geometries, materials, textures, animations );\n\t\tconst skeletons = this.parseSkeletons( json.skeletons, object );\n\n\t\tthis.bindSkeletons( object, skeletons );\n\n\t\t//\n\n\t\tif ( onLoad !== undefined ) {\n\n\t\t\tlet hasImages = false;\n\n\t\t\tfor ( const uuid in images ) {\n\n\t\t\t\tif ( images[ uuid ] instanceof HTMLImageElement ) {\n\n\t\t\t\t\thasImages = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hasImages === false ) onLoad( object );\n\n\t\t}\n\n\t\treturn object;\n\n\t}\n\n\tasync parseAsync( json ) {\n\n\t\tconst animations = this.parseAnimations( json.animations );\n\t\tconst shapes = this.parseShapes( json.shapes );\n\t\tconst geometries = this.parseGeometries( json.geometries, shapes );\n\n\t\tconst images = await this.parseImagesAsync( json.images );\n\n\t\tconst textures = this.parseTextures( json.textures, images );\n\t\tconst materials = this.parseMaterials( json.materials, textures );\n\n\t\tconst object = this.parseObject( json.object, geometries, materials, textures, animations );\n\t\tconst skeletons = this.parseSkeletons( json.skeletons, object );\n\n\t\tthis.bindSkeletons( object, skeletons );\n\n\t\treturn object;\n\n\t}\n\n\tparseShapes( json ) {\n\n\t\tconst shapes = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst shape = new Shape().fromJSON( json[ i ] );\n\n\t\t\t\tshapes[ shape.uuid ] = shape;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn shapes;\n\n\t}\n\n\tparseSkeletons( json, object ) {\n\n\t\tconst skeletons = {};\n\t\tconst bones = {};\n\n\t\t// generate bone lookup table\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isBone ) bones[ child.uuid ] = child;\n\n\t\t} );\n\n\t\t// create skeletons\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst skeleton = new Skeleton().fromJSON( json[ i ], bones );\n\n\t\t\t\tskeletons[ skeleton.uuid ] = skeleton;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn skeletons;\n\n\t}\n\n\tparseGeometries( json, shapes ) {\n\n\t\tconst geometries = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tconst bufferGeometryLoader = new BufferGeometryLoader();\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tlet geometry;\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tswitch ( data.type ) {\n\n\t\t\t\t\tcase 'BufferGeometry':\n\t\t\t\t\tcase 'InstancedBufferGeometry':\n\n\t\t\t\t\t\tgeometry = bufferGeometryLoader.parse( data );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Geometry':\n\n\t\t\t\t\t\tconsole.error( 'THREE.ObjectLoader: The legacy Geometry type is no longer supported.' );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif ( data.type in Geometries ) {\n\n\t\t\t\t\t\t\tgeometry = Geometries[ data.type ].fromJSON( data, shapes );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tconsole.warn( `THREE.ObjectLoader: Unsupported geometry type \"${ data.type }\"` );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) geometry.name = data.name;\n\t\t\t\tif ( geometry.isBufferGeometry === true && data.userData !== undefined ) geometry.userData = data.userData;\n\n\t\t\t\tgeometries[ data.uuid ] = geometry;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn geometries;\n\n\t}\n\n\tparseMaterials( json, textures ) {\n\n\t\tconst cache = {}; // MultiMaterial\n\t\tconst materials = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tconst loader = new MaterialLoader();\n\t\t\tloader.setTextures( textures );\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tif ( data.type === 'MultiMaterial' ) {\n\n\t\t\t\t\t// Deprecated\n\n\t\t\t\t\tconst array = [];\n\n\t\t\t\t\tfor ( let j = 0; j < data.materials.length; j ++ ) {\n\n\t\t\t\t\t\tconst material = data.materials[ j ];\n\n\t\t\t\t\t\tif ( cache[ material.uuid ] === undefined ) {\n\n\t\t\t\t\t\t\tcache[ material.uuid ] = loader.parse( material );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tarray.push( cache[ material.uuid ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmaterials[ data.uuid ] = array;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( cache[ data.uuid ] === undefined ) {\n\n\t\t\t\t\t\tcache[ data.uuid ] = loader.parse( data );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmaterials[ data.uuid ] = cache[ data.uuid ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn materials;\n\n\t}\n\n\tparseAnimations( json ) {\n\n\t\tconst animations = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0; i < json.length; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tconst clip = AnimationClip.parse( data );\n\n\t\t\t\tanimations[ clip.uuid ] = clip;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn animations;\n\n\t}\n\n\tparseImages( json, onLoad ) {\n\n\t\tconst scope = this;\n\t\tconst images = {};\n\n\t\tlet loader;\n\n\t\tfunction loadImage( url ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\treturn loader.load( url, function () {\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, undefined, function () {\n\n\t\t\t\tscope.manager.itemError( url );\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t} );\n\n\t\t}\n\n\t\tfunction deserializeImage( image ) {\n\n\t\t\tif ( typeof image === 'string' ) {\n\n\t\t\t\tconst url = image;\n\n\t\t\t\tconst path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( url ) ? url : scope.resourcePath + url;\n\n\t\t\t\treturn loadImage( path );\n\n\t\t\t} else {\n\n\t\t\t\tif ( image.data ) {\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: getTypedArray( image.type, image.data ),\n\t\t\t\t\t\twidth: image.width,\n\t\t\t\t\t\theight: image.height\n\t\t\t\t\t};\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json !== undefined && json.length > 0 ) {\n\n\t\t\tconst manager = new LoadingManager( onLoad );\n\n\t\t\tloader = new ImageLoader( manager );\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\t\tfor ( let i = 0, il = json.length; i < il; i ++ ) {\n\n\t\t\t\tconst image = json[ i ];\n\t\t\t\tconst url = image.url;\n\n\t\t\t\tif ( Array.isArray( url ) ) {\n\n\t\t\t\t\t// load array of images e.g CubeTexture\n\n\t\t\t\t\timages[ image.uuid ] = [];\n\n\t\t\t\t\tfor ( let j = 0, jl = url.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tconst currentUrl = url[ j ];\n\n\t\t\t\t\t\tconst deserializedImage = deserializeImage( currentUrl );\n\n\t\t\t\t\t\tif ( deserializedImage !== null ) {\n\n\t\t\t\t\t\t\tif ( deserializedImage instanceof HTMLImageElement ) {\n\n\t\t\t\t\t\t\t\timages[ image.uuid ].push( deserializedImage );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// special case: handle array of data textures for cube textures\n\n\t\t\t\t\t\t\t\timages[ image.uuid ].push( new DataTexture( deserializedImage.data, deserializedImage.width, deserializedImage.height ) );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// load single image\n\n\t\t\t\t\tconst deserializedImage = deserializeImage( image.url );\n\n\t\t\t\t\tif ( deserializedImage !== null ) {\n\n\t\t\t\t\t\timages[ image.uuid ] = deserializedImage;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn images;\n\n\t}\n\n\tasync parseImagesAsync( json ) {\n\n\t\tconst scope = this;\n\t\tconst images = {};\n\n\t\tlet loader;\n\n\t\tasync function deserializeImage( image ) {\n\n\t\t\tif ( typeof image === 'string' ) {\n\n\t\t\t\tconst url = image;\n\n\t\t\t\tconst path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( url ) ? url : scope.resourcePath + url;\n\n\t\t\t\treturn await loader.loadAsync( path );\n\n\t\t\t} else {\n\n\t\t\t\tif ( image.data ) {\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: getTypedArray( image.type, image.data ),\n\t\t\t\t\t\twidth: image.width,\n\t\t\t\t\t\theight: image.height\n\t\t\t\t\t};\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json !== undefined && json.length > 0 ) {\n\n\t\t\tloader = new ImageLoader( this.manager );\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\t\tfor ( let i = 0, il = json.length; i < il; i ++ ) {\n\n\t\t\t\tconst image = json[ i ];\n\t\t\t\tconst url = image.url;\n\n\t\t\t\tif ( Array.isArray( url ) ) {\n\n\t\t\t\t\t// load array of images e.g CubeTexture\n\n\t\t\t\t\timages[ image.uuid ] = [];\n\n\t\t\t\t\tfor ( let j = 0, jl = url.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tconst currentUrl = url[ j ];\n\n\t\t\t\t\t\tconst deserializedImage = await deserializeImage( currentUrl );\n\n\t\t\t\t\t\tif ( deserializedImage !== null ) {\n\n\t\t\t\t\t\t\tif ( deserializedImage instanceof HTMLImageElement ) {\n\n\t\t\t\t\t\t\t\timages[ image.uuid ].push( deserializedImage );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// special case: handle array of data textures for cube textures\n\n\t\t\t\t\t\t\t\timages[ image.uuid ].push( new DataTexture( deserializedImage.data, deserializedImage.width, deserializedImage.height ) );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// load single image\n\n\t\t\t\t\tconst deserializedImage = await deserializeImage( image.url );\n\n\t\t\t\t\tif ( deserializedImage !== null ) {\n\n\t\t\t\t\t\timages[ image.uuid ] = deserializedImage;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn images;\n\n\t}\n\n\tparseTextures( json, images ) {\n\n\t\tfunction parseConstant( value, type ) {\n\n\t\t\tif ( typeof value === 'number' ) return value;\n\n\t\t\tconsole.warn( 'THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value );\n\n\t\t\treturn type[ value ];\n\n\t\t}\n\n\t\tconst textures = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tif ( data.image === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No \"image\" specified for', data.uuid );\n\n\t\t\t\t}\n\n\t\t\t\tif ( images[ data.image ] === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined image', data.image );\n\n\t\t\t\t}\n\n\t\t\t\tlet texture;\n\t\t\t\tconst image = images[ data.image ];\n\n\t\t\t\tif ( Array.isArray( image ) ) {\n\n\t\t\t\t\ttexture = new CubeTexture( image );\n\n\t\t\t\t\tif ( image.length === 6 ) texture.needsUpdate = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( image && image.data ) {\n\n\t\t\t\t\t\ttexture = new DataTexture( image.data, image.width, image.height );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttexture = new Texture( image );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( image ) texture.needsUpdate = true; // textures can have undefined image data\n\n\t\t\t\t}\n\n\t\t\t\ttexture.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) texture.name = data.name;\n\n\t\t\t\tif ( data.mapping !== undefined ) texture.mapping = parseConstant( data.mapping, TEXTURE_MAPPING );\n\n\t\t\t\tif ( data.offset !== undefined ) texture.offset.fromArray( data.offset );\n\t\t\t\tif ( data.repeat !== undefined ) texture.repeat.fromArray( data.repeat );\n\t\t\t\tif ( data.center !== undefined ) texture.center.fromArray( data.center );\n\t\t\t\tif ( data.rotation !== undefined ) texture.rotation = data.rotation;\n\n\t\t\t\tif ( data.wrap !== undefined ) {\n\n\t\t\t\t\ttexture.wrapS = parseConstant( data.wrap[ 0 ], TEXTURE_WRAPPING );\n\t\t\t\t\ttexture.wrapT = parseConstant( data.wrap[ 1 ], TEXTURE_WRAPPING );\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.format !== undefined ) texture.format = data.format;\n\t\t\t\tif ( data.type !== undefined ) texture.type = data.type;\n\t\t\t\tif ( data.encoding !== undefined ) texture.encoding = data.encoding;\n\n\t\t\t\tif ( data.minFilter !== undefined ) texture.minFilter = parseConstant( data.minFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.magFilter !== undefined ) texture.magFilter = parseConstant( data.magFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.anisotropy !== undefined ) texture.anisotropy = data.anisotropy;\n\n\t\t\t\tif ( data.flipY !== undefined ) texture.flipY = data.flipY;\n\n\t\t\t\tif ( data.premultiplyAlpha !== undefined ) texture.premultiplyAlpha = data.premultiplyAlpha;\n\t\t\t\tif ( data.unpackAlignment !== undefined ) texture.unpackAlignment = data.unpackAlignment;\n\n\t\t\t\ttextures[ data.uuid ] = texture;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn textures;\n\n\t}\n\n\tparseObject( data, geometries, materials, textures, animations ) {\n\n\t\tlet object;\n\n\t\tfunction getGeometry( name ) {\n\n\t\t\tif ( geometries[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined geometry', name );\n\n\t\t\t}\n\n\t\t\treturn geometries[ name ];\n\n\t\t}\n\n\t\tfunction getMaterial( name ) {\n\n\t\t\tif ( name === undefined ) return undefined;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\n\t\t\t\tconst array = [];\n\n\t\t\t\tfor ( let i = 0, l = name.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst uuid = name[ i ];\n\n\t\t\t\t\tif ( materials[ uuid ] === undefined ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', uuid );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tarray.push( materials[ uuid ] );\n\n\t\t\t\t}\n\n\t\t\t\treturn array;\n\n\t\t\t}\n\n\t\t\tif ( materials[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', name );\n\n\t\t\t}\n\n\t\t\treturn materials[ name ];\n\n\t\t}\n\n\t\tfunction getTexture( uuid ) {\n\n\t\t\tif ( textures[ uuid ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined texture', uuid );\n\n\t\t\t}\n\n\t\t\treturn textures[ uuid ];\n\n\t\t}\n\n\t\tlet geometry, material;\n\n\t\tswitch ( data.type ) {\n\n\t\t\tcase 'Scene':\n\n\t\t\t\tobject = new Scene();\n\n\t\t\t\tif ( data.background !== undefined ) {\n\n\t\t\t\t\tif ( Number.isInteger( data.background ) ) {\n\n\t\t\t\t\t\tobject.background = new Color( data.background );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tobject.background = getTexture( data.background );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.environment !== undefined ) {\n\n\t\t\t\t\tobject.environment = getTexture( data.environment );\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.fog !== undefined ) {\n\n\t\t\t\t\tif ( data.fog.type === 'Fog' ) {\n\n\t\t\t\t\t\tobject.fog = new Fog( data.fog.color, data.fog.near, data.fog.far );\n\n\t\t\t\t\t} else if ( data.fog.type === 'FogExp2' ) {\n\n\t\t\t\t\t\tobject.fog = new FogExp2( data.fog.color, data.fog.density );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PerspectiveCamera':\n\n\t\t\t\tobject = new PerspectiveCamera( data.fov, data.aspect, data.near, data.far );\n\n\t\t\t\tif ( data.focus !== undefined ) object.focus = data.focus;\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.filmGauge !== undefined ) object.filmGauge = data.filmGauge;\n\t\t\t\tif ( data.filmOffset !== undefined ) object.filmOffset = data.filmOffset;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'OrthographicCamera':\n\n\t\t\t\tobject = new OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far );\n\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'AmbientLight':\n\n\t\t\t\tobject = new AmbientLight( data.color, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'DirectionalLight':\n\n\t\t\t\tobject = new DirectionalLight( data.color, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointLight':\n\n\t\t\t\tobject = new PointLight( data.color, data.intensity, data.distance, data.decay );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'RectAreaLight':\n\n\t\t\t\tobject = new RectAreaLight( data.color, data.intensity, data.width, data.height );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SpotLight':\n\n\t\t\t\tobject = new SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'HemisphereLight':\n\n\t\t\t\tobject = new HemisphereLight( data.color, data.groundColor, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LightProbe':\n\n\t\t\t\tobject = new LightProbe().fromJSON( data );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SkinnedMesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t \tmaterial = getMaterial( data.material );\n\n\t\t\t\tobject = new SkinnedMesh( geometry, material );\n\n\t\t\t\tif ( data.bindMode !== undefined ) object.bindMode = data.bindMode;\n\t\t\t\tif ( data.bindMatrix !== undefined ) object.bindMatrix.fromArray( data.bindMatrix );\n\t\t\t\tif ( data.skeleton !== undefined ) object.skeleton = data.skeleton;\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Mesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\tmaterial = getMaterial( data.material );\n\n\t\t\t\tobject = new Mesh( geometry, material );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'InstancedMesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\tmaterial = getMaterial( data.material );\n\t\t\t\tconst count = data.count;\n\t\t\t\tconst instanceMatrix = data.instanceMatrix;\n\t\t\t\tconst instanceColor = data.instanceColor;\n\n\t\t\t\tobject = new InstancedMesh( geometry, material, count );\n\t\t\t\tobject.instanceMatrix = new InstancedBufferAttribute( new Float32Array( instanceMatrix.array ), 16 );\n\t\t\t\tif ( instanceColor !== undefined ) object.instanceColor = new InstancedBufferAttribute( new Float32Array( instanceColor.array ), instanceColor.itemSize );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LOD':\n\n\t\t\t\tobject = new LOD();\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Line':\n\n\t\t\t\tobject = new Line( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineLoop':\n\n\t\t\t\tobject = new LineLoop( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineSegments':\n\n\t\t\t\tobject = new LineSegments( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointCloud':\n\t\t\tcase 'Points':\n\n\t\t\t\tobject = new Points( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Sprite':\n\n\t\t\t\tobject = new Sprite( getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Group':\n\n\t\t\t\tobject = new Group();\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Bone':\n\n\t\t\t\tobject = new Bone();\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tobject = new Object3D();\n\n\t\t}\n\n\t\tobject.uuid = data.uuid;\n\n\t\tif ( data.name !== undefined ) object.name = data.name;\n\n\t\tif ( data.matrix !== undefined ) {\n\n\t\t\tobject.matrix.fromArray( data.matrix );\n\n\t\t\tif ( data.matrixAutoUpdate !== undefined ) object.matrixAutoUpdate = data.matrixAutoUpdate;\n\t\t\tif ( object.matrixAutoUpdate ) object.matrix.decompose( object.position, object.quaternion, object.scale );\n\n\t\t} else {\n\n\t\t\tif ( data.position !== undefined ) object.position.fromArray( data.position );\n\t\t\tif ( data.rotation !== undefined ) object.rotation.fromArray( data.rotation );\n\t\t\tif ( data.quaternion !== undefined ) object.quaternion.fromArray( data.quaternion );\n\t\t\tif ( data.scale !== undefined ) object.scale.fromArray( data.scale );\n\n\t\t}\n\n\t\tif ( data.castShadow !== undefined ) object.castShadow = data.castShadow;\n\t\tif ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow;\n\n\t\tif ( data.shadow ) {\n\n\t\t\tif ( data.shadow.bias !== undefined ) object.shadow.bias = data.shadow.bias;\n\t\t\tif ( data.shadow.normalBias !== undefined ) object.shadow.normalBias = data.shadow.normalBias;\n\t\t\tif ( data.shadow.radius !== undefined ) object.shadow.radius = data.shadow.radius;\n\t\t\tif ( data.shadow.mapSize !== undefined ) object.shadow.mapSize.fromArray( data.shadow.mapSize );\n\t\t\tif ( data.shadow.camera !== undefined ) object.shadow.camera = this.parseObject( data.shadow.camera );\n\n\t\t}\n\n\t\tif ( data.visible !== undefined ) object.visible = data.visible;\n\t\tif ( data.frustumCulled !== undefined ) object.frustumCulled = data.frustumCulled;\n\t\tif ( data.renderOrder !== undefined ) object.renderOrder = data.renderOrder;\n\t\tif ( data.userData !== undefined ) object.userData = data.userData;\n\t\tif ( data.layers !== undefined ) object.layers.mask = data.layers;\n\n\t\tif ( data.children !== undefined ) {\n\n\t\t\tconst children = data.children;\n\n\t\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\t\tobject.add( this.parseObject( children[ i ], geometries, materials, textures, animations ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( data.animations !== undefined ) {\n\n\t\t\tconst objectAnimations = data.animations;\n\n\t\t\tfor ( let i = 0; i < objectAnimations.length; i ++ ) {\n\n\t\t\t\tconst uuid = objectAnimations[ i ];\n\n\t\t\t\tobject.animations.push( animations[ uuid ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( data.type === 'LOD' ) {\n\n\t\t\tif ( data.autoUpdate !== undefined ) object.autoUpdate = data.autoUpdate;\n\n\t\t\tconst levels = data.levels;\n\n\t\t\tfor ( let l = 0; l < levels.length; l ++ ) {\n\n\t\t\t\tconst level = levels[ l ];\n\t\t\t\tconst child = object.getObjectByProperty( 'uuid', level.object );\n\n\t\t\t\tif ( child !== undefined ) {\n\n\t\t\t\t\tobject.addLevel( child, level.distance );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn object;\n\n\t}\n\n\tbindSkeletons( object, skeletons ) {\n\n\t\tif ( Object.keys( skeletons ).length === 0 ) return;\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isSkinnedMesh === true && child.skeleton !== undefined ) {\n\n\t\t\t\tconst skeleton = skeletons[ child.skeleton ];\n\n\t\t\t\tif ( skeleton === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No skeleton found with UUID:', child.skeleton );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tchild.bind( skeleton, child.bindMatrix );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\t/* DEPRECATED */\n\n\tsetTexturePath( value ) {\n\n\t\tconsole.warn( 'THREE.ObjectLoader: .setTexturePath() has been renamed to .setResourcePath().' );\n\t\treturn this.setResourcePath( value );\n\n\t}\n\n}\n\nconst TEXTURE_MAPPING = {\n\tUVMapping: UVMapping,\n\tCubeReflectionMapping: CubeReflectionMapping,\n\tCubeRefractionMapping: CubeRefractionMapping,\n\tEquirectangularReflectionMapping: EquirectangularReflectionMapping,\n\tEquirectangularRefractionMapping: EquirectangularRefractionMapping,\n\tCubeUVReflectionMapping: CubeUVReflectionMapping,\n\tCubeUVRefractionMapping: CubeUVRefractionMapping\n};\n\nconst TEXTURE_WRAPPING = {\n\tRepeatWrapping: RepeatWrapping,\n\tClampToEdgeWrapping: ClampToEdgeWrapping,\n\tMirroredRepeatWrapping: MirroredRepeatWrapping\n};\n\nconst TEXTURE_FILTER = {\n\tNearestFilter: NearestFilter,\n\tNearestMipmapNearestFilter: NearestMipmapNearestFilter,\n\tNearestMipmapLinearFilter: NearestMipmapLinearFilter,\n\tLinearFilter: LinearFilter,\n\tLinearMipmapNearestFilter: LinearMipmapNearestFilter,\n\tLinearMipmapLinearFilter: LinearMipmapLinearFilter\n};\n\nclass ImageBitmapLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tif ( typeof createImageBitmap === 'undefined' ) {\n\n\t\t\tconsole.warn( 'THREE.ImageBitmapLoader: createImageBitmap() not supported.' );\n\n\t\t}\n\n\t\tif ( typeof fetch === 'undefined' ) {\n\n\t\t\tconsole.warn( 'THREE.ImageBitmapLoader: fetch() not supported.' );\n\n\t\t}\n\n\t\tthis.options = { premultiplyAlpha: 'none' };\n\n\t}\n\n\tsetOptions( options ) {\n\n\t\tthis.options = options;\n\n\t\treturn this;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tconst fetchOptions = {};\n\t\tfetchOptions.credentials = ( this.crossOrigin === 'anonymous' ) ? 'same-origin' : 'include';\n\t\tfetchOptions.headers = this.requestHeader;\n\n\t\tfetch( url, fetchOptions ).then( function ( res ) {\n\n\t\t\treturn res.blob();\n\n\t\t} ).then( function ( blob ) {\n\n\t\t\treturn createImageBitmap( blob, Object.assign( scope.options, { colorSpaceConversion: 'none' } ) );\n\n\t\t} ).then( function ( imageBitmap ) {\n\n\t\t\tCache.add( url, imageBitmap );\n\n\t\t\tif ( onLoad ) onLoad( imageBitmap );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t} ).catch( function ( e ) {\n\n\t\t\tif ( onError ) onError( e );\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t} );\n\n\t\tscope.manager.itemStart( url );\n\n\t}\n\n}\n\nImageBitmapLoader.prototype.isImageBitmapLoader = true;\n\nlet _context;\n\nconst AudioContext = {\n\n\tgetContext: function () {\n\n\t\tif ( _context === undefined ) {\n\n\t\t\t_context = new ( window.AudioContext || window.webkitAudioContext )();\n\n\t\t}\n\n\t\treturn _context;\n\n\t},\n\n\tsetContext: function ( value ) {\n\n\t\t_context = value;\n\n\t}\n\n};\n\nclass AudioLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\ttry {\n\n\t\t\t\t// Create a copy of the buffer. The `decodeAudioData` method\n\t\t\t\t// detaches the buffer when complete, preventing reuse.\n\t\t\t\tconst bufferCopy = buffer.slice( 0 );\n\n\t\t\t\tconst context = AudioContext.getContext();\n\t\t\t\tcontext.decodeAudioData( bufferCopy, function ( audioBuffer ) {\n\n\t\t\t\t\tonLoad( audioBuffer );\n\n\t\t\t\t} );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n}\n\nclass HemisphereLightProbe extends LightProbe {\n\n\tconstructor( skyColor, groundColor, intensity = 1 ) {\n\n\t\tsuper( undefined, intensity );\n\n\t\tconst color1 = new Color().set( skyColor );\n\t\tconst color2 = new Color().set( groundColor );\n\n\t\tconst sky = new Vector3( color1.r, color1.g, color1.b );\n\t\tconst ground = new Vector3( color2.r, color2.g, color2.b );\n\n\t\t// without extra factor of PI in the shader, should = 1 / Math.sqrt( Math.PI );\n\t\tconst c0 = Math.sqrt( Math.PI );\n\t\tconst c1 = c0 * Math.sqrt( 0.75 );\n\n\t\tthis.sh.coefficients[ 0 ].copy( sky ).add( ground ).multiplyScalar( c0 );\n\t\tthis.sh.coefficients[ 1 ].copy( sky ).sub( ground ).multiplyScalar( c1 );\n\n\t}\n\n}\n\nHemisphereLightProbe.prototype.isHemisphereLightProbe = true;\n\nclass AmbientLightProbe extends LightProbe {\n\n\tconstructor( color, intensity = 1 ) {\n\n\t\tsuper( undefined, intensity );\n\n\t\tconst color1 = new Color().set( color );\n\n\t\t// without extra factor of PI in the shader, would be 2 / Math.sqrt( Math.PI );\n\t\tthis.sh.coefficients[ 0 ].set( color1.r, color1.g, color1.b ).multiplyScalar( 2 * Math.sqrt( Math.PI ) );\n\n\t}\n\n}\n\nAmbientLightProbe.prototype.isAmbientLightProbe = true;\n\nconst _eyeRight = /*@__PURE__*/ new Matrix4();\nconst _eyeLeft = /*@__PURE__*/ new Matrix4();\n\nclass StereoCamera {\n\n\tconstructor() {\n\n\t\tthis.type = 'StereoCamera';\n\n\t\tthis.aspect = 1;\n\n\t\tthis.eyeSep = 0.064;\n\n\t\tthis.cameraL = new PerspectiveCamera();\n\t\tthis.cameraL.layers.enable( 1 );\n\t\tthis.cameraL.matrixAutoUpdate = false;\n\n\t\tthis.cameraR = new PerspectiveCamera();\n\t\tthis.cameraR.layers.enable( 2 );\n\t\tthis.cameraR.matrixAutoUpdate = false;\n\n\t\tthis._cache = {\n\t\t\tfocus: null,\n\t\t\tfov: null,\n\t\t\taspect: null,\n\t\t\tnear: null,\n\t\t\tfar: null,\n\t\t\tzoom: null,\n\t\t\teyeSep: null\n\t\t};\n\n\t}\n\n\tupdate( camera ) {\n\n\t\tconst cache = this._cache;\n\n\t\tconst needsUpdate = cache.focus !== camera.focus || cache.fov !== camera.fov ||\n\t\t\tcache.aspect !== camera.aspect * this.aspect || cache.near !== camera.near ||\n\t\t\tcache.far !== camera.far || cache.zoom !== camera.zoom || cache.eyeSep !== this.eyeSep;\n\n\t\tif ( needsUpdate ) {\n\n\t\t\tcache.focus = camera.focus;\n\t\t\tcache.fov = camera.fov;\n\t\t\tcache.aspect = camera.aspect * this.aspect;\n\t\t\tcache.near = camera.near;\n\t\t\tcache.far = camera.far;\n\t\t\tcache.zoom = camera.zoom;\n\t\t\tcache.eyeSep = this.eyeSep;\n\n\t\t\t// Off-axis stereoscopic effect based on\n\t\t\t// http://paulbourke.net/stereographics/stereorender/\n\n\t\t\tconst projectionMatrix = camera.projectionMatrix.clone();\n\t\t\tconst eyeSepHalf = cache.eyeSep / 2;\n\t\t\tconst eyeSepOnProjection = eyeSepHalf * cache.near / cache.focus;\n\t\t\tconst ymax = ( cache.near * Math.tan( DEG2RAD * cache.fov * 0.5 ) ) / cache.zoom;\n\t\t\tlet xmin, xmax;\n\n\t\t\t// translate xOffset\n\n\t\t\t_eyeLeft.elements[ 12 ] = - eyeSepHalf;\n\t\t\t_eyeRight.elements[ 12 ] = eyeSepHalf;\n\n\t\t\t// for left eye\n\n\t\t\txmin = - ymax * cache.aspect + eyeSepOnProjection;\n\t\t\txmax = ymax * cache.aspect + eyeSepOnProjection;\n\n\t\t\tprojectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin );\n\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\tthis.cameraL.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t// for right eye\n\n\t\t\txmin = - ymax * cache.aspect - eyeSepOnProjection;\n\t\t\txmax = ymax * cache.aspect - eyeSepOnProjection;\n\n\t\t\tprojectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin );\n\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\tthis.cameraR.projectionMatrix.copy( projectionMatrix );\n\n\t\t}\n\n\t\tthis.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeLeft );\n\t\tthis.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeRight );\n\n\t}\n\n}\n\nclass Clock {\n\n\tconstructor( autoStart = true ) {\n\n\t\tthis.autoStart = autoStart;\n\n\t\tthis.startTime = 0;\n\t\tthis.oldTime = 0;\n\t\tthis.elapsedTime = 0;\n\n\t\tthis.running = false;\n\n\t}\n\n\tstart() {\n\n\t\tthis.startTime = now();\n\n\t\tthis.oldTime = this.startTime;\n\t\tthis.elapsedTime = 0;\n\t\tthis.running = true;\n\n\t}\n\n\tstop() {\n\n\t\tthis.getElapsedTime();\n\t\tthis.running = false;\n\t\tthis.autoStart = false;\n\n\t}\n\n\tgetElapsedTime() {\n\n\t\tthis.getDelta();\n\t\treturn this.elapsedTime;\n\n\t}\n\n\tgetDelta() {\n\n\t\tlet diff = 0;\n\n\t\tif ( this.autoStart && ! this.running ) {\n\n\t\t\tthis.start();\n\t\t\treturn 0;\n\n\t\t}\n\n\t\tif ( this.running ) {\n\n\t\t\tconst newTime = now();\n\n\t\t\tdiff = ( newTime - this.oldTime ) / 1000;\n\t\t\tthis.oldTime = newTime;\n\n\t\t\tthis.elapsedTime += diff;\n\n\t\t}\n\n\t\treturn diff;\n\n\t}\n\n}\n\nfunction now() {\n\n\treturn ( typeof performance === 'undefined' ? Date : performance ).now(); // see #10732\n\n}\n\nconst _position$1 = /*@__PURE__*/ new Vector3();\nconst _quaternion$1 = /*@__PURE__*/ new Quaternion();\nconst _scale$1 = /*@__PURE__*/ new Vector3();\nconst _orientation$1 = /*@__PURE__*/ new Vector3();\n\nclass AudioListener extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'AudioListener';\n\n\t\tthis.context = AudioContext.getContext();\n\n\t\tthis.gain = this.context.createGain();\n\t\tthis.gain.connect( this.context.destination );\n\n\t\tthis.filter = null;\n\n\t\tthis.timeDelta = 0;\n\n\t\t// private\n\n\t\tthis._clock = new Clock();\n\n\t}\n\n\tgetInput() {\n\n\t\treturn this.gain;\n\n\t}\n\n\tremoveFilter() {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\t\t\tthis.gain.connect( this.context.destination );\n\t\t\tthis.filter = null;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetFilter() {\n\n\t\treturn this.filter;\n\n\t}\n\n\tsetFilter( value ) {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\n\t\t} else {\n\n\t\t\tthis.gain.disconnect( this.context.destination );\n\n\t\t}\n\n\t\tthis.filter = value;\n\t\tthis.gain.connect( this.filter );\n\t\tthis.filter.connect( this.context.destination );\n\n\t\treturn this;\n\n\t}\n\n\tgetMasterVolume() {\n\n\t\treturn this.gain.gain.value;\n\n\t}\n\n\tsetMasterVolume( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\treturn this;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tconst listener = this.context.listener;\n\t\tconst up = this.up;\n\n\t\tthis.timeDelta = this._clock.getDelta();\n\n\t\tthis.matrixWorld.decompose( _position$1, _quaternion$1, _scale$1 );\n\n\t\t_orientation$1.set( 0, 0, - 1 ).applyQuaternion( _quaternion$1 );\n\n\t\tif ( listener.positionX ) {\n\n\t\t\t// code path for Chrome (see #14393)\n\n\t\t\tconst endTime = this.context.currentTime + this.timeDelta;\n\n\t\t\tlistener.positionX.linearRampToValueAtTime( _position$1.x, endTime );\n\t\t\tlistener.positionY.linearRampToValueAtTime( _position$1.y, endTime );\n\t\t\tlistener.positionZ.linearRampToValueAtTime( _position$1.z, endTime );\n\t\t\tlistener.forwardX.linearRampToValueAtTime( _orientation$1.x, endTime );\n\t\t\tlistener.forwardY.linearRampToValueAtTime( _orientation$1.y, endTime );\n\t\t\tlistener.forwardZ.linearRampToValueAtTime( _orientation$1.z, endTime );\n\t\t\tlistener.upX.linearRampToValueAtTime( up.x, endTime );\n\t\t\tlistener.upY.linearRampToValueAtTime( up.y, endTime );\n\t\t\tlistener.upZ.linearRampToValueAtTime( up.z, endTime );\n\n\t\t} else {\n\n\t\t\tlistener.setPosition( _position$1.x, _position$1.y, _position$1.z );\n\t\t\tlistener.setOrientation( _orientation$1.x, _orientation$1.y, _orientation$1.z, up.x, up.y, up.z );\n\n\t\t}\n\n\t}\n\n}\n\nclass Audio extends Object3D {\n\n\tconstructor( listener ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Audio';\n\n\t\tthis.listener = listener;\n\t\tthis.context = listener.context;\n\n\t\tthis.gain = this.context.createGain();\n\t\tthis.gain.connect( listener.getInput() );\n\n\t\tthis.autoplay = false;\n\n\t\tthis.buffer = null;\n\t\tthis.detune = 0;\n\t\tthis.loop = false;\n\t\tthis.loopStart = 0;\n\t\tthis.loopEnd = 0;\n\t\tthis.offset = 0;\n\t\tthis.duration = undefined;\n\t\tthis.playbackRate = 1;\n\t\tthis.isPlaying = false;\n\t\tthis.hasPlaybackControl = true;\n\t\tthis.source = null;\n\t\tthis.sourceType = 'empty';\n\n\t\tthis._startedAt = 0;\n\t\tthis._progress = 0;\n\t\tthis._connected = false;\n\n\t\tthis.filters = [];\n\n\t}\n\n\tgetOutput() {\n\n\t\treturn this.gain;\n\n\t}\n\n\tsetNodeSource( audioNode ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'audioNode';\n\t\tthis.source = audioNode;\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetMediaElementSource( mediaElement ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'mediaNode';\n\t\tthis.source = this.context.createMediaElementSource( mediaElement );\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetMediaStreamSource( mediaStream ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'mediaStreamNode';\n\t\tthis.source = this.context.createMediaStreamSource( mediaStream );\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetBuffer( audioBuffer ) {\n\n\t\tthis.buffer = audioBuffer;\n\t\tthis.sourceType = 'buffer';\n\n\t\tif ( this.autoplay ) this.play();\n\n\t\treturn this;\n\n\t}\n\n\tplay( delay = 0 ) {\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: Audio is already playing.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis._startedAt = this.context.currentTime + delay;\n\n\t\tconst source = this.context.createBufferSource();\n\t\tsource.buffer = this.buffer;\n\t\tsource.loop = this.loop;\n\t\tsource.loopStart = this.loopStart;\n\t\tsource.loopEnd = this.loopEnd;\n\t\tsource.onended = this.onEnded.bind( this );\n\t\tsource.start( this._startedAt, this._progress + this.offset, this.duration );\n\n\t\tthis.isPlaying = true;\n\n\t\tthis.source = source;\n\n\t\tthis.setDetune( this.detune );\n\t\tthis.setPlaybackRate( this.playbackRate );\n\n\t\treturn this.connect();\n\n\t}\n\n\tpause() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\t// update current progress\n\n\t\t\tthis._progress += Math.max( this.context.currentTime - this._startedAt, 0 ) * this.playbackRate;\n\n\t\t\tif ( this.loop === true ) {\n\n\t\t\t\t// ensure _progress does not exceed duration with looped audios\n\n\t\t\t\tthis._progress = this._progress % ( this.duration || this.buffer.duration );\n\n\t\t\t}\n\n\t\t\tthis.source.stop();\n\t\t\tthis.source.onended = null;\n\n\t\t\tthis.isPlaying = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tstop() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis._progress = 0;\n\n\t\tthis.source.stop();\n\t\tthis.source.onended = null;\n\t\tthis.isPlaying = false;\n\n\t\treturn this;\n\n\t}\n\n\tconnect() {\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.connect( this.filters[ 0 ] );\n\n\t\t\tfor ( let i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].connect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].connect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.connect( this.getOutput() );\n\n\t\t}\n\n\t\tthis._connected = true;\n\n\t\treturn this;\n\n\t}\n\n\tdisconnect() {\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.disconnect( this.filters[ 0 ] );\n\n\t\t\tfor ( let i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].disconnect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].disconnect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.disconnect( this.getOutput() );\n\n\t\t}\n\n\t\tthis._connected = false;\n\n\t\treturn this;\n\n\t}\n\n\tgetFilters() {\n\n\t\treturn this.filters;\n\n\t}\n\n\tsetFilters( value ) {\n\n\t\tif ( ! value ) value = [];\n\n\t\tif ( this._connected === true ) {\n\n\t\t\tthis.disconnect();\n\t\t\tthis.filters = value.slice();\n\t\t\tthis.connect();\n\n\t\t} else {\n\n\t\t\tthis.filters = value.slice();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetDetune( value ) {\n\n\t\tthis.detune = value;\n\n\t\tif ( this.source.detune === undefined ) return; // only set detune when available\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.detune.setTargetAtTime( this.detune, this.context.currentTime, 0.01 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetDetune() {\n\n\t\treturn this.detune;\n\n\t}\n\n\tgetFilter() {\n\n\t\treturn this.getFilters()[ 0 ];\n\n\t}\n\n\tsetFilter( filter ) {\n\n\t\treturn this.setFilters( filter ? [ filter ] : [] );\n\n\t}\n\n\tsetPlaybackRate( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.playbackRate = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.playbackRate.setTargetAtTime( this.playbackRate, this.context.currentTime, 0.01 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetPlaybackRate() {\n\n\t\treturn this.playbackRate;\n\n\t}\n\n\tonEnded() {\n\n\t\tthis.isPlaying = false;\n\n\t}\n\n\tgetLoop() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn this.loop;\n\n\t}\n\n\tsetLoop( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.loop = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.loop = this.loop;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetLoopStart( value ) {\n\n\t\tthis.loopStart = value;\n\n\t\treturn this;\n\n\t}\n\n\tsetLoopEnd( value ) {\n\n\t\tthis.loopEnd = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetVolume() {\n\n\t\treturn this.gain.gain.value;\n\n\t}\n\n\tsetVolume( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _position = /*@__PURE__*/ new Vector3();\nconst _quaternion = /*@__PURE__*/ new Quaternion();\nconst _scale = /*@__PURE__*/ new Vector3();\nconst _orientation = /*@__PURE__*/ new Vector3();\n\nclass PositionalAudio extends Audio {\n\n\tconstructor( listener ) {\n\n\t\tsuper( listener );\n\n\t\tthis.panner = this.context.createPanner();\n\t\tthis.panner.panningModel = 'HRTF';\n\t\tthis.panner.connect( this.gain );\n\n\t}\n\n\tgetOutput() {\n\n\t\treturn this.panner;\n\n\t}\n\n\tgetRefDistance() {\n\n\t\treturn this.panner.refDistance;\n\n\t}\n\n\tsetRefDistance( value ) {\n\n\t\tthis.panner.refDistance = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetRolloffFactor() {\n\n\t\treturn this.panner.rolloffFactor;\n\n\t}\n\n\tsetRolloffFactor( value ) {\n\n\t\tthis.panner.rolloffFactor = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetDistanceModel() {\n\n\t\treturn this.panner.distanceModel;\n\n\t}\n\n\tsetDistanceModel( value ) {\n\n\t\tthis.panner.distanceModel = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetMaxDistance() {\n\n\t\treturn this.panner.maxDistance;\n\n\t}\n\n\tsetMaxDistance( value ) {\n\n\t\tthis.panner.maxDistance = value;\n\n\t\treturn this;\n\n\t}\n\n\tsetDirectionalCone( coneInnerAngle, coneOuterAngle, coneOuterGain ) {\n\n\t\tthis.panner.coneInnerAngle = coneInnerAngle;\n\t\tthis.panner.coneOuterAngle = coneOuterAngle;\n\t\tthis.panner.coneOuterGain = coneOuterGain;\n\n\t\treturn this;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tif ( this.hasPlaybackControl === true && this.isPlaying === false ) return;\n\n\t\tthis.matrixWorld.decompose( _position, _quaternion, _scale );\n\n\t\t_orientation.set( 0, 0, 1 ).applyQuaternion( _quaternion );\n\n\t\tconst panner = this.panner;\n\n\t\tif ( panner.positionX ) {\n\n\t\t\t// code path for Chrome and Firefox (see #14393)\n\n\t\t\tconst endTime = this.context.currentTime + this.listener.timeDelta;\n\n\t\t\tpanner.positionX.linearRampToValueAtTime( _position.x, endTime );\n\t\t\tpanner.positionY.linearRampToValueAtTime( _position.y, endTime );\n\t\t\tpanner.positionZ.linearRampToValueAtTime( _position.z, endTime );\n\t\t\tpanner.orientationX.linearRampToValueAtTime( _orientation.x, endTime );\n\t\t\tpanner.orientationY.linearRampToValueAtTime( _orientation.y, endTime );\n\t\t\tpanner.orientationZ.linearRampToValueAtTime( _orientation.z, endTime );\n\n\t\t} else {\n\n\t\t\tpanner.setPosition( _position.x, _position.y, _position.z );\n\t\t\tpanner.setOrientation( _orientation.x, _orientation.y, _orientation.z );\n\n\t\t}\n\n\t}\n\n}\n\nclass AudioAnalyser {\n\n\tconstructor( audio, fftSize = 2048 ) {\n\n\t\tthis.analyser = audio.context.createAnalyser();\n\t\tthis.analyser.fftSize = fftSize;\n\n\t\tthis.data = new Uint8Array( this.analyser.frequencyBinCount );\n\n\t\taudio.getOutput().connect( this.analyser );\n\n\t}\n\n\n\tgetFrequencyData() {\n\n\t\tthis.analyser.getByteFrequencyData( this.data );\n\n\t\treturn this.data;\n\n\t}\n\n\tgetAverageFrequency() {\n\n\t\tlet value = 0;\n\t\tconst data = this.getFrequencyData();\n\n\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\tvalue += data[ i ];\n\n\t\t}\n\n\t\treturn value / data.length;\n\n\t}\n\n}\n\nclass PropertyMixer {\n\n\tconstructor( binding, typeName, valueSize ) {\n\n\t\tthis.binding = binding;\n\t\tthis.valueSize = valueSize;\n\n\t\tlet mixFunction,\n\t\t\tmixFunctionAdditive,\n\t\t\tsetIdentity;\n\n\t\t// buffer layout: [ incoming | accu0 | accu1 | orig | addAccu | (optional work) ]\n\t\t//\n\t\t// interpolators can use .buffer as their .result\n\t\t// the data then goes to 'incoming'\n\t\t//\n\t\t// 'accu0' and 'accu1' are used frame-interleaved for\n\t\t// the cumulative result and are compared to detect\n\t\t// changes\n\t\t//\n\t\t// 'orig' stores the original state of the property\n\t\t//\n\t\t// 'add' is used for additive cumulative results\n\t\t//\n\t\t// 'work' is optional and is only present for quaternion types. It is used\n\t\t// to store intermediate quaternion multiplication results\n\n\t\tswitch ( typeName ) {\n\n\t\t\tcase 'quaternion':\n\t\t\t\tmixFunction = this._slerp;\n\t\t\t\tmixFunctionAdditive = this._slerpAdditive;\n\t\t\t\tsetIdentity = this._setAdditiveIdentityQuaternion;\n\n\t\t\t\tthis.buffer = new Float64Array( valueSize * 6 );\n\t\t\t\tthis._workIndex = 5;\n\t\t\t\tbreak;\n\n\t\t\tcase 'string':\n\t\t\tcase 'bool':\n\t\t\t\tmixFunction = this._select;\n\n\t\t\t\t// Use the regular mix function and for additive on these types,\n\t\t\t\t// additive is not relevant for non-numeric types\n\t\t\t\tmixFunctionAdditive = this._select;\n\n\t\t\t\tsetIdentity = this._setAdditiveIdentityOther;\n\n\t\t\t\tthis.buffer = new Array( valueSize * 5 );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tmixFunction = this._lerp;\n\t\t\t\tmixFunctionAdditive = this._lerpAdditive;\n\t\t\t\tsetIdentity = this._setAdditiveIdentityNumeric;\n\n\t\t\t\tthis.buffer = new Float64Array( valueSize * 5 );\n\n\t\t}\n\n\t\tthis._mixBufferRegion = mixFunction;\n\t\tthis._mixBufferRegionAdditive = mixFunctionAdditive;\n\t\tthis._setIdentity = setIdentity;\n\t\tthis._origIndex = 3;\n\t\tthis._addIndex = 4;\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t\tthis.useCount = 0;\n\t\tthis.referenceCount = 0;\n\n\t}\n\n\t// accumulate data in the 'incoming' region into 'accu'\n\taccumulate( accuIndex, weight ) {\n\n\t\t// note: happily accumulating nothing when weight = 0, the caller knows\n\t\t// the weight and shouldn't have made the call in the first place\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = accuIndex * stride + stride;\n\n\t\tlet currentWeight = this.cumulativeWeight;\n\n\t\tif ( currentWeight === 0 ) {\n\n\t\t\t// accuN := incoming * weight\n\n\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ offset + i ] = buffer[ i ];\n\n\t\t\t}\n\n\t\t\tcurrentWeight = weight;\n\n\t\t} else {\n\n\t\t\t// accuN := accuN + incoming * weight\n\n\t\t\tcurrentWeight += weight;\n\t\t\tconst mix = weight / currentWeight;\n\t\t\tthis._mixBufferRegion( buffer, offset, 0, mix, stride );\n\n\t\t}\n\n\t\tthis.cumulativeWeight = currentWeight;\n\n\t}\n\n\t// accumulate data in the 'incoming' region into 'add'\n\taccumulateAdditive( weight ) {\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = stride * this._addIndex;\n\n\t\tif ( this.cumulativeWeightAdditive === 0 ) {\n\n\t\t\t// add = identity\n\n\t\t\tthis._setIdentity();\n\n\t\t}\n\n\t\t// add := add + incoming * weight\n\n\t\tthis._mixBufferRegionAdditive( buffer, offset, 0, weight, stride );\n\t\tthis.cumulativeWeightAdditive += weight;\n\n\t}\n\n\t// apply the state of 'accu' to the binding when accus differ\n\tapply( accuIndex ) {\n\n\t\tconst stride = this.valueSize,\n\t\t\tbuffer = this.buffer,\n\t\t\toffset = accuIndex * stride + stride,\n\n\t\t\tweight = this.cumulativeWeight,\n\t\t\tweightAdditive = this.cumulativeWeightAdditive,\n\n\t\t\tbinding = this.binding;\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t\tif ( weight < 1 ) {\n\n\t\t\t// accuN := accuN + original * ( 1 - cumulativeWeight )\n\n\t\t\tconst originalValueOffset = stride * this._origIndex;\n\n\t\t\tthis._mixBufferRegion(\n\t\t\t\tbuffer, offset, originalValueOffset, 1 - weight, stride );\n\n\t\t}\n\n\t\tif ( weightAdditive > 0 ) {\n\n\t\t\t// accuN := accuN + additive accuN\n\n\t\t\tthis._mixBufferRegionAdditive( buffer, offset, this._addIndex * stride, 1, stride );\n\n\t\t}\n\n\t\tfor ( let i = stride, e = stride + stride; i !== e; ++ i ) {\n\n\t\t\tif ( buffer[ i ] !== buffer[ i + stride ] ) {\n\n\t\t\t\t// value has changed -> update scene graph\n\n\t\t\t\tbinding.setValue( buffer, offset );\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// remember the state of the bound property and copy it to both accus\n\tsaveOriginalState() {\n\n\t\tconst binding = this.binding;\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\n\t\t\toriginalValueOffset = stride * this._origIndex;\n\n\t\tbinding.getValue( buffer, originalValueOffset );\n\n\t\t// accu[0..1] := orig -- initially detect changes against the original\n\t\tfor ( let i = stride, e = originalValueOffset; i !== e; ++ i ) {\n\n\t\t\tbuffer[ i ] = buffer[ originalValueOffset + ( i % stride ) ];\n\n\t\t}\n\n\t\t// Add to identity for additive\n\t\tthis._setIdentity();\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t}\n\n\t// apply the state previously taken via 'saveOriginalState' to the binding\n\trestoreOriginalState() {\n\n\t\tconst originalValueOffset = this.valueSize * 3;\n\t\tthis.binding.setValue( this.buffer, originalValueOffset );\n\n\t}\n\n\t_setAdditiveIdentityNumeric() {\n\n\t\tconst startIndex = this._addIndex * this.valueSize;\n\t\tconst endIndex = startIndex + this.valueSize;\n\n\t\tfor ( let i = startIndex; i < endIndex; i ++ ) {\n\n\t\t\tthis.buffer[ i ] = 0;\n\n\t\t}\n\n\t}\n\n\t_setAdditiveIdentityQuaternion() {\n\n\t\tthis._setAdditiveIdentityNumeric();\n\t\tthis.buffer[ this._addIndex * this.valueSize + 3 ] = 1;\n\n\t}\n\n\t_setAdditiveIdentityOther() {\n\n\t\tconst startIndex = this._origIndex * this.valueSize;\n\t\tconst targetIndex = this._addIndex * this.valueSize;\n\n\t\tfor ( let i = 0; i < this.valueSize; i ++ ) {\n\n\t\t\tthis.buffer[ targetIndex + i ] = this.buffer[ startIndex + i ];\n\n\t\t}\n\n\t}\n\n\n\t// mix functions\n\n\t_select( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tif ( t >= 0.5 ) {\n\n\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ dstOffset + i ] = buffer[ srcOffset + i ];\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_slerp( buffer, dstOffset, srcOffset, t ) {\n\n\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t );\n\n\t}\n\n\t_slerpAdditive( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tconst workOffset = this._workIndex * stride;\n\n\t\t// Store result in intermediate buffer offset\n\t\tQuaternion.multiplyQuaternionsFlat( buffer, workOffset, buffer, dstOffset, buffer, srcOffset );\n\n\t\t// Slerp to the intermediate result\n\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, workOffset, t );\n\n\t}\n\n\t_lerp( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tconst s = 1 - t;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tconst j = dstOffset + i;\n\n\t\t\tbuffer[ j ] = buffer[ j ] * s + buffer[ srcOffset + i ] * t;\n\n\t\t}\n\n\t}\n\n\t_lerpAdditive( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tconst j = dstOffset + i;\n\n\t\t\tbuffer[ j ] = buffer[ j ] + buffer[ srcOffset + i ] * t;\n\n\t\t}\n\n\t}\n\n}\n\n// Characters [].:/ are reserved for track binding syntax.\nconst _RESERVED_CHARS_RE = '\\\\[\\\\]\\\\.:\\\\/';\nconst _reservedRe = new RegExp( '[' + _RESERVED_CHARS_RE + ']', 'g' );\n\n// Attempts to allow node names from any language. ES5's `\\w` regexp matches\n// only latin characters, and the unicode \\p{L} is not yet supported. So\n// instead, we exclude reserved characters and match everything else.\nconst _wordChar = '[^' + _RESERVED_CHARS_RE + ']';\nconst _wordCharOrDot = '[^' + _RESERVED_CHARS_RE.replace( '\\\\.', '' ) + ']';\n\n// Parent directories, delimited by '/' or ':'. Currently unused, but must\n// be matched to parse the rest of the track name.\nconst _directoryRe = /((?:WC+[\\/:])*)/.source.replace( 'WC', _wordChar );\n\n// Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'.\nconst _nodeRe = /(WCOD+)?/.source.replace( 'WCOD', _wordCharOrDot );\n\n// Object on target node, and accessor. May not contain reserved\n// characters. Accessor may contain any character except closing bracket.\nconst _objectRe = /(?:\\.(WC+)(?:\\[(.+)\\])?)?/.source.replace( 'WC', _wordChar );\n\n// Property and accessor. May not contain reserved characters. Accessor may\n// contain any non-bracket characters.\nconst _propertyRe = /\\.(WC+)(?:\\[(.+)\\])?/.source.replace( 'WC', _wordChar );\n\nconst _trackRe = new RegExp( ''\n\t+ '^'\n\t+ _directoryRe\n\t+ _nodeRe\n\t+ _objectRe\n\t+ _propertyRe\n\t+ '$'\n);\n\nconst _supportedObjectNames = [ 'material', 'materials', 'bones' ];\n\nclass Composite {\n\n\tconstructor( targetGroup, path, optionalParsedPath ) {\n\n\t\tconst parsedPath = optionalParsedPath || PropertyBinding.parseTrackName( path );\n\n\t\tthis._targetGroup = targetGroup;\n\t\tthis._bindings = targetGroup.subscribe_( path, parsedPath );\n\n\t}\n\n\tgetValue( array, offset ) {\n\n\t\tthis.bind(); // bind all binding\n\n\t\tconst firstValidIndex = this._targetGroup.nCachedObjects_,\n\t\t\tbinding = this._bindings[ firstValidIndex ];\n\n\t\t// and only call .getValue on the first\n\t\tif ( binding !== undefined ) binding.getValue( array, offset );\n\n\t}\n\n\tsetValue( array, offset ) {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].setValue( array, offset );\n\n\t\t}\n\n\t}\n\n\tbind() {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].bind();\n\n\t\t}\n\n\t}\n\n\tunbind() {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].unbind();\n\n\t\t}\n\n\t}\n\n}\n\n// Note: This class uses a State pattern on a per-method basis:\n// 'bind' sets 'this.getValue' / 'setValue' and shadows the\n// prototype version of these methods with one that represents\n// the bound state. When the property is not found, the methods\n// become no-ops.\nclass PropertyBinding {\n\n\tconstructor( rootNode, path, parsedPath ) {\n\n\t\tthis.path = path;\n\t\tthis.parsedPath = parsedPath || PropertyBinding.parseTrackName( path );\n\n\t\tthis.node = PropertyBinding.findNode( rootNode, this.parsedPath.nodeName ) || rootNode;\n\n\t\tthis.rootNode = rootNode;\n\n\t\t// initial state of these methods that calls 'bind'\n\t\tthis.getValue = this._getValue_unbound;\n\t\tthis.setValue = this._setValue_unbound;\n\n\t}\n\n\n\tstatic create( root, path, parsedPath ) {\n\n\t\tif ( ! ( root && root.isAnimationObjectGroup ) ) {\n\n\t\t\treturn new PropertyBinding( root, path, parsedPath );\n\n\t\t} else {\n\n\t\t\treturn new PropertyBinding.Composite( root, path, parsedPath );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Replaces spaces with underscores and removes unsupported characters from\n\t * node names, to ensure compatibility with parseTrackName().\n\t *\n\t * @param {string} name Node name to be sanitized.\n\t * @return {string}\n\t */\n\tstatic sanitizeNodeName( name ) {\n\n\t\treturn name.replace( /\\s/g, '_' ).replace( _reservedRe, '' );\n\n\t}\n\n\tstatic parseTrackName( trackName ) {\n\n\t\tconst matches = _trackRe.exec( trackName );\n\n\t\tif ( ! matches ) {\n\n\t\t\tthrow new Error( 'PropertyBinding: Cannot parse trackName: ' + trackName );\n\n\t\t}\n\n\t\tconst results = {\n\t\t\t// directoryName: matches[ 1 ], // (tschw) currently unused\n\t\t\tnodeName: matches[ 2 ],\n\t\t\tobjectName: matches[ 3 ],\n\t\t\tobjectIndex: matches[ 4 ],\n\t\t\tpropertyName: matches[ 5 ], // required\n\t\t\tpropertyIndex: matches[ 6 ]\n\t\t};\n\n\t\tconst lastDot = results.nodeName && results.nodeName.lastIndexOf( '.' );\n\n\t\tif ( lastDot !== undefined && lastDot !== - 1 ) {\n\n\t\t\tconst objectName = results.nodeName.substring( lastDot + 1 );\n\n\t\t\t// Object names must be checked against an allowlist. Otherwise, there\n\t\t\t// is no way to parse 'foo.bar.baz': 'baz' must be a property, but\n\t\t\t// 'bar' could be the objectName, or part of a nodeName (which can\n\t\t\t// include '.' characters).\n\t\t\tif ( _supportedObjectNames.indexOf( objectName ) !== - 1 ) {\n\n\t\t\t\tresults.nodeName = results.nodeName.substring( 0, lastDot );\n\t\t\t\tresults.objectName = objectName;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( results.propertyName === null || results.propertyName.length === 0 ) {\n\n\t\t\tthrow new Error( 'PropertyBinding: can not parse propertyName from trackName: ' + trackName );\n\n\t\t}\n\n\t\treturn results;\n\n\t}\n\n\tstatic findNode( root, nodeName ) {\n\n\t\tif ( ! nodeName || nodeName === '' || nodeName === '.' || nodeName === - 1 || nodeName === root.name || nodeName === root.uuid ) {\n\n\t\t\treturn root;\n\n\t\t}\n\n\t\t// search into skeleton bones.\n\t\tif ( root.skeleton ) {\n\n\t\t\tconst bone = root.skeleton.getBoneByName( nodeName );\n\n\t\t\tif ( bone !== undefined ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// search into node subtree.\n\t\tif ( root.children ) {\n\n\t\t\tconst searchNodeSubtree = function ( children ) {\n\n\t\t\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\t\t\tconst childNode = children[ i ];\n\n\t\t\t\t\tif ( childNode.name === nodeName || childNode.uuid === nodeName ) {\n\n\t\t\t\t\t\treturn childNode;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst result = searchNodeSubtree( childNode.children );\n\n\t\t\t\t\tif ( result ) return result;\n\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\n\t\t\t};\n\n\t\t\tconst subTreeNode = searchNodeSubtree( root.children );\n\n\t\t\tif ( subTreeNode ) {\n\n\t\t\t\treturn subTreeNode;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t// these are used to \"bind\" a nonexistent property\n\t_getValue_unavailable() {}\n\t_setValue_unavailable() {}\n\n\t// Getters\n\n\t_getValue_direct( buffer, offset ) {\n\n\t\tbuffer[ offset ] = this.targetObject[ this.propertyName ];\n\n\t}\n\n\t_getValue_array( buffer, offset ) {\n\n\t\tconst source = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = source.length; i !== n; ++ i ) {\n\n\t\t\tbuffer[ offset ++ ] = source[ i ];\n\n\t\t}\n\n\t}\n\n\t_getValue_arrayElement( buffer, offset ) {\n\n\t\tbuffer[ offset ] = this.resolvedProperty[ this.propertyIndex ];\n\n\t}\n\n\t_getValue_toArray( buffer, offset ) {\n\n\t\tthis.resolvedProperty.toArray( buffer, offset );\n\n\t}\n\n\t// Direct\n\n\t_setValue_direct( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\n\t}\n\n\t_setValue_direct_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_direct_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// EntireArray\n\n\t_setValue_array( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t}\n\n\t_setValue_array_setNeedsUpdate( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_array_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// ArrayElement\n\n\t_setValue_arrayElement( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\n\t}\n\n\t_setValue_arrayElement_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_arrayElement_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// HasToFromArray\n\n\t_setValue_fromArray( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\n\t}\n\n\t_setValue_fromArray_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_fromArray_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t_getValue_unbound( targetArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.getValue( targetArray, offset );\n\n\t}\n\n\t_setValue_unbound( sourceArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.setValue( sourceArray, offset );\n\n\t}\n\n\t// create getter / setter pair for a property in the scene graph\n\tbind() {\n\n\t\tlet targetObject = this.node;\n\t\tconst parsedPath = this.parsedPath;\n\n\t\tconst objectName = parsedPath.objectName;\n\t\tconst propertyName = parsedPath.propertyName;\n\t\tlet propertyIndex = parsedPath.propertyIndex;\n\n\t\tif ( ! targetObject ) {\n\n\t\t\ttargetObject = PropertyBinding.findNode( this.rootNode, parsedPath.nodeName ) || this.rootNode;\n\n\t\t\tthis.node = targetObject;\n\n\t\t}\n\n\t\t// set fail state so we can just 'return' on error\n\t\tthis.getValue = this._getValue_unavailable;\n\t\tthis.setValue = this._setValue_unavailable;\n\n\t\t// ensure there is a value node\n\t\tif ( ! targetObject ) {\n\n\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update node for track: ' + this.path + ' but it wasn\\'t found.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( objectName ) {\n\n\t\t\tlet objectIndex = parsedPath.objectIndex;\n\n\t\t\t// special cases were we need to reach deeper into the hierarchy to get the face materials....\n\t\t\tswitch ( objectName ) {\n\n\t\t\t\tcase 'materials':\n\n\t\t\t\t\tif ( ! targetObject.material ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! targetObject.material.materials ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject.material.materials;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'bones':\n\n\t\t\t\t\tif ( ! targetObject.skeleton ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// potential future optimization: skip this if propertyIndex is already an integer\n\t\t\t\t\t// and convert the integer string to a true integer.\n\n\t\t\t\t\ttargetObject = targetObject.skeleton.bones;\n\n\t\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\t\tfor ( let i = 0; i < targetObject.length; i ++ ) {\n\n\t\t\t\t\t\tif ( targetObject[ i ].name === objectIndex ) {\n\n\t\t\t\t\t\t\tobjectIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tif ( targetObject[ objectName ] === undefined ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to objectName of node undefined.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject[ objectName ];\n\n\t\t\t}\n\n\n\t\t\tif ( objectIndex !== undefined ) {\n\n\t\t\t\tif ( targetObject[ objectIndex ] === undefined ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.', this, targetObject );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\ttargetObject = targetObject[ objectIndex ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// resolve property\n\t\tconst nodeProperty = targetObject[ propertyName ];\n\n\t\tif ( nodeProperty === undefined ) {\n\n\t\t\tconst nodeName = parsedPath.nodeName;\n\n\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update property for track: ' + nodeName +\n\t\t\t\t'.' + propertyName + ' but it wasn\\'t found.', targetObject );\n\t\t\treturn;\n\n\t\t}\n\n\t\t// determine versioning scheme\n\t\tlet versioning = this.Versioning.None;\n\n\t\tthis.targetObject = targetObject;\n\n\t\tif ( targetObject.needsUpdate !== undefined ) { // material\n\n\t\t\tversioning = this.Versioning.NeedsUpdate;\n\n\t\t} else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform\n\n\t\t\tversioning = this.Versioning.MatrixWorldNeedsUpdate;\n\n\t\t}\n\n\t\t// determine how the property gets bound\n\t\tlet bindingType = this.BindingType.Direct;\n\n\t\tif ( propertyIndex !== undefined ) {\n\n\t\t\t// access a sub element of the property array (only primitives are supported right now)\n\n\t\t\tif ( propertyName === 'morphTargetInfluences' ) {\n\n\t\t\t\t// potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer.\n\n\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\tif ( ! targetObject.geometry ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.', this );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( targetObject.geometry.isBufferGeometry ) {\n\n\t\t\t\t\tif ( ! targetObject.geometry.morphAttributes ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( targetObject.morphTargetDictionary[ propertyIndex ] !== undefined ) {\n\n\t\t\t\t\t\tpropertyIndex = targetObject.morphTargetDictionary[ propertyIndex ];\n\n\t\t\t\t\t}\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences on THREE.Geometry. Use THREE.BufferGeometry instead.', this );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tbindingType = this.BindingType.ArrayElement;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\t\t\tthis.propertyIndex = propertyIndex;\n\n\t\t} else if ( nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined ) {\n\n\t\t\t// must use copy for Object3D.Euler/Quaternion\n\n\t\t\tbindingType = this.BindingType.HasFromToArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else if ( Array.isArray( nodeProperty ) ) {\n\n\t\t\tbindingType = this.BindingType.EntireArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else {\n\n\t\t\tthis.propertyName = propertyName;\n\n\t\t}\n\n\t\t// select getter / setter\n\t\tthis.getValue = this.GetterByBindingType[ bindingType ];\n\t\tthis.setValue = this.SetterByBindingTypeAndVersioning[ bindingType ][ versioning ];\n\n\t}\n\n\tunbind() {\n\n\t\tthis.node = null;\n\n\t\t// back to the prototype version of getValue / setValue\n\t\t// note: avoiding to mutate the shape of 'this' via 'delete'\n\t\tthis.getValue = this._getValue_unbound;\n\t\tthis.setValue = this._setValue_unbound;\n\n\t}\n\n}\n\nPropertyBinding.Composite = Composite;\n\nPropertyBinding.prototype.BindingType = {\n\tDirect: 0,\n\tEntireArray: 1,\n\tArrayElement: 2,\n\tHasFromToArray: 3\n};\n\nPropertyBinding.prototype.Versioning = {\n\tNone: 0,\n\tNeedsUpdate: 1,\n\tMatrixWorldNeedsUpdate: 2\n};\n\nPropertyBinding.prototype.GetterByBindingType = [\n\n\tPropertyBinding.prototype._getValue_direct,\n\tPropertyBinding.prototype._getValue_array,\n\tPropertyBinding.prototype._getValue_arrayElement,\n\tPropertyBinding.prototype._getValue_toArray,\n\n];\n\nPropertyBinding.prototype.SetterByBindingTypeAndVersioning = [\n\n\t[\n\t\t// Direct\n\t\tPropertyBinding.prototype._setValue_direct,\n\t\tPropertyBinding.prototype._setValue_direct_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_direct_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// EntireArray\n\n\t\tPropertyBinding.prototype._setValue_array,\n\t\tPropertyBinding.prototype._setValue_array_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_array_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// ArrayElement\n\t\tPropertyBinding.prototype._setValue_arrayElement,\n\t\tPropertyBinding.prototype._setValue_arrayElement_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// HasToFromArray\n\t\tPropertyBinding.prototype._setValue_fromArray,\n\t\tPropertyBinding.prototype._setValue_fromArray_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate,\n\n\t]\n\n];\n\n/**\n *\n * A group of objects that receives a shared animation state.\n *\n * Usage:\n *\n * - Add objects you would otherwise pass as 'root' to the\n * constructor or the .clipAction method of AnimationMixer.\n *\n * - Instead pass this object as 'root'.\n *\n * - You can also add and remove objects later when the mixer\n * is running.\n *\n * Note:\n *\n * Objects of this class appear as one object to the mixer,\n * so cache control of the individual objects must be done\n * on the group.\n *\n * Limitation:\n *\n * - The animated properties must be compatible among the\n * all objects in the group.\n *\n * - A single property can either be controlled through a\n * target group or directly, but not both.\n */\n\nclass AnimationObjectGroup {\n\n\tconstructor() {\n\n\t\tthis.uuid = generateUUID();\n\n\t\t// cached objects followed by the active ones\n\t\tthis._objects = Array.prototype.slice.call( arguments );\n\n\t\tthis.nCachedObjects_ = 0; // threshold\n\t\t// note: read by PropertyBinding.Composite\n\n\t\tconst indices = {};\n\t\tthis._indicesByUUID = indices; // for bookkeeping\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tindices[ arguments[ i ].uuid ] = i;\n\n\t\t}\n\n\t\tthis._paths = []; // inside: string\n\t\tthis._parsedPaths = []; // inside: { we don't care, here }\n\t\tthis._bindings = []; // inside: Array< PropertyBinding >\n\t\tthis._bindingsIndicesByPath = {}; // inside: indices in these arrays\n\n\t\tconst scope = this;\n\n\t\tthis.stats = {\n\n\t\t\tobjects: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._objects.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn this.total - scope.nCachedObjects_;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tget bindingsPerObject() {\n\n\t\t\t\treturn scope._bindings.length;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tadd() {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tpaths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet knownObject = undefined,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid;\n\t\t\tlet index = indicesByUUID[ uuid ];\n\n\t\t\tif ( index === undefined ) {\n\n\t\t\t\t// unknown object -> add it to the ACTIVE region\n\n\t\t\t\tindex = nObjects ++;\n\t\t\t\tindicesByUUID[ uuid ] = index;\n\t\t\t\tobjects.push( object );\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tbindings[ j ].push( new PropertyBinding( object, paths[ j ], parsedPaths[ j ] ) );\n\n\t\t\t\t}\n\n\t\t\t} else if ( index < nCachedObjects ) {\n\n\t\t\t\tknownObject = objects[ index ];\n\n\t\t\t\t// move existing object to the ACTIVE region\n\n\t\t\t\tconst firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ];\n\n\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = firstActiveIndex;\n\t\t\t\tobjects[ firstActiveIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ];\n\n\t\t\t\t\tlet binding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\n\t\t\t\t\tif ( binding === undefined ) {\n\n\t\t\t\t\t\t// since we do not bother to create new bindings\n\t\t\t\t\t\t// for objects that are cached, the binding may\n\t\t\t\t\t\t// or may not exist\n\n\t\t\t\t\t\tbinding = new PropertyBinding( object, paths[ j ], parsedPaths[ j ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t} else if ( objects[ index ] !== knownObject ) {\n\n\t\t\t\tconsole.error( 'THREE.AnimationObjectGroup: Different objects with the same UUID ' +\n\t\t\t\t\t'detected. Clean the caches or recreate your infrastructure when reloading scenes.' );\n\n\t\t\t} // else the object is already where we want it to be\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t}\n\n\tremove() {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet nCachedObjects = this.nCachedObjects_;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined && index >= nCachedObjects ) {\n\n\t\t\t\t// move existing object into the CACHED region\n\n\t\t\t\tconst lastCachedIndex = nCachedObjects ++,\n\t\t\t\t\tfirstActiveObject = objects[ lastCachedIndex ];\n\n\t\t\t\tindicesByUUID[ firstActiveObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = firstActiveObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = lastCachedIndex;\n\t\t\t\tobjects[ lastCachedIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tfirstActive = bindingsForPath[ lastCachedIndex ],\n\t\t\t\t\t\tbinding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = firstActive;\n\t\t\t\t\tbindingsForPath[ lastCachedIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t}\n\n\t// remove & forget\n\tuncache() {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet nCachedObjects = this.nCachedObjects_,\n\t\t\tnObjects = objects.length;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined ) {\n\n\t\t\t\tdelete indicesByUUID[ uuid ];\n\n\t\t\t\tif ( index < nCachedObjects ) {\n\n\t\t\t\t\t// object is cached, shrink the CACHED region\n\n\t\t\t\t\tconst firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ],\n\t\t\t\t\t\tlastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\t// last cached object takes this object's place\n\t\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\t\t// last object goes to the activated slot and pop\n\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = firstActiveIndex;\n\t\t\t\t\tobjects[ firstActiveIndex ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ],\n\t\t\t\t\t\t\tlast = bindingsForPath[ lastIndex ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\t\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = last;\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// object is active, just swap with the last and pop\n\n\t\t\t\t\tconst lastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\tif ( lastIndex > 0 ) {\n\n\t\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = index;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobjects[ index ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tconst bindingsForPath = bindings[ j ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = bindingsForPath[ lastIndex ];\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} // cached or active\n\n\t\t\t} // if object is known\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t}\n\n\t// Internal interface used by befriended PropertyBinding.Composite:\n\n\tsubscribe_( path, parsedPath ) {\n\n\t\t// returns an array of bindings for the given path that is changed\n\t\t// according to the contained objects in the group\n\n\t\tconst indicesByPath = this._bindingsIndicesByPath;\n\t\tlet index = indicesByPath[ path ];\n\t\tconst bindings = this._bindings;\n\n\t\tif ( index !== undefined ) return bindings[ index ];\n\n\t\tconst paths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tobjects = this._objects,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\tbindingsForPath = new Array( nObjects );\n\n\t\tindex = bindings.length;\n\n\t\tindicesByPath[ path ] = index;\n\n\t\tpaths.push( path );\n\t\tparsedPaths.push( parsedPath );\n\t\tbindings.push( bindingsForPath );\n\n\t\tfor ( let i = nCachedObjects, n = objects.length; i !== n; ++ i ) {\n\n\t\t\tconst object = objects[ i ];\n\t\t\tbindingsForPath[ i ] = new PropertyBinding( object, path, parsedPath );\n\n\t\t}\n\n\t\treturn bindingsForPath;\n\n\t}\n\n\tunsubscribe_( path ) {\n\n\t\t// tells the group to forget about a property path and no longer\n\t\t// update the array previously obtained with 'subscribe_'\n\n\t\tconst indicesByPath = this._bindingsIndicesByPath,\n\t\t\tindex = indicesByPath[ path ];\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tconst paths = this._paths,\n\t\t\t\tparsedPaths = this._parsedPaths,\n\t\t\t\tbindings = this._bindings,\n\t\t\t\tlastBindingsIndex = bindings.length - 1,\n\t\t\t\tlastBindings = bindings[ lastBindingsIndex ],\n\t\t\t\tlastBindingsPath = path[ lastBindingsIndex ];\n\n\t\t\tindicesByPath[ lastBindingsPath ] = index;\n\n\t\t\tbindings[ index ] = lastBindings;\n\t\t\tbindings.pop();\n\n\t\t\tparsedPaths[ index ] = parsedPaths[ lastBindingsIndex ];\n\t\t\tparsedPaths.pop();\n\n\t\t\tpaths[ index ] = paths[ lastBindingsIndex ];\n\t\t\tpaths.pop();\n\n\t\t}\n\n\t}\n\n}\n\nAnimationObjectGroup.prototype.isAnimationObjectGroup = true;\n\nclass AnimationAction {\n\n\tconstructor( mixer, clip, localRoot = null, blendMode = clip.blendMode ) {\n\n\t\tthis._mixer = mixer;\n\t\tthis._clip = clip;\n\t\tthis._localRoot = localRoot;\n\t\tthis.blendMode = blendMode;\n\n\t\tconst tracks = clip.tracks,\n\t\t\tnTracks = tracks.length,\n\t\t\tinterpolants = new Array( nTracks );\n\n\t\tconst interpolantSettings = {\n\t\t\tendingStart: ZeroCurvatureEnding,\n\t\t\tendingEnd: ZeroCurvatureEnding\n\t\t};\n\n\t\tfor ( let i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tconst interpolant = tracks[ i ].createInterpolant( null );\n\t\t\tinterpolants[ i ] = interpolant;\n\t\t\tinterpolant.settings = interpolantSettings;\n\n\t\t}\n\n\t\tthis._interpolantSettings = interpolantSettings;\n\n\t\tthis._interpolants = interpolants; // bound by the mixer\n\n\t\t// inside: PropertyMixer (managed by the mixer)\n\t\tthis._propertyBindings = new Array( nTracks );\n\n\t\tthis._cacheIndex = null; // for the memory manager\n\t\tthis._byClipCacheIndex = null; // for the memory manager\n\n\t\tthis._timeScaleInterpolant = null;\n\t\tthis._weightInterpolant = null;\n\n\t\tthis.loop = LoopRepeat;\n\t\tthis._loopCount = - 1;\n\n\t\t// global mixer time when the action is to be started\n\t\t// it's set back to 'null' upon start of the action\n\t\tthis._startTime = null;\n\n\t\t// scaled local time of the action\n\t\t// gets clamped or wrapped to 0..clip.duration according to loop\n\t\tthis.time = 0;\n\n\t\tthis.timeScale = 1;\n\t\tthis._effectiveTimeScale = 1;\n\n\t\tthis.weight = 1;\n\t\tthis._effectiveWeight = 1;\n\n\t\tthis.repetitions = Infinity; // no. of repetitions when looping\n\n\t\tthis.paused = false; // true -> zero effective time scale\n\t\tthis.enabled = true; // false -> zero effective weight\n\n\t\tthis.clampWhenFinished = false;// keep feeding the last frame?\n\n\t\tthis.zeroSlopeAtStart = true;// for smooth interpolation w/o separate\n\t\tthis.zeroSlopeAtEnd = true;// clips for start, loop and end\n\n\t}\n\n\t// State & Scheduling\n\n\tplay() {\n\n\t\tthis._mixer._activateAction( this );\n\n\t\treturn this;\n\n\t}\n\n\tstop() {\n\n\t\tthis._mixer._deactivateAction( this );\n\n\t\treturn this.reset();\n\n\t}\n\n\treset() {\n\n\t\tthis.paused = false;\n\t\tthis.enabled = true;\n\n\t\tthis.time = 0; // restart clip\n\t\tthis._loopCount = - 1;// forget previous loops\n\t\tthis._startTime = null;// forget scheduling\n\n\t\treturn this.stopFading().stopWarping();\n\n\t}\n\n\tisRunning() {\n\n\t\treturn this.enabled && ! this.paused && this.timeScale !== 0 &&\n\t\t\tthis._startTime === null && this._mixer._isActiveAction( this );\n\n\t}\n\n\t// return true when play has been called\n\tisScheduled() {\n\n\t\treturn this._mixer._isActiveAction( this );\n\n\t}\n\n\tstartAt( time ) {\n\n\t\tthis._startTime = time;\n\n\t\treturn this;\n\n\t}\n\n\tsetLoop( mode, repetitions ) {\n\n\t\tthis.loop = mode;\n\t\tthis.repetitions = repetitions;\n\n\t\treturn this;\n\n\t}\n\n\t// Weight\n\n\t// set the weight stopping any scheduled fading\n\t// although .enabled = false yields an effective weight of zero, this\n\t// method does *not* change .enabled, because it would be confusing\n\tsetEffectiveWeight( weight ) {\n\n\t\tthis.weight = weight;\n\n\t\t// note: same logic as when updated at runtime\n\t\tthis._effectiveWeight = this.enabled ? weight : 0;\n\n\t\treturn this.stopFading();\n\n\t}\n\n\t// return the weight considering fading and .enabled\n\tgetEffectiveWeight() {\n\n\t\treturn this._effectiveWeight;\n\n\t}\n\n\tfadeIn( duration ) {\n\n\t\treturn this._scheduleFading( duration, 0, 1 );\n\n\t}\n\n\tfadeOut( duration ) {\n\n\t\treturn this._scheduleFading( duration, 1, 0 );\n\n\t}\n\n\tcrossFadeFrom( fadeOutAction, duration, warp ) {\n\n\t\tfadeOutAction.fadeOut( duration );\n\t\tthis.fadeIn( duration );\n\n\t\tif ( warp ) {\n\n\t\t\tconst fadeInDuration = this._clip.duration,\n\t\t\t\tfadeOutDuration = fadeOutAction._clip.duration,\n\n\t\t\t\tstartEndRatio = fadeOutDuration / fadeInDuration,\n\t\t\t\tendStartRatio = fadeInDuration / fadeOutDuration;\n\n\t\t\tfadeOutAction.warp( 1.0, startEndRatio, duration );\n\t\t\tthis.warp( endStartRatio, 1.0, duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcrossFadeTo( fadeInAction, duration, warp ) {\n\n\t\treturn fadeInAction.crossFadeFrom( this, duration, warp );\n\n\t}\n\n\tstopFading() {\n\n\t\tconst weightInterpolant = this._weightInterpolant;\n\n\t\tif ( weightInterpolant !== null ) {\n\n\t\t\tthis._weightInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( weightInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Time Scale Control\n\n\t// set the time scale stopping any scheduled warping\n\t// although .paused = true yields an effective time scale of zero, this\n\t// method does *not* change .paused, because it would be confusing\n\tsetEffectiveTimeScale( timeScale ) {\n\n\t\tthis.timeScale = timeScale;\n\t\tthis._effectiveTimeScale = this.paused ? 0 : timeScale;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\t// return the time scale considering warping and .paused\n\tgetEffectiveTimeScale() {\n\n\t\treturn this._effectiveTimeScale;\n\n\t}\n\n\tsetDuration( duration ) {\n\n\t\tthis.timeScale = this._clip.duration / duration;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\tsyncWith( action ) {\n\n\t\tthis.time = action.time;\n\t\tthis.timeScale = action.timeScale;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\thalt( duration ) {\n\n\t\treturn this.warp( this._effectiveTimeScale, 0, duration );\n\n\t}\n\n\twarp( startTimeScale, endTimeScale, duration ) {\n\n\t\tconst mixer = this._mixer,\n\t\t\tnow = mixer.time,\n\t\t\ttimeScale = this.timeScale;\n\n\t\tlet interpolant = this._timeScaleInterpolant;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._timeScaleInterpolant = interpolant;\n\n\t\t}\n\n\t\tconst times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now;\n\t\ttimes[ 1 ] = now + duration;\n\n\t\tvalues[ 0 ] = startTimeScale / timeScale;\n\t\tvalues[ 1 ] = endTimeScale / timeScale;\n\n\t\treturn this;\n\n\t}\n\n\tstopWarping() {\n\n\t\tconst timeScaleInterpolant = this._timeScaleInterpolant;\n\n\t\tif ( timeScaleInterpolant !== null ) {\n\n\t\t\tthis._timeScaleInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( timeScaleInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Object Accessors\n\n\tgetMixer() {\n\n\t\treturn this._mixer;\n\n\t}\n\n\tgetClip() {\n\n\t\treturn this._clip;\n\n\t}\n\n\tgetRoot() {\n\n\t\treturn this._localRoot || this._mixer._root;\n\n\t}\n\n\t// Interna\n\n\t_update( time, deltaTime, timeDirection, accuIndex ) {\n\n\t\t// called by the mixer\n\n\t\tif ( ! this.enabled ) {\n\n\t\t\t// call ._updateWeight() to update ._effectiveWeight\n\n\t\t\tthis._updateWeight( time );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst startTime = this._startTime;\n\n\t\tif ( startTime !== null ) {\n\n\t\t\t// check for scheduled start of action\n\n\t\t\tconst timeRunning = ( time - startTime ) * timeDirection;\n\t\t\tif ( timeRunning < 0 || timeDirection === 0 ) {\n\n\t\t\t\treturn; // yet to come / don't decide when delta = 0\n\n\t\t\t}\n\n\t\t\t// start\n\n\t\t\tthis._startTime = null; // unschedule\n\t\t\tdeltaTime = timeDirection * timeRunning;\n\n\t\t}\n\n\t\t// apply time scale and advance time\n\n\t\tdeltaTime *= this._updateTimeScale( time );\n\t\tconst clipTime = this._updateTime( deltaTime );\n\n\t\t// note: _updateTime may disable the action resulting in\n\t\t// an effective weight of 0\n\n\t\tconst weight = this._updateWeight( time );\n\n\t\tif ( weight > 0 ) {\n\n\t\t\tconst interpolants = this._interpolants;\n\t\t\tconst propertyMixers = this._propertyBindings;\n\n\t\t\tswitch ( this.blendMode ) {\n\n\t\t\t\tcase AdditiveAnimationBlendMode:\n\n\t\t\t\t\tfor ( let j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\t\t\tpropertyMixers[ j ].accumulateAdditive( weight );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase NormalAnimationBlendMode:\n\t\t\t\tdefault:\n\n\t\t\t\t\tfor ( let j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\t\t\tpropertyMixers[ j ].accumulate( accuIndex, weight );\n\n\t\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_updateWeight( time ) {\n\n\t\tlet weight = 0;\n\n\t\tif ( this.enabled ) {\n\n\t\t\tweight = this.weight;\n\t\t\tconst interpolant = this._weightInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tconst interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\tweight *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopFading();\n\n\t\t\t\t\tif ( interpolantValue === 0 ) {\n\n\t\t\t\t\t\t// faded out, disable\n\t\t\t\t\t\tthis.enabled = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._effectiveWeight = weight;\n\t\treturn weight;\n\n\t}\n\n\t_updateTimeScale( time ) {\n\n\t\tlet timeScale = 0;\n\n\t\tif ( ! this.paused ) {\n\n\t\t\ttimeScale = this.timeScale;\n\n\t\t\tconst interpolant = this._timeScaleInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tconst interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\ttimeScale *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopWarping();\n\n\t\t\t\t\tif ( timeScale === 0 ) {\n\n\t\t\t\t\t\t// motion has halted, pause\n\t\t\t\t\t\tthis.paused = true;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// warp done - apply final time scale\n\t\t\t\t\t\tthis.timeScale = timeScale;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._effectiveTimeScale = timeScale;\n\t\treturn timeScale;\n\n\t}\n\n\t_updateTime( deltaTime ) {\n\n\t\tconst duration = this._clip.duration;\n\t\tconst loop = this.loop;\n\n\t\tlet time = this.time + deltaTime;\n\t\tlet loopCount = this._loopCount;\n\n\t\tconst pingPong = ( loop === LoopPingPong );\n\n\t\tif ( deltaTime === 0 ) {\n\n\t\t\tif ( loopCount === - 1 ) return time;\n\n\t\t\treturn ( pingPong && ( loopCount & 1 ) === 1 ) ? duration - time : time;\n\n\t\t}\n\n\t\tif ( loop === LoopOnce ) {\n\n\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tthis._loopCount = 0;\n\t\t\t\tthis._setEndings( true, true, false );\n\n\t\t\t}\n\n\t\t\thandle_stop: {\n\n\t\t\t\tif ( time >= duration ) {\n\n\t\t\t\t\ttime = duration;\n\n\t\t\t\t} else if ( time < 0 ) {\n\n\t\t\t\t\ttime = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tbreak handle_stop;\n\n\t\t\t\t}\n\n\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\telse this.enabled = false;\n\n\t\t\t\tthis.time = time;\n\n\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\tdirection: deltaTime < 0 ? - 1 : 1\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t} else { // repetitive Repeat or PingPong\n\n\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tif ( deltaTime >= 0 ) {\n\n\t\t\t\t\tloopCount = 0;\n\n\t\t\t\t\tthis._setEndings( true, this.repetitions === 0, pingPong );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// when looping in reverse direction, the initial\n\t\t\t\t\t// transition through zero counts as a repetition,\n\t\t\t\t\t// so leave loopCount at -1\n\n\t\t\t\t\tthis._setEndings( this.repetitions === 0, true, pingPong );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( time >= duration || time < 0 ) {\n\n\t\t\t\t// wrap around\n\n\t\t\t\tconst loopDelta = Math.floor( time / duration ); // signed\n\t\t\t\ttime -= duration * loopDelta;\n\n\t\t\t\tloopCount += Math.abs( loopDelta );\n\n\t\t\t\tconst pending = this.repetitions - loopCount;\n\n\t\t\t\tif ( pending <= 0 ) {\n\n\t\t\t\t\t// have to stop (switch state, clamp time, fire event)\n\n\t\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\t\telse this.enabled = false;\n\n\t\t\t\t\ttime = deltaTime > 0 ? duration : 0;\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\t\tdirection: deltaTime > 0 ? 1 : - 1\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// keep running\n\n\t\t\t\t\tif ( pending === 1 ) {\n\n\t\t\t\t\t\t// entering the last round\n\n\t\t\t\t\t\tconst atStart = deltaTime < 0;\n\t\t\t\t\t\tthis._setEndings( atStart, ! atStart, pingPong );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis._setEndings( false, false, pingPong );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._loopCount = loopCount;\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'loop', action: this, loopDelta: loopDelta\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tthis.time = time;\n\n\t\t\t}\n\n\t\t\tif ( pingPong && ( loopCount & 1 ) === 1 ) {\n\n\t\t\t\t// invert time for the \"pong round\"\n\n\t\t\t\treturn duration - time;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn time;\n\n\t}\n\n\t_setEndings( atStart, atEnd, pingPong ) {\n\n\t\tconst settings = this._interpolantSettings;\n\n\t\tif ( pingPong ) {\n\n\t\t\tsettings.endingStart = ZeroSlopeEnding;\n\t\t\tsettings.endingEnd = ZeroSlopeEnding;\n\n\t\t} else {\n\n\t\t\t// assuming for LoopOnce atStart == atEnd == true\n\n\t\t\tif ( atStart ) {\n\n\t\t\t\tsettings.endingStart = this.zeroSlopeAtStart ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingStart = WrapAroundEnding;\n\n\t\t\t}\n\n\t\t\tif ( atEnd ) {\n\n\t\t\t\tsettings.endingEnd = this.zeroSlopeAtEnd ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingEnd \t = WrapAroundEnding;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_scheduleFading( duration, weightNow, weightThen ) {\n\n\t\tconst mixer = this._mixer, now = mixer.time;\n\t\tlet interpolant = this._weightInterpolant;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._weightInterpolant = interpolant;\n\n\t\t}\n\n\t\tconst times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now;\n\t\tvalues[ 0 ] = weightNow;\n\t\ttimes[ 1 ] = now + duration;\n\t\tvalues[ 1 ] = weightThen;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass AnimationMixer extends EventDispatcher {\n\n\tconstructor( root ) {\n\n\t\tsuper();\n\n\t\tthis._root = root;\n\t\tthis._initMemoryManager();\n\t\tthis._accuIndex = 0;\n\t\tthis.time = 0;\n\t\tthis.timeScale = 1.0;\n\n\t}\n\n\t_bindAction( action, prototypeAction ) {\n\n\t\tconst root = action._localRoot || this._root,\n\t\t\ttracks = action._clip.tracks,\n\t\t\tnTracks = tracks.length,\n\t\t\tbindings = action._propertyBindings,\n\t\t\tinterpolants = action._interpolants,\n\t\t\trootUuid = root.uuid,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName;\n\n\t\tlet bindingsByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingsByName === undefined ) {\n\n\t\t\tbindingsByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingsByName;\n\n\t\t}\n\n\t\tfor ( let i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tconst track = tracks[ i ],\n\t\t\t\ttrackName = track.name;\n\n\t\t\tlet binding = bindingsByName[ trackName ];\n\n\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t} else {\n\n\t\t\t\tbinding = bindings[ i ];\n\n\t\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\t\t// existing binding, make sure the cache knows\n\n\t\t\t\t\tif ( binding._cacheIndex === null ) {\n\n\t\t\t\t\t\t++ binding.referenceCount;\n\t\t\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tconst path = prototypeAction && prototypeAction.\n\t\t\t\t\t_propertyBindings[ i ].binding.parsedPath;\n\n\t\t\t\tbinding = new PropertyMixer(\n\t\t\t\t\tPropertyBinding.create( root, trackName, path ),\n\t\t\t\t\ttrack.ValueTypeName, track.getValueSize() );\n\n\t\t\t\t++ binding.referenceCount;\n\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t}\n\n\t\t\tinterpolants[ i ].resultBuffer = binding.buffer;\n\n\t\t}\n\n\t}\n\n\t_activateAction( action ) {\n\n\t\tif ( ! this._isActiveAction( action ) ) {\n\n\t\t\tif ( action._cacheIndex === null ) {\n\n\t\t\t\t// this action has been forgotten by the cache, but the user\n\t\t\t\t// appears to be still using it -> rebind\n\n\t\t\t\tconst rootUuid = ( action._localRoot || this._root ).uuid,\n\t\t\t\t\tclipUuid = action._clip.uuid,\n\t\t\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\t\t\tthis._bindAction( action,\n\t\t\t\t\tactionsForClip && actionsForClip.knownActions[ 0 ] );\n\n\t\t\t\tthis._addInactiveAction( action, clipUuid, rootUuid );\n\n\t\t\t}\n\n\t\t\tconst bindings = action._propertyBindings;\n\n\t\t\t// increment reference counts / sort out state\n\t\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tconst binding = bindings[ i ];\n\n\t\t\t\tif ( binding.useCount ++ === 0 ) {\n\n\t\t\t\t\tthis._lendBinding( binding );\n\t\t\t\t\tbinding.saveOriginalState();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._lendAction( action );\n\n\t\t}\n\n\t}\n\n\t_deactivateAction( action ) {\n\n\t\tif ( this._isActiveAction( action ) ) {\n\n\t\t\tconst bindings = action._propertyBindings;\n\n\t\t\t// decrement reference counts / sort out state\n\t\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tconst binding = bindings[ i ];\n\n\t\t\t\tif ( -- binding.useCount === 0 ) {\n\n\t\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\t\tthis._takeBackBinding( binding );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._takeBackAction( action );\n\n\t\t}\n\n\t}\n\n\t// Memory manager\n\n\t_initMemoryManager() {\n\n\t\tthis._actions = []; // 'nActiveActions' followed by inactive ones\n\t\tthis._nActiveActions = 0;\n\n\t\tthis._actionsByClip = {};\n\t\t// inside:\n\t\t// {\n\t\t// \tknownActions: Array< AnimationAction > - used as prototypes\n\t\t// \tactionByRoot: AnimationAction - lookup\n\t\t// }\n\n\n\t\tthis._bindings = []; // 'nActiveBindings' followed by inactive ones\n\t\tthis._nActiveBindings = 0;\n\n\t\tthis._bindingsByRootAndName = {}; // inside: Map< name, PropertyMixer >\n\n\n\t\tthis._controlInterpolants = []; // same game as above\n\t\tthis._nActiveControlInterpolants = 0;\n\n\t\tconst scope = this;\n\n\t\tthis.stats = {\n\n\t\t\tactions: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._actions.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveActions;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tbindings: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._bindings.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveBindings;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tcontrolInterpolants: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._controlInterpolants.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveControlInterpolants;\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t// Memory management for AnimationAction objects\n\n\t_isActiveAction( action ) {\n\n\t\tconst index = action._cacheIndex;\n\t\treturn index !== null && index < this._nActiveActions;\n\n\t}\n\n\t_addInactiveAction( action, clipUuid, rootUuid ) {\n\n\t\tconst actions = this._actions,\n\t\t\tactionsByClip = this._actionsByClip;\n\n\t\tlet actionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip === undefined ) {\n\n\t\t\tactionsForClip = {\n\n\t\t\t\tknownActions: [ action ],\n\t\t\t\tactionByRoot: {}\n\n\t\t\t};\n\n\t\t\taction._byClipCacheIndex = 0;\n\n\t\t\tactionsByClip[ clipUuid ] = actionsForClip;\n\n\t\t} else {\n\n\t\t\tconst knownActions = actionsForClip.knownActions;\n\n\t\t\taction._byClipCacheIndex = knownActions.length;\n\t\t\tknownActions.push( action );\n\n\t\t}\n\n\t\taction._cacheIndex = actions.length;\n\t\tactions.push( action );\n\n\t\tactionsForClip.actionByRoot[ rootUuid ] = action;\n\n\t}\n\n\t_removeInactiveAction( action ) {\n\n\t\tconst actions = this._actions,\n\t\t\tlastInactiveAction = actions[ actions.length - 1 ],\n\t\t\tcacheIndex = action._cacheIndex;\n\n\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\tactions.pop();\n\n\t\taction._cacheIndex = null;\n\n\n\t\tconst clipUuid = action._clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ],\n\t\t\tknownActionsForClip = actionsForClip.knownActions,\n\n\t\t\tlastKnownAction =\n\t\t\t\tknownActionsForClip[ knownActionsForClip.length - 1 ],\n\n\t\t\tbyClipCacheIndex = action._byClipCacheIndex;\n\n\t\tlastKnownAction._byClipCacheIndex = byClipCacheIndex;\n\t\tknownActionsForClip[ byClipCacheIndex ] = lastKnownAction;\n\t\tknownActionsForClip.pop();\n\n\t\taction._byClipCacheIndex = null;\n\n\n\t\tconst actionByRoot = actionsForClip.actionByRoot,\n\t\t\trootUuid = ( action._localRoot || this._root ).uuid;\n\n\t\tdelete actionByRoot[ rootUuid ];\n\n\t\tif ( knownActionsForClip.length === 0 ) {\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t\tthis._removeInactiveBindingsForAction( action );\n\n\t}\n\n\t_removeInactiveBindingsForAction( action ) {\n\n\t\tconst bindings = action._propertyBindings;\n\n\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tconst binding = bindings[ i ];\n\n\t\t\tif ( -- binding.referenceCount === 0 ) {\n\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_lendAction( action ) {\n\n\t\t// [ active actions | inactive actions ]\n\t\t// [ active actions >| inactive actions ]\n\t\t// s a\n\t\t// <-swap->\n\t\t// a s\n\n\t\tconst actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveActions ++,\n\n\t\t\tfirstInactiveAction = actions[ lastActiveIndex ];\n\n\t\taction._cacheIndex = lastActiveIndex;\n\t\tactions[ lastActiveIndex ] = action;\n\n\t\tfirstInactiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = firstInactiveAction;\n\n\t}\n\n\t_takeBackAction( action ) {\n\n\t\t// [ active actions | inactive actions ]\n\t\t// [ active actions |< inactive actions ]\n\t\t// a s\n\t\t// <-swap->\n\t\t// s a\n\n\t\tconst actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveActions,\n\n\t\t\tlastActiveAction = actions[ firstInactiveIndex ];\n\n\t\taction._cacheIndex = firstInactiveIndex;\n\t\tactions[ firstInactiveIndex ] = action;\n\n\t\tlastActiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = lastActiveAction;\n\n\t}\n\n\t// Memory management for PropertyMixer objects\n\n\t_addInactiveBinding( binding, rootUuid, trackName ) {\n\n\t\tconst bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindings = this._bindings;\n\n\t\tlet bindingByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingByName === undefined ) {\n\n\t\t\tbindingByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingByName;\n\n\t\t}\n\n\t\tbindingByName[ trackName ] = binding;\n\n\t\tbinding._cacheIndex = bindings.length;\n\t\tbindings.push( binding );\n\n\t}\n\n\t_removeInactiveBinding( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tpropBinding = binding.binding,\n\t\t\trootUuid = propBinding.rootNode.uuid,\n\t\t\ttrackName = propBinding.path,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ],\n\n\t\t\tlastInactiveBinding = bindings[ bindings.length - 1 ],\n\t\t\tcacheIndex = binding._cacheIndex;\n\n\t\tlastInactiveBinding._cacheIndex = cacheIndex;\n\t\tbindings[ cacheIndex ] = lastInactiveBinding;\n\t\tbindings.pop();\n\n\t\tdelete bindingByName[ trackName ];\n\n\t\tif ( Object.keys( bindingByName ).length === 0 ) {\n\n\t\t\tdelete bindingsByRoot[ rootUuid ];\n\n\t\t}\n\n\t}\n\n\t_lendBinding( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveBindings ++,\n\n\t\t\tfirstInactiveBinding = bindings[ lastActiveIndex ];\n\n\t\tbinding._cacheIndex = lastActiveIndex;\n\t\tbindings[ lastActiveIndex ] = binding;\n\n\t\tfirstInactiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = firstInactiveBinding;\n\n\t}\n\n\t_takeBackBinding( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveBindings,\n\n\t\t\tlastActiveBinding = bindings[ firstInactiveIndex ];\n\n\t\tbinding._cacheIndex = firstInactiveIndex;\n\t\tbindings[ firstInactiveIndex ] = binding;\n\n\t\tlastActiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = lastActiveBinding;\n\n\t}\n\n\n\t// Memory management of Interpolants for weight and time scale\n\n\t_lendControlInterpolant() {\n\n\t\tconst interpolants = this._controlInterpolants,\n\t\t\tlastActiveIndex = this._nActiveControlInterpolants ++;\n\n\t\tlet interpolant = interpolants[ lastActiveIndex ];\n\n\t\tif ( interpolant === undefined ) {\n\n\t\t\tinterpolant = new LinearInterpolant(\n\t\t\t\tnew Float32Array( 2 ), new Float32Array( 2 ),\n\t\t\t\t1, this._controlInterpolantsResultBuffer );\n\n\t\t\tinterpolant.__cacheIndex = lastActiveIndex;\n\t\t\tinterpolants[ lastActiveIndex ] = interpolant;\n\n\t\t}\n\n\t\treturn interpolant;\n\n\t}\n\n\t_takeBackControlInterpolant( interpolant ) {\n\n\t\tconst interpolants = this._controlInterpolants,\n\t\t\tprevIndex = interpolant.__cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveControlInterpolants,\n\n\t\t\tlastActiveInterpolant = interpolants[ firstInactiveIndex ];\n\n\t\tinterpolant.__cacheIndex = firstInactiveIndex;\n\t\tinterpolants[ firstInactiveIndex ] = interpolant;\n\n\t\tlastActiveInterpolant.__cacheIndex = prevIndex;\n\t\tinterpolants[ prevIndex ] = lastActiveInterpolant;\n\n\t}\n\n\t// return an action for a clip optionally using a custom root target\n\t// object (this method allocates a lot of dynamic memory in case a\n\t// previously unknown clip/root combination is specified)\n\tclipAction( clip, optionalRoot, blendMode ) {\n\n\t\tconst root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid;\n\n\t\tlet clipObject = typeof clip === 'string' ? AnimationClip.findByName( root, clip ) : clip;\n\n\t\tconst clipUuid = clipObject !== null ? clipObject.uuid : clip;\n\n\t\tconst actionsForClip = this._actionsByClip[ clipUuid ];\n\t\tlet prototypeAction = null;\n\n\t\tif ( blendMode === undefined ) {\n\n\t\t\tif ( clipObject !== null ) {\n\n\t\t\t\tblendMode = clipObject.blendMode;\n\n\t\t\t} else {\n\n\t\t\t\tblendMode = NormalAnimationBlendMode;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\tconst existingAction = actionsForClip.actionByRoot[ rootUuid ];\n\n\t\t\tif ( existingAction !== undefined && existingAction.blendMode === blendMode ) {\n\n\t\t\t\treturn existingAction;\n\n\t\t\t}\n\n\t\t\t// we know the clip, so we don't have to parse all\n\t\t\t// the bindings again but can just copy\n\t\t\tprototypeAction = actionsForClip.knownActions[ 0 ];\n\n\t\t\t// also, take the clip from the prototype action\n\t\t\tif ( clipObject === null )\n\t\t\t\tclipObject = prototypeAction._clip;\n\n\t\t}\n\n\t\t// clip must be known when specified via string\n\t\tif ( clipObject === null ) return null;\n\n\t\t// allocate all resources required to run it\n\t\tconst newAction = new AnimationAction( this, clipObject, optionalRoot, blendMode );\n\n\t\tthis._bindAction( newAction, prototypeAction );\n\n\t\t// and make the action known to the memory manager\n\t\tthis._addInactiveAction( newAction, clipUuid, rootUuid );\n\n\t\treturn newAction;\n\n\t}\n\n\t// get an existing action\n\texistingAction( clip, optionalRoot ) {\n\n\t\tconst root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid,\n\n\t\t\tclipObject = typeof clip === 'string' ?\n\t\t\t\tAnimationClip.findByName( root, clip ) : clip,\n\n\t\t\tclipUuid = clipObject ? clipObject.uuid : clip,\n\n\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\treturn actionsForClip.actionByRoot[ rootUuid ] || null;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t// deactivates all previously scheduled actions\n\tstopAllAction() {\n\n\t\tconst actions = this._actions,\n\t\t\tnActions = this._nActiveActions;\n\n\t\tfor ( let i = nActions - 1; i >= 0; -- i ) {\n\n\t\t\tactions[ i ].stop();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// advance the time and update apply the animation\n\tupdate( deltaTime ) {\n\n\t\tdeltaTime *= this.timeScale;\n\n\t\tconst actions = this._actions,\n\t\t\tnActions = this._nActiveActions,\n\n\t\t\ttime = this.time += deltaTime,\n\t\t\ttimeDirection = Math.sign( deltaTime ),\n\n\t\t\taccuIndex = this._accuIndex ^= 1;\n\n\t\t// run active actions\n\n\t\tfor ( let i = 0; i !== nActions; ++ i ) {\n\n\t\t\tconst action = actions[ i ];\n\n\t\t\taction._update( time, deltaTime, timeDirection, accuIndex );\n\n\t\t}\n\n\t\t// update scene graph\n\n\t\tconst bindings = this._bindings,\n\t\t\tnBindings = this._nActiveBindings;\n\n\t\tfor ( let i = 0; i !== nBindings; ++ i ) {\n\n\t\t\tbindings[ i ].apply( accuIndex );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Allows you to seek to a specific time in an animation.\n\tsetTime( timeInSeconds ) {\n\n\t\tthis.time = 0; // Zero out time attribute for AnimationMixer object;\n\t\tfor ( let i = 0; i < this._actions.length; i ++ ) {\n\n\t\t\tthis._actions[ i ].time = 0; // Zero out time attribute for all associated AnimationAction objects.\n\n\t\t}\n\n\t\treturn this.update( timeInSeconds ); // Update used to set exact time. Returns \"this\" AnimationMixer object.\n\n\t}\n\n\t// return this mixer's root target object\n\tgetRoot() {\n\n\t\treturn this._root;\n\n\t}\n\n\t// free all resources specific to a particular clip\n\tuncacheClip( clip ) {\n\n\t\tconst actions = this._actions,\n\t\t\tclipUuid = clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\t// note: just calling _removeInactiveAction would mess up the\n\t\t\t// iteration state and also require updating the state we can\n\t\t\t// just throw away\n\n\t\t\tconst actionsToRemove = actionsForClip.knownActions;\n\n\t\t\tfor ( let i = 0, n = actionsToRemove.length; i !== n; ++ i ) {\n\n\t\t\t\tconst action = actionsToRemove[ i ];\n\n\t\t\t\tthis._deactivateAction( action );\n\n\t\t\t\tconst cacheIndex = action._cacheIndex,\n\t\t\t\t\tlastInactiveAction = actions[ actions.length - 1 ];\n\n\t\t\t\taction._cacheIndex = null;\n\t\t\t\taction._byClipCacheIndex = null;\n\n\t\t\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\t\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\t\t\tactions.pop();\n\n\t\t\t\tthis._removeInactiveBindingsForAction( action );\n\n\t\t\t}\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t}\n\n\t// free all resources specific to a particular root target object\n\tuncacheRoot( root ) {\n\n\t\tconst rootUuid = root.uuid,\n\t\t\tactionsByClip = this._actionsByClip;\n\n\t\tfor ( const clipUuid in actionsByClip ) {\n\n\t\t\tconst actionByRoot = actionsByClip[ clipUuid ].actionByRoot,\n\t\t\t\taction = actionByRoot[ rootUuid ];\n\n\t\t\tif ( action !== undefined ) {\n\n\t\t\t\tthis._deactivateAction( action );\n\t\t\t\tthis._removeInactiveAction( action );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingByName !== undefined ) {\n\n\t\t\tfor ( const trackName in bindingByName ) {\n\n\t\t\t\tconst binding = bindingByName[ trackName ];\n\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// remove a targeted clip from the cache\n\tuncacheAction( clip, optionalRoot ) {\n\n\t\tconst action = this.existingAction( clip, optionalRoot );\n\n\t\tif ( action !== null ) {\n\n\t\t\tthis._deactivateAction( action );\n\t\t\tthis._removeInactiveAction( action );\n\n\t\t}\n\n\t}\n\n}\n\nAnimationMixer.prototype._controlInterpolantsResultBuffer = new Float32Array( 1 );\n\nclass Uniform {\n\n\tconstructor( value ) {\n\n\t\tif ( typeof value === 'string' ) {\n\n\t\t\tconsole.warn( 'THREE.Uniform: Type parameter is no longer needed.' );\n\t\t\tvalue = arguments[ 1 ];\n\n\t\t}\n\n\t\tthis.value = value;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Uniform( this.value.clone === undefined ? this.value : this.value.clone() );\n\n\t}\n\n}\n\nclass InstancedInterleavedBuffer extends InterleavedBuffer {\n\n\tconstructor( array, stride, meshPerAttribute = 1 ) {\n\n\t\tsuper( array, stride );\n\n\t\tthis.meshPerAttribute = meshPerAttribute;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t}\n\n\tclone( data ) {\n\n\t\tconst ib = super.clone( data );\n\n\t\tib.meshPerAttribute = this.meshPerAttribute;\n\n\t\treturn ib;\n\n\t}\n\n\ttoJSON( data ) {\n\n\t\tconst json = super.toJSON( data );\n\n\t\tjson.isInstancedInterleavedBuffer = true;\n\t\tjson.meshPerAttribute = this.meshPerAttribute;\n\n\t\treturn json;\n\n\t}\n\n}\n\nInstancedInterleavedBuffer.prototype.isInstancedInterleavedBuffer = true;\n\nclass GLBufferAttribute {\n\n\tconstructor( buffer, type, itemSize, elementSize, count ) {\n\n\t\tthis.buffer = buffer;\n\t\tthis.type = type;\n\t\tthis.itemSize = itemSize;\n\t\tthis.elementSize = elementSize;\n\t\tthis.count = count;\n\n\t\tthis.version = 0;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tsetBuffer( buffer ) {\n\n\t\tthis.buffer = buffer;\n\n\t\treturn this;\n\n\t}\n\n\tsetType( type, elementSize ) {\n\n\t\tthis.type = type;\n\t\tthis.elementSize = elementSize;\n\n\t\treturn this;\n\n\t}\n\n\tsetItemSize( itemSize ) {\n\n\t\tthis.itemSize = itemSize;\n\n\t\treturn this;\n\n\t}\n\n\tsetCount( count ) {\n\n\t\tthis.count = count;\n\n\t\treturn this;\n\n\t}\n\n}\n\nGLBufferAttribute.prototype.isGLBufferAttribute = true;\n\nclass Raycaster {\n\n\tconstructor( origin, direction, near = 0, far = Infinity ) {\n\n\t\tthis.ray = new Ray( origin, direction );\n\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\t\tthis.camera = null;\n\t\tthis.layers = new Layers();\n\n\t\tthis.params = {\n\t\t\tMesh: {},\n\t\t\tLine: { threshold: 1 },\n\t\t\tLOD: {},\n\t\t\tPoints: { threshold: 1 },\n\t\t\tSprite: {}\n\t\t};\n\n\t}\n\n\tset( origin, direction ) {\n\n\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\t\tthis.ray.set( origin, direction );\n\n\t}\n\n\tsetFromCamera( coords, camera ) {\n\n\t\tif ( camera && camera.isPerspectiveCamera ) {\n\n\t\t\tthis.ray.origin.setFromMatrixPosition( camera.matrixWorld );\n\t\t\tthis.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize();\n\t\t\tthis.camera = camera;\n\n\t\t} else if ( camera && camera.isOrthographicCamera ) {\n\n\t\t\tthis.ray.origin.set( coords.x, coords.y, ( camera.near + camera.far ) / ( camera.near - camera.far ) ).unproject( camera ); // set origin in plane of camera\n\t\t\tthis.ray.direction.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld );\n\t\t\tthis.camera = camera;\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Raycaster: Unsupported camera type: ' + camera.type );\n\n\t\t}\n\n\t}\n\n\tintersectObject( object, recursive = true, intersects = [] ) {\n\n\t\tintersectObject( object, this, intersects, recursive );\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t}\n\n\tintersectObjects( objects, recursive = true, intersects = [] ) {\n\n\t\tfor ( let i = 0, l = objects.length; i < l; i ++ ) {\n\n\t\t\tintersectObject( objects[ i ], this, intersects, recursive );\n\n\t\t}\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t}\n\n}\n\nfunction ascSort( a, b ) {\n\n\treturn a.distance - b.distance;\n\n}\n\nfunction intersectObject( object, raycaster, intersects, recursive ) {\n\n\tif ( object.layers.test( raycaster.layers ) ) {\n\n\t\tobject.raycast( raycaster, intersects );\n\n\t}\n\n\tif ( recursive === true ) {\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tintersectObject( children[ i ], raycaster, intersects, true );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system\n *\n * The polar angle (phi) is measured from the positive y-axis. The positive y-axis is up.\n * The azimuthal angle (theta) is measured from the positive z-axis.\n */\n\nclass Spherical {\n\n\tconstructor( radius = 1, phi = 0, theta = 0 ) {\n\n\t\tthis.radius = radius;\n\t\tthis.phi = phi; // polar angle\n\t\tthis.theta = theta; // azimuthal angle\n\n\t\treturn this;\n\n\t}\n\n\tset( radius, phi, theta ) {\n\n\t\tthis.radius = radius;\n\t\tthis.phi = phi;\n\t\tthis.theta = theta;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( other ) {\n\n\t\tthis.radius = other.radius;\n\t\tthis.phi = other.phi;\n\t\tthis.theta = other.theta;\n\n\t\treturn this;\n\n\t}\n\n\t// restrict phi to be betwee EPS and PI-EPS\n\tmakeSafe() {\n\n\t\tconst EPS = 0.000001;\n\t\tthis.phi = Math.max( EPS, Math.min( Math.PI - EPS, this.phi ) );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromVector3( v ) {\n\n\t\treturn this.setFromCartesianCoords( v.x, v.y, v.z );\n\n\t}\n\n\tsetFromCartesianCoords( x, y, z ) {\n\n\t\tthis.radius = Math.sqrt( x * x + y * y + z * z );\n\n\t\tif ( this.radius === 0 ) {\n\n\t\t\tthis.theta = 0;\n\t\t\tthis.phi = 0;\n\n\t\t} else {\n\n\t\t\tthis.theta = Math.atan2( x, z );\n\t\t\tthis.phi = Math.acos( clamp( y / this.radius, - 1, 1 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\n/**\n * Ref: https://en.wikipedia.org/wiki/Cylindrical_coordinate_system\n */\n\nclass Cylindrical {\n\n\tconstructor( radius = 1, theta = 0, y = 0 ) {\n\n\t\tthis.radius = radius; // distance from the origin to a point in the x-z plane\n\t\tthis.theta = theta; // counterclockwise angle in the x-z plane measured in radians from the positive z-axis\n\t\tthis.y = y; // height above the x-z plane\n\n\t\treturn this;\n\n\t}\n\n\tset( radius, theta, y ) {\n\n\t\tthis.radius = radius;\n\t\tthis.theta = theta;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( other ) {\n\n\t\tthis.radius = other.radius;\n\t\tthis.theta = other.theta;\n\t\tthis.y = other.y;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromVector3( v ) {\n\n\t\treturn this.setFromCartesianCoords( v.x, v.y, v.z );\n\n\t}\n\n\tsetFromCartesianCoords( x, y, z ) {\n\n\t\tthis.radius = Math.sqrt( x * x + z * z );\n\t\tthis.theta = Math.atan2( x, z );\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _vector$4 = /*@__PURE__*/ new Vector2();\n\nclass Box2 {\n\n\tconstructor( min = new Vector2( + Infinity, + Infinity ), max = new Vector2( - Infinity, - Infinity ) ) {\n\n\t\tthis.min = min;\n\t\tthis.max = max;\n\n\t}\n\n\tset( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCenterAndSize( center, size ) {\n\n\t\tconst halfSize = _vector$4.copy( size ).multiplyScalar( 0.5 );\n\t\tthis.min.copy( center ).sub( halfSize );\n\t\tthis.max.copy( center ).add( halfSize );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.min.x = this.min.y = + Infinity;\n\t\tthis.max.x = this.max.y = - Infinity;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y );\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t}\n\n\tgetSize( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t}\n\n\texpandByVector( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t}\n\n\texpandByScalar( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn point.x < this.min.x || point.x > this.max.x ||\n\t\t\tpoint.y < this.min.y || point.y > this.max.y ? false : true;\n\n\t}\n\n\tcontainsBox( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y;\n\n\t}\n\n\tgetParameter( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y )\n\t\t);\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\t// using 4 splitting planes to rule out intersections\n\n\t\treturn box.max.x < this.min.x || box.min.x > this.max.x ||\n\t\t\tbox.max.y < this.min.y || box.min.y > this.max.y ? false : true;\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\tconst clampedPoint = _vector$4.copy( point ).clamp( this.min, this.max );\n\t\treturn clampedPoint.sub( point ).length();\n\n\t}\n\n\tintersect( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tunion( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\tequals( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n}\n\nBox2.prototype.isBox2 = true;\n\nconst _startP = /*@__PURE__*/ new Vector3();\nconst _startEnd = /*@__PURE__*/ new Vector3();\n\nclass Line3 {\n\n\tconstructor( start = new Vector3(), end = new Vector3() ) {\n\n\t\tthis.start = start;\n\t\tthis.end = end;\n\n\t}\n\n\tset( start, end ) {\n\n\t\tthis.start.copy( start );\n\t\tthis.end.copy( end );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( line ) {\n\n\t\tthis.start.copy( line.start );\n\t\tthis.end.copy( line.end );\n\n\t\treturn this;\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\treturn target.addVectors( this.start, this.end ).multiplyScalar( 0.5 );\n\n\t}\n\n\tdelta( target ) {\n\n\t\treturn target.subVectors( this.end, this.start );\n\n\t}\n\n\tdistanceSq() {\n\n\t\treturn this.start.distanceToSquared( this.end );\n\n\t}\n\n\tdistance() {\n\n\t\treturn this.start.distanceTo( this.end );\n\n\t}\n\n\tat( t, target ) {\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t}\n\n\tclosestPointToPointParameter( point, clampToLine ) {\n\n\t\t_startP.subVectors( point, this.start );\n\t\t_startEnd.subVectors( this.end, this.start );\n\n\t\tconst startEnd2 = _startEnd.dot( _startEnd );\n\t\tconst startEnd_startP = _startEnd.dot( _startP );\n\n\t\tlet t = startEnd_startP / startEnd2;\n\n\t\tif ( clampToLine ) {\n\n\t\t\tt = clamp( t, 0, 1 );\n\n\t\t}\n\n\t\treturn t;\n\n\t}\n\n\tclosestPointToPoint( point, clampToLine, target ) {\n\n\t\tconst t = this.closestPointToPointParameter( point, clampToLine );\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tthis.start.applyMatrix4( matrix );\n\t\tthis.end.applyMatrix4( matrix );\n\n\t\treturn this;\n\n\t}\n\n\tequals( line ) {\n\n\t\treturn line.start.equals( this.start ) && line.end.equals( this.end );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nclass ImmediateRenderObject extends Object3D {\n\n\tconstructor( material ) {\n\n\t\tsuper();\n\n\t\tthis.material = material;\n\t\tthis.render = function ( /* renderCallback */ ) {};\n\n\t\tthis.hasPositions = false;\n\t\tthis.hasNormals = false;\n\t\tthis.hasColors = false;\n\t\tthis.hasUvs = false;\n\n\t\tthis.positionArray = null;\n\t\tthis.normalArray = null;\n\t\tthis.colorArray = null;\n\t\tthis.uvArray = null;\n\n\t\tthis.count = 0;\n\n\t}\n\n}\n\nImmediateRenderObject.prototype.isImmediateRenderObject = true;\n\nconst _vector$3 = /*@__PURE__*/ new Vector3();\n\nclass SpotLightHelper extends Object3D {\n\n\tconstructor( light, color ) {\n\n\t\tsuper();\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tconst positions = [\n\t\t\t0, 0, 0, \t0, 0, 1,\n\t\t\t0, 0, 0, \t1, 0, 1,\n\t\t\t0, 0, 0,\t- 1, 0, 1,\n\t\t\t0, 0, 0, \t0, 1, 1,\n\t\t\t0, 0, 0, \t0, - 1, 1\n\t\t];\n\n\t\tfor ( let i = 0, j = 1, l = 32; i < l; i ++, j ++ ) {\n\n\t\t\tconst p1 = ( i / l ) * Math.PI * 2;\n\t\t\tconst p2 = ( j / l ) * Math.PI * 2;\n\n\t\t\tpositions.push(\n\t\t\t\tMath.cos( p1 ), Math.sin( p1 ), 1,\n\t\t\t\tMath.cos( p2 ), Math.sin( p2 ), 1\n\t\t\t);\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { fog: false, toneMapped: false } );\n\n\t\tthis.cone = new LineSegments( geometry, material );\n\t\tthis.add( this.cone );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.cone.geometry.dispose();\n\t\tthis.cone.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tthis.light.updateMatrixWorld();\n\n\t\tconst coneLength = this.light.distance ? this.light.distance : 1000;\n\t\tconst coneWidth = coneLength * Math.tan( this.light.angle );\n\n\t\tthis.cone.scale.set( coneWidth, coneWidth, coneLength );\n\n\t\t_vector$3.setFromMatrixPosition( this.light.target.matrixWorld );\n\n\t\tthis.cone.lookAt( _vector$3 );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.cone.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.cone.material.color.copy( this.light.color );\n\n\t\t}\n\n\t}\n\n}\n\nconst _vector$2 = /*@__PURE__*/ new Vector3();\nconst _boneMatrix = /*@__PURE__*/ new Matrix4();\nconst _matrixWorldInv = /*@__PURE__*/ new Matrix4();\n\n\nclass SkeletonHelper extends LineSegments {\n\n\tconstructor( object ) {\n\n\t\tconst bones = getBoneList( object );\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\tconst color1 = new Color( 0, 0, 1 );\n\t\tconst color2 = new Color( 0, 1, 0 );\n\n\t\tfor ( let i = 0; i < bones.length; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tcolors.push( color1.r, color1.g, color1.b );\n\t\t\t\tcolors.push( color2.r, color2.g, color2.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, depthTest: false, depthWrite: false, toneMapped: false, transparent: true } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'SkeletonHelper';\n\t\tthis.isSkeletonHelper = true;\n\n\t\tthis.root = object;\n\t\tthis.bones = bones;\n\n\t\tthis.matrix = object.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tconst bones = this.bones;\n\n\t\tconst geometry = this.geometry;\n\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\t_matrixWorldInv.copy( this.root.matrixWorld ).invert();\n\n\t\tfor ( let i = 0, j = 0; i < bones.length; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.matrixWorld );\n\t\t\t\t_vector$2.setFromMatrixPosition( _boneMatrix );\n\t\t\t\tposition.setXYZ( j, _vector$2.x, _vector$2.y, _vector$2.z );\n\n\t\t\t\t_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.parent.matrixWorld );\n\t\t\t\t_vector$2.setFromMatrixPosition( _boneMatrix );\n\t\t\t\tposition.setXYZ( j + 1, _vector$2.x, _vector$2.y, _vector$2.z );\n\n\t\t\t\tj += 2;\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n}\n\n\nfunction getBoneList( object ) {\n\n\tconst boneList = [];\n\n\tif ( object && object.isBone ) {\n\n\t\tboneList.push( object );\n\n\t}\n\n\tfor ( let i = 0; i < object.children.length; i ++ ) {\n\n\t\tboneList.push.apply( boneList, getBoneList( object.children[ i ] ) );\n\n\t}\n\n\treturn boneList;\n\n}\n\nclass PointLightHelper extends Mesh {\n\n\tconstructor( light, sphereSize, color ) {\n\n\t\tconst geometry = new SphereGeometry( sphereSize, 4, 2 );\n\t\tconst material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.color = color;\n\n\t\tthis.type = 'PointLightHelper';\n\n\t\tthis.matrix = this.light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\n\t\t/*\n\t// TODO: delete this comment?\n\tconst distanceGeometry = new THREE.IcosahedronBufferGeometry( 1, 2 );\n\tconst distanceMaterial = new THREE.MeshBasicMaterial( { color: hexColor, fog: false, wireframe: true, opacity: 0.1, transparent: true } );\n\n\tthis.lightSphere = new THREE.Mesh( bulbGeometry, bulbMaterial );\n\tthis.lightDistance = new THREE.Mesh( distanceGeometry, distanceMaterial );\n\n\tconst d = light.distance;\n\n\tif ( d === 0.0 ) {\n\n\t\tthis.lightDistance.visible = false;\n\n\t} else {\n\n\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t}\n\n\tthis.add( this.lightDistance );\n\t*/\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.material.color.copy( this.light.color );\n\n\t\t}\n\n\t\t/*\n\t\tconst d = this.light.distance;\n\n\t\tif ( d === 0.0 ) {\n\n\t\t\tthis.lightDistance.visible = false;\n\n\t\t} else {\n\n\t\t\tthis.lightDistance.visible = true;\n\t\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t\t}\n\t\t*/\n\n\t}\n\n}\n\nconst _vector$1 = /*@__PURE__*/ new Vector3();\nconst _color1 = /*@__PURE__*/ new Color();\nconst _color2 = /*@__PURE__*/ new Color();\n\nclass HemisphereLightHelper extends Object3D {\n\n\tconstructor( light, size, color ) {\n\n\t\tsuper();\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tconst geometry = new OctahedronGeometry( size );\n\t\tgeometry.rotateY( Math.PI * 0.5 );\n\n\t\tthis.material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } );\n\t\tif ( this.color === undefined ) this.material.vertexColors = true;\n\n\t\tconst position = geometry.getAttribute( 'position' );\n\t\tconst colors = new Float32Array( position.count * 3 );\n\n\t\tgeometry.setAttribute( 'color', new BufferAttribute( colors, 3 ) );\n\n\t\tthis.add( new Mesh( geometry, this.material ) );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.children[ 0 ].geometry.dispose();\n\t\tthis.children[ 0 ].material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tconst mesh = this.children[ 0 ];\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tconst colors = mesh.geometry.getAttribute( 'color' );\n\n\t\t\t_color1.copy( this.light.color );\n\t\t\t_color2.copy( this.light.groundColor );\n\n\t\t\tfor ( let i = 0, l = colors.count; i < l; i ++ ) {\n\n\t\t\t\tconst color = ( i < ( l / 2 ) ) ? _color1 : _color2;\n\n\t\t\t\tcolors.setXYZ( i, color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t\tcolors.needsUpdate = true;\n\n\t\t}\n\n\t\tmesh.lookAt( _vector$1.setFromMatrixPosition( this.light.matrixWorld ).negate() );\n\n\t}\n\n}\n\nclass GridHelper extends LineSegments {\n\n\tconstructor( size = 10, divisions = 10, color1 = 0x444444, color2 = 0x888888 ) {\n\n\t\tcolor1 = new Color( color1 );\n\t\tcolor2 = new Color( color2 );\n\n\t\tconst center = divisions / 2;\n\t\tconst step = size / divisions;\n\t\tconst halfSize = size / 2;\n\n\t\tconst vertices = [], colors = [];\n\n\t\tfor ( let i = 0, j = 0, k = - halfSize; i <= divisions; i ++, k += step ) {\n\n\t\t\tvertices.push( - halfSize, 0, k, halfSize, 0, k );\n\t\t\tvertices.push( k, 0, - halfSize, k, 0, halfSize );\n\n\t\t\tconst color = i === center ? color1 : color2;\n\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\n\t\t}\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'GridHelper';\n\n\t}\n\n}\n\nclass PolarGridHelper extends LineSegments {\n\n\tconstructor( radius = 10, radials = 16, circles = 8, divisions = 64, color1 = 0x444444, color2 = 0x888888 ) {\n\n\t\tcolor1 = new Color( color1 );\n\t\tcolor2 = new Color( color2 );\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\t// create the radials\n\n\t\tfor ( let i = 0; i <= radials; i ++ ) {\n\n\t\t\tconst v = ( i / radials ) * ( Math.PI * 2 );\n\n\t\t\tconst x = Math.sin( v ) * radius;\n\t\t\tconst z = Math.cos( v ) * radius;\n\n\t\t\tvertices.push( 0, 0, 0 );\n\t\t\tvertices.push( x, 0, z );\n\n\t\t\tconst color = ( i & 1 ) ? color1 : color2;\n\n\t\t\tcolors.push( color.r, color.g, color.b );\n\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t}\n\n\t\t// create the circles\n\n\t\tfor ( let i = 0; i <= circles; i ++ ) {\n\n\t\t\tconst color = ( i & 1 ) ? color1 : color2;\n\n\t\t\tconst r = radius - ( radius / circles * i );\n\n\t\t\tfor ( let j = 0; j < divisions; j ++ ) {\n\n\t\t\t\t// first vertex\n\n\t\t\t\tlet v = ( j / divisions ) * ( Math.PI * 2 );\n\n\t\t\t\tlet x = Math.sin( v ) * r;\n\t\t\t\tlet z = Math.cos( v ) * r;\n\n\t\t\t\tvertices.push( x, 0, z );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t\t// second vertex\n\n\t\t\t\tv = ( ( j + 1 ) / divisions ) * ( Math.PI * 2 );\n\n\t\t\t\tx = Math.sin( v ) * r;\n\t\t\t\tz = Math.cos( v ) * r;\n\n\t\t\t\tvertices.push( x, 0, z );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'PolarGridHelper';\n\n\t}\n\n}\n\nconst _v1 = /*@__PURE__*/ new Vector3();\nconst _v2 = /*@__PURE__*/ new Vector3();\nconst _v3 = /*@__PURE__*/ new Vector3();\n\nclass DirectionalLightHelper extends Object3D {\n\n\tconstructor( light, size, color ) {\n\n\t\tsuper();\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tif ( size === undefined ) size = 1;\n\n\t\tlet geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( [\n\t\t\t- size, size, 0,\n\t\t\tsize, size, 0,\n\t\t\tsize, - size, 0,\n\t\t\t- size, - size, 0,\n\t\t\t- size, size, 0\n\t\t], 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { fog: false, toneMapped: false } );\n\n\t\tthis.lightPlane = new Line( geometry, material );\n\t\tthis.add( this.lightPlane );\n\n\t\tgeometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 0, 1 ], 3 ) );\n\n\t\tthis.targetLine = new Line( geometry, material );\n\t\tthis.add( this.targetLine );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.lightPlane.geometry.dispose();\n\t\tthis.lightPlane.material.dispose();\n\t\tthis.targetLine.geometry.dispose();\n\t\tthis.targetLine.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\t_v1.setFromMatrixPosition( this.light.matrixWorld );\n\t\t_v2.setFromMatrixPosition( this.light.target.matrixWorld );\n\t\t_v3.subVectors( _v2, _v1 );\n\n\t\tthis.lightPlane.lookAt( _v2 );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.lightPlane.material.color.set( this.color );\n\t\t\tthis.targetLine.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.lightPlane.material.color.copy( this.light.color );\n\t\t\tthis.targetLine.material.color.copy( this.light.color );\n\n\t\t}\n\n\t\tthis.targetLine.lookAt( _v2 );\n\t\tthis.targetLine.scale.z = _v3.length();\n\n\t}\n\n}\n\nconst _vector = /*@__PURE__*/ new Vector3();\nconst _camera = /*@__PURE__*/ new Camera();\n\n/**\n *\t- shows frustum, line of sight and up of the camera\n *\t- suitable for fast updates\n * \t- based on frustum visualization in lightgl.js shadowmap example\n *\t\thttp://evanw.github.com/lightgl.js/tests/shadowmap.html\n */\n\nclass CameraHelper extends LineSegments {\n\n\tconstructor( camera ) {\n\n\t\tconst geometry = new BufferGeometry();\n\t\tconst material = new LineBasicMaterial( { color: 0xffffff, vertexColors: true, toneMapped: false } );\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\tconst pointMap = {};\n\n\t\t// colors\n\n\t\tconst colorFrustum = new Color( 0xffaa00 );\n\t\tconst colorCone = new Color( 0xff0000 );\n\t\tconst colorUp = new Color( 0x00aaff );\n\t\tconst colorTarget = new Color( 0xffffff );\n\t\tconst colorCross = new Color( 0x333333 );\n\n\t\t// near\n\n\t\taddLine( 'n1', 'n2', colorFrustum );\n\t\taddLine( 'n2', 'n4', colorFrustum );\n\t\taddLine( 'n4', 'n3', colorFrustum );\n\t\taddLine( 'n3', 'n1', colorFrustum );\n\n\t\t// far\n\n\t\taddLine( 'f1', 'f2', colorFrustum );\n\t\taddLine( 'f2', 'f4', colorFrustum );\n\t\taddLine( 'f4', 'f3', colorFrustum );\n\t\taddLine( 'f3', 'f1', colorFrustum );\n\n\t\t// sides\n\n\t\taddLine( 'n1', 'f1', colorFrustum );\n\t\taddLine( 'n2', 'f2', colorFrustum );\n\t\taddLine( 'n3', 'f3', colorFrustum );\n\t\taddLine( 'n4', 'f4', colorFrustum );\n\n\t\t// cone\n\n\t\taddLine( 'p', 'n1', colorCone );\n\t\taddLine( 'p', 'n2', colorCone );\n\t\taddLine( 'p', 'n3', colorCone );\n\t\taddLine( 'p', 'n4', colorCone );\n\n\t\t// up\n\n\t\taddLine( 'u1', 'u2', colorUp );\n\t\taddLine( 'u2', 'u3', colorUp );\n\t\taddLine( 'u3', 'u1', colorUp );\n\n\t\t// target\n\n\t\taddLine( 'c', 't', colorTarget );\n\t\taddLine( 'p', 'c', colorCross );\n\n\t\t// cross\n\n\t\taddLine( 'cn1', 'cn2', colorCross );\n\t\taddLine( 'cn3', 'cn4', colorCross );\n\n\t\taddLine( 'cf1', 'cf2', colorCross );\n\t\taddLine( 'cf3', 'cf4', colorCross );\n\n\t\tfunction addLine( a, b, color ) {\n\n\t\t\taddPoint( a, color );\n\t\t\taddPoint( b, color );\n\n\t\t}\n\n\t\tfunction addPoint( id, color ) {\n\n\t\t\tvertices.push( 0, 0, 0 );\n\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\tif ( pointMap[ id ] === undefined ) {\n\n\t\t\t\tpointMap[ id ] = [];\n\n\t\t\t}\n\n\t\t\tpointMap[ id ].push( ( vertices.length / 3 ) - 1 );\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'CameraHelper';\n\n\t\tthis.camera = camera;\n\t\tif ( this.camera.updateProjectionMatrix ) this.camera.updateProjectionMatrix();\n\n\t\tthis.matrix = camera.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.pointMap = pointMap;\n\n\t\tthis.update();\n\n\t}\n\n\tupdate() {\n\n\t\tconst geometry = this.geometry;\n\t\tconst pointMap = this.pointMap;\n\n\t\tconst w = 1, h = 1;\n\n\t\t// we need just camera projection matrix inverse\n\t\t// world matrix must be identity\n\n\t\t_camera.projectionMatrixInverse.copy( this.camera.projectionMatrixInverse );\n\n\t\t// center / target\n\n\t\tsetPoint( 'c', pointMap, geometry, _camera, 0, 0, - 1 );\n\t\tsetPoint( 't', pointMap, geometry, _camera, 0, 0, 1 );\n\n\t\t// near\n\n\t\tsetPoint( 'n1', pointMap, geometry, _camera, - w, - h, - 1 );\n\t\tsetPoint( 'n2', pointMap, geometry, _camera, w, - h, - 1 );\n\t\tsetPoint( 'n3', pointMap, geometry, _camera, - w, h, - 1 );\n\t\tsetPoint( 'n4', pointMap, geometry, _camera, w, h, - 1 );\n\n\t\t// far\n\n\t\tsetPoint( 'f1', pointMap, geometry, _camera, - w, - h, 1 );\n\t\tsetPoint( 'f2', pointMap, geometry, _camera, w, - h, 1 );\n\t\tsetPoint( 'f3', pointMap, geometry, _camera, - w, h, 1 );\n\t\tsetPoint( 'f4', pointMap, geometry, _camera, w, h, 1 );\n\n\t\t// up\n\n\t\tsetPoint( 'u1', pointMap, geometry, _camera, w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u2', pointMap, geometry, _camera, - w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u3', pointMap, geometry, _camera, 0, h * 2, - 1 );\n\n\t\t// cross\n\n\t\tsetPoint( 'cf1', pointMap, geometry, _camera, - w, 0, 1 );\n\t\tsetPoint( 'cf2', pointMap, geometry, _camera, w, 0, 1 );\n\t\tsetPoint( 'cf3', pointMap, geometry, _camera, 0, - h, 1 );\n\t\tsetPoint( 'cf4', pointMap, geometry, _camera, 0, h, 1 );\n\n\t\tsetPoint( 'cn1', pointMap, geometry, _camera, - w, 0, - 1 );\n\t\tsetPoint( 'cn2', pointMap, geometry, _camera, w, 0, - 1 );\n\t\tsetPoint( 'cn3', pointMap, geometry, _camera, 0, - h, - 1 );\n\t\tsetPoint( 'cn4', pointMap, geometry, _camera, 0, h, - 1 );\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\n\nfunction setPoint( point, pointMap, geometry, camera, x, y, z ) {\n\n\t_vector.set( x, y, z ).unproject( camera );\n\n\tconst points = pointMap[ point ];\n\n\tif ( points !== undefined ) {\n\n\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tposition.setXYZ( points[ i ], _vector.x, _vector.y, _vector.z );\n\n\t\t}\n\n\t}\n\n}\n\nconst _box = /*@__PURE__*/ new Box3();\n\nclass BoxHelper extends LineSegments {\n\n\tconstructor( object, color = 0xffff00 ) {\n\n\t\tconst indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\t\tconst positions = new Float32Array( 8 * 3 );\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\t\tgeometry.setAttribute( 'position', new BufferAttribute( positions, 3 ) );\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.object = object;\n\t\tthis.type = 'BoxHelper';\n\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\t}\n\n\tupdate( object ) {\n\n\t\tif ( object !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.BoxHelper: .update() has no longer arguments.' );\n\n\t\t}\n\n\t\tif ( this.object !== undefined ) {\n\n\t\t\t_box.setFromObject( this.object );\n\n\t\t}\n\n\t\tif ( _box.isEmpty() ) return;\n\n\t\tconst min = _box.min;\n\t\tconst max = _box.max;\n\n\t\t/*\n\t\t\t5____4\n\t\t1/___0/|\n\t\t| 6__|_7\n\t\t2/___3/\n\n\t\t0: max.x, max.y, max.z\n\t\t1: min.x, max.y, max.z\n\t\t2: min.x, min.y, max.z\n\t\t3: max.x, min.y, max.z\n\t\t4: max.x, max.y, min.z\n\t\t5: min.x, max.y, min.z\n\t\t6: min.x, min.y, min.z\n\t\t7: max.x, min.y, min.z\n\t\t*/\n\n\t\tconst position = this.geometry.attributes.position;\n\t\tconst array = position.array;\n\n\t\tarray[ 0 ] = max.x; array[ 1 ] = max.y; array[ 2 ] = max.z;\n\t\tarray[ 3 ] = min.x; array[ 4 ] = max.y; array[ 5 ] = max.z;\n\t\tarray[ 6 ] = min.x; array[ 7 ] = min.y; array[ 8 ] = max.z;\n\t\tarray[ 9 ] = max.x; array[ 10 ] = min.y; array[ 11 ] = max.z;\n\t\tarray[ 12 ] = max.x; array[ 13 ] = max.y; array[ 14 ] = min.z;\n\t\tarray[ 15 ] = min.x; array[ 16 ] = max.y; array[ 17 ] = min.z;\n\t\tarray[ 18 ] = min.x; array[ 19 ] = min.y; array[ 20 ] = min.z;\n\t\tarray[ 21 ] = max.x; array[ 22 ] = min.y; array[ 23 ] = min.z;\n\n\t\tposition.needsUpdate = true;\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\n\t}\n\n\tsetFromObject( object ) {\n\n\t\tthis.object = object;\n\t\tthis.update();\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tLineSegments.prototype.copy.call( this, source );\n\n\t\tthis.object = source.object;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Box3Helper extends LineSegments {\n\n\tconstructor( box, color = 0xffff00 ) {\n\n\t\tconst indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\n\t\tconst positions = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 1, - 1, 1, - 1, - 1 ];\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.box = box;\n\n\t\tthis.type = 'Box3Helper';\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tconst box = this.box;\n\n\t\tif ( box.isEmpty() ) return;\n\n\t\tbox.getCenter( this.position );\n\n\t\tbox.getSize( this.scale );\n\n\t\tthis.scale.multiplyScalar( 0.5 );\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n}\n\nclass PlaneHelper extends Line {\n\n\tconstructor( plane, size = 1, hex = 0xffff00 ) {\n\n\t\tconst color = hex;\n\n\t\tconst positions = [ 1, - 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0 ];\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\t\tgeometry.computeBoundingSphere();\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.type = 'PlaneHelper';\n\n\t\tthis.plane = plane;\n\n\t\tthis.size = size;\n\n\t\tconst positions2 = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, - 1, 1, 1, - 1, 1 ];\n\n\t\tconst geometry2 = new BufferGeometry();\n\t\tgeometry2.setAttribute( 'position', new Float32BufferAttribute( positions2, 3 ) );\n\t\tgeometry2.computeBoundingSphere();\n\n\t\tthis.add( new Mesh( geometry2, new MeshBasicMaterial( { color: color, opacity: 0.2, transparent: true, depthWrite: false, toneMapped: false } ) ) );\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tlet scale = - this.plane.constant;\n\n\t\tif ( Math.abs( scale ) < 1e-8 ) scale = 1e-8; // sign does not matter\n\n\t\tthis.scale.set( 0.5 * this.size, 0.5 * this.size, scale );\n\n\t\tthis.children[ 0 ].material.side = ( scale < 0 ) ? BackSide : FrontSide; // renderer flips side when determinant < 0; flipping not wanted here\n\n\t\tthis.lookAt( this.plane.normal );\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n}\n\nconst _axis = /*@__PURE__*/ new Vector3();\nlet _lineGeometry, _coneGeometry;\n\nclass ArrowHelper extends Object3D {\n\n\t// dir is assumed to be normalized\n\n\tconstructor( dir = new Vector3( 0, 0, 1 ), origin = new Vector3( 0, 0, 0 ), length = 1, color = 0xffff00, headLength = length * 0.2, headWidth = headLength * 0.2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ArrowHelper';\n\n\t\tif ( _lineGeometry === undefined ) {\n\n\t\t\t_lineGeometry = new BufferGeometry();\n\t\t\t_lineGeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) );\n\n\t\t\t_coneGeometry = new CylinderGeometry( 0, 0.5, 1, 5, 1 );\n\t\t\t_coneGeometry.translate( 0, - 0.5, 0 );\n\n\t\t}\n\n\t\tthis.position.copy( origin );\n\n\t\tthis.line = new Line( _lineGeometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\t\tthis.line.matrixAutoUpdate = false;\n\t\tthis.add( this.line );\n\n\t\tthis.cone = new Mesh( _coneGeometry, new MeshBasicMaterial( { color: color, toneMapped: false } ) );\n\t\tthis.cone.matrixAutoUpdate = false;\n\t\tthis.add( this.cone );\n\n\t\tthis.setDirection( dir );\n\t\tthis.setLength( length, headLength, headWidth );\n\n\t}\n\n\tsetDirection( dir ) {\n\n\t\t// dir is assumed to be normalized\n\n\t\tif ( dir.y > 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 0, 0, 0, 1 );\n\n\t\t} else if ( dir.y < - 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 1, 0, 0, 0 );\n\n\t\t} else {\n\n\t\t\t_axis.set( dir.z, 0, - dir.x ).normalize();\n\n\t\t\tconst radians = Math.acos( dir.y );\n\n\t\t\tthis.quaternion.setFromAxisAngle( _axis, radians );\n\n\t\t}\n\n\t}\n\n\tsetLength( length, headLength = length * 0.2, headWidth = headLength * 0.2 ) {\n\n\t\tthis.line.scale.set( 1, Math.max( 0.0001, length - headLength ), 1 ); // see #17458\n\t\tthis.line.updateMatrix();\n\n\t\tthis.cone.scale.set( headWidth, headLength, headWidth );\n\t\tthis.cone.position.y = length;\n\t\tthis.cone.updateMatrix();\n\n\t}\n\n\tsetColor( color ) {\n\n\t\tthis.line.material.color.set( color );\n\t\tthis.cone.material.color.set( color );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source, false );\n\n\t\tthis.line.copy( source.line );\n\t\tthis.cone.copy( source.cone );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass AxesHelper extends LineSegments {\n\n\tconstructor( size = 1 ) {\n\n\t\tconst vertices = [\n\t\t\t0, 0, 0,\tsize, 0, 0,\n\t\t\t0, 0, 0,\t0, size, 0,\n\t\t\t0, 0, 0,\t0, 0, size\n\t\t];\n\n\t\tconst colors = [\n\t\t\t1, 0, 0,\t1, 0.6, 0,\n\t\t\t0, 1, 0,\t0.6, 1, 0,\n\t\t\t0, 0, 1,\t0, 0.6, 1\n\t\t];\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'AxesHelper';\n\n\t}\n\n\tsetColors( xAxisColor, yAxisColor, zAxisColor ) {\n\n\t\tconst color = new Color();\n\t\tconst array = this.geometry.attributes.color.array;\n\n\t\tcolor.set( xAxisColor );\n\t\tcolor.toArray( array, 0 );\n\t\tcolor.toArray( array, 3 );\n\n\t\tcolor.set( yAxisColor );\n\t\tcolor.toArray( array, 6 );\n\t\tcolor.toArray( array, 9 );\n\n\t\tcolor.set( zAxisColor );\n\t\tcolor.toArray( array, 12 );\n\t\tcolor.toArray( array, 15 );\n\n\t\tthis.geometry.attributes.color.needsUpdate = true;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nclass ShapePath {\n\n\tconstructor() {\n\n\t\tthis.type = 'ShapePath';\n\n\t\tthis.color = new Color();\n\n\t\tthis.subPaths = [];\n\t\tthis.currentPath = null;\n\n\t}\n\n\tmoveTo( x, y ) {\n\n\t\tthis.currentPath = new Path();\n\t\tthis.subPaths.push( this.currentPath );\n\t\tthis.currentPath.moveTo( x, y );\n\n\t\treturn this;\n\n\t}\n\n\tlineTo( x, y ) {\n\n\t\tthis.currentPath.lineTo( x, y );\n\n\t\treturn this;\n\n\t}\n\n\tquadraticCurveTo( aCPx, aCPy, aX, aY ) {\n\n\t\tthis.currentPath.quadraticCurveTo( aCPx, aCPy, aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tbezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tthis.currentPath.bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tsplineThru( pts ) {\n\n\t\tthis.currentPath.splineThru( pts );\n\n\t\treturn this;\n\n\t}\n\n\ttoShapes( isCCW, noHoles ) {\n\n\t\tfunction toShapesNoHoles( inSubpaths ) {\n\n\t\t\tconst shapes = [];\n\n\t\t\tfor ( let i = 0, l = inSubpaths.length; i < l; i ++ ) {\n\n\t\t\t\tconst tmpPath = inSubpaths[ i ];\n\n\t\t\t\tconst tmpShape = new Shape();\n\t\t\t\ttmpShape.curves = tmpPath.curves;\n\n\t\t\t\tshapes.push( tmpShape );\n\n\t\t\t}\n\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tfunction isPointInsidePolygon( inPt, inPolygon ) {\n\n\t\t\tconst polyLen = inPolygon.length;\n\n\t\t\t// inPt on polygon contour => immediate success or\n\t\t\t// toggling of inside/outside at every single! intersection point of an edge\n\t\t\t// with the horizontal line through inPt, left of inPt\n\t\t\t// not counting lowerY endpoints of edges and whole edges on that line\n\t\t\tlet inside = false;\n\t\t\tfor ( let p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) {\n\n\t\t\t\tlet edgeLowPt = inPolygon[ p ];\n\t\t\t\tlet edgeHighPt = inPolygon[ q ];\n\n\t\t\t\tlet edgeDx = edgeHighPt.x - edgeLowPt.x;\n\t\t\t\tlet edgeDy = edgeHighPt.y - edgeLowPt.y;\n\n\t\t\t\tif ( Math.abs( edgeDy ) > Number.EPSILON ) {\n\n\t\t\t\t\t// not parallel\n\t\t\t\t\tif ( edgeDy < 0 ) {\n\n\t\t\t\t\t\tedgeLowPt = inPolygon[ q ]; edgeDx = - edgeDx;\n\t\t\t\t\t\tedgeHighPt = inPolygon[ p ]; edgeDy = - edgeDy;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ( inPt.y < edgeLowPt.y ) || ( inPt.y > edgeHighPt.y ) ) \t\tcontinue;\n\n\t\t\t\t\tif ( inPt.y === edgeLowPt.y ) {\n\n\t\t\t\t\t\tif ( inPt.x === edgeLowPt.x )\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\t// continue;\t\t\t\t// no intersection or edgeLowPt => doesn't count !!!\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst perpEdge = edgeDy * ( inPt.x - edgeLowPt.x ) - edgeDx * ( inPt.y - edgeLowPt.y );\n\t\t\t\t\t\tif ( perpEdge === 0 )\t\t\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\tif ( perpEdge < 0 ) \t\t\t\tcontinue;\n\t\t\t\t\t\tinside = ! inside;\t\t// true intersection left of inPt\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// parallel or collinear\n\t\t\t\t\tif ( inPt.y !== edgeLowPt.y ) \t\tcontinue;\t\t\t// parallel\n\t\t\t\t\t// edge lies on the same horizontal line as inPt\n\t\t\t\t\tif ( ( ( edgeHighPt.x <= inPt.x ) && ( inPt.x <= edgeLowPt.x ) ) ||\n\t\t\t\t\t\t ( ( edgeLowPt.x <= inPt.x ) && ( inPt.x <= edgeHighPt.x ) ) )\t\treturn\ttrue;\t// inPt: Point on contour !\n\t\t\t\t\t// continue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn\tinside;\n\n\t\t}\n\n\t\tconst isClockWise = ShapeUtils.isClockWise;\n\n\t\tconst subPaths = this.subPaths;\n\t\tif ( subPaths.length === 0 ) return [];\n\n\t\tif ( noHoles === true )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\tlet solid, tmpPath, tmpShape;\n\t\tconst shapes = [];\n\n\t\tif ( subPaths.length === 1 ) {\n\n\t\t\ttmpPath = subPaths[ 0 ];\n\t\t\ttmpShape = new Shape();\n\t\t\ttmpShape.curves = tmpPath.curves;\n\t\t\tshapes.push( tmpShape );\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tlet holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() );\n\t\tholesFirst = isCCW ? ! holesFirst : holesFirst;\n\n\t\t// console.log(\"Holes first\", holesFirst);\n\n\t\tconst betterShapeHoles = [];\n\t\tconst newShapes = [];\n\t\tlet newShapeHoles = [];\n\t\tlet mainIdx = 0;\n\t\tlet tmpPoints;\n\n\t\tnewShapes[ mainIdx ] = undefined;\n\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\tfor ( let i = 0, l = subPaths.length; i < l; i ++ ) {\n\n\t\t\ttmpPath = subPaths[ i ];\n\t\t\ttmpPoints = tmpPath.getPoints();\n\t\t\tsolid = isClockWise( tmpPoints );\n\t\t\tsolid = isCCW ? ! solid : solid;\n\n\t\t\tif ( solid ) {\n\n\t\t\t\tif ( ( ! holesFirst ) && ( newShapes[ mainIdx ] ) )\tmainIdx ++;\n\n\t\t\t\tnewShapes[ mainIdx ] = { s: new Shape(), p: tmpPoints };\n\t\t\t\tnewShapes[ mainIdx ].s.curves = tmpPath.curves;\n\n\t\t\t\tif ( holesFirst )\tmainIdx ++;\n\t\t\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\t\t\t//console.log('cw', i);\n\n\t\t\t} else {\n\n\t\t\t\tnewShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } );\n\n\t\t\t\t//console.log('ccw', i);\n\n\t\t\t}\n\n\t\t}\n\n\t\t// only Holes? -> probably all Shapes with wrong orientation\n\t\tif ( ! newShapes[ 0 ] )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\tif ( newShapes.length > 1 ) {\n\n\t\t\tlet ambiguous = false;\n\t\t\tconst toChange = [];\n\n\t\t\tfor ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tbetterShapeHoles[ sIdx ] = [];\n\n\t\t\t}\n\n\t\t\tfor ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tconst sho = newShapeHoles[ sIdx ];\n\n\t\t\t\tfor ( let hIdx = 0; hIdx < sho.length; hIdx ++ ) {\n\n\t\t\t\t\tconst ho = sho[ hIdx ];\n\t\t\t\t\tlet hole_unassigned = true;\n\n\t\t\t\t\tfor ( let s2Idx = 0; s2Idx < newShapes.length; s2Idx ++ ) {\n\n\t\t\t\t\t\tif ( isPointInsidePolygon( ho.p, newShapes[ s2Idx ].p ) ) {\n\n\t\t\t\t\t\t\tif ( sIdx !== s2Idx )\ttoChange.push( { froms: sIdx, tos: s2Idx, hole: hIdx } );\n\t\t\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\t\t\thole_unassigned = false;\n\t\t\t\t\t\t\t\tbetterShapeHoles[ s2Idx ].push( ho );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tambiguous = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\tbetterShapeHoles[ sIdx ].push( ho );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t\t// console.log(\"ambiguous: \", ambiguous);\n\n\t\t\tif ( toChange.length > 0 ) {\n\n\t\t\t\t// console.log(\"to change: \", toChange);\n\t\t\t\tif ( ! ambiguous )\tnewShapeHoles = betterShapeHoles;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet tmpHoles;\n\n\t\tfor ( let i = 0, il = newShapes.length; i < il; i ++ ) {\n\n\t\t\ttmpShape = newShapes[ i ].s;\n\t\t\tshapes.push( tmpShape );\n\t\t\ttmpHoles = newShapeHoles[ i ];\n\n\t\t\tfor ( let j = 0, jl = tmpHoles.length; j < jl; j ++ ) {\n\n\t\t\t\ttmpShape.holes.push( tmpHoles[ j ].h );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//console.log(\"shape\", shapes);\n\n\t\treturn shapes;\n\n\t}\n\n}\n\nconst _floatView = new Float32Array( 1 );\nconst _int32View = new Int32Array( _floatView.buffer );\n\nclass DataUtils {\n\n\t// Converts float32 to float16 (stored as uint16 value).\n\n\tstatic toHalfFloat( val ) {\n\n\t\tif ( val > 65504 ) {\n\n\t\t\tconsole.warn( 'THREE.DataUtils.toHalfFloat(): value exceeds 65504.' );\n\n\t\t\tval = 65504; // maximum representable value in float16\n\n\t\t}\n\n\t\t// Source: http://gamedev.stackexchange.com/questions/17326/conversion-of-a-number-from-single-precision-floating-point-representation-to-a/17410#17410\n\n\t\t/* This method is faster than the OpenEXR implementation (very often\n\t\t* used, eg. in Ogre), with the additional benefit of rounding, inspired\n\t\t* by James Tursa?s half-precision code. */\n\n\t\t_floatView[ 0 ] = val;\n\t\tconst x = _int32View[ 0 ];\n\n\t\tlet bits = ( x >> 16 ) & 0x8000; /* Get the sign */\n\t\tlet m = ( x >> 12 ) & 0x07ff; /* Keep one extra bit for rounding */\n\t\tconst e = ( x >> 23 ) & 0xff; /* Using int is faster here */\n\n\t\t/* If zero, or denormal, or exponent underflows too much for a denormal\n\t\t\t* half, return signed zero. */\n\t\tif ( e < 103 ) return bits;\n\n\t\t/* If NaN, return NaN. If Inf or exponent overflow, return Inf. */\n\t\tif ( e > 142 ) {\n\n\t\t\tbits |= 0x7c00;\n\t\t\t/* If exponent was 0xff and one mantissa bit was set, it means NaN,\n\t\t\t\t\t\t* not Inf, so make sure we set one mantissa bit too. */\n\t\t\tbits |= ( ( e == 255 ) ? 0 : 1 ) && ( x & 0x007fffff );\n\t\t\treturn bits;\n\n\t\t}\n\n\t\t/* If exponent underflows but not too much, return a denormal */\n\t\tif ( e < 113 ) {\n\n\t\t\tm |= 0x0800;\n\t\t\t/* Extra rounding may overflow and set mantissa to 0 and exponent\n\t\t\t\t* to 1, which is OK. */\n\t\t\tbits |= ( m >> ( 114 - e ) ) + ( ( m >> ( 113 - e ) ) & 1 );\n\t\t\treturn bits;\n\n\t\t}\n\n\t\tbits |= ( ( e - 112 ) << 10 ) | ( m >> 1 );\n\t\t/* Extra rounding. An overflow will set mantissa to 0 and increment\n\t\t\t* the exponent, which is OK. */\n\t\tbits += m & 1;\n\t\treturn bits;\n\n\t}\n\n}\n\nconst LineStrip = 0;\nconst LinePieces = 1;\nconst NoColors = 0;\nconst FaceColors = 1;\nconst VertexColors = 2;\n\nfunction MeshFaceMaterial( materials ) {\n\n\tconsole.warn( 'THREE.MeshFaceMaterial has been removed. Use an Array instead.' );\n\treturn materials;\n\n}\n\nfunction MultiMaterial( materials = [] ) {\n\n\tconsole.warn( 'THREE.MultiMaterial has been removed. Use an Array instead.' );\n\tmaterials.isMultiMaterial = true;\n\tmaterials.materials = materials;\n\tmaterials.clone = function () {\n\n\t\treturn materials.slice();\n\n\t};\n\n\treturn materials;\n\n}\n\nfunction PointCloud( geometry, material ) {\n\n\tconsole.warn( 'THREE.PointCloud has been renamed to THREE.Points.' );\n\treturn new Points( geometry, material );\n\n}\n\nfunction Particle( material ) {\n\n\tconsole.warn( 'THREE.Particle has been renamed to THREE.Sprite.' );\n\treturn new Sprite( material );\n\n}\n\nfunction ParticleSystem( geometry, material ) {\n\n\tconsole.warn( 'THREE.ParticleSystem has been renamed to THREE.Points.' );\n\treturn new Points( geometry, material );\n\n}\n\nfunction PointCloudMaterial( parameters ) {\n\n\tconsole.warn( 'THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial.' );\n\treturn new PointsMaterial( parameters );\n\n}\n\nfunction ParticleBasicMaterial( parameters ) {\n\n\tconsole.warn( 'THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial.' );\n\treturn new PointsMaterial( parameters );\n\n}\n\nfunction ParticleSystemMaterial( parameters ) {\n\n\tconsole.warn( 'THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial.' );\n\treturn new PointsMaterial( parameters );\n\n}\n\nfunction Vertex( x, y, z ) {\n\n\tconsole.warn( 'THREE.Vertex has been removed. Use THREE.Vector3 instead.' );\n\treturn new Vector3( x, y, z );\n\n}\n\n//\n\nfunction DynamicBufferAttribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setUsage( THREE.DynamicDrawUsage ) instead.' );\n\treturn new BufferAttribute( array, itemSize ).setUsage( DynamicDrawUsage );\n\n}\n\nfunction Int8Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead.' );\n\treturn new Int8BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint8Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead.' );\n\treturn new Uint8BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint8ClampedAttribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead.' );\n\treturn new Uint8ClampedBufferAttribute( array, itemSize );\n\n}\n\nfunction Int16Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead.' );\n\treturn new Int16BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint16Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead.' );\n\treturn new Uint16BufferAttribute( array, itemSize );\n\n}\n\nfunction Int32Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead.' );\n\treturn new Int32BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint32Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead.' );\n\treturn new Uint32BufferAttribute( array, itemSize );\n\n}\n\nfunction Float32Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead.' );\n\treturn new Float32BufferAttribute( array, itemSize );\n\n}\n\nfunction Float64Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead.' );\n\treturn new Float64BufferAttribute( array, itemSize );\n\n}\n\n//\n\nCurve.create = function ( construct, getPoint ) {\n\n\tconsole.log( 'THREE.Curve.create() has been deprecated' );\n\n\tconstruct.prototype = Object.create( Curve.prototype );\n\tconstruct.prototype.constructor = construct;\n\tconstruct.prototype.getPoint = getPoint;\n\n\treturn construct;\n\n};\n\n//\n\nPath.prototype.fromPoints = function ( points ) {\n\n\tconsole.warn( 'THREE.Path: .fromPoints() has been renamed to .setFromPoints().' );\n\treturn this.setFromPoints( points );\n\n};\n\n//\n\nfunction AxisHelper( size ) {\n\n\tconsole.warn( 'THREE.AxisHelper has been renamed to THREE.AxesHelper.' );\n\treturn new AxesHelper( size );\n\n}\n\nfunction BoundingBoxHelper( object, color ) {\n\n\tconsole.warn( 'THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead.' );\n\treturn new BoxHelper( object, color );\n\n}\n\nfunction EdgesHelper( object, hex ) {\n\n\tconsole.warn( 'THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead.' );\n\treturn new LineSegments( new EdgesGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) );\n\n}\n\nGridHelper.prototype.setColors = function () {\n\n\tconsole.error( 'THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.' );\n\n};\n\nSkeletonHelper.prototype.update = function () {\n\n\tconsole.error( 'THREE.SkeletonHelper: update() no longer needs to be called.' );\n\n};\n\nfunction WireframeHelper( object, hex ) {\n\n\tconsole.warn( 'THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead.' );\n\treturn new LineSegments( new WireframeGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) );\n\n}\n\n//\n\nLoader.prototype.extractUrlBase = function ( url ) {\n\n\tconsole.warn( 'THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead.' );\n\treturn LoaderUtils.extractUrlBase( url );\n\n};\n\nLoader.Handlers = {\n\n\tadd: function ( /* regex, loader */ ) {\n\n\t\tconsole.error( 'THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.' );\n\n\t},\n\n\tget: function ( /* file */ ) {\n\n\t\tconsole.error( 'THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.' );\n\n\t}\n\n};\n\nfunction XHRLoader( manager ) {\n\n\tconsole.warn( 'THREE.XHRLoader has been renamed to THREE.FileLoader.' );\n\treturn new FileLoader( manager );\n\n}\n\nfunction BinaryTextureLoader( manager ) {\n\n\tconsole.warn( 'THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader.' );\n\treturn new DataTextureLoader( manager );\n\n}\n\n//\n\nBox2.prototype.center = function ( optionalTarget ) {\n\n\tconsole.warn( 'THREE.Box2: .center() has been renamed to .getCenter().' );\n\treturn this.getCenter( optionalTarget );\n\n};\n\nBox2.prototype.empty = function () {\n\n\tconsole.warn( 'THREE.Box2: .empty() has been renamed to .isEmpty().' );\n\treturn this.isEmpty();\n\n};\n\nBox2.prototype.isIntersectionBox = function ( box ) {\n\n\tconsole.warn( 'THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\treturn this.intersectsBox( box );\n\n};\n\nBox2.prototype.size = function ( optionalTarget ) {\n\n\tconsole.warn( 'THREE.Box2: .size() has been renamed to .getSize().' );\n\treturn this.getSize( optionalTarget );\n\n};\n\n//\n\nBox3.prototype.center = function ( optionalTarget ) {\n\n\tconsole.warn( 'THREE.Box3: .center() has been renamed to .getCenter().' );\n\treturn this.getCenter( optionalTarget );\n\n};\n\nBox3.prototype.empty = function () {\n\n\tconsole.warn( 'THREE.Box3: .empty() has been renamed to .isEmpty().' );\n\treturn this.isEmpty();\n\n};\n\nBox3.prototype.isIntersectionBox = function ( box ) {\n\n\tconsole.warn( 'THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\treturn this.intersectsBox( box );\n\n};\n\nBox3.prototype.isIntersectionSphere = function ( sphere ) {\n\n\tconsole.warn( 'THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().' );\n\treturn this.intersectsSphere( sphere );\n\n};\n\nBox3.prototype.size = function ( optionalTarget ) {\n\n\tconsole.warn( 'THREE.Box3: .size() has been renamed to .getSize().' );\n\treturn this.getSize( optionalTarget );\n\n};\n\n//\n\nSphere.prototype.empty = function () {\n\n\tconsole.warn( 'THREE.Sphere: .empty() has been renamed to .isEmpty().' );\n\treturn this.isEmpty();\n\n};\n\n//\n\nFrustum.prototype.setFromMatrix = function ( m ) {\n\n\tconsole.warn( 'THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix().' );\n\treturn this.setFromProjectionMatrix( m );\n\n};\n\n//\n\nLine3.prototype.center = function ( optionalTarget ) {\n\n\tconsole.warn( 'THREE.Line3: .center() has been renamed to .getCenter().' );\n\treturn this.getCenter( optionalTarget );\n\n};\n\n//\n\nMatrix3.prototype.flattenToArrayOffset = function ( array, offset ) {\n\n\tconsole.warn( 'THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.' );\n\treturn this.toArray( array, offset );\n\n};\n\nMatrix3.prototype.multiplyVector3 = function ( vector ) {\n\n\tconsole.warn( 'THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.' );\n\treturn vector.applyMatrix3( this );\n\n};\n\nMatrix3.prototype.multiplyVector3Array = function ( /* a */ ) {\n\n\tconsole.error( 'THREE.Matrix3: .multiplyVector3Array() has been removed.' );\n\n};\n\nMatrix3.prototype.applyToBufferAttribute = function ( attribute ) {\n\n\tconsole.warn( 'THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead.' );\n\treturn attribute.applyMatrix3( this );\n\n};\n\nMatrix3.prototype.applyToVector3Array = function ( /* array, offset, length */ ) {\n\n\tconsole.error( 'THREE.Matrix3: .applyToVector3Array() has been removed.' );\n\n};\n\nMatrix3.prototype.getInverse = function ( matrix ) {\n\n\tconsole.warn( 'THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.' );\n\treturn this.copy( matrix ).invert();\n\n};\n\n//\n\nMatrix4.prototype.extractPosition = function ( m ) {\n\n\tconsole.warn( 'THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().' );\n\treturn this.copyPosition( m );\n\n};\n\nMatrix4.prototype.flattenToArrayOffset = function ( array, offset ) {\n\n\tconsole.warn( 'THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.' );\n\treturn this.toArray( array, offset );\n\n};\n\nMatrix4.prototype.getPosition = function () {\n\n\tconsole.warn( 'THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.' );\n\treturn new Vector3().setFromMatrixColumn( this, 3 );\n\n};\n\nMatrix4.prototype.setRotationFromQuaternion = function ( q ) {\n\n\tconsole.warn( 'THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().' );\n\treturn this.makeRotationFromQuaternion( q );\n\n};\n\nMatrix4.prototype.multiplyToArray = function () {\n\n\tconsole.warn( 'THREE.Matrix4: .multiplyToArray() has been removed.' );\n\n};\n\nMatrix4.prototype.multiplyVector3 = function ( vector ) {\n\n\tconsole.warn( 'THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\treturn vector.applyMatrix4( this );\n\n};\n\nMatrix4.prototype.multiplyVector4 = function ( vector ) {\n\n\tconsole.warn( 'THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\treturn vector.applyMatrix4( this );\n\n};\n\nMatrix4.prototype.multiplyVector3Array = function ( /* a */ ) {\n\n\tconsole.error( 'THREE.Matrix4: .multiplyVector3Array() has been removed.' );\n\n};\n\nMatrix4.prototype.rotateAxis = function ( v ) {\n\n\tconsole.warn( 'THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.' );\n\tv.transformDirection( this );\n\n};\n\nMatrix4.prototype.crossVector = function ( vector ) {\n\n\tconsole.warn( 'THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\treturn vector.applyMatrix4( this );\n\n};\n\nMatrix4.prototype.translate = function () {\n\n\tconsole.error( 'THREE.Matrix4: .translate() has been removed.' );\n\n};\n\nMatrix4.prototype.rotateX = function () {\n\n\tconsole.error( 'THREE.Matrix4: .rotateX() has been removed.' );\n\n};\n\nMatrix4.prototype.rotateY = function () {\n\n\tconsole.error( 'THREE.Matrix4: .rotateY() has been removed.' );\n\n};\n\nMatrix4.prototype.rotateZ = function () {\n\n\tconsole.error( 'THREE.Matrix4: .rotateZ() has been removed.' );\n\n};\n\nMatrix4.prototype.rotateByAxis = function () {\n\n\tconsole.error( 'THREE.Matrix4: .rotateByAxis() has been removed.' );\n\n};\n\nMatrix4.prototype.applyToBufferAttribute = function ( attribute ) {\n\n\tconsole.warn( 'THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead.' );\n\treturn attribute.applyMatrix4( this );\n\n};\n\nMatrix4.prototype.applyToVector3Array = function ( /* array, offset, length */ ) {\n\n\tconsole.error( 'THREE.Matrix4: .applyToVector3Array() has been removed.' );\n\n};\n\nMatrix4.prototype.makeFrustum = function ( left, right, bottom, top, near, far ) {\n\n\tconsole.warn( 'THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.' );\n\treturn this.makePerspective( left, right, top, bottom, near, far );\n\n};\n\nMatrix4.prototype.getInverse = function ( matrix ) {\n\n\tconsole.warn( 'THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.' );\n\treturn this.copy( matrix ).invert();\n\n};\n\n//\n\nPlane.prototype.isIntersectionLine = function ( line ) {\n\n\tconsole.warn( 'THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().' );\n\treturn this.intersectsLine( line );\n\n};\n\n//\n\nQuaternion.prototype.multiplyVector3 = function ( vector ) {\n\n\tconsole.warn( 'THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.' );\n\treturn vector.applyQuaternion( this );\n\n};\n\nQuaternion.prototype.inverse = function ( ) {\n\n\tconsole.warn( 'THREE.Quaternion: .inverse() has been renamed to invert().' );\n\treturn this.invert();\n\n};\n\n//\n\nRay.prototype.isIntersectionBox = function ( box ) {\n\n\tconsole.warn( 'THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\treturn this.intersectsBox( box );\n\n};\n\nRay.prototype.isIntersectionPlane = function ( plane ) {\n\n\tconsole.warn( 'THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().' );\n\treturn this.intersectsPlane( plane );\n\n};\n\nRay.prototype.isIntersectionSphere = function ( sphere ) {\n\n\tconsole.warn( 'THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().' );\n\treturn this.intersectsSphere( sphere );\n\n};\n\n//\n\nTriangle.prototype.area = function () {\n\n\tconsole.warn( 'THREE.Triangle: .area() has been renamed to .getArea().' );\n\treturn this.getArea();\n\n};\n\nTriangle.prototype.barycoordFromPoint = function ( point, target ) {\n\n\tconsole.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' );\n\treturn this.getBarycoord( point, target );\n\n};\n\nTriangle.prototype.midpoint = function ( target ) {\n\n\tconsole.warn( 'THREE.Triangle: .midpoint() has been renamed to .getMidpoint().' );\n\treturn this.getMidpoint( target );\n\n};\n\nTriangle.prototypenormal = function ( target ) {\n\n\tconsole.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' );\n\treturn this.getNormal( target );\n\n};\n\nTriangle.prototype.plane = function ( target ) {\n\n\tconsole.warn( 'THREE.Triangle: .plane() has been renamed to .getPlane().' );\n\treturn this.getPlane( target );\n\n};\n\nTriangle.barycoordFromPoint = function ( point, a, b, c, target ) {\n\n\tconsole.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' );\n\treturn Triangle.getBarycoord( point, a, b, c, target );\n\n};\n\nTriangle.normal = function ( a, b, c, target ) {\n\n\tconsole.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' );\n\treturn Triangle.getNormal( a, b, c, target );\n\n};\n\n//\n\nShape.prototype.extractAllPoints = function ( divisions ) {\n\n\tconsole.warn( 'THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead.' );\n\treturn this.extractPoints( divisions );\n\n};\n\nShape.prototype.extrude = function ( options ) {\n\n\tconsole.warn( 'THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.' );\n\treturn new ExtrudeGeometry( this, options );\n\n};\n\nShape.prototype.makeGeometry = function ( options ) {\n\n\tconsole.warn( 'THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.' );\n\treturn new ShapeGeometry( this, options );\n\n};\n\n//\n\nVector2.prototype.fromAttribute = function ( attribute, index, offset ) {\n\n\tconsole.warn( 'THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\treturn this.fromBufferAttribute( attribute, index, offset );\n\n};\n\nVector2.prototype.distanceToManhattan = function ( v ) {\n\n\tconsole.warn( 'THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' );\n\treturn this.manhattanDistanceTo( v );\n\n};\n\nVector2.prototype.lengthManhattan = function () {\n\n\tconsole.warn( 'THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength().' );\n\treturn this.manhattanLength();\n\n};\n\n//\n\nVector3.prototype.setEulerFromRotationMatrix = function () {\n\n\tconsole.error( 'THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.' );\n\n};\n\nVector3.prototype.setEulerFromQuaternion = function () {\n\n\tconsole.error( 'THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.' );\n\n};\n\nVector3.prototype.getPositionFromMatrix = function ( m ) {\n\n\tconsole.warn( 'THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().' );\n\treturn this.setFromMatrixPosition( m );\n\n};\n\nVector3.prototype.getScaleFromMatrix = function ( m ) {\n\n\tconsole.warn( 'THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().' );\n\treturn this.setFromMatrixScale( m );\n\n};\n\nVector3.prototype.getColumnFromMatrix = function ( index, matrix ) {\n\n\tconsole.warn( 'THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().' );\n\treturn this.setFromMatrixColumn( matrix, index );\n\n};\n\nVector3.prototype.applyProjection = function ( m ) {\n\n\tconsole.warn( 'THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.' );\n\treturn this.applyMatrix4( m );\n\n};\n\nVector3.prototype.fromAttribute = function ( attribute, index, offset ) {\n\n\tconsole.warn( 'THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\treturn this.fromBufferAttribute( attribute, index, offset );\n\n};\n\nVector3.prototype.distanceToManhattan = function ( v ) {\n\n\tconsole.warn( 'THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' );\n\treturn this.manhattanDistanceTo( v );\n\n};\n\nVector3.prototype.lengthManhattan = function () {\n\n\tconsole.warn( 'THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength().' );\n\treturn this.manhattanLength();\n\n};\n\n//\n\nVector4.prototype.fromAttribute = function ( attribute, index, offset ) {\n\n\tconsole.warn( 'THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\treturn this.fromBufferAttribute( attribute, index, offset );\n\n};\n\nVector4.prototype.lengthManhattan = function () {\n\n\tconsole.warn( 'THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength().' );\n\treturn this.manhattanLength();\n\n};\n\n//\n\nObject3D.prototype.getChildByName = function ( name ) {\n\n\tconsole.warn( 'THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().' );\n\treturn this.getObjectByName( name );\n\n};\n\nObject3D.prototype.renderDepth = function () {\n\n\tconsole.warn( 'THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.' );\n\n};\n\nObject3D.prototype.translate = function ( distance, axis ) {\n\n\tconsole.warn( 'THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.' );\n\treturn this.translateOnAxis( axis, distance );\n\n};\n\nObject3D.prototype.getWorldRotation = function () {\n\n\tconsole.error( 'THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.' );\n\n};\n\nObject3D.prototype.applyMatrix = function ( matrix ) {\n\n\tconsole.warn( 'THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4().' );\n\treturn this.applyMatrix4( matrix );\n\n};\n\nObject.defineProperties( Object3D.prototype, {\n\n\teulerOrder: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' );\n\t\t\treturn this.rotation.order;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' );\n\t\t\tthis.rotation.order = value;\n\n\t\t}\n\t},\n\tuseQuaternion: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' );\n\n\t\t}\n\t}\n\n} );\n\nMesh.prototype.setDrawMode = function () {\n\n\tconsole.error( 'THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.' );\n\n};\n\nObject.defineProperties( Mesh.prototype, {\n\n\tdrawMode: {\n\t\tget: function () {\n\n\t\t\tconsole.error( 'THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode.' );\n\t\t\treturn TrianglesDrawMode;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.error( 'THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.' );\n\n\t\t}\n\t}\n\n} );\n\nSkinnedMesh.prototype.initBones = function () {\n\n\tconsole.error( 'THREE.SkinnedMesh: initBones() has been removed.' );\n\n};\n\n//\n\nPerspectiveCamera.prototype.setLens = function ( focalLength, filmGauge ) {\n\n\tconsole.warn( 'THREE.PerspectiveCamera.setLens is deprecated. ' +\n\t\t\t'Use .setFocalLength and .filmGauge for a photographic setup.' );\n\n\tif ( filmGauge !== undefined ) this.filmGauge = filmGauge;\n\tthis.setFocalLength( focalLength );\n\n};\n\n//\n\nObject.defineProperties( Light.prototype, {\n\tonlyShadow: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Light: .onlyShadow has been removed.' );\n\n\t\t}\n\t},\n\tshadowCameraFov: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraFov is now .shadow.camera.fov.' );\n\t\t\tthis.shadow.camera.fov = value;\n\n\t\t}\n\t},\n\tshadowCameraLeft: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraLeft is now .shadow.camera.left.' );\n\t\t\tthis.shadow.camera.left = value;\n\n\t\t}\n\t},\n\tshadowCameraRight: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraRight is now .shadow.camera.right.' );\n\t\t\tthis.shadow.camera.right = value;\n\n\t\t}\n\t},\n\tshadowCameraTop: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraTop is now .shadow.camera.top.' );\n\t\t\tthis.shadow.camera.top = value;\n\n\t\t}\n\t},\n\tshadowCameraBottom: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.' );\n\t\t\tthis.shadow.camera.bottom = value;\n\n\t\t}\n\t},\n\tshadowCameraNear: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraNear is now .shadow.camera.near.' );\n\t\t\tthis.shadow.camera.near = value;\n\n\t\t}\n\t},\n\tshadowCameraFar: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraFar is now .shadow.camera.far.' );\n\t\t\tthis.shadow.camera.far = value;\n\n\t\t}\n\t},\n\tshadowCameraVisible: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.' );\n\n\t\t}\n\t},\n\tshadowBias: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowBias is now .shadow.bias.' );\n\t\t\tthis.shadow.bias = value;\n\n\t\t}\n\t},\n\tshadowDarkness: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowDarkness has been removed.' );\n\n\t\t}\n\t},\n\tshadowMapWidth: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.' );\n\t\t\tthis.shadow.mapSize.width = value;\n\n\t\t}\n\t},\n\tshadowMapHeight: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.' );\n\t\t\tthis.shadow.mapSize.height = value;\n\n\t\t}\n\t}\n} );\n\n//\n\nObject.defineProperties( BufferAttribute.prototype, {\n\n\tlength: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferAttribute: .length has been deprecated. Use .count instead.' );\n\t\t\treturn this.array.length;\n\n\t\t}\n\t},\n\tdynamic: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.' );\n\t\t\treturn this.usage === DynamicDrawUsage;\n\n\t\t},\n\t\tset: function ( /* value */ ) {\n\n\t\t\tconsole.warn( 'THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.' );\n\t\t\tthis.setUsage( DynamicDrawUsage );\n\n\t\t}\n\t}\n\n} );\n\nBufferAttribute.prototype.setDynamic = function ( value ) {\n\n\tconsole.warn( 'THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead.' );\n\tthis.setUsage( value === true ? DynamicDrawUsage : StaticDrawUsage );\n\treturn this;\n\n};\n\nBufferAttribute.prototype.copyIndicesArray = function ( /* indices */ ) {\n\n\tconsole.error( 'THREE.BufferAttribute: .copyIndicesArray() has been removed.' );\n\n},\n\nBufferAttribute.prototype.setArray = function ( /* array */ ) {\n\n\tconsole.error( 'THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers' );\n\n};\n\n//\n\nBufferGeometry.prototype.addIndex = function ( index ) {\n\n\tconsole.warn( 'THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().' );\n\tthis.setIndex( index );\n\n};\n\nBufferGeometry.prototype.addAttribute = function ( name, attribute ) {\n\n\tconsole.warn( 'THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute().' );\n\n\tif ( ! ( attribute && attribute.isBufferAttribute ) && ! ( attribute && attribute.isInterleavedBufferAttribute ) ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).' );\n\n\t\treturn this.setAttribute( name, new BufferAttribute( arguments[ 1 ], arguments[ 2 ] ) );\n\n\t}\n\n\tif ( name === 'index' ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.' );\n\t\tthis.setIndex( attribute );\n\n\t\treturn this;\n\n\t}\n\n\treturn this.setAttribute( name, attribute );\n\n};\n\nBufferGeometry.prototype.addDrawCall = function ( start, count, indexOffset ) {\n\n\tif ( indexOffset !== undefined ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.' );\n\n\t}\n\n\tconsole.warn( 'THREE.BufferGeometry: .addDrawCall() is now .addGroup().' );\n\tthis.addGroup( start, count );\n\n};\n\nBufferGeometry.prototype.clearDrawCalls = function () {\n\n\tconsole.warn( 'THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().' );\n\tthis.clearGroups();\n\n};\n\nBufferGeometry.prototype.computeOffsets = function () {\n\n\tconsole.warn( 'THREE.BufferGeometry: .computeOffsets() has been removed.' );\n\n};\n\nBufferGeometry.prototype.removeAttribute = function ( name ) {\n\n\tconsole.warn( 'THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute().' );\n\n\treturn this.deleteAttribute( name );\n\n};\n\nBufferGeometry.prototype.applyMatrix = function ( matrix ) {\n\n\tconsole.warn( 'THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4().' );\n\treturn this.applyMatrix4( matrix );\n\n};\n\nObject.defineProperties( BufferGeometry.prototype, {\n\n\tdrawcalls: {\n\t\tget: function () {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry: .drawcalls has been renamed to .groups.' );\n\t\t\treturn this.groups;\n\n\t\t}\n\t},\n\toffsets: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .offsets has been renamed to .groups.' );\n\t\t\treturn this.groups;\n\n\t\t}\n\t}\n\n} );\n\nInterleavedBuffer.prototype.setDynamic = function ( value ) {\n\n\tconsole.warn( 'THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead.' );\n\tthis.setUsage( value === true ? DynamicDrawUsage : StaticDrawUsage );\n\treturn this;\n\n};\n\nInterleavedBuffer.prototype.setArray = function ( /* array */ ) {\n\n\tconsole.error( 'THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers' );\n\n};\n\n//\n\nExtrudeGeometry.prototype.getArrays = function () {\n\n\tconsole.error( 'THREE.ExtrudeGeometry: .getArrays() has been removed.' );\n\n};\n\nExtrudeGeometry.prototype.addShapeList = function () {\n\n\tconsole.error( 'THREE.ExtrudeGeometry: .addShapeList() has been removed.' );\n\n};\n\nExtrudeGeometry.prototype.addShape = function () {\n\n\tconsole.error( 'THREE.ExtrudeGeometry: .addShape() has been removed.' );\n\n};\n\n//\n\nScene.prototype.dispose = function () {\n\n\tconsole.error( 'THREE.Scene: .dispose() has been removed.' );\n\n};\n\n//\n\nUniform.prototype.onUpdate = function () {\n\n\tconsole.warn( 'THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.' );\n\treturn this;\n\n};\n\n//\n\nObject.defineProperties( Material.prototype, {\n\n\twrapAround: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .wrapAround has been removed.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .wrapAround has been removed.' );\n\n\t\t}\n\t},\n\n\toverdraw: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .overdraw has been removed.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .overdraw has been removed.' );\n\n\t\t}\n\t},\n\n\twrapRGB: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .wrapRGB has been removed.' );\n\t\t\treturn new Color();\n\n\t\t}\n\t},\n\n\tshading: {\n\t\tget: function () {\n\n\t\t\tconsole.error( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\t\t\tthis.flatShading = ( value === FlatShading );\n\n\t\t}\n\t},\n\n\tstencilMask: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.' + this.type + ': .stencilMask has been removed. Use .stencilFuncMask instead.' );\n\t\t\treturn this.stencilFuncMask;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.' + this.type + ': .stencilMask has been removed. Use .stencilFuncMask instead.' );\n\t\t\tthis.stencilFuncMask = value;\n\n\t\t}\n\t},\n\n\tvertexTangents: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.' + this.type + ': .vertexTangents has been removed.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.' + this.type + ': .vertexTangents has been removed.' );\n\n\t\t}\n\t},\n\n} );\n\nObject.defineProperties( ShaderMaterial.prototype, {\n\n\tderivatives: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' );\n\t\t\treturn this.extensions.derivatives;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' );\n\t\t\tthis.extensions.derivatives = value;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nWebGLRenderer.prototype.clearTarget = function ( renderTarget, color, depth, stencil ) {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead.' );\n\tthis.setRenderTarget( renderTarget );\n\tthis.clear( color, depth, stencil );\n\n};\n\nWebGLRenderer.prototype.animate = function ( callback ) {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .animate() is now .setAnimationLoop().' );\n\tthis.setAnimationLoop( callback );\n\n};\n\nWebGLRenderer.prototype.getCurrentRenderTarget = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().' );\n\treturn this.getRenderTarget();\n\n};\n\nWebGLRenderer.prototype.getMaxAnisotropy = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().' );\n\treturn this.capabilities.getMaxAnisotropy();\n\n};\n\nWebGLRenderer.prototype.getPrecision = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.' );\n\treturn this.capabilities.precision;\n\n};\n\nWebGLRenderer.prototype.resetGLState = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .resetGLState() is now .state.reset().' );\n\treturn this.state.reset();\n\n};\n\nWebGLRenderer.prototype.supportsFloatTextures = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( \\'OES_texture_float\\' ).' );\n\treturn this.extensions.get( 'OES_texture_float' );\n\n};\n\nWebGLRenderer.prototype.supportsHalfFloatTextures = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( \\'OES_texture_half_float\\' ).' );\n\treturn this.extensions.get( 'OES_texture_half_float' );\n\n};\n\nWebGLRenderer.prototype.supportsStandardDerivatives = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( \\'OES_standard_derivatives\\' ).' );\n\treturn this.extensions.get( 'OES_standard_derivatives' );\n\n};\n\nWebGLRenderer.prototype.supportsCompressedTextureS3TC = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( \\'WEBGL_compressed_texture_s3tc\\' ).' );\n\treturn this.extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n};\n\nWebGLRenderer.prototype.supportsCompressedTexturePVRTC = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( \\'WEBGL_compressed_texture_pvrtc\\' ).' );\n\treturn this.extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n};\n\nWebGLRenderer.prototype.supportsBlendMinMax = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( \\'EXT_blend_minmax\\' ).' );\n\treturn this.extensions.get( 'EXT_blend_minmax' );\n\n};\n\nWebGLRenderer.prototype.supportsVertexTextures = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.' );\n\treturn this.capabilities.vertexTextures;\n\n};\n\nWebGLRenderer.prototype.supportsInstancedArrays = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( \\'ANGLE_instanced_arrays\\' ).' );\n\treturn this.extensions.get( 'ANGLE_instanced_arrays' );\n\n};\n\nWebGLRenderer.prototype.enableScissorTest = function ( boolean ) {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().' );\n\tthis.setScissorTest( boolean );\n\n};\n\nWebGLRenderer.prototype.initMaterial = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .initMaterial() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.addPrePlugin = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .addPrePlugin() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.addPostPlugin = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .addPostPlugin() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.updateShadowMap = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .updateShadowMap() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.setFaceCulling = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .setFaceCulling() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.allocTextureUnit = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .allocTextureUnit() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.setTexture = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .setTexture() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.setTexture2D = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .setTexture2D() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.setTextureCube = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .setTextureCube() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.getActiveMipMapLevel = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel().' );\n\treturn this.getActiveMipmapLevel();\n\n};\n\nObject.defineProperties( WebGLRenderer.prototype, {\n\n\tshadowMapEnabled: {\n\t\tget: function () {\n\n\t\t\treturn this.shadowMap.enabled;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.' );\n\t\t\tthis.shadowMap.enabled = value;\n\n\t\t}\n\t},\n\tshadowMapType: {\n\t\tget: function () {\n\n\t\t\treturn this.shadowMap.type;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.' );\n\t\t\tthis.shadowMap.type = value;\n\n\t\t}\n\t},\n\tshadowMapCullFace: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function ( /* value */ ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t},\n\tcontext: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .context has been removed. Use .getContext() instead.' );\n\t\t\treturn this.getContext();\n\n\t\t}\n\t},\n\tvr: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .vr has been renamed to .xr' );\n\t\t\treturn this.xr;\n\n\t\t}\n\t},\n\tgammaInput: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.' );\n\t\t\treturn false;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.' );\n\n\t\t}\n\t},\n\tgammaOutput: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.' );\n\t\t\treturn false;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.' );\n\t\t\tthis.outputEncoding = ( value === true ) ? sRGBEncoding : LinearEncoding;\n\n\t\t}\n\t},\n\ttoneMappingWhitePoint: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.' );\n\t\t\treturn 1.0;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.' );\n\n\t\t}\n\t},\n\n} );\n\nObject.defineProperties( WebGLShadowMap.prototype, {\n\n\tcullFace: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function ( /* cullFace */ ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t},\n\trenderReverseSided: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t},\n\trenderSingleSided: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t}\n\n} );\n\nfunction WebGLRenderTargetCube( width, height, options ) {\n\n\tconsole.warn( 'THREE.WebGLRenderTargetCube( width, height, options ) is now WebGLCubeRenderTarget( size, options ).' );\n\treturn new WebGLCubeRenderTarget( width, options );\n\n}\n\n//\n\nObject.defineProperties( WebGLRenderTarget.prototype, {\n\n\twrapS: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' );\n\t\t\treturn this.texture.wrapS;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' );\n\t\t\tthis.texture.wrapS = value;\n\n\t\t}\n\t},\n\twrapT: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' );\n\t\t\treturn this.texture.wrapT;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' );\n\t\t\tthis.texture.wrapT = value;\n\n\t\t}\n\t},\n\tmagFilter: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' );\n\t\t\treturn this.texture.magFilter;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' );\n\t\t\tthis.texture.magFilter = value;\n\n\t\t}\n\t},\n\tminFilter: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' );\n\t\t\treturn this.texture.minFilter;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' );\n\t\t\tthis.texture.minFilter = value;\n\n\t\t}\n\t},\n\tanisotropy: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' );\n\t\t\treturn this.texture.anisotropy;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' );\n\t\t\tthis.texture.anisotropy = value;\n\n\t\t}\n\t},\n\toffset: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' );\n\t\t\treturn this.texture.offset;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' );\n\t\t\tthis.texture.offset = value;\n\n\t\t}\n\t},\n\trepeat: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' );\n\t\t\treturn this.texture.repeat;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' );\n\t\t\tthis.texture.repeat = value;\n\n\t\t}\n\t},\n\tformat: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' );\n\t\t\treturn this.texture.format;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' );\n\t\t\tthis.texture.format = value;\n\n\t\t}\n\t},\n\ttype: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' );\n\t\t\treturn this.texture.type;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' );\n\t\t\tthis.texture.type = value;\n\n\t\t}\n\t},\n\tgenerateMipmaps: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' );\n\t\t\treturn this.texture.generateMipmaps;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' );\n\t\t\tthis.texture.generateMipmaps = value;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nAudio.prototype.load = function ( file ) {\n\n\tconsole.warn( 'THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.' );\n\tconst scope = this;\n\tconst audioLoader = new AudioLoader();\n\taudioLoader.load( file, function ( buffer ) {\n\n\t\tscope.setBuffer( buffer );\n\n\t} );\n\treturn this;\n\n};\n\n\nAudioAnalyser.prototype.getData = function () {\n\n\tconsole.warn( 'THREE.AudioAnalyser: .getData() is now .getFrequencyData().' );\n\treturn this.getFrequencyData();\n\n};\n\n//\n\nCubeCamera.prototype.updateCubeMap = function ( renderer, scene ) {\n\n\tconsole.warn( 'THREE.CubeCamera: .updateCubeMap() is now .update().' );\n\treturn this.update( renderer, scene );\n\n};\n\nCubeCamera.prototype.clear = function ( renderer, color, depth, stencil ) {\n\n\tconsole.warn( 'THREE.CubeCamera: .clear() is now .renderTarget.clear().' );\n\treturn this.renderTarget.clear( renderer, color, depth, stencil );\n\n};\n\nImageUtils.crossOrigin = undefined;\n\nImageUtils.loadTexture = function ( url, mapping, onLoad, onError ) {\n\n\tconsole.warn( 'THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.' );\n\n\tconst loader = new TextureLoader();\n\tloader.setCrossOrigin( this.crossOrigin );\n\n\tconst texture = loader.load( url, onLoad, undefined, onError );\n\n\tif ( mapping ) texture.mapping = mapping;\n\n\treturn texture;\n\n};\n\nImageUtils.loadTextureCube = function ( urls, mapping, onLoad, onError ) {\n\n\tconsole.warn( 'THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.' );\n\n\tconst loader = new CubeTextureLoader();\n\tloader.setCrossOrigin( this.crossOrigin );\n\n\tconst texture = loader.load( urls, onLoad, undefined, onError );\n\n\tif ( mapping ) texture.mapping = mapping;\n\n\treturn texture;\n\n};\n\nImageUtils.loadCompressedTexture = function () {\n\n\tconsole.error( 'THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.' );\n\n};\n\nImageUtils.loadCompressedTextureCube = function () {\n\n\tconsole.error( 'THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.' );\n\n};\n\n//\n\nfunction CanvasRenderer() {\n\n\tconsole.error( 'THREE.CanvasRenderer has been removed' );\n\n}\n\n//\n\nfunction JSONLoader() {\n\n\tconsole.error( 'THREE.JSONLoader has been removed.' );\n\n}\n\n//\n\nconst SceneUtils = {\n\n\tcreateMultiMaterialObject: function ( /* geometry, materials */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js' );\n\n\t},\n\n\tdetach: function ( /* child, parent, scene */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js' );\n\n\t},\n\n\tattach: function ( /* child, scene, parent */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js' );\n\n\t}\n\n};\n\n//\n\nfunction LensFlare() {\n\n\tconsole.error( 'THREE.LensFlare has been moved to /examples/jsm/objects/Lensflare.js' );\n\n}\n\n//\n\nfunction ParametricGeometry() {\n\n\tconsole.error( 'THREE.ParametricGeometry has been moved to /examples/jsm/geometries/ParametricGeometry.js' );\n\treturn new BufferGeometry();\n\n}\n\nfunction TextGeometry() {\n\n\tconsole.error( 'THREE.TextGeometry has been moved to /examples/jsm/geometries/TextGeometry.js' );\n\treturn new BufferGeometry();\n\n}\n\nfunction FontLoader() {\n\n\tconsole.error( 'THREE.FontLoader has been moved to /examples/jsm/loaders/FontLoader.js' );\n\n}\n\nfunction Font() {\n\n\tconsole.error( 'THREE.Font has been moved to /examples/jsm/loaders/FontLoader.js' );\n\n}\n\nif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t/* eslint-disable no-undef */\n\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'register', { detail: {\n\t\trevision: REVISION,\n\t} } ) );\n\t/* eslint-enable no-undef */\n\n}\n\nif ( typeof window !== 'undefined' ) {\n\n\tif ( window.__THREE__ ) {\n\n\t\tconsole.warn( 'WARNING: Multiple instances of Three.js being imported.' );\n\n\t} else {\n\n\t\twindow.__THREE__ = REVISION;\n\n\t}\n\n}\n\nexport { ACESFilmicToneMapping, AddEquation, AddOperation, AdditiveAnimationBlendMode, AdditiveBlending, AlphaFormat, AlwaysDepth, AlwaysStencilFunc, AmbientLight, AmbientLightProbe, AnimationClip, AnimationLoader, AnimationMixer, AnimationObjectGroup, AnimationUtils, ArcCurve, ArrayCamera, ArrowHelper, Audio, AudioAnalyser, AudioContext, AudioListener, AudioLoader, AxesHelper, AxisHelper, BackSide, BasicDepthPacking, BasicShadowMap, BinaryTextureLoader, Bone, BooleanKeyframeTrack, BoundingBoxHelper, Box2, Box3, Box3Helper, BoxGeometry as BoxBufferGeometry, BoxGeometry, BoxHelper, BufferAttribute, BufferGeometry, BufferGeometryLoader, ByteType, Cache, Camera, CameraHelper, CanvasRenderer, CanvasTexture, CatmullRomCurve3, CineonToneMapping, CircleGeometry as CircleBufferGeometry, CircleGeometry, ClampToEdgeWrapping, Clock, Color, ColorKeyframeTrack, CompressedTexture, CompressedTextureLoader, ConeGeometry as ConeBufferGeometry, ConeGeometry, CubeCamera, CubeReflectionMapping, CubeRefractionMapping, CubeTexture, CubeTextureLoader, CubeUVReflectionMapping, CubeUVRefractionMapping, CubicBezierCurve, CubicBezierCurve3, CubicInterpolant, CullFaceBack, CullFaceFront, CullFaceFrontBack, CullFaceNone, Curve, CurvePath, CustomBlending, CustomToneMapping, CylinderGeometry as CylinderBufferGeometry, CylinderGeometry, Cylindrical, DataTexture, DataTexture2DArray, DataTexture3D, DataTextureLoader, DataUtils, DecrementStencilOp, DecrementWrapStencilOp, DefaultLoadingManager, DepthFormat, DepthStencilFormat, DepthTexture, DirectionalLight, DirectionalLightHelper, DiscreteInterpolant, DodecahedronGeometry as DodecahedronBufferGeometry, DodecahedronGeometry, DoubleSide, DstAlphaFactor, DstColorFactor, DynamicBufferAttribute, DynamicCopyUsage, DynamicDrawUsage, DynamicReadUsage, EdgesGeometry, EdgesHelper, EllipseCurve, EqualDepth, EqualStencilFunc, EquirectangularReflectionMapping, EquirectangularRefractionMapping, Euler, EventDispatcher, ExtrudeGeometry as ExtrudeBufferGeometry, ExtrudeGeometry, FaceColors, FileLoader, FlatShading, Float16BufferAttribute, Float32Attribute, Float32BufferAttribute, Float64Attribute, Float64BufferAttribute, FloatType, Fog, FogExp2, Font, FontLoader, FrontSide, Frustum, GLBufferAttribute, GLSL1, GLSL3, GammaEncoding, GreaterDepth, GreaterEqualDepth, GreaterEqualStencilFunc, GreaterStencilFunc, GridHelper, Group, HalfFloatType, HemisphereLight, HemisphereLightHelper, HemisphereLightProbe, IcosahedronGeometry as IcosahedronBufferGeometry, IcosahedronGeometry, ImageBitmapLoader, ImageLoader, ImageUtils, ImmediateRenderObject, IncrementStencilOp, IncrementWrapStencilOp, InstancedBufferAttribute, InstancedBufferGeometry, InstancedInterleavedBuffer, InstancedMesh, Int16Attribute, Int16BufferAttribute, Int32Attribute, Int32BufferAttribute, Int8Attribute, Int8BufferAttribute, IntType, InterleavedBuffer, InterleavedBufferAttribute, Interpolant, InterpolateDiscrete, InterpolateLinear, InterpolateSmooth, InvertStencilOp, JSONLoader, KeepStencilOp, KeyframeTrack, LOD, LatheGeometry as LatheBufferGeometry, LatheGeometry, Layers, LensFlare, LessDepth, LessEqualDepth, LessEqualStencilFunc, LessStencilFunc, Light, LightProbe, Line, Line3, LineBasicMaterial, LineCurve, LineCurve3, LineDashedMaterial, LineLoop, LinePieces, LineSegments, LineStrip, LinearEncoding, LinearFilter, LinearInterpolant, LinearMipMapLinearFilter, LinearMipMapNearestFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, LinearToneMapping, Loader, LoaderUtils, LoadingManager, LogLuvEncoding, LoopOnce, LoopPingPong, LoopRepeat, LuminanceAlphaFormat, LuminanceFormat, MOUSE, Material, MaterialLoader, MathUtils as Math, MathUtils, Matrix3, Matrix4, MaxEquation, Mesh, MeshBasicMaterial, MeshDepthMaterial, MeshDistanceMaterial, MeshFaceMaterial, MeshLambertMaterial, MeshMatcapMaterial, MeshNormalMaterial, MeshPhongMaterial, MeshPhysicalMaterial, MeshStandardMaterial, MeshToonMaterial, MinEquation, MirroredRepeatWrapping, MixOperation, MultiMaterial, MultiplyBlending, MultiplyOperation, NearestFilter, NearestMipMapLinearFilter, NearestMipMapNearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, NeverDepth, NeverStencilFunc, NoBlending, NoColors, NoToneMapping, NormalAnimationBlendMode, NormalBlending, NotEqualDepth, NotEqualStencilFunc, NumberKeyframeTrack, Object3D, ObjectLoader, ObjectSpaceNormalMap, OctahedronGeometry as OctahedronBufferGeometry, OctahedronGeometry, OneFactor, OneMinusDstAlphaFactor, OneMinusDstColorFactor, OneMinusSrcAlphaFactor, OneMinusSrcColorFactor, OrthographicCamera, PCFShadowMap, PCFSoftShadowMap, PMREMGenerator, ParametricGeometry, Particle, ParticleBasicMaterial, ParticleSystem, ParticleSystemMaterial, Path, PerspectiveCamera, Plane, PlaneGeometry as PlaneBufferGeometry, PlaneGeometry, PlaneHelper, PointCloud, PointCloudMaterial, PointLight, PointLightHelper, Points, PointsMaterial, PolarGridHelper, PolyhedronGeometry as PolyhedronBufferGeometry, PolyhedronGeometry, PositionalAudio, PropertyBinding, PropertyMixer, QuadraticBezierCurve, QuadraticBezierCurve3, Quaternion, QuaternionKeyframeTrack, QuaternionLinearInterpolant, REVISION, RGBADepthPacking, RGBAFormat, RGBAIntegerFormat, RGBA_ASTC_10x10_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_BPTC_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGBDEncoding, RGBEEncoding, RGBEFormat, RGBFormat, RGBIntegerFormat, RGBM16Encoding, RGBM7Encoding, RGB_ETC1_Format, RGB_ETC2_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGB_S3TC_DXT1_Format, RGFormat, RGIntegerFormat, RawShaderMaterial, Ray, Raycaster, RectAreaLight, RedFormat, RedIntegerFormat, ReinhardToneMapping, RepeatWrapping, ReplaceStencilOp, ReverseSubtractEquation, RingGeometry as RingBufferGeometry, RingGeometry, SRGB8_ALPHA8_ASTC_10x10_Format, SRGB8_ALPHA8_ASTC_10x5_Format, SRGB8_ALPHA8_ASTC_10x6_Format, SRGB8_ALPHA8_ASTC_10x8_Format, SRGB8_ALPHA8_ASTC_12x10_Format, SRGB8_ALPHA8_ASTC_12x12_Format, SRGB8_ALPHA8_ASTC_4x4_Format, SRGB8_ALPHA8_ASTC_5x4_Format, SRGB8_ALPHA8_ASTC_5x5_Format, SRGB8_ALPHA8_ASTC_6x5_Format, SRGB8_ALPHA8_ASTC_6x6_Format, SRGB8_ALPHA8_ASTC_8x5_Format, SRGB8_ALPHA8_ASTC_8x6_Format, SRGB8_ALPHA8_ASTC_8x8_Format, Scene, SceneUtils, ShaderChunk, ShaderLib, ShaderMaterial, ShadowMaterial, Shape, ShapeGeometry as ShapeBufferGeometry, ShapeGeometry, ShapePath, ShapeUtils, ShortType, Skeleton, SkeletonHelper, SkinnedMesh, SmoothShading, Sphere, SphereGeometry as SphereBufferGeometry, SphereGeometry, Spherical, SphericalHarmonics3, SplineCurve, SpotLight, SpotLightHelper, Sprite, SpriteMaterial, SrcAlphaFactor, SrcAlphaSaturateFactor, SrcColorFactor, StaticCopyUsage, StaticDrawUsage, StaticReadUsage, StereoCamera, StreamCopyUsage, StreamDrawUsage, StreamReadUsage, StringKeyframeTrack, SubtractEquation, SubtractiveBlending, TOUCH, TangentSpaceNormalMap, TetrahedronGeometry as TetrahedronBufferGeometry, TetrahedronGeometry, TextGeometry, Texture, TextureLoader, TorusGeometry as TorusBufferGeometry, TorusGeometry, TorusKnotGeometry as TorusKnotBufferGeometry, TorusKnotGeometry, Triangle, TriangleFanDrawMode, TriangleStripDrawMode, TrianglesDrawMode, TubeGeometry as TubeBufferGeometry, TubeGeometry, UVMapping, Uint16Attribute, Uint16BufferAttribute, Uint32Attribute, Uint32BufferAttribute, Uint8Attribute, Uint8BufferAttribute, Uint8ClampedAttribute, Uint8ClampedBufferAttribute, Uniform, UniformsLib, UniformsUtils, UnsignedByteType, UnsignedInt248Type, UnsignedIntType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedShort565Type, UnsignedShortType, VSMShadowMap, Vector2, Vector3, Vector4, VectorKeyframeTrack, Vertex, VertexColors, VideoTexture, WebGL1Renderer, WebGLCubeRenderTarget, WebGLMultipleRenderTargets, WebGLMultisampleRenderTarget, WebGLRenderTarget, WebGLRenderTargetCube, WebGLRenderer, WebGLUtils, WireframeGeometry, WireframeHelper, WrapAroundEnding, XHRLoader, ZeroCurvatureEnding, ZeroFactor, ZeroSlopeEnding, ZeroStencilOp, sRGBEncoding };\n","/*\n** Copyright (c) 2012 The Khronos Group Inc.\n**\n** Permission is hereby granted, free of charge, to any person obtaining a\n** copy of this software and/or associated documentation files (the\n** \"Materials\"), to deal in the Materials without restriction, including\n** without limitation the rights to use, copy, modify, merge, publish,\n** distribute, sublicense, and/or sell copies of the Materials, and to\n** permit persons to whom the Materials are furnished to do so, subject to\n** the following conditions:\n**\n** The above copyright notice and this permission notice shall be included\n** in all copies or substantial portions of the Materials.\n**\n** THE MATERIALS ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.\n*/\n\n//Ported to node by Marcin Ignac on 2016-05-20\n\n// Various functions for helping debug WebGL apps.\n\nWebGLDebugUtils = function() {\nvar window\n\n//polyfill window in node\nif (typeof(window) == 'undefined') {\n window = global;\n}\n\n/**\n * Wrapped logging function.\n * @param {string} msg Message to log.\n */\nvar log = function(msg) {\n if (window.console && window.console.log) {\n window.console.log(msg);\n }\n};\n\n/**\n * Wrapped error logging function.\n * @param {string} msg Message to log.\n */\nvar error = function(msg) {\n if (window.console && window.console.error) {\n window.console.error(msg);\n } else {\n log(msg);\n }\n};\n\n\n/**\n * Which arguments are enums based on the number of arguments to the function.\n * So\n * 'texImage2D': {\n * 9: { 0:true, 2:true, 6:true, 7:true },\n * 6: { 0:true, 2:true, 3:true, 4:true },\n * },\n *\n * means if there are 9 arguments then 6 and 7 are enums, if there are 6\n * arguments 3 and 4 are enums\n *\n * @type {!Object.}\n */\nvar glValidEnumContexts = {\n // Generic setters and getters\n\n 'enable': {1: { 0:true }},\n 'disable': {1: { 0:true }},\n 'getParameter': {1: { 0:true }},\n\n // Rendering\n\n 'drawArrays': {3:{ 0:true }},\n 'drawElements': {4:{ 0:true, 2:true }},\n\n // Shaders\n\n 'createShader': {1: { 0:true }},\n 'getShaderParameter': {2: { 1:true }},\n 'getProgramParameter': {2: { 1:true }},\n 'getShaderPrecisionFormat': {2: { 0: true, 1:true }},\n\n // Vertex attributes\n\n 'getVertexAttrib': {2: { 1:true }},\n 'vertexAttribPointer': {6: { 2:true }},\n\n // Textures\n\n 'bindTexture': {2: { 0:true }},\n 'activeTexture': {1: { 0:true }},\n 'getTexParameter': {2: { 0:true, 1:true }},\n 'texParameterf': {3: { 0:true, 1:true }},\n 'texParameteri': {3: { 0:true, 1:true, 2:true }},\n // texImage2D and texSubImage2D are defined below with WebGL 2 entrypoints\n 'copyTexImage2D': {8: { 0:true, 2:true }},\n 'copyTexSubImage2D': {8: { 0:true }},\n 'generateMipmap': {1: { 0:true }},\n // compressedTexImage2D and compressedTexSubImage2D are defined below with WebGL 2 entrypoints\n\n // Buffer objects\n\n 'bindBuffer': {2: { 0:true }},\n // bufferData and bufferSubData are defined below with WebGL 2 entrypoints\n 'getBufferParameter': {2: { 0:true, 1:true }},\n\n // Renderbuffers and framebuffers\n\n 'pixelStorei': {2: { 0:true, 1:true }},\n // readPixels is defined below with WebGL 2 entrypoints\n 'bindRenderbuffer': {2: { 0:true }},\n 'bindFramebuffer': {2: { 0:true }},\n 'checkFramebufferStatus': {1: { 0:true }},\n 'framebufferRenderbuffer': {4: { 0:true, 1:true, 2:true }},\n 'framebufferTexture2D': {5: { 0:true, 1:true, 2:true }},\n 'getFramebufferAttachmentParameter': {3: { 0:true, 1:true, 2:true }},\n 'getRenderbufferParameter': {2: { 0:true, 1:true }},\n 'renderbufferStorage': {4: { 0:true, 1:true }},\n\n // Frame buffer operations (clear, blend, depth test, stencil)\n\n 'clear': {1: { 0: { 'enumBitwiseOr': ['COLOR_BUFFER_BIT', 'DEPTH_BUFFER_BIT', 'STENCIL_BUFFER_BIT'] }}},\n 'depthFunc': {1: { 0:true }},\n 'blendFunc': {2: { 0:true, 1:true }},\n 'blendFuncSeparate': {4: { 0:true, 1:true, 2:true, 3:true }},\n 'blendEquation': {1: { 0:true }},\n 'blendEquationSeparate': {2: { 0:true, 1:true }},\n 'stencilFunc': {3: { 0:true }},\n 'stencilFuncSeparate': {4: { 0:true, 1:true }},\n 'stencilMaskSeparate': {2: { 0:true }},\n 'stencilOp': {3: { 0:true, 1:true, 2:true }},\n 'stencilOpSeparate': {4: { 0:true, 1:true, 2:true, 3:true }},\n\n // Culling\n\n 'cullFace': {1: { 0:true }},\n 'frontFace': {1: { 0:true }},\n\n // ANGLE_instanced_arrays extension\n\n 'drawArraysInstancedANGLE': {4: { 0:true }},\n 'drawElementsInstancedANGLE': {5: { 0:true, 2:true }},\n\n // EXT_blend_minmax extension\n\n 'blendEquationEXT': {1: { 0:true }},\n\n // WebGL 2 Buffer objects\n\n 'bufferData': {\n 3: { 0:true, 2:true }, // WebGL 1\n 4: { 0:true, 2:true }, // WebGL 2\n 5: { 0:true, 2:true } // WebGL 2\n },\n 'bufferSubData': {\n 3: { 0:true }, // WebGL 1\n 4: { 0:true }, // WebGL 2\n 5: { 0:true } // WebGL 2\n },\n 'copyBufferSubData': {5: { 0:true, 1:true }},\n 'getBufferSubData': {3: { 0:true }, 4: { 0:true }, 5: { 0:true }},\n\n // WebGL 2 Framebuffer objects\n\n 'blitFramebuffer': {10: { 8: { 'enumBitwiseOr': ['COLOR_BUFFER_BIT', 'DEPTH_BUFFER_BIT', 'STENCIL_BUFFER_BIT'] }, 9:true }},\n 'framebufferTextureLayer': {5: { 0:true, 1:true }},\n 'invalidateFramebuffer': {2: { 0:true }},\n 'invalidateSubFramebuffer': {6: { 0:true }},\n 'readBuffer': {1: { 0:true }},\n\n // WebGL 2 Renderbuffer objects\n\n 'getInternalformatParameter': {3: { 0:true, 1:true, 2:true }},\n 'renderbufferStorageMultisample': {5: { 0:true, 2:true }},\n\n // WebGL 2 Texture objects\n\n 'texStorage2D': {5: { 0:true, 2:true }},\n 'texStorage3D': {6: { 0:true, 2:true }},\n 'texImage2D': {\n 9: { 0:true, 2:true, 6:true, 7:true }, // WebGL 1 & 2\n 6: { 0:true, 2:true, 3:true, 4:true }, // WebGL 1\n 10: { 0:true, 2:true, 6:true, 7:true } // WebGL 2\n },\n 'texImage3D': {\n 10: { 0:true, 2:true, 7:true, 8:true },\n 11: { 0:true, 2:true, 7:true, 8:true }\n },\n 'texSubImage2D': {\n 9: { 0:true, 6:true, 7:true }, // WebGL 1 & 2\n 7: { 0:true, 4:true, 5:true }, // WebGL 1\n 10: { 0:true, 6:true, 7:true } // WebGL 2\n },\n 'texSubImage3D': {\n 11: { 0:true, 8:true, 9:true },\n 12: { 0:true, 8:true, 9:true }\n },\n 'copyTexSubImage3D': {9: { 0:true }},\n 'compressedTexImage2D': {\n 7: { 0: true, 2:true }, // WebGL 1 & 2\n 8: { 0: true, 2:true }, // WebGL 2\n 9: { 0: true, 2:true } // WebGL 2\n },\n 'compressedTexImage3D': {\n 8: { 0: true, 2:true },\n 9: { 0: true, 2:true },\n 10: { 0: true, 2:true }\n },\n 'compressedTexSubImage2D': {\n 8: { 0: true, 6:true }, // WebGL 1 & 2\n 9: { 0: true, 6:true }, // WebGL 2\n 10: { 0: true, 6:true } // WebGL 2\n },\n 'compressedTexSubImage3D': {\n 10: { 0: true, 8:true },\n 11: { 0: true, 8:true },\n 12: { 0: true, 8:true }\n },\n\n // WebGL 2 Vertex attribs\n\n 'vertexAttribIPointer': {5: { 2:true }},\n\n // WebGL 2 Writing to the drawing buffer\n\n 'drawArraysInstanced': {4: { 0:true }},\n 'drawElementsInstanced': {5: { 0:true, 2:true }},\n 'drawRangeElements': {6: { 0:true, 4:true }},\n\n // WebGL 2 Reading back pixels\n\n 'readPixels': {\n 7: { 4:true, 5:true }, // WebGL 1 & 2\n 8: { 4:true, 5:true } // WebGL 2\n },\n\n // WebGL 2 Multiple Render Targets\n\n 'clearBufferfv': {3: { 0:true }, 4: { 0:true }},\n 'clearBufferiv': {3: { 0:true }, 4: { 0:true }},\n 'clearBufferuiv': {3: { 0:true }, 4: { 0:true }},\n 'clearBufferfi': {4: { 0:true }},\n\n // WebGL 2 Query objects\n\n 'beginQuery': {2: { 0:true }},\n 'endQuery': {1: { 0:true }},\n 'getQuery': {2: { 0:true, 1:true }},\n 'getQueryParameter': {2: { 1:true }},\n\n // WebGL 2 Sampler objects\n\n 'samplerParameteri': {3: { 1:true, 2:true }},\n 'samplerParameterf': {3: { 1:true }},\n 'getSamplerParameter': {2: { 1:true }},\n\n // WebGL 2 Sync objects\n\n 'fenceSync': {2: { 0:true, 1: { 'enumBitwiseOr': [] } }},\n 'clientWaitSync': {3: { 1: { 'enumBitwiseOr': ['SYNC_FLUSH_COMMANDS_BIT'] } }},\n 'waitSync': {3: { 1: { 'enumBitwiseOr': [] } }},\n 'getSyncParameter': {2: { 1:true }},\n\n // WebGL 2 Transform Feedback\n\n 'bindTransformFeedback': {2: { 0:true }},\n 'beginTransformFeedback': {1: { 0:true }},\n 'transformFeedbackVaryings': {3: { 2:true }},\n\n // WebGL2 Uniform Buffer Objects and Transform Feedback Buffers\n\n 'bindBufferBase': {3: { 0:true }},\n 'bindBufferRange': {5: { 0:true }},\n 'getIndexedParameter': {2: { 0:true }},\n 'getActiveUniforms': {3: { 2:true }},\n 'getActiveUniformBlockParameter': {3: { 2:true }}\n};\n\n/**\n * Map of numbers to names.\n * @type {Object}\n */\nvar glEnums = null;\n\n/**\n * Map of names to numbers.\n * @type {Object}\n */\nvar enumStringToValue = null;\n\n/**\n * Initializes this module. Safe to call more than once.\n * @param {!WebGLRenderingContext} ctx A WebGL context. If\n * you have more than one context it doesn't matter which one\n * you pass in, it is only used to pull out constants.\n */\nfunction init(ctx) {\n if (glEnums == null) {\n glEnums = { };\n enumStringToValue = { };\n for (var propertyName in ctx) {\n if (typeof ctx[propertyName] == 'number') {\n glEnums[ctx[propertyName]] = propertyName;\n enumStringToValue[propertyName] = ctx[propertyName];\n }\n }\n }\n}\n\n/**\n * Checks the utils have been initialized.\n */\nfunction checkInit() {\n if (glEnums == null) {\n throw 'WebGLDebugUtils.init(ctx) not called';\n }\n}\n\n/**\n * Returns true or false if value matches any WebGL enum\n * @param {*} value Value to check if it might be an enum.\n * @return {boolean} True if value matches one of the WebGL defined enums\n */\nfunction mightBeEnum(value) {\n checkInit();\n return (glEnums[value] !== undefined);\n}\n\n/**\n * Gets an string version of an WebGL enum.\n *\n * Example:\n * var str = WebGLDebugUtil.glEnumToString(ctx.getError());\n *\n * @param {number} value Value to return an enum for\n * @return {string} The string version of the enum.\n */\nfunction glEnumToString(value) {\n checkInit();\n var name = glEnums[value];\n return (name !== undefined) ? (\"gl.\" + name) :\n (\"/*UNKNOWN WebGL ENUM*/ 0x\" + value.toString(16) + \"\");\n}\n\n/**\n * Returns the string version of a WebGL argument.\n * Attempts to convert enum arguments to strings.\n * @param {string} functionName the name of the WebGL function.\n * @param {number} numArgs the number of arguments passed to the function.\n * @param {number} argumentIndx the index of the argument.\n * @param {*} value The value of the argument.\n * @return {string} The value as a string.\n */\nfunction glFunctionArgToString(functionName, numArgs, argumentIndex, value) {\n var funcInfo = glValidEnumContexts[functionName];\n if (funcInfo !== undefined) {\n var funcInfo = funcInfo[numArgs];\n if (funcInfo !== undefined) {\n if (funcInfo[argumentIndex]) {\n if (typeof funcInfo[argumentIndex] === 'object' &&\n funcInfo[argumentIndex]['enumBitwiseOr'] !== undefined) {\n var enums = funcInfo[argumentIndex]['enumBitwiseOr'];\n var orResult = 0;\n var orEnums = [];\n for (var i = 0; i < enums.length; ++i) {\n var enumValue = enumStringToValue[enums[i]];\n if ((value & enumValue) !== 0) {\n orResult |= enumValue;\n orEnums.push(glEnumToString(enumValue));\n }\n }\n if (orResult === value) {\n return orEnums.join(' | ');\n } else {\n return glEnumToString(value);\n }\n } else {\n return glEnumToString(value);\n }\n }\n }\n }\n if (value === null) {\n return \"null\";\n } else if (value === undefined) {\n return \"undefined\";\n } else {\n return value.toString();\n }\n}\n\n/**\n * Converts the arguments of a WebGL function to a string.\n * Attempts to convert enum arguments to strings.\n *\n * @param {string} functionName the name of the WebGL function.\n * @param {number} args The arguments.\n * @return {string} The arguments as a string.\n */\nfunction glFunctionArgsToString(functionName, args) {\n // apparently we can't do args.join(\",\");\n var argStr = \"\";\n var numArgs = args.length;\n for (var ii = 0; ii < numArgs; ++ii) {\n argStr += ((ii == 0) ? '' : ', ') +\n glFunctionArgToString(functionName, numArgs, ii, args[ii]);\n }\n return argStr;\n};\n\n\nfunction makePropertyWrapper(wrapper, original, propertyName) {\n //log(\"wrap prop: \" + propertyName);\n wrapper.__defineGetter__(propertyName, function() {\n return original[propertyName];\n });\n // TODO(gmane): this needs to handle properties that take more than\n // one value?\n wrapper.__defineSetter__(propertyName, function(value) {\n //log(\"set: \" + propertyName);\n original[propertyName] = value;\n });\n}\n\n// Makes a function that calls a function on another object.\nfunction makeFunctionWrapper(original, functionName) {\n //log(\"wrap fn: \" + functionName);\n var f = original[functionName];\n return function() {\n //log(\"call: \" + functionName);\n var result = f.apply(original, arguments);\n return result;\n };\n}\n\n/**\n * Given a WebGL context returns a wrapped context that calls\n * gl.getError after every command and calls a function if the\n * result is not gl.NO_ERROR.\n *\n * @param {!WebGLRenderingContext} ctx The webgl context to\n * wrap.\n * @param {!function(err, funcName, args): void} opt_onErrorFunc\n * The function to call when gl.getError returns an\n * error. If not specified the default function calls\n * console.log with a message.\n * @param {!function(funcName, args): void} opt_onFunc The\n * function to call when each webgl function is called.\n * You can use this to log all calls for example.\n * @param {!WebGLRenderingContext} opt_err_ctx The webgl context\n * to call getError on if different than ctx.\n */\nfunction makeDebugContext(ctx, opt_onErrorFunc, opt_onFunc, opt_err_ctx) {\n opt_err_ctx = opt_err_ctx || ctx;\n init(ctx);\n opt_onErrorFunc = opt_onErrorFunc || function(err, functionName, args) {\n // apparently we can't do args.join(\",\");\n var argStr = \"\";\n var numArgs = args.length;\n for (var ii = 0; ii < numArgs; ++ii) {\n argStr += ((ii == 0) ? '' : ', ') +\n glFunctionArgToString(functionName, numArgs, ii, args[ii]);\n }\n error(\"WebGL error \"+ glEnumToString(err) + \" in \"+ functionName +\n \"(\" + argStr + \")\");\n };\n\n // Holds booleans for each GL error so after we get the error ourselves\n // we can still return it to the client app.\n var glErrorShadow = { };\n\n // Makes a function that calls a WebGL function and then calls getError.\n function makeErrorWrapper(ctx, functionName) {\n return function() {\n if (opt_onFunc) {\n opt_onFunc(functionName, arguments);\n }\n var result = ctx[functionName].apply(ctx, arguments);\n var err = opt_err_ctx.getError();\n if (err != 0) {\n glErrorShadow[err] = true;\n opt_onErrorFunc(err, functionName, arguments);\n }\n return result;\n };\n }\n\n // Make a an object that has a copy of every property of the WebGL context\n // but wraps all functions.\n var wrapper = {};\n for (var propertyName in ctx) {\n if (typeof ctx[propertyName] == 'function') {\n if (propertyName != 'getExtension') {\n wrapper[propertyName] = makeErrorWrapper(ctx, propertyName);\n } else {\n var wrapped = makeErrorWrapper(ctx, propertyName);\n wrapper[propertyName] = function () {\n var result = wrapped.apply(ctx, arguments);\n if (!result) {\n return null;\n }\n return makeDebugContext(result, opt_onErrorFunc, opt_onFunc, opt_err_ctx);\n };\n }\n } else {\n makePropertyWrapper(wrapper, ctx, propertyName);\n }\n }\n\n // Override the getError function with one that returns our saved results.\n wrapper.getError = function() {\n for (var err in glErrorShadow) {\n if (glErrorShadow.hasOwnProperty(err)) {\n if (glErrorShadow[err]) {\n glErrorShadow[err] = false;\n return err;\n }\n }\n }\n return ctx.NO_ERROR;\n };\n\n return wrapper;\n}\n\nfunction resetToInitialState(ctx) {\n var isWebGL2RenderingContext = !!ctx.createTransformFeedback;\n\n if (isWebGL2RenderingContext) {\n ctx.bindVertexArray(null);\n }\n\n var numAttribs = ctx.getParameter(ctx.MAX_VERTEX_ATTRIBS);\n var tmp = ctx.createBuffer();\n ctx.bindBuffer(ctx.ARRAY_BUFFER, tmp);\n for (var ii = 0; ii < numAttribs; ++ii) {\n ctx.disableVertexAttribArray(ii);\n ctx.vertexAttribPointer(ii, 4, ctx.FLOAT, false, 0, 0);\n ctx.vertexAttrib1f(ii, 0);\n if (isWebGL2RenderingContext) {\n ctx.vertexAttribDivisor(ii, 0);\n }\n }\n ctx.deleteBuffer(tmp);\n\n var numTextureUnits = ctx.getParameter(ctx.MAX_TEXTURE_IMAGE_UNITS);\n for (var ii = 0; ii < numTextureUnits; ++ii) {\n ctx.activeTexture(ctx.TEXTURE0 + ii);\n ctx.bindTexture(ctx.TEXTURE_CUBE_MAP, null);\n ctx.bindTexture(ctx.TEXTURE_2D, null);\n if (isWebGL2RenderingContext) {\n ctx.bindTexture(ctx.TEXTURE_2D_ARRAY, null);\n ctx.bindTexture(ctx.TEXTURE_3D, null);\n ctx.bindSampler(ii, null);\n }\n }\n\n ctx.activeTexture(ctx.TEXTURE0);\n ctx.useProgram(null);\n ctx.bindBuffer(ctx.ARRAY_BUFFER, null);\n ctx.bindBuffer(ctx.ELEMENT_ARRAY_BUFFER, null);\n ctx.bindFramebuffer(ctx.FRAMEBUFFER, null);\n ctx.bindRenderbuffer(ctx.RENDERBUFFER, null);\n ctx.disable(ctx.BLEND);\n ctx.disable(ctx.CULL_FACE);\n ctx.disable(ctx.DEPTH_TEST);\n ctx.disable(ctx.DITHER);\n ctx.disable(ctx.SCISSOR_TEST);\n ctx.blendColor(0, 0, 0, 0);\n ctx.blendEquation(ctx.FUNC_ADD);\n ctx.blendFunc(ctx.ONE, ctx.ZERO);\n ctx.clearColor(0, 0, 0, 0);\n ctx.clearDepth(1);\n ctx.clearStencil(-1);\n ctx.colorMask(true, true, true, true);\n ctx.cullFace(ctx.BACK);\n ctx.depthFunc(ctx.LESS);\n ctx.depthMask(true);\n ctx.depthRange(0, 1);\n ctx.frontFace(ctx.CCW);\n ctx.hint(ctx.GENERATE_MIPMAP_HINT, ctx.DONT_CARE);\n ctx.lineWidth(1);\n ctx.pixelStorei(ctx.PACK_ALIGNMENT, 4);\n ctx.pixelStorei(ctx.UNPACK_ALIGNMENT, 4);\n ctx.pixelStorei(ctx.UNPACK_FLIP_Y_WEBGL, false);\n ctx.pixelStorei(ctx.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\n // TODO: Delete this IF.\n if (ctx.UNPACK_COLORSPACE_CONVERSION_WEBGL) {\n ctx.pixelStorei(ctx.UNPACK_COLORSPACE_CONVERSION_WEBGL, ctx.BROWSER_DEFAULT_WEBGL);\n }\n ctx.polygonOffset(0, 0);\n ctx.sampleCoverage(1, false);\n ctx.scissor(0, 0, ctx.canvas.width, ctx.canvas.height);\n ctx.stencilFunc(ctx.ALWAYS, 0, 0xFFFFFFFF);\n ctx.stencilMask(0xFFFFFFFF);\n ctx.stencilOp(ctx.KEEP, ctx.KEEP, ctx.KEEP);\n ctx.viewport(0, 0, ctx.canvas.width, ctx.canvas.height);\n ctx.clear(ctx.COLOR_BUFFER_BIT | ctx.DEPTH_BUFFER_BIT | ctx.STENCIL_BUFFER_BIT);\n\n if (isWebGL2RenderingContext) {\n ctx.drawBuffers([ctx.BACK]);\n ctx.readBuffer(ctx.BACK);\n ctx.bindBuffer(ctx.COPY_READ_BUFFER, null);\n ctx.bindBuffer(ctx.COPY_WRITE_BUFFER, null);\n ctx.bindBuffer(ctx.PIXEL_PACK_BUFFER, null);\n ctx.bindBuffer(ctx.PIXEL_UNPACK_BUFFER, null);\n var numTransformFeedbacks = ctx.getParameter(ctx.MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS);\n for (var ii = 0; ii < numTransformFeedbacks; ++ii) {\n ctx.bindBufferBase(ctx.TRANSFORM_FEEDBACK_BUFFER, ii, null);\n }\n var numUBOs = ctx.getParameter(ctx.MAX_UNIFORM_BUFFER_BINDINGS);\n for (var ii = 0; ii < numUBOs; ++ii) {\n ctx.bindBufferBase(ctx.UNIFORM_BUFFER, ii, null);\n }\n ctx.disable(ctx.RASTERIZER_DISCARD);\n ctx.pixelStorei(ctx.UNPACK_IMAGE_HEIGHT, 0);\n ctx.pixelStorei(ctx.UNPACK_SKIP_IMAGES, 0);\n ctx.pixelStorei(ctx.UNPACK_ROW_LENGTH, 0);\n ctx.pixelStorei(ctx.UNPACK_SKIP_ROWS, 0);\n ctx.pixelStorei(ctx.UNPACK_SKIP_PIXELS, 0);\n ctx.pixelStorei(ctx.PACK_ROW_LENGTH, 0);\n ctx.pixelStorei(ctx.PACK_SKIP_ROWS, 0);\n ctx.pixelStorei(ctx.PACK_SKIP_PIXELS, 0);\n ctx.hint(ctx.FRAGMENT_SHADER_DERIVATIVE_HINT, ctx.DONT_CARE);\n }\n\n // TODO: This should NOT be needed but Firefox fails with 'hint'\n while(ctx.getError());\n}\n\nfunction makeLostContextSimulatingCanvas(canvas) {\n var unwrappedContext_;\n var wrappedContext_;\n var onLost_ = [];\n var onRestored_ = [];\n var wrappedContext_ = {};\n var contextId_ = 1;\n var contextLost_ = false;\n var resourceId_ = 0;\n var resourceDb_ = [];\n var numCallsToLoseContext_ = 0;\n var numCalls_ = 0;\n var canRestore_ = false;\n var restoreTimeout_ = 0;\n var isWebGL2RenderingContext;\n\n // Holds booleans for each GL error so can simulate errors.\n var glErrorShadow_ = { };\n\n canvas.getContext = function(f) {\n return function() {\n var ctx = f.apply(canvas, arguments);\n // Did we get a context and is it a WebGL context?\n if ((ctx instanceof WebGLRenderingContext) || (window.WebGL2RenderingContext && (ctx instanceof WebGL2RenderingContext))) {\n if (ctx != unwrappedContext_) {\n if (unwrappedContext_) {\n throw \"got different context\"\n }\n isWebGL2RenderingContext = window.WebGL2RenderingContext && (ctx instanceof WebGL2RenderingContext);\n unwrappedContext_ = ctx;\n wrappedContext_ = makeLostContextSimulatingContext(unwrappedContext_);\n }\n return wrappedContext_;\n }\n return ctx;\n }\n }(canvas.getContext);\n\n function wrapEvent(listener) {\n if (typeof(listener) == \"function\") {\n return listener;\n } else {\n return function(info) {\n listener.handleEvent(info);\n }\n }\n }\n\n var addOnContextLostListener = function(listener) {\n onLost_.push(wrapEvent(listener));\n };\n\n var addOnContextRestoredListener = function(listener) {\n onRestored_.push(wrapEvent(listener));\n };\n\n\n function wrapAddEventListener(canvas) {\n var f = canvas.addEventListener;\n canvas.addEventListener = function(type, listener, bubble) {\n switch (type) {\n case 'webglcontextlost':\n addOnContextLostListener(listener);\n break;\n case 'webglcontextrestored':\n addOnContextRestoredListener(listener);\n break;\n default:\n f.apply(canvas, arguments);\n }\n };\n }\n\n wrapAddEventListener(canvas);\n\n canvas.loseContext = function() {\n if (!contextLost_) {\n contextLost_ = true;\n numCallsToLoseContext_ = 0;\n ++contextId_;\n while (unwrappedContext_.getError());\n clearErrors();\n glErrorShadow_[unwrappedContext_.CONTEXT_LOST_WEBGL] = true;\n var event = makeWebGLContextEvent(\"context lost\");\n var callbacks = onLost_.slice();\n setTimeout(function() {\n //log(\"numCallbacks:\" + callbacks.length);\n for (var ii = 0; ii < callbacks.length; ++ii) {\n //log(\"calling callback:\" + ii);\n callbacks[ii](event);\n }\n if (restoreTimeout_ >= 0) {\n setTimeout(function() {\n canvas.restoreContext();\n }, restoreTimeout_);\n }\n }, 0);\n }\n };\n\n canvas.restoreContext = function() {\n if (contextLost_) {\n if (onRestored_.length) {\n setTimeout(function() {\n if (!canRestore_) {\n throw \"can not restore. webglcontestlost listener did not call event.preventDefault\";\n }\n freeResources();\n resetToInitialState(unwrappedContext_);\n contextLost_ = false;\n numCalls_ = 0;\n canRestore_ = false;\n var callbacks = onRestored_.slice();\n var event = makeWebGLContextEvent(\"context restored\");\n for (var ii = 0; ii < callbacks.length; ++ii) {\n callbacks[ii](event);\n }\n }, 0);\n }\n }\n };\n\n canvas.loseContextInNCalls = function(numCalls) {\n if (contextLost_) {\n throw \"You can not ask a lost contet to be lost\";\n }\n numCallsToLoseContext_ = numCalls_ + numCalls;\n };\n\n canvas.getNumCalls = function() {\n return numCalls_;\n };\n\n canvas.setRestoreTimeout = function(timeout) {\n restoreTimeout_ = timeout;\n };\n\n function isWebGLObject(obj) {\n //return false;\n return (obj instanceof WebGLBuffer ||\n obj instanceof WebGLFramebuffer ||\n obj instanceof WebGLProgram ||\n obj instanceof WebGLRenderbuffer ||\n obj instanceof WebGLShader ||\n obj instanceof WebGLTexture);\n }\n\n function checkResources(args) {\n for (var ii = 0; ii < args.length; ++ii) {\n var arg = args[ii];\n if (isWebGLObject(arg)) {\n return arg.__webglDebugContextLostId__ == contextId_;\n }\n }\n return true;\n }\n\n function clearErrors() {\n var k = Object.keys(glErrorShadow_);\n for (var ii = 0; ii < k.length; ++ii) {\n delete glErrorShadow_[k[ii]];\n }\n }\n\n function loseContextIfTime() {\n ++numCalls_;\n if (!contextLost_) {\n if (numCallsToLoseContext_ == numCalls_) {\n canvas.loseContext();\n }\n }\n }\n\n // Makes a function that simulates WebGL when out of context.\n function makeLostContextFunctionWrapper(ctx, functionName) {\n var f = ctx[functionName];\n return function() {\n // log(\"calling:\" + functionName);\n // Only call the functions if the context is not lost.\n loseContextIfTime();\n if (!contextLost_) {\n //if (!checkResources(arguments)) {\n // glErrorShadow_[wrappedContext_.INVALID_OPERATION] = true;\n // return;\n //}\n var result = f.apply(ctx, arguments);\n return result;\n }\n };\n }\n\n function freeResources() {\n for (var ii = 0; ii < resourceDb_.length; ++ii) {\n var resource = resourceDb_[ii];\n if (resource instanceof WebGLBuffer) {\n unwrappedContext_.deleteBuffer(resource);\n } else if (resource instanceof WebGLFramebuffer) {\n unwrappedContext_.deleteFramebuffer(resource);\n } else if (resource instanceof WebGLProgram) {\n unwrappedContext_.deleteProgram(resource);\n } else if (resource instanceof WebGLRenderbuffer) {\n unwrappedContext_.deleteRenderbuffer(resource);\n } else if (resource instanceof WebGLShader) {\n unwrappedContext_.deleteShader(resource);\n } else if (resource instanceof WebGLTexture) {\n unwrappedContext_.deleteTexture(resource);\n }\n else if (isWebGL2RenderingContext) {\n if (resource instanceof WebGLQuery) {\n unwrappedContext_.deleteQuery(resource);\n } else if (resource instanceof WebGLSampler) {\n unwrappedContext_.deleteSampler(resource);\n } else if (resource instanceof WebGLSync) {\n unwrappedContext_.deleteSync(resource);\n } else if (resource instanceof WebGLTransformFeedback) {\n unwrappedContext_.deleteTransformFeedback(resource);\n } else if (resource instanceof WebGLVertexArrayObject) {\n unwrappedContext_.deleteVertexArray(resource);\n }\n }\n }\n }\n\n function makeWebGLContextEvent(statusMessage) {\n return {\n statusMessage: statusMessage,\n preventDefault: function() {\n canRestore_ = true;\n }\n };\n }\n\n return canvas;\n\n function makeLostContextSimulatingContext(ctx) {\n // copy all functions and properties to wrapper\n for (var propertyName in ctx) {\n if (typeof ctx[propertyName] == 'function') {\n wrappedContext_[propertyName] = makeLostContextFunctionWrapper(\n ctx, propertyName);\n } else {\n makePropertyWrapper(wrappedContext_, ctx, propertyName);\n }\n }\n\n // Wrap a few functions specially.\n wrappedContext_.getError = function() {\n loseContextIfTime();\n if (!contextLost_) {\n var err;\n while (err = unwrappedContext_.getError()) {\n glErrorShadow_[err] = true;\n }\n }\n for (var err in glErrorShadow_) {\n if (glErrorShadow_[err]) {\n delete glErrorShadow_[err];\n return err;\n }\n }\n return wrappedContext_.NO_ERROR;\n };\n\n var creationFunctions = [\n \"createBuffer\",\n \"createFramebuffer\",\n \"createProgram\",\n \"createRenderbuffer\",\n \"createShader\",\n \"createTexture\"\n ];\n if (isWebGL2RenderingContext) {\n creationFunctions.push(\n \"createQuery\",\n \"createSampler\",\n \"fenceSync\",\n \"createTransformFeedback\",\n \"createVertexArray\"\n );\n }\n for (var ii = 0; ii < creationFunctions.length; ++ii) {\n var functionName = creationFunctions[ii];\n wrappedContext_[functionName] = function(f) {\n return function() {\n loseContextIfTime();\n if (contextLost_) {\n return null;\n }\n var obj = f.apply(ctx, arguments);\n obj.__webglDebugContextLostId__ = contextId_;\n resourceDb_.push(obj);\n return obj;\n };\n }(ctx[functionName]);\n }\n\n var functionsThatShouldReturnNull = [\n \"getActiveAttrib\",\n \"getActiveUniform\",\n \"getBufferParameter\",\n \"getContextAttributes\",\n \"getAttachedShaders\",\n \"getFramebufferAttachmentParameter\",\n \"getParameter\",\n \"getProgramParameter\",\n \"getProgramInfoLog\",\n \"getRenderbufferParameter\",\n \"getShaderParameter\",\n \"getShaderInfoLog\",\n \"getShaderSource\",\n \"getTexParameter\",\n \"getUniform\",\n \"getUniformLocation\",\n \"getVertexAttrib\"\n ];\n if (isWebGL2RenderingContext) {\n functionsThatShouldReturnNull.push(\n \"getInternalformatParameter\",\n \"getQuery\",\n \"getQueryParameter\",\n \"getSamplerParameter\",\n \"getSyncParameter\",\n \"getTransformFeedbackVarying\",\n \"getIndexedParameter\",\n \"getUniformIndices\",\n \"getActiveUniforms\",\n \"getActiveUniformBlockParameter\",\n \"getActiveUniformBlockName\"\n );\n }\n for (var ii = 0; ii < functionsThatShouldReturnNull.length; ++ii) {\n var functionName = functionsThatShouldReturnNull[ii];\n wrappedContext_[functionName] = function(f) {\n return function() {\n loseContextIfTime();\n if (contextLost_) {\n return null;\n }\n return f.apply(ctx, arguments);\n }\n }(wrappedContext_[functionName]);\n }\n\n var isFunctions = [\n \"isBuffer\",\n \"isEnabled\",\n \"isFramebuffer\",\n \"isProgram\",\n \"isRenderbuffer\",\n \"isShader\",\n \"isTexture\"\n ];\n if (isWebGL2RenderingContext) {\n isFunctions.push(\n \"isQuery\",\n \"isSampler\",\n \"isSync\",\n \"isTransformFeedback\",\n \"isVertexArray\"\n );\n }\n for (var ii = 0; ii < isFunctions.length; ++ii) {\n var functionName = isFunctions[ii];\n wrappedContext_[functionName] = function(f) {\n return function() {\n loseContextIfTime();\n if (contextLost_) {\n return false;\n }\n return f.apply(ctx, arguments);\n }\n }(wrappedContext_[functionName]);\n }\n\n wrappedContext_.checkFramebufferStatus = function(f) {\n return function() {\n loseContextIfTime();\n if (contextLost_) {\n return wrappedContext_.FRAMEBUFFER_UNSUPPORTED;\n }\n return f.apply(ctx, arguments);\n };\n }(wrappedContext_.checkFramebufferStatus);\n\n wrappedContext_.getAttribLocation = function(f) {\n return function() {\n loseContextIfTime();\n if (contextLost_) {\n return -1;\n }\n return f.apply(ctx, arguments);\n };\n }(wrappedContext_.getAttribLocation);\n\n wrappedContext_.getVertexAttribOffset = function(f) {\n return function() {\n loseContextIfTime();\n if (contextLost_) {\n return 0;\n }\n return f.apply(ctx, arguments);\n };\n }(wrappedContext_.getVertexAttribOffset);\n\n wrappedContext_.isContextLost = function() {\n return contextLost_;\n };\n\n if (isWebGL2RenderingContext) {\n wrappedContext_.getFragDataLocation = function(f) {\n return function() {\n loseContextIfTime();\n if (contextLost_) {\n return -1;\n }\n return f.apply(ctx, arguments);\n };\n }(wrappedContext_.getFragDataLocation);\n\n wrappedContext_.clientWaitSync = function(f) {\n return function() {\n loseContextIfTime();\n if (contextLost_) {\n return wrappedContext_.WAIT_FAILED;\n }\n return f.apply(ctx, arguments);\n };\n }(wrappedContext_.clientWaitSync);\n\n wrappedContext_.getUniformBlockIndex = function(f) {\n return function() {\n loseContextIfTime();\n if (contextLost_) {\n return wrappedContext_.INVALID_INDEX;\n }\n return f.apply(ctx, arguments);\n };\n }(wrappedContext_.getUniformBlockIndex);\n }\n\n return wrappedContext_;\n }\n}\n\nreturn {\n /**\n * Initializes this module. Safe to call more than once.\n * @param {!WebGLRenderingContext} ctx A WebGL context. If\n * you have more than one context it doesn't matter which one\n * you pass in, it is only used to pull out constants.\n */\n 'init': init,\n\n /**\n * Returns true or false if value matches any WebGL enum\n * @param {*} value Value to check if it might be an enum.\n * @return {boolean} True if value matches one of the WebGL defined enums\n */\n 'mightBeEnum': mightBeEnum,\n\n /**\n * Gets an string version of an WebGL enum.\n *\n * Example:\n * WebGLDebugUtil.init(ctx);\n * var str = WebGLDebugUtil.glEnumToString(ctx.getError());\n *\n * @param {number} value Value to return an enum for\n * @return {string} The string version of the enum.\n */\n 'glEnumToString': glEnumToString,\n\n /**\n * Converts the argument of a WebGL function to a string.\n * Attempts to convert enum arguments to strings.\n *\n * Example:\n * WebGLDebugUtil.init(ctx);\n * var str = WebGLDebugUtil.glFunctionArgToString('bindTexture', 2, 0, gl.TEXTURE_2D);\n *\n * would return 'TEXTURE_2D'\n *\n * @param {string} functionName the name of the WebGL function.\n * @param {number} numArgs The number of arguments\n * @param {number} argumentIndx the index of the argument.\n * @param {*} value The value of the argument.\n * @return {string} The value as a string.\n */\n 'glFunctionArgToString': glFunctionArgToString,\n\n /**\n * Converts the arguments of a WebGL function to a string.\n * Attempts to convert enum arguments to strings.\n *\n * @param {string} functionName the name of the WebGL function.\n * @param {number} args The arguments.\n * @return {string} The arguments as a string.\n */\n 'glFunctionArgsToString': glFunctionArgsToString,\n\n /**\n * Given a WebGL context returns a wrapped context that calls\n * gl.getError after every command and calls a function if the\n * result is not NO_ERROR.\n *\n * You can supply your own function if you want. For example, if you'd like\n * an exception thrown on any GL error you could do this\n *\n * function throwOnGLError(err, funcName, args) {\n * throw WebGLDebugUtils.glEnumToString(err) +\n * \" was caused by call to \" + funcName;\n * };\n *\n * ctx = WebGLDebugUtils.makeDebugContext(\n * canvas.getContext(\"webgl\"), throwOnGLError);\n *\n * @param {!WebGLRenderingContext} ctx The webgl context to wrap.\n * @param {!function(err, funcName, args): void} opt_onErrorFunc The function\n * to call when gl.getError returns an error. If not specified the default\n * function calls console.log with a message.\n * @param {!function(funcName, args): void} opt_onFunc The\n * function to call when each webgl function is called. You\n * can use this to log all calls for example.\n */\n 'makeDebugContext': makeDebugContext,\n\n /**\n * Given a canvas element returns a wrapped canvas element that will\n * simulate lost context. The canvas returned adds the following functions.\n *\n * loseContext:\n * simulates a lost context event.\n *\n * restoreContext:\n * simulates the context being restored.\n *\n * lostContextInNCalls:\n * loses the context after N gl calls.\n *\n * getNumCalls:\n * tells you how many gl calls there have been so far.\n *\n * setRestoreTimeout:\n * sets the number of milliseconds until the context is restored\n * after it has been lost. Defaults to 0. Pass -1 to prevent\n * automatic restoring.\n *\n * @param {!Canvas} canvas The canvas element to wrap.\n */\n 'makeLostContextSimulatingCanvas': makeLostContextSimulatingCanvas,\n\n /**\n * Resets a context to the initial state.\n * @param {!WebGLRenderingContext} ctx The webgl context to\n * reset.\n */\n 'resetToInitialState': resetToInitialState\n};\n\n}();\n\nmodule.exports = WebGLDebugUtils;\n","module.exports = \"#version 100\\r\\n#extension GL_EXT_draw_buffers: enable\\r\\nprecision highp float;\\r\\n\\r\\nuniform sampler2D u_colmap;\\r\\nuniform sampler2D u_normap;\\r\\n\\r\\nvarying vec3 v_position;\\r\\nvarying vec3 v_normal;\\r\\nvarying vec2 v_uv;\\r\\n\\r\\nvec3 applyNormalMap(vec3 geomnor, vec3 normap) {\\r\\n normap = normap * 2.0 - 1.0;\\r\\n vec3 up = normalize(vec3(0.001, 1, 0.001));\\r\\n vec3 surftan = normalize(cross(geomnor, up));\\r\\n vec3 surfbinor = cross(geomnor, surftan);\\r\\n return normap.y * surftan + normap.x * surfbinor + normap.z * geomnor;\\r\\n}\\r\\n\\r\\nvoid main() {\\r\\n vec3 norm = applyNormalMap(v_normal, vec3(texture2D(u_normap, v_uv)));\\r\\n vec3 col = vec3(texture2D(u_colmap, v_uv));\\r\\n\\r\\n // TODO: populate your g buffer\\r\\n gl_FragData[0] = vec4(v_position, 1.0);\\r\\n gl_FragData[1] = vec4(col, 1.0);\\r\\n gl_FragData[2] = vec4(norm, 1.0);\\r\\n // gl_FragData[3] = ?? // depth buffer\\r\\n}\"","module.exports = \"#version 100\\r\\nprecision highp float;\\r\\n\\r\\nuniform mat4 u_viewProjectionMatrix;\\r\\n\\r\\nattribute vec3 a_position;\\r\\nattribute vec3 a_normal;\\r\\nattribute vec2 a_uv;\\r\\n\\r\\nvarying vec3 v_position;\\r\\nvarying vec3 v_normal;\\r\\nvarying vec2 v_uv;\\r\\n\\r\\nvoid main() {\\r\\n gl_Position = u_viewProjectionMatrix * vec4(a_position, 1.0);\\r\\n v_position = a_position;\\r\\n v_normal = a_normal;\\r\\n v_uv = a_uv;\\r\\n}\"","module.exports = \"#version 100\\r\\nprecision highp float;\\r\\n\\r\\nuniform mat4 u_viewProjectionMatrix;\\r\\n\\r\\nattribute vec3 a_position;\\r\\nattribute vec3 a_normal;\\r\\nattribute vec2 a_uv;\\r\\n\\r\\nvarying vec3 v_position;\\r\\nvarying vec3 v_normal;\\r\\nvarying vec2 v_uv;\\r\\n\\r\\nvoid main() {\\r\\n gl_Position = u_viewProjectionMatrix * vec4(a_position, 1.0);\\r\\n v_position = a_position;\\r\\n v_normal = a_normal;\\r\\n v_uv = a_uv;\\r\\n}\"","module.exports = \"#version 100\\r\\nprecision highp float;\\r\\n\\r\\nuniform mat4 u_viewProjectionMatrix;\\r\\n\\r\\nattribute vec3 a_position;\\r\\nattribute vec3 a_normal;\\r\\nattribute vec2 a_uv;\\r\\n\\r\\nvarying vec3 v_position;\\r\\nvarying vec3 v_normal;\\r\\nvarying vec2 v_uv;\\r\\n\\r\\nvoid main() {\\r\\n gl_Position = u_viewProjectionMatrix * vec4(a_position, 1.0);\\r\\n v_position = a_position;\\r\\n v_normal = a_normal;\\r\\n v_uv = a_uv;\\r\\n}\"","module.exports = \"#version 100\\r\\nprecision highp float;\\r\\n\\r\\nattribute vec3 a_position;\\r\\n\\r\\nvarying vec2 v_uv;\\r\\n\\r\\nvoid main() {\\r\\n gl_Position = vec4(a_position, 1.0);\\r\\n v_uv = a_position.xy * 0.5 + 0.5;\\r\\n}\"","module.exports = \"precision highp float;\\r\\n\\r\\nvarying vec3 v_color;\\r\\n\\r\\nvoid main() {\\r\\n gl_FragColor = vec4(v_color, 1.0);\\r\\n}\\r\\n\"","module.exports = \"#version 100\\r\\nprecision highp float;\\r\\n\\r\\nuniform mat4 u_viewProjectionMatrix;\\r\\n\\r\\nattribute vec3 a_position;\\r\\nattribute vec3 a_color;\\r\\n\\r\\nvarying vec3 v_color;\\r\\n\\r\\nvoid main() {\\r\\n gl_Position = u_viewProjectionMatrix * vec4(a_position, 1.0);\\r\\n v_color = a_color;\\r\\n}\\r\\n\"","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(943);\n"],"names":["create","out","Float32Array","fromValues","x","y","z","set","a","b","cross","ax","ay","az","bx","by","bz","vec","len","Math","hypot","slerp","t","omega","cosom","sinom","scale0","scale1","aw","bw","acos","sin","vec4","tmpvec3","xUnitVec3","yUnitVec3","temp1","temp2","matr","gl","MinimalGLTFLoader","Scene","this","meshes","Mesh","meshID","primitives","Primitive","mode","matrix","mat4","indices","indicesComponentType","vertexBuffer","attributes","material","technique","glTFModel","defaultScene","scenes","nodeMatrix","json","shaders","programs","images","glTFLoader","glContext","_init","glTF","prototype","_parseDone","_loadDone","_bufferRequested","_bufferLoaded","_buffers","_bufferTasks","_bufferViews","_shaderRequested","_shaderLoaded","_imageRequested","_imageLoaded","_pendingTasks","_finishedPendingTasks","onload","_getBufferViewData","bufferViewID","callback","bufferViewData","bufferView","bufferViews","bufferData","buffer","slice","byteOffset","byteLength","bufferTask","loader","push","newBufferData","curBufferViewData","console","log","_checkComplete","_parseGLTF","scene","sceneID","newScene","nodes","nodeLen","length","n","nodeID","_parseNode","translationVec3","vec3","rotationQuat","quat","scaleVec3","TRMatrix","node","undefined","curMatrix","hasOwnProperty","i","translation","rotation","scale","meshLen","m","newMesh","meshName","mesh","primitiveLen","p","newPrimitive","primitive","_parseIndices","_parseAttributes","materials","techniques","children","childreLen","c","childNodeID","accessorName","accessor","accessors","componentType","_getAccessorData","_arrayBuffer2TypedArray","count","Type2NumOfComponent","type","firstSemantic","Object","keys","firstAccessor","vertexBufferViewID","ComponentType2ByteSize","attributeName","componentTypeByteSize","byteStride","size","stride","offset","loadGLTF","uri","baseUri","_getBaseUri","basePath","lastIndexOf","substring","_loadJSON","src","xobj","XMLHttpRequest","overrideMimeType","open","onreadystatechange","readyState","status","responseText","send","response","bid","JSON","parse","loadArrayBufferCallback","resource","buffers","_loadArrayBuffer","iid","pid","newProgram","loadImageCallback","img","_loadImage","loadVertexShaderFileCallback","vertexShader","fragmentShader","program","_createProgram","loadFragmentShaderFileCallback","_loadShaderFile","countOfComponentType","Int16Array","Uint16Array","Int32Array","Uint32Array","url","responseType","arrayBuffer","file","Image","_createShader","source","shader","createShader","shaderSource","compileShader","vertexShaderSource","fragmentShaderSource","createProgram","vshader","VERTEX_SHADER","fshader","FRAGMENT_SHADER","attachShader","deleteShader","linkProgram","getProgramInfoLog","getShaderInfoLog","Attributes","colorToString","color","forceCSSHex","colorFormat","__state","conversionName","toString","r","round","g","h","s","toFixed","v","str","hex","ARR_EACH","Array","forEach","ARR_SLICE","Common","BREAK","extend","target","each","call","arguments","obj","isObject","key","isUndefined","bind","defaults","compose","toCall","args","apply","itr","scope","l","_key","defer","fnc","setTimeout","debounce","func","threshold","callImmediately","timeout","delayed","callNow","clearTimeout","toArray","isNull","isNaN","_isNaN","_x","isArray","constructor","isNumber","isString","isBoolean","isFunction","Function","INTERPRETATIONS","litmus","conversions","THREE_CHAR_HEX","read","original","test","match","space","parseInt","write","SIX_CHAR_HEX","CSS_RGB","parseFloat","CSS_RGBA","HEX","RGB_ARRAY","RGBA_ARRAY","RGBA_OBJ","RGB_OBJ","HSVA_OBJ","HSV_OBJ","result","toReturn","interpret","family","conversion","tmpComponent","ColorMath","hsv_to_rgb","hi","floor","f","q","rgb_to_hsv","min","max","delta","NaN","rgb_to_hex","hex_with_component","component_from_hex","componentIndex","value","_typeof","Symbol","iterator","classCallCheck","instance","Constructor","TypeError","createClass","defineProperties","props","descriptor","enumerable","configurable","writable","defineProperty","protoProps","staticProps","get","object","property","receiver","desc","getOwnPropertyDescriptor","parent","getPrototypeOf","getter","inherits","subClass","superClass","setPrototypeOf","__proto__","possibleConstructorReturn","self","ReferenceError","Color","Error","toHexString","toOriginal","defineRGBComponent","component","componentHexIndex","get$$1","recalculateRGB","set$$1","defineHSVComponent","recalculateHSV","COMPONENTS","Controller","initialValue","domElement","document","createElement","__onChange","__onFinishChange","onChange","onFinishChange","setValue","newValue","updateDisplay","getValue","isModified","EVENT_MAP_INV","HTMLEvents","MouseEvents","KeyboardEvents","k","e","CSS_VALUE_PIXELS","cssValueToPixels","val","dom","makeSelectable","elem","selectable","style","onselectstart","MozUserSelect","KhtmlUserSelect","unselectable","makeFullscreen","hor","vert","vertical","horizontal","position","left","right","top","bottom","fakeEvent","eventType","pars","aux","params","className","evt","createEvent","clientX","clientY","initMouseEvent","bubbles","cancelable","window","clickCount","init","initKeyboardEvent","initKeyEvent","ctrlKey","altKey","shiftKey","metaKey","keyCode","charCode","initEvent","dispatchEvent","event","newBool","bool","addEventListener","attachEvent","unbind","removeEventListener","detachEvent","addClass","classes","split","indexOf","join","replace","removeClass","removeAttribute","index","splice","hasClass","RegExp","getWidth","getComputedStyle","width","getHeight","height","getOffset","el","offsetParent","offsetLeft","offsetTop","isActive","activeElement","href","BooleanController","_Controller","_this2","_this","__prev","__checkbox","setAttribute","appendChild","checked","OptionController","opts","options","__select","map","element","opt","innerHTML","desiredValue","selectedIndex","StringController","__input","onBlur","blur","numDecimals","NumberController","_params","__min","__max","__step","step","__impliedStep","pow","abs","LN10","__precision","_v","minValue","maxValue","stepValue","NumberControllerBox","_NumberController","__truncationSuspended","prevY","onFinish","onMouseDrag","diff","onMouseUp","attempted","onMouseDown","roundToDecimal","decimals","tenTo","i1","i2","o1","o2","NumberControllerSlider","preventDefault","bgRect","__background","getBoundingClientRect","onTouchMove","touches","onTouchEnd","__foreground","onTouchStart","pct","FunctionController","text","__button","fire","ColorController","__color","__temp","__selector","__saturation_field","__field_knob","__field_knob_border","__hue_knob","__hue_field","__input_textShadow","valueField","fieldDown","setSV","fieldUpSV","fieldDownH","setH","fieldUpH","fieldRect","_ref","padding","backgroundColor","boxShadow","border","borderRadius","zIndex","borderRight","marginRight","display","cursor","background","linearGradient","hueGradient","cssText","outline","textAlign","fontWeight","textShadow","mismatch","flip","_flip","marginLeft","marginTop","vendors","vendor","css","inject","cssContent","indoc","doc","injected","head","getElementsByTagName","saveDialogContents","ControllerFactory","requestAnimationFrame$1","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","CenteredDiv","backgroundElement","opacity","WebkitTransition","transition","body","hide","show","webkitTransform","layout","innerWidth","innerHeight","styleSheet","___$insertStyle","DEFAULT_DEFAULT_PRESET_NAME","SUPPORTS_LOCAL_STORAGE","localStorage","SAVE_DIALOGUE","autoPlaceVirgin","autoPlaceContainer","hideableGuis","GUI","__ul","__folders","__controllers","__rememberedObjects","__rememberedObjectIndecesToControllers","__listening","closeOnTop","autoPlace","DEFAULT_WIDTH","resizable","hideable","load","preset","scrollable","useLocalStorage","getItem","getLocalStorageHash","saveToLocalStorage","titleRow","getRoot","setPresetSelectIndex","gui","__preset_select","revert","setWidth","name","closed","CLASS_CLOSED","onResize","__closeButton","TEXT_OPEN","TEXT_CLOSED","setItem","CLASS_MAIN","savedGui","CLASS_CLOSE_BUTTON","CLASS_CLOSE_TOP","insertBefore","childNodes","CLASS_CLOSE_BOTTOM","titleRowName","createTextNode","addRow","onClickTitle","CLASS_AUTO_PLACE_CONTAINER","CLASS_AUTO_PLACE","__resizeHandler","onResizeDebounced","addResizeHandle","stringify","getSaveObject","saveToLocalStorageIfPossible","resetWidth","root","newDom","liBefore","li","removeListeners","markPresetModified","modified","recallSavedValue","controller","matchedIndex","controllerMap","remembered","presetMap","_add","factoryArgs","concat","before","__li","container","CLASS_CONTROLLER_ROW","augmentController","__gui","_options","nextSibling","nextElementSibling","remove","_nextSibling","_name","firstElementChild","listen","box","method","pc","pb","returned","oldName","wasListening","newController","stopPropagation","borderLeftColor","location","addPresetOption","setSelected","showHideExplain","explain","addSaveMenu","div","__save_row","firstChild","gears","button","button2","button3","select","getElementById","localStorageCheckBox","newConstructorTextArea","which","focus","save","presetName","prompt","saveAs","pmouseX","drag","dragStop","CLASS_DRAG","dragStart","__resize_handle","w","getCurrentPreset","useInitialValues","savedValues","updateDisplays","controllerArray","toggleHide","CLASS_TOO_TALL","_keydownHandler","add","addColor","removeChild","destroy","subfolder","removeFolder","addFolder","newGuiParams","folders","folder","parentElement","close","offsetHeight","remember","math","controllers","ABORTED","abort","message","canvas","getContext","supportedExtensions","getSupportedExtensions","requiredExtensions","getExtension","WEBGL_draw_buffers","getParameter","MAX_DRAW_BUFFERS_WEBGL","DAT","stats","Stats","setMode","camera","PerspectiveCamera","clientWidth","clientHeight","cameraControls","OrbitControls","setSize","aspect","updateProjectionMatrix","makeRenderLoop","render","tick","update","begin","end","enableDamping","enableZoom","rotateSpeed","zoomSpeed","panSpeed","require","shaderType","error","linkShader","vs","fs","prog","loadShaderProgram","vsSource","fsSource","shaderLocations","addShaderLocations","uniforms","assign","glShaderProgram","attribs","quadPositions","quadBuffer","LIGHT_MIN","LIGHT_MAX","NUM_LIGHTS","lights","models","random","radius","indicesBuffer","textureInfo","samplerInfo","format","internalFormat","magFilter","minFilter","wrapS","wrapT","image","texture","curScene","webGLTextures","textureID","tid","textures","samplers","sampler","id","mid","vertices","posInfo","parameters","semantic","norInfo","uvInfo","gltf","idx","colmap","normap","draw","shaderProgram","model","u_colmap","u_normap","a_position","a_normal","a_uv","TextureBuffer","elementCount","elementSize","_glTexture","_pixelsPerElement","ceil","_elementCount","_buffer","bufferIndex","ForwardRenderer","_lightTexture","_shaderProgram","numLights","_projectionMatrix","_viewMatrix","_viewProjectionMatrix","updateMatrixWorld","matrixWorld","elements","projectionMatrix","u_viewProjectionMatrix","glTexture","u_lightbuffer","BaseRenderer","xSlices","ySlices","zSlices","_clusterTexture","MAX_LIGHTS_PER_CLUSTER","_xSlices","_ySlices","_zSlices","computeLightSphereAndCenter","light","viewMatrix","center","Vector3","Sphere","computeMiniFrustum","xNearLeft","xNearRight","yNearBottom","yNearTop","xFarLeft","xFarRight","yFarBottom","yFarTop","zNear","zFar","frontPlane","Plane","setFromCoplanarPoints","backPlane","leftPlane","rightPlane","topPlane","bottomPlane","Frustum","initializeMiniFrustums","index2MiniFrustum","nearClip","near","fullDepth","far","vertFov","fov","tanFovDiv2","tan","PI","zDepth","nearScreenHeight","farScreenHeight","farScreenWidth","xNearWidth","yNearHeight","xFarWidth","yFarHeight","miniFrustumIndex","miniFrustum","updateClustersEfficient","lightIndex2Sphere","lightIndex","entries","bufferPtr","sphere","intersectsSphere","componentOffset","floatOffset","updateClusters","ForwardPlusRenderer","u_clusterbuffer","u_viewMatrix","u_nearClip","u_farClip","u_canvasHeight","u_canvasWidth","u_xSlices","u_ySlices","u_zSlices","u_clusterTextureWidth","u_clusterTextureHeight","u_cameraPosition","ClusteredDeferredRenderer","setupDrawBuffers","_progCopy","toTextureVert","toTextureFrag","_progShade","QuadVertSource","numGBuffers","_width","_height","_fbo","_depthTex","_gbuffers","attachments","resize","NUM_GBUFFERS","renderFullscreenQuad","Wireframe","_attributesNeedUpdate","_positions","_colors","_vertexAttributes","addLineSegment","startPosition","endPosition","_updateVertexData","flatVertices","vertexAttributes","a_color","FORWARD","FORWARD_PLUS","CLUSTERED","renderer","_renderer","setRenderer","wireframe","EPSILON","ARRAY_TYPE","sqrt","copy","invert","a00","a01","a02","a03","a10","a11","a12","a13","a20","a21","a22","a23","a30","a31","a32","a33","b00","b01","b02","b03","b04","b05","b06","b07","b08","b09","b10","b11","det","multiply","b0","b1","b2","b3","fromRotationTranslation","x2","y2","z2","xx","xy","xz","yy","yz","zz","wx","wy","wz","clone","squaredLength","normalize","dot","lerp","transformMat4","exactEquals","equals","a0","a1","a2","a3","module","exports","d","o","toStringTag","__esModule","default","webpackPolyfill","deprecate","paths","Boolean","all","atob","querySelector","HTMLIFrameElement","contentDocument","identifier","base","u","media","sourceMap","references","updater","nonce","nc","insert","filter","btoa","unescape","encodeURIComponent","singleton","parentNode","sources","sourceRoot","modules","payloads","trace","charAt","packaged","define","ace","exec","String","lastIndex","global","ignoreCase","multiline","extended","sticky","_xregexp","captureNames","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","_","E","C","F","every","some","reduce","reduceRight","O","getOwnPropertyNames","propertyIsEnumerable","isPrototypeOf","toLocaleString","valueOf","A","R","S","seal","freeze","preventExtensions","isSealed","isFrozen","isExtensible","T","Date","now","getTime","trim","L","I","Element","OS","LINUX","MAC","WINDOWS","getOS","isMac","isLinux","navigator","platform","toLowerCase","userAgent","appName","isWin","isIE","isOldIE","isGecko","isMozilla","isOpera","opera","isWebKit","isChrome","isEdge","isAIR","isAndroid","isChromeOS","isIOS","MSStream","isMobile","buildDom","getDocumentHead","documentElement","createElementNS","removeChildren","ownerDocument","createFragment","createDocumentFragment","hasCssClass","addCssClass","removeCssClass","toggleCssClass","setCssClass","hasCssString","querySelectorAll","importCssString","getRootNode","importCssStylsheet","rel","scrollbarWidth","minWidth","overflow","offsetWidth","computedStyle","setStyle","HAS_CSS_ANIMATION","HAS_CSS_TRANSFORMS","HI_DPI","devicePixelRatio","transform","animationName","translate","super_","mixin","implement","MODIFIER_KEYS","KEY_MODS","ctrl","alt","option","shift","super","meta","command","cmd","FUNCTION_KEYS","PRINTABLE_KEYS","enter","return","escape","esc","del","delete","keyCodeToString","fromCharCode","addListener","_wrapper","removeListener","stopEvent","cancelBubble","returnValue","getButton","capture","addMouseWheelListener","wheelDeltaX","wheelX","wheelY","wheelDeltaY","wheelDelta","deltaMode","DOM_DELTA_PIXEL","deltaX","deltaY","DOM_DELTA_LINE","DOM_DELTA_PAGE","axis","HORIZONTAL_AXIS","detail","addMultiMouseDownListener","_clicks","getModifierState","altGr","keyLocation","timeStamp","defaultPrevented","getModifierString","addCommandKeyListener","isOldGecko","postMessage","nextTick","data","$idleBlocked","onIdle","$idleBlockId","blockIdle","nextFrame","start","row","column","isEqual","contains","compare","compareRange","comparePoint","containsRange","intersects","isEnd","isStart","setStart","setEnd","inside","insideStart","insideEnd","isMultiLine","compareStart","compareEnd","compareInside","clipRows","fromPoints","isEmpty","collapseRows","toScreenRange","documentToScreenPosition","moveBy","comparePoints","Range","last","stringReverse","reverse","stringRepeat","stringTrimLeft","stringTrimRight","copyObject","copyArray","deepCopy","arrayToMap","createMap","arrayRemove","escapeRegExp","escapeHTML","getMatchOffsets","deferredCall","cancel","schedule","isPending","delayedCall","delay","lineMode","pasteCancelled","TextInput","fontSize","hasFocus","onFocus","$focusScroll","preventScroll","nodeType","host","isFocused","on","curOp","selection","setSelectionRange","getRange","session","getLine","selectionStart","selectionEnd","setInputHandler","getInputHandler","onPaste","onTextInput","extendLeft","extendRight","restoreStart","restoreEnd","$","inputType","execCommand","clipboardData","setData","getData","M","getCopyText","onCut","onCopy","N","P","B","onCommandKey","selectAll","onCompositionUpdate","$readOnly","D","useTextareaForIME","markerRange","context","compositionStartOffset","onCompositionEnd","off","U","G","W","$isMousePressed","$keepTextAreaAtCursor","$moveTextAreaToCursor","onCompositionStart","getSelectionRange","msGetInputContext","getInputContext","getElement","setCommandMode","readOnly","setReadOnly","setCopyWithEmptySelection","onContextMenu","_emit","domEvent","moveToMouse","characterWidth","borderTopWidth","borderLeftWidth","onContextMenuClose","V","textInput","scroller","$mouseHandler","isMousePressed","up","home","down","commands","findKeyCommand","$clickSelection","editor","setDefaultHandler","onDoubleClick","onTripleClick","onQuadClick","onMouseWheel","selectByLines","extendSelectionBy","selectByWords","anchor","inSelection","getDocumentPosition","mousedownEvent","moveToPosition","time","$focusTimeout","inMultiSelectMode","captureMouse","startSelect","setState","screenToTextCoordinates","getShiftKey","selectToPosition","setCapture","setSelectionAnchor","scrollCursorIntoView","selectEnd","selectAllEnd","selectByWordsEnd","selectByLinesEnd","unsetStyle","releaseCapture","focusWait","getBracketRange","getWordRange","getLineRange","getAccelKey","$lastScroll","vx","vy","allowed","isScrollableBy","speed","scrollBy","stop","DefaultHandlers","isOpen","$element","$parentNode","$init","setText","textContent","setHtml","setPosition","setClassName","Tooltip","GutterHandler","$gutterLayer","_signal","getRegion","selectTo","srcElement","$tooltipFollowsMouse","$annotations","getLength","pixelToScreenCoordinates","$pos","documentToScreenRow","$gutter","MouseEvent","$inSelection","propagationStopped","moveCursorToPosition","layerConfig","lineHeight","toOrientedRange","addMarker","getSelectionStyle","clearSelection","$cursorLayer","setBlinking","clearInterval","setInterval","removeMarker","fromOrientedRange","$resetCursorStyle","onDragStart","cancelDrag","draggable","dataTransfer","effectAllowed","getReadOnly","scrollTop","setDragImage","clearData","getTextRange","onDragEnd","dropEffect","setCursorStyle","onDragEnter","onDragOver","onDragLeave","onDrop","moveText","types","dragWait","getDragDelay","startDrag","dragWaitEnd","dragReadyEnd","state","dragDrop","$dragEnabled","DragdropHandler","addTouchListeners","clipboard","getAttribute","getUndoManager","hasUndo","replaceChild","class","action","readText","then","writeText","ontouchstart","ontouchend","onclick","textToScreenCoordinates","pageY","selectWord","setRange","getPixelPosition","getScrollTop","loadScript","qualifyURL","_dispatchEvent","_eventRegistry","_defaultHandlers","once","Promise","_disabled_","removeDefaultHandler","pop","removeAllListeners","EventEmitter","setOptions","setOption","getOptions","$options","hidden","getOption","forwardTo","handlesSet","warn","$defaultOptions","defineOptions","resetOptions","setDefaultValue","setDefaultValues","reportError","AppConfig","workerPath","modePath","themePath","suffix","$moduleUrls","loadWorkerFromBlob","sharedPopups","$modes","moduleUrl","setModuleUrl","$loading","loadModule","currentScript","_currentScript","toUpperCase","version","getMouseEventTarget","onMouseEvent","onMouseMove","scrollBarV","inner","scrollBarH","$dragDelay","mousemove","$scrollSpeed","releaseMouse","mouseEvent","$mouseMoved","$onCaptureMouseMove","endOperation","selectionChanged","startOperation","cancelContextMenu","scrollSpeed","dragDelay","dragEnabled","focusTimeout","tooltipFollowsMouse","MouseHandler","FoldHandler","getFoldAt","removeFold","expandFold","getUseWrapMode","foldWidgets","onFoldWidgetClick","getParentFoldRangeData","range","firstRange","addFold","$editor","$data","$handlers","removeKeyboardHandler","$defaultHandler","addKeyboardHandler","setKeyboardHandler","handleKeyboard","attach","detach","getKeyboardHandler","getStatusText","$callKeyboardHandlers","passEvent","KeyBinding","charCodeAt","EN","ON_R","AN","R_H","RLE","DOT","doBidiReorder","logicalFromVisual","bidiLevels","hasBidiCharacters","getVisualFromLogicalIdx","bidiMap","currentRow","bidiUtil","charWidths","EOL","showInvisibles","isRtlDir","$isRtl","line","wrapIndent","EOF","contentWidth","fontMetrics","rtlLineOffset","wrapOffset","isMoveLeftOperation","seenBidi","isBidiRow","updateRowLine","updateBidiMap","lines","getDocumentRow","$screenRowCache","$getRowCacheIndex","$docRowCache","getSplitIndex","$useWrapMode","$wrapData","indent","isFullWidth","getScreenTabSize","$main","substr","markAsDirty","updateCharacterWidths","$characterSize","$measureCharWidth","setShowInvisibles","setEolChar","setContentWidth","isRtlLine","setRtlDirection","getCursorPosition","getSelectionAnchor","$bidiHandler","removeInLine","getPosLeft","getOverwrite","getSelections","offsetToCol","BidiHandler","getDocument","lead","createAnchor","$silent","$cursorChanged","$isEmpty","$keepDesiredColumnOnChange","old","$desiredColumn","$anchorChanged","getCursor","getPosition","getAnchor","getSelectionLead","isBackwards","$setSelection","Number","MAX_VALUE","$moveSelection","moveCursorTo","moveTo","selectUp","moveCursorUp","selectDown","moveCursorDown","selectRight","moveCursorRight","selectLeft","moveCursorLeft","selectLineStart","moveCursorLineStart","selectLineEnd","moveCursorLineEnd","selectFileEnd","moveCursorFileEnd","selectFileStart","moveCursorFileStart","selectWordRight","moveCursorWordRight","selectWordLeft","moveCursorWordLeft","selectAWord","getAWordRange","getFoldLine","selectLine","moveCursorBy","wouldMoveIntoSoftTab","isTabStop","getTabSize","getNavigateWithinSoftTabs","screenToDocumentPosition","getDisplayLine","$useEmacsStyleLineStart","getDocumentLastRowColumnPosition","search","moveCursorLongWordRight","nonTokenRe","tokenRe","moveCursorLongWordLeft","getFoldStringAt","$shortWordEndIndex","moveCursorShortWordRight","moveCursorShortWordLeft","$selectLongWords","lineWidgets","moveCursorToScreen","desiredColumn","getRangeOfMovements","toJSON","rangeCount","ranges","fromJSON","rangeList","toSingleRange","addRange","Selection","states","regExps","matchMappings","defaultToken","caseInsensitive","regex","token","rule","groupCount","tokenArray","onMatch","$arrayTokens","$applyToken","removeCapturingGroups","splitRegex","createSplitterRegexp","$setMaxTokenCount","stack","getLineTokens","next","consumeLineEnd","merge","startState","unshift","tokens","Tokenizer","$rules","addRules","nextState","getRules","embedRules","$embeds","getEmbeds","normalizeRules","processed","stateName","rules","include","noEscape","keywordMap","createKeywordMapper","$keywordList","getKeywords","$keywords","TextHighlightRules","$behaviours","addBehaviours","inherit","getBehaviours","Behaviour","$session","$row","$rowTokens","getTokens","getTokenAt","$tokenIndex","stepBackward","stepForward","getCurrentToken","getCurrentTokenRow","getCurrentTokenColumn","getCurrentTokenPosition","getCurrentTokenRange","TokenIterator","multiSelect","autoInsertedBrackets","autoInsertedRow","autoInsertedLineEnd","maybeInsertedBrackets","maybeInsertedRow","maybeInsertedLineStart","maybeInsertedLineEnd","getWrapBehavioursEnabled","isSaneInsertion","braces","recordAutoInsert","recordMaybeInsert","$findOpeningBracket","isAutoInsertedClosing","popAutoInsertedClosing","isMaybeInsertedClosing","clearMaybeInsertedClosing","findMatchingBracket","$getIndent","getTabString","$mode","$quotes","lineCommentStart","$matchTokenType","CstyleBehaviour","wordChars","HighlightRules","$defaultBehaviour","getTokenizer","$tokenizer","$highlightRules","$highlightRuleConfig","blockComment","toggleCommentLines","getUseSoftTabs","insertInLine","toggleBlockComment","getNextLineIndent","checkOutdent","autoOutdent","createWorker","createModeDelegates","$id","$delegator","transformAction","$behaviour","completionKeywords","$createKeywordList","getCompletions","score","Mode","applyDelta","Anchor","$onChange","$clipPositionToDocument","$insertRight","$lines","insertMergedLines","getAllLines","getNewLineCharacter","$split","$detectNewLine","$autoNewLine","$newLineMode","setNewLineMode","getNewLineMode","isNewLine","getLines","getLinesForRange","insertLines","insertFullLines","removeLines","removeFullLines","insertNewLine","clippedPos","pos","clonePos","$clipPosition","removeNewLine","applyDeltas","revertDeltas","revertDelta","$splitAndapplyLargeDelta","indexToPosition","positionToIndex","Document","running","currentLine","tokenizer","$worker","$tokenizeRow","fireUpdateEvent","setTokenizer","setDocument","first","scheduleStart","$updateOnChange","getState","BackgroundTokenizer","setRegexp","clazz","MAX_RANGES","regExp","cache","firstRow","lastRow","drawSingleLineMarker","SearchHighlight","foldData","folds","setFoldLine","shiftRow","sameRow","startRow","endRow","sort","foldLine","containsRow","walk","placeholder","getNextFoldTo","fold","kind","addRemoveChars","idxToPosition","FoldLine","$bias","pointIndex","addList","substractPoint","containsPoint","rangeAtPoint","removeAll","RangeList","Fold","subFolds","collapseChildren","addSubFold","restoreRange","Folding","getFoldsInRange","$foldData","getFoldsInRangeList","getAllFolds","getNextFoldLine","getFoldedRowCount","$addFoldLine","$clipRangeToDocument","removeFolds","$updateWrapData","$updateRowLengthCache","$modified","addFolds","$updating","foldAll","expandFolds","unfold","isRowFolded","getRowFoldEnd","getRowFoldStart","getFoldDisplayLine","$cloneFoldData","toggleFold","getCommentFoldRange","getFoldWidget","getFoldWidgetRange","$foldStyles","manual","markbegin","markbeginend","$foldStyle","setFoldStyle","$foldMode","$setFolding","$updateFoldWidgets","$tokenizerUpdateFoldWidgets","updateFoldWidgets","tokenizerUpdateFoldWidgets","siblings","$toggleFoldWidget","toggleFoldWidget","BracketMatch","$findClosingBracket","$brackets","$breakpoints","$decorations","$frontMarkers","$backMarkers","$markerId","$undoSelect","$uid","onChangeFold","bgTokenizer","resetCaches","$resetRowCache","$rowLengthCache","$updateInternalDataOnChange","$fromUndo","$undoManager","mergeUndoDeltas","$informUndoManager","setUndoManager","reset","getSelection","addSession","$syncInformUndoManager","markUndoGroup","$defaultUndoManager","undo","redo","hasRedo","addSelection","startNewGroup","setUseSoftTabs","$useSoftTabs","$indentWithTabs","setTabSize","$tabSize","setNavigateWithinSoftTabs","$navigateWithinSoftTabs","$overwrite","setOverwrite","toggleOverwrite","addGutterDecoration","removeGutterDecoration","getBreakpoints","setBreakpoints","clearBreakpoints","setBreakpoint","clearBreakpoint","inFront","addDynamicMarker","getMarkers","highlight","$searchHighlight","highlightLines","setAnnotations","getAnnotations","clearAnnotations","setUseWorker","getUseWorker","$useWorker","onReloadTokenizer","$modeId","$onChangeMode","path","$stopWorker","$startWorker","attachToSession","wrapMethod","$wrapMethod","foldingRules","terminate","getMode","$scrollTop","setScrollTop","$scrollLeft","setScrollLeft","getScrollLeft","getScreenWidth","$computeWidth","getLineWidgetMaxWidth","screenWidth","lineWidgetsWidth","lineWidgetWidth","$wrapLimit","$getStringScreenWidth","undoChanges","selectionBefore","$getUndoSelection","redoChanges","selectionAfter","setUndoSelect","indentRows","outdentRows","$moveLines","$clipRowToDocument","moveLinesUp","moveLinesDown","duplicateLines","$clipColumnToRow","$wrapLimitRange","setUseWrapMode","setWrapLimitRange","adjustWrapLimit","$constrainWrapLimit","getWrapLimit","setWrapLimit","getWrapLimitRange","$getDisplayTokens","$computeWrapSplits","$wrapAsCode","$indentedSoftWrap","getRowLength","rowCount","getRowLineCount","getRowWrapIndent","getScreenLastRowColumn","documentToScreenColumn","getDocumentLastRowColumn","getRowSplitData","screenToDocumentRow","screenToDocumentColumn","getScreenLength","$getWidgetScreenLength","$setFontMetrics","$enableVarChar","getCharacterWidth","wrap","$wrap","indentedSoftWrap","firstLineNumber","useWorker","useSoftTabs","tabSize","navigateWithinSoftTabs","foldStyle","overwrite","newLineMode","EditSession","find","$matchIterator","skipCurrent","findAll","needle","$assembleRegExp","re","$isMultiLine","preserveCase","wholeWord","caseSensitive","$assembleMultilineRegExp","backwards","Search","commandKeyBinding","addCommands","$singleCommand","bindKey","isDefault","addCommand","removeCommand","_buildKeyHash","parseKeys","hashId","_addCommandToBinding","removeCommands","bindKeys","$keyChain","HashHandler","MultiHashHandler","byName","$checkCommandState","isAvailable","toggleRecording","$inReplay","recording","macro","$addCommandToMacro","oldMacro","replay","trimMacro","CommandManager","win","mac","showSettingsMenu","showErrorMarker","scrollIntoView","description","centerSelection","gotoLine","$type","multiSelectAction","getAllRanges","findNext","findPrevious","aceCommandGroup","navigateFileStart","navigateUp","times","navigateFileEnd","navigateDown","navigateWordLeft","navigateLineStart","navigateLeft","navigateWordRight","navigateLineEnd","navigateRight","selectPageDown","scrollPageDown","gotoPageDown","selectPageUp","scrollPageUp","gotoPageUp","jumpToMatching","$copyWithEmptySelection","$handlePaste","duplicateSelection","sortLines","modifyNumber","copyLinesUp","copyLinesDown","removeToLineStart","removeToLineEnd","removeWordLeft","removeWordRight","blockOutdent","blockIndent","splitLine","transposeLetters","transposeSelections","exitMultiSelectMode","getContainerElement","getTextAreaContainer","textarea","keyBinding","$search","$historyTracker","$initOperationListeners","_$emitInputEvent","setSession","$opResetTimer","$lastSel","docChanged","prevOp","previousCommand","scrollSelectionIntoView","animateScrolling","$mergeableCommands","$mergeUndoDeltas","mergeNextCommand","sequenceStartTime","$keybindingId","handler","$onDocumentChange","$onTokenizerUpdate","$onChangeTabSize","$onChangeWrapLimit","$onChangeWrapMode","$onChangeFold","$onChangeFrontMarker","$onChangeBackMarker","$onChangeBreakpoint","$onChangeAnnotation","$onCursorChange","$onScrollTopChange","$onScrollLeftChange","$onSelectionChange","onDocumentChange","onChangeMode","onTokenizerUpdate","onChangeTabSize","onChangeWrapLimit","onChangeWrapMode","onChangeFrontMarker","onChangeBackMarker","onChangeBreakpoint","onChangeAnnotation","onCursorChange","onScrollTopChange","onScrollLeftChange","onSelectionChange","updateFull","oldSession","oldEditor","getSession","setTheme","getTheme","getFontSize","setFontSize","$highlightBrackets","$bracketHighlight","$highlightPending","getMatching","$highlightTags","$highlightTagPending","$tagHighlight","$isFocused","showCursor","visualizeFocus","hideCursor","visualizeBlur","$cursorChange","updateCursor","updateLines","$updateHighlightActiveLine","scrollToY","scrollToX","$highlightActiveLine","$selectionStyle","theme","$selectionColorConflict","$maxLines","$minLines","$highlightLineMarker","$selectionMarker","$highlightSelectedWord","$getSelectionHighLightRegexp","updateFrontMarkers","updateBackMarkers","updateBreakpoints","updateText","getSelectedText","inVirtualSelectionMode","getBehavioursEnabled","applyComposition","forEachSelection","setScrollSpeed","getScrollSpeed","setDragDelay","setSelectionStyle","setHighlightActiveLine","getHighlightActiveLine","setHighlightGutterLine","getHighlightGutterLine","setHighlightSelectedWord","getHighlightSelectedWord","setAnimatedScroll","getAnimatedScroll","getShowInvisibles","setDisplayIndentGuides","getDisplayIndentGuides","setShowPrintMargin","getShowPrintMargin","setPrintMarginColumn","getPrintMarginColumn","setBehavioursEnabled","setWrapBehavioursEnabled","setShowFoldWidgets","getShowFoldWidgets","setFadeFoldWidgets","getFadeFoldWidgets","$getSelectedRows","getNumberAt","isFinite","toggleWord","$toggleWordPairs","showComposition","setCompositionText","hideComposition","getFirstVisibleRow","getLastVisibleRow","isRowVisible","isRowFullyVisible","getFirstFullyVisibleRow","getLastFullyVisibleRow","$getVisibleRowCount","getScrollBottomRow","getScrollTopRow","$moveByPage","scrollToRow","scrollToLine","alignCursor","getCursorPositionScreen","navigateTo","$tryReplace","replaceAll","getLastSearchOptions","revealRange","setAutoScrollEditorIntoView","$scrollAnchor","searchBox","$pixelPos","$cursorStyle","setSmoothBlinking","isBlinking","selectionStyle","highlightActiveLine","highlightSelectedWord","copyWithEmptySelection","cursorStyle","values","behavioursEnabled","wrapBehavioursEnabled","autoScrollEditorIntoView","keyboardHandler","showLineNumbers","setShowLineNumbers","$loop","CHANGE_GUTTER","$relativeLineNumbers","relativeLineNumbers","$showLineNumbers","$updatePlaceholder","$composition","placeholderNode","$placeholder","content","hScrollBarAlwaysVisible","vScrollBarAlwaysVisible","highlightGutterLine","animatedScroll","showPrintMargin","printMarginColumn","printMargin","fadeFoldWidgets","showFoldWidgets","displayIndentGuides","showGutter","fontFamily","maxLines","minLines","scrollPastEnd","fixedWidthGutter","hasCssTransforms","maxPixelHeight","getText","$renderer","Editor","$maxRev","$lastDelta","lastDeltas","$undoStack","$rev","selections","rev","markIgnored","ignore","getRevision","getDeltas","getChangedRanges","getChangedLines","$redoStackBaseRev","$redoStack","$syncRev","mark","canUndo","canRedo","bookmark","isAtBookmark","isClean","markClean","$prettyPrint","UndoManager","canvasHeight","cells","cellCache","$offsetCoefficient","moveContainer","firstRowScreen","pageChanged","computeLineTop","computeLineHeight","$cacheCell","insertAdjacentElement","createCell","Lines","$showFoldWidgets","gutterWidth","$updateAnnotations","html","config","gutterOffset","oldLastRow","$updateCursorRow","$renderCell","$updateGutterWidth","gutterRenderer","$firstLineNumber","$fixedWidth","$padding","$computePadding","$highlightGutterLine","$cursorRow","updateLineHighlight","$cursorCell","scrollLines","$renderLines","getShowLineNumbers","paddingLeft","borderRightWidth","paddingRight","Gutter","setPadding","setMarkers","markers","elt","$getTop","drawFullLineMarker","drawScreenLineMarker","drawTextMarker","drawMultiLineMarker","childElementCount","lastChild","drawBidiSingleLineMarker","Marker","$updateEolChar","EOF_CHAR","EOL_CHAR_LF","EOL_CHAR_CRLF","EOL_CHAR","TAB_CHAR","SPACE_CHAR","MAX_LINE_LENGTH","margin","getLineHeight","$fontMetrics","$pollSizeChanges","checkForSizeChanges","$pollSizeChangesTimer","$computeTabString","$tabStrings","$indentGuideRe","$renderLine","$renderLinesFragment","$useLineGroups","$textToken","rparen","lparen","$renderToken","cloneNode","com","renderIndentGuide","$createLineElement","$renderWrappedLine","$renderOverflowMessage","$renderSimpleLine","$getFoldLineTokens","Text","isVisible","blinkInterval","smoothBlinking","cursors","addCursor","$updateCursors","$updateOpacity","$startCssAnimation","animationDuration","$stopCssAnimation","restartTimer","setBlinkInterval","removeCursor","intervalId","timeoutId","isCursorInView","maxHeight","$selectionMarkers","drawCursor","$setOverwrite","Cursor","classSuffix","setVisible","skipEvent","onScroll","coeff","scrollHeight","$scrollbarWidth","$minWidth","setHeight","setInnerHeight","setScrollHeight","scrollLeft","setInnerWidth","setScrollWidth","ScrollBar","ScrollBarV","ScrollBarH","VScrollBar","HScrollBar","onRender","pending","changes","$recursionLimit","_flush","clear","RenderLoop","ResizeObserver","FontMetrics","$setMeasureNodeStyles","$measureNode","$addObserver","visibility","whiteSpace","font","$measureSizes","charSizes","allowBoldFonts","$observer","contentRect","observe","setPolling","disconnect","$getZoom","zoom","$initTransformMeasureNodes","els","transformCoordinates","onGutterResize","$markerBack","$textLayer","$markerFront","$horizScroll","$vScroll","scrollBar","$scrollAnimation","scrollMargin","cursorPos","updateCharacterSize","$size","scrollerHeight","scrollerWidth","$dirty","minHeight","$renderChanges","defaultView","CHANGE_FULL","CHANGE_CURSOR","CHANGE_MARKER","CHANGE_SCROLL","CHANGE_LINES","CHANGE_TEXT","CHANGE_SIZE","CHANGE_MARKER_BACK","CHANGE_MARKER_FRONT","CHANGE_H_SCROLL","$allowBoldFonts","$updatePrintMargin","onChangeNewLineMode","$changedLines","updateFontSize","$changes","$updateSizeAsync","resizing","scrollWidth","$updateCachedSize","$extraHeight","$showGutter","$computeLayerConfig","$showPrintMargin","$printMarginColumn","$animatedScroll","getShowGutter","setShowGutter","$printMarginEl","setScrollMargin","setMargin","getHScrollBarAlwaysVisible","$hScrollBarAlwaysVisible","setHScrollBarAlwaysVisible","getVScrollBarAlwaysVisible","$vScrollBarAlwaysVisible","setVScrollBarAlwaysVisible","$updateScrollBarV","$scrollPastEnd","$updateScrollBarH","$frozen","unfreeze","$updateLines","$autosize","$maxPixelHeight","desiredHeight","$gutterWidth","$getLongestLine","STEPS","$calcSteps","steps","from","to","$timer","scrollTo","$hasCssTransforms","$blockCursor","side","offsetX","pageX","$useTextareaForIME","markerId","addToken","$themeId","cssClass","$theme","isDark","setMouseCursor","attachToShadowRoot","VirtualRenderer","Worker","Blob","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","append","getBlob","URL","webkitURL","createObjectURL","$createWorkerFromOldConfig","$sendDeltaQueue","changeListener","onMessage","callbackId","callbacks","onmessage","nameToUrl","toUrl","$normalizePath","tlns","classname","deltaQueue","$doc","emit","err","code","attachToDocument","UIWorkerClient","messageBuffer","setEmitSync","WorkerClient","mainClass","othersClass","$onUpdate","onUpdate","$others","$undostack","$undoStackDepth","setup","others","showOtherMarkers","othersActive","hideOtherMarkers","updateAnchors","updateMarkers","PlaceHolder","$enableJumpToDef","$blockSelectEnabled","addSelectionMarker","removeSelectionMarker","removeSelectionMarkers","rectangularRangeBlock","updateSelectionMarkers","defaultCommands","selectMoreLines","selectMore","splitIntoLines","alignCursors","multiSelectCommands","getSelectionMarkers","$onAddRange","$onRemoveRange","mergeOverlappingRanges","$initRangeList","toggleBlockSelection","$multiselectOnSessionChange","$onMultiSelect","$onSingleSelect","onSessionChange","$checkMultiselectChange","marker","selectionMarkerCount","$onMultiSelectExec","inVirtualMode","keepOrder","$byLines","$reAlignText","MultiSelect","enableMultiselect","enableBlockSelect","FoldMode","foldingStartMarker","foldingStopMarker","indentationBlock","openingBracketBlock","closingBracketBlock","widgetManager","updateOnChange","renderWidgets","measureWidgets","_changedWidgets","$onChangeEditor","updateOnFold","_inDocument","removeLineWidget","$updateRows","$oldWidget","addLineWidget","coverGutter","pixelHeight","$fold","onWidgetChanged","getWidgetsAtRow","fixedWidth","coverLine","fullWidth","LineWidgets","sc","onmousedown","edit","env","tagName","createEditSession","getTagRule","getStartRule","getEndRule","DocCommentHighlightRules","cFunctions","comment","singleLineComment","directive","c_cppHighlightRules","MatchingBraceOutdent","singleLineBlockCommentRe","tripleStarBlockCommentRe","startRegionRe","_getFoldWidgetBase","getCommentRegionBlock","getSectionRange","$outdent","keyword","glslHighlightRules","locals","spellcheck","title","setEditor","searchRange","$syncOptions","$initElements","replaceBox","searchOption","replaceOption","regExpOption","caseSensitiveOption","wholeWordOption","searchInput","replaceInput","searchCounter","activeInput","$searchBarKb","$closeSearchBarKb","isReplace","findPrev","Return","Tab","setSearchRange","searchRangeMarker","updateCounter","replaceAndFindNext","active","SearchBox","Ai","Ri","isBuildableProgram","rebuildProgramFunctionName","rebuildProgram","noLog","warning","info","level","counter","trigger","performance","nowFunction","dateBasedPerformanceNow","timing","navigationStart","appendAnalysis","analyses","getAnalysis","analyserName","appendToAnalysis","localeCompare","total","isWebGlConstant","stringifyWebGlConstant","zeroMeaningByCommand","oneMeaningByCommand","DEPTH_BUFFER_BIT","STENCIL_BUFFER_BIT","COLOR_BUFFER_BIT","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","ZERO","ONE","SRC_COLOR","ONE_MINUS_SRC_COLOR","SRC_ALPHA","ONE_MINUS_SRC_ALPHA","DST_ALPHA","ONE_MINUS_DST_ALPHA","DST_COLOR","ONE_MINUS_DST_COLOR","SRC_ALPHA_SATURATE","CONSTANT_COLOR","ONE_MINUS_CONSTANT_COLOR","CONSTANT_ALPHA","ONE_MINUS_CONSTANT_ALPHA","FUNC_ADD","FUNC_SUBSTRACT","FUNC_REVERSE_SUBTRACT","BLEND_EQUATION","BLEND_EQUATION_RGB","BLEND_EQUATION_ALPHA","BLEND_DST_RGB","BLEND_SRC_RGB","BLEND_DST_ALPHA","BLEND_SRC_ALPHA","BLEND_COLOR","ARRAY_BUFFER_BINDING","ELEMENT_ARRAY_BUFFER_BINDING","LINE_WIDTH","ALIASED_POINT_SIZE_RANGE","ALIASED_LINE_WIDTH_RANGE","CULL_FACE_MODE","FRONT_FACE","DEPTH_RANGE","DEPTH_WRITEMASK","DEPTH_CLEAR_VALUE","DEPTH_FUNC","STENCIL_CLEAR_VALUE","STENCIL_FUNC","STENCIL_FAIL","STENCIL_PASS_DEPTH_FAIL","STENCIL_PASS_DEPTH_PASS","STENCIL_REF","STENCIL_VALUE_MASK","STENCIL_WRITEMASK","STENCIL_BACK_FUNC","STENCIL_BACK_FAIL","STENCIL_BACK_PASS_DEPTH_FAIL","STENCIL_BACK_PASS_DEPTH_PASS","STENCIL_BACK_REF","STENCIL_BACK_VALUE_MASK","STENCIL_BACK_WRITEMASK","VIEWPORT","SCISSOR_BOX","COLOR_CLEAR_VALUE","COLOR_WRITEMASK","UNPACK_ALIGNMENT","PACK_ALIGNMENT","MAX_TEXTURE_SIZE","MAX_VIEWPORT_DIMS","SUBPIXEL_BITS","RED_BITS","GREEN_BITS","BLUE_BITS","ALPHA_BITS","DEPTH_BITS","STENCIL_BITS","POLYGON_OFFSET_UNITS","POLYGON_OFFSET_FACTOR","TEXTURE_BINDING_2D","SAMPLE_BUFFERS","SAMPLES","SAMPLE_COVERAGE_VALUE","SAMPLE_COVERAGE_INVERT","COMPRESSED_TEXTURE_FORMATS","VENDOR","RENDERER","VERSION","IMPLEMENTATION_COLOR_READ_TYPE","IMPLEMENTATION_COLOR_READ_FORMAT","BROWSER_DEFAULT_WEBGL","STATIC_DRAW","STREAM_DRAW","DYNAMIC_DRAW","ARRAY_BUFFER","ELEMENT_ARRAY_BUFFER","BUFFER_SIZE","BUFFER_USAGE","CURRENT_VERTEX_ATTRIB","VERTEX_ATTRIB_ARRAY_ENABLED","VERTEX_ATTRIB_ARRAY_SIZE","VERTEX_ATTRIB_ARRAY_STRIDE","VERTEX_ATTRIB_ARRAY_TYPE","VERTEX_ATTRIB_ARRAY_NORMALIZED","VERTEX_ATTRIB_ARRAY_POINTER","VERTEX_ATTRIB_ARRAY_BUFFER_BINDING","CULL_FACE","FRONT","BACK","FRONT_AND_BACK","BLEND","DEPTH_TEST","DITHER","POLYGON_OFFSET_FILL","SAMPLE_ALPHA_TO_COVERAGE","SAMPLE_COVERAGE","SCISSOR_TEST","STENCIL_TEST","NO_ERROR","INVALID_ENUM","INVALID_VALUE","INVALID_OPERATION","OUT_OF_MEMORY","CONTEXT_LOST_WEBGL","CW","CCW","DONT_CARE","FASTEST","NICEST","GENERATE_MIPMAP_HINT","BYTE","UNSIGNED_BYTE","SHORT","UNSIGNED_SHORT","INT","UNSIGNED_INT","FLOAT","DEPTH_COMPONENT","ALPHA","RGB","RGBA","LUMINANCE","LUMINANCE_ALPHA","UNSIGNED_SHORT_4_4_4_4","UNSIGNED_SHORT_5_5_5_1","UNSIGNED_SHORT_5_6_5","COMPILE_STATUS","DELETE_STATUS","LINK_STATUS","VALIDATE_STATUS","ATTACHED_SHADERS","ACTIVE_ATTRIBUTES","ACTIVE_UNIFORMS","MAX_VERTEX_ATTRIBS","MAX_VERTEX_UNIFORM_VECTORS","MAX_VARYING_VECTORS","MAX_COMBINED_TEXTURE_IMAGE_UNITS","MAX_VERTEX_TEXTURE_IMAGE_UNITS","MAX_TEXTURE_IMAGE_UNITS","MAX_FRAGMENT_UNIFORM_VECTORS","SHADER_TYPE","SHADING_LANGUAGE_VERSION","CURRENT_PROGRAM","NEVER","ALWAYS","LESS","EQUAL","LEQUAL","GREATER","GEQUAL","NOTEQUAL","KEEP","REPLACE","INCR","DECR","INVERT","INCR_WRAP","DECR_WRAP","NEAREST","LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR_MIPMAP_NEAREST","NEAREST_MIPMAP_LINEAR","LINEAR_MIPMAP_LINEAR","TEXTURE_MAG_FILTER","TEXTURE_MIN_FILTER","TEXTURE_WRAP_S","TEXTURE_WRAP_T","TEXTURE_2D","TEXTURE","TEXTURE_CUBE_MAP","TEXTURE_BINDING_CUBE_MAP","TEXTURE_CUBE_MAP_POSITIVE_X","TEXTURE_CUBE_MAP_NEGATIVE_X","TEXTURE_CUBE_MAP_POSITIVE_Y","TEXTURE_CUBE_MAP_NEGATIVE_Y","TEXTURE_CUBE_MAP_POSITIVE_Z","TEXTURE_CUBE_MAP_NEGATIVE_Z","MAX_CUBE_MAP_TEXTURE_SIZE","TEXTURE0","TEXTURE1","TEXTURE2","TEXTURE3","TEXTURE4","TEXTURE5","TEXTURE6","TEXTURE7","TEXTURE8","TEXTURE9","TEXTURE10","TEXTURE11","TEXTURE12","TEXTURE13","TEXTURE14","TEXTURE15","TEXTURE16","TEXTURE17","TEXTURE18","TEXTURE19","TEXTURE20","TEXTURE21","TEXTURE22","TEXTURE23","TEXTURE24","TEXTURE25","TEXTURE26","TEXTURE27","TEXTURE28","TEXTURE29","TEXTURE30","TEXTURE31","ACTIVE_TEXTURE","REPEAT","CLAMP_TO_EDGE","MIRRORED_REPEAT","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D","SAMPLER_CUBE","LOW_FLOAT","MEDIUM_FLOAT","HIGH_FLOAT","LOW_INT","MEDIUM_INT","HIGH_INT","FRAMEBUFFER","RENDERBUFFER","RGBA4","RGB5_A1","RGB565","DEPTH_COMPONENT16","STENCIL_INDEX","STENCIL_INDEX8","DEPTH_STENCIL","RENDERBUFFER_WIDTH","RENDERBUFFER_HEIGHT","RENDERBUFFER_INTERNAL_FORMAT","RENDERBUFFER_RED_SIZE","RENDERBUFFER_GREEN_SIZE","RENDERBUFFER_BLUE_SIZE","RENDERBUFFER_ALPHA_SIZE","RENDERBUFFER_DEPTH_SIZE","RENDERBUFFER_STENCIL_SIZE","FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE","FRAMEBUFFER_ATTACHMENT_OBJECT_NAME","FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL","FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE","COLOR_ATTACHMENT0","DEPTH_ATTACHMENT","STENCIL_ATTACHMENT","DEPTH_STENCIL_ATTACHMENT","NONE","FRAMEBUFFER_COMPLETE","FRAMEBUFFER_INCOMPLETE_ATTACHMENT","FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT","FRAMEBUFFER_INCOMPLETE_DIMENSIONS","FRAMEBUFFER_UNSUPPORTED","FRAMEBUFFER_BINDING","RENDERBUFFER_BINDING","MAX_RENDERBUFFER_SIZE","INVALID_FRAMEBUFFER_OPERATION","UNPACK_FLIP_Y_WEBGL","UNPACK_PREMULTIPLY_ALPHA_WEBGL","UNPACK_COLORSPACE_CONVERSION_WEBGL","READ_BUFFER","UNPACK_ROW_LENGTH","UNPACK_SKIP_ROWS","UNPACK_SKIP_PIXELS","PACK_ROW_LENGTH","PACK_SKIP_ROWS","PACK_SKIP_PIXELS","TEXTURE_BINDING_3D","UNPACK_SKIP_IMAGES","UNPACK_IMAGE_HEIGHT","MAX_3D_TEXTURE_SIZE","MAX_ELEMENTS_VERTICES","MAX_ELEMENTS_INDICES","MAX_TEXTURE_LOD_BIAS","MAX_FRAGMENT_UNIFORM_COMPONENTS","MAX_VERTEX_UNIFORM_COMPONENTS","MAX_ARRAY_TEXTURE_LAYERS","MIN_PROGRAM_TEXEL_OFFSET","MAX_PROGRAM_TEXEL_OFFSET","MAX_VARYING_COMPONENTS","FRAGMENT_SHADER_DERIVATIVE_HINT","RASTERIZER_DISCARD","VERTEX_ARRAY_BINDING","MAX_VERTEX_OUTPUT_COMPONENTS","MAX_FRAGMENT_INPUT_COMPONENTS","MAX_SERVER_WAIT_TIMEOUT","MAX_ELEMENT_INDEX","RED","RGB8","RGBA8","RGB10_A2","TEXTURE_3D","TEXTURE_WRAP_R","TEXTURE_MIN_LOD","TEXTURE_MAX_LOD","TEXTURE_BASE_LEVEL","TEXTURE_MAX_LEVEL","TEXTURE_COMPARE_MODE","TEXTURE_COMPARE_FUNC","SRGB","SRGB8","SRGB8_ALPHA8","COMPARE_REF_TO_TEXTURE","RGBA32F","RGB32F","RGBA16F","RGB16F","TEXTURE_2D_ARRAY","TEXTURE_BINDING_2D_ARRAY","R11F_G11F_B10F","RGB9_E5","RGBA32UI","RGB32UI","RGBA16UI","RGB16UI","RGBA8UI","RGB8UI","RGBA32I","RGB32I","RGBA16I","RGB16I","RGBA8I","RGB8I","RED_INTEGER","RGB_INTEGER","RGBA_INTEGER","R8","RG8","R16F","R32F","RG16F","RG32F","R8I","R8UI","R16I","R16UI","R32I","R32UI","RG8I","RG8UI","RG16I","RG16UI","RG32I","RG32UI","R8_SNORM","RG8_SNORM","RGB8_SNORM","RGBA8_SNORM","RGB10_A2UI","TEXTURE_IMMUTABLE_FORMAT","TEXTURE_IMMUTABLE_LEVELS","UNSIGNED_INT_2_10_10_10_REV","UNSIGNED_INT_10F_11F_11F_REV","UNSIGNED_INT_5_9_9_9_REV","FLOAT_32_UNSIGNED_INT_24_8_REV","UNSIGNED_INT_24_8","HALF_FLOAT","RG","RG_INTEGER","INT_2_10_10_10_REV","CURRENT_QUERY","QUERY_RESULT","QUERY_RESULT_AVAILABLE","ANY_SAMPLES_PASSED","ANY_SAMPLES_PASSED_CONSERVATIVE","MAX_DRAW_BUFFERS","DRAW_BUFFER0","DRAW_BUFFER1","DRAW_BUFFER2","DRAW_BUFFER3","DRAW_BUFFER4","DRAW_BUFFER5","DRAW_BUFFER6","DRAW_BUFFER7","DRAW_BUFFER8","DRAW_BUFFER9","DRAW_BUFFER10","DRAW_BUFFER11","DRAW_BUFFER12","DRAW_BUFFER13","DRAW_BUFFER14","DRAW_BUFFER15","MAX_COLOR_ATTACHMENTS","COLOR_ATTACHMENT1","COLOR_ATTACHMENT2","COLOR_ATTACHMENT3","COLOR_ATTACHMENT4","COLOR_ATTACHMENT5","COLOR_ATTACHMENT6","COLOR_ATTACHMENT7","COLOR_ATTACHMENT8","COLOR_ATTACHMENT9","COLOR_ATTACHMENT10","COLOR_ATTACHMENT11","COLOR_ATTACHMENT12","COLOR_ATTACHMENT13","COLOR_ATTACHMENT14","COLOR_ATTACHMENT15","SAMPLER_3D","SAMPLER_2D_SHADOW","SAMPLER_2D_ARRAY","SAMPLER_2D_ARRAY_SHADOW","SAMPLER_CUBE_SHADOW","INT_SAMPLER_2D","INT_SAMPLER_3D","INT_SAMPLER_CUBE","INT_SAMPLER_2D_ARRAY","UNSIGNED_INT_SAMPLER_2D","UNSIGNED_INT_SAMPLER_3D","UNSIGNED_INT_SAMPLER_CUBE","UNSIGNED_INT_SAMPLER_2D_ARRAY","MAX_SAMPLES","SAMPLER_BINDING","PIXEL_PACK_BUFFER","PIXEL_UNPACK_BUFFER","PIXEL_PACK_BUFFER_BINDING","PIXEL_UNPACK_BUFFER_BINDING","COPY_READ_BUFFER","COPY_WRITE_BUFFER","COPY_READ_BUFFER_BINDING","COPY_WRITE_BUFFER_BINDING","FLOAT_MAT2x3","FLOAT_MAT2x4","FLOAT_MAT3x2","FLOAT_MAT3x4","FLOAT_MAT4x2","FLOAT_MAT4x3","UNSIGNED_INT_VEC2","UNSIGNED_INT_VEC3","UNSIGNED_INT_VEC4","UNSIGNED_NORMALIZED","SIGNED_NORMALIZED","VERTEX_ATTRIB_ARRAY_INTEGER","VERTEX_ATTRIB_ARRAY_DIVISOR","TRANSFORM_FEEDBACK_BUFFER_MODE","MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS","TRANSFORM_FEEDBACK_VARYINGS","TRANSFORM_FEEDBACK_BUFFER_START","TRANSFORM_FEEDBACK_BUFFER_SIZE","TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN","MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS","MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS","INTERLEAVED_ATTRIBS","SEPARATE_ATTRIBS","TRANSFORM_FEEDBACK_BUFFER","TRANSFORM_FEEDBACK_BUFFER_BINDING","TRANSFORM_FEEDBACK","TRANSFORM_FEEDBACK_PAUSED","TRANSFORM_FEEDBACK_ACTIVE","TRANSFORM_FEEDBACK_BINDING","FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING","FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE","FRAMEBUFFER_ATTACHMENT_RED_SIZE","FRAMEBUFFER_ATTACHMENT_GREEN_SIZE","FRAMEBUFFER_ATTACHMENT_BLUE_SIZE","FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE","FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE","FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE","FRAMEBUFFER_DEFAULT","DEPTH24_STENCIL8","DRAW_FRAMEBUFFER_BINDING","READ_FRAMEBUFFER","DRAW_FRAMEBUFFER","READ_FRAMEBUFFER_BINDING","RENDERBUFFER_SAMPLES","FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER","FRAMEBUFFER_INCOMPLETE_MULTISAMPLE","UNIFORM_BUFFER","UNIFORM_BUFFER_BINDING","UNIFORM_BUFFER_START","UNIFORM_BUFFER_SIZE","MAX_VERTEX_UNIFORM_BLOCKS","MAX_FRAGMENT_UNIFORM_BLOCKS","MAX_COMBINED_UNIFORM_BLOCKS","MAX_UNIFORM_BUFFER_BINDINGS","MAX_UNIFORM_BLOCK_SIZE","MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS","MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS","UNIFORM_BUFFER_OFFSET_ALIGNMENT","ACTIVE_UNIFORM_BLOCKS","UNIFORM_TYPE","UNIFORM_SIZE","UNIFORM_BLOCK_INDEX","UNIFORM_OFFSET","UNIFORM_ARRAY_STRIDE","UNIFORM_MATRIX_STRIDE","UNIFORM_IS_ROW_MAJOR","UNIFORM_BLOCK_BINDING","UNIFORM_BLOCK_DATA_SIZE","UNIFORM_BLOCK_ACTIVE_UNIFORMS","UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES","UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER","UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER","OBJECT_TYPE","SYNC_CONDITION","SYNC_STATUS","SYNC_FLAGS","SYNC_FENCE","SYNC_GPU_COMMANDS_COMPLETE","UNSIGNALED","SIGNALED","ALREADY_SIGNALED","TIMEOUT_EXPIRED","CONDITION_SATISFIED","WAIT_FAILED","SYNC_FLUSH_COMMANDS_BIT","COLOR","DEPTH","STENCIL","MIN","MAX","DEPTH_COMPONENT24","STREAM_READ","STREAM_COPY","STATIC_READ","STATIC_COPY","DYNAMIC_READ","DYNAMIC_COPY","DEPTH_COMPONENT32F","DEPTH32F_STENCIL8","INVALID_INDEX","TIMEOUT_IGNORED","MAX_CLIENT_WAIT_TIMEOUT_WEBGL","VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE","extensionName","UNMASKED_VENDOR_WEBGL","UNMASKED_RENDERER_WEBGL","MAX_TEXTURE_MAX_ANISOTROPY_EXT","TEXTURE_MAX_ANISOTROPY_EXT","COMPRESSED_RGB_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT3_EXT","COMPRESSED_RGBA_S3TC_DXT5_EXT","COMPRESSED_R11_EAC","COMPRESSED_SIGNED_R11_EAC","COMPRESSED_RG11_EAC","COMPRESSED_SIGNED_RG11_EAC","COMPRESSED_RGB8_ETC2","COMPRESSED_RGBA8_ETC2_EAC","COMPRESSED_SRGB8_ETC2","COMPRESSED_SRGB8_ALPHA8_ETC2_EAC","COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2","COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2","COMPRESSED_RGB_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_PVRTC_4BPPV1_IMG","COMPRESSED_RGB_PVRTC_2BPPV1_IMG","COMPRESSED_RGBA_PVRTC_2BPPV1_IMG","COMPRESSED_RGB_ETC1_WEBGL","COMPRESSED_RGB_ATC_WEBGL","COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL","COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL","UNSIGNED_INT_24_8_WEBGL","HALF_FLOAT_OES","FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT","UNSIGNED_NORMALIZED_EXT","MIN_EXT","MAX_EXT","SRGB_EXT","SRGB_ALPHA_EXT","SRGB8_ALPHA8_EXT","FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT","FRAGMENT_SHADER_DERIVATIVE_HINT_OES","COLOR_ATTACHMENT0_WEBGL","COLOR_ATTACHMENT1_WEBGL","COLOR_ATTACHMENT2_WEBGL","COLOR_ATTACHMENT3_WEBGL","COLOR_ATTACHMENT4_WEBGL","COLOR_ATTACHMENT5_WEBGL","COLOR_ATTACHMENT6_WEBGL","COLOR_ATTACHMENT7_WEBGL","COLOR_ATTACHMENT8_WEBGL","COLOR_ATTACHMENT9_WEBGL","COLOR_ATTACHMENT10_WEBGL","COLOR_ATTACHMENT11_WEBGL","COLOR_ATTACHMENT12_WEBGL","COLOR_ATTACHMENT13_WEBGL","COLOR_ATTACHMENT14_WEBGL","COLOR_ATTACHMENT15_WEBGL","DRAW_BUFFER0_WEBGL","DRAW_BUFFER1_WEBGL","DRAW_BUFFER2_WEBGL","DRAW_BUFFER3_WEBGL","DRAW_BUFFER4_WEBGL","DRAW_BUFFER5_WEBGL","DRAW_BUFFER6_WEBGL","DRAW_BUFFER7_WEBGL","DRAW_BUFFER8_WEBGL","DRAW_BUFFER9_WEBGL","DRAW_BUFFER10_WEBGL","DRAW_BUFFER11_WEBGL","DRAW_BUFFER12_WEBGL","DRAW_BUFFER13_WEBGL","DRAW_BUFFER14_WEBGL","DRAW_BUFFER15_WEBGL","MAX_COLOR_ATTACHMENTS_WEBGL","VERTEX_ARRAY_BINDING_OES","QUERY_COUNTER_BITS_EXT","CURRENT_QUERY_EXT","QUERY_RESULT_EXT","QUERY_RESULT_AVAILABLE_EXT","TIME_ELAPSED_EXT","TIMESTAMP_EXT","GPU_DISJOINT_EXT","getError","blendFunc","blendFuncSeparate","readBuffer","getFramebufferAttachmentParameter","texParameterf","texParameteri","drawArrays","drawElements","drawArraysInstanced","drawArraysInstancedAngle","drawBuffers","drawElementsInstanced","drawRangeElements","totalTriangles","totalTriangleStrip","totalTriangleFan","totalLines","totalLineStrip","totalLineLoop","totalPoints","commandArguments","appendToPrimitives","triangles","triangleStrip","triangleFan","lineStrip","lineLoop","points","contextInformation","analysers","initAnalysers","appendAnalyses","storeOriginFunction","getOriginFunctionName","storePrototypeOriginFunction","executePrototypeOriginFunction","executeFunction","executeOriginFunction","originFunctionPrefix","getStackTrace","callee","caller","H","getWebGlObjectTag","SPECTOROBJECTTAGKEY","attachWebGlObjectTag","displayText","stringifyWebGlObjectTag","typeName","X","tagWebGlObject","getNextId","j","createCapture","stringifyUniform","startTime","commandEndTime","endTime","stackTrace","transformCapture","stringifyJSON","spiedCommandName","stringifyArgs","stringifyResult","stringifyValue","HTMLImageElement","ArrayBuffer","K","commandName","Y","Z","Q","J","internalSpiedCommandName","isDeprecated","ee","te","ne","ie","oe","se","ae","ce","le","ue","he","de","pe","me","fe","ge","ve","_e","Ee","Ce","Ae","Re","Se","ye","Te","rangeMin","rangeMax","precision","be","we","xe","Le","Ie","Oe","Fe","Me","Ne","Pe","Be","spiedCommandRunningContext","spiedCommand","commandOptions","contextVersion","extensions","toggleCapture","initCustomCommands","initCommand","spy","overloadedCommand","unSpy","customCommandsConstructors","getSpy","$e","consumeCommands","getConsumeCommands","changeCommandsByState","getChangeCommandsByState","commandNameToStates","getCommandNameToStates","startCapture","quickCapture","fullCapture","capturedCommandsByState","requireStartAndStopStates","currentState","readFromContextNoSideEffects","copyCurrentStateToPrevious","previousState","stopCapture","analyse","registerCallbacks","onChangeCommand","onConsumeCommand","getStateData","isValidChangeCommand","isValidConsumeCommand","storeCommandIds","lastCommandName","consumeCommandId","changeCommandCaptureStatus","isStateEnableNoSideEffects","areStatesEquals","unusedCommandIds","disabledCommandIds","redundantCommandIds","validCommandIds","isStateEnable","getSpectorData","__SPECTOR_Object_TAG","__SPECTOR_Object_CustomData","__SPECTOR_Metadata","readFromContext","ke","De","getWebgl1Parameters","getWebgl2Parameters","changeCommands","constant","readParameterFromContext","stringifyParameterValue","returnType","Ue","Ge","We","Ve","isEnabled","He","Xe","je","Ke","ze","Ye","qe","Ze","Qe","Je","et","tt","nt","it","rt","ot","st","at","ct","lt","stencilOpStates","stencilFuncStates","stencilMaskStates","ut","isSupportedCombination","isSupportedComponentType","readPixels","Uint8Array","ht","dt","pt","captureFrameBuffer","createFramebuffer","workingCanvas","workingContext2D","captureCanvas","captureContext2D","imageSmoothingEnabled","mozImageSmoothingEnabled","oImageSmoothingEnabled","webkitImageSmoothingEnabled","msImageSmoothingEnabled","Attachments","FrameBuffer","getCapture","drawingBufferWidth","drawingBufferHeight","checkFramebufferStatus","FrameBufferStatus","readFrameBufferAttachmentFromContext","readFrameBufferAttachmentFromRenderBuffer","readFrameBufferAttachmentFromTexture","samples","createRenderbuffer","bindRenderbuffer","renderbufferStorage","bindFramebuffer","framebufferRenderbuffer","blitFramebuffer","deleteRenderbuffer","framebufferTextureLayer","framebufferTexture2D","attachmentName","textureCubeMapFace","textureLayer","createImageData","putImageData","captureBaseSize","globalCompositeOperation","drawImage","setTransform","toDataURL","mt","appendTextureState","textureType","getWebGlConstant","depth","visual","getTextureVisualState","cubeMapFaces","ft","getUboValue","uboTypes","arrayBufferView","lengthMultiplier","getIndexedParameter","bindBuffer","getBufferSubData","gt","vt","_t","Et","saveInGlobalStore","store","getFromGlobalStore","updateInGlobalStore","Ct","At","Rt","St","yt","Tt","bt","wt","xt","Lt","getProgramData","getProgramParameter","getAttachedShaders","readShaderFromContext","fragment","programStatus","getShaderSource","getTranslatedShaderSource","getShaderParameter","readNameFromShaderSource","translatedSource","decodeURIComponent","It","Ot","Ft","drawCallTextureInputState","drawCallUboInputState","frameBuffer","readFrameBufferFromContext","RECOMPILABLE","elementArray","readAttributeFromContext","readUniformFromContext","uniformBlocks","readUniformBlockFromContext","readUniformsFromContextIntoState","transformFeedbackMode","transformFeedbacks","readTransformFeedbackFromContext","samplerTypes","typeValue","readTextureFromContext","depthAttachment","stencilAttachment","colorAttachments","msaaSamples","textureLevel","EXT_sRGB","encoding","alphaSize","blueSize","depthSize","greenSize","redSize","stencilSize","getActiveAttrib","getAttribLocation","getVertexAttrib","offsetPointer","getVertexAttribOffset","bufferBinding","enabled","arraySize","arrayType","normalized","vertexAttrib","divisor","integer","appendBufferCustomData","getActiveUniform","getUniformLocation","getUniform","activeTexture","getTexParameter","anisotropy","baseLevel","immutable","immutableLevels","maxLevel","samplerMaxLod","getSamplerParameter","samplerMinLod","samplerCompareFunc","samplerCompareMode","samplerWrapS","samplerWrapT","samplerWrapR","samplerMagFilter","samplerMinFilter","maxLod","minLod","compareFunc","compareMode","wrapR","getTextureStorage","getActiveUniforms","blockIndice","blockName","getActiveUniformBlockName","arrayStride","matrixStride","rowMajor","bindingPoint","getTransformFeedbackVarying","bufferSize","bufferStart","getActiveUniformBlockParameter","activeUniformCount","vertex","usage","bufferUsage","bufferLength","bufferOffset","sourceLength","bufferSourceLength","Mt","stateTrackers","onCommandCapturedCallbacks","initStateTrackers","initState","endState","captureState","Nt","createCommandNames","getCreateCommandNames","updateCommandNames","getUpdateCommandNames","deleteCommandNames","getDeleteCommandNames","memoryPerSecond","totalMemory","frameMemory","capturing","initializeByteSizeFormat","byteSizePerInternalFormat","createWithoutSideEffects","updateWithoutSideEffects","deleteWithoutSideEffects","appendRecordedInformation","objectName","memory","getBoundInstance","changeMemorySize","getByteSizeForInternalFormat","Pt","Bt","getCustomData","$t","kt","Dt","Ut","isCompressed","getTexImage2DCustomData","getCompressedTexImage2DCustomData","getTexStorage2DCustomData","Gt","Wt","getTexImage3DCustomData","getCompressedTexImage3DCustomData","getTexStorage3DCustomData","Vt","Ht","Xt","onCommandCallbacks","recorders","initRecorders","recordCommand","jt","webGlObjects","initWebglObjects","tagWebGlObjects","Kt","zt","extensionDefinition","getExtensions","Yt","qt","Zt","Qt","Jt","commandId","onMaxCommand","globalCapturing","toggleGlobalCapturing","commandSpies","stateSpy","recorderSpy","webGlObjectSpy","analyser","initStaticCapture","recordAlways","spyContext","maxCommands","currentCapture","canvasCapture","contextCapture","listenCommandsStartTime","listenCommandsEndTime","isCapturing","setMarker","clearMarker","getNextCommandCaptureId","onCommand","unSpyableMembers","spyFunction","contextAttributes","getContextAttributes","capabilities","compressedTextures","browserAgent","en","spiedWindow","lastFrame","speedRatio","willPlayNextFrame","onFrameStart","onFrameEnd","onError","lastSixtyFramesDuration","lastSixtyFramesCurrentIndex","lastSixtyFramesPreviousStart","fpsWindowSize","playNextFrame","changeSpeedRatio","getFps","requestAnimationFrameFunctions","spyRequestAnimationFrame","setTimerFunctions","spySetTimer","VRDisplay","getCallback","setTimerCommonValues","tn","onContextRequested","HTMLCanvasElement","OffscreenCanvas","nn","placeHolder","stateStore","getStatesToProcess","getLastOperation","getComponentInstance","composeInContainer","composeChildren","getChildrenIds","rn","idGenerator","pendingOperation","lastOperation","componentInstance","getParentId","hasChildren","getNewId","addChild","insertChildAt","removeChildById","removeChildAt","flushPendingOperations","domNode","removeNode","cachedCurrentChildrenContainer","cachedCurrentDomNode","sn","compositor","willRender","rootStateId","addRootState","setForRender","addChildState","insertChildState","updateState","removeState","removeChildrenStates","getGenericState","getChildrenState","getChildrenGenericState","updateAllChildrenState","updateAllChildrenGenericState","REFRESHRATEINMILLISECONDS","an","cn","events","renderElementFromTemplate","createFromHtml","bindCommands","bindCommand","mapEventListener","triggerEvent","sender","stateId","dummyTextGeneratorElement","htmlTemplate","raw","htmlEscape","innerText","ln","un","hn","logVisible","logLevel","logText","dn","pn","onCanvasSelected","mn","fn","gn","onCaptureRequested","onPlayRequested","onPauseRequested","onPlayNextFrameRequested","vn","_n","En","onCanvasSelection","currentCanvasInformation","showList","Cn","An","Rn","rootPlaceHolder","mvx","isTrackingCanvas","captureMenuComponent","canvasListComponent","canvasListItemComponent","actionsComponent","fpsCounterComponent","visible","SelectCanvasHelpText","hideLog","canvasListStateId","actionsStateId","fpsStateId","getSelectedCanvasInformation","updateMenuStateLog","PleaseWaitHelpText","trackPageCanvases","showMenuStateLog","hideMenuStateLog","ActionsHelpText","updateCanvasesList","updateCanvasesListInformationInternal","ref","updateCanvasesListInformation","updateMenuStateVisibility","captureComplete","setFPS","Sn","yn","Tn","onCaptureLoaded","drop","loadFiles","files","FileReader","onerror","readAsText","bn","wn","onCaptureSelected","onSaveRequested","VisualState","encodeURI","toTimeString","xn","Ln","In","On","Fn","Mn","onVisualStateSelected","Nn","Pn","Bn","$n","kn","onCommandSelected","onVertexSelected","onFragmentSelected","DrawCall","Dn","Un","Gn","Wn","Vn","Hn","Xn","jn","Kn","zn","Yn","qn","Zn","Qn","Jn","ei","ti","ni","help","ii","ri","oi","si","ai","onCapturesClicked","onCommandsClicked","onInformationClicked","onInitStateClicked","onEndStateClicked","onCloseClicked","onSearchTextChanged","onSearchTextCleared","searchText","commandCount","ci","ui","di","pi","mi","fi","onTranslatedVertexSourceClicked","onTranslatedFragmentSourceClicked","onVertexSourceClicked","onFragmentSourceClicked","onSourceCodeCloseClicked","onSourceCodeChanged","showError","sourceFragment","sourceVertex","translated","translatedSourceFragment","translatedSourceVertex","_indentIfdef","_beautify","editable","_triggerCompilation","_adaptComments","_getBracket","firstIteration","lastIteration","semicolonReplacementKeyRegex","openCurlyReplacementKeyRegex","closeCurlyReplacementKeyRegex","semicolonReplacementKey","openCurlyReplacementKey","closeCurlyReplacementKey","gi","vi","_i","Ei","getMDNLink","WebGL2Functions","WebGL2RootUrl","WebGLFunctions","WebGLRootUrl","beginQuery","beginTransformFeedback","bindBufferBase","bindBufferRange","bindSampler","bindTransformFeedback","bindVertexArray","clearBufferfv","clearBufferiv","clearBufferuiv","clearBufferfi","clientWaitSync","compressedTexImage3D","compressedTexSubImage3D","copyBufferSubData","copyTexSubImage3D","createQuery","createSampler","createTransformFeedback","createVertexArray","deleteQuery","deleteSampler","deleteSync","deleteTransformFeedback","deleteVertexArray","endQuery","endTransformFeedback","fenceSync","getFragDataLocation","getInternalformatParameter","getQuery","getQueryParameter","getSyncParameter","getUniformBlockIndex","getUniformIndices","invalidateFramebuffer","invalidateSubFramebuffer","isQuery","isSampler","isSync","isTransformFeedback","isVertexArray","pauseTransformFeedback","renderbufferStorageMultisample","resumeTransformFeedback","samplerParameteri","samplerParameterf","texImage3D","texStorage2D","texStorage3D","texSubImage3D","transformFeedbackVaryings","uniform1ui","uniform2ui","uniform3ui","uniform4ui","uniform1fv","uniform2fv","uniform3fv","uniform4fv","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1uiv","uniform2uiv","uniform3uiv","uniform4uiv","uniformBlockBinding","uniformMatrix2fv","uniformMatrix3x2fv","uniformMatrix4x2fv","uniformMatrix2x3fv","uniformMatrix3fv","uniformMatrix4x3fv","uniformMatrix2x4fv","uniformMatrix3x4fv","uniformMatrix4fv","vertexAttribDivisor","vertexAttribI4i","vertexAttribI4ui","vertexAttribI4iv","vertexAttribI4uiv","vertexAttribIPointer","waitSync","uniform1f","uniform1i","uniform2f","uniform2i","uniform3f","uniform3i","uniform4f","uniform4i","vertexAttrib1f","vertexAttrib2f","vertexAttrib3f","vertexAttrib4f","vertexAttrib1fv","vertexAttrib2fv","vertexAttrib3fv","vertexAttrib4fv","Ci","currentCommandId","commandListStateId","commandDetailStateId","currentCaptureStateId","currentCommandStateId","currentVisualStateId","visualStateListStateId","initVisualStateId","sourceCodeComponentStateId","captureListComponent","captureListItemComponent","visualStateListComponent","visualStateListItemComponent","commandListComponent","commandListItemComponent","commandDetailComponent","jsonContentComponent","jsonGroupComponent","jsonItemComponent","jsonImageItemComponent","jsonHelpItemComponent","jsonVisualStateItemComponent","resultViewMenuComponent","resultViewContentComponent","resultViewComponent","sourceCodeComponent","informationColumnComponent","menuStateId","contentStateId","captureListStateId","initKeyboardEvents","initMenuComponent","addCapture","selectCapture","saveCapture","selectVisualState","selectCommand","openShader","displayCurrentCapture","programId","updateViewState","msSaveBlob","click","displayCurrentCommand","displayCurrentVisualState","showSourceCodeError","selectPreviousCommand","selectNextCommand","selectPreviousVisualState","selectNextVisualState","nameVertex","nameFragment","displayCurrentCommandDetail","previousCommandStateId","nextCommandStateId","previousVisualStateId","nextVisualStateId","displayCaptures","displayInformation","displayInitState","displayEndState","onCaptureRelatedAction","displayJSONGroup","displayJSON","getJSONAsString","toFilter","createVisualStates","createCommands","visualStateId","duration","commandStateId","MIN_VALUE","CaptureMenu","ResultView","noFrameTimeout","captureNextFrames","captureNextCommands","retry","contexts","timeSpy","onCaptureStarted","onCapture","onErrorInternal","getFirstAvailable3dContext","tryGetContextFromHelperField","tryGetContextFromCanvas","__spector_context_type","displayUI","captureMenu","getCaptureUI","pause","play","resultView","getResultUI","rebuildProgramFromProgramId","referenceNewProgram","drawOnlyEveryXFrame","spyCanvases","canvasSpy","spyCanvas","getAvailableContexts","getAvailableContextSpyByCanvas","captureContextSpy","captureContext","contextSpy","capturingContext","captureCommands","captureFrames","captureNextFrame","triggerCapture","Panel","REVISION","addPanel","showPanel","usedJSHeapSize","jsHeapSizeLimit","textBaseline","fillStyle","fillRect","fillText","globalAlpha","THREE","quatInverse","lastPosition","lastQuaternion","minDistance","maxDistance","Infinity","minZoom","maxZoom","minPolarAngle","maxPolarAngle","minAzimuthAngle","maxAzimuthAngle","dampingFactor","enableRotate","enablePan","screenSpacePanning","keyPanSpeed","autoRotate","autoRotateSpeed","enableKeys","LEFT","UP","RIGHT","BOTTOM","mouseButtons","MOUSE","ROTATE","MIDDLE","DOLLY","PAN","TOUCH","TWO","DOLLY_PAN","target0","position0","zoom0","getPolarAngle","spherical","phi","getAzimuthalAngle","theta","saveState","changeEvent","STATE","Quaternion","setFromUnitVectors","inverse","sub","applyQuaternion","setFromVector3","rotateLeft","getAutoRotationAngle","sphericalDelta","makeSafe","addScaledVector","panOffset","setFromSpherical","lookAt","multiplyScalar","zoomChanged","distanceToSquared","EPS","quaternion","dispose","onKeyDown","startEvent","endEvent","TOUCH_ROTATE","TOUCH_PAN","TOUCH_DOLLY_PAN","TOUCH_DOLLY_ROTATE","Spherical","rotateStart","Vector2","rotateEnd","rotateDelta","panStart","panEnd","panDelta","dollyStart","dollyEnd","dollyDelta","getZoomScale","angle","rotateUp","panLeft","distance","objectMatrix","setFromMatrixColumn","panUp","crossVectors","pan","isPerspectiveCamera","targetDistance","isOrthographicCamera","dollyIn","dollyScale","dollyOut","handleMouseDownRotate","handleMouseDownPan","handleTouchStartRotate","handleTouchStartPan","handleTouchStartDolly","dx","dy","handleTouchMoveRotate","subVectors","handleTouchMovePan","handleTouchMoveDolly","handleMouseDownDolly","handleMouseMoveRotate","handleMouseMoveDolly","handleMouseMovePan","handleMouseWheel","handleKeyDown","needsUpdate","handleTouchStartDollyPan","DOLLY_ROTATE","handleTouchStartDollyRotate","handleTouchMoveDollyPan","handleTouchMoveDollyRotate","tabIndex","EventDispatcher","MapControls","CullFaceNone","CullFaceBack","CullFaceFront","CullFaceFrontBack","BasicShadowMap","PCFShadowMap","PCFSoftShadowMap","VSMShadowMap","FrontSide","BackSide","DoubleSide","FlatShading","SmoothShading","NoBlending","NormalBlending","AdditiveBlending","SubtractiveBlending","MultiplyBlending","CustomBlending","AddEquation","SubtractEquation","ReverseSubtractEquation","MinEquation","MaxEquation","ZeroFactor","OneFactor","SrcColorFactor","OneMinusSrcColorFactor","SrcAlphaFactor","OneMinusSrcAlphaFactor","DstAlphaFactor","OneMinusDstAlphaFactor","DstColorFactor","OneMinusDstColorFactor","SrcAlphaSaturateFactor","NeverDepth","AlwaysDepth","LessDepth","LessEqualDepth","EqualDepth","GreaterEqualDepth","GreaterDepth","NotEqualDepth","MultiplyOperation","MixOperation","AddOperation","NoToneMapping","LinearToneMapping","ReinhardToneMapping","CineonToneMapping","ACESFilmicToneMapping","CustomToneMapping","UVMapping","CubeReflectionMapping","CubeRefractionMapping","EquirectangularReflectionMapping","EquirectangularRefractionMapping","CubeUVReflectionMapping","CubeUVRefractionMapping","RepeatWrapping","ClampToEdgeWrapping","MirroredRepeatWrapping","NearestFilter","NearestMipmapNearestFilter","NearestMipMapNearestFilter","NearestMipmapLinearFilter","NearestMipMapLinearFilter","LinearFilter","LinearMipmapNearestFilter","LinearMipMapNearestFilter","LinearMipmapLinearFilter","LinearMipMapLinearFilter","UnsignedByteType","ByteType","ShortType","UnsignedShortType","IntType","UnsignedIntType","FloatType","HalfFloatType","UnsignedShort4444Type","UnsignedShort5551Type","UnsignedShort565Type","UnsignedInt248Type","AlphaFormat","RGBFormat","RGBAFormat","LuminanceFormat","LuminanceAlphaFormat","RGBEFormat","DepthFormat","DepthStencilFormat","RedFormat","RedIntegerFormat","RGFormat","RGIntegerFormat","RGBIntegerFormat","RGBAIntegerFormat","RGB_S3TC_DXT1_Format","RGBA_S3TC_DXT1_Format","RGBA_S3TC_DXT3_Format","RGBA_S3TC_DXT5_Format","RGB_PVRTC_4BPPV1_Format","RGB_PVRTC_2BPPV1_Format","RGBA_PVRTC_4BPPV1_Format","RGBA_PVRTC_2BPPV1_Format","RGB_ETC1_Format","RGB_ETC2_Format","RGBA_ETC2_EAC_Format","RGBA_ASTC_4x4_Format","RGBA_ASTC_5x4_Format","RGBA_ASTC_5x5_Format","RGBA_ASTC_6x5_Format","RGBA_ASTC_6x6_Format","RGBA_ASTC_8x5_Format","RGBA_ASTC_8x6_Format","RGBA_ASTC_8x8_Format","RGBA_ASTC_10x5_Format","RGBA_ASTC_10x6_Format","RGBA_ASTC_10x8_Format","RGBA_ASTC_10x10_Format","RGBA_ASTC_12x10_Format","RGBA_ASTC_12x12_Format","RGBA_BPTC_Format","SRGB8_ALPHA8_ASTC_4x4_Format","SRGB8_ALPHA8_ASTC_5x4_Format","SRGB8_ALPHA8_ASTC_5x5_Format","SRGB8_ALPHA8_ASTC_6x5_Format","SRGB8_ALPHA8_ASTC_6x6_Format","SRGB8_ALPHA8_ASTC_8x5_Format","SRGB8_ALPHA8_ASTC_8x6_Format","SRGB8_ALPHA8_ASTC_8x8_Format","SRGB8_ALPHA8_ASTC_10x5_Format","SRGB8_ALPHA8_ASTC_10x6_Format","SRGB8_ALPHA8_ASTC_10x8_Format","SRGB8_ALPHA8_ASTC_10x10_Format","SRGB8_ALPHA8_ASTC_12x10_Format","SRGB8_ALPHA8_ASTC_12x12_Format","LoopOnce","LoopRepeat","LoopPingPong","InterpolateDiscrete","InterpolateLinear","InterpolateSmooth","ZeroCurvatureEnding","ZeroSlopeEnding","WrapAroundEnding","NormalAnimationBlendMode","AdditiveAnimationBlendMode","TrianglesDrawMode","TriangleStripDrawMode","TriangleFanDrawMode","LinearEncoding","sRGBEncoding","GammaEncoding","RGBEEncoding","LogLuvEncoding","RGBM7Encoding","RGBM16Encoding","RGBDEncoding","BasicDepthPacking","RGBADepthPacking","TangentSpaceNormalMap","ObjectSpaceNormalMap","ZeroStencilOp","KeepStencilOp","ReplaceStencilOp","IncrementStencilOp","DecrementStencilOp","IncrementWrapStencilOp","DecrementWrapStencilOp","InvertStencilOp","NeverStencilFunc","LessStencilFunc","EqualStencilFunc","LessEqualStencilFunc","GreaterStencilFunc","NotEqualStencilFunc","GreaterEqualStencilFunc","AlwaysStencilFunc","StaticDrawUsage","DynamicDrawUsage","StreamDrawUsage","StaticReadUsage","DynamicReadUsage","StreamReadUsage","StaticCopyUsage","DynamicCopyUsage","StreamCopyUsage","GLSL1","GLSL3","listener","_listeners","listeners","hasEventListener","listenerArray","array","_seed","DEG2RAD","RAD2DEG","_lut","hasRandomUUID","crypto","generateUUID","randomUUID","d0","d1","d2","d3","clamp","euclideanModulo","isPowerOfTwo","ceilPowerOfTwo","LN2","floorPowerOfTwo","MathUtils","mapLinear","inverseLerp","damp","lambda","exp","pingpong","smoothstep","smootherstep","randInt","low","high","randFloat","randFloatSpread","seededRandom","degToRad","degrees","radToDeg","radians","setQuaternionFromProperEuler","order","cos","c2","s2","c13","s13","c1_3","s1_3","c3_1","s3_1","setScalar","scalar","setX","setY","setComponent","getComponent","addVectors","addScalar","subScalar","divide","divideScalar","applyMatrix3","clampScalar","minVal","maxVal","clampLength","roundToZero","negate","lengthSq","manhattanLength","atan2","distanceTo","manhattanDistanceTo","setLength","alpha","lerpVectors","v1","v2","fromArray","fromBufferAttribute","attribute","getX","getY","rotateAround","isVector2","Matrix3","n11","n12","n13","n21","n22","n23","n31","n32","n33","identity","extractBasis","xAxis","yAxis","zAxis","setFromMatrix3Column","setFromMatrix4","multiplyMatrices","premultiply","b12","b13","b21","b22","b23","b31","b32","b33","determinant","t11","t12","t13","detInv","transpose","tmp","getNormalMatrix","matrix4","transposeIntoArray","setUvTransform","tx","ty","sx","sy","cx","cy","rotate","arrayMax","isMatrix3","TYPED_ARRAYS","Int8Array","Uint8ClampedArray","Float64Array","getTypedArray","_canvas","ImageUtils","static","ImageData","textureId","Texture","DEFAULT_IMAGE","mapping","DEFAULT_MAPPING","uuid","mipmaps","repeat","matrixAutoUpdate","generateMipmaps","premultiplyAlpha","flipY","unpackAlignment","isRenderTargetTexture","updateMatrix","isRootObject","output","metadata","generator","isDataTexture","serializeImage","transformUv","uv","ImageBitmap","getDataURL","isTexture","Vector4","setZ","setW","applyMatrix4","setAxisAngleFromQuaternion","setAxisAngleFromRotationMatrix","epsilon","epsilon2","m11","m12","m13","m21","m22","m23","m31","m32","m33","getZ","getW","isVector4","WebGLRenderTarget","scissor","scissorTest","viewport","depthBuffer","stencilBuffer","depthTexture","setTexture","isWebGLRenderTarget","WebGLMultipleRenderTargets","il","isWebGLMultipleRenderTargets","WebGLMultisampleRenderTarget","isWebGLMultisampleRenderTarget","_y","_z","_w","qa","qb","qm","slerpQuaternions","dst","dstOffset","src0","srcOffset0","src1","srcOffset1","x0","y0","z0","w0","x1","y1","z1","w1","dir","sqrSin","tDir","_onChangeCallback","setFromEuler","euler","isEuler","_order","c1","c3","s1","s3","setFromAxisAngle","halfAngle","setFromRotationMatrix","vFrom","vTo","angleTo","rotateTowards","conjugate","multiplyQuaternions","qax","qay","qaz","qaw","qbx","qby","qbz","qbw","cosHalfTheta","sqrSinHalfTheta","sinHalfTheta","halfTheta","ratioA","ratioB","u1","sqrt1u1","sqrtu1","u2","u3","_onChange","isQuaternion","multiplyVectors","applyEuler","_quaternion$4","applyAxisAngle","applyNormalMatrix","qx","qy","qz","qw","ix","iy","iz","iw","project","matrixWorldInverse","unproject","projectionMatrixInverse","transformDirection","projectOnVector","denominator","projectOnPlane","planeNormal","_vector$c","reflect","normal","dz","setFromSphericalCoords","sinPhiRadius","setFromCylindrical","setFromCylindricalCoords","setFromMatrixPosition","setFromMatrixScale","sz","randomDirection","isVector3","Box3","setFromArray","minX","minY","minZ","maxX","maxY","maxZ","setFromBufferAttribute","setFromPoints","makeEmpty","expandByPoint","setFromCenterAndSize","halfSize","_vector$b","setFromObject","expandByObject","getCenter","getSize","point","expandByVector","vector","expandByScalar","updateWorldMatrix","geometry","boundingBox","computeBoundingBox","_box$3","union","containsBox","intersectsBox","clampPoint","intersectsPlane","plane","intersectsTriangle","triangle","_center","_extents","_v0$2","_v1$7","_v2$3","_f0","_f1","_f2","axes","satForAxes","_triangleNormal","distanceToPoint","getBoundingSphere","intersect","_points","isBox3","_testAxis","v0","extents","p0","p1","p2","_box$2","_v1$6","_toFarthestPoint","_toPoint","optionalCenter","maxRadiusSq","radiusSum","deltaLengthSq","getBoundingBox","getMaxScaleOnAxis","missingRadiusHalf","_vector$a","_segCenter","_segDir","_diff","_edge1","_edge2","_normal$1","Ray","origin","direction","ray","recast","closestPointToPoint","directionDistance","distanceSqToPoint","distanceSqToSegment","optionalPointOnRay","optionalPointOnSegment","segExtent","s0","sqrDist","extDet","invDet","intersectSphere","tca","radius2","thc","t0","t1","distanceToPlane","intersectPlane","distToPoint","intersectBox","tmin","tmax","tymin","tymax","tzmin","tzmax","invdirx","invdiry","invdirz","intersectTriangle","backfaceCulling","sign","DdN","DdQxE2","DdE1xQ","QdN","Matrix4","n14","n24","n34","n41","n42","n43","n44","copyPosition","setFromMatrix3","makeBasis","extractRotation","scaleX","_v1$5","scaleY","scaleZ","makeRotationFromEuler","af","bf","cf","df","ac","ad","bc","bd","makeRotationFromQuaternion","_zero","_one","eye","a14","a24","a34","a41","a42","a43","a44","b14","b24","b34","b41","b42","b43","b44","t14","scaleXSq","scaleYSq","scaleZSq","makeTranslation","makeRotationX","makeRotationY","makeRotationZ","makeRotationAxis","makeScale","makeShear","yx","zx","zy","decompose","_m1$2","invSX","invSY","invSZ","makePerspective","makeOrthographic","isMatrix4","_matrix$1","_quaternion$3","Euler","DefaultOrder","asin","setFromQuaternion","reorder","newOrder","toVector3","optionalResult","RotationOrders","Layers","mask","channel","enable","enableAll","toggle","disable","disableAll","layers","_object3DId","_v1$4","_q1","_m1$1","_target","_position$3","_scale$2","_quaternion$2","_xAxis","_yAxis","_zAxis","_addedEvent","_removedEvent","Object3D","DefaultUp","onRotationChange","onQuaternionChange","modelViewMatrix","normalMatrix","DefaultMatrixAutoUpdate","matrixWorldNeedsUpdate","castShadow","receiveShadow","frustumCulled","renderOrder","animations","userData","onBeforeRender","onAfterRender","setRotationFromAxisAngle","setRotationFromEuler","setRotationFromMatrix","setRotationFromQuaternion","rotateOnAxis","rotateOnWorldAxis","rotateX","rotateY","rotateZ","translateOnAxis","translateX","translateY","translateZ","localToWorld","worldToLocal","isCamera","isLight","isObject3D","removeFromParent","getObjectById","getObjectByProperty","getObjectByName","getWorldPosition","getWorldQuaternion","getWorldScale","getWorldDirection","raycast","traverse","traverseVisible","traverseAncestors","force","updateParents","updateChildren","geometries","shapes","skeletons","serialize","library","isInstancedMesh","instanceMatrix","instanceColor","isScene","isColor","environment","isMesh","isLine","isPoints","shape","isSkinnedMesh","bindMode","bindMatrix","skeleton","uuids","animation","extractFromCache","recursive","child","_v0$1","_v1$3","_v2$2","_v3$1","_vab","_vac","_vbc","_vap","_vbp","_vcp","Triangle","targetLengthSq","dot00","dot01","dot02","dot11","dot12","denom","invDenom","getBarycoord","p3","uv1","uv2","uv3","setFromPointsAndIndices","i0","setFromAttributeAndIndices","getArea","getMidpoint","getNormal","getPlane","getUV","isFrontFacing","d4","vc","d5","d6","vb","va","materialId","Material","fog","blending","vertexColors","transparent","blendSrc","blendDst","blendEquation","blendSrcAlpha","blendDstAlpha","blendEquationAlpha","depthFunc","depthTest","depthWrite","stencilWriteMask","stencilFunc","stencilRef","stencilFuncMask","stencilFail","stencilZFail","stencilZPass","stencilWrite","clippingPlanes","clipIntersection","clipShadows","shadowSide","colorWrite","polygonOffset","polygonOffsetFactor","polygonOffsetUnits","dithering","alphaToCoverage","premultipliedAlpha","toneMapped","_alphaTest","alphaTest","onBuild","onBeforeCompile","customProgramCacheKey","setValues","flatShading","currentValue","isRoot","getHex","roughness","metalness","sheen","sheenTint","sheenRoughness","emissive","emissiveIntensity","specular","specularIntensity","specularTint","shininess","clearcoat","clearcoatRoughness","clearcoatMap","clearcoatRoughnessMap","clearcoatNormalMap","clearcoatNormalScale","matcap","alphaMap","lightMap","lightMapIntensity","aoMap","aoMapIntensity","bumpMap","bumpScale","normalMap","normalMapType","normalScale","displacementMap","displacementScale","displacementBias","roughnessMap","metalnessMap","emissiveMap","specularMap","specularIntensityMap","specularTintMap","envMap","combine","envMapIntensity","reflectivity","refractionRatio","gradientMap","transmission","transmissionMap","thickness","thicknessMap","attenuationDistance","attenuationTint","sizeAttenuation","linewidth","dashSize","gapSize","wireframeLinewidth","wireframeLinecap","wireframeLinejoin","srcPlanes","dstPlanes","isMaterial","_colorKeywords","_hslA","_hslB","hue2rgb","SRGBToLinear","LinearToSRGB","setRGB","setHex","setHSL","handleAlpha","string","components","setColorName","copyGammaToLinear","gammaFactor","copyLinearToGamma","safeInverse","convertGammaToLinear","convertLinearToGamma","copySRGBToLinear","copyLinearToSRGB","convertSRGBToLinear","convertLinearToSRGB","getHexString","getHSL","hue","saturation","lightness","getStyle","offsetHSL","addColors","color1","color2","lerpColors","lerpHSL","NAMES","MeshBasicMaterial","isMeshBasicMaterial","_vector$9","_vector2$1","BufferAttribute","itemSize","updateRange","onUploadCallback","setUsage","copyAt","index1","index2","copyColorsArray","colors","copyVector2sArray","vectors","copyVector3sArray","copyVector4sArray","setXY","setXYZ","setXYZW","onUpload","isBufferAttribute","Int8BufferAttribute","Uint8BufferAttribute","Uint8ClampedBufferAttribute","Int16BufferAttribute","Uint16BufferAttribute","Int32BufferAttribute","Uint32BufferAttribute","Float16BufferAttribute","isFloat16BufferAttribute","Float32BufferAttribute","Float64BufferAttribute","_id","_m1","_obj","_offset","_box$1","_boxMorphTargets","_vector$8","BufferGeometry","morphAttributes","morphTargetsRelative","groups","boundingSphere","drawRange","getIndex","setIndex","deleteAttribute","hasAttribute","addGroup","materialIndex","clearGroups","setDrawRange","tangent","computeBoundingSphere","morphAttributesPosition","isGLBufferAttribute","morphAttribute","jl","computeTangents","positions","normals","uvs","nVertices","tangents","tan1","tan2","vA","vB","vC","uvA","uvB","uvC","sdir","tdir","handleTriangle","group","tmp2","n2","handleVertex","computeVertexNormals","positionAttribute","normalAttribute","pA","pB","pC","nA","nB","nC","cb","ab","normalizeNormals","isBufferGeometry","attributeArray1","attribute2","attributeArray2","attributeOffset","toNonIndexed","convertBufferAttribute","array2","isInterleavedBufferAttribute","geometry2","newAttribute","morphArray","hasMorphAttributes","attributeArray","_inverseMatrix$2","_ray$2","_sphere$3","_vA$1","_vB$1","_vC$1","_tempA","_tempB","_tempC","_morphA","_morphB","_morphC","_uvA$1","_uvB$1","_uvC$1","_intersectionPoint","_intersectionPointWorld","updateMorphTargets","morphTargetInfluences","morphTargetDictionary","ml","morphTargets","raycaster","intersection","morphPosition","groupMaterial","checkBufferGeometryIntersection","faceIndex","face","isGeometry","morphInfluences","influence","boneTransform","checkIntersection","BoxGeometry","widthSegments","heightSegments","depthSegments","numberOfVertices","groupStart","buildPlane","udir","vdir","gridX","gridY","segmentWidth","segmentHeight","widthHalf","heightHalf","depthHalf","gridX1","gridY1","vertexCounter","cloneUniforms","mergeUniforms","merged","UniformsUtils","ShaderMaterial","defines","clipping","derivatives","fragDepth","shaderTextureLOD","defaultAttributeValues","index0AttributeName","uniformsNeedUpdate","glslVersion","isShaderMaterial","Camera","view","filmGauge","filmOffset","setFocalLength","focalLength","vExtentSlope","getFilmHeight","atan","getFocalLength","getEffectiveFOV","getFilmWidth","setViewOffset","fullHeight","offsetY","clearViewOffset","skew","CubeCamera","renderTarget","isWebGLCubeRenderTarget","cameraPX","cameraNX","cameraPY","cameraNY","cameraPZ","cameraNZ","currentXrEnabled","xr","currentRenderTarget","getRenderTarget","setRenderTarget","CubeTexture","isCubeTexture","WebGLCubeRenderTarget","dummy","isInteger","_needsFlipEnvMap","fromEquirectangularTexture","tEquirect","currentMinFilter","stencil","_vector1","_vector2","_normalMatrix","setComponents","setFromNormalAndCoplanarPoint","inverseNormalLength","distanceToSphere","projectPoint","intersectLine","intersectsLine","startSign","endSign","coplanarPoint","optionalNormalMatrix","referencePoint","isPlane","_sphere$2","_vector$7","p4","p5","planes","frustum","setFromProjectionMatrix","me0","me1","me2","me3","me4","me5","me6","me7","me8","me9","me10","me11","me12","me13","me14","me15","intersectsObject","intersectsSprite","sprite","negRadius","WebGLAnimation","isAnimating","animationLoop","requestId","onAnimationFrame","frame","cancelAnimationFrame","setAnimationLoop","setContext","WebGLAttributes","isWebGL2","WeakMap","deleteBuffer","bufferType","cached","bytesPerElement","createBuffer","BYTES_PER_ELEMENT","updateBuffer","bufferSubData","subarray","PlaneGeometry","width_half","height_half","segment_width","segment_height","ShaderChunk","alphamap_fragment","alphamap_pars_fragment","alphatest_fragment","alphatest_pars_fragment","aomap_fragment","aomap_pars_fragment","begin_vertex","beginnormal_vertex","bsdfs","bumpmap_pars_fragment","clipping_planes_fragment","clipping_planes_pars_fragment","clipping_planes_pars_vertex","clipping_planes_vertex","color_fragment","color_pars_fragment","color_pars_vertex","color_vertex","common","cube_uv_reflection_fragment","defaultnormal_vertex","displacementmap_pars_vertex","displacementmap_vertex","emissivemap_fragment","emissivemap_pars_fragment","encodings_fragment","encodings_pars_fragment","envmap_fragment","envmap_common_pars_fragment","envmap_pars_fragment","envmap_pars_vertex","envmap_physical_pars_fragment","envmap_vertex","fog_vertex","fog_pars_vertex","fog_fragment","fog_pars_fragment","gradientmap_pars_fragment","lightmap_fragment","lightmap_pars_fragment","lights_lambert_vertex","lights_pars_begin","lights_toon_fragment","lights_toon_pars_fragment","lights_phong_fragment","lights_phong_pars_fragment","lights_physical_fragment","lights_physical_pars_fragment","lights_fragment_begin","lights_fragment_maps","lights_fragment_end","logdepthbuf_fragment","logdepthbuf_pars_fragment","logdepthbuf_pars_vertex","logdepthbuf_vertex","map_fragment","map_pars_fragment","map_particle_fragment","map_particle_pars_fragment","metalnessmap_fragment","metalnessmap_pars_fragment","morphnormal_vertex","morphtarget_pars_vertex","morphtarget_vertex","normal_fragment_begin","normal_fragment_maps","normal_pars_fragment","normal_pars_vertex","normal_vertex","normalmap_pars_fragment","clearcoat_normal_fragment_begin","clearcoat_normal_fragment_maps","clearcoat_pars_fragment","output_fragment","packing","premultiplied_alpha_fragment","project_vertex","dithering_fragment","dithering_pars_fragment","roughnessmap_fragment","roughnessmap_pars_fragment","shadowmap_pars_fragment","shadowmap_pars_vertex","shadowmap_vertex","shadowmask_pars_fragment","skinbase_vertex","skinning_pars_vertex","skinning_vertex","skinnormal_vertex","specularmap_fragment","specularmap_pars_fragment","tonemapping_fragment","tonemapping_pars_fragment","transmission_fragment","transmission_pars_fragment","uv_pars_fragment","uv_pars_vertex","uv_vertex","uv2_pars_fragment","uv2_pars_vertex","uv2_vertex","worldpos_vertex","background_vert","background_frag","cube_vert","cube_frag","depth_vert","depth_frag","distanceRGBA_vert","distanceRGBA_frag","equirect_vert","equirect_frag","linedashed_vert","linedashed_frag","meshbasic_vert","meshbasic_frag","meshlambert_vert","meshlambert_frag","meshmatcap_vert","meshmatcap_frag","meshnormal_vert","meshnormal_frag","meshphong_vert","meshphong_frag","meshphysical_vert","meshphysical_frag","meshtoon_vert","meshtoon_frag","points_vert","points_frag","shadow_vert","shadow_frag","sprite_vert","sprite_frag","UniformsLib","diffuse","uvTransform","uv2Transform","specularmap","envmap","flipEnvMap","ior","maxMipLevel","aomap","lightmap","emissivemap","bumpmap","normalmap","displacementmap","roughnessmap","metalnessmap","gradientmap","fogDensity","fogNear","fogFar","fogColor","ambientLightColor","lightProbe","directionalLights","properties","directionalLightShadows","shadowBias","shadowNormalBias","shadowRadius","shadowMapSize","directionalShadowMap","directionalShadowMatrix","spotLights","coneCos","penumbraCos","decay","spotLightShadows","spotShadowMap","spotShadowMatrix","pointLights","pointLightShadows","shadowCameraNear","shadowCameraFar","pointShadowMap","pointShadowMatrix","hemisphereLights","skyColor","groundColor","rectAreaLights","ltc_1","ltc_2","ShaderLib","basic","lambert","phong","standard","toon","dashed","totalSize","t2D","cube","equirect","distanceRGBA","referencePosition","nearDistance","farDistance","shadow","WebGLBackground","cubemaps","objects","clearColor","planeMesh","boxMesh","clearAlpha","currentBackground","currentBackgroundVersion","currentTonemapping","setClear","getClearColor","setClearColor","getClearAlpha","setClearAlpha","renderList","forceClear","environmentBlendMode","autoClear","autoClearColor","autoClearDepth","autoClearStencil","toneMapping","WebGLBindingStates","maxVertexAttributes","extension","vaoAvailable","bindingStates","defaultState","createBindingState","bindVertexArrayObject","vao","bindVertexArrayOES","deleteVertexArrayObject","deleteVertexArrayOES","newAttributes","enabledAttributes","attributeDivisors","initAttributes","enableAttribute","enableAttributeAndDivisor","meshPerAttribute","enableVertexAttribArray","disableUnusedAttributes","disableVertexAttribArray","vertexAttribPointer","resetDefaultState","updateBuffers","getBindingState","programMap","stateMap","createVertexArrayObject","createVertexArrayOES","cachedAttributes","geometryAttributes","attributesNum","cachedAttribute","geometryAttribute","saveCache","setupVertexAttributes","isInstancedBufferGeometry","programAttributes","getAttributes","materialDefaultAttributeValues","programAttribute","isInstancedInterleavedBuffer","locationSize","_maxInstanceCount","isInstancedBufferAttribute","geometryId","releaseStatesOfGeometry","releaseStatesOfProgram","WebGLBufferRenderer","renderInstances","primcount","methodName","WebGLCapabilities","maxAnisotropy","getMaxPrecision","getShaderPrecisionFormat","WebGL2RenderingContext","WebGL2ComputeRenderingContext","maxPrecision","has","logarithmicDepthBuffer","maxTextures","maxVertexTextures","maxTextureSize","maxCubemapSize","maxAttributes","maxVertexUniforms","maxVaryings","maxFragmentUniforms","vertexTextures","floatFragmentTextures","getMaxAnisotropy","floatVertexTextures","maxSamples","WebGLClipping","globalState","numGlobalPlanes","localClippingEnabled","renderingShadows","viewNormalMatrix","uniform","resetGlobalState","numPlanes","numIntersection","projectPlanes","skipTransform","nPlanes","dstArray","flatSize","i4","enableLocalClipping","beginShadows","endShadows","useCache","materialProperties","nGlobal","lGlobal","clippingState","WebGLCubeMaps","mapTextureMapping","onTextureDispose","cubemap","physical","transmissionSamplerSize","transmissionSamplerMap","OrthographicCamera","scaleW","scaleH","RawShaderMaterial","isRawShaderMaterial","SIZE_MAX","EXTRA_LOD_SIGMA","TOTAL_LODS","LOD_MAX","ENCODINGS","_flatCamera","_lodPlanes","_sizeLods","_sigmas","_createPlanes","_clearColor","_oldTarget","PHI","INV_PHI","_axisDirections","PMREMGenerator","_pingPongRenderTarget","_blurMaterial","_getBlurShader","weights","poleAxis","_getCommonVertexShader","_getEncodings","_equirectShader","_cubemapShader","_compileMaterial","fromScene","sigma","cubeUVRenderTarget","_allocateTargets","_sceneToCubeUV","_blur","_applyPMREM","_cleanup","fromEquirectangular","equirectangular","_fromTexture","fromCubemap","compileCubemapShader","_getCubemapShader","compileEquirectangularShader","_getEquirectShader","outputTarget","_setViewport","_textureToCubeUV","_isLDR","_createRenderTarget","tmpMesh","compile","cubeCamera","upSign","forwardSign","originalAutoClear","outputEncoding","backgroundMaterial","backgroundBox","useSolidColor","col","_setEncoding","lodIn","lodOut","pingPongRenderTarget","_halfBlur","targetIn","targetOut","sigmaRadians","blurMaterial","blurMesh","blurUniforms","pixels","radiansPerPixel","sigmaPixels","sum","weight","outputSize","lod","sizeLod","texelSize","cubeFaces","positionSize","uvSize","faceIndexSize","coordinates","fill","WebGLCubeUVMaps","cubeUVmaps","pmremGenerator","cubemapUV","isEquirectMap","isCubeMap","isCubeTextureComplete","WebGLExtensions","WebGLGeometries","wireframeAttributes","onGeometryDispose","updateWireframeAttribute","geometryIndex","geometryPosition","previousAttribute","getWireframeAttribute","currentAttribute","WebGLIndexedBufferRenderer","WebGLInfo","calls","autoReset","instanceCount","DataTexture2DArray","numericalSort","absNumericalSort","denormalize","morph","WebGLMorphtargets","influencesList","morphTextures","workInfluences","objectInfluences","numberOfMorphTargets","entry","hasMorphNormals","morphNormals","numberOfVertexData","vertexDataStride","morphTarget","morphNormal","morphInfluencesSum","morphBaseInfluence","getUniforms","influences","MAX_SAFE_INTEGER","WebGLObjects","updateMap","onInstancedMeshDispose","instancedMesh","buffergeometry","isDataTexture2DArray","DataTexture3D","isDataTexture3D","emptyTexture","emptyTexture2dArray","emptyTexture3d","emptyCubeTexture","arrayCacheF32","arrayCacheI32","mat4array","mat3array","mat2array","flatten","nBlocks","blockSize","firstElem","arraysEqual","allocTexUnits","allocateTextureUnit","setValueV1f","addr","setValueV2f","setValueV3f","setValueV4f","setValueM2","setValueM3","setValueM4","setValueV1i","setValueV2i","setValueV3i","setValueV4i","setValueV1ui","setValueV2ui","setValueV3ui","setValueV4ui","setValueT1","unit","safeSetTexture2D","setValueT3D1","setTexture3D","setValueT6","safeSetTextureCube","setValueT2DArray1","setTexture2DArray","setValueV1fArray","setValueV2fArray","setValueV3fArray","setValueV4fArray","setValueM2Array","setValueM3Array","setValueM4Array","setValueV1iArray","setValueV2iArray","setValueV3iArray","setValueV4iArray","setValueV1uiArray","setValueV2uiArray","setValueV3uiArray","setValueV4uiArray","setValueT1Array","units","setValueT6Array","SingleUniform","activeInfo","getSingularSetter","PureArrayUniform","getPureArraySetter","StructuredUniform","seq","updateCache","RePathPart","addUniform","uniformObject","parseUniform","pathLength","matchEnd","idIsIndex","subscript","WebGLUniforms","WebGLShader","setOptional","upload","seqWithValue","programIdCount","getEncodingComponents","getShaderErrors","errors","addLineNumbers","getTexelDecodingFunction","functionName","getTexelEncodingFunction","getToneMappingFunction","toneMappingName","filterEmptyLine","replaceLightNums","numDirLights","numSpotLights","numRectAreaLights","numPointLights","numHemiLights","numDirLightShadows","numSpotLightShadows","numPointLightShadows","replaceClippingPlaneNums","numClippingPlanes","numClipIntersection","includePattern","resolveIncludes","includeReplacer","deprecatedUnrollLoopPattern","unrollLoopPattern","unrollLoops","loopReplacer","deprecatedLoopReplacer","snippet","generatePrecision","precisionstring","WebGLProgram","cacheKey","shadowMapTypeDefine","generateShadowMapTypeDefine","shadowMapType","envMapTypeDefine","generateEnvMapTypeDefine","envMapMode","envMapModeDefine","generateEnvMapModeDefine","envMapBlendingDefine","generateEnvMapBlendingDefine","gammaFactorDefine","customExtensions","generateExtensions","extensionDerivatives","envMapCubeUV","tangentSpaceNormalMap","shaderID","extensionFragDepth","rendererExtensionFragDepth","extensionDrawBuffers","rendererExtensionDrawBuffers","extensionShaderTextureLOD","rendererExtensionShaderTextureLod","customDefines","generateDefines","chunks","prefixVertex","prefixFragment","versionString","shaderName","instancing","instancingColor","supportsVertexTextures","maxBones","useFog","fogExp2","objectSpaceNormalMap","vertexTangents","vertexAlphas","vertexUvs","uvsVertexOnly","skinning","useVertexTexture","morphTargetsCount","doubleSided","flipSided","shadowMapEnabled","physicallyCorrectLights","mapEncoding","matcapEncoding","envMapEncoding","emissiveMapEncoding","specularTintMapEncoding","lightMapEncoding","depthPacking","fragmentGlsl","glVertexShader","glFragmentShader","bindAttribLocation","debug","checkShaderErrors","programLog","vertexLog","fragmentLog","runnable","haveDiagnostics","vertexErrors","fragmentErrors","diagnostics","prefix","cachedUniforms","fetchAttributeLocations","deleteProgram","usedTimes","WebGLPrograms","cubeuvmaps","shaderIDs","MeshDepthMaterial","MeshDistanceMaterial","MeshNormalMaterial","MeshLambertMaterial","MeshPhongMaterial","MeshToonMaterial","MeshStandardMaterial","MeshPhysicalMaterial","MeshMatcapMaterial","LineBasicMaterial","LineDashedMaterial","PointsMaterial","ShadowMaterial","SpriteMaterial","parameterNames","getTextureEncodingFromMap","getParameters","shadows","isMeshStandardMaterial","getMaxBones","bones","nVertexUniforms","nVertexMatrices","useAlphaTest","useClearcoat","isFogExp2","directional","spot","rectArea","hemi","shadowMap","getProgramCacheKey","acquireProgram","pl","preexistingProgram","releaseProgram","WebGLProperties","painterSortStable","groupOrder","reversePainterSortStable","WebGLRenderList","renderItems","renderItemsIndex","opaque","transmissive","defaultProgram","getNextRenderItem","renderItem","finish","customOpaqueSort","customTransparentSort","WebGLRenderLists","lists","renderCallDepth","list","UniformsCache","halfWidth","halfHeight","nextVersion","shadowCastingLightsFirst","lightA","lightB","WebGLLights","shadowCache","ShadowUniformsCache","hash","directionalLength","pointLength","spotLength","rectAreaLength","hemiLength","numDirectionalShadows","numPointShadows","numSpotShadows","ambient","probe","directionalShadow","spotShadow","rectAreaLTC1","rectAreaLTC2","pointShadow","vector3","matrix42","scaleFactor","intensity","isAmbientLight","isLightProbe","sh","coefficients","isDirectionalLight","shadowUniforms","bias","normalBias","mapSize","isSpotLight","penumbra","isRectAreaLight","isPointLight","isHemisphereLight","LTC_FLOAT_1","LTC_FLOAT_2","LTC_HALF_1","LTC_HALF_2","setupView","WebGLRenderState","lightsArray","shadowsArray","setupLights","setupLightsView","pushLight","pushShadow","shadowLight","WebGLRenderStates","renderStates","renderState","isMeshDepthMaterial","isMeshDistanceMaterial","WebGLShadowMap","_objects","_capabilities","_frustum","_shadowMapSize","_viewportSize","_viewport","_depthMaterial","_distanceMaterial","_materialCache","_maxTextureSize","shadowMaterialVertical","shadow_pass","resolution","shadowMaterialHorizontal","HORIZONTAL_PASS","fullScreenTri","fullScreenMesh","VSMPass","blurSamples","mapPass","renderBufferDirect","getDepthMaterial","customMaterial","customDistanceMaterial","customDepthMaterial","keyA","keyB","materialsForVariant","cachedMaterial","renderObject","shadowCamera","kl","depthMaterial","autoUpdate","activeCubeFace","getActiveCubeFace","activeMipmapLevel","getActiveMipmapLevel","_state","setBlending","setTest","setScissorTest","shadowFrameExtents","getFrameExtents","isPointLightShadow","viewportCount","getViewportCount","vp","getViewport","updateMatrices","getFrustum","WebGLState","colorBuffer","ColorBuffer","locked","currentColorMask","currentColorClear","setMask","colorMask","setLocked","lock","DepthBuffer","currentDepthMask","currentDepthFunc","currentDepthClear","depthMask","setFunc","clearDepth","StencilBuffer","currentStencilMask","currentStencilFunc","currentStencilRef","currentStencilFuncMask","currentStencilFail","currentStencilZFail","currentStencilZPass","currentStencilClear","stencilTest","stencilMask","setOp","stencilOp","clearStencil","enabledCapabilities","xrFramebuffer","currentBoundFramebuffers","currentProgram","currentBlendingEnabled","currentBlending","currentBlendEquation","currentBlendSrc","currentBlendDst","currentBlendEquationAlpha","currentBlendSrcAlpha","currentBlendDstAlpha","currentPremultipledAlpha","currentFlipSided","currentCullFace","currentLineWidth","currentPolygonOffsetFactor","currentPolygonOffsetUnits","lineWidthAvailable","glVersion","currentTextureSlot","currentBoundTextures","scissorParam","viewportParam","currentScissor","currentViewport","createTexture","bindTexture","texImage2D","emptyTextures","setFlipSided","setCullFace","equationToGL","factorToGL","blendEquationSeparate","frontFace","cullFace","setPolygonOffset","factor","webglSlot","framebuffer","bindXRFramebuffer","useProgram","setMaterial","frontFaceCW","setLineWidth","lineWidth","webglType","webglTexture","boundTexture","unbindTexture","compressedTexImage2D","WebGLTextures","_gl","utils","_videoTextures","useOffscreenCanvas","createCanvas","resizeImage","needsPowerOfTwo","needsNewCanvas","maxSize","isPowerOfTwo$1","textureNeedsGenerateMipmaps","supportsMips","generateMipmap","__maxMipLevel","log2","getInternalFormat","internalFormatName","glFormat","glType","filterFallback","deallocateTexture","textureProperties","__webglInit","deleteTexture","__webglTexture","isVideoTexture","onRenderTargetDispose","deallocateRenderTarget","renderTargetProperties","deleteFramebuffer","__webglFramebuffer","__webglDepthbuffer","__webglMultisampledFramebuffer","__webglColorRenderbuffer","__webglDepthRenderbuffer","attachmentProperties","textureUnits","setTexture2D","slot","updateVideoTexture","__version","complete","uploadTexture","setTextureCube","uploadCubeTexture","initTexture","pixelStorei","isCompressedTexture","cubeImage","convert","glInternalFormat","setTextureParameters","mipmap","mipmapImage","wrappingToGL","filterToGL","__currentAnisotropy","textureNeedsPowerOfTwo","isDepthTexture","setupFrameBufferTexture","attachment","textureTarget","setupRenderBufferStorage","renderbuffer","isMultisample","getRenderTargetSamples","setupDepthRenderbuffer","isCube","setupDepthTexture","webglDepthTexture","warnedTexture2D","warnedTextureCube","textureUnit","resetTextureUnits","setupRenderTarget","isMultipleRenderTargets","isRenderTarget3D","glTextureType","updateRenderTargetMipmap","updateMultisampleRenderTarget","WebGLUtils","ArrayCamera","cameras","isArrayCamera","Group","isGroup","_moveEvent","WebXRController","_targetRay","_grip","_hand","getHandSpace","joints","inputState","pinching","getTargetRaySpace","hasLinearVelocity","linearVelocity","hasAngularVelocity","angularVelocity","getGripSpace","inputSource","referenceSpace","inputPose","gripPose","handPose","targetRay","grip","hand","visibilityState","getPose","targetRaySpace","inputjoint","jointPose","getJointPose","jointName","joint","jointRadius","indexTip","thumbTip","distanceToPinch","handedness","gripSpace","WebXRManager","framebufferScaleFactor","referenceSpaceType","pose","glBinding","glFramebuffer","glProjLayer","glBaseLayer","glMultisampledFramebuffer","glColorRenderbuffer","glDepthRenderbuffer","xrFrame","depthStyle","clearStyle","inputSourcesMap","Map","cameraL","cameraR","cameraVR","_currentDepthNear","_currentDepthFar","onSessionEvent","onSessionEnd","isPresenting","onInputSourcesChange","inputSources","removed","added","cameraAutoUpdate","getController","getControllerGrip","getHand","setFramebufferScaleFactor","setReferenceSpaceType","getReferenceSpace","getBaseLayer","getBinding","getFrame","async","xrCompatible","makeXRCompatible","layerInit","antialias","XRWebGLLayer","updateRenderState","baseLayer","WebGLRenderingContext","depthFormat","projectionlayerInit","XRWebGLBinding","createProjectionLayer","textureWidth","textureHeight","requestReferenceSpace","cameraLPos","cameraRPos","updateCamera","depthNear","depthFar","setProjectionFromUnion","ipd","projL","projR","topFov","bottomFov","leftFov","rightFov","zOffset","xOffset","near2","far2","left2","right2","top2","bottom2","getCamera","getFoveation","fixedFoveation","setFoveation","foveation","onAnimationFrameCallback","getViewerPose","views","cameraVRNeedsUpdate","glSubImage","getViewSubImage","depthStencilTexture","colorTexture","WebGLMaterials","refreshUniformsCommon","uvScaleMap","uv2ScaleMap","refreshUniformsStandard","refreshFogUniforms","isFog","density","refreshMaterialUniforms","pixelRatio","transmissionRenderTarget","isMeshLambertMaterial","refreshUniformsLambert","isMeshToonMaterial","refreshUniformsToon","isMeshPhongMaterial","refreshUniformsPhong","isMeshPhysicalMaterial","refreshUniformsPhysical","isMeshMatcapMaterial","refreshUniformsMatcap","refreshUniformsDepth","refreshUniformsDistance","isMeshNormalMaterial","refreshUniformsNormal","isLineBasicMaterial","refreshUniformsLine","isLineDashedMaterial","refreshUniformsDash","isPointsMaterial","refreshUniformsPoints","isSpriteMaterial","refreshUniformsSprites","isShadowMaterial","WebGLRenderer","createCanvasElement","_context","_alpha","_depth","_stencil","_antialias","_premultipliedAlpha","_preserveDrawingBuffer","preserveDrawingBuffer","_powerPreference","powerPreference","_failIfMajorPerformanceCaveat","failIfMajorPerformanceCaveat","currentRenderList","currentRenderState","renderListStack","renderStateStack","sortObjects","toneMappingExposure","_isContextLost","_currentActiveCubeFace","_currentActiveMipmapLevel","_currentRenderTarget","_currentMaterialId","_currentCamera","_currentViewport","_currentScissor","_currentScissorTest","_pixelRatio","_opaqueSort","_transparentSort","_scissor","_scissorTest","_currentDrawBuffers","_clippingEnabled","_localClippingEnabled","_transmissionRenderTarget","_projScreenMatrix","_vector3","_emptyScene","overrideMaterial","getTargetPixelRatio","programCache","renderLists","morphtargets","bufferRenderer","indexedBufferRenderer","contextNames","contextName","onContextLost","onContextRestore","isWebGL1Renderer","initGLContext","infoAutoReset","shadowMapAutoUpdate","shadowMapNeedsUpdate","onMaterialDispose","deallocateMaterial","releaseMaterialProgramReferences","forceContextLoss","loseContext","forceContextRestore","restoreContext","getPixelRatio","setPixelRatio","updateStyle","setViewport","getDrawingBufferSize","setDrawingBufferSize","getCurrentViewport","getScissor","setScissor","getScissorTest","boolean","setOpaqueSort","setTransparentSort","bits","onXRSessionStart","onXRSessionEnd","renderBufferImmediate","hasPositions","hasNormals","hasUvs","hasColors","positionArray","normalArray","uvArray","colorArray","setProgram","rangeFactor","dataCount","rangeStart","drawStart","drawEnd","drawCount","isLineSegments","isLineLoop","isSprite","getProgram","projectObject","isLOD","isImmediateRenderObject","renderScene","opaqueObjects","transmissiveObjects","transparentObjects","renderTransmissionPass","needsAntialias","currentToneMapping","renderObjects","renderObjectImmediate","lightsStateVersion","programCacheKey","updateCommonMaterialProperties","needsLights","materialNeedsLights","progUniforms","uniformsList","needsProgramChange","refreshProgram","refreshMaterial","refreshLights","p_uniforms","m_uniforms","uCamPos","cameraPosition","boneTexture","computeBoneTexture","boneTextureSize","markUniformsLightsNeedsUpdate","camera2","drawBuffersWEBGL","layer","readRenderTargetPixels","activeCubeFaceIndex","textureFormat","halfFloatSupportedByExt","copyFramebufferToTexture","levelScale","copyTexImage2D","copyTextureToTexture","srcTexture","dstTexture","texSubImage2D","compressedTexSubImage2D","copyTextureToTexture3D","sourceBox","glTarget","unpackRowLen","unpackImageHeight","unpackSkipPixels","unpackSkipRows","unpackSkipImages","resetState","__THREE_DEVTOOLS__","CustomEvent","WebGL1Renderer","FogExp2","Fog","InterleavedBuffer","arrayBuffers","_uuid","ib","isInterleavedBuffer","_vector$6","InterleavedBufferAttribute","interleavedBuffer","interleavedBuffers","_geometry","_intersectPoint","_worldScale","_mvPosition","_alignedPosition","_rotatedPosition","_viewWorldMatrix","_vA","_vB","_vC","_uvA","_uvB","_uvC","Sprite","float32Array","transformVertex","vertexPosition","mvPosition","_v1$2","_v2$1","LOD","_currentLevel","levels","addLevel","getCurrentLevel","getObjectForDistance","_basePosition","_skinIndex","_skinWeight","_vector$5","_matrix","SkinnedMesh","bindMatrixInverse","calculateInverses","normalizeSkinWeights","skinWeight","skinIndex","boneIndex","boneInverses","Bone","isBone","DataTexture","_offsetMatrix","_identityMatrix","Skeleton","boneMatrices","bone","getBoneByName","boneInverse","InstancedBufferAttribute","_instanceLocalMatrix","_instanceWorldMatrix","_instanceIntersects","_mesh","InstancedMesh","getColorAt","getMatrixAt","raycastTimes","instanceId","setColorAt","setMatrixAt","linecap","linejoin","_start$1","_end$1","_inverseMatrix$1","_ray$1","_sphere$1","Line","computeLineDistances","lineDistances","localThreshold","localThresholdSq","vStart","vEnd","interSegment","interRay","_start","_end","LineSegments","LineLoop","_inverseMatrix","_ray","_sphere","_position$2","Points","testPoint","rayPointDistanceSq","intersectPoint","distanceToRay","VideoTexture","video","requestVideoFrameCallback","updateVideo","HAVE_CURRENT_DATA","CompressedTexture","CanvasTexture","isCanvasTexture","DepthTexture","CircleGeometry","segments","thetaStart","thetaLength","segment","CylinderGeometry","radiusTop","radiusBottom","radialSegments","openEnded","indexArray","generateCap","centerIndexStart","centerIndexEnd","cosTheta","sinTheta","generateTorso","slope","indexRow","ConeGeometry","PolyhedronGeometry","uvBuffer","subdivideFace","cols","aj","bj","rows","pushVertex","getVertexByIndex","correctUV","azimuth","subdivide","applyRadius","generateUVs","correctUVs","centroid","azi","correctSeam","details","DodecahedronGeometry","_v0","_v1$1","_normal","_triangle","EdgesGeometry","thresholdAngle","precisionPoints","thresholdDot","indexAttr","positionAttr","indexCount","indexArr","vertKeys","hashes","edgeData","jNext","vecHash0","vecHash1","reverseHash","index0","Curve","arcLengthDivisions","getPoint","getPointAt","optionalTarget","getUtoTmapping","getPoints","divisions","getSpacedPoints","lengths","getLengths","cacheArcLengths","current","updateArcLengths","arcLengths","targetArcLength","comparison","lengthBefore","getTangent","t2","pt1","pt2","getTangentAt","computeFrenetFrames","binormals","mat","tz","EllipseCurve","aX","aY","xRadius","yRadius","aStartAngle","aEndAngle","aClockwise","aRotation","twoPi","deltaAngle","samePoints","isEllipseCurve","ArcCurve","aRadius","CubicPoly","c0","initCatmullRom","x3","tension","initNonuniformCatmullRom","dt0","dt1","dt2","calc","isArcCurve","px","py","pz","CatmullRomCurve3","curveType","intPoint","CatmullRom","QuadraticBezier","QuadraticBezierP0","QuadraticBezierP1","QuadraticBezierP2","CubicBezier","CubicBezierP0","CubicBezierP1","CubicBezierP2","CubicBezierP3","isCatmullRomCurve3","CubicBezierCurve","v3","isCubicBezierCurve","CubicBezierCurve3","isCubicBezierCurve3","LineCurve","isLineCurve","LineCurve3","isLineCurve3","QuadraticBezierCurve","isQuadraticBezierCurve","QuadraticBezierCurve3","isQuadraticBezierCurve3","SplineCurve","isSplineCurve","Curves","CurvePath","curves","autoClose","curve","closePath","startPoint","endPoint","curveLengths","getCurveLengths","segmentLength","lens","cacheLengths","sums","pts","Path","currentPoint","lineTo","quadraticCurveTo","aCPx","aCPy","bezierCurveTo","aCP1x","aCP1y","aCP2x","aCP2y","splineThru","npts","arc","absarc","absellipse","ellipse","firstPoint","lastPoint","Shape","holes","getPointsHoles","holesPts","extractPoints","hole","Earcut","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","prev","invSize","eliminateHoles","queue","steiner","getLeftmost","compareX","eliminateHole","filterPoints","earcutLinked","clockwise","signedArea","insertNode","again","area","ear","pass","indexCurve","zOrder","prevZ","nextZ","sortLinked","tail","numMerges","pSize","qSize","inSize","isEarHashed","isEar","cureLocalIntersections","splitEarcut","pointInTriangle","minTX","minTY","maxTX","maxTY","locallyInside","isValidDiagonal","splitPolygon","findHoleBridge","hx","hy","mx","my","tanMin","sectorContainsSector","leftmost","intersectsPolygon","middleInside","q1","q2","o3","o4","onSegment","num","Node","bp","ShapeUtils","contour","faces","removeDupEndPts","addContour","holeIndex","ExtrudeGeometry","verticesArray","addShape","curveSegments","bevelEnabled","bevelThickness","bevelSize","bevelOffset","bevelSegments","extrudePath","uvgen","UVGenerator","WorldUVGenerator","amount","extrudePts","splineTube","binormal","position2","extrudeByPath","shapePoints","isClockWise","hl","ahole","triangulateShape","scalePt2","vlen","flen","getBevelVec","inPt","inPrev","inNext","v_trans_x","v_trans_y","shrink_by","v_prev_x","v_prev_y","v_next_x","v_next_y","v_prev_lensq","collinear0","v_prev_len","v_next_len","ptPrevShift_x","ptPrevShift_y","sf","v_trans_lensq","direction_eq","contourMovements","holesMovements","oneHoleMovements","verticesMovements","bs","sidewalls","layeroffset","sl","slen1","slen2","f4","f3","addVertex","nextIndex","generateTopUV","addUV","generateSideWallUV","vector2","buildLidFaces","buildSideFaces","toJSON$1","geometryShapes","indexA","indexB","indexC","a_x","a_y","b_x","b_y","c_x","c_y","indexD","a_z","b_z","c_z","d_x","d_y","d_z","IcosahedronGeometry","LatheGeometry","phiStart","phiLength","inverseSegments","n1","OctahedronGeometry","RingGeometry","innerRadius","outerRadius","thetaSegments","phiSegments","radiusStep","thetaSegmentLevel","ShapeGeometry","indexOffset","shapeVertices","shapeHoles","shapeHole","SphereGeometry","thetaEnd","grid","verticesRow","uOffset","TetrahedronGeometry","TorusGeometry","tube","tubularSegments","TorusKnotGeometry","P1","P2","calculatePositionOnCurve","cu","su","quOverP","cs","TubeGeometry","frames","generateSegment","generateBufferData","generateIndices","WireframeGeometry","edges","Set","ol","isUniqueEdge","hash1","hash2","Geometries","BoxBufferGeometry","CircleBufferGeometry","ConeBufferGeometry","CylinderBufferGeometry","DodecahedronBufferGeometry","ExtrudeBufferGeometry","IcosahedronBufferGeometry","LatheBufferGeometry","OctahedronBufferGeometry","PlaneBufferGeometry","PolyhedronBufferGeometry","RingBufferGeometry","ShapeBufferGeometry","SphereBufferGeometry","TetrahedronBufferGeometry","TorusBufferGeometry","TorusKnotBufferGeometry","TubeBufferGeometry","_sheen","_clearcoat","_transmission","Materials","AnimationUtils","arraySlice","isTypedArray","convertArray","forceClone","isView","DataView","getKeyframeOrder","compareTime","sortedArray","nValues","srcOffset","flattenJSON","jsonKeys","valuePropertyName","subclip","sourceClip","startFrame","endFrame","fps","clip","tracks","track","valueSize","getValueSize","minStartTime","resetDuration","makeClipAdditive","targetClip","referenceFrame","referenceClip","numTracks","referenceTime","referenceTrack","referenceTrackType","ValueTypeName","targetTrack","referenceOffset","referenceValueSize","createInterpolant","isInterpolantFactoryMethodGLTFCubicSpline","targetOffset","targetValueSize","referenceValue","startIndex","endIndex","interpolant","evaluate","resultBuffer","numTimes","valueStart","multiplyQuaternionsFlat","valueEnd","blendMode","Interpolant","parameterPositions","sampleValues","sampleSize","_cachedIndex","settings","DefaultSettings_","pp","validate_interval","seek","linear_scan","forward_scan","giveUpAt","afterEnd_","t1global","beforeStart_","intervalChanged_","interpolate_","getSettings_","copySampleValue_","CubicInterpolant","_weightPrev","_offsetPrev","_weightNext","_offsetNext","endingStart","endingEnd","iPrev","iNext","tPrev","tNext","halfDt","o0","oP","oN","wP","wN","ppp","sP","sN","LinearInterpolant","offset1","offset0","weight1","weight0","DiscreteInterpolant","KeyframeTrack","interpolation","TimeBufferType","ValueBufferType","setInterpolation","DefaultInterpolation","trackType","getInterpolation","InterpolantFactoryMethodDiscrete","InterpolantFactoryMethodLinear","InterpolantFactoryMethodSmooth","factoryMethod","timeOffset","timeScale","nKeys","validate","valid","prevTime","currTime","optimize","smoothInterpolation","writeIndex","keep","offsetP","offsetN","readOffset","writeOffset","TypedKeyframeTrack","BooleanKeyframeTrack","ColorKeyframeTrack","NumberKeyframeTrack","QuaternionLinearInterpolant","slerpFlat","QuaternionKeyframeTrack","StringKeyframeTrack","VectorKeyframeTrack","AnimationClip","jsonTracks","frameTime","parseKeyframeTrack","clipTracks","morphTargetSequence","noLoop","numMorphTargets","objectOrClipArray","clipArray","animationToMorphTargets","pattern","parts","animationMorphTargets","clips","CreateFromMorphTargetSequence","addNonemptyTrack","trackName","animationKeys","propertyName","destTracks","clipName","hierarchyTracks","hierarchy","morphTargetNames","morphTargetName","animationKey","boneName","getTrackTypeForValueTypeName","Cache","LoadingManager","onLoad","onProgress","urlModifier","isLoading","itemsLoaded","itemsTotal","handlers","onStart","itemStart","itemEnd","itemError","resolveURL","setURLModifier","addHandler","removeHandler","getHandler","DefaultLoadingManager","Loader","manager","crossOrigin","withCredentials","resourcePath","requestHeader","loadAsync","resolve","reject","setCrossOrigin","setWithCredentials","setPath","setResourcePath","setRequestHeader","loading","FileLoader","dataUriRegexResult","request","mimeType","isBase64","parser","DOMParser","parseFromString","header","setResponseType","setMimeType","AnimationLoader","CompressedTextureLoader","loaded","loadTexture","texDatas","mipmapCount","isCubemap","ImageLoader","onImageLoad","onImageError","CubeTextureLoader","urls","DataTextureLoader","texData","TextureLoader","Light","HemisphereLight","_projScreenMatrix$1","_lightPositionWorld$1","_lookTarget$1","LightShadow","_frameExtents","_viewportCount","_viewports","shadowMatrix","viewportIndex","SpotLightShadow","isSpotLightShadow","SpotLight","power","_lightPositionWorld","_lookTarget","PointLightShadow","_cubeDirections","_cubeUps","PointLight","DirectionalLightShadow","isDirectionalLightShadow","DirectionalLight","AmbientLight","RectAreaLight","SphericalHarmonics3","zero","getAt","getIrradianceAt","addScaledSH","shBasis","isSphericalHarmonics3","LightProbe","MaterialLoader","getTexture","shading","setTextures","LoaderUtils","TextDecoder","decode","InstancedBufferGeometry","BufferGeometryLoader","interleavedBufferMap","arrayBufferMap","getInterleavedBuffer","getArrayBuffer","typedArray","bufferAttribute","drawcalls","offsets","ObjectLoader","extractUrlBase","parseAsync","parseAnimations","parseShapes","parseGeometries","parseImages","parseTextures","parseMaterials","parseObject","parseSkeletons","bindSkeletons","hasImages","parseImagesAsync","bufferGeometryLoader","deserializeImage","loadImage","deserializedImage","currentUrl","parseConstant","TEXTURE_MAPPING","TEXTURE_WRAPPING","TEXTURE_FILTER","getGeometry","getMaterial","objectAnimations","setTexturePath","ImageBitmapLoader","createImageBitmap","fetch","fetchOptions","credentials","headers","res","blob","colorSpaceConversion","imageBitmap","catch","isImageBitmapLoader","AudioContext","webkitAudioContext","AudioLoader","bufferCopy","decodeAudioData","audioBuffer","HemisphereLightProbe","sky","ground","isHemisphereLightProbe","AmbientLightProbe","isAmbientLightProbe","_eyeRight","_eyeLeft","StereoCamera","eyeSep","_cache","eyeSepHalf","eyeSepOnProjection","ymax","xmin","xmax","Clock","autoStart","oldTime","elapsedTime","getElapsedTime","getDelta","newTime","_position$1","_quaternion$1","_scale$1","_orientation$1","AudioListener","gain","createGain","connect","destination","timeDelta","_clock","getInput","removeFilter","getFilter","setFilter","getMasterVolume","setMasterVolume","setTargetAtTime","currentTime","positionX","linearRampToValueAtTime","positionY","positionZ","forwardX","forwardY","forwardZ","upX","upY","upZ","setOrientation","Audio","autoplay","detune","loop","loopStart","loopEnd","playbackRate","isPlaying","hasPlaybackControl","sourceType","_startedAt","_progress","_connected","filters","getOutput","setNodeSource","audioNode","setMediaElementSource","mediaElement","createMediaElementSource","setMediaStreamSource","mediaStream","createMediaStreamSource","setBuffer","createBufferSource","onended","onEnded","setDetune","setPlaybackRate","getFilters","setFilters","getDetune","getPlaybackRate","getLoop","setLoop","setLoopStart","setLoopEnd","getVolume","setVolume","_position","_quaternion","_scale","_orientation","PositionalAudio","panner","createPanner","panningModel","getRefDistance","refDistance","setRefDistance","getRolloffFactor","rolloffFactor","setRolloffFactor","getDistanceModel","distanceModel","setDistanceModel","getMaxDistance","setMaxDistance","setDirectionalCone","coneInnerAngle","coneOuterAngle","coneOuterGain","orientationX","orientationY","orientationZ","AudioAnalyser","audio","fftSize","createAnalyser","frequencyBinCount","getFrequencyData","getByteFrequencyData","getAverageFrequency","PropertyMixer","binding","mixFunction","mixFunctionAdditive","setIdentity","_slerp","_slerpAdditive","_setAdditiveIdentityQuaternion","_workIndex","_select","_setAdditiveIdentityOther","_lerp","_lerpAdditive","_setAdditiveIdentityNumeric","_mixBufferRegion","_mixBufferRegionAdditive","_setIdentity","_origIndex","_addIndex","cumulativeWeight","cumulativeWeightAdditive","useCount","referenceCount","accumulate","accuIndex","currentWeight","mix","accumulateAdditive","weightAdditive","originalValueOffset","saveOriginalState","restoreOriginalState","targetIndex","workOffset","_RESERVED_CHARS_RE","_reservedRe","_wordChar","_wordCharOrDot","_directoryRe","_nodeRe","_objectRe","_propertyRe","_trackRe","_supportedObjectNames","PropertyBinding","rootNode","parsedPath","parseTrackName","findNode","nodeName","_getValue_unbound","_setValue_unbound","isAnimationObjectGroup","Composite","matches","results","objectIndex","propertyIndex","lastDot","searchNodeSubtree","childNode","subTreeNode","_getValue_unavailable","_setValue_unavailable","_getValue_direct","targetObject","_getValue_array","resolvedProperty","_getValue_arrayElement","_getValue_toArray","_setValue_direct","_setValue_direct_setNeedsUpdate","_setValue_direct_setMatrixWorldNeedsUpdate","_setValue_array","dest","_setValue_array_setNeedsUpdate","_setValue_array_setMatrixWorldNeedsUpdate","_setValue_arrayElement","_setValue_arrayElement_setNeedsUpdate","_setValue_arrayElement_setMatrixWorldNeedsUpdate","_setValue_fromArray","_setValue_fromArray_setNeedsUpdate","_setValue_fromArray_setMatrixWorldNeedsUpdate","targetArray","sourceArray","nodeProperty","versioning","Versioning","None","NeedsUpdate","MatrixWorldNeedsUpdate","bindingType","BindingType","Direct","ArrayElement","HasFromToArray","EntireArray","GetterByBindingType","SetterByBindingTypeAndVersioning","targetGroup","optionalParsedPath","_targetGroup","_bindings","subscribe_","firstValidIndex","nCachedObjects_","bindings","AnimationObjectGroup","_indicesByUUID","_paths","_parsedPaths","_bindingsIndicesByPath","inUse","bindingsPerObject","indicesByUUID","parsedPaths","nBindings","knownObject","nObjects","nCachedObjects","firstActiveIndex","lastCachedObject","bindingsForPath","lastCached","lastCachedIndex","firstActiveObject","firstActive","uncache","lastObject","indicesByPath","unsubscribe_","lastBindingsIndex","lastBindings","AnimationAction","mixer","localRoot","_mixer","_clip","_localRoot","nTracks","interpolants","interpolantSettings","_interpolantSettings","_interpolants","_propertyBindings","_cacheIndex","_byClipCacheIndex","_timeScaleInterpolant","_weightInterpolant","_loopCount","_startTime","_effectiveTimeScale","_effectiveWeight","repetitions","paused","clampWhenFinished","zeroSlopeAtStart","zeroSlopeAtEnd","_activateAction","_deactivateAction","stopFading","stopWarping","isRunning","_isActiveAction","isScheduled","startAt","setEffectiveWeight","getEffectiveWeight","fadeIn","_scheduleFading","fadeOut","crossFadeFrom","fadeOutAction","warp","fadeInDuration","fadeOutDuration","startEndRatio","endStartRatio","crossFadeTo","fadeInAction","weightInterpolant","_takeBackControlInterpolant","setEffectiveTimeScale","getEffectiveTimeScale","setDuration","syncWith","halt","startTimeScale","endTimeScale","_lendControlInterpolant","timeScaleInterpolant","getMixer","getClip","_root","_update","deltaTime","timeDirection","_updateWeight","timeRunning","_updateTimeScale","clipTime","_updateTime","propertyMixers","interpolantValue","loopCount","pingPong","_setEndings","handle_stop","loopDelta","atStart","atEnd","weightNow","weightThen","AnimationMixer","_initMemoryManager","_accuIndex","_bindAction","prototypeAction","rootUuid","bindingsByRoot","_bindingsByRootAndName","bindingsByName","_addInactiveBinding","clipUuid","actionsForClip","_actionsByClip","knownActions","_addInactiveAction","_lendBinding","_lendAction","_takeBackBinding","_takeBackAction","_actions","_nActiveActions","_nActiveBindings","_controlInterpolants","_nActiveControlInterpolants","actions","controlInterpolants","actionsByClip","actionByRoot","_removeInactiveAction","lastInactiveAction","cacheIndex","knownActionsForClip","lastKnownAction","byClipCacheIndex","_removeInactiveBindingsForAction","_removeInactiveBinding","prevIndex","lastActiveIndex","firstInactiveAction","firstInactiveIndex","lastActiveAction","bindingByName","propBinding","lastInactiveBinding","firstInactiveBinding","lastActiveBinding","_controlInterpolantsResultBuffer","__cacheIndex","lastActiveInterpolant","clipAction","optionalRoot","clipObject","findByName","existingAction","newAction","stopAllAction","nActions","setTime","timeInSeconds","uncacheClip","actionsToRemove","uncacheRoot","uncacheAction","Uniform","InstancedInterleavedBuffer","GLBufferAttribute","setType","setItemSize","setCount","Raycaster","setFromCamera","coords","intersectObject","ascSort","intersectObjects","other","setFromCartesianCoords","Cylindrical","_vector$4","Box2","isBox2","_startP","_startEnd","Line3","distanceSq","closestPointToPointParameter","clampToLine","startEnd2","ImmediateRenderObject","_vector$3","SpotLightHelper","cone","coneLength","coneWidth","_vector$2","_boneMatrix","_matrixWorldInv","SkeletonHelper","getBoneList","isSkeletonHelper","boneList","PointLightHelper","sphereSize","_vector$1","_color1","_color2","HemisphereLightHelper","GridHelper","PolarGridHelper","radials","circles","_v1","_v2","_v3","DirectionalLightHelper","lightPlane","targetLine","_vector","_camera","CameraHelper","pointMap","colorFrustum","colorCone","colorUp","colorTarget","colorCross","addLine","addPoint","setPoint","_box","BoxHelper","Box3Helper","PlaneHelper","_axis","_lineGeometry","_coneGeometry","ArrowHelper","headLength","headWidth","setDirection","setColor","AxesHelper","setColors","xAxisColor","yAxisColor","zAxisColor","ShapePath","subPaths","currentPath","toShapes","isCCW","noHoles","toShapesNoHoles","inSubpaths","tmpPath","tmpShape","isPointInsidePolygon","inPolygon","polyLen","edgeLowPt","edgeHighPt","edgeDx","edgeDy","perpEdge","solid","holesFirst","betterShapeHoles","newShapes","tmpPoints","tmpHoles","newShapeHoles","mainIdx","ambiguous","toChange","sIdx","sLen","sho","hIdx","ho","hole_unassigned","s2Idx","froms","tos","_floatView","_int32View","DataUtils","LineStrip","LinePieces","NoColors","FaceColors","VertexColors","MeshFaceMaterial","MultiMaterial","isMultiMaterial","PointCloud","Particle","ParticleSystem","PointCloudMaterial","ParticleBasicMaterial","ParticleSystemMaterial","Vertex","DynamicBufferAttribute","Int8Attribute","Uint8Attribute","Uint8ClampedAttribute","Int16Attribute","Uint16Attribute","Int32Attribute","Uint32Attribute","Float32Attribute","Float64Attribute","AxisHelper","BoundingBoxHelper","EdgesHelper","WireframeHelper","XHRLoader","BinaryTextureLoader","WebGLRenderTargetCube","CanvasRenderer","JSONLoader","construct","Handlers","empty","isIntersectionBox","isIntersectionSphere","setFromMatrix","flattenToArrayOffset","multiplyVector3","multiplyVector3Array","applyToBufferAttribute","applyToVector3Array","getInverse","extractPosition","multiplyToArray","multiplyVector4","rotateAxis","crossVector","rotateByAxis","makeFrustum","isIntersectionLine","isIntersectionPlane","barycoordFromPoint","midpoint","prototypenormal","extractAllPoints","extrude","makeGeometry","fromAttribute","distanceToManhattan","lengthManhattan","setEulerFromRotationMatrix","setEulerFromQuaternion","getPositionFromMatrix","getScaleFromMatrix","getColumnFromMatrix","applyProjection","getChildByName","renderDepth","getWorldRotation","applyMatrix","eulerOrder","useQuaternion","setDrawMode","drawMode","initBones","setLens","onlyShadow","shadowCameraFov","shadowCameraLeft","shadowCameraRight","shadowCameraTop","shadowCameraBottom","shadowCameraVisible","shadowDarkness","shadowMapWidth","shadowMapHeight","dynamic","setDynamic","copyIndicesArray","setArray","addIndex","addAttribute","addDrawCall","clearDrawCalls","computeOffsets","getArrays","addShapeList","wrapAround","overdraw","wrapRGB","clearTarget","animate","getCurrentRenderTarget","getPrecision","resetGLState","supportsFloatTextures","supportsHalfFloatTextures","supportsStandardDerivatives","supportsCompressedTextureS3TC","supportsCompressedTexturePVRTC","supportsBlendMinMax","supportsInstancedArrays","enableScissorTest","initMaterial","addPrePlugin","addPostPlugin","updateShadowMap","setFaceCulling","allocTextureUnit","getActiveMipMapLevel","shadowMapCullFace","vr","gammaInput","gammaOutput","toneMappingWhitePoint","renderReverseSided","renderSingleSided","updateCubeMap","loadTextureCube","loadCompressedTexture","loadCompressedTextureCube","SceneUtils","createMultiMaterialObject","LensFlare","ParametricGeometry","TextGeometry","FontLoader","Font","revision","__THREE__","WebGLDebugUtils","msg","glValidEnumContexts","glEnums","enumStringToValue","ctx","checkInit","glEnumToString","glFunctionArgToString","numArgs","argumentIndex","funcInfo","enums","orResult","orEnums","enumValue","makePropertyWrapper","wrapper","resetToInitialState","isWebGL2RenderingContext","numAttribs","numTextureUnits","blendColor","depthRange","hint","sampleCoverage","numTransformFeedbacks","numUBOs","mightBeEnum","glFunctionArgsToString","argStr","makeDebugContext","opt_onErrorFunc","opt_onFunc","opt_err_ctx","glErrorShadow","makeErrorWrapper","wrapped","makeLostContextSimulatingCanvas","unwrappedContext_","onLost_","onRestored_","wrappedContext_","contextId_","contextLost_","resourceDb_","numCallsToLoseContext_","numCalls_","canRestore_","restoreTimeout_","glErrorShadow_","wrapEvent","handleEvent","makeLostContextSimulatingContext","addOnContextLostListener","addOnContextRestoredListener","loseContextIfTime","makeLostContextFunctionWrapper","makeWebGLContextEvent","statusMessage","wrapAddEventListener","bubble","clearErrors","freeResources","WebGLBuffer","WebGLFramebuffer","WebGLRenderbuffer","WebGLTexture","WebGLQuery","WebGLSampler","WebGLSync","WebGLTransformFeedback","WebGLVertexArrayObject","loseContextInNCalls","numCalls","getNumCalls","setRestoreTimeout","creationFunctions","__webglDebugContextLostId__","functionsThatShouldReturnNull","isFunctions","isContextLost","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","definition","globalThis","prop"],"sourceRoot":""} \ No newline at end of file diff --git a/build/index.html b/build/index.html new file mode 100644 index 0000000..8b2865b --- /dev/null +++ b/build/index.html @@ -0,0 +1,13 @@ + \ No newline at end of file diff --git a/img/blinnphong.png b/img/blinnphong.png new file mode 100644 index 0000000..37827ff Binary files /dev/null and b/img/blinnphong.png differ diff --git a/img/coolgif.gif b/img/coolgif.gif new file mode 100644 index 0000000..eb00ac0 Binary files /dev/null and b/img/coolgif.gif differ diff --git a/img/mini_frustum_comp.png b/img/mini_frustum_comp.png new file mode 100644 index 0000000..d2dcfb1 Binary files /dev/null and b/img/mini_frustum_comp.png differ diff --git a/img/sadge.png b/img/sadge.png new file mode 100644 index 0000000..9d177c7 Binary files /dev/null and b/img/sadge.png differ diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..68d724d --- /dev/null +++ b/package-lock.json @@ -0,0 +1,4528 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "@babel/code-frame": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz", + "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/compat-data": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", + "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", + "dev": true + }, + "@babel/core": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.8.tgz", + "integrity": "sha512-3UG9dsxvYBMYwRv+gS41WKHno4K60/9GPy1CJaH6xy3Elq8CTtvtjT5R5jmNhXfCYLX2mTw+7/aq5ak/gOE0og==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.15.8", + "@babel/generator": "^7.15.8", + "@babel/helper-compilation-targets": "^7.15.4", + "@babel/helper-module-transforms": "^7.15.8", + "@babel/helpers": "^7.15.4", + "@babel/parser": "^7.15.8", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.6", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.8.tgz", + "integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==", + "dev": true, + "requires": { + "@babel/types": "^7.15.6", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz", + "integrity": "sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA==", + "dev": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.15.4.tgz", + "integrity": "sha512-P8o7JP2Mzi0SdC6eWr1zF+AEYvrsZa7GSY1lTayjF5XJhVH0kjLYUZPvTMflP7tBgZoe9gIhTa60QwFpqh/E0Q==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.15.4", + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz", + "integrity": "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.15.0", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.4.tgz", + "integrity": "sha512-7ZmzFi+DwJx6A7mHRwbuucEYpyBwmh2Ca0RvI6z2+WLZYCqV0JOaLb+u0zbtmDicebgKBZgqbYfLaKNqSgv5Pw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-function-name": "^7.15.4", + "@babel/helper-member-expression-to-functions": "^7.15.4", + "@babel/helper-optimise-call-expression": "^7.15.4", + "@babel/helper-replace-supers": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", + "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "regexpu-core": "^4.7.1" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz", + "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.15.4.tgz", + "integrity": "sha512-J14f/vq8+hdC2KoWLIQSsGrC9EFBKE4NFts8pfMpymfApds+fPqR30AOUWc4tyr56h9l/GA1Sxv2q3dLZWbQ/g==", + "dev": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-function-name": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz", + "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.15.4", + "@babel/template": "^7.15.4", + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz", + "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", + "dev": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz", + "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==", + "dev": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz", + "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==", + "dev": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-module-imports": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz", + "integrity": "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==", + "dev": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-module-transforms": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.8.tgz", + "integrity": "sha512-DfAfA6PfpG8t4S6npwzLvTUpp0sS7JrcuaMiy1Y5645laRJIp/LiLGIBbQKaXSInK8tiGNI7FL7L8UvB8gdUZg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.15.4", + "@babel/helper-replace-supers": "^7.15.4", + "@babel/helper-simple-access": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", + "@babel/helper-validator-identifier": "^7.15.7", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.6" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz", + "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==", + "dev": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.15.4.tgz", + "integrity": "sha512-v53MxgvMK/HCwckJ1bZrq6dNKlmwlyRNYM6ypaRTdXWGOE2c1/SCa6dL/HimhPulGhZKw9W0QhREM583F/t0vQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-wrap-function": "^7.15.4", + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-replace-supers": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz", + "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.15.4", + "@babel/helper-optimise-call-expression": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-simple-access": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz", + "integrity": "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==", + "dev": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.15.4.tgz", + "integrity": "sha512-BMRLsdh+D1/aap19TycS4eD1qELGrCBJwzaY9IE8LrpJtJb+H7rQkPIdsfgnMtLBA6DJls7X9z93Z4U8h7xw0A==", + "dev": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz", + "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", + "dev": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.15.4.tgz", + "integrity": "sha512-Y2o+H/hRV5W8QhIfTpRIBwl57y8PrZt6JM3V8FOo5qarjshHItyH5lXlpMfBfmBefOqSCpKZs/6Dxqp0E/U+uw==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.15.4", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" + } + }, + "@babel/helpers": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.4.tgz", + "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==", + "dev": true, + "requires": { + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" + } + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.8.tgz", + "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==", + "dev": true + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.15.4.tgz", + "integrity": "sha512-eBnpsl9tlhPhpI10kU06JHnrYXwg3+V6CaP2idsCXNef0aeslpqyITXQ74Vfk5uHgY7IG7XP0yIH8b42KSzHog==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.15.4", + "@babel/plugin-proposal-optional-chaining": "^7.14.5" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.15.8.tgz", + "integrity": "sha512-2Z5F2R2ibINTc63mY7FLqGfEbmofrHU9FitJW1Q7aPaKFhiPvSq6QEt/BoWN5oME3GVyjcRuNNSRbb9LC0CSWA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.15.4", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz", + "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.15.4.tgz", + "integrity": "sha512-M682XWrrLNk3chXCjoPUQWOyYsB93B9z3mRyjtqqYJWDf2mfCdIYgDrA11cgNVhAQieaq6F2fn2f3wI0U4aTjA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz", + "integrity": "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz", + "integrity": "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz", + "integrity": "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", + "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", + "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz", + "integrity": "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.15.6.tgz", + "integrity": "sha512-qtOHo7A1Vt+O23qEAX+GdBpqaIuD3i9VRrWgCJeq7WO6H2d14EK3q11urj5Te2MAeK97nMiIdRpwd/ST4JFbNg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.15.0", + "@babel/helper-compilation-targets": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.15.4" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz", + "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz", + "integrity": "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.15.4.tgz", + "integrity": "sha512-X0UTixkLf0PCCffxgu5/1RQyGGbgZuKoI+vXP4iSbJSYwPb7hu06omsFGBvQ9lJEvwgrxHdS8B5nbfcd8GyUNA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-create-class-features-plugin": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz", + "integrity": "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz", + "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", + "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz", + "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz", + "integrity": "sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.15.4.tgz", + "integrity": "sha512-Yjvhex8GzBmmPQUvpXRPWQ9WnxXgAFuZSrqOK/eJlOGIXwvv8H3UEdUigl1gb/bnjTrln+e8bkZUYCBt/xYlBg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-function-name": "^7.15.4", + "@babel/helper-optimise-call-expression": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz", + "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz", + "integrity": "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz", + "integrity": "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz", + "integrity": "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz", + "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.15.4.tgz", + "integrity": "sha512-DRTY9fA751AFBDh2oxydvVm4SYevs5ILTWLs6xKXps4Re/KG5nfUkr+TdHCrRWB8C69TlzVgA9b3RmGWmgN9LA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz", + "integrity": "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz", + "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz", + "integrity": "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz", + "integrity": "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.4.tgz", + "integrity": "sha512-qg4DPhwG8hKp4BbVDvX1s8cohM8a6Bvptu4l6Iingq5rW+yRUAhe/YRup/YcW2zCOlrysEWVhftIcKzrEZv3sA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-simple-access": "^7.15.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.15.4.tgz", + "integrity": "sha512-fJUnlQrl/mezMneR72CKCgtOoahqGJNVKpompKwzv3BrEXdlPspTcyxrZ1XmDTIr9PpULrgEQo3qNKp6dW7ssw==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.15.4", + "@babel/helper-module-transforms": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.9", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz", + "integrity": "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz", + "integrity": "sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz", + "integrity": "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz", + "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.15.4.tgz", + "integrity": "sha512-9WB/GUTO6lvJU3XQsSr6J/WKvBC2hcs4Pew8YxZagi6GkTdniyqp8On5kqdK8MN0LMeu0mGbhPN+O049NV/9FQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz", + "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz", + "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==", + "dev": true, + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz", + "integrity": "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", + "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.15.8.tgz", + "integrity": "sha512-/daZ8s2tNaRekl9YJa9X4bzjpeRZLt122cpgFnQPLGUe61PH8zMEBmYqKkW5xF5JUEh5buEGXJoQpqBmIbpmEQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.15.4" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz", + "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz", + "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz", + "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz", + "integrity": "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", + "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/preset-env": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.15.8.tgz", + "integrity": "sha512-rCC0wH8husJgY4FPbHsiYyiLxSY8oMDJH7Rl6RQMknbN9oDDHhM9RDFvnGM2MgkbUJzSQB4gtuwygY5mCqGSsA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.15.0", + "@babel/helper-compilation-targets": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.15.4", + "@babel/plugin-proposal-async-generator-functions": "^7.15.8", + "@babel/plugin-proposal-class-properties": "^7.14.5", + "@babel/plugin-proposal-class-static-block": "^7.15.4", + "@babel/plugin-proposal-dynamic-import": "^7.14.5", + "@babel/plugin-proposal-export-namespace-from": "^7.14.5", + "@babel/plugin-proposal-json-strings": "^7.14.5", + "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", + "@babel/plugin-proposal-numeric-separator": "^7.14.5", + "@babel/plugin-proposal-object-rest-spread": "^7.15.6", + "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", + "@babel/plugin-proposal-optional-chaining": "^7.14.5", + "@babel/plugin-proposal-private-methods": "^7.14.5", + "@babel/plugin-proposal-private-property-in-object": "^7.15.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.14.5", + "@babel/plugin-transform-async-to-generator": "^7.14.5", + "@babel/plugin-transform-block-scoped-functions": "^7.14.5", + "@babel/plugin-transform-block-scoping": "^7.15.3", + "@babel/plugin-transform-classes": "^7.15.4", + "@babel/plugin-transform-computed-properties": "^7.14.5", + "@babel/plugin-transform-destructuring": "^7.14.7", + "@babel/plugin-transform-dotall-regex": "^7.14.5", + "@babel/plugin-transform-duplicate-keys": "^7.14.5", + "@babel/plugin-transform-exponentiation-operator": "^7.14.5", + "@babel/plugin-transform-for-of": "^7.15.4", + "@babel/plugin-transform-function-name": "^7.14.5", + "@babel/plugin-transform-literals": "^7.14.5", + "@babel/plugin-transform-member-expression-literals": "^7.14.5", + "@babel/plugin-transform-modules-amd": "^7.14.5", + "@babel/plugin-transform-modules-commonjs": "^7.15.4", + "@babel/plugin-transform-modules-systemjs": "^7.15.4", + "@babel/plugin-transform-modules-umd": "^7.14.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.9", + "@babel/plugin-transform-new-target": "^7.14.5", + "@babel/plugin-transform-object-super": "^7.14.5", + "@babel/plugin-transform-parameters": "^7.15.4", + "@babel/plugin-transform-property-literals": "^7.14.5", + "@babel/plugin-transform-regenerator": "^7.14.5", + "@babel/plugin-transform-reserved-words": "^7.14.5", + "@babel/plugin-transform-shorthand-properties": "^7.14.5", + "@babel/plugin-transform-spread": "^7.15.8", + "@babel/plugin-transform-sticky-regex": "^7.14.5", + "@babel/plugin-transform-template-literals": "^7.14.5", + "@babel/plugin-transform-typeof-symbol": "^7.14.5", + "@babel/plugin-transform-unicode-escapes": "^7.14.5", + "@babel/plugin-transform-unicode-regex": "^7.14.5", + "@babel/preset-modules": "^0.1.4", + "@babel/types": "^7.15.6", + "babel-plugin-polyfill-corejs2": "^0.2.2", + "babel-plugin-polyfill-corejs3": "^0.2.5", + "babel-plugin-polyfill-regenerator": "^0.2.2", + "core-js-compat": "^3.16.0", + "semver": "^6.3.0" + } + }, + "@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/runtime": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", + "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", + "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4" + } + }, + "@babel/traverse": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz", + "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.15.4", + "@babel/helper-function-name": "^7.15.4", + "@babel/helper-hoist-variables": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", + "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.9", + "to-fast-properties": "^2.0.0" + } + }, + "@discoveryjs/json-ext": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.5.tgz", + "integrity": "sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA==", + "dev": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@types/eslint": { + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.2.tgz", + "integrity": "sha512-KubbADPkfoU75KgKeKLsFHXnU4ipH7wYg0TRT33NK3N3yiu7jlFAAoygIWBV+KbuHx/G+AvuGX6DllnK35gfJA==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.50", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", + "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", + "dev": true + }, + "@types/html-minifier-terser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.0.0.tgz", + "integrity": "sha512-NZwaaynfs1oIoLAV1vg18e7QMVDvw+6SQrdJc8w3BwUaoroVSf6EBj/Sk4PBWGxsq0dzhA2drbsuMC1/6C6KgQ==" + }, + "@types/http-proxy": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.7.tgz", + "integrity": "sha512-9hdj6iXH64tHSLTY+Vt2eYOGzSogC+JQ2H7bdPWkuh7KXP5qLllWx++t+K9Wk556c3dkDdPws/SpMRi0sdCT1w==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==" + }, + "@types/node": { + "version": "16.11.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.4.tgz", + "integrity": "sha512-TMgXmy0v2xWyuCSCJM6NCna2snndD8yvQF67J29ipdzMcsPa9u+o0tjF5+EQNdhcuZplYuouYqpc4zcd5I6amQ==" + }, + "@types/retry": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", + "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==", + "dev": true + }, + "@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webpack-cli/configtest": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.0.tgz", + "integrity": "sha512-ttOkEkoalEHa7RaFYpM0ErK1xc4twg3Am9hfHhL7MVqlHebnkYd2wuI/ZqTDj0cVzZho6PdinY0phFZV3O0Mzg==", + "dev": true + }, + "@webpack-cli/info": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.0.tgz", + "integrity": "sha512-F6b+Man0rwE4n0409FyAJHStYA5OIZERxmnUfLVwv0mc0V1wLad3V7jqRlMkgKBeAq07jUvglacNaa6g9lOpuw==", + "dev": true, + "requires": { + "envinfo": "^7.7.3" + } + }, + "@webpack-cli/serve": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.0.tgz", + "integrity": "sha512-ZkVeqEmRpBV2GHvjjUZqEai2PpUbuq8Bqd//vEYsp63J8WyexI8ppCqVS3Zs0QADf6aWuPdU+0XsPI647PVlQA==", + "dev": true + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "dev": true + }, + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + }, + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "babel-loader": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz", + "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "dependencies": { + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz", + "integrity": "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.2.2", + "semver": "^6.1.1" + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.5.tgz", + "integrity": "sha512-ninF5MQNwAX9Z7c9ED+H2pGt1mXdP4TqzlHKyPIYmJIYz0N+++uwdM7RnJukklhzJ54Q84vA4ZJkgs7lu5vqcw==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.2.2", + "core-js-compat": "^3.16.2" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz", + "integrity": "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.2.2" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.5.tgz", + "integrity": "sha512-I3ekeB92mmpctWBoLXe0d5wPS2cBuRvvW0JyyJHMrk9/HmP2ZjrTboNAZ8iuGqaEIlKguljbQY32OkOJIRrgoA==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001271", + "electron-to-chromium": "^1.3.878", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "caniuse-lite": { + "version": "1.0.30001271", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001271.tgz", + "integrity": "sha512-BBruZFWmt3HFdVPS8kceTBIguKxu4f99n5JNp06OlPD/luoAMIaIK5ieV5YjnBLH3Nysai9sxj9rpJj4ZisXOA==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true + }, + "clean-css": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.2.tgz", + "integrity": "sha512-/eR8ru5zyxKzpBLv9YZvMXgTSSQn7AdkMItMYynsFgGwTveCRVam9IUPFloE85B4vAIj05IuKmmEoV7/AQjT0w==", + "requires": { + "source-map": "~0.6.0" + } + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "dev": true + }, + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "core-js-compat": { + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.18.3.tgz", + "integrity": "sha512-4zP6/y0a2RTHN5bRGT7PTq9lVt3WzvffTNjqnTKsXhkAYNDTkdCLOIfAdOLcQ/7TDdyRj3c+NeHe1NmF1eDScw==", + "dev": true, + "requires": { + "browserslist": "^4.17.3", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "css-select": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", + "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", + "nth-check": "^2.0.0" + } + }, + "css-what": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==" + }, + "dat.gui": { + "version": "0.7.7", + "resolved": "https://registry.npmjs.org/dat.gui/-/dat.gui-0.7.7.tgz", + "integrity": "sha512-sRl/28gF/XRC5ywC9I4zriATTsQcpSsRG7seXCPnTkK8/EQMIbCu5NPMpICLGxX9ZEUvcXR3ArLYCtgreFoMDw==" + }, + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "requires": { + "execa": "^5.0.0" + } + }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "del": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", + "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", + "dev": true, + "requires": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", + "dev": true, + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "^1.0.0" + } + }, + "dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "requires": { + "utila": "~0.4" + } + }, + "dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" + }, + "domhandler": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", + "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.878", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.878.tgz", + "integrity": "sha512-O6yxWCN9ph2AdspAIszBnd9v8s11hQx8ub9w4UGApzmNRnoKhbulOWqbO8THEQec/aEHtvy+donHZMlh6l1rbA==", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "enhanced-resolve": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", + "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + }, + "envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "dev": true + }, + "es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "follow-redirects": { + "version": "1.14.4", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz", + "integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==", + "dev": true + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "fs": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.2.tgz", + "integrity": "sha1-4fJE7zkzwbKmS9R5kTYGDQ9ZFPg=", + "dev": true + }, + "fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "gl-matrix": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", + "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true + }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "html-entities": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", + "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==", + "dev": true + }, + "html-minifier-terser": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.0.2.tgz", + "integrity": "sha512-AgYO3UGhMYQx2S/FBJT3EM0ZYcKmH6m9XL9c1v77BeK/tYJxGPxT1/AtsdUi4FcP8kZGmqqnItCcjFPcX9hk6A==", + "requires": { + "camel-case": "^4.1.2", + "clean-css": "^5.1.5", + "commander": "^8.1.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.7.2" + } + }, + "html-webpack-plugin": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.4.0.tgz", + "integrity": "sha512-cSUdckNOIqKc0nOrCJG7zkvzEIUcXjzEiVbKdEdIzW3BD5T4xPK6boV1mrTrPDZiL+aAr/j45eqbNL1akU2ZRA==", + "requires": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^3.0.4", + "tapable": "^2.0.0" + } + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "http-parser-js": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", + "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.1.tgz", + "integrity": "sha512-cfaXRVoZxSed/BmkA7SwBVNI9Kj7HFltaE5rqYOub5kWzWZ+gofV2koVN1j2rMW7pEfSSlCHGJ31xmuyFyfLOg==", + "dev": true, + "requires": { + "@types/http-proxy": "^1.17.5", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, + "import-local": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", + "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "internal-ip": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-6.2.0.tgz", + "integrity": "sha512-D8WGsR6yDt8uq7vDMu7mjcR+yRMm3dW8yufyChmszWRjcSHuxLBkR3GdS2HZAjodsaGuCvXeEJpueisXJULghg==", + "dev": true, + "requires": { + "default-gateway": "^6.0.0", + "ipaddr.js": "^1.9.1", + "is-ip": "^3.1.0", + "p-event": "^4.2.0" + }, + "dependencies": { + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + } + } + }, + "interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ip-regex": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", + "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", + "dev": true + }, + "ipaddr.js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", + "dev": true + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-ip": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-3.1.0.tgz", + "integrity": "sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==", + "dev": true, + "requires": { + "ip-regex": "^4.0.0" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, + "is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "jest-worker": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.3.1.tgz", + "integrity": "sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==", + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "loader-runner": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "dev": true + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "requires": { + "tslib": "^2.0.3" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "memfs": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.3.0.tgz", + "integrity": "sha512-BEE62uMfKOavX3iG7GYX43QJ+hAeeWnwIAuJ/R6q96jaMtiLzhsxHJC8B1L7fK7Pt/vXDRwb3SG/yBpNGDPqzg==", + "dev": true, + "requires": { + "fs-monkey": "1.0.3" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.50.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", + "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", + "dev": true + }, + "mime-types": { + "version": "2.1.33", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", + "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", + "dev": true, + "requires": { + "mime-db": "1.50.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "requires": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true + }, + "node-releases": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "nth-check": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "requires": { + "boolbase": "^1.0.0" + } + }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "open": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.3.0.tgz", + "integrity": "sha512-7INcPWb1UcOwSQxAXTnBJ+FxVV4MPs/X++FWWBtgY69/J5lc+tCteMt/oFK1MnkyHC4VILLa9ntmwKTwDR4Q9w==", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "p-event": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", + "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", + "dev": true, + "requires": { + "p-timeout": "^3.1.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + }, + "dependencies": { + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + } + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-retry": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", + "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", + "dev": true, + "requires": { + "@types/retry": "^0.12.0", + "retry": "^0.13.1" + } + }, + "p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "requires": { + "p-finally": "^1.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "path": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/path/-/path-0.11.14.tgz", + "integrity": "sha1-y8dWk1XLPIOv60rOQ+z/lSMeWn0=", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "pretty-error": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-3.0.4.tgz", + "integrity": "sha512-ytLFLfv1So4AO1UkoBF6GXQgJRaKbiSiGFICaOPNwQ3CMvBvXpLRubeQWyPGnsbV/t9ml9qto6IeCsho0aEvwQ==", + "requires": { + "lodash": "^4.17.20", + "renderkid": "^2.0.6" + } + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "dependencies": { + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + } + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + } + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", + "dev": true, + "requires": { + "resolve": "^1.9.0" + } + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz", + "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "dev": true + }, + "regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "regexpu-core": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz", + "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", + "dev": true, + "requires": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^9.0.0", + "regjsgen": "^0.5.2", + "regjsparser": "^0.7.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + } + }, + "regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "dev": true + }, + "regjsparser": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz", + "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" + }, + "renderkid": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", + "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", + "requires": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^3.0.1" + } + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selfsigned": { + "version": "1.10.11", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", + "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", + "dev": true, + "requires": { + "node-forge": "^0.10.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "signal-exit": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", + "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "sockjs": { + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", + "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", + "dev": true, + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^3.4.0", + "websocket-driver": "^0.7.4" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-support": { + "version": "0.5.20", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", + "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "spectorjs": { + "version": "0.9.27", + "resolved": "https://registry.npmjs.org/spectorjs/-/spectorjs-0.9.27.tgz", + "integrity": "sha512-eujFAuFWdW9S5wT++ks2o1zShN5Vd8Zple2NB6oM5G5tXqNtGbk6Yg3mfCpL03Bbq0djqGJAeswYk0VfpuPfIQ==" + }, + "stats-js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stats-js/-/stats-js-1.0.1.tgz", + "integrity": "sha512-EAwEFghGNv8mlYC4CZzI5kWghsnP8uBKXw6VLRHtXkOk5xySfUKLTqTkjgJFfDluIkf/O7eZwi5MXP50VeTbUg==" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" + }, + "terser": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz", + "integrity": "sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==", + "requires": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + } + } + }, + "terser-webpack-plugin": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.4.tgz", + "integrity": "sha512-E2CkNMN+1cho04YpdANyRrn8CyN4yMy+WdFKZIySFZrGXZxJwJP6PMNGGc/Mcr6qygQHUUqRxnAPmi0M9f00XA==", + "requires": { + "jest-worker": "^27.0.6", + "p-limit": "^3.1.0", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.2" + } + }, + "three": { + "version": "0.133.1", + "resolved": "https://registry.npmjs.org/three/-/three-0.133.1.tgz", + "integrity": "sha512-WydohO8ll949B0FTD6MGz59Yv2Lwj8hvObg/0Heh2r42S6+tQC1WByfCNRdmG4D7+odfGod+n8JPV1I2xrboWw==" + }, + "three-js": { + "version": "79.0.0", + "resolved": "https://registry.npmjs.org/three-js/-/three-js-79.0.0.tgz", + "integrity": "sha1-AxjqrKsobdz4j6Phl36KbuaVe1k=" + }, + "three-orbitcontrols": { + "version": "2.110.2", + "resolved": "https://registry.npmjs.org/three-orbitcontrols/-/three-orbitcontrols-2.110.2.tgz", + "integrity": "sha512-XiYzp2l6mHcHuuDuURWhQUc96Oc4FW2Mesu2lhL596pBWt0ympKHgPKqEXxv2bRka+gq9cbfNI6DdBu5RredLg==" + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "requires": { + "punycode": "^2.1.0" + } + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "watchpack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz", + "integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "webgl-debug": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/webgl-debug/-/webgl-debug-2.0.1.tgz", + "integrity": "sha512-G7BOpMmqdc31X1nb3eqwVxw/v1MNV/ulgw7Bs+7+a/sn+fC0d0OiMkerA55C6+3BL2vULyJ3kZLPcEL5GbXzhw==" + }, + "webpack": { + "version": "5.59.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.59.1.tgz", + "integrity": "sha512-I01IQV9K96FlpXX3V0L4nvd7gb0r7thfuu1IfT2P4uOHOA77nKARAKDYGe/tScSHKnffNIyQhLC8kRXzY4KEHQ==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.50", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.8.3", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.2.0", + "webpack-sources": "^3.2.0" + } + }, + "webpack-cli": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.1.tgz", + "integrity": "sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.1.0", + "@webpack-cli/info": "^1.4.0", + "@webpack-cli/serve": "^1.6.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "execa": "^5.0.0", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + } + } + }, + "webpack-dev-middleware": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.2.1.tgz", + "integrity": "sha512-Kx1X+36Rn9JaZcQMrJ7qN3PMAuKmEDD9ZISjUj3Cgq4A6PtwYsC4mpaKotSRYH3iOF6HsUa8viHKS59FlyVifQ==", + "dev": true, + "requires": { + "colorette": "^2.0.10", + "memfs": "^3.2.2", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^3.1.0" + } + }, + "webpack-dev-server": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.3.1.tgz", + "integrity": "sha512-qNXQCVYo1kYhH9pgLtm8LRNkXX3XzTfHSj/zqzaqYzGPca+Qjr+81wj1jgPMCHhIhso9WEQ+kX9z23iG9PzQ7w==", + "dev": true, + "requires": { + "ansi-html-community": "^0.0.8", + "bonjour": "^3.5.0", + "chokidar": "^3.5.1", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "del": "^6.0.0", + "express": "^4.17.1", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.0", + "internal-ip": "^6.2.0", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "portfinder": "^1.0.28", + "schema-utils": "^3.1.0", + "selfsigned": "^1.10.11", + "serve-index": "^1.9.1", + "sockjs": "^0.3.21", + "spdy": "^4.0.2", + "strip-ansi": "^7.0.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^5.2.1", + "ws": "^8.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, + "webpack-glsl-loader": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/webpack-glsl-loader/-/webpack-glsl-loader-1.0.1.tgz", + "integrity": "sha1-cqDjAZK9V5R9YNbVBckVvmgNCsw=", + "dev": true, + "requires": { + "fs": "0.0.2", + "path": "^0.11.14" + } + }, + "webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } + }, + "webpack-sources": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.1.tgz", + "integrity": "sha512-t6BMVLQ0AkjBOoRTZgqrWm7xbXMBzD+XDq2EZ96+vMfn3qKgsvdXZhbPZ4ElUOpdv4u+iiGe+w3+J75iy/bYGA==", + "dev": true + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + } + } +} diff --git a/src/init.js b/src/init.js index 885240b..4f0161a 100755 --- a/src/init.js +++ b/src/init.js @@ -1,5 +1,5 @@ // TODO: Change this to enable / disable debug mode -export const DEBUG = true && process.env.NODE_ENV === 'development'; +export const DEBUG = false && process.env.NODE_ENV === 'development'; import DAT from 'dat.gui'; import WebGLDebug from 'webgl-debug'; @@ -10,7 +10,7 @@ import { Spector } from 'spectorjs'; export var ABORTED = false; export function abort(message) { - ABORTED = true; + ABORTED = true; throw message; } diff --git a/src/main.js b/src/main.js index d688fde..a44256e 100755 --- a/src/main.js +++ b/src/main.js @@ -4,6 +4,7 @@ import ForwardPlusRenderer from './renderers/forwardPlus'; import ClusteredDeferredRenderer from './renderers/clusteredDeferred'; import Scene from './scene'; import Wireframe from './wireframe'; +import { vec3 } from 'gl-matrix'; const FORWARD = 'Forward'; const FORWARD_PLUS = 'Forward+'; @@ -22,10 +23,10 @@ function setRenderer(renderer) { params._renderer = new ForwardRenderer(); break; case FORWARD_PLUS: - params._renderer = new ForwardPlusRenderer(15, 15, 15); + params._renderer = new ForwardPlusRenderer(15, 15, 15, camera); break; case CLUSTERED: - params._renderer = new ClusteredDeferredRenderer(15, 15, 15); + params._renderer = new ClusteredDeferredRenderer(15, 15, 15, camera); break; } } @@ -44,8 +45,8 @@ const wireframe = new Wireframe(); var segmentStart = [-14.0, 0.0, -6.0]; var segmentEnd = [14.0, 20.0, 6.0]; var segmentColor = [1.0, 0.0, 0.0]; -wireframe.addLineSegment(segmentStart, segmentEnd, segmentColor); -wireframe.addLineSegment([-14.0, 1.0, -6.0], [14.0, 21.0, 6.0], [0.0, 1.0, 0.0]); +// wireframe.addLineSegment(segmentStart, segmentEnd, segmentColor); +// wireframe.addLineSegment([-14.0, 1.0, -6.0], [14.0, 21.0, 6.0], [0.0, 1.0, 0.0]); camera.position.set(-10, 8, 0); cameraControls.target.set(0, 2, 0); @@ -53,7 +54,7 @@ gl.enable(gl.DEPTH_TEST); function render() { scene.update(); - params._renderer.render(camera, scene); + params._renderer.render(camera, scene, wireframe); // LOOK: Render wireframe "in front" of everything else. // If you would like the wireframe to render behind and in front diff --git a/src/renderers/base.js b/src/renderers/base.js index 8a975b9..b137d98 100755 --- a/src/renderers/base.js +++ b/src/renderers/base.js @@ -1,30 +1,312 @@ import TextureBuffer from './textureBuffer'; +import { vec3, vec4, subtract, mat4 } from 'gl-matrix'; +import { NUM_LIGHTS } from '../scene'; +import { Vector3, Vector4, Matrix4, Plane, Sphere, Frustum } from 'three'; export const MAX_LIGHTS_PER_CLUSTER = 100; -export default class BaseRenderer { +class Side { + constructor(p1, p2, p3, p4) { + this.p1 = p1 + this.p2 = p2 + this.p3 = p3 + this.p4 = p4 + + this.generateNormal() + } + + generateNormal() { + var line1 = vec3.create() + line1 = vec3.subtract(line1, this.p2, this.p1) + + var line2 = vec3.create() + line2 = vec3.subtract(line2, this.p2, this.p3) + + this.normal = vec3.create() + + this.normal = vec3.cross(this.normal, line1, line2) + this.normal = vec3.multiply(this.normal, vec3.fromValues(-1, -1, -1), this.normal) + this.normal = vec3.normalize(this.normal, this.normal); + } + + intersectsSphere(center, radius) { + var v = vec3.create(); + v = vec3.subtract(v , center, this.p1); + + var d = vec3.dot(v, this.normal); + + // console.log('Distance from ', center, ' to plane ', this.normal, ' at point ', this.p1, ' is ', d) + } +} + +export class BaseRenderer { constructor(xSlices, ySlices, zSlices) { // Create a texture to store cluster data. Each cluster stores the number of lights followed by the light indices + + // This stores one element per miniFrustum (in row) and each miniFrustum's data has to get packed + // into "pixels", where each "pixel" stores four floats. In this case, we want to store + // MAX_LIGHTS_PER_CLUSTER + 1 floats, which can fit in (MAX_LIGHTS_PER_CLUSTER + 1) / 4 pixels. this._clusterTexture = new TextureBuffer(xSlices * ySlices * zSlices, MAX_LIGHTS_PER_CLUSTER + 1); this._xSlices = xSlices; this._ySlices = ySlices; this._zSlices = zSlices; } + computeLightSphereAndCenter(light, viewMatrix) { + var center = vec4.fromValues( + light.position[0], + light.position[1], + light.position[2], + 1.0); + + vec4.transformMat4(center, center, viewMatrix); + center = new Vector3(center[0], center[1], center[2]); + + return new Sphere(center, light.radius); + } + + computeMiniFrustum(xNearLeft, xNearRight, yNearBottom, yNearTop, xFarLeft, xFarRight, yFarBottom, yFarTop, zNear, zFar) { + var frontPlane = new Plane(); + frontPlane.setFromCoplanarPoints( + new Vector3(xNearLeft, yNearBottom, zNear), + new Vector3(xNearRight, yNearBottom, zNear), + new Vector3(xNearRight, yNearTop, zNear) + ); + // vec3.fromValues(xNearLeft, yNearTop, zNear) + + var backPlane = new Plane(); + backPlane.setFromCoplanarPoints( + new Vector3(xFarLeft, yFarBottom, zFar), + new Vector3(xFarLeft, yFarTop, zFar), + new Vector3(xFarRight, yFarTop, zFar) + ); + // vec3.fromValues(xFarRight, yFarBottom, zFar) + + var leftPlane = new Plane(); + leftPlane.setFromCoplanarPoints( + new Vector3(xNearLeft, yNearBottom, zNear), + new Vector3(xNearLeft, yNearTop, zNear), + new Vector3(xFarLeft, yFarTop, zFar) + ); + // vec3.fromValues(xFarLeft, yFarBottom, zFar) + + + var rightPlane = new Plane(); + rightPlane.setFromCoplanarPoints( + new Vector3(xNearRight, yNearBottom, zNear), + new Vector3(xFarRight, yFarBottom, zFar), + new Vector3(xFarRight, yFarTop, zFar) + ); + // vec3.fromValues(xNearRight, yNearTop, zNear) + + var topPlane = new Plane(); + topPlane.setFromCoplanarPoints( + new Vector3(xNearLeft, yNearTop, zNear), + new Vector3(xNearRight, yNearTop, zNear), + new Vector3(xFarRight, yFarTop, zFar) + ); + // vec3.fromValues(xFarLeft, yFarTop, zFar) + + var bottomPlane = new Plane(); + bottomPlane.setFromCoplanarPoints( + new Vector3(xNearLeft, yNearBottom, zNear), + new Vector3(xFarLeft, yFarBottom, zFar), + new Vector3(xFarRight, yFarBottom, zFar) + ); + // vec3.fromValues(xNearRight, yNearBottom, zNear) + + // https://threejs.org/docs/#api/en/math/Frustum + return new Frustum(frontPlane, backPlane, leftPlane, rightPlane, topPlane, bottomPlane); + } + + initializeMiniFrustums(camera) { + this.index2MiniFrustum = {}; + + const nearClip = camera.near; + const farClip = camera.far; + const fullDepth = farClip - nearClip; + + const vertFov = camera.fov; + const aspect = camera.aspect; + + // CIS560: tan(FOV/2) = (screen.height/2)/screen.z + const tanFovDiv2 = Math.tan((vertFov/2) * Math.PI / 180.0); + + // xWidth, yHeight, and zDepth + const zDepth = fullDepth / this._zSlices; + + for (let z = 0; z < this._zSlices; ++z) { + // Knowing z allows us to compute the dimensions of both near and far + // ends of the frustum, using CIS560: tan(FOV/2) = (screen.height/2)/screen.z + + const zNear = z * zDepth; + const zFar = zNear + zDepth; + const nearScreenHeight = tanFovDiv2 * zNear * 2; + const farScreenHeight = tanFovDiv2 * zFar * 2; + + // aspect = width / height + const nearScreenWidth = aspect * nearScreenHeight; + const farScreenWidth = aspect * farScreenHeight; + + const xNearWidth = nearScreenWidth / this._xSlices; + const yNearHeight = nearScreenHeight / this._ySlices; + + const xFarWidth = farScreenWidth / this._xSlices; + const yFarHeight = farScreenHeight / this._ySlices; + + for (let y = 0; y < this._ySlices; ++y) { + const yNearBottom = y * yNearHeight; + const yNearTop = yNearBottom + yNearHeight; + + const yFarBottom = y * yFarHeight; + const yFarTop = yFarBottom + yFarHeight; + + for (let x = 0; x < this._xSlices; ++x) { + const xNearLeft = x * xNearWidth; + const xNearRight = xNearLeft + xNearWidth; + + const xFarLeft = x * xFarWidth; + const xFarRight = xFarLeft + xFarWidth; + + let miniFrustumIndex = x + y * this._xSlices + z * this._xSlices * this._ySlices; + const miniFrustum = this.computeMiniFrustum( + xNearLeft, xNearRight, + yNearBottom, yNearTop, + xFarLeft, xFarRight, + yFarBottom, yFarTop, + zNear, zFar + ); + + this.index2MiniFrustum[miniFrustumIndex] = miniFrustum; + } + } + } + } + + computeLightIndex2Sphere(scene, viewMatrix) { + var lightIndex2Sphere = {}; + + for (let lightIndex = 0; lightIndex < NUM_LIGHTS; lightIndex++) { + const center = vec4.fromValues( + scene.lights[lightIndex].position[0], + scene.lights[lightIndex].position[1], + scene.lights[lightIndex].position[2], + 1.0); + + vec4.transformMat4(center, center, viewMatrix); + center = new Vector3(center[0], center[1], center[2]); + lightIndex2Sphere[lightIndex] = new Sphere(center, scene.lights[lightIndex].radius); + } + + return lightIndex2Sphere; + } + + updateClustersEfficient(scene, viewMatrix) { + const lightIndex2Sphere = this.computeLightIndex2Sphere(scene, viewMatrix) + + Object.entries(this.index2MiniFrustum).forEach(([index, miniFrustum]) => { + this._clusterTexture.buffer[this._clusterTexture.bufferIndex(index, 0)] = 0; + + var bufferPtr = 1; + for (let lightIndex = 0; lightIndex < NUM_LIGHTS; lightIndex++) { + const sphere = lightIndex2Sphere[lightIndex]; + + if (miniFrustum.intersectsSphere(sphere)) { + const componentOffset = Math.floor(bufferPtr / 4); + const floatOffset = bufferPtr % 4; + + this._clusterTexture.buffer[this._clusterTexture.bufferIndex(index, componentOffset) + floatOffset] = lightIndex; + this._clusterTexture.buffer[this._clusterTexture.bufferIndex(index, 0)]++; + + bufferPtr++; + } + } + }); + + this._clusterTexture.update(); + } + + // Inefficient updateClusters(camera, viewMatrix, scene) { // TODO: Update the cluster texture with the count and indices of the lights in each cluster // This will take some time. The math is nontrivial... + const nearClip = camera.near; + const farClip = camera.far; + const fullDepth = farClip - nearClip; + + const aspect = camera.aspect; + const vertFov = camera.fov; + + // CIS560: tan(FOV/2) = (screen.height/2)/screen.z + const tanFovDiv2 = Math.tan((vertFov/2) * Math.PI / 180.0); + + // xWidth, yHeight, and zDepth + const zDepth = fullDepth / this._zSlices; + for (let z = 0; z < this._zSlices; ++z) { + // Knowing z allows us to compute the dimensions of both near and far + // ends of the frustum + + const zNear = z * zDepth; + const zFar = zNear + zDepth; + const nearScreenHeight = tanFovDiv2 * zNear * 2; + const farScreenHeight = tanFovDiv2 * zFar * 2; + + // aspect = width / height + const nearScreenWidth = aspect * nearScreenHeight; + const farScreenWidth = aspect * farScreenHeight; + + const xNearWidth = nearScreenWidth / this._xSlices; + const yNearHeight = nearScreenHeight / this._ySlices; + + const xFarWidth = farScreenWidth / this._xSlices; + const yFarHeight = farScreenHeight / this._ySlices; + for (let y = 0; y < this._ySlices; ++y) { + const yNearBottom = y * yNearHeight; + const yNearTop = yNearBottom + yNearHeight; + + const yFarBottom = y * yFarHeight; + const yFarTop = yFarBottom + yFarHeight; + for (let x = 0; x < this._xSlices; ++x) { - let i = x + y * this._xSlices + z * this._xSlices * this._ySlices; + const xNearLeft = x * xNearWidth; + const xNearRight = xNearLeft + xNearWidth; + + const xFarLeft = x * xFarWidth; + const xFarRight = xFarLeft + xFarWidth; + + let miniFrustumIndex = x + y * this._xSlices + z * this._xSlices * this._ySlices; + const miniFrustum = this.computeMiniFrustum( + xNearLeft, xNearRight, + yNearBottom, yNearTop, + xFarLeft, xFarRight, + yFarBottom, yFarTop, + zNear, zFar + ); + // Reset the light count to 0 for every cluster - this._clusterTexture.buffer[this._clusterTexture.bufferIndex(i, 0)] = 0; + this._clusterTexture.buffer[this._clusterTexture.bufferIndex(miniFrustumIndex, 0)] = 0; + + var bufferPtr = 1; + for (let lightIndex = 0; lightIndex < NUM_LIGHTS; ++lightIndex) { + const sphere = this.computeLightSphereAndCenter(scene.lights[lightIndex], viewMatrix); + + if (miniFrustum.intersectsSphere(sphere)) { + const componentOffset = Math.floor(bufferPtr / 4); + const floatOffset = bufferPtr % 4; + + this._clusterTexture.buffer[this._clusterTexture.bufferIndex(miniFrustumIndex, componentOffset) + floatOffset] = lightIndex; + this._clusterTexture.buffer[this._clusterTexture.bufferIndex(miniFrustumIndex, 0)]++; + + bufferPtr++; + } + } } } } this._clusterTexture.update(); } -} \ No newline at end of file +} diff --git a/src/renderers/clusteredDeferred.js b/src/renderers/clusteredDeferred.js index f9ae494..9bd1677 100644 --- a/src/renderers/clusteredDeferred.js +++ b/src/renderers/clusteredDeferred.js @@ -7,12 +7,12 @@ import toTextureFrag from '../shaders/deferredToTexture.frag.glsl'; import QuadVertSource from '../shaders/quad.vert.glsl'; import fsSource from '../shaders/deferred.frag.glsl.js'; import TextureBuffer from './textureBuffer'; -import BaseRenderer from './base'; +import { BaseRenderer, MAX_LIGHTS_PER_CLUSTER } from './base'; export const NUM_GBUFFERS = 4; export default class ClusteredDeferredRenderer extends BaseRenderer { - constructor(xSlices, ySlices, zSlices) { + constructor(xSlices, ySlices, zSlices, camera) { super(xSlices, ySlices, zSlices); this.setupDrawBuffers(canvas.width, canvas.height); @@ -29,13 +29,19 @@ export default class ClusteredDeferredRenderer extends BaseRenderer { numLights: NUM_LIGHTS, numGBuffers: NUM_GBUFFERS, }), { - uniforms: ['u_gbuffers[0]', 'u_gbuffers[1]', 'u_gbuffers[2]', 'u_gbuffers[3]'], + uniforms: [ + 'u_gbuffers[0]', 'u_gbuffers[1]', 'u_gbuffers[2]', 'u_gbuffers[3]', + 'u_lightbuffer', 'u_clusterbuffer', + 'u_xSlices', 'u_ySlices', 'u_zSlices', 'u_nearClip', 'u_farClip', 'u_viewMatrix', + 'u_clusterTextureWidth', 'u_clusterTextureHeight'], attribs: ['a_uv'], }); this._projectionMatrix = mat4.create(); this._viewMatrix = mat4.create(); this._viewProjectionMatrix = mat4.create(); + + this.initializeMiniFrustums(camera); } setupDrawBuffers(width, height) { @@ -91,10 +97,12 @@ export default class ClusteredDeferredRenderer extends BaseRenderer { gl.bindTexture(gl.TEXTURE_2D, this._depthTex); gl.texImage2D(gl.TEXTURE_2D, 0, gl.DEPTH_COMPONENT, width, height, 0, gl.DEPTH_COMPONENT, gl.UNSIGNED_SHORT, null); + for (let i = 0; i < NUM_GBUFFERS; i++) { gl.bindTexture(gl.TEXTURE_2D, this._gbuffers[i]); gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.FLOAT, null); } + gl.bindTexture(gl.TEXTURE_2D, null); } @@ -142,7 +150,8 @@ export default class ClusteredDeferredRenderer extends BaseRenderer { this._lightTexture.update(); // Update the clusters for the frame - this.updateClusters(camera, this._viewMatrix, scene); + this.updateClustersEfficient(scene, this._viewMatrix); + // this.updateClusters(camera, this._viewMatrix, scene); // Bind the default null framebuffer which is the screen gl.bindFramebuffer(gl.FRAMEBUFFER, null); @@ -163,6 +172,36 @@ export default class ClusteredDeferredRenderer extends BaseRenderer { gl.uniform1i(this._progShade[`u_gbuffers[${i}]`], i + firstGBufferBinding); } + // Set the light texture as a uniform input to the shader + gl.activeTexture(gl[`TEXTURE${NUM_GBUFFERS}`]); + gl.bindTexture(gl.TEXTURE_2D, this._lightTexture.glTexture); + gl.uniform1i(this._progShade.u_lightbuffer, NUM_GBUFFERS); + + // Set the cluster texture as a uniform input to the shader + gl.activeTexture(gl[`TEXTURE${NUM_GBUFFERS+1}`]); + gl.bindTexture(gl.TEXTURE_2D, this._clusterTexture.glTexture); + gl.uniform1i(this._progShade.u_clusterbuffer, NUM_GBUFFERS+1); + + + // Pass viewMatrix to convert depth into camera space + gl.uniformMatrix4fv(this._progShade.u_viewMatrix, false, this._viewMatrix); + + gl.uniform1f(this._progShade.u_nearClip, camera.near); + gl.uniform1f(this._progShade.u_farClip, camera.far); + + // These are really integers, but have to convert to float in the + // shader for math, so might as well make them a float here. + gl.uniform1f(this._progShade.u_canvasHeight, canvas.height); + gl.uniform1f(this._progShade.u_canvasWidth, canvas.width); + gl.uniform1f(this._progShade.u_xSlices, this._xSlices); + gl.uniform1f(this._progShade.u_ySlices, this._ySlices); + gl.uniform1f(this._progShade.u_zSlices, this._zSlices); + + var width = this._xSlices * this._ySlices * this._zSlices; + var height = Math.ceil((MAX_LIGHTS_PER_CLUSTER + 1) / 4); + gl.uniform1i(this._progShade.u_clusterTextureWidth, width); + gl.uniform1i(this._progShade.u_clusterTextureHeight, height); + renderFullscreenQuad(this._progShade); } }; diff --git a/src/renderers/forward.js b/src/renderers/forward.js index ac044f9..f199f55 100644 --- a/src/renderers/forward.js +++ b/src/renderers/forward.js @@ -9,15 +9,23 @@ import TextureBuffer from './textureBuffer'; export default class ForwardRenderer { constructor() { // Create a texture to store light data + // We can't sanely upload arbitrary data to the shader, so we pack this light information into + // a texture. The TextureBuffer parameters are saying that there are 100 lights, and each one + // is defined by 8 values. Under the covers of TextureBuffer, we say that because each "pixel" + // stores only four values, then each light's data will end up spread across two pixels worth. this._lightTexture = new TextureBuffer(NUM_LIGHTS, 8); // Initialize a shader program. The fragment shader source is compiled based on the number of lights - this._shaderProgram = loadShaderProgram(vsSource, fsSource({ - numLights: NUM_LIGHTS, - }), { - uniforms: ['u_viewProjectionMatrix', 'u_colmap', 'u_normap', 'u_lightbuffer'], - attribs: ['a_position', 'a_normal', 'a_uv'], - }); + // This shader program object contains both the actual shader program as well as mappings from the + // attrib and uniform names to their locations on the GPU. + this._shaderProgram = loadShaderProgram( + vsSource, + fsSource({ numLights: NUM_LIGHTS }), + { + uniforms: ['u_viewProjectionMatrix', 'u_colmap', 'u_normap', 'u_lightbuffer'], + attribs: ['a_position', 'a_normal', 'a_uv'], + } + ); this._projectionMatrix = mat4.create(); this._viewMatrix = mat4.create(); @@ -32,6 +40,8 @@ export default class ForwardRenderer { mat4.multiply(this._viewProjectionMatrix, this._projectionMatrix, this._viewMatrix); // Update the buffer used to populate the texture packed with light data + // For each light, upate the values inside the lightTexture buffer using this + // insane indexing scheme. for (let i = 0; i < NUM_LIGHTS; ++i) { this._lightTexture.buffer[this._lightTexture.bufferIndex(i, 0) + 0] = scene.lights[i].position[0]; this._lightTexture.buffer[this._lightTexture.bufferIndex(i, 0) + 1] = scene.lights[i].position[1]; @@ -42,7 +52,9 @@ export default class ForwardRenderer { this._lightTexture.buffer[this._lightTexture.bufferIndex(i, 1) + 1] = scene.lights[i].color[1]; this._lightTexture.buffer[this._lightTexture.bufferIndex(i, 1) + 2] = scene.lights[i].color[2]; } + // Update the light texture + // Flush these updates out to the GPU this._lightTexture.update(); // Bind the default null framebuffer which is the screen diff --git a/src/renderers/forwardPlus.js b/src/renderers/forwardPlus.js index a02649c..c2dbcaf 100755 --- a/src/renderers/forwardPlus.js +++ b/src/renderers/forwardPlus.js @@ -5,10 +5,11 @@ import { NUM_LIGHTS } from '../scene'; import vsSource from '../shaders/forwardPlus.vert.glsl'; import fsSource from '../shaders/forwardPlus.frag.glsl.js'; import TextureBuffer from './textureBuffer'; -import BaseRenderer from './base'; +import {BaseRenderer, MAX_LIGHTS_PER_CLUSTER } from './base'; +import { Matrix4 } from 'three'; export default class ForwardPlusRenderer extends BaseRenderer { - constructor(xSlices, ySlices, zSlices) { + constructor(xSlices, ySlices, zSlices, camera) { super(xSlices, ySlices, zSlices); // Create a texture to store light data @@ -17,25 +18,29 @@ export default class ForwardPlusRenderer extends BaseRenderer { this._shaderProgram = loadShaderProgram(vsSource, fsSource({ numLights: NUM_LIGHTS, }), { - uniforms: ['u_viewProjectionMatrix', 'u_colmap', 'u_normap', 'u_lightbuffer', 'u_clusterbuffer'], + uniforms: [ + 'u_viewProjectionMatrix', 'u_colmap', 'u_normap', 'u_lightbuffer', 'u_clusterbuffer', + 'u_xSlices', 'u_ySlices', 'u_zSlices', 'u_nearClip', 'u_farClip', 'u_viewMatrix', + 'u_clusterTextureWidth', 'u_clusterTextureHeight', 'u_cameraPosition'], attribs: ['a_position', 'a_normal', 'a_uv'], }); this._projectionMatrix = mat4.create(); this._viewMatrix = mat4.create(); this._viewProjectionMatrix = mat4.create(); + + this.initializeMiniFrustums(camera); } render(camera, scene) { - // Update the camera matrices camera.updateMatrixWorld(); mat4.invert(this._viewMatrix, camera.matrixWorld.elements); mat4.copy(this._projectionMatrix, camera.projectionMatrix.elements); mat4.multiply(this._viewProjectionMatrix, this._projectionMatrix, this._viewMatrix); - // Update cluster texture which maps from cluster index to light list - this.updateClusters(camera, this._viewMatrix, scene); - + this.updateClustersEfficient(scene, this._viewMatrix); + // this.updateClusters(camera, this._viewMatrix, scene); + // Update the buffer used to populate the texture packed with light data for (let i = 0; i < NUM_LIGHTS; ++i) { this._lightTexture.buffer[this._lightTexture.bufferIndex(i, 0) + 0] = scene.lights[i].position[0]; @@ -47,6 +52,7 @@ export default class ForwardPlusRenderer extends BaseRenderer { this._lightTexture.buffer[this._lightTexture.bufferIndex(i, 1) + 1] = scene.lights[i].color[1]; this._lightTexture.buffer[this._lightTexture.bufferIndex(i, 1) + 2] = scene.lights[i].color[2]; } + // Update the light texture this._lightTexture.update(); @@ -77,6 +83,28 @@ export default class ForwardPlusRenderer extends BaseRenderer { // TODO: Bind any other shader inputs + // Pass viewMatrix to convert depth into camera space + gl.uniformMatrix4fv(this._shaderProgram.u_viewMatrix, false, this._viewMatrix); + + gl.uniform1f(this._shaderProgram.u_nearClip, camera.near); + gl.uniform1f(this._shaderProgram.u_farClip, camera.far); + + // These are really integers, but have to convert to float in the + // shader for math, so might as well make them a float here. + gl.uniform1f(this._shaderProgram.u_canvasHeight, canvas.height); + gl.uniform1f(this._shaderProgram.u_canvasWidth, canvas.width); + gl.uniform1f(this._shaderProgram.u_xSlices, this._xSlices); + gl.uniform1f(this._shaderProgram.u_ySlices, this._ySlices); + gl.uniform1f(this._shaderProgram.u_zSlices, this._zSlices); + + var width = this._xSlices * this._ySlices * this._zSlices; + var height = Math.ceil((MAX_LIGHTS_PER_CLUSTER + 1) / 4); + gl.uniform1i(this._shaderProgram.u_clusterTextureWidth, width); + gl.uniform1i(this._shaderProgram.u_clusterTextureHeight, height); + + // For Blinn-Phong + gl.uniform3fv(this._shaderProgram.u_cameraPosition, camera.position); + // Draw the scene. This function takes the shader program so that the model's textures can be bound to the right inputs scene.draw(this._shaderProgram); } diff --git a/src/renderers/textureBuffer.js b/src/renderers/textureBuffer.js index 8d97902..19ee005 100644 --- a/src/renderers/textureBuffer.js +++ b/src/renderers/textureBuffer.js @@ -6,6 +6,7 @@ export default class TextureBuffer { * @param {Number} elementCount The number of items in the buffer * @param {Number} elementSize The number of values in each item of the buffer */ + constructor(elementCount, elementSize) { // Initialize the texture. We use gl.NEAREST for texture filtering because we don't want to blend between values in the buffer. We want the exact value this._glTexture = gl.createTexture(); diff --git a/src/scene.js b/src/scene.js index 35f6700..a56196b 100644 --- a/src/scene.js +++ b/src/scene.js @@ -195,7 +195,6 @@ class Scene { gl.drawElements(model.gltf.mode, model.gltf.indices.length, model.gltf.indicesComponentType, 0); } } - } export default Scene; \ No newline at end of file diff --git a/src/shaders/deferred.frag.glsl.js b/src/shaders/deferred.frag.glsl.js index 50f1e75..0df7252 100644 --- a/src/shaders/deferred.frag.glsl.js +++ b/src/shaders/deferred.frag.glsl.js @@ -2,19 +2,157 @@ export default function(params) { return ` #version 100 precision highp float; - + uniform sampler2D u_gbuffers[${params.numGBuffers}]; - + varying vec2 v_uv; - + + uniform sampler2D u_lightbuffer; + uniform sampler2D u_clusterbuffer; + + uniform int u_clusterTextureWidth; + uniform int u_clusterTextureHeight; + + uniform float u_xSlices; + uniform float u_ySlices; + uniform float u_zSlices; + + uniform float u_nearClip; + uniform float u_farClip; + + uniform float u_canvasWidth; + uniform float u_canvasHeight; + + uniform mat4 u_viewMatrix; + + vec3 applyNormalMap(vec3 geomnor, vec3 normap) { + normap = normap * 2.0 - 1.0; + vec3 up = normalize(vec3(0.001, 1, 0.001)); + vec3 surftan = normalize(cross(geomnor, up)); + vec3 surfbinor = cross(geomnor, surftan); + return normap.y * surftan + normap.x * surfbinor + normap.z * geomnor; + } + + struct Light { + vec3 position; + float radius; + vec3 color; + }; + + // For the cluster texture, the width is the number of miniFrustums (aka clusters) and height is the + // number of pixels + float ExtractFloat(sampler2D texture, int textureWidth, int textureHeight, int index, int component) { + float u = float(index + 1) / float(textureWidth + 1); + int pixel = component / 4; + float v = float(pixel + 1) / float(textureHeight + 1); + vec4 texel = texture2D(texture, vec2(u, v)); + int pixelComponent = component - pixel * 4; + + if (pixelComponent == 0) { + return texel[0]; + } else if (pixelComponent == 1) { + return texel[1]; + } else if (pixelComponent == 2) { + return texel[2]; + } else if (pixelComponent == 3) { + return texel[3]; + } + } + + Light UnpackLight(int index) { + Light light; + float u = float(index + 1) / float(${params.numLights + 1}); + vec4 v1 = texture2D(u_lightbuffer, vec2(u, 0.3)); + vec4 v2 = texture2D(u_lightbuffer, vec2(u, 0.6)); + light.position = v1.xyz; + + // LOOK: This extracts the 4th float (radius) of the (index)th light in the buffer + // Note that this is just an example implementation to extract one float. + // There are more efficient ways if you need adjacent values + light.radius = ExtractFloat(u_lightbuffer, ${params.numLights}, 2, index, 3); + + light.color = v2.rgb; + return light; + } + + // Cubic approximation of gaussian curve so we falloff to exactly 0 at the light radius + float cubicGaussian(float h) { + if (h < 1.0) { + return 0.25 * pow(2.0 - h, 3.0) - pow(1.0 - h, 3.0); + } else if (h < 2.0) { + return 0.25 * pow(2.0 - h, 3.0); + } else { + return 0.0; + } + } + void main() { // TODO: extract data from g buffers and do lighting - // vec4 gb0 = texture2D(u_gbuffers[0], v_uv); - // vec4 gb1 = texture2D(u_gbuffers[1], v_uv); - // vec4 gb2 = texture2D(u_gbuffers[2], v_uv); - // vec4 gb3 = texture2D(u_gbuffers[3], v_uv); - gl_FragColor = vec4(v_uv, 0.0, 1.0); - } - `; -} \ No newline at end of file + // pos + vec4 gb0 = texture2D(u_gbuffers[0], v_uv); + + // col + vec4 gb1 = texture2D(u_gbuffers[1], v_uv); + + // norm + vec4 gb2 = texture2D(u_gbuffers[2], v_uv); + + // unused + vec4 gb3 = texture2D(u_gbuffers[3], v_uv); + + vec3 v_position = gb0.xyz; + vec3 albedo = gb1.rgb; + vec3 normal = gb2.xyz; + + // So the idea is to figure out which miniFrustum this fragment is inside + // and then only check against the lights associated with that miniFrustum + // Obtain pixel's camera space position + + // gl_FragCoord represents the pixel's position in screen space + // These are the same units as u_canvasWidth and u_canvasHeight, + // namely raw pixels. Dividing gives percent across the screen, + // which can be used in conjunction with numSlices to obtain coord. + + int x = int(float(gl_FragCoord.x) / u_canvasWidth * u_xSlices); + int y = int(float(gl_FragCoord.y) / u_canvasHeight * u_ySlices); + + vec4 fragPosInCameraCoords = u_viewMatrix * vec4(v_position, 1.0); + float fullDepth = u_farClip - u_nearClip; + float fragDepthInCameraCoords = fragPosInCameraCoords.z - u_nearClip; + int z = int(fragDepthInCameraCoords / fullDepth * u_zSlices); + + int miniFrustumIndex = x + y * int(u_xSlices) + z * int(u_xSlices) * int(u_ySlices); + + // ExtractFloat(sampler2D texture, int textureWidth, int textureHeight, int index, int component) + int miniFrustumNumLights = int(ExtractFloat(u_clusterbuffer, u_clusterTextureWidth, u_clusterTextureHeight, miniFrustumIndex, 0)); + + vec3 fragColor = vec3(0.0); + + // Cannot iterate over miniFrustumNumLights because + // ERROR: 0:125: 'i' : Loop index cannot be compared with non-constant expression + // We're still good to iterate over all lights, since no miniFrustum can have + // more than params.numLights lights. + for (int i = 0; i < ${params.numLights}; ++i) { + if (i > miniFrustumNumLights) { + break; + } + + int lightIndex = int(ExtractFloat(u_clusterbuffer, u_clusterTextureWidth, u_clusterTextureHeight, miniFrustumIndex, i+1)); + + Light light = UnpackLight(lightIndex); + float lightDistance = distance(light.position, v_position); + vec3 L = (light.position - v_position) / lightDistance; + + float lightIntensity = cubicGaussian(2.0 * lightDistance / light.radius); + float lambertTerm = max(dot(L, normal), 0.0); + + fragColor += albedo * lambertTerm * light.color * vec3(lightIntensity); + } + + const vec3 ambientLight = vec3(0.025); + fragColor += albedo * ambientLight; + + gl_FragColor = vec4(fragColor, 1.0); + }`; +} diff --git a/src/shaders/deferredToTexture.frag.glsl b/src/shaders/deferredToTexture.frag.glsl index bafc086..398feb9 100644 --- a/src/shaders/deferredToTexture.frag.glsl +++ b/src/shaders/deferredToTexture.frag.glsl @@ -22,8 +22,8 @@ void main() { vec3 col = vec3(texture2D(u_colmap, v_uv)); // TODO: populate your g buffer - // gl_FragData[0] = ?? - // gl_FragData[1] = ?? - // gl_FragData[2] = ?? - // gl_FragData[3] = ?? + gl_FragData[0] = vec4(v_position, 1.0); + gl_FragData[1] = vec4(col, 1.0); + gl_FragData[2] = vec4(norm, 1.0); + // gl_FragData[3] = ?? // depth buffer } \ No newline at end of file diff --git a/src/shaders/forward.frag.glsl.js b/src/shaders/forward.frag.glsl.js index 47f40a1..d5fd2ff 100644 --- a/src/shaders/forward.frag.glsl.js +++ b/src/shaders/forward.frag.glsl.js @@ -19,12 +19,6 @@ export default function(params) { return normap.y * surftan + normap.x * surfbinor + normap.z * geomnor; } - struct Light { - vec3 position; - float radius; - vec3 color; - }; - float ExtractFloat(sampler2D texture, int textureWidth, int textureHeight, int index, int component) { float u = float(index + 1) / float(textureWidth + 1); int pixel = component / 4; @@ -42,8 +36,15 @@ export default function(params) { } } + struct Light { + vec3 position; + float radius; + vec3 color; + }; + Light UnpackLight(int index) { Light light; + float u = float(index + 1) / float(${params.numLights + 1}); vec4 v1 = texture2D(u_lightbuffer, vec2(u, 0.0)); vec4 v2 = texture2D(u_lightbuffer, vec2(u, 0.5)); diff --git a/src/shaders/forwardPlus.frag.glsl.js b/src/shaders/forwardPlus.frag.glsl.js index 022fda7..ce2b54e 100644 --- a/src/shaders/forwardPlus.frag.glsl.js +++ b/src/shaders/forwardPlus.frag.glsl.js @@ -1,7 +1,5 @@ export default function(params) { return ` - // TODO: This is pretty much just a clone of forward.frag.glsl.js - #version 100 precision highp float; @@ -9,13 +7,29 @@ export default function(params) { uniform sampler2D u_normap; uniform sampler2D u_lightbuffer; - // TODO: Read this buffer to determine the lights influencing a cluster + // Read this buffer to determine the lights influencing a cluster uniform sampler2D u_clusterbuffer; + uniform int u_clusterTextureWidth; + uniform int u_clusterTextureHeight; + + uniform float u_xSlices; + uniform float u_ySlices; + uniform float u_zSlices; + + uniform float u_nearClip; + uniform float u_farClip; + + uniform float u_canvasWidth; + uniform float u_canvasHeight; + + uniform mat4 u_viewMatrix; varying vec3 v_position; varying vec3 v_normal; varying vec2 v_uv; + uniform vec3 u_cameraPosition; + vec3 applyNormalMap(vec3 geomnor, vec3 normap) { normap = normap * 2.0 - 1.0; vec3 up = normalize(vec3(0.001, 1, 0.001)); @@ -30,12 +44,15 @@ export default function(params) { vec3 color; }; + // For the cluster texture, the width is the number of miniFrustums (aka clusters) and height is the + // number of pixels float ExtractFloat(sampler2D texture, int textureWidth, int textureHeight, int index, int component) { float u = float(index + 1) / float(textureWidth + 1); int pixel = component / 4; float v = float(pixel + 1) / float(textureHeight + 1); vec4 texel = texture2D(texture, vec2(u, v)); int pixelComponent = component - pixel * 4; + if (pixelComponent == 0) { return texel[0]; } else if (pixelComponent == 1) { @@ -79,23 +96,55 @@ export default function(params) { vec3 normap = texture2D(u_normap, v_uv).xyz; vec3 normal = applyNormalMap(v_normal, normap); + vec3 diffuseColor = albedo; + + // So the idea is to figure out which miniFrustum this fragment is inside + // and then only check against the lights associated with that miniFrustum. + // gl_FragCoord represents the pixel's position in screen space. + // These are the same units as u_canvasWidth and u_canvasHeight, + // namely raw pixels. Dividing gives percent across the screen, + // which can be used in conjunction with numSlices to obtain coord. + + int x = int(float(gl_FragCoord.x) / u_canvasWidth * u_xSlices); + int y = int(float(gl_FragCoord.y) / u_canvasHeight * u_ySlices); + + vec4 fragPosInCameraCoords = u_viewMatrix * vec4(v_position, 1.0); + float fragDepthInCameraCoords = fragPosInCameraCoords.z - u_nearClip; + + float fullDepth = u_farClip - u_nearClip; + int z = int(fragDepthInCameraCoords / fullDepth * u_zSlices); + + int miniFrustumIndex = x + y * int(u_xSlices) + z * int(u_xSlices) * int(u_ySlices); + int miniFrustumNumLights = int(ExtractFloat(u_clusterbuffer, u_clusterTextureWidth, u_clusterTextureHeight, miniFrustumIndex, 0)); + vec3 fragColor = vec3(0.0); + // Cannot iterate over miniFrustumNumLights because + // ERROR: 0:125: 'i' : Loop index cannot be compared with non-constant expression + // We're still good to iterate over all lights, since no miniFrustum can have + // more than params.numLights lights. for (int i = 0; i < ${params.numLights}; ++i) { - Light light = UnpackLight(i); + if (i > miniFrustumNumLights) { + break; + } + + int lightIndex = int(ExtractFloat(u_clusterbuffer, u_clusterTextureWidth, u_clusterTextureHeight, miniFrustumIndex, i+1)); + + Light light = UnpackLight(lightIndex); float lightDistance = distance(light.position, v_position); vec3 L = (light.position - v_position) / lightDistance; float lightIntensity = cubicGaussian(2.0 * lightDistance / light.radius); float lambertTerm = max(dot(L, normal), 0.0); - fragColor += albedo * lambertTerm * light.color * vec3(lightIntensity); - } + float diffuseTerm = clamp(dot(normalize(normal), normalize(L)), 0.0, 1.0); + + float shininessExponent = 50.0; + float specularIntensity = max(pow(dot(normalize((u_cameraPosition + L) / 2.0), normal), shininessExponent), 0.0); - const vec3 ambientLight = vec3(0.025); - fragColor += albedo * ambientLight; + fragColor += albedo * lambertTerm * light.color * vec3(lightIntensity) + specularIntensity; + } gl_FragColor = vec4(fragColor, 1.0); - } - `; + }`; } diff --git a/src/utils.js b/src/utils.js index 5cc3bec..e3c0798 100644 --- a/src/utils.js +++ b/src/utils.js @@ -40,27 +40,30 @@ function linkShader(vs, fs) { function addShaderLocations(result, shaderLocations) { if (shaderLocations && shaderLocations.uniforms && shaderLocations.uniforms.length) { for (let i = 0; i < shaderLocations.uniforms.length; ++i) { - result = Object.assign(result, { + Object.assign(result, { [shaderLocations.uniforms[i]]: gl.getUniformLocation(result.glShaderProgram, shaderLocations.uniforms[i]), }); } } + if (shaderLocations && shaderLocations.attribs && shaderLocations.attribs.length) { for (let i = 0; i < shaderLocations.attribs.length; ++i) { - result = Object.assign(result, { + Object.assign(result, { [shaderLocations.attribs[i]]: gl.getAttribLocation(result.glShaderProgram, shaderLocations.attribs[i]), }); } } + return result; } +// So this is returning an object containing the actual shader program, along with +// mapping from uniform and attrib names to the pointer to those things on the GPU. export function loadShaderProgram(vsSource, fsSource, shaderLocations) { const vs = compileShader(vsSource, gl.VERTEX_SHADER); const fs = compileShader(fsSource, gl.FRAGMENT_SHADER); - return addShaderLocations({ - glShaderProgram: linkShader(vs, fs), - }, shaderLocations); + + return addShaderLocations({ glShaderProgram: linkShader(vs, fs) }, shaderLocations); } const quadPositions = new Float32Array([