From 7a0b544d0310578ef408a4eb08ceab8c360ed2d2 Mon Sep 17 00:00:00 2001 From: Natacha Beck Date: Fri, 7 Oct 2016 10:57:40 -0400 Subject: [PATCH] Release 2.5.2 --- .../brainbrowser.surface-viewer.min.js | 47 ++++++++++++++++++ .../brainbrowser.volume-viewer.min.js | 35 +++++++++++++ .../workers/deindex.worker.js | 32 ++++++++++++ .../workers/freesurferasc.intensity.worker.js | 32 ++++++++++++ .../workers/freesurferasc.worker.js | 32 ++++++++++++ .../workers/freesurferbin.intensity.worker.js | 32 ++++++++++++ .../workers/freesurferbin.worker.js | 32 ++++++++++++ .../brainbrowser-2.5.2/workers/json.worker.js | 32 ++++++++++++ .../workers/mniobj.worker.js | 32 ++++++++++++ .../workers/text.intensity.worker.js | 32 ++++++++++++ .../workers/wavefrontobj.worker.js | 32 ++++++++++++ .../workers/wireframe.worker.js | 32 ++++++++++++ package.json | 2 +- release/brainbrowser-2.5.2.tar.gz | Bin 0 -> 199525 bytes 14 files changed, 403 insertions(+), 1 deletion(-) create mode 100644 build/brainbrowser-2.5.2/brainbrowser.surface-viewer.min.js create mode 100644 build/brainbrowser-2.5.2/brainbrowser.volume-viewer.min.js create mode 100644 build/brainbrowser-2.5.2/workers/deindex.worker.js create mode 100644 build/brainbrowser-2.5.2/workers/freesurferasc.intensity.worker.js create mode 100644 build/brainbrowser-2.5.2/workers/freesurferasc.worker.js create mode 100644 build/brainbrowser-2.5.2/workers/freesurferbin.intensity.worker.js create mode 100644 build/brainbrowser-2.5.2/workers/freesurferbin.worker.js create mode 100644 build/brainbrowser-2.5.2/workers/json.worker.js create mode 100644 build/brainbrowser-2.5.2/workers/mniobj.worker.js create mode 100644 build/brainbrowser-2.5.2/workers/text.intensity.worker.js create mode 100644 build/brainbrowser-2.5.2/workers/wavefrontobj.worker.js create mode 100644 build/brainbrowser-2.5.2/workers/wireframe.worker.js create mode 100644 release/brainbrowser-2.5.2.tar.gz diff --git a/build/brainbrowser-2.5.2/brainbrowser.surface-viewer.min.js b/build/brainbrowser-2.5.2/brainbrowser.surface-viewer.min.js new file mode 100644 index 00000000..ffe3789d --- /dev/null +++ b/build/brainbrowser-2.5.2/brainbrowser.surface-viewer.min.js @@ -0,0 +1,47 @@ +/* +* BrainBrowser: Web-based Neurological Visualization Tools +* (https://brainbrowser.cbrain.mcgill.ca) +* +* Copyright (C) 2011 +* The Royal Institution for the Advancement of Learning +* McGill University +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Affero General Public License as +* published by the Free Software Foundation, either version 3 of the +* License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Affero General Public License for more details. +* +* You should have received a copy of the GNU Affero General Public License +* along with this program. If not, see . +*/ + +/* +* BrainBrowser v2.5.2 +* +* Author: Tarek Sherif (http://tareksherif.ca/) +* Author: Nicolas Kassis +* Author: Paul Mougel +* +* three.js (c) 2010-2014 three.js authors, used under the MIT license +*/ +!function(){"use strict";function a(a){var b=!1,c=!1,d=!1,e=!1,f=document.createElement("canvas"),g=null;b=!!f,c=!!window.Worker;try{f&&window.WebGLRenderingContext&&(g=f.getContext("webgl")||f.getContext("experimental-webgl")),d=!!g}catch(h){d=!1}d&&(e=!!g.getExtension("OES_element_index_uint")),a.CANVAS_ENABLED=b,a.WEB_WORKERS_ENABLED=c,a.WEBGL_ENABLED=d,a.WEBGL_UINT_INDEX_ENABLED=e}var b="2.5.2";b=b.indexOf("BRAINBROWSER_VERSION")>0?"D.E.V":b;var c=window.BrainBrowser={version:b};a(c),window.requestAnimationFrame=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a){return window.setTimeout(a,1e3/60)},window.cancelAnimationFrame=window.cancelAnimationFrame||function(a){window.clearTimeout(a)}}(),function(){"use strict";function a(b,c,d,e){return c>d?e(b):void Object.keys(b).forEach(function(f){a(b[f],c+1,d,e)})}BrainBrowser.createTreeStore=function(){var b={};return{set:function(){var a,c,d,e,f=arguments[arguments.length-1],g=Array.prototype.slice.call(arguments,0,arguments.length-1),h=b;for(c=0,d=g.length-1;d>c;c++){if(a=g[c],h[a]&&"object"!=typeof h[a])throw e="Hash key '["+g.slice(0,c+1).join("][")+"]' has already been set to a non-object value.\nCannot set '["+g.join("][")+"]'",BrainBrowser.events.triggerEvent("error",{message:e}),new Error(e);h[a]||(h[a]={}),h=h[a]}a=g[c],h[a]=f},get:function(){var a,c,d,e=Array.prototype.slice.call(arguments),f=b;if(0===e.length)return b;for(c=0,d=e.length-1;d>c;c++){if(a=e[c],void 0===f[a])return null;f=f[a]}return a=e[c],void 0!==f[a]?f[a]:null},remove:function(){var a,c,d,e,f=Array.prototype.slice.call(arguments),g=b;for(c=0,d=f.length-1;d>c;c++){if(a=f[c],void 0===g[a])return null;g=g[a]}return a=f[c],e=g[a],g[a]=void 0,e},reset:function(a){a=a&&"object"==typeof a?a:{},b=a},forEach:function(c,d){c=c>0?c:1,a(b,1,c,d)}}}}(),function(){"use strict";BrainBrowser.createColorMap=function(a,b){function c(a,b,c,d,e,f,g){var h;return(b>a||a>c)&&!e?-1:(h=Math.floor(Math.max(0,Math.min((a-b)*d,g-1))),f&&(h=g-1-h),h*=4)}function d(a,b,c){var d,e,f,g=document.createElement("canvas"),h=new Array(256);for(g.width=256,g.height=c,d=0;256>d;d++)h[d]=d;for(f=r.scale,r.scale=255,a=r.mapColors(h),r.scale=f,e=g.getContext("2d"),d=0;256>d;d++)e.fillStyle="rgb("+Math.floor(a[4*d])+", "+Math.floor(a[4*d+1])+", "+Math.floor(a[4*d+2])+")",e.fillRect(d,0,1,b);return g}b=b||{};var e,f,g,h,i,j,k,l,m=void 0===b.clamp?!0:b.clamp,n=b.flip||!1,o=b.scale||1,p=b.contrast||1,q=b.brightness||0;if(a)for(f=a.trim().split(/\n/),e=new Float32Array(4*f.length),k=0,i=0,g=f.length;g>i;i++)if(l=f[i].trim().split(/\s+/).slice(0,4),h=l.length,!(3>h)){for(j=0;h>j;j++)e[k+j]=parseFloat(l[j]);4>h&&(e[k+3]=1),k+=4}var r={colors:e,clamp:m,flip:n,scale:o,contrast:p,brightness:q,mapColors:function(a,b){b=b||{};var d,e,f,g,h,i,j=void 0===b.min?0:b.min,k=void 0===b.max?255:b.max,l=b.default_colors||[0,0,0,1],m=b.destination||new Float32Array(4*a.length),n=r.colors,o=r.colors.length/4,p=void 0===b.scale?r.scale:b.scale,q=void 0===b.clamp?r.clamp:b.clamp,s=void 0===b.flip?r.flip:b.flip,t=void 0===b.brightness?r.brightness:b.brightness,u=void 0===b.contrast?r.contrast:b.contrast,v=4===l.length?0:1,w=k-j,x=o/w;for(t*=p,u*=p,e=0,h=a.length;h>e;e++)d=a[e],f=4*e,i=c(d,j,k,x,q,s,o),0>i?(g=f*v,m[f]=u*l[g]+t,m[f+1]=u*l[g+1]+t,m[f+2]=u*l[g+2]+t,m[f+3]=p*l[g+3]):(m[f]=u*n[i]+t,m[f+1]=u*n[i+1]+t,m[f+2]=u*n[i+2]+t,m[f+3]=p*n[i+3]);return m},colorFromValue:function(a,b){b=b||{};var d,e=b.hex||!1,f=void 0===b.min?0:b.min,g=void 0===b.max?255:b.max,h=void 0===b.scale?r.scale:b.scale,i=void 0===b.brightness?r.brightness:b.brightness,j=void 0===b.contrast?r.contrast:b.contrast,k=g-f,l=r.colors.length/4,m=l/k,n=c(a,f,g,m,r.clamp,r.flip,l);return d=n>=0?Array.prototype.slice.call(r.colors,n,n+4):[0,0,0,1],d[0]=Math.max(0,Math.min(j*d[0]+i,1)),d[1]=Math.max(0,Math.min(j*d[1]+i,1)),d[2]=Math.max(0,Math.min(j*d[2]+i,1)),e?(d[0]=Math.floor(255*d[0]),d[1]=Math.floor(255*d[1]),d[2]=Math.floor(255*d[2]),d[3]=Math.floor(255*d[3]),d[0]=("0"+d[0].toString(16)).slice(-2),d[1]=("0"+d[1].toString(16)).slice(-2),d[2]=("0"+d[2].toString(16)).slice(-2),d=d.slice(0,3).join("")):(d[0]=d[0]*h,d[1]=d[1]*h,d[2]=d[2]*h,d[3]=d[3]*h),d},createElement:function(a,b){var c,e,f=r.colors,g=b-a;return c=d(f,20,40,n),e=c.getContext("2d"),e.fillStyle="#FFA000",e.fillRect(.5,20,1,10),e.fillText(a.toPrecision(3),.5,40),e.fillRect(c.width/4,20,1,10),e.fillText((a+.25*g).toPrecision(3),.25*c.width,40),e.fillRect(c.width/2,20,1,10),e.fillText((a+.5*g).toPrecision(3),.5*c.width,40),e.fillRect(3*c.width/4,20,1,10),e.fillText((a+.75*g).toPrecision(3),.75*c.width,40),e.fillRect(c.width-.5,20,1,10),e.fillText(b.toPrecision(3),c.width-20,40),c}};return r}}(),function(){"use strict";var a=BrainBrowser.createTreeStore();BrainBrowser.config={set:function(b,c){b=b||"";var d=b.split(".");d.push(c),a.set.apply(a,d)},get:function(b){b=b||"";var c=b.split(".");return a.get.apply(a,c)}}}(),function(){"use strict";function a(a,b){try{a.call(b.target,b)}catch(c){console.error("Error in event handler for: ",b.name),console.error(c.stack||c.message||c)}}var b=["eventmodelcleanup"];BrainBrowser.events={unpropagatedEvent:function(a){b.push(a)},addEventModel:function(c){var d=[],e={};c.addEventListener=function(a,b){d[a]||(d[a]=[]),d[a].push(b)},c.triggerEvent=function(e,f){var g=this,h=c.directPropagationTargets(e);f=f||{},f.name=e,f.target=g,d[e]&&d[e].forEach(function(b){a(b,f)}),d["*"]&&d["*"].forEach(function(b){a(b,f)}),-1===b.indexOf(e)&&(h.forEach(function(a){a.triggerEvent.call(g,e,f)}),0===h.length&&c!==BrainBrowser.events&&BrainBrowser.events.triggerEvent.call(g,e,f))},c.propagateEventTo=function(a,b){if(!BrainBrowser.utils.isFunction(b.allPropagationTargets))throw new Error("Propagation target doesn't seem to have an event model.");if(c===BrainBrowser.events||-1!==b.allPropagationTargets(a).indexOf(c))throw new Error("Propagating event '"+a+"' would cause a cycle.");e[a]=e[a]||[],-1===c.directPropagationTargets().indexOf(b)&&b.addEventListener("eventmodelcleanup",function(){this===b&&c.stopPropagatingTo(b)}),-1===e[a].indexOf(b)&&e[a].push(b)},c.propagateEventFrom=function(a,b){b.propagateEventTo(a,c)},c.stopPropagatingTo=function(a){Object.keys(e).forEach(function(b){e[b]=e[b].filter(function(b){return b!==a})})},c.directPropagationTargets=function(a){var b=[],c=void 0===a?Object.keys(e):[a,"*"];return c.forEach(function(a){var c=e[a]||[];c.forEach(function(a){-1===b.indexOf(a)&&b.push(a)})}),b},c.allPropagationTargets=function(a){var b=c.directPropagationTargets(a),d=Array.prototype.slice.call(b);return b.forEach(function(b){b.allPropagationTargets(a).forEach(function(a){-1===d.indexOf(a)&&d.push(a)})}),d}}},BrainBrowser.events.addEventModel(BrainBrowser.events)}(),function(){"use strict";var a=BrainBrowser.loader={loadFromURL:function(b,c,d){d=d||{};var e,f=new XMLHttpRequest,g=d.result_type,h=b.split("/"),i=h[h.length-1];f.open("GET",b),"arraybuffer"===g&&(f.responseType="arraybuffer"),f.onreadystatechange=function(){if(4===f.readyState){if(e=f.status,!(e>=200&&300>e||304===e)){var g="error loading URL: "+b+"\nHTTP Response: "+f.status+"\nHTTP Status: "+f.statusText+"\nResponse was: \n"+f.response;throw BrainBrowser.events.triggerEvent("error",{message:g}),new Error(g)}a.checkCancel(d)||c(f.response,i,d)}},f.send()},loadFromFile:function(a,b,c){var d=a.files;if(0!==d.length){c=c||{};var e=c.result_type,f=new FileReader,g=a.value.split("\\"),h=g[g.length-1];f.file=d[0],f.onloadend=function(a){var d=a.target.result;try{var f=pako.inflate(d);d=f.buffer}catch(g){}finally{if("arraybuffer"!==e)if("function"!=typeof TextDecoder){var i=new Blob([d]),j=new FileReader;j.onload=function(a){b(a.target.result,h,c)},j.readAsText(i)}else{var k=new DataView(d),l=new TextDecoder;d=l.decode(k),b(d,h,c)}else b(d,h,c)}},f.onerror=function(){var a="error reading file: "+h;throw BrainBrowser.events.triggerEvent("error",{message:a}),new Error(a)},f.readAsArrayBuffer(d[0])}},loadColorMapFromURL:function(b,c,d){a.loadFromURL(b,function(a,b,d){c(BrainBrowser.createColorMap(a,d),b,d)},d)},loadColorMapFromFile:function(b,c,d){a.loadFromFile(b,function(a,b,d){c(BrainBrowser.createColorMap(a,d),b,d)},d)},checkCancel:function(a){a=a||{},BrainBrowser.utils.isFunction(a)&&(a={test:a});var b=a.test,c=a.cleanup,d=!1;return b&&b()&&(d=!0,c&&c()),d}}}(),function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.pako=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g0?b.windowBits=-b.windowBits:b.gzip&&b.windowBits>0&&b.windowBits<16&&(b.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new l,this.strm.avail_out=0;var c=h.deflateInit2(this.strm,b.level,b.method,b.windowBits,b.memLevel,b.strategy);if(c!==p)throw new Error(k[c]);if(b.header&&h.deflateSetHeader(this.strm,b.header),b.dictionary){var e;if(e="string"==typeof b.dictionary?j.string2buf(b.dictionary):"[object ArrayBuffer]"===m.call(b.dictionary)?new Uint8Array(b.dictionary):b.dictionary,c=h.deflateSetDictionary(this.strm,e),c!==p)throw new Error(k[c]);this._dict_set=!0}}function e(a,b){var c=new d(b);if(c.push(a,!0),c.err)throw c.msg;return c.result}function f(a,b){return b=b||{},b.raw=!0,e(a,b)}function g(a,b){return b=b||{},b.gzip=!0,e(a,b)}var h=a("./zlib/deflate"),i=a("./utils/common"),j=a("./utils/strings"),k=a("./zlib/messages"),l=a("./zlib/zstream"),m=Object.prototype.toString,n=0,o=4,p=0,q=1,r=2,s=-1,t=0,u=8;d.prototype.push=function(a,b){var c,d,e=this.strm,f=this.options.chunkSize;if(this.ended)return!1;d=b===~~b?b:b===!0?o:n,"string"==typeof a?e.input=j.string2buf(a):"[object ArrayBuffer]"===m.call(a)?e.input=new Uint8Array(a):e.input=a,e.next_in=0,e.avail_in=e.input.length;do{if(0===e.avail_out&&(e.output=new i.Buf8(f),e.next_out=0,e.avail_out=f),c=h.deflate(e,d),c!==q&&c!==p)return this.onEnd(c),this.ended=!0,!1;(0===e.avail_out||0===e.avail_in&&(d===o||d===r))&&("string"===this.options.to?this.onData(j.buf2binstring(i.shrinkBuf(e.output,e.next_out))):this.onData(i.shrinkBuf(e.output,e.next_out)))}while((e.avail_in>0||0===e.avail_out)&&c!==q);return d===o?(c=h.deflateEnd(this.strm),this.onEnd(c),this.ended=!0,c===p):d===r?(this.onEnd(p),e.avail_out=0,!0):!0},d.prototype.onData=function(a){this.chunks.push(a)},d.prototype.onEnd=function(a){a===p&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=i.flattenChunks(this.chunks)),this.chunks=[],this.err=a,this.msg=this.strm.msg},c.Deflate=d,c.deflate=e,c.deflateRaw=f,c.gzip=g},{"./utils/common":3,"./utils/strings":4,"./zlib/deflate":8,"./zlib/messages":13,"./zlib/zstream":15}],2:[function(a,b,c){"use strict";function d(a){if(!(this instanceof d))return new d(a);this.options=h.assign({chunkSize:16384,windowBits:0,to:""},a||{});var b=this.options;b.raw&&b.windowBits>=0&&b.windowBits<16&&(b.windowBits=-b.windowBits,0===b.windowBits&&(b.windowBits=-15)),!(b.windowBits>=0&&b.windowBits<16)||a&&a.windowBits||(b.windowBits+=32),b.windowBits>15&&b.windowBits<48&&0===(15&b.windowBits)&&(b.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new l,this.strm.avail_out=0;var c=g.inflateInit2(this.strm,b.windowBits);if(c!==j.Z_OK)throw new Error(k[c]);this.header=new m,g.inflateGetHeader(this.strm,this.header)}function e(a,b){var c=new d(b);if(c.push(a,!0),c.err)throw c.msg;return c.result}function f(a,b){return b=b||{},b.raw=!0,e(a,b)}var g=a("./zlib/inflate"),h=a("./utils/common"),i=a("./utils/strings"),j=a("./zlib/constants"),k=a("./zlib/messages"),l=a("./zlib/zstream"),m=a("./zlib/gzheader"),n=Object.prototype.toString;d.prototype.push=function(a,b){var c,d,e,f,k,l,m=this.strm,o=this.options.chunkSize,p=this.options.dictionary,q=!1;if(this.ended)return!1;d=b===~~b?b:b===!0?j.Z_FINISH:j.Z_NO_FLUSH,"string"==typeof a?m.input=i.binstring2buf(a):"[object ArrayBuffer]"===n.call(a)?m.input=new Uint8Array(a):m.input=a,m.next_in=0,m.avail_in=m.input.length;do{if(0===m.avail_out&&(m.output=new h.Buf8(o),m.next_out=0,m.avail_out=o),c=g.inflate(m,j.Z_NO_FLUSH),c===j.Z_NEED_DICT&&p&&(l="string"==typeof p?i.string2buf(p):"[object ArrayBuffer]"===n.call(p)?new Uint8Array(p):p,c=g.inflateSetDictionary(this.strm,l)),c===j.Z_BUF_ERROR&&q===!0&&(c=j.Z_OK,q=!1),c!==j.Z_STREAM_END&&c!==j.Z_OK)return this.onEnd(c),this.ended=!0,!1;m.next_out&&(0===m.avail_out||c===j.Z_STREAM_END||0===m.avail_in&&(d===j.Z_FINISH||d===j.Z_SYNC_FLUSH))&&("string"===this.options.to?(e=i.utf8border(m.output,m.next_out),f=m.next_out-e,k=i.buf2string(m.output,e),m.next_out=f,m.avail_out=o-f,f&&h.arraySet(m.output,m.output,e,f,0),this.onData(k)):this.onData(h.shrinkBuf(m.output,m.next_out))),0===m.avail_in&&0===m.avail_out&&(q=!0)}while((m.avail_in>0||0===m.avail_out)&&c!==j.Z_STREAM_END);return c===j.Z_STREAM_END&&(d=j.Z_FINISH),d===j.Z_FINISH?(c=g.inflateEnd(this.strm),this.onEnd(c),this.ended=!0,c===j.Z_OK):d===j.Z_SYNC_FLUSH?(this.onEnd(j.Z_OK),m.avail_out=0,!0):!0},d.prototype.onData=function(a){this.chunks.push(a)},d.prototype.onEnd=function(a){a===j.Z_OK&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=h.flattenChunks(this.chunks)),this.chunks=[],this.err=a,this.msg=this.strm.msg},c.Inflate=d,c.inflate=e,c.inflateRaw=f,c.ungzip=e},{"./utils/common":3,"./utils/strings":4,"./zlib/constants":6,"./zlib/gzheader":9,"./zlib/inflate":11,"./zlib/messages":13,"./zlib/zstream":15}],3:[function(a,b,c){"use strict";var d="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;c.assign=function(a){for(var b=Array.prototype.slice.call(arguments,1);b.length;){var c=b.shift();if(c){if("object"!=typeof c)throw new TypeError(c+"must be non-object");for(var d in c)c.hasOwnProperty(d)&&(a[d]=c[d])}}return a},c.shrinkBuf=function(a,b){return a.length===b?a:a.subarray?a.subarray(0,b):(a.length=b,a)};var e={arraySet:function(a,b,c,d,e){if(b.subarray&&a.subarray)return void a.set(b.subarray(c,c+d),e);for(var f=0;d>f;f++)a[e+f]=b[c+f]},flattenChunks:function(a){var b,c,d,e,f,g;for(d=0,b=0,c=a.length;c>b;b++)d+=a[b].length;for(g=new Uint8Array(d),e=0,b=0,c=a.length;c>b;b++)f=a[b],g.set(f,e),e+=f.length;return g}},f={arraySet:function(a,b,c,d,e){for(var f=0;d>f;f++)a[e+f]=b[c+f]},flattenChunks:function(a){return[].concat.apply([],a)}};c.setTyped=function(a){a?(c.Buf8=Uint8Array,c.Buf16=Uint16Array,c.Buf32=Int32Array,c.assign(c,e)):(c.Buf8=Array,c.Buf16=Array,c.Buf32=Array,c.assign(c,f))},c.setTyped(d)},{}],4:[function(a,b,c){"use strict";function d(a,b){if(65537>b&&(a.subarray&&g||!a.subarray&&f))return String.fromCharCode.apply(null,e.shrinkBuf(a,b));for(var c="",d=0;b>d;d++)c+=String.fromCharCode(a[d]);return c}var e=a("./common"),f=!0,g=!0;try{String.fromCharCode.apply(null,[0])}catch(h){f=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(h){g=!1}for(var i=new e.Buf8(256),j=0;256>j;j++)i[j]=j>=252?6:j>=248?5:j>=240?4:j>=224?3:j>=192?2:1;i[254]=i[254]=1,c.string2buf=function(a){var b,c,d,f,g,h=a.length,i=0;for(f=0;h>f;f++)c=a.charCodeAt(f),55296===(64512&c)&&h>f+1&&(d=a.charCodeAt(f+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),f++)),i+=128>c?1:2048>c?2:65536>c?3:4;for(b=new e.Buf8(i),g=0,f=0;i>g;f++)c=a.charCodeAt(f),55296===(64512&c)&&h>f+1&&(d=a.charCodeAt(f+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),f++)),128>c?b[g++]=c:2048>c?(b[g++]=192|c>>>6,b[g++]=128|63&c):65536>c?(b[g++]=224|c>>>12,b[g++]=128|c>>>6&63,b[g++]=128|63&c):(b[g++]=240|c>>>18,b[g++]=128|c>>>12&63,b[g++]=128|c>>>6&63,b[g++]=128|63&c);return b},c.buf2binstring=function(a){return d(a,a.length)},c.binstring2buf=function(a){for(var b=new e.Buf8(a.length),c=0,d=b.length;d>c;c++)b[c]=a.charCodeAt(c);return b},c.buf2string=function(a,b){var c,e,f,g,h=b||a.length,j=new Array(2*h);for(e=0,c=0;h>c;)if(f=a[c++],128>f)j[e++]=f;else if(g=i[f],g>4)j[e++]=65533,c+=g-1;else{for(f&=2===g?31:3===g?15:7;g>1&&h>c;)f=f<<6|63&a[c++],g--;g>1?j[e++]=65533:65536>f?j[e++]=f:(f-=65536,j[e++]=55296|f>>10&1023,j[e++]=56320|1023&f)}return d(j,e)},c.utf8border=function(a,b){var c;for(b=b||a.length,b>a.length&&(b=a.length),c=b-1;c>=0&&128===(192&a[c]);)c--;return 0>c?b:0===c?b:c+i[a[c]]>b?c:b}},{"./common":3}],5:[function(a,b,c){"use strict";function d(a,b,c,d){for(var e=65535&a|0,f=a>>>16&65535|0,g=0;0!==c;){g=c>2e3?2e3:c,c-=g;do e=e+b[d++]|0,f=f+e|0;while(--g);e%=65521,f%=65521}return e|f<<16|0}b.exports=d},{}],6:[function(a,b,c){"use strict";b.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],7:[function(a,b,c){"use strict";function d(){for(var a,b=[],c=0;256>c;c++){a=c;for(var d=0;8>d;d++)a=1&a?3988292384^a>>>1:a>>>1;b[c]=a}return b}function e(a,b,c,d){var e=f,g=d+c;a^=-1;for(var h=d;g>h;h++)a=a>>>8^e[255&(a^b[h])];return-1^a}var f=d();b.exports=e},{}],8:[function(a,b,c){"use strict";function d(a,b){return a.msg=I[b],b}function e(a){return(a<<1)-(a>4?9:0)}function f(a){for(var b=a.length;--b>=0;)a[b]=0}function g(a){var b=a.state,c=b.pending;c>a.avail_out&&(c=a.avail_out),0!==c&&(E.arraySet(a.output,b.pending_buf,b.pending_out,c,a.next_out),a.next_out+=c,b.pending_out+=c,a.total_out+=c,a.avail_out-=c,b.pending-=c,0===b.pending&&(b.pending_out=0))}function h(a,b){F._tr_flush_block(a,a.block_start>=0?a.block_start:-1,a.strstart-a.block_start,b),a.block_start=a.strstart,g(a.strm)}function i(a,b){a.pending_buf[a.pending++]=b}function j(a,b){a.pending_buf[a.pending++]=b>>>8&255,a.pending_buf[a.pending++]=255&b}function k(a,b,c,d){var e=a.avail_in;return e>d&&(e=d),0===e?0:(a.avail_in-=e,E.arraySet(b,a.input,a.next_in,e,c),1===a.state.wrap?a.adler=G(a.adler,b,e,c):2===a.state.wrap&&(a.adler=H(a.adler,b,e,c)),a.next_in+=e,a.total_in+=e,e)}function l(a,b){var c,d,e=a.max_chain_length,f=a.strstart,g=a.prev_length,h=a.nice_match,i=a.strstart>a.w_size-la?a.strstart-(a.w_size-la):0,j=a.window,k=a.w_mask,l=a.prev,m=a.strstart+ka,n=j[f+g-1],o=j[f+g];a.prev_length>=a.good_match&&(e>>=2),h>a.lookahead&&(h=a.lookahead);do if(c=b,j[c+g]===o&&j[c+g-1]===n&&j[c]===j[f]&&j[++c]===j[f+1]){f+=2,c++;do;while(j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&m>f);if(d=ka-(m-f),f=m-ka,d>g){if(a.match_start=b,g=d,d>=h)break;n=j[f+g-1],o=j[f+g]}}while((b=l[b&k])>i&&0!==--e);return g<=a.lookahead?g:a.lookahead}function m(a){var b,c,d,e,f,g=a.w_size;do{if(e=a.window_size-a.lookahead-a.strstart,a.strstart>=g+(g-la)){E.arraySet(a.window,a.window,g,g,0),a.match_start-=g,a.strstart-=g,a.block_start-=g,c=a.hash_size,b=c;do d=a.head[--b],a.head[b]=d>=g?d-g:0;while(--c);c=g,b=c;do d=a.prev[--b],a.prev[b]=d>=g?d-g:0;while(--c);e+=g}if(0===a.strm.avail_in)break;if(c=k(a.strm,a.window,a.strstart+a.lookahead,e),a.lookahead+=c,a.lookahead+a.insert>=ja)for(f=a.strstart-a.insert,a.ins_h=a.window[f],a.ins_h=(a.ins_h<a.pending_buf_size-5&&(c=a.pending_buf_size-5);;){if(a.lookahead<=1){if(m(a),0===a.lookahead&&b===J)return ua;if(0===a.lookahead)break}a.strstart+=a.lookahead,a.lookahead=0;var d=a.block_start+c;if((0===a.strstart||a.strstart>=d)&&(a.lookahead=a.strstart-d,a.strstart=d,h(a,!1),0===a.strm.avail_out))return ua;if(a.strstart-a.block_start>=a.w_size-la&&(h(a,!1),0===a.strm.avail_out))return ua}return a.insert=0,b===M?(h(a,!0),0===a.strm.avail_out?wa:xa):a.strstart>a.block_start&&(h(a,!1),0===a.strm.avail_out)?ua:ua}function o(a,b){for(var c,d;;){if(a.lookahead=ja&&(a.ins_h=(a.ins_h<=ja)if(d=F._tr_tally(a,a.strstart-a.match_start,a.match_length-ja),a.lookahead-=a.match_length,a.match_length<=a.max_lazy_match&&a.lookahead>=ja){a.match_length--;do a.strstart++,a.ins_h=(a.ins_h<=ja&&(a.ins_h=(a.ins_h<4096)&&(a.match_length=ja-1)),a.prev_length>=ja&&a.match_length<=a.prev_length){e=a.strstart+a.lookahead-ja,d=F._tr_tally(a,a.strstart-1-a.prev_match,a.prev_length-ja),a.lookahead-=a.prev_length-1,a.prev_length-=2;do++a.strstart<=e&&(a.ins_h=(a.ins_h<=ja&&a.strstart>0&&(e=a.strstart-1,d=g[e],d===g[++e]&&d===g[++e]&&d===g[++e])){f=a.strstart+ka;do;while(d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&f>e);a.match_length=ka-(f-e),a.match_length>a.lookahead&&(a.match_length=a.lookahead)}if(a.match_length>=ja?(c=F._tr_tally(a,1,a.match_length-ja),a.lookahead-=a.match_length,a.strstart+=a.match_length,a.match_length=0):(c=F._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++),c&&(h(a,!1),0===a.strm.avail_out))return ua}return a.insert=0,b===M?(h(a,!0),0===a.strm.avail_out?wa:xa):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?ua:va}function r(a,b){for(var c;;){if(0===a.lookahead&&(m(a),0===a.lookahead)){if(b===J)return ua;break}if(a.match_length=0,c=F._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++,c&&(h(a,!1),0===a.strm.avail_out))return ua}return a.insert=0,b===M?(h(a,!0),0===a.strm.avail_out?wa:xa):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?ua:va}function s(a,b,c,d,e){this.good_length=a,this.max_lazy=b,this.nice_length=c,this.max_chain=d,this.func=e}function t(a){a.window_size=2*a.w_size,f(a.head),a.max_lazy_match=D[a.level].max_lazy,a.good_match=D[a.level].good_length,a.nice_match=D[a.level].nice_length,a.max_chain_length=D[a.level].max_chain,a.strstart=0,a.block_start=0,a.lookahead=0,a.insert=0,a.match_length=a.prev_length=ja-1,a.match_available=0,a.ins_h=0}function u(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=$,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new E.Buf16(2*ha),this.dyn_dtree=new E.Buf16(2*(2*fa+1)),this.bl_tree=new E.Buf16(2*(2*ga+1)),f(this.dyn_ltree),f(this.dyn_dtree),f(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new E.Buf16(ia+1),this.heap=new E.Buf16(2*ea+1),f(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new E.Buf16(2*ea+1),f(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function v(a){var b;return a&&a.state?(a.total_in=a.total_out=0,a.data_type=Z,b=a.state,b.pending=0,b.pending_out=0,b.wrap<0&&(b.wrap=-b.wrap),b.status=b.wrap?na:sa,a.adler=2===b.wrap?0:1,b.last_flush=J,F._tr_init(b),O):d(a,Q)}function w(a){var b=v(a);return b===O&&t(a.state),b}function x(a,b){return a&&a.state?2!==a.state.wrap?Q:(a.state.gzhead=b,O):Q}function y(a,b,c,e,f,g){if(!a)return Q;var h=1;if(b===T&&(b=6),0>e?(h=0,e=-e):e>15&&(h=2,e-=16),1>f||f>_||c!==$||8>e||e>15||0>b||b>9||0>g||g>X)return d(a,Q);8===e&&(e=9);var i=new u;return a.state=i,i.strm=a,i.wrap=h,i.gzhead=null,i.w_bits=e,i.w_size=1<>1,i.l_buf=3*i.lit_bufsize,i.level=b,i.strategy=g,i.method=c,w(a)}function z(a,b){return y(a,b,$,aa,ba,Y)}function A(a,b){var c,h,k,l;if(!a||!a.state||b>N||0>b)return a?d(a,Q):Q;if(h=a.state,!a.output||!a.input&&0!==a.avail_in||h.status===ta&&b!==M)return d(a,0===a.avail_out?S:Q);if(h.strm=a,c=h.last_flush,h.last_flush=b,h.status===na)if(2===h.wrap)a.adler=0,i(h,31),i(h,139),i(h,8),h.gzhead?(i(h,(h.gzhead.text?1:0)+(h.gzhead.hcrc?2:0)+(h.gzhead.extra?4:0)+(h.gzhead.name?8:0)+(h.gzhead.comment?16:0)),i(h,255&h.gzhead.time),i(h,h.gzhead.time>>8&255),i(h,h.gzhead.time>>16&255),i(h,h.gzhead.time>>24&255),i(h,9===h.level?2:h.strategy>=V||h.level<2?4:0),i(h,255&h.gzhead.os),h.gzhead.extra&&h.gzhead.extra.length&&(i(h,255&h.gzhead.extra.length),i(h,h.gzhead.extra.length>>8&255)),h.gzhead.hcrc&&(a.adler=H(a.adler,h.pending_buf,h.pending,0)),h.gzindex=0,h.status=oa):(i(h,0),i(h,0),i(h,0),i(h,0),i(h,0),i(h,9===h.level?2:h.strategy>=V||h.level<2?4:0),i(h,ya),h.status=sa);else{var m=$+(h.w_bits-8<<4)<<8,n=-1;n=h.strategy>=V||h.level<2?0:h.level<6?1:6===h.level?2:3,m|=n<<6,0!==h.strstart&&(m|=ma),m+=31-m%31,h.status=sa,j(h,m),0!==h.strstart&&(j(h,a.adler>>>16),j(h,65535&a.adler)),a.adler=1}if(h.status===oa)if(h.gzhead.extra){for(k=h.pending;h.gzindex<(65535&h.gzhead.extra.length)&&(h.pending!==h.pending_buf_size||(h.gzhead.hcrc&&h.pending>k&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending!==h.pending_buf_size));)i(h,255&h.gzhead.extra[h.gzindex]),h.gzindex++;h.gzhead.hcrc&&h.pending>k&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),h.gzindex===h.gzhead.extra.length&&(h.gzindex=0,h.status=pa)}else h.status=pa;if(h.status===pa)if(h.gzhead.name){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindexk&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.gzindex=0,h.status=qa)}else h.status=qa;if(h.status===qa)if(h.gzhead.comment){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindexk&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.status=ra)}else h.status=ra;if(h.status===ra&&(h.gzhead.hcrc?(h.pending+2>h.pending_buf_size&&g(a),h.pending+2<=h.pending_buf_size&&(i(h,255&a.adler),i(h,a.adler>>8&255),a.adler=0,h.status=sa)):h.status=sa),0!==h.pending){if(g(a),0===a.avail_out)return h.last_flush=-1,O}else if(0===a.avail_in&&e(b)<=e(c)&&b!==M)return d(a,S);if(h.status===ta&&0!==a.avail_in)return d(a,S);if(0!==a.avail_in||0!==h.lookahead||b!==J&&h.status!==ta){var o=h.strategy===V?r(h,b):h.strategy===W?q(h,b):D[h.level].func(h,b);if((o===wa||o===xa)&&(h.status=ta),o===ua||o===wa)return 0===a.avail_out&&(h.last_flush=-1),O;if(o===va&&(b===K?F._tr_align(h):b!==N&&(F._tr_stored_block(h,0,0,!1),b===L&&(f(h.head),0===h.lookahead&&(h.strstart=0,h.block_start=0,h.insert=0))),g(a),0===a.avail_out))return h.last_flush=-1,O}return b!==M?O:h.wrap<=0?P:(2===h.wrap?(i(h,255&a.adler),i(h,a.adler>>8&255),i(h,a.adler>>16&255),i(h,a.adler>>24&255),i(h,255&a.total_in),i(h,a.total_in>>8&255),i(h,a.total_in>>16&255),i(h,a.total_in>>24&255)):(j(h,a.adler>>>16),j(h,65535&a.adler)),g(a),h.wrap>0&&(h.wrap=-h.wrap),0!==h.pending?O:P)}function B(a){var b;return a&&a.state?(b=a.state.status,b!==na&&b!==oa&&b!==pa&&b!==qa&&b!==ra&&b!==sa&&b!==ta?d(a,Q):(a.state=null,b===sa?d(a,R):O)):Q}function C(a,b){var c,d,e,g,h,i,j,k,l=b.length;if(!a||!a.state)return Q;if(c=a.state,g=c.wrap,2===g||1===g&&c.status!==na||c.lookahead)return Q;for(1===g&&(a.adler=G(a.adler,b,l,0)),c.wrap=0,l>=c.w_size&&(0===g&&(f(c.head),c.strstart=0,c.block_start=0,c.insert=0),k=new E.Buf8(c.w_size),E.arraySet(k,b,l-c.w_size,c.w_size,0),b=k,l=c.w_size),h=a.avail_in,i=a.next_in,j=a.input,a.avail_in=l,a.next_in=0,a.input=b,m(c);c.lookahead>=ja;){d=c.strstart,e=c.lookahead-(ja-1);do c.ins_h=(c.ins_h<q&&(p+=B[f++]<>>24,p>>>=w,q-=w,w=v>>>16&255,0===w)C[h++]=65535&v;else{if(!(16&w)){if(0===(64&w)){v=r[(65535&v)+(p&(1<q&&(p+=B[f++]<>>=w,q-=w),15>q&&(p+=B[f++]<>>24,p>>>=w,q-=w,w=v>>>16&255,!(16&w)){if(0===(64&w)){v=s[(65535&v)+(p&(1<q&&(p+=B[f++]<q&&(p+=B[f++]<k){a.msg="invalid distance too far back",c.mode=d;break a}if(p>>>=w,q-=w,w=h-i,y>w){if(w=y-w,w>m&&c.sane){a.msg="invalid distance too far back",c.mode=d;break a}if(z=0,A=o,0===n){if(z+=l-w,x>w){x-=w;do C[h++]=o[z++];while(--w);z=h-y,A=C}}else if(w>n){if(z+=l+n-w,w-=n,x>w){x-=w;do C[h++]=o[z++];while(--w);if(z=0,x>n){w=n,x-=w;do C[h++]=o[z++];while(--w);z=h-y,A=C}}}else if(z+=n-w,x>w){x-=w;do C[h++]=o[z++];while(--w);z=h-y,A=C}for(;x>2;)C[h++]=A[z++],C[h++]=A[z++],C[h++]=A[z++],x-=3;x&&(C[h++]=A[z++],x>1&&(C[h++]=A[z++]))}else{z=h-y;do C[h++]=C[z++],C[h++]=C[z++],C[h++]=C[z++],x-=3;while(x>2);x&&(C[h++]=C[z++],x>1&&(C[h++]=C[z++]))}break}}break}}while(g>f&&j>h);x=q>>3,f-=x,q-=x<<3,p&=(1<f?5+(g-f):5-(f-g),a.avail_out=j>h?257+(j-h):257-(h-j),c.hold=p,c.bits=q}},{}],11:[function(a,b,c){"use strict";function d(a){return(a>>>24&255)+(a>>>8&65280)+((65280&a)<<8)+((255&a)<<24)}function e(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new s.Buf16(320),this.work=new s.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function f(a){var b;return a&&a.state?(b=a.state,a.total_in=a.total_out=b.total=0,a.msg="",b.wrap&&(a.adler=1&b.wrap),b.mode=L,b.last=0,b.havedict=0,b.dmax=32768,b.head=null,b.hold=0,b.bits=0,b.lencode=b.lendyn=new s.Buf32(pa),b.distcode=b.distdyn=new s.Buf32(qa),b.sane=1,b.back=-1,D):G}function g(a){var b;return a&&a.state?(b=a.state,b.wsize=0,b.whave=0,b.wnext=0,f(a)):G}function h(a,b){var c,d;return a&&a.state?(d=a.state,0>b?(c=0,b=-b):(c=(b>>4)+1,48>b&&(b&=15)),b&&(8>b||b>15)?G:(null!==d.window&&d.wbits!==b&&(d.window=null),d.wrap=c,d.wbits=b,g(a))):G}function i(a,b){var c,d;return a?(d=new e,a.state=d,d.window=null,c=h(a,b),c!==D&&(a.state=null),c):G}function j(a){return i(a,sa)}function k(a){if(ta){var b;for(q=new s.Buf32(512),r=new s.Buf32(32),b=0;144>b;)a.lens[b++]=8;for(;256>b;)a.lens[b++]=9;for(;280>b;)a.lens[b++]=7;for(;288>b;)a.lens[b++]=8;for(w(y,a.lens,0,288,q,0,a.work,{bits:9}),b=0;32>b;)a.lens[b++]=5;w(z,a.lens,0,32,r,0,a.work,{bits:5}),ta=!1}a.lencode=q,a.lenbits=9,a.distcode=r,a.distbits=5}function l(a,b,c,d){var e,f=a.state;return null===f.window&&(f.wsize=1<=f.wsize?(s.arraySet(f.window,b,c-f.wsize,f.wsize,0),f.wnext=0,f.whave=f.wsize):(e=f.wsize-f.wnext,e>d&&(e=d),s.arraySet(f.window,b,c-d,e,f.wnext),d-=e,d?(s.arraySet(f.window,b,c-d,d,0),f.wnext=d,f.whave=f.wsize):(f.wnext+=e,f.wnext===f.wsize&&(f.wnext=0),f.whaven;){if(0===i)break a;i--,m+=e[g++]<>>8&255,c.check=u(c.check,Ba,2,0),m=0,n=0,c.mode=M;break}if(c.flags=0,c.head&&(c.head.done=!1),!(1&c.wrap)||(((255&m)<<8)+(m>>8))%31){a.msg="incorrect header check",c.mode=ma;break}if((15&m)!==K){a.msg="unknown compression method",c.mode=ma;break}if(m>>>=4,n-=4,wa=(15&m)+8,0===c.wbits)c.wbits=wa;else if(wa>c.wbits){a.msg="invalid window size",c.mode=ma;break}c.dmax=1<n;){if(0===i)break a;i--,m+=e[g++]<>8&1),512&c.flags&&(Ba[0]=255&m,Ba[1]=m>>>8&255,c.check=u(c.check,Ba,2,0)),m=0,n=0,c.mode=N;case N:for(;32>n;){if(0===i)break a;i--,m+=e[g++]<>>8&255,Ba[2]=m>>>16&255,Ba[3]=m>>>24&255,c.check=u(c.check,Ba,4,0)),m=0,n=0,c.mode=O;case O:for(;16>n;){if(0===i)break a;i--,m+=e[g++]<>8),512&c.flags&&(Ba[0]=255&m,Ba[1]=m>>>8&255,c.check=u(c.check,Ba,2,0)),m=0,n=0,c.mode=P;case P:if(1024&c.flags){for(;16>n;){if(0===i)break a;i--,m+=e[g++]<>>8&255,c.check=u(c.check,Ba,2,0)),m=0,n=0}else c.head&&(c.head.extra=null);c.mode=Q;case Q:if(1024&c.flags&&(q=c.length,q>i&&(q=i),q&&(c.head&&(wa=c.head.extra_len-c.length,c.head.extra||(c.head.extra=new Array(c.head.extra_len)),s.arraySet(c.head.extra,e,g,q,wa)),512&c.flags&&(c.check=u(c.check,e,q,g)),i-=q,g+=q,c.length-=q),c.length))break a;c.length=0,c.mode=R;case R:if(2048&c.flags){if(0===i)break a;q=0;do wa=e[g+q++],c.head&&wa&&c.length<65536&&(c.head.name+=String.fromCharCode(wa));while(wa&&i>q);if(512&c.flags&&(c.check=u(c.check,e,q,g)),i-=q,g+=q,wa)break a}else c.head&&(c.head.name=null);c.length=0,c.mode=S;case S:if(4096&c.flags){if(0===i)break a;q=0;do wa=e[g+q++],c.head&&wa&&c.length<65536&&(c.head.comment+=String.fromCharCode(wa));while(wa&&i>q);if(512&c.flags&&(c.check=u(c.check,e,q,g)),i-=q,g+=q,wa)break a}else c.head&&(c.head.comment=null);c.mode=T;case T:if(512&c.flags){for(;16>n;){if(0===i)break a;i--,m+=e[g++]<>9&1,c.head.done=!0),a.adler=c.check=0,c.mode=W;break;case U:for(;32>n;){if(0===i)break a;i--,m+=e[g++]<>>=7&n,n-=7&n,c.mode=ja;break}for(;3>n;){if(0===i)break a;i--,m+=e[g++]<>>=1,n-=1,3&m){case 0:c.mode=Y;break;case 1:if(k(c),c.mode=ca,b===C){m>>>=2,n-=2;break a}break;case 2:c.mode=_;break;case 3:a.msg="invalid block type",c.mode=ma}m>>>=2,n-=2;break;case Y:for(m>>>=7&n,n-=7&n;32>n;){if(0===i)break a;i--,m+=e[g++]<>>16^65535)){a.msg="invalid stored block lengths",c.mode=ma;break}if(c.length=65535&m,m=0,n=0,c.mode=Z,b===C)break a;case Z:c.mode=$;case $:if(q=c.length){if(q>i&&(q=i),q>j&&(q=j),0===q)break a;s.arraySet(f,e,g,q,h),i-=q,g+=q,j-=q,h+=q,c.length-=q;break}c.mode=W;break;case _:for(;14>n;){if(0===i)break a;i--,m+=e[g++]<>>=5,n-=5,c.ndist=(31&m)+1,m>>>=5,n-=5,c.ncode=(15&m)+4,m>>>=4,n-=4,c.nlen>286||c.ndist>30){a.msg="too many length or distance symbols",c.mode=ma;break}c.have=0,c.mode=aa;case aa:for(;c.haven;){if(0===i)break a;i--,m+=e[g++]<>>=3,n-=3}for(;c.have<19;)c.lens[Ca[c.have++]]=0;if(c.lencode=c.lendyn,c.lenbits=7,ya={bits:c.lenbits},xa=w(x,c.lens,0,19,c.lencode,0,c.work,ya),c.lenbits=ya.bits,xa){a.msg="invalid code lengths set",c.mode=ma;break}c.have=0,c.mode=ba;case ba:for(;c.have>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=qa);){if(0===i)break a;i--,m+=e[g++]<sa)m>>>=qa,n-=qa,c.lens[c.have++]=sa;else{if(16===sa){for(za=qa+2;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=qa,n-=qa,0===c.have){a.msg="invalid bit length repeat",c.mode=ma;break}wa=c.lens[c.have-1],q=3+(3&m),m>>>=2,n-=2}else if(17===sa){for(za=qa+3;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=qa,n-=qa,wa=0,q=3+(7&m),m>>>=3,n-=3}else{for(za=qa+7;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=qa,n-=qa,wa=0,q=11+(127&m),m>>>=7,n-=7}if(c.have+q>c.nlen+c.ndist){a.msg="invalid bit length repeat",c.mode=ma;break}for(;q--;)c.lens[c.have++]=wa}}if(c.mode===ma)break;if(0===c.lens[256]){a.msg="invalid code -- missing end-of-block",c.mode=ma;break}if(c.lenbits=9,ya={bits:c.lenbits},xa=w(y,c.lens,0,c.nlen,c.lencode,0,c.work,ya),c.lenbits=ya.bits,xa){a.msg="invalid literal/lengths set",c.mode=ma;break}if(c.distbits=6,c.distcode=c.distdyn,ya={bits:c.distbits},xa=w(z,c.lens,c.nlen,c.ndist,c.distcode,0,c.work,ya),c.distbits=ya.bits,xa){a.msg="invalid distances set",c.mode=ma;break}if(c.mode=ca,b===C)break a;case ca:c.mode=da;case da:if(i>=6&&j>=258){a.next_out=h,a.avail_out=j,a.next_in=g,a.avail_in=i,c.hold=m,c.bits=n,v(a,p),h=a.next_out,f=a.output,j=a.avail_out,g=a.next_in,e=a.input,i=a.avail_in,m=c.hold,n=c.bits,c.mode===W&&(c.back=-1);break}for(c.back=0;Aa=c.lencode[m&(1<>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=qa);){if(0===i)break a;i--,m+=e[g++]<>ta)],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=ta+qa);){if(0===i)break a;i--,m+=e[g++]<>>=ta,n-=ta,c.back+=ta}if(m>>>=qa,n-=qa,c.back+=qa,c.length=sa,0===ra){c.mode=ia;break}if(32&ra){c.back=-1,c.mode=W;break}if(64&ra){a.msg="invalid literal/length code",c.mode=ma;break}c.extra=15&ra,c.mode=ea;case ea:if(c.extra){for(za=c.extra;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=c.extra,n-=c.extra,c.back+=c.extra}c.was=c.length,c.mode=fa;case fa:for(;Aa=c.distcode[m&(1<>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=qa);){if(0===i)break a;i--,m+=e[g++]<>ta)],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=ta+qa);){if(0===i)break a;i--,m+=e[g++]<>>=ta,n-=ta,c.back+=ta}if(m>>>=qa,n-=qa,c.back+=qa,64&ra){a.msg="invalid distance code",c.mode=ma;break}c.offset=sa,c.extra=15&ra,c.mode=ga;case ga:if(c.extra){for(za=c.extra;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=c.extra,n-=c.extra,c.back+=c.extra}if(c.offset>c.dmax){a.msg="invalid distance too far back",c.mode=ma;break}c.mode=ha;case ha:if(0===j)break a;if(q=p-j,c.offset>q){if(q=c.offset-q,q>c.whave&&c.sane){a.msg="invalid distance too far back",c.mode=ma;break}q>c.wnext?(q-=c.wnext,r=c.wsize-q):r=c.wnext-q,q>c.length&&(q=c.length),pa=c.window}else pa=f,r=h-c.offset,q=c.length;q>j&&(q=j),j-=q,c.length-=q;do f[h++]=pa[r++];while(--q);0===c.length&&(c.mode=da);break;case ia:if(0===j)break a;f[h++]=c.length,j--,c.mode=da;break;case ja:if(c.wrap){for(;32>n;){if(0===i)break a;i--,m|=e[g++]<n;){if(0===i)break a;i--,m+=e[g++]<=D;D++)P[D]=0;for(E=0;o>E;E++)P[b[c+E]]++;for(H=C,G=e;G>=1&&0===P[G];G--);if(H>G&&(H=G),0===G)return p[q++]=20971520,p[q++]=20971520,s.bits=1,0;for(F=1;G>F&&0===P[F];F++);for(F>H&&(H=F),K=1,D=1;e>=D;D++)if(K<<=1,K-=P[D],0>K)return-1;if(K>0&&(a===h||1!==G))return-1;for(Q[1]=0,D=1;e>D;D++)Q[D+1]=Q[D]+P[D];for(E=0;o>E;E++)0!==b[c+E]&&(r[Q[b[c+E]]++]=E);if(a===h?(N=R=r,y=19):a===i?(N=k,O-=257,R=l,S-=257,y=256):(N=m,R=n,y=-1),M=0,E=0,D=F,x=q,I=H,J=0,v=-1,L=1<f||a===j&&L>g)return 1;for(var T=0;;){T++,z=D-J,r[E]y?(A=R[S+r[E]],B=N[O+r[E]]):(A=96,B=0),t=1<>J)+u]=z<<24|A<<16|B|0;while(0!==u);for(t=1<>=1;if(0!==t?(M&=t-1,M+=t):M=0,E++,0===--P[D]){if(D===G)break;D=b[c+r[E]]}if(D>H&&(M&w)!==v){for(0===J&&(J=H),x+=F,I=D-J,K=1<I+J&&(K-=P[I+J],!(0>=K));)I++,K<<=1;if(L+=1<f||a===j&&L>g)return 1;v=M&w,p[v]=H<<24|I<<16|x-q|0}}return 0!==M&&(p[x+M]=D-J<<24|64<<16|0),s.bits=H,0}},{"../utils/common":3}],13:[function(a,b,c){"use strict";b.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],14:[function(a,b,c){"use strict";function d(a){for(var b=a.length;--b>=0;)a[b]=0}function e(a,b,c,d,e){this.static_tree=a,this.extra_bits=b,this.extra_base=c,this.elems=d,this.max_length=e,this.has_stree=a&&a.length}function f(a,b){this.dyn_tree=a,this.max_code=0,this.stat_desc=b}function g(a){return 256>a?ia[a]:ia[256+(a>>>7)]}function h(a,b){a.pending_buf[a.pending++]=255&b,a.pending_buf[a.pending++]=b>>>8&255}function i(a,b,c){a.bi_valid>X-c?(a.bi_buf|=b<>X-a.bi_valid,a.bi_valid+=c-X):(a.bi_buf|=b<>>=1,c<<=1;while(--b>0);return c>>>1}function l(a){16===a.bi_valid?(h(a,a.bi_buf),a.bi_buf=0,a.bi_valid=0):a.bi_valid>=8&&(a.pending_buf[a.pending++]=255&a.bi_buf,a.bi_buf>>=8,a.bi_valid-=8)}function m(a,b){var c,d,e,f,g,h,i=b.dyn_tree,j=b.max_code,k=b.stat_desc.static_tree,l=b.stat_desc.has_stree,m=b.stat_desc.extra_bits,n=b.stat_desc.extra_base,o=b.stat_desc.max_length,p=0;for(f=0;W>=f;f++)a.bl_count[f]=0;for(i[2*a.heap[a.heap_max]+1]=0,c=a.heap_max+1;V>c;c++)d=a.heap[c],f=i[2*i[2*d+1]+1]+1,f>o&&(f=o,p++),i[2*d+1]=f,d>j||(a.bl_count[f]++,g=0,d>=n&&(g=m[d-n]),h=i[2*d],a.opt_len+=h*(f+g),l&&(a.static_len+=h*(k[2*d+1]+g)));if(0!==p){do{for(f=o-1;0===a.bl_count[f];)f--;a.bl_count[f]--,a.bl_count[f+1]+=2,a.bl_count[o]--,p-=2}while(p>0);for(f=o;0!==f;f--)for(d=a.bl_count[f];0!==d;)e=a.heap[--c],e>j||(i[2*e+1]!==f&&(a.opt_len+=(f-i[2*e+1])*i[2*e],i[2*e+1]=f),d--)}}function n(a,b,c){var d,e,f=new Array(W+1),g=0;for(d=1;W>=d;d++)f[d]=g=g+c[d-1]<<1;for(e=0;b>=e;e++){var h=a[2*e+1];0!==h&&(a[2*e]=k(f[h]++,h))}}function o(){var a,b,c,d,f,g=new Array(W+1);for(c=0,d=0;Q-1>d;d++)for(ka[d]=c,a=0;a<1<d;d++)for(la[d]=f,a=0;a<1<>=7;T>d;d++)for(la[d]=f<<7,a=0;a<1<=b;b++)g[b]=0;for(a=0;143>=a;)ga[2*a+1]=8,a++,g[8]++;for(;255>=a;)ga[2*a+1]=9,a++,g[9]++;for(;279>=a;)ga[2*a+1]=7,a++,g[7]++;for(;287>=a;)ga[2*a+1]=8,a++,g[8]++;for(n(ga,S+1,g),a=0;T>a;a++)ha[2*a+1]=5,ha[2*a]=k(a,5);ma=new e(ga,ba,R+1,S,W),na=new e(ha,ca,0,T,W),oa=new e(new Array(0),da,0,U,Y)}function p(a){var b;for(b=0;S>b;b++)a.dyn_ltree[2*b]=0;for(b=0;T>b;b++)a.dyn_dtree[2*b]=0;for(b=0;U>b;b++)a.bl_tree[2*b]=0;a.dyn_ltree[2*Z]=1,a.opt_len=a.static_len=0,a.last_lit=a.matches=0}function q(a){a.bi_valid>8?h(a,a.bi_buf):a.bi_valid>0&&(a.pending_buf[a.pending++]=a.bi_buf),a.bi_buf=0,a.bi_valid=0}function r(a,b,c,d){q(a),d&&(h(a,c),h(a,~c)),G.arraySet(a.pending_buf,a.window,b,c,a.pending),a.pending+=c}function s(a,b,c,d){var e=2*b,f=2*c;return a[e]c;c++)0!==f[2*c]?(a.heap[++a.heap_len]=j=c,a.depth[c]=0):f[2*c+1]=0;for(;a.heap_len<2;)e=a.heap[++a.heap_len]=2>j?++j:0,f[2*e]=1,a.depth[e]=0,a.opt_len--,h&&(a.static_len-=g[2*e+1]);for(b.max_code=j,c=a.heap_len>>1;c>=1;c--)t(a,f,c);e=i;do c=a.heap[1],a.heap[1]=a.heap[a.heap_len--],t(a,f,1),d=a.heap[1],a.heap[--a.heap_max]=c,a.heap[--a.heap_max]=d,f[2*e]=f[2*c]+f[2*d],a.depth[e]=(a.depth[c]>=a.depth[d]?a.depth[c]:a.depth[d])+1,f[2*c+1]=f[2*d+1]=e,a.heap[1]=e++,t(a,f,1);while(a.heap_len>=2);a.heap[--a.heap_max]=a.heap[1],m(a,b),n(f,j,a.bl_count)}function w(a,b,c){var d,e,f=-1,g=b[1],h=0,i=7,j=4;for(0===g&&(i=138,j=3),b[2*(c+1)+1]=65535,d=0;c>=d;d++)e=g,g=b[2*(d+1)+1],++hh?a.bl_tree[2*e]+=h:0!==e?(e!==f&&a.bl_tree[2*e]++,a.bl_tree[2*$]++):10>=h?a.bl_tree[2*_]++:a.bl_tree[2*aa]++,h=0,f=e,0===g?(i=138,j=3):e===g?(i=6,j=3):(i=7,j=4))}function x(a,b,c){var d,e,f=-1,g=b[1],h=0,k=7,l=4;for(0===g&&(k=138,l=3),d=0;c>=d;d++)if(e=g,g=b[2*(d+1)+1],!(++hh){do j(a,e,a.bl_tree);while(0!==--h)}else 0!==e?(e!==f&&(j(a,e,a.bl_tree),h--),j(a,$,a.bl_tree),i(a,h-3,2)):10>=h?(j(a,_,a.bl_tree),i(a,h-3,3)):(j(a,aa,a.bl_tree),i(a,h-11,7));h=0,f=e,0===g?(k=138,l=3):e===g?(k=6,l=3):(k=7,l=4)}}function y(a){var b;for(w(a,a.dyn_ltree,a.l_desc.max_code),w(a,a.dyn_dtree,a.d_desc.max_code),v(a,a.bl_desc),b=U-1;b>=3&&0===a.bl_tree[2*ea[b]+1];b--);return a.opt_len+=3*(b+1)+5+5+4,b}function z(a,b,c,d){var e;for(i(a,b-257,5),i(a,c-1,5),i(a,d-4,4),e=0;d>e;e++)i(a,a.bl_tree[2*ea[e]+1],3);x(a,a.dyn_ltree,b-1),x(a,a.dyn_dtree,c-1)}function A(a){var b,c=4093624447;for(b=0;31>=b;b++,c>>>=1)if(1&c&&0!==a.dyn_ltree[2*b])return I;if(0!==a.dyn_ltree[18]||0!==a.dyn_ltree[20]||0!==a.dyn_ltree[26])return J;for(b=32;R>b;b++)if(0!==a.dyn_ltree[2*b])return J;return I}function B(a){pa||(o(),pa=!0),a.l_desc=new f(a.dyn_ltree,ma),a.d_desc=new f(a.dyn_dtree,na),a.bl_desc=new f(a.bl_tree,oa),a.bi_buf=0,a.bi_valid=0,p(a)}function C(a,b,c,d){i(a,(L<<1)+(d?1:0),3),r(a,b,c,!0)}function D(a){i(a,M<<1,3),j(a,Z,ga),l(a)}function E(a,b,c,d){var e,f,g=0;a.level>0?(a.strm.data_type===K&&(a.strm.data_type=A(a)),v(a,a.l_desc),v(a,a.d_desc),g=y(a),e=a.opt_len+3+7>>>3,f=a.static_len+3+7>>>3,e>=f&&(e=f)):e=f=c+5,e>=c+4&&-1!==b?C(a,b,c,d):a.strategy===H||f===e?(i(a,(M<<1)+(d?1:0),3),u(a,ga,ha)):(i(a,(N<<1)+(d?1:0),3),z(a,a.l_desc.max_code+1,a.d_desc.max_code+1,g+1),u(a,a.dyn_ltree,a.dyn_dtree)),p(a),d&&q(a)}function F(a,b,c){return a.pending_buf[a.d_buf+2*a.last_lit]=b>>>8&255,a.pending_buf[a.d_buf+2*a.last_lit+1]=255&b,a.pending_buf[a.l_buf+a.last_lit]=255&c,a.last_lit++,0===b?a.dyn_ltree[2*c]++:(a.matches++,b--,a.dyn_ltree[2*(ja[c]+R+1)]++,a.dyn_dtree[2*g(b)]++),a.last_lit===a.lit_bufsize-1}var G=a("../utils/common"),H=4,I=0,J=1,K=2,L=0,M=1,N=2,O=3,P=258,Q=29,R=256,S=R+1+Q,T=30,U=19,V=2*S+1,W=15,X=16,Y=7,Z=256,$=16,_=17,aa=18,ba=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],ca=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],da=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],ea=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],fa=512,ga=new Array(2*(S+2));d(ga);var ha=new Array(2*T);d(ha);var ia=new Array(fa);d(ia);var ja=new Array(P-O+1);d(ja);var ka=new Array(Q);d(ka);var la=new Array(T);d(la);var ma,na,oa,pa=!1;c._tr_init=B,c._tr_stored_block=C,c._tr_flush_block=E,c._tr_tally=F,c._tr_align=D},{"../utils/common":3}],15:[function(a,b,c){"use strict";function d(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}b.exports=d},{}],"/":[function(a,b,c){"use strict";var d=a("./lib/utils/common").assign,e=a("./lib/deflate"),f=a("./lib/inflate"),g=a("./lib/zlib/constants"),h={};d(h,e,f,g),b.exports=h},{"./lib/deflate":1,"./lib/inflate":2,"./lib/utils/common":3,"./lib/zlib/constants":6}]},{},[])("/")}),function(){"use strict";BrainBrowser.utils={webglExtensionAvailable:function(a){if(!BrainBrowser.WEBGL_ENABLED)return!1;var b=document.createElement("canvas"),c=b.getContext("webgl")||b.getContext("experimental-webgl");return!!c.getExtension(a)},webGLErrorMessage:function(){var a,b='BrainBrowser requires WebGL.
';return b+=window.WebGLRenderingContext?"Your browser seems to support it, but it is
disabled or unavailable.
":"Your browser does not seem to support it.
",b+='Test your browser\'s WebGL support here.',a=document.createElement("div"),a.id="webgl-error",a.innerHTML=b,a},isFunction:function(a){return a instanceof Function||"function"==typeof a},isNumeric:function(a){return!isNaN(parseFloat(a))},createDataURL:function(a,b){if(!window.URL||!window.URL.createObjectURL)throw new Error("createDataURL requires URL.createObjectURL which does not seem to be available is this browser.");return window.URL.createObjectURL(new Blob([a],{type:b||"text/plain"}))},min:function(){var a=Array.prototype.slice.call(arguments);a=1===a.length&&BrainBrowser.utils.isNumeric(a[0].length)?a[0]:a;var b,c,d=a[0];for(b=1,c=a.length;c>b;b++)a[b]b;b++)a[b]>d&&(d=a[b]);return d},getOffset:function(a){for(var b=0,c=0;a.offsetParent;)b+=a.offsetTop,c+=a.offsetLeft,a=a.offsetParent;return{top:b,left:c}},captureMouse:function(a){var b={x:0,y:0,left:!1,middle:!1,right:!1};return document.addEventListener("mousemove",function(c){var d,e,f=BrainBrowser.utils.getOffset(a);void 0!==c.pageX?(d=c.pageX,e=c.pageY):(d=c.clientX+window.pageXOffset,e=c.clientY+window.pageYOffset),b.x=d-f.left,b.y=e-f.top},!1),a.addEventListener("mousedown",function(a){a.preventDefault(),0===a.button&&(b.left=!0),1===a.button&&(b.middle=!0),2===a.button&&(b.right=!0)},!1),a.addEventListener("mouseup",function(a){a.preventDefault(),0===a.button&&(b.left=!1),1===a.button&&(b.middle=!1),2===a.button&&(b.right=!1)},!1),a.addEventListener("mouseleave",function(a){a.preventDefault(),b.left=b.middle=b.right=!1},!1),a.addEventListener("contextmenu",function(a){a.preventDefault()},!1),b},captureTouch:function(a){function b(b){var d,e,f,g,h,i=BrainBrowser.utils.getOffset(a);for(c.length=g=b.touches.length,f=0;g>f;f++)h=b.touches[f],void 0!==h.pageX?(d=h.pageX,e=h.pageY):(d=h.clientX+window.pageXOffset,e=h.clientY+window.pageYOffset),c[f]=c[f]||{},c[f].x=d-i.left,c[f].y=e-i.top}var c=[];return a.addEventListener("touchstart",b,!1),a.addEventListener("touchmove",b,!1),a.addEventListener("touchend",b,!1),c}}}(),function(){"use strict";function a(a){var c,d=BrainBrowser.config.get("worker_dir");if(null===d)throw c="error in SurfaceViewer configuration.\nBrainBrowser configuration parameter 'worker_dir' not defined.\nUse 'BrainBrowser.config.set(\"worker_dir\", ...)' to set it.",BrainBrowser.events.triggerEvent("error",{message:c}),new Error(c);var e,f={deindex:"deindex.worker.js",wireframe:"wireframe.worker.js"},g=0,h=BrainBrowser.config.get("model_types"),i=BrainBrowser.config.get("intensity_data_types");return null!==h&&Object.keys(h).forEach(function(a){f[a+"_model"]=h[a].worker}),null!==i&&Object.keys(i).forEach(function(a){f[a+"_intensity"]=i[a].worker}),e=Object.keys(f),0===e.length?void a():void(window.URL&&window.URL.createObjectURL?e.forEach(function(c){var h,i=d+"/"+f[c],j=new XMLHttpRequest;j.open("GET",i),j.onreadystatechange=function(){4===j.readyState&&(h=j.status,h>=200&&300>h||304===h?b.worker_urls[c]=BrainBrowser.utils.createDataURL(j.response,"application/javascript"):b.worker_urls[c]=i,++g===e.length&&a())},j.send()}):(e.forEach(function(a){b.worker_urls[a]=d+"/"+f[a]}),a()))}var b=BrainBrowser.SurfaceViewer={start:function(c,d){console.log("BrainBrowser Surface Viewer v"+BrainBrowser.version);var e,f={};e="string"==typeof c?document.getElementById(c):c;var g={dom_element:e,model:null,model_data:null,mouse:BrainBrowser.utils.captureMouse(e),touches:BrainBrowser.utils.captureTouch(e),updated:!0,zoom:1,autorotate:{x:!1,y:!1,z:!1},getAttribute:function(a){return f[a]},setAttribute:function(a,b){f[a]=b},getVertex:function(a,c){c=c||{};var d=g.model_data.get(c.model_name).vertices,e=3*a;return new b.THREE.Vector3(d[e],d[e+1],d[e+2])}};return Object.keys(b.modules).forEach(function(a){b.modules[a](g)}),BrainBrowser.events.addEventModel(g),BrainBrowser.events.addEventListener("*",function(a){"draw"!==a&&(g.updated=!0)}),a(function(){d(g)}),g}};b.modules={},b.worker_urls={},BrainBrowser.config.set("model_types.json.worker","json.worker.js"),BrainBrowser.config.set("model_types.mniobj.worker","mniobj.worker.js"),BrainBrowser.config.set("model_types.wavefrontobj.worker","wavefrontobj.worker.js"),BrainBrowser.config.set("model_types.freesurferbin.worker","freesurferbin.worker.js"),BrainBrowser.config.set("model_types.freesurferbin.binary",!0),BrainBrowser.config.set("model_types.freesurferasc.worker","freesurferasc.worker.js"),BrainBrowser.config.set("intensity_data_types.text.worker","text.intensity.worker.js"),BrainBrowser.config.set("intensity_data_types.freesurferbin.worker","freesurferbin.intensity.worker.js"),BrainBrowser.config.set("intensity_data_types.freesurferbin.binary",!0),BrainBrowser.config.set("intensity_data_types.freesurferasc.worker","freesurferasc.intensity.worker.js")}(),BrainBrowser.SurfaceViewer.parseIntensityData=function(a,b,c){"use strict";var d,e=b+"_intensity";if(!BrainBrowser.SurfaceViewer.worker_urls[e])throw d="error in SurfaceViewer configuration.\nIntensity data worker URL for "+b+" not defined.\nUse 'BrainBrowser.config.set(\"intensity_data_types."+b+".worker\", ...)' to set it.",BrainBrowser.events.triggerEvent("error",{message:d}),new Error(d);var f=new Worker(BrainBrowser.SurfaceViewer.worker_urls[e]);f.addEventListener("message",function(a){c(a.data),f.terminate()}),f.postMessage({cmd:"parse",data:a})},function(){"use strict";var a=BrainBrowser.SurfaceViewer.THREE={REVISION:"69"};"object"==typeof module&&(module.exports=a),void 0===Math.sign&&(Math.sign=function(a){return 0>a?-1:a>0?1:0}),a.MOUSE={LEFT:0,MIDDLE:1,RIGHT:2},a.CullFaceNone=0,a.CullFaceBack=1,a.CullFaceFront=2,a.CullFaceFrontBack=3,a.FrontFaceDirectionCW=0,a.FrontFaceDirectionCCW=1,a.BasicShadowMap=0,a.PCFShadowMap=1,a.PCFSoftShadowMap=2,a.FrontSide=0,a.BackSide=1,a.DoubleSide=2,a.NoShading=0,a.FlatShading=1,a.SmoothShading=2,a.NoColors=0,a.FaceColors=1,a.VertexColors=2,a.NoBlending=0,a.NormalBlending=1,a.AdditiveBlending=2,a.SubtractiveBlending=3,a.MultiplyBlending=4,a.CustomBlending=5,a.AddEquation=100,a.SubtractEquation=101,a.ReverseSubtractEquation=102,a.MinEquation=103,a.MaxEquation=104,a.ZeroFactor=200,a.OneFactor=201,a.SrcColorFactor=202,a.OneMinusSrcColorFactor=203,a.SrcAlphaFactor=204,a.OneMinusSrcAlphaFactor=205,a.DstAlphaFactor=206,a.OneMinusDstAlphaFactor=207,a.DstColorFactor=208,a.OneMinusDstColorFactor=209,a.SrcAlphaSaturateFactor=210,a.MultiplyOperation=0,a.MixOperation=1,a.AddOperation=2,a.UVMapping=function(){},a.CubeReflectionMapping=function(){},a.CubeRefractionMapping=function(){},a.SphericalReflectionMapping=function(){},a.SphericalRefractionMapping=function(){},a.RepeatWrapping=1e3,a.ClampToEdgeWrapping=1001,a.MirroredRepeatWrapping=1002,a.NearestFilter=1003,a.NearestMipMapNearestFilter=1004,a.NearestMipMapLinearFilter=1005,a.LinearFilter=1006,a.LinearMipMapNearestFilter=1007,a.LinearMipMapLinearFilter=1008,a.UnsignedByteType=1009,a.ByteType=1010,a.ShortType=1011,a.UnsignedShortType=1012,a.IntType=1013,a.UnsignedIntType=1014,a.FloatType=1015,a.UnsignedShort4444Type=1016,a.UnsignedShort5551Type=1017,a.UnsignedShort565Type=1018,a.AlphaFormat=1019,a.RGBFormat=1020,a.RGBAFormat=1021,a.LuminanceFormat=1022,a.LuminanceAlphaFormat=1023,a.RGB_S3TC_DXT1_Format=2001,a.RGBA_S3TC_DXT1_Format=2002,a.RGBA_S3TC_DXT3_Format=2003,a.RGBA_S3TC_DXT5_Format=2004,a.RGB_PVRTC_4BPPV1_Format=2100,a.RGB_PVRTC_2BPPV1_Format=2101,a.RGBA_PVRTC_4BPPV1_Format=2102,a.RGBA_PVRTC_2BPPV1_Format=2103,a.Color=function(a){return 3===arguments.length?this.setRGB(arguments[0],arguments[1],arguments[2]):this.set(a)},a.Color.prototype={constructor:a.Color,r:1,g:1,b:1,set:function(b){return b instanceof a.Color?this.copy(b):"number"==typeof b?this.setHex(b):"string"==typeof b&&this.setStyle(b),this},setHex:function(a){return a=Math.floor(a),this.r=(a>>16&255)/255,this.g=(a>>8&255)/255,this.b=(255&a)/255,this},setRGB:function(a,b,c){return this.r=a,this.g=b,this.b=c,this},setHSL:function(a,b,c){if(0===b)this.r=this.g=this.b=c;else{var d=function(a,b,c){return 0>c&&(c+=1),c>1&&(c-=1),1/6>c?a+6*(b-a)*c:.5>c?b:2/3>c?a+6*(b-a)*(2/3-c):a; +},e=.5>=c?c*(1+b):c+b-c*b,f=2*c-e;this.r=d(f,e,a+1/3),this.g=d(f,e,a),this.b=d(f,e,a-1/3)}return this},setStyle:function(b){if(/^rgb\((\d+), ?(\d+), ?(\d+)\)$/i.test(b)){var c=/^rgb\((\d+), ?(\d+), ?(\d+)\)$/i.exec(b);return this.r=Math.min(255,parseInt(c[1],10))/255,this.g=Math.min(255,parseInt(c[2],10))/255,this.b=Math.min(255,parseInt(c[3],10))/255,this}if(/^rgb\((\d+)\%, ?(\d+)\%, ?(\d+)\%\)$/i.test(b)){var c=/^rgb\((\d+)\%, ?(\d+)\%, ?(\d+)\%\)$/i.exec(b);return this.r=Math.min(100,parseInt(c[1],10))/100,this.g=Math.min(100,parseInt(c[2],10))/100,this.b=Math.min(100,parseInt(c[3],10))/100,this}if(/^\#([0-9a-f]{6})$/i.test(b)){var c=/^\#([0-9a-f]{6})$/i.exec(b);return this.setHex(parseInt(c[1],16)),this}if(/^\#([0-9a-f])([0-9a-f])([0-9a-f])$/i.test(b)){var c=/^\#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(b);return this.setHex(parseInt(c[1]+c[1]+c[2]+c[2]+c[3]+c[3],16)),this}return/^(\w+)$/i.test(b)?(this.setHex(a.ColorKeywords[b]),this):void 0},copy:function(a){return this.r=a.r,this.g=a.g,this.b=a.b,this},copyGammaToLinear:function(a){return this.r=a.r*a.r,this.g=a.g*a.g,this.b=a.b*a.b,this},copyLinearToGamma:function(a){return this.r=Math.sqrt(a.r),this.g=Math.sqrt(a.g),this.b=Math.sqrt(a.b),this},convertGammaToLinear:function(){var a=this.r,b=this.g,c=this.b;return this.r=a*a,this.g=b*b,this.b=c*c,this},convertLinearToGamma:function(){return this.r=Math.sqrt(this.r),this.g=Math.sqrt(this.g),this.b=Math.sqrt(this.b),this},getHex:function(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0},getHexString:function(){return("000000"+this.getHex().toString(16)).slice(-6)},getHSL:function(a){var b,c,d=a||{h:0,s:0,l:0},e=this.r,f=this.g,g=this.b,h=Math.max(e,f,g),i=Math.min(e,f,g),j=(i+h)/2;if(i===h)b=0,c=0;else{var k=h-i;switch(c=.5>=j?k/(h+i):k/(2-h-i),h){case e:b=(f-g)/k+(g>f?6:0);break;case f:b=(g-e)/k+2;break;case g:b=(e-f)/k+4}b/=6}return d.h=b,d.s=c,d.l=j,d},getStyle:function(){return"rgb("+(255*this.r|0)+","+(255*this.g|0)+","+(255*this.b|0)+")"},offsetHSL:function(a,b,c){var d=this.getHSL();return d.h+=a,d.s+=b,d.l+=c,this.setHSL(d.h,d.s,d.l),this},add:function(a){return this.r+=a.r,this.g+=a.g,this.b+=a.b,this},addColors:function(a,b){return this.r=a.r+b.r,this.g=a.g+b.g,this.b=a.b+b.b,this},addScalar:function(a){return this.r+=a,this.g+=a,this.b+=a,this},multiply:function(a){return this.r*=a.r,this.g*=a.g,this.b*=a.b,this},multiplyScalar:function(a){return this.r*=a,this.g*=a,this.b*=a,this},lerp:function(a,b){return this.r+=(a.r-this.r)*b,this.g+=(a.g-this.g)*b,this.b+=(a.b-this.b)*b,this},equals:function(a){return a.r===this.r&&a.g===this.g&&a.b===this.b},fromArray:function(a){return this.r=a[0],this.g=a[1],this.b=a[2],this},toArray:function(){return[this.r,this.g,this.b]},clone:function(){return(new a.Color).setRGB(this.r,this.g,this.b)}},a.ColorKeywords={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},a.Quaternion=function(a,b,c,d){this._x=a||0,this._y=b||0,this._z=c||0,this._w=void 0!==d?d:1},a.Quaternion.prototype={constructor:a.Quaternion,_x:0,_y:0,_z:0,_w:0,get x(){return this._x},set x(a){this._x=a,this.onChangeCallback()},get y(){return this._y},set y(a){this._y=a,this.onChangeCallback()},get z(){return this._z},set z(a){this._z=a,this.onChangeCallback()},get w(){return this._w},set w(a){this._w=a,this.onChangeCallback()},set:function(a,b,c,d){return this._x=a,this._y=b,this._z=c,this._w=d,this.onChangeCallback(),this},copy:function(a){return this._x=a.x,this._y=a.y,this._z=a.z,this._w=a.w,this.onChangeCallback(),this},setFromEuler:function(b,c){if(b instanceof a.Euler==!1)throw new Error("THREE.Quaternion: .setFromEuler() now expects a Euler rotation rather than a Vector3 and order.");var d=Math.cos(b._x/2),e=Math.cos(b._y/2),f=Math.cos(b._z/2),g=Math.sin(b._x/2),h=Math.sin(b._y/2),i=Math.sin(b._z/2);return"XYZ"===b.order?(this._x=g*e*f+d*h*i,this._y=d*h*f-g*e*i,this._z=d*e*i+g*h*f,this._w=d*e*f-g*h*i):"YXZ"===b.order?(this._x=g*e*f+d*h*i,this._y=d*h*f-g*e*i,this._z=d*e*i-g*h*f,this._w=d*e*f+g*h*i):"ZXY"===b.order?(this._x=g*e*f-d*h*i,this._y=d*h*f+g*e*i,this._z=d*e*i+g*h*f,this._w=d*e*f-g*h*i):"ZYX"===b.order?(this._x=g*e*f-d*h*i,this._y=d*h*f+g*e*i,this._z=d*e*i-g*h*f,this._w=d*e*f+g*h*i):"YZX"===b.order?(this._x=g*e*f+d*h*i,this._y=d*h*f+g*e*i,this._z=d*e*i-g*h*f,this._w=d*e*f-g*h*i):"XZY"===b.order&&(this._x=g*e*f-d*h*i,this._y=d*h*f-g*e*i,this._z=d*e*i+g*h*f,this._w=d*e*f+g*h*i),c!==!1&&this.onChangeCallback(),this},setFromAxisAngle:function(a,b){var c=b/2,d=Math.sin(c);return this._x=a.x*d,this._y=a.y*d,this._z=a.z*d,this._w=Math.cos(c),this.onChangeCallback(),this},setFromRotationMatrix:function(a){var b,c=a.elements,d=c[0],e=c[4],f=c[8],g=c[1],h=c[5],i=c[9],j=c[2],k=c[6],l=c[10],m=d+h+l;return m>0?(b=.5/Math.sqrt(m+1),this._w=.25/b,this._x=(k-i)*b,this._y=(f-j)*b,this._z=(g-e)*b):d>h&&d>l?(b=2*Math.sqrt(1+d-h-l),this._w=(k-i)/b,this._x=.25*b,this._y=(e+g)/b,this._z=(f+j)/b):h>l?(b=2*Math.sqrt(1+h-d-l),this._w=(f-j)/b,this._x=(e+g)/b,this._y=.25*b,this._z=(i+k)/b):(b=2*Math.sqrt(1+l-d-h),this._w=(g-e)/b,this._x=(f+j)/b,this._y=(i+k)/b,this._z=.25*b),this.onChangeCallback(),this},setFromUnitVectors:function(){var b,c,d=1e-6;return function(e,f){return void 0===b&&(b=new a.Vector3),c=e.dot(f)+1,d>c?(c=0,Math.abs(e.x)>Math.abs(e.z)?b.set(-e.y,e.x,0):b.set(0,-e.z,e.y)):b.crossVectors(e,f),this._x=b.x,this._y=b.y,this._z=b.z,this._w=c,this.normalize(),this}}(),inverse:function(){return this.conjugate().normalize(),this},conjugate:function(){return this._x*=-1,this._y*=-1,this._z*=-1,this.onChangeCallback(),this},dot:function(a){return this._x*a._x+this._y*a._y+this._z*a._z+this._w*a._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var a=this.length();return 0===a?(this._x=0,this._y=0,this._z=0,this._w=1):(a=1/a,this._x=this._x*a,this._y=this._y*a,this._z=this._z*a,this._w=this._w*a),this.onChangeCallback(),this},multiply:function(a,b){return void 0!==b?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(a,b)):this.multiplyQuaternions(this,a)},multiplyQuaternions:function(a,b){var c=a._x,d=a._y,e=a._z,f=a._w,g=b._x,h=b._y,i=b._z,j=b._w;return this._x=c*j+f*g+d*i-e*h,this._y=d*j+f*h+e*g-c*i,this._z=e*j+f*i+c*h-d*g,this._w=f*j-c*g-d*h-e*i,this.onChangeCallback(),this},multiplyVector3:function(a){return console.warn("THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead."),a.applyQuaternion(this)},slerp:function(a,b){if(0===b)return this;if(1===b)return this.copy(a);var c=this._x,d=this._y,e=this._z,f=this._w,g=f*a._w+c*a._x+d*a._y+e*a._z;if(0>g?(this._w=-a._w,this._x=-a._x,this._y=-a._y,this._z=-a._z,g=-g):this.copy(a),g>=1)return this._w=f,this._x=c,this._y=d,this._z=e,this;var h=Math.acos(g),i=Math.sqrt(1-g*g);if(Math.abs(i)<.001)return this._w=.5*(f+this._w),this._x=.5*(c+this._x),this._y=.5*(d+this._y),this._z=.5*(e+this._z),this;var j=Math.sin((1-b)*h)/i,k=Math.sin(b*h)/i;return this._w=f*j+this._w*k,this._x=c*j+this._x*k,this._y=d*j+this._y*k,this._z=e*j+this._z*k,this.onChangeCallback(),this},equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._w===this._w},fromArray:function(a,b){return void 0===b&&(b=0),this._x=a[b],this._y=a[b+1],this._z=a[b+2],this._w=a[b+3],this.onChangeCallback(),this},toArray:function(a,b){return void 0===a&&(a=[]),void 0===b&&(b=0),a[b]=this._x,a[b+1]=this._y,a[b+2]=this._z,a[b+3]=this._w,a},onChange:function(a){return this.onChangeCallback=a,this},onChangeCallback:function(){},clone:function(){return new a.Quaternion(this._x,this._y,this._z,this._w)}},a.Quaternion.slerp=function(a,b,c,d){return c.copy(a).slerp(b,d)},a.Vector2=function(a,b){this.x=a||0,this.y=b||0},a.Vector2.prototype={constructor:a.Vector2,set:function(a,b){return this.x=a,this.y=b,this},setX:function(a){return this.x=a,this},setY:function(a){return this.y=a,this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;default:throw new Error("index is out of range: "+a)}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+a)}},copy:function(a){return this.x=a.x,this.y=a.y,this},add:function(a,b){return void 0!==b?(console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b)):(this.x+=a.x,this.y+=a.y,this)},addVectors:function(a,b){return this.x=a.x+b.x,this.y=a.y+b.y,this},addScalar:function(a){return this.x+=a,this.y+=a,this},sub:function(a,b){return void 0!==b?(console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b)):(this.x-=a.x,this.y-=a.y,this)},subVectors:function(a,b){return this.x=a.x-b.x,this.y=a.y-b.y,this},multiply:function(a){return this.x*=a.x,this.y*=a.y,this},multiplyScalar:function(a){return this.x*=a,this.y*=a,this},divide:function(a){return this.x/=a.x,this.y/=a.y,this},divideScalar:function(a){if(0!==a){var b=1/a;this.x*=b,this.y*=b}else this.x=0,this.y=0;return this},min:function(a){return this.x>a.x&&(this.x=a.x),this.y>a.y&&(this.y=a.y),this},max:function(a){return this.xb.x&&(this.x=b.x),this.yb.y&&(this.y=b.y),this},clampScalar:function(){var b,c;return function(d,e){return void 0===b&&(b=new a.Vector2,c=new a.Vector2),b.set(d,d),c.set(e,e),this.clamp(b,c)}}(),floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},roundToZero:function(){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:function(){return this.x=-this.x,this.y=-this.y,this},dot:function(a){return this.x*a.x+this.y*a.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){return this.divideScalar(this.length())},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x,c=this.y-a.y;return b*b+c*c},setLength:function(a){var b=this.length();return 0!==b&&a!==b&&this.multiplyScalar(a/b),this},lerp:function(a,b){return this.x+=(a.x-this.x)*b,this.y+=(a.y-this.y)*b,this},equals:function(a){return a.x===this.x&&a.y===this.y},fromArray:function(a,b){return void 0===b&&(b=0),this.x=a[b],this.y=a[b+1],this},toArray:function(a,b){return void 0===a&&(a=[]),void 0===b&&(b=0),a[b]=this.x,a[b+1]=this.y,a},clone:function(){return new a.Vector2(this.x,this.y)}},a.Vector3=function(a,b,c){this.x=a||0,this.y=b||0,this.z=c||0},a.Vector3.prototype={constructor:a.Vector3,set:function(a,b,c){return this.x=a,this.y=b,this.z=c,this},setX:function(a){return this.x=a,this},setY:function(a){return this.y=a,this},setZ:function(a){return this.z=a,this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;default:throw new Error("index is out of range: "+a)}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+a)}},copy:function(a){return this.x=a.x,this.y=a.y,this.z=a.z,this},add:function(a,b){return void 0!==b?(console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b)):(this.x+=a.x,this.y+=a.y,this.z+=a.z,this)},addScalar:function(a){return this.x+=a,this.y+=a,this.z+=a,this},addVectors:function(a,b){return this.x=a.x+b.x,this.y=a.y+b.y,this.z=a.z+b.z,this},sub:function(a,b){return void 0!==b?(console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b)):(this.x-=a.x,this.y-=a.y,this.z-=a.z,this)},subVectors:function(a,b){return this.x=a.x-b.x,this.y=a.y-b.y,this.z=a.z-b.z,this},multiply:function(a,b){return void 0!==b?(console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(a,b)):(this.x*=a.x,this.y*=a.y,this.z*=a.z,this)},multiplyScalar:function(a){return this.x*=a,this.y*=a,this.z*=a,this},multiplyVectors:function(a,b){return this.x=a.x*b.x,this.y=a.y*b.y,this.z=a.z*b.z,this},applyEuler:function(){var b;return function(c){return c instanceof a.Euler==!1&&console.error("THREE.Vector3: .applyEuler() now expects a Euler rotation rather than a Vector3 and order."),void 0===b&&(b=new a.Quaternion),this.applyQuaternion(b.setFromEuler(c)),this}}(),applyAxisAngle:function(){var b;return function(c,d){return void 0===b&&(b=new a.Quaternion),this.applyQuaternion(b.setFromAxisAngle(c,d)),this}}(),applyMatrix3:function(a){var b=this.x,c=this.y,d=this.z,e=a.elements;return this.x=e[0]*b+e[3]*c+e[6]*d,this.y=e[1]*b+e[4]*c+e[7]*d,this.z=e[2]*b+e[5]*c+e[8]*d,this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z,e=a.elements;return this.x=e[0]*b+e[4]*c+e[8]*d+e[12],this.y=e[1]*b+e[5]*c+e[9]*d+e[13],this.z=e[2]*b+e[6]*c+e[10]*d+e[14],this},applyProjection:function(a){var b=this.x,c=this.y,d=this.z,e=a.elements,f=1/(e[3]*b+e[7]*c+e[11]*d+e[15]);return this.x=(e[0]*b+e[4]*c+e[8]*d+e[12])*f,this.y=(e[1]*b+e[5]*c+e[9]*d+e[13])*f,this.z=(e[2]*b+e[6]*c+e[10]*d+e[14])*f,this},applyQuaternion:function(a){var b=this.x,c=this.y,d=this.z,e=a.x,f=a.y,g=a.z,h=a.w,i=h*b+f*d-g*c,j=h*c+g*b-e*d,k=h*d+e*c-f*b,l=-e*b-f*c-g*d;return this.x=i*h+l*-e+j*-g-k*-f,this.y=j*h+l*-f+k*-e-i*-g,this.z=k*h+l*-g+i*-f-j*-e,this},project:function(){var b;return function(c){return void 0===b&&(b=new a.Matrix4),b.multiplyMatrices(c.projectionMatrix,b.getInverse(c.matrixWorld)),this.applyProjection(b)}}(),unproject:function(){var b;return function(c){return void 0===b&&(b=new a.Matrix4),b.multiplyMatrices(c.matrixWorld,b.getInverse(c.projectionMatrix)),this.applyProjection(b)}}(),transformDirection:function(a){var b=this.x,c=this.y,d=this.z,e=a.elements;return this.x=e[0]*b+e[4]*c+e[8]*d,this.y=e[1]*b+e[5]*c+e[9]*d,this.z=e[2]*b+e[6]*c+e[10]*d,this.normalize(),this},divide:function(a){return this.x/=a.x,this.y/=a.y,this.z/=a.z,this},divideScalar:function(a){if(0!==a){var b=1/a;this.x*=b,this.y*=b,this.z*=b}else this.x=0,this.y=0,this.z=0;return this},min:function(a){return this.x>a.x&&(this.x=a.x),this.y>a.y&&(this.y=a.y),this.z>a.z&&(this.z=a.z),this},max:function(a){return this.xb.x&&(this.x=b.x),this.yb.y&&(this.y=b.y),this.zb.z&&(this.z=b.z),this},clampScalar:function(){var b,c;return function(d,e){return void 0===b&&(b=new a.Vector3,c=new a.Vector3),b.set(d,d,d),c.set(e,e,e),this.clamp(b,c)}}(),floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this},roundToZero:function(){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:function(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){var b=this.length();return 0!==b&&a!==b&&this.multiplyScalar(a/b),this},lerp:function(a,b){return this.x+=(a.x-this.x)*b,this.y+=(a.y-this.y)*b,this.z+=(a.z-this.z)*b,this},cross:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(a,b);var c=this.x,d=this.y,e=this.z;return this.x=d*a.z-e*a.y,this.y=e*a.x-c*a.z,this.z=c*a.y-d*a.x,this},crossVectors:function(a,b){var c=a.x,d=a.y,e=a.z,f=b.x,g=b.y,h=b.z;return this.x=d*h-e*g,this.y=e*f-c*h,this.z=c*g-d*f,this},projectOnVector:function(){var b,c;return function(d){return void 0===b&&(b=new a.Vector3),b.copy(d).normalize(),c=this.dot(b),this.copy(b).multiplyScalar(c)}}(),projectOnPlane:function(){var b;return function(c){return void 0===b&&(b=new a.Vector3),b.copy(this).projectOnVector(c),this.sub(b)}}(),reflect:function(){var b;return function(c){return void 0===b&&(b=new a.Vector3),this.sub(b.copy(c).multiplyScalar(2*this.dot(c)))}}(),angleTo:function(b){var c=this.dot(b)/(this.length()*b.length());return Math.acos(a.Math.clamp(c,-1,1))},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x,c=this.y-a.y,d=this.z-a.z;return b*b+c*c+d*d},setEulerFromRotationMatrix:function(a,b){console.error("THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.")},setEulerFromQuaternion:function(a,b){console.error("THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.")},getPositionFromMatrix:function(a){return console.warn("THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition()."),this.setFromMatrixPosition(a)},getScaleFromMatrix:function(a){return console.warn("THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale()."),this.setFromMatrixScale(a)},getColumnFromMatrix:function(a,b){return console.warn("THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn()."),this.setFromMatrixColumn(a,b)},setFromMatrixPosition:function(a){return this.x=a.elements[12],this.y=a.elements[13],this.z=a.elements[14],this},setFromMatrixScale:function(a){var b=this.set(a.elements[0],a.elements[1],a.elements[2]).length(),c=this.set(a.elements[4],a.elements[5],a.elements[6]).length(),d=this.set(a.elements[8],a.elements[9],a.elements[10]).length();return this.x=b,this.y=c,this.z=d,this},setFromMatrixColumn:function(a,b){var c=4*a,d=b.elements;return this.x=d[c],this.y=d[c+1],this.z=d[c+2],this},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z},fromArray:function(a,b){return void 0===b&&(b=0),this.x=a[b],this.y=a[b+1],this.z=a[b+2],this},toArray:function(a,b){return void 0===a&&(a=[]),void 0===b&&(b=0),a[b]=this.x,a[b+1]=this.y,a[b+2]=this.z,a},clone:function(){return new a.Vector3(this.x,this.y,this.z)}},a.Vector4=function(a,b,c,d){this.x=a||0,this.y=b||0,this.z=c||0,this.w=void 0!==d?d:1},a.Vector4.prototype={constructor:a.Vector4,set:function(a,b,c,d){return this.x=a,this.y=b,this.z=c,this.w=d,this},setX:function(a){return this.x=a,this},setY:function(a){return this.y=a,this},setZ:function(a){return this.z=a,this},setW:function(a){return this.w=a,this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;case 3:this.w=b;break;default:throw new Error("index is out of range: "+a)}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+a)}},copy:function(a){return this.x=a.x,this.y=a.y,this.z=a.z,this.w=void 0!==a.w?a.w:1,this},add:function(a,b){return void 0!==b?(console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b)):(this.x+=a.x,this.y+=a.y,this.z+=a.z,this.w+=a.w,this)},addScalar:function(a){return this.x+=a,this.y+=a,this.z+=a,this.w+=a,this},addVectors:function(a,b){return this.x=a.x+b.x,this.y=a.y+b.y,this.z=a.z+b.z,this.w=a.w+b.w,this},sub:function(a,b){return void 0!==b?(console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b)):(this.x-=a.x,this.y-=a.y,this.z-=a.z,this.w-=a.w,this)},subVectors:function(a,b){return this.x=a.x-b.x,this.y=a.y-b.y,this.z=a.z-b.z,this.w=a.w-b.w,this},multiplyScalar:function(a){return this.x*=a,this.y*=a,this.z*=a,this.w*=a,this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z,e=this.w,f=a.elements;return this.x=f[0]*b+f[4]*c+f[8]*d+f[12]*e,this.y=f[1]*b+f[5]*c+f[9]*d+f[13]*e,this.z=f[2]*b+f[6]*c+f[10]*d+f[14]*e,this.w=f[3]*b+f[7]*c+f[11]*d+f[15]*e,this},divideScalar:function(a){if(0!==a){var b=1/a;this.x*=b,this.y*=b,this.z*=b,this.w*=b}else this.x=0,this.y=0,this.z=0,this.w=1;return this},setAxisAngleFromQuaternion:function(a){this.w=2*Math.acos(a.w);var b=Math.sqrt(1-a.w*a.w);return 1e-4>b?(this.x=1,this.y=0,this.z=0):(this.x=a.x/b,this.y=a.y/b,this.z=a.z/b),this},setAxisAngleFromRotationMatrix:function(a){var b,c,d,e,f=.01,g=.1,h=a.elements,i=h[0],j=h[4],k=h[8],l=h[1],m=h[5],n=h[9],o=h[2],p=h[6],q=h[10];if(Math.abs(j-l)s&&r>t?f>r?(c=0,d=.707106781,e=.707106781):(c=Math.sqrt(r),d=u/c,e=v/c):s>t?f>s?(c=.707106781,d=0,e=.707106781):(d=Math.sqrt(s),c=u/d,e=w/d):f>t?(c=.707106781,d=.707106781,e=0):(e=Math.sqrt(t),c=v/e,d=w/e),this.set(c,d,e,b),this}var x=Math.sqrt((p-n)*(p-n)+(k-o)*(k-o)+(l-j)*(l-j));return Math.abs(x)<.001&&(x=1),this.x=(p-n)/x,this.y=(k-o)/x,this.z=(l-j)/x,this.w=Math.acos((i+m+q-1)/2),this},min:function(a){return this.x>a.x&&(this.x=a.x),this.y>a.y&&(this.y=a.y),this.z>a.z&&(this.z=a.z),this.w>a.w&&(this.w=a.w),this},max:function(a){return this.xb.x&&(this.x=b.x),this.yb.y&&(this.y=b.y),this.zb.z&&(this.z=b.z),this.wb.w&&(this.w=b.w),this},clampScalar:function(){var b,c;return function(d,e){return void 0===b&&(b=new a.Vector4,c=new a.Vector4),b.set(d,d,d,d),c.set(e,e,e,e),this.clamp(b,c)}}(),floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this},roundToZero:function(){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.w=this.w<0?Math.ceil(this.w):Math.floor(this.w),this},negate:function(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){var b=this.length();return 0!==b&&a!==b&&this.multiplyScalar(a/b),this},lerp:function(a,b){return this.x+=(a.x-this.x)*b,this.y+=(a.y-this.y)*b,this.z+=(a.z-this.z)*b,this.w+=(a.w-this.w)*b,this},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z&&a.w===this.w},fromArray:function(a,b){return void 0===b&&(b=0),this.x=a[b],this.y=a[b+1],this.z=a[b+2],this.w=a[b+3],this},toArray:function(a,b){return void 0===a&&(a=[]),void 0===b&&(b=0),a[b]=this.x,a[b+1]=this.y,a[b+2]=this.z,a[b+3]=this.w,a},clone:function(){return new a.Vector4(this.x,this.y,this.z,this.w)}},a.Euler=function(b,c,d,e){this._x=b||0,this._y=c||0,this._z=d||0,this._order=e||a.Euler.DefaultOrder},a.Euler.RotationOrders=["XYZ","YZX","ZXY","XZY","YXZ","ZYX"],a.Euler.DefaultOrder="XYZ",a.Euler.prototype={constructor:a.Euler,_x:0,_y:0,_z:0,_order:a.Euler.DefaultOrder,get x(){return this._x},set x(a){this._x=a,this.onChangeCallback()},get y(){return this._y},set y(a){this._y=a,this.onChangeCallback()},get z(){return this._z},set z(a){this._z=a,this.onChangeCallback()},get order(){return this._order},set order(a){this._order=a,this.onChangeCallback()},set:function(a,b,c,d){return this._x=a,this._y=b,this._z=c,this._order=d||this._order,this.onChangeCallback(),this},copy:function(a){return this._x=a._x,this._y=a._y,this._z=a._z,this._order=a._order,this.onChangeCallback(),this},setFromRotationMatrix:function(b,c){var d=a.Math.clamp,e=b.elements,f=e[0],g=e[4],h=e[8],i=e[1],j=e[5],k=e[9],l=e[2],m=e[6],n=e[10];return c=c||this._order,"XYZ"===c?(this._y=Math.asin(d(h,-1,1)),Math.abs(h)<.99999?(this._x=Math.atan2(-k,n),this._z=Math.atan2(-g,f)):(this._x=Math.atan2(m,j),this._z=0)):"YXZ"===c?(this._x=Math.asin(-d(k,-1,1)),Math.abs(k)<.99999?(this._y=Math.atan2(h,n),this._z=Math.atan2(i,j)):(this._y=Math.atan2(-l,f),this._z=0)):"ZXY"===c?(this._x=Math.asin(d(m,-1,1)),Math.abs(m)<.99999?(this._y=Math.atan2(-l,n),this._z=Math.atan2(-g,j)):(this._y=0,this._z=Math.atan2(i,f))):"ZYX"===c?(this._y=Math.asin(-d(l,-1,1)),Math.abs(l)<.99999?(this._x=Math.atan2(m,n),this._z=Math.atan2(i,f)):(this._x=0,this._z=Math.atan2(-g,j))):"YZX"===c?(this._z=Math.asin(d(i,-1,1)),Math.abs(i)<.99999?(this._x=Math.atan2(-k,j),this._y=Math.atan2(-l,f)):(this._x=0,this._y=Math.atan2(h,n))):"XZY"===c?(this._z=Math.asin(-d(g,-1,1)),Math.abs(g)<.99999?(this._x=Math.atan2(m,j),this._y=Math.atan2(h,f)):(this._x=Math.atan2(-k,n),this._y=0)):console.warn("THREE.Euler: .setFromRotationMatrix() given unsupported order: "+c),this._order=c,this.onChangeCallback(),this},setFromQuaternion:function(b,c,d){var e=a.Math.clamp,f=b.x*b.x,g=b.y*b.y,h=b.z*b.z,i=b.w*b.w;return c=c||this._order,"XYZ"===c?(this._x=Math.atan2(2*(b.x*b.w-b.y*b.z),i-f-g+h),this._y=Math.asin(e(2*(b.x*b.z+b.y*b.w),-1,1)),this._z=Math.atan2(2*(b.z*b.w-b.x*b.y),i+f-g-h)):"YXZ"===c?(this._x=Math.asin(e(2*(b.x*b.w-b.y*b.z),-1,1)),this._y=Math.atan2(2*(b.x*b.z+b.y*b.w),i-f-g+h),this._z=Math.atan2(2*(b.x*b.y+b.z*b.w),i-f+g-h)):"ZXY"===c?(this._x=Math.asin(e(2*(b.x*b.w+b.y*b.z),-1,1)),this._y=Math.atan2(2*(b.y*b.w-b.z*b.x),i-f-g+h),this._z=Math.atan2(2*(b.z*b.w-b.x*b.y),i-f+g-h)):"ZYX"===c?(this._x=Math.atan2(2*(b.x*b.w+b.z*b.y),i-f-g+h),this._y=Math.asin(e(2*(b.y*b.w-b.x*b.z),-1,1)),this._z=Math.atan2(2*(b.x*b.y+b.z*b.w),i+f-g-h)):"YZX"===c?(this._x=Math.atan2(2*(b.x*b.w-b.z*b.y),i-f+g-h),this._y=Math.atan2(2*(b.y*b.w-b.x*b.z),i+f-g-h),this._z=Math.asin(e(2*(b.x*b.y+b.z*b.w),-1,1))):"XZY"===c?(this._x=Math.atan2(2*(b.x*b.w+b.y*b.z),i-f+g-h),this._y=Math.atan2(2*(b.x*b.z+b.y*b.w),i+f-g-h),this._z=Math.asin(e(2*(b.z*b.w-b.x*b.y),-1,1))):console.warn("THREE.Euler: .setFromQuaternion() given unsupported order: "+c),this._order=c,d!==!1&&this.onChangeCallback(),this},reorder:function(){var b=new a.Quaternion;return function(a){b.setFromEuler(this),this.setFromQuaternion(b,a)}}(),equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._order===this._order},fromArray:function(a){return this._x=a[0],this._y=a[1],this._z=a[2],void 0!==a[3]&&(this._order=a[3]),this.onChangeCallback(),this},toArray:function(){return[this._x,this._y,this._z,this._order]},onChange:function(a){return this.onChangeCallback=a,this},onChangeCallback:function(){},clone:function(){return new a.Euler(this._x,this._y,this._z,this._order)}},a.Line3=function(b,c){this.start=void 0!==b?b:new a.Vector3,this.end=void 0!==c?c:new a.Vector3},a.Line3.prototype={constructor:a.Line3,set:function(a,b){return this.start.copy(a),this.end.copy(b),this},copy:function(a){return this.start.copy(a.start),this.end.copy(a.end),this},center:function(b){var c=b||new a.Vector3;return c.addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(b){var c=b||new a.Vector3;return c.subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},at:function(b,c){var d=c||new a.Vector3;return this.delta(d).multiplyScalar(b).add(this.start)},closestPointToPointParameter:function(){var b=new a.Vector3,c=new a.Vector3;return function(d,e){b.subVectors(d,this.start),c.subVectors(this.end,this.start);var f=c.dot(c),g=c.dot(b),h=g/f;return e&&(h=a.Math.clamp(h,0,1)),h}}(),closestPointToPoint:function(b,c,d){var e=this.closestPointToPointParameter(b,c),f=d||new a.Vector3;return this.delta(f).multiplyScalar(e).add(this.start)},applyMatrix4:function(a){return this.start.applyMatrix4(a),this.end.applyMatrix4(a),this},equals:function(a){return a.start.equals(this.start)&&a.end.equals(this.end)},clone:function(){return(new a.Line3).copy(this)}},a.Box2=function(b,c){this.min=void 0!==b?b:new a.Vector2(1/0,1/0), +this.max=void 0!==c?c:new a.Vector2(-(1/0),-(1/0))},a.Box2.prototype={constructor:a.Box2,set:function(a,b){return this.min.copy(a),this.max.copy(b),this},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;c>b;b++)this.expandByPoint(a[b]);return this},setFromCenterAndSize:function(){var b=new a.Vector2;return function(a,c){var d=b.copy(c).multiplyScalar(.5);return this.min.copy(a).sub(d),this.max.copy(a).add(d),this}}(),copy:function(a){return this.min.copy(a.min),this.max.copy(a.max),this},makeEmpty:function(){return this.min.x=this.min.y=1/0,this.max.x=this.max.y=-(1/0),this},empty:function(){return this.max.xthis.max.x||a.ythis.max.y?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y?!0:!1},getParameter:function(b,c){var d=c||new a.Vector2;return d.set((b.x-this.min.x)/(this.max.x-this.min.x),(b.y-this.min.y)/(this.max.y-this.min.y))},isIntersectionBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y?!1:!0},clampPoint:function(b,c){var d=c||new a.Vector2;return d.copy(b).clamp(this.min,this.max)},distanceToPoint:function(){var b=new a.Vector2;return function(a){var c=b.copy(a).clamp(this.min,this.max);return c.sub(a).length()}}(),intersect:function(a){return this.min.max(a.min),this.max.min(a.max),this},union:function(a){return this.min.min(a.min),this.max.max(a.max),this},translate:function(a){return this.min.add(a),this.max.add(a),this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)},clone:function(){return(new a.Box2).copy(this)}},a.Box3=function(b,c){this.min=void 0!==b?b:new a.Vector3(1/0,1/0,1/0),this.max=void 0!==c?c:new a.Vector3(-(1/0),-(1/0),-(1/0))},a.Box3.prototype={constructor:a.Box3,set:function(a,b){return this.min.copy(a),this.max.copy(b),this},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;c>b;b++)this.expandByPoint(a[b]);return this},setFromCenterAndSize:function(){var b=new a.Vector3;return function(a,c){var d=b.copy(c).multiplyScalar(.5);return this.min.copy(a).sub(d),this.max.copy(a).add(d),this}}(),setFromObject:function(){var b=new a.Vector3;return function(c){var d=this;return c.updateMatrixWorld(!0),this.makeEmpty(),c.traverse(function(c){var e=c.geometry;if(void 0!==e)if(e instanceof a.Geometry)for(var f=e.vertices,g=0,h=f.length;h>g;g++)b.copy(f[g]),b.applyMatrix4(c.matrixWorld),d.expandByPoint(b);else if(e instanceof a.BufferGeometry&&void 0!==e.attributes.position)for(var i=e.attributes.position.array,g=0,h=i.length;h>g;g+=3)b.set(i[g],i[g+1],i[g+2]),b.applyMatrix4(c.matrixWorld),d.expandByPoint(b)}),this}}(),copy:function(a){return this.min.copy(a.min),this.max.copy(a.max),this},makeEmpty:function(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-(1/0),this},empty:function(){return this.max.xthis.max.x||a.ythis.max.y||a.zthis.max.z?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y&&this.min.z<=a.min.z&&a.max.z<=this.max.z?!0:!1},getParameter:function(b,c){var d=c||new a.Vector3;return d.set((b.x-this.min.x)/(this.max.x-this.min.x),(b.y-this.min.y)/(this.max.y-this.min.y),(b.z-this.min.z)/(this.max.z-this.min.z))},isIntersectionBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y||a.max.zthis.max.z?!1:!0},clampPoint:function(b,c){var d=c||new a.Vector3;return d.copy(b).clamp(this.min,this.max)},distanceToPoint:function(){var b=new a.Vector3;return function(a){var c=b.copy(a).clamp(this.min,this.max);return c.sub(a).length()}}(),getBoundingSphere:function(){var b=new a.Vector3;return function(c){var d=c||new a.Sphere;return d.center=this.center(),d.radius=.5*this.size(b).length(),d}}(),intersect:function(a){return this.min.max(a.min),this.max.min(a.max),this},union:function(a){return this.min.min(a.min),this.max.max(a.max),this},applyMatrix4:function(){var b=[new a.Vector3,new a.Vector3,new a.Vector3,new a.Vector3,new a.Vector3,new a.Vector3,new a.Vector3,new a.Vector3];return function(a){return b[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(a),b[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(a),b[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(a),b[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(a),b[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(a),b[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(a),b[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(a),b[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(a),this.makeEmpty(),this.setFromPoints(b),this}}(),translate:function(a){return this.min.add(a),this.max.add(a),this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)},clone:function(){return(new a.Box3).copy(this)}},a.Matrix3=function(){this.elements=new Float32Array([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.")},a.Matrix3.prototype={constructor:a.Matrix3,set:function(a,b,c,d,e,f,g,h,i){var j=this.elements;return j[0]=a,j[3]=b,j[6]=c,j[1]=d,j[4]=e,j[7]=f,j[2]=g,j[5]=h,j[8]=i,this},identity:function(){return this.set(1,0,0,0,1,0,0,0,1),this},copy:function(a){var b=a.elements;return this.set(b[0],b[3],b[6],b[1],b[4],b[7],b[2],b[5],b[8]),this},multiplyVector3:function(a){return console.warn("THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead."),a.applyMatrix3(this)},multiplyVector3Array:function(a){return console.warn("THREE.Matrix3: .multiplyVector3Array() has been renamed. Use matrix.applyToVector3Array( array ) instead."),this.applyToVector3Array(a)},applyToVector3Array:function(){var b=new a.Vector3;return function(a,c,d){void 0===c&&(c=0),void 0===d&&(d=a.length);for(var e=0,f=c;d>e;e+=3,f+=3)b.x=a[f],b.y=a[f+1],b.z=a[f+2],b.applyMatrix3(this),a[f]=b.x,a[f+1]=b.y,a[f+2]=b.z;return a}}(),multiplyScalar:function(a){var b=this.elements;return b[0]*=a,b[3]*=a,b[6]*=a,b[1]*=a,b[4]*=a,b[7]*=a,b[2]*=a,b[5]*=a,b[8]*=a,this},determinant:function(){var a=this.elements,b=a[0],c=a[1],d=a[2],e=a[3],f=a[4],g=a[5],h=a[6],i=a[7],j=a[8];return b*f*j-b*g*i-c*e*j+c*g*h+d*e*i-d*f*h},getInverse:function(a,b){var c=a.elements,d=this.elements;d[0]=c[10]*c[5]-c[6]*c[9],d[1]=-c[10]*c[1]+c[2]*c[9],d[2]=c[6]*c[1]-c[2]*c[5],d[3]=-c[10]*c[4]+c[6]*c[8],d[4]=c[10]*c[0]-c[2]*c[8],d[5]=-c[6]*c[0]+c[2]*c[4],d[6]=c[9]*c[4]-c[5]*c[8],d[7]=-c[9]*c[0]+c[1]*c[8],d[8]=c[5]*c[0]-c[1]*c[4];var e=c[0]*d[0]+c[1]*d[3]+c[2]*d[6];if(0===e){var f="Matrix3.getInverse(): can't invert matrix, determinant is 0";if(b)throw new Error(f);return console.warn(f),this.identity(),this}return this.multiplyScalar(1/e),this},transpose:function(){var a,b=this.elements;return a=b[1],b[1]=b[3],b[3]=a,a=b[2],b[2]=b[6],b[6]=a,a=b[5],b[5]=b[7],b[7]=a,this},flattenToArrayOffset:function(a,b){var c=this.elements;return a[b]=c[0],a[b+1]=c[1],a[b+2]=c[2],a[b+3]=c[3],a[b+4]=c[4],a[b+5]=c[5],a[b+6]=c[6],a[b+7]=c[7],a[b+8]=c[8],a},getNormalMatrix:function(a){return this.getInverse(a).transpose(),this},transposeIntoArray:function(a){var b=this.elements;return a[0]=b[0],a[1]=b[3],a[2]=b[6],a[3]=b[1],a[4]=b[4],a[5]=b[7],a[6]=b[2],a[7]=b[5],a[8]=b[8],this},fromArray:function(a){return this.elements.set(a),this},toArray:function(){var a=this.elements;return[a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8]]},clone:function(){return(new a.Matrix3).fromArray(this.elements)}},a.Matrix4=function(){this.elements=new Float32Array([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.")},a.Matrix4.prototype={constructor:a.Matrix4,set:function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){var q=this.elements;return q[0]=a,q[4]=b,q[8]=c,q[12]=d,q[1]=e,q[5]=f,q[9]=g,q[13]=h,q[2]=i,q[6]=j,q[10]=k,q[14]=l,q[3]=m,q[7]=n,q[11]=o,q[15]=p,this},identity:function(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this},copy:function(a){return this.elements.set(a.elements),this},extractPosition:function(a){return console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition()."),this.copyPosition(a)},copyPosition:function(a){var b=this.elements,c=a.elements;return b[12]=c[12],b[13]=c[13],b[14]=c[14],this},extractRotation:function(){var b=new a.Vector3;return function(a){var c=this.elements,d=a.elements,e=1/b.set(d[0],d[1],d[2]).length(),f=1/b.set(d[4],d[5],d[6]).length(),g=1/b.set(d[8],d[9],d[10]).length();return c[0]=d[0]*e,c[1]=d[1]*e,c[2]=d[2]*e,c[4]=d[4]*f,c[5]=d[5]*f,c[6]=d[6]*f,c[8]=d[8]*g,c[9]=d[9]*g,c[10]=d[10]*g,this}}(),makeRotationFromEuler:function(b){b instanceof a.Euler==!1&&console.error("THREE.Matrix: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");var c=this.elements,d=b.x,e=b.y,f=b.z,g=Math.cos(d),h=Math.sin(d),i=Math.cos(e),j=Math.sin(e),k=Math.cos(f),l=Math.sin(f);if("XYZ"===b.order){var m=g*k,n=g*l,o=h*k,p=h*l;c[0]=i*k,c[4]=-i*l,c[8]=j,c[1]=n+o*j,c[5]=m-p*j,c[9]=-h*i,c[2]=p-m*j,c[6]=o+n*j,c[10]=g*i}else if("YXZ"===b.order){var q=i*k,r=i*l,s=j*k,t=j*l;c[0]=q+t*h,c[4]=s*h-r,c[8]=g*j,c[1]=g*l,c[5]=g*k,c[9]=-h,c[2]=r*h-s,c[6]=t+q*h,c[10]=g*i}else if("ZXY"===b.order){var q=i*k,r=i*l,s=j*k,t=j*l;c[0]=q-t*h,c[4]=-g*l,c[8]=s+r*h,c[1]=r+s*h,c[5]=g*k,c[9]=t-q*h,c[2]=-g*j,c[6]=h,c[10]=g*i}else if("ZYX"===b.order){var m=g*k,n=g*l,o=h*k,p=h*l;c[0]=i*k,c[4]=o*j-n,c[8]=m*j+p,c[1]=i*l,c[5]=p*j+m,c[9]=n*j-o,c[2]=-j,c[6]=h*i,c[10]=g*i}else if("YZX"===b.order){var u=g*i,v=g*j,w=h*i,x=h*j;c[0]=i*k,c[4]=x-u*l,c[8]=w*l+v,c[1]=l,c[5]=g*k,c[9]=-h*k,c[2]=-j*k,c[6]=v*l+w,c[10]=u-x*l}else if("XZY"===b.order){var u=g*i,v=g*j,w=h*i,x=h*j;c[0]=i*k,c[4]=-l,c[8]=j*k,c[1]=u*l+x,c[5]=g*k,c[9]=v*l-w,c[2]=w*l-v,c[6]=h*k,c[10]=x*l+u}return c[3]=0,c[7]=0,c[11]=0,c[12]=0,c[13]=0,c[14]=0,c[15]=1,this},setRotationFromQuaternion:function(a){return console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion()."),this.makeRotationFromQuaternion(a)},makeRotationFromQuaternion:function(a){var b=this.elements,c=a.x,d=a.y,e=a.z,f=a.w,g=c+c,h=d+d,i=e+e,j=c*g,k=c*h,l=c*i,m=d*h,n=d*i,o=e*i,p=f*g,q=f*h,r=f*i;return b[0]=1-(m+o),b[4]=k-r,b[8]=l+q,b[1]=k+r,b[5]=1-(j+o),b[9]=n-p,b[2]=l-q,b[6]=n+p,b[10]=1-(j+m),b[3]=0,b[7]=0,b[11]=0,b[12]=0,b[13]=0,b[14]=0,b[15]=1,this},lookAt:function(){var b=new a.Vector3,c=new a.Vector3,d=new a.Vector3;return function(a,e,f){var g=this.elements;return d.subVectors(a,e).normalize(),0===d.length()&&(d.z=1),b.crossVectors(f,d).normalize(),0===b.length()&&(d.x+=1e-4,b.crossVectors(f,d).normalize()),c.crossVectors(d,b),g[0]=b.x,g[4]=c.x,g[8]=d.x,g[1]=b.y,g[5]=c.y,g[9]=d.y,g[2]=b.z,g[6]=c.z,g[10]=d.z,this}}(),multiply:function(a,b){return void 0!==b?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(a,b)):this.multiplyMatrices(this,a)},multiplyMatrices:function(a,b){var c=a.elements,d=b.elements,e=this.elements,f=c[0],g=c[4],h=c[8],i=c[12],j=c[1],k=c[5],l=c[9],m=c[13],n=c[2],o=c[6],p=c[10],q=c[14],r=c[3],s=c[7],t=c[11],u=c[15],v=d[0],w=d[4],x=d[8],y=d[12],z=d[1],A=d[5],B=d[9],C=d[13],D=d[2],E=d[6],F=d[10],G=d[14],H=d[3],I=d[7],J=d[11],K=d[15];return e[0]=f*v+g*z+h*D+i*H,e[4]=f*w+g*A+h*E+i*I,e[8]=f*x+g*B+h*F+i*J,e[12]=f*y+g*C+h*G+i*K,e[1]=j*v+k*z+l*D+m*H,e[5]=j*w+k*A+l*E+m*I,e[9]=j*x+k*B+l*F+m*J,e[13]=j*y+k*C+l*G+m*K,e[2]=n*v+o*z+p*D+q*H,e[6]=n*w+o*A+p*E+q*I,e[10]=n*x+o*B+p*F+q*J,e[14]=n*y+o*C+p*G+q*K,e[3]=r*v+s*z+t*D+u*H,e[7]=r*w+s*A+t*E+u*I,e[11]=r*x+s*B+t*F+u*J,e[15]=r*y+s*C+t*G+u*K,this},multiplyToArray:function(a,b,c){var d=this.elements;return this.multiplyMatrices(a,b),c[0]=d[0],c[1]=d[1],c[2]=d[2],c[3]=d[3],c[4]=d[4],c[5]=d[5],c[6]=d[6],c[7]=d[7],c[8]=d[8],c[9]=d[9],c[10]=d[10],c[11]=d[11],c[12]=d[12],c[13]=d[13],c[14]=d[14],c[15]=d[15],this},multiplyScalar:function(a){var b=this.elements;return b[0]*=a,b[4]*=a,b[8]*=a,b[12]*=a,b[1]*=a,b[5]*=a,b[9]*=a,b[13]*=a,b[2]*=a,b[6]*=a,b[10]*=a,b[14]*=a,b[3]*=a,b[7]*=a,b[11]*=a,b[15]*=a,this},multiplyVector3:function(a){return console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) or vector.applyProjection( matrix ) instead."),a.applyProjection(this)},multiplyVector4:function(a){return console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead."),a.applyMatrix4(this)},multiplyVector3Array:function(a){return console.warn("THREE.Matrix4: .multiplyVector3Array() has been renamed. Use matrix.applyToVector3Array( array ) instead."),this.applyToVector3Array(a)},applyToVector3Array:function(){var b=new a.Vector3;return function(a,c,d){void 0===c&&(c=0),void 0===d&&(d=a.length);for(var e=0,f=c;d>e;e+=3,f+=3)b.x=a[f],b.y=a[f+1],b.z=a[f+2],b.applyMatrix4(this),a[f]=b.x,a[f+1]=b.y,a[f+2]=b.z;return a}}(),rotateAxis:function(a){console.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead."),a.transformDirection(this)},crossVector:function(a){return console.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead."),a.applyMatrix4(this)},determinant:function(){var a=this.elements,b=a[0],c=a[4],d=a[8],e=a[12],f=a[1],g=a[5],h=a[9],i=a[13],j=a[2],k=a[6],l=a[10],m=a[14],n=a[3],o=a[7],p=a[11],q=a[15];return n*(+e*h*k-d*i*k-e*g*l+c*i*l+d*g*m-c*h*m)+o*(+b*h*m-b*i*l+e*f*l-d*f*m+d*i*j-e*h*j)+p*(+b*i*k-b*g*m-e*f*k+c*f*m+e*g*j-c*i*j)+q*(-d*g*j-b*h*k+b*g*l+d*f*k-c*f*l+c*h*j)},transpose:function(){var a,b=this.elements;return a=b[1],b[1]=b[4],b[4]=a,a=b[2],b[2]=b[8],b[8]=a,a=b[6],b[6]=b[9],b[9]=a,a=b[3],b[3]=b[12],b[12]=a,a=b[7],b[7]=b[13],b[13]=a,a=b[11],b[11]=b[14],b[14]=a,this},flattenToArrayOffset:function(a,b){var c=this.elements;return a[b]=c[0],a[b+1]=c[1],a[b+2]=c[2],a[b+3]=c[3],a[b+4]=c[4],a[b+5]=c[5],a[b+6]=c[6],a[b+7]=c[7],a[b+8]=c[8],a[b+9]=c[9],a[b+10]=c[10],a[b+11]=c[11],a[b+12]=c[12],a[b+13]=c[13],a[b+14]=c[14],a[b+15]=c[15],a},getPosition:function(){var b=new a.Vector3;return function(){console.warn("THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.");var a=this.elements;return b.set(a[12],a[13],a[14])}}(),setPosition:function(a){var b=this.elements;return b[12]=a.x,b[13]=a.y,b[14]=a.z,this},getInverse:function(a,b){var c=this.elements,d=a.elements,e=d[0],f=d[4],g=d[8],h=d[12],i=d[1],j=d[5],k=d[9],l=d[13],m=d[2],n=d[6],o=d[10],p=d[14],q=d[3],r=d[7],s=d[11],t=d[15];c[0]=k*p*r-l*o*r+l*n*s-j*p*s-k*n*t+j*o*t,c[4]=h*o*r-g*p*r-h*n*s+f*p*s+g*n*t-f*o*t,c[8]=g*l*r-h*k*r+h*j*s-f*l*s-g*j*t+f*k*t,c[12]=h*k*n-g*l*n-h*j*o+f*l*o+g*j*p-f*k*p,c[1]=l*o*q-k*p*q-l*m*s+i*p*s+k*m*t-i*o*t,c[5]=g*p*q-h*o*q+h*m*s-e*p*s-g*m*t+e*o*t,c[9]=h*k*q-g*l*q-h*i*s+e*l*s+g*i*t-e*k*t,c[13]=g*l*m-h*k*m+h*i*o-e*l*o-g*i*p+e*k*p,c[2]=j*p*q-l*n*q+l*m*r-i*p*r-j*m*t+i*n*t,c[6]=h*n*q-f*p*q-h*m*r+e*p*r+f*m*t-e*n*t,c[10]=f*l*q-h*j*q+h*i*r-e*l*r-f*i*t+e*j*t,c[14]=h*j*m-f*l*m-h*i*n+e*l*n+f*i*p-e*j*p,c[3]=k*n*q-j*o*q-k*m*r+i*o*r+j*m*s-i*n*s,c[7]=f*o*q-g*n*q+g*m*r-e*o*r-f*m*s+e*n*s,c[11]=g*j*q-f*k*q-g*i*r+e*k*r+f*i*s-e*j*s,c[15]=f*k*m-g*j*m+g*i*n-e*k*n-f*i*o+e*j*o;var u=e*c[0]+i*c[4]+m*c[8]+q*c[12];if(0==u){var v="Matrix4.getInverse(): can't invert matrix, determinant is 0";if(b)throw new Error(v);return console.warn(v),this.identity(),this}return this.multiplyScalar(1/u),this},translate:function(a){console.warn("THREE.Matrix4: .translate() has been removed.")},rotateX:function(a){console.warn("THREE.Matrix4: .rotateX() has been removed.")},rotateY:function(a){console.warn("THREE.Matrix4: .rotateY() has been removed.")},rotateZ:function(a){console.warn("THREE.Matrix4: .rotateZ() has been removed.")},rotateByAxis:function(a,b){console.warn("THREE.Matrix4: .rotateByAxis() has been removed.")},scale:function(a){var b=this.elements,c=a.x,d=a.y,e=a.z;return b[0]*=c,b[4]*=d,b[8]*=e,b[1]*=c,b[5]*=d,b[9]*=e,b[2]*=c,b[6]*=d,b[10]*=e,b[3]*=c,b[7]*=d,b[11]*=e,this},getMaxScaleOnAxis:function(){var a=this.elements,b=a[0]*a[0]+a[1]*a[1]+a[2]*a[2],c=a[4]*a[4]+a[5]*a[5]+a[6]*a[6],d=a[8]*a[8]+a[9]*a[9]+a[10]*a[10];return Math.sqrt(Math.max(b,Math.max(c,d)))},makeTranslation:function(a,b,c){return this.set(1,0,0,a,0,1,0,b,0,0,1,c,0,0,0,1),this},makeRotationX:function(a){var b=Math.cos(a),c=Math.sin(a);return this.set(1,0,0,0,0,b,-c,0,0,c,b,0,0,0,0,1),this},makeRotationY:function(a){var b=Math.cos(a),c=Math.sin(a);return this.set(b,0,c,0,0,1,0,0,-c,0,b,0,0,0,0,1),this},makeRotationZ:function(a){var b=Math.cos(a),c=Math.sin(a);return this.set(b,-c,0,0,c,b,0,0,0,0,1,0,0,0,0,1),this},makeRotationAxis:function(a,b){var c=Math.cos(b),d=Math.sin(b),e=1-c,f=a.x,g=a.y,h=a.z,i=e*f,j=e*g;return this.set(i*f+c,i*g-d*h,i*h+d*g,0,i*g+d*h,j*g+c,j*h-d*f,0,i*h-d*g,j*h+d*f,e*h*h+c,0,0,0,0,1),this},makeScale:function(a,b,c){return this.set(a,0,0,0,0,b,0,0,0,0,c,0,0,0,0,1),this},compose:function(a,b,c){return this.makeRotationFromQuaternion(b),this.scale(c),this.setPosition(a),this},decompose:function(){var b=new a.Vector3,c=new a.Matrix4;return function(a,d,e){var f=this.elements,g=b.set(f[0],f[1],f[2]).length(),h=b.set(f[4],f[5],f[6]).length(),i=b.set(f[8],f[9],f[10]).length(),j=this.determinant();0>j&&(g=-g),a.x=f[12],a.y=f[13],a.z=f[14],c.elements.set(this.elements);var k=1/g,l=1/h,m=1/i;return c.elements[0]*=k,c.elements[1]*=k,c.elements[2]*=k,c.elements[4]*=l,c.elements[5]*=l,c.elements[6]*=l,c.elements[8]*=m,c.elements[9]*=m,c.elements[10]*=m,d.setFromRotationMatrix(c),e.x=g,e.y=h,e.z=i,this}}(),makeFrustum:function(a,b,c,d,e,f){var g=this.elements,h=2*e/(b-a),i=2*e/(d-c),j=(b+a)/(b-a),k=(d+c)/(d-c),l=-(f+e)/(f-e),m=-2*f*e/(f-e);return g[0]=h,g[4]=0,g[8]=j,g[12]=0,g[1]=0,g[5]=i,g[9]=k,g[13]=0,g[2]=0,g[6]=0,g[10]=l,g[14]=m,g[3]=0,g[7]=0,g[11]=-1,g[15]=0,this},makePerspective:function(b,c,d,e){var f=d*Math.tan(a.Math.degToRad(.5*b)),g=-f,h=g*c,i=f*c;return this.makeFrustum(h,i,g,f,d,e)},makeOrthographic:function(a,b,c,d,e,f){var g=this.elements,h=b-a,i=c-d,j=f-e,k=(b+a)/h,l=(c+d)/i,m=(f+e)/j;return g[0]=2/h,g[4]=0,g[8]=0,g[12]=-k,g[1]=0,g[5]=2/i,g[9]=0,g[13]=-l,g[2]=0,g[6]=0,g[10]=-2/j,g[14]=-m,g[3]=0,g[7]=0,g[11]=0,g[15]=1,this},fromArray:function(a){return this.elements.set(a),this},toArray:function(){var a=this.elements;return[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]]},clone:function(){return(new a.Matrix4).fromArray(this.elements)}},a.Ray=function(b,c){this.origin=void 0!==b?b:new a.Vector3,this.direction=void 0!==c?c:new a.Vector3},a.Ray.prototype={constructor:a.Ray,set:function(a,b){return this.origin.copy(a),this.direction.copy(b),this},copy:function(a){return this.origin.copy(a.origin),this.direction.copy(a.direction),this},at:function(b,c){var d=c||new a.Vector3;return d.copy(this.direction).multiplyScalar(b).add(this.origin)},recast:function(){var b=new a.Vector3;return function(a){return this.origin.copy(this.at(a,b)),this}}(),closestPointToPoint:function(b,c){var d=c||new a.Vector3;d.subVectors(b,this.origin);var e=d.dot(this.direction);return 0>e?d.copy(this.origin):d.copy(this.direction).multiplyScalar(e).add(this.origin)},distanceToPoint:function(){var b=new a.Vector3;return function(a){var c=b.subVectors(a,this.origin).dot(this.direction);return 0>c?this.origin.distanceTo(a):(b.copy(this.direction).multiplyScalar(c).add(this.origin),b.distanceTo(a))}}(),distanceSqToSegment:function(a,b,c,d){var e,f,g,h,i=a.clone().add(b).multiplyScalar(.5),j=b.clone().sub(a).normalize(),k=.5*a.distanceTo(b),l=this.origin.clone().sub(i),m=-this.direction.dot(j),n=l.dot(this.direction),o=-l.dot(j),p=l.lengthSq(),q=Math.abs(1-m*m);if(q>=0)if(e=m*o-n,f=m*n-o,h=k*q,e>=0)if(f>=-h)if(h>=f){var r=1/q;e*=r,f*=r,g=e*(e+m*f+2*n)+f*(m*e+f+2*o)+p}else f=k,e=Math.max(0,-(m*f+n)),g=-e*e+f*(f+2*o)+p;else f=-k,e=Math.max(0,-(m*f+n)),g=-e*e+f*(f+2*o)+p;else-h>=f?(e=Math.max(0,-(-m*k+n)),f=e>0?-k:Math.min(Math.max(-k,-o),k),g=-e*e+f*(f+2*o)+p):h>=f?(e=0,f=Math.min(Math.max(-k,-o),k),g=f*(f+2*o)+p):(e=Math.max(0,-(m*k+n)),f=e>0?k:Math.min(Math.max(-k,-o),k),g=-e*e+f*(f+2*o)+p);else f=m>0?-k:k,e=Math.max(0,-(m*f+n)),g=-e*e+f*(f+2*o)+p;return c&&c.copy(this.direction.clone().multiplyScalar(e).add(this.origin)),d&&d.copy(j.clone().multiplyScalar(f).add(i)),g},isIntersectionSphere:function(a){return this.distanceToPoint(a.center)<=a.radius},intersectSphere:function(){var b=new a.Vector3;return function(a,c){b.subVectors(a.center,this.origin);var d=b.dot(this.direction),e=b.dot(b)-d*d,f=a.radius*a.radius;if(e>f)return null;var g=Math.sqrt(f-e),h=d-g,i=d+g;return 0>h&&0>i?null:0>h?this.at(i,c):this.at(h,c)}}(),isIntersectionPlane:function(a){var b=a.distanceToPoint(this.origin);if(0===b)return!0;var c=a.normal.dot(this.direction);return 0>c*b?!0:!1},distanceToPlane:function(a){var b=a.normal.dot(this.direction);if(0==b)return 0==a.distanceToPoint(this.origin)?0:null;var c=-(this.origin.dot(a.normal)+a.constant)/b;return c>=0?c:null},intersectPlane:function(a,b){var c=this.distanceToPlane(a);return null===c?null:this.at(c,b)},isIntersectionBox:function(){var b=new a.Vector3;return function(a){return null!==this.intersectBox(a,b)}}(),intersectBox:function(a,b){var c,d,e,f,g,h,i=1/this.direction.x,j=1/this.direction.y,k=1/this.direction.z,l=this.origin;return i>=0?(c=(a.min.x-l.x)*i,d=(a.max.x-l.x)*i):(c=(a.max.x-l.x)*i,d=(a.min.x-l.x)*i),j>=0?(e=(a.min.y-l.y)*j,f=(a.max.y-l.y)*j):(e=(a.max.y-l.y)*j,f=(a.min.y-l.y)*j),c>f||e>d?null:((e>c||c!==c)&&(c=e),(d>f||d!==d)&&(d=f),k>=0?(g=(a.min.z-l.z)*k,h=(a.max.z-l.z)*k):(g=(a.max.z-l.z)*k,h=(a.min.z-l.z)*k),c>h||g>d?null:((g>c||c!==c)&&(c=g),(d>h||d!==d)&&(d=h),0>d?null:this.at(c>=0?c:d,b)))},intersectTriangle:function(){var b=new a.Vector3,c=new a.Vector3,d=new a.Vector3,e=new a.Vector3;return function(a,f,g,h,i){c.subVectors(f,a),d.subVectors(g,a),e.crossVectors(c,d);var j,k=this.direction.dot(e);if(k>0){if(h)return null;j=1}else{if(!(0>k))return null;j=-1,k=-k}b.subVectors(this.origin,a);var l=j*this.direction.dot(d.crossVectors(b,d));if(0>l)return null;var m=j*this.direction.dot(c.cross(b));if(0>m)return null;if(l+m>k)return null;var n=-j*b.dot(e);return 0>n?null:this.at(n/k,i)}}(),applyMatrix4:function(a){return this.direction.add(this.origin).applyMatrix4(a),this.origin.applyMatrix4(a),this.direction.sub(this.origin),this.direction.normalize(),this},equals:function(a){return a.origin.equals(this.origin)&&a.direction.equals(this.direction)},clone:function(){return(new a.Ray).copy(this)}},a.Sphere=function(b,c){this.center=void 0!==b?b:new a.Vector3,this.radius=void 0!==c?c:0},a.Sphere.prototype={constructor:a.Sphere,set:function(a,b){return this.center.copy(a),this.radius=b,this},setFromPoints:function(){var b=new a.Box3;return function(a,c){var d=this.center;void 0!==c?d.copy(c):b.setFromPoints(a).center(d);for(var e=0,f=0,g=a.length;g>f;f++)e=Math.max(e,d.distanceToSquared(a[f]));return this.radius=Math.sqrt(e),this}}(),copy:function(a){return this.center.copy(a.center),this.radius=a.radius,this},empty:function(){return this.radius<=0},containsPoint:function(a){return a.distanceToSquared(this.center)<=this.radius*this.radius},distanceToPoint:function(a){return a.distanceTo(this.center)-this.radius},intersectsSphere:function(a){var b=this.radius+a.radius;return a.center.distanceToSquared(this.center)<=b*b},clampPoint:function(b,c){var d=this.center.distanceToSquared(b),e=c||new a.Vector3;return e.copy(b),d>this.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e},getBoundingBox:function(b){var c=b||new a.Box3;return c.set(this.center,this.center),c.expandByScalar(this.radius),c},applyMatrix4:function(a){return this.center.applyMatrix4(a),this.radius=this.radius*a.getMaxScaleOnAxis(),this},translate:function(a){return this.center.add(a),this},equals:function(a){return a.center.equals(this.center)&&a.radius===this.radius},clone:function(){return(new a.Sphere).copy(this)}},a.Frustum=function(b,c,d,e,f,g){this.planes=[void 0!==b?b:new a.Plane,void 0!==c?c:new a.Plane,void 0!==d?d:new a.Plane,void 0!==e?e:new a.Plane,void 0!==f?f:new a.Plane,void 0!==g?g:new a.Plane]},a.Frustum.prototype={constructor:a.Frustum,set:function(a,b,c,d,e,f){var g=this.planes;return g[0].copy(a),g[1].copy(b),g[2].copy(c),g[3].copy(d),g[4].copy(e),g[5].copy(f),this},copy:function(a){for(var b=this.planes,c=0;6>c;c++)b[c].copy(a.planes[c]);return this},setFromMatrix:function(a){var b=this.planes,c=a.elements,d=c[0],e=c[1],f=c[2],g=c[3],h=c[4],i=c[5],j=c[6],k=c[7],l=c[8],m=c[9],n=c[10],o=c[11],p=c[12],q=c[13],r=c[14],s=c[15];return b[0].setComponents(g-d,k-h,o-l,s-p).normalize(),b[1].setComponents(g+d,k+h,o+l,s+p).normalize(),b[2].setComponents(g+e,k+i,o+m,s+q).normalize(),b[3].setComponents(g-e,k-i,o-m,s-q).normalize(),b[4].setComponents(g-f,k-j,o-n,s-r).normalize(),b[5].setComponents(g+f,k+j,o+n,s+r).normalize(),this},intersectsObject:function(){var b=new a.Sphere;return function(a){var c=a.geometry;return null===c.boundingSphere&&c.computeBoundingSphere(),b.copy(c.boundingSphere),b.applyMatrix4(a.matrixWorld),this.intersectsSphere(b)}}(),intersectsSphere:function(a){for(var b=this.planes,c=a.center,d=-a.radius,e=0;6>e;e++){var f=b[e].distanceToPoint(c);if(d>f)return!1}return!0},intersectsBox:function(){var b=new a.Vector3,c=new a.Vector3;return function(a){for(var d=this.planes,e=0;6>e;e++){var f=d[e];b.x=f.normal.x>0?a.min.x:a.max.x,c.x=f.normal.x>0?a.max.x:a.min.x,b.y=f.normal.y>0?a.min.y:a.max.y,c.y=f.normal.y>0?a.max.y:a.min.y,b.z=f.normal.z>0?a.min.z:a.max.z,c.z=f.normal.z>0?a.max.z:a.min.z;var g=f.distanceToPoint(b),h=f.distanceToPoint(c);if(0>g&&0>h)return!1}return!0}}(),containsPoint:function(a){for(var b=this.planes,c=0;6>c;c++)if(b[c].distanceToPoint(a)<0)return!1;return!0},clone:function(){return(new a.Frustum).copy(this)}},a.Plane=function(b,c){this.normal=void 0!==b?b:new a.Vector3(1,0,0),this.constant=void 0!==c?c:0},a.Plane.prototype={constructor:a.Plane,set:function(a,b){return this.normal.copy(a),this.constant=b,this},setComponents:function(a,b,c,d){return this.normal.set(a,b,c),this.constant=d,this},setFromNormalAndCoplanarPoint:function(a,b){return this.normal.copy(a),this.constant=-b.dot(this.normal),this},setFromCoplanarPoints:function(){var b=new a.Vector3,c=new a.Vector3;return function(a,d,e){var f=b.subVectors(e,d).cross(c.subVectors(a,d)).normalize();return this.setFromNormalAndCoplanarPoint(f,a),this}}(),copy:function(a){return this.normal.copy(a.normal),this.constant=a.constant,this},normalize:function(){var a=1/this.normal.length();return this.normal.multiplyScalar(a),this.constant*=a,this},negate:function(){return this.constant*=-1,this.normal.negate(),this},distanceToPoint:function(a){return this.normal.dot(a)+this.constant},distanceToSphere:function(a){return this.distanceToPoint(a.center)-a.radius},projectPoint:function(a,b){return this.orthoPoint(a,b).sub(a).negate()},orthoPoint:function(b,c){var d=this.distanceToPoint(b),e=c||new a.Vector3;return e.copy(this.normal).multiplyScalar(d)},isIntersectionLine:function(a){var b=this.distanceToPoint(a.start),c=this.distanceToPoint(a.end);return 0>b&&c>0||0>c&&b>0},intersectLine:function(){var b=new a.Vector3;return function(c,d){var e=d||new a.Vector3,f=c.delta(b),g=this.normal.dot(f);if(0==g)return 0==this.distanceToPoint(c.start)?e.copy(c.start):void 0;var h=-(c.start.dot(this.normal)+this.constant)/g;return 0>h||h>1?void 0:e.copy(f).multiplyScalar(h).add(c.start)}}(),coplanarPoint:function(b){var c=b||new a.Vector3;return c.copy(this.normal).multiplyScalar(-this.constant)},applyMatrix4:function(){var b=new a.Vector3,c=new a.Vector3,d=new a.Matrix3;return function(a,e){var f=e||d.getNormalMatrix(a),g=b.copy(this.normal).applyMatrix3(f),h=this.coplanarPoint(c);return h.applyMatrix4(a),this.setFromNormalAndCoplanarPoint(g,h),this}}(),translate:function(a){return this.constant=this.constant-a.dot(this.normal),this},equals:function(a){return a.normal.equals(this.normal)&&a.constant==this.constant},clone:function(){return(new a.Plane).copy(this)}},a.Math={generateUUID:function(){var a,b="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),c=new Array(36),d=0;return function(){for(var e=0;36>e;e++)8==e||13==e||18==e||23==e?c[e]="-":14==e?c[e]="4":(2>=d&&(d=33554432+16777216*Math.random()|0),a=15&d,d>>=4,c[e]=b[19==e?3&a|8:a]);return c.join("")}}(),clamp:function(a,b,c){return b>a?b:a>c?c:a},clampBottom:function(a,b){return b>a?b:a},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},smoothstep:function(a,b,c){return b>=a?0:a>=c?1:(a=(a-b)/(c-b),a*a*(3-2*a))},smootherstep:function(a,b,c){return b>=a?0:a>=c?1:(a=(a-b)/(c-b),a*a*a*(a*(6*a-15)+10))},random16:function(){return(65280*Math.random()+255*Math.random())/65535},randInt:function(a,b){return a+Math.floor(Math.random()*(b-a+1))},randFloat:function(a,b){return a+Math.random()*(b-a)},randFloatSpread:function(a){return a*(.5-Math.random())},degToRad:function(){var a=Math.PI/180;return function(b){return b*a}}(),radToDeg:function(){var a=180/Math.PI;return function(b){return b*a}}(),isPowerOfTwo:function(a){return 0===(a&a-1)&&0!==a}},a.Spline=function(b){function c(a,b,c,d,e,f,g){var h=.5*(c-a),i=.5*(d-b);return(2*(b-c)+h+i)*g+(-3*(b-c)-2*h-i)*f+h*e+b}this.points=b;var d,e,f,g,h,i,j,k,l,m=[],n={x:0,y:0,z:0};this.initFromArray=function(a){this.points=[];for(var b=0;bthis.points.length-2?this.points.length-1:e+1,m[3]=e>this.points.length-3?this.points.length-1:e+2,i=this.points[m[0]],j=this.points[m[1]],k=this.points[m[2]],l=this.points[m[3]],g=f*f,h=f*g,n.x=c(i.x,j.x,k.x,l.x,f,g,h),n.y=c(i.y,j.y,k.y,l.y,f,g,h),n.z=c(i.z,j.z,k.z,l.z,f,g,h),n},this.getControlPointsArray=function(){var a,b,c=this.points.length,d=[];for(a=0;c>a;a++)b=this.points[a],d[a]=[b.x,b.y,b.z];return d},this.getLength=function(b){var c,d,e,f,g=0,h=0,i=0,j=new a.Vector3,k=new a.Vector3,l=[],m=0;for(l[0]=0,b||(b=100),e=this.points.length*b,j.copy(this.points[0]),c=1;e>c;c++)d=c/e,f=this.getPoint(d),k.copy(f),m+=k.distanceTo(j),j.copy(f),g=(this.points.length-1)*d,h=Math.floor(g),h!=i&&(l[h]=m,i=h);return l[l.length]=m,{chunks:l,total:m}},this.reparametrizeByArcLength=function(b){var c,d,e,f,g,h,i,j,k=[],l=new a.Vector3,m=this.getLength();for(k.push(l.copy(this.points[0]).clone()),c=1;cd;d++)e=f+d*(1/i)*(g-f),j=this.getPoint(e),k.push(l.copy(j).clone());k.push(l.copy(this.points[c]).clone())}this.points=k}},a.Triangle=function(b,c,d){this.a=void 0!==b?b:new a.Vector3,this.b=void 0!==c?c:new a.Vector3,this.c=void 0!==d?d:new a.Vector3},a.Triangle.normal=function(){var b=new a.Vector3;return function(c,d,e,f){ +var g=f||new a.Vector3;g.subVectors(e,d),b.subVectors(c,d),g.cross(b);var h=g.lengthSq();return h>0?g.multiplyScalar(1/Math.sqrt(h)):g.set(0,0,0)}}(),a.Triangle.barycoordFromPoint=function(){var b=new a.Vector3,c=new a.Vector3,d=new a.Vector3;return function(e,f,g,h,i){b.subVectors(h,f),c.subVectors(g,f),d.subVectors(e,f);var j=b.dot(b),k=b.dot(c),l=b.dot(d),m=c.dot(c),n=c.dot(d),o=j*m-k*k,p=i||new a.Vector3;if(0==o)return p.set(-2,-1,-1);var q=1/o,r=(m*l-k*n)*q,s=(j*n-k*l)*q;return p.set(1-r-s,s,r)}}(),a.Triangle.containsPoint=function(){var b=new a.Vector3;return function(c,d,e,f){var g=a.Triangle.barycoordFromPoint(c,d,e,f,b);return g.x>=0&&g.y>=0&&g.x+g.y<=1}}(),a.Triangle.prototype={constructor:a.Triangle,set:function(a,b,c){return this.a.copy(a),this.b.copy(b),this.c.copy(c),this},setFromPointsAndIndices:function(a,b,c,d){return this.a.copy(a[b]),this.b.copy(a[c]),this.c.copy(a[d]),this},copy:function(a){return this.a.copy(a.a),this.b.copy(a.b),this.c.copy(a.c),this},area:function(){var b=new a.Vector3,c=new a.Vector3;return function(){return b.subVectors(this.c,this.b),c.subVectors(this.a,this.b),.5*b.cross(c).length()}}(),midpoint:function(b){var c=b||new a.Vector3;return c.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},normal:function(b){return a.Triangle.normal(this.a,this.b,this.c,b)},plane:function(b){var c=b||new a.Plane;return c.setFromCoplanarPoints(this.a,this.b,this.c)},barycoordFromPoint:function(b,c){return a.Triangle.barycoordFromPoint(b,this.a,this.b,this.c,c)},containsPoint:function(b){return a.Triangle.containsPoint(b,this.a,this.b,this.c)},equals:function(a){return a.a.equals(this.a)&&a.b.equals(this.b)&&a.c.equals(this.c)},clone:function(){return(new a.Triangle).copy(this)}},a.Clock=function(a){this.autoStart=void 0!==a?a:!0,this.startTime=0,this.oldTime=0,this.elapsedTime=0,this.running=!1},a.Clock.prototype={constructor:a.Clock,start:function(){this.startTime=void 0!==self.performance&&void 0!==self.performance.now?self.performance.now():Date.now(),this.oldTime=this.startTime,this.running=!0},stop:function(){this.getElapsedTime(),this.running=!1},getElapsedTime:function(){return this.getDelta(),this.elapsedTime},getDelta:function(){var a=0;if(this.autoStart&&!this.running&&this.start(),this.running){var b=void 0!==self.performance&&void 0!==self.performance.now?self.performance.now():Date.now();a=.001*(b-this.oldTime),this.oldTime=b,this.elapsedTime+=a}return a}},a.EventDispatcher=function(){},a.EventDispatcher.prototype={constructor:a.EventDispatcher,apply:function(b){b.addEventListener=a.EventDispatcher.prototype.addEventListener,b.hasEventListener=a.EventDispatcher.prototype.hasEventListener,b.removeEventListener=a.EventDispatcher.prototype.removeEventListener,b.dispatchEvent=a.EventDispatcher.prototype.dispatchEvent},addEventListener:function(a,b){void 0===this._listeners&&(this._listeners={});var c=this._listeners;void 0===c[a]&&(c[a]=[]),-1===c[a].indexOf(b)&&c[a].push(b)},hasEventListener:function(a,b){if(void 0===this._listeners)return!1;var c=this._listeners;return void 0!==c[a]&&-1!==c[a].indexOf(b)?!0:!1},removeEventListener:function(a,b){if(void 0!==this._listeners){var c=this._listeners,d=c[a];if(void 0!==d){var e=d.indexOf(b);-1!==e&&d.splice(e,1)}}},dispatchEvent:function(a){if(void 0!==this._listeners){var b=this._listeners,c=b[a.type];if(void 0!==c){a.target=this;for(var d=[],e=c.length,f=0;e>f;f++)d[f]=c[f];for(var f=0;e>f;f++)d[f].call(this,a)}}}},function(a){a.Raycaster=function(b,c,d,e){this.ray=new a.Ray(b,c),this.near=d||0,this.far=e||1/0,this.params={Sprite:{},Mesh:{},PointCloud:{threshold:1},LOD:{},Line:{}}};var b=function(a,b){return a.distance-b.distance},c=function(a,b,d,e){if(a.raycast(b,d),e===!0)for(var f=a.children,g=0,h=f.length;h>g;g++)c(f[g],b,d,!0)};a.Raycaster.prototype={constructor:a.Raycaster,precision:1e-4,linePrecision:1,set:function(a,b){this.ray.set(a,b)},intersectObject:function(a,d){var e=[];return c(a,this,e,d),e.sort(b),e},intersectObjects:function(a,d){var e=[];if(a instanceof Array==!1)return console.log("THREE.Raycaster.intersectObjects: objects is not an Array."),e;for(var f=0,g=a.length;g>f;f++)c(a[f],this,e,d);return e.sort(b),e}}}(a),a.Object3D=function(){Object.defineProperty(this,"id",{value:a.Object3DIdCount++}),this.uuid=a.Math.generateUUID(),this.name="",this.type="Object3D",this.parent=void 0,this.children=[],this.up=a.Object3D.DefaultUp.clone();var b=new a.Vector3,c=new a.Euler,d=new a.Quaternion,e=new a.Vector3(1,1,1),f=function(){d.setFromEuler(c,!1)},g=function(){c.setFromQuaternion(d,void 0,!1)};c.onChange(f),d.onChange(g),Object.defineProperties(this,{position:{enumerable:!0,value:b},rotation:{enumerable:!0,value:c},quaternion:{enumerable:!0,value:d},scale:{enumerable:!0,value:e}}),this.renderDepth=null,this.rotationAutoUpdate=!0,this.matrix=new a.Matrix4,this.matrixWorld=new a.Matrix4,this.matrixAutoUpdate=!0,this.matrixWorldNeedsUpdate=!1,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.userData={}},a.Object3D.DefaultUp=new a.Vector3(0,1,0),a.Object3D.prototype={constructor:a.Object3D,get eulerOrder(){return console.warn("THREE.Object3D: .eulerOrder has been moved to .rotation.order."),this.rotation.order},set eulerOrder(a){console.warn("THREE.Object3D: .eulerOrder has been moved to .rotation.order."),this.rotation.order=a},get useQuaternion(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")},set useQuaternion(a){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")},applyMatrix:function(a){this.matrix.multiplyMatrices(a,this.matrix),this.matrix.decompose(this.position,this.quaternion,this.scale)},setRotationFromAxisAngle:function(a,b){this.quaternion.setFromAxisAngle(a,b)},setRotationFromEuler:function(a){this.quaternion.setFromEuler(a,!0)},setRotationFromMatrix:function(a){this.quaternion.setFromRotationMatrix(a)},setRotationFromQuaternion:function(a){this.quaternion.copy(a)},rotateOnAxis:function(){var b=new a.Quaternion;return function(a,c){return b.setFromAxisAngle(a,c),this.quaternion.multiply(b),this}}(),rotateX:function(){var b=new a.Vector3(1,0,0);return function(a){return this.rotateOnAxis(b,a)}}(),rotateY:function(){var b=new a.Vector3(0,1,0);return function(a){return this.rotateOnAxis(b,a)}}(),rotateZ:function(){var b=new a.Vector3(0,0,1);return function(a){return this.rotateOnAxis(b,a)}}(),translateOnAxis:function(){var b=new a.Vector3;return function(a,c){return b.copy(a).applyQuaternion(this.quaternion),this.position.add(b.multiplyScalar(c)),this}}(),translate:function(a,b){return console.warn("THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead."),this.translateOnAxis(b,a)},translateX:function(){var b=new a.Vector3(1,0,0);return function(a){return this.translateOnAxis(b,a)}}(),translateY:function(){var b=new a.Vector3(0,1,0);return function(a){return this.translateOnAxis(b,a)}}(),translateZ:function(){var b=new a.Vector3(0,0,1);return function(a){return this.translateOnAxis(b,a)}}(),localToWorld:function(a){return a.applyMatrix4(this.matrixWorld)},worldToLocal:function(){var b=new a.Matrix4;return function(a){return a.applyMatrix4(b.getInverse(this.matrixWorld))}}(),lookAt:function(){var b=new a.Matrix4;return function(a){b.lookAt(a,this.position,this.up),this.quaternion.setFromRotationMatrix(b)}}(),add:function(b){if(arguments.length>1){for(var c=0;c1)for(var b=0;bc;c++){var e=this.children[c],f=e.getObjectById(a,b);if(void 0!==f)return f}return void 0},getObjectByName:function(a,b){if(this.name===a)return this;for(var c=0,d=this.children.length;d>c;c++){var e=this.children[c],f=e.getObjectByName(a,b);if(void 0!==f)return f}return void 0},getWorldPosition:function(b){var c=b||new a.Vector3;return this.updateMatrixWorld(!0),c.setFromMatrixPosition(this.matrixWorld)},getWorldQuaternion:function(){var b=new a.Vector3,c=new a.Vector3;return function(d){var e=d||new a.Quaternion;return this.updateMatrixWorld(!0),this.matrixWorld.decompose(b,e,c),e}}(),getWorldRotation:function(){var b=new a.Quaternion;return function(c){var d=c||new a.Euler;return this.getWorldQuaternion(b),d.setFromQuaternion(b,this.rotation.order,!1)}}(),getWorldScale:function(){var b=new a.Vector3,c=new a.Quaternion;return function(d){var e=d||new a.Vector3;return this.updateMatrixWorld(!0),this.matrixWorld.decompose(b,c,e),e}}(),getWorldDirection:function(){var b=new a.Quaternion;return function(c){var d=c||new a.Vector3;return this.getWorldQuaternion(b),d.set(0,0,1).applyQuaternion(b)}}(),raycast:function(){},traverse:function(a){a(this);for(var b=0,c=this.children.length;c>b;b++)this.children[b].traverse(a)},traverseVisible:function(a){if(this.visible!==!1){a(this);for(var b=0,c=this.children.length;c>b;b++)this.children[b].traverseVisible(a)}},updateMatrix:function(){this.matrix.compose(this.position,this.quaternion,this.scale),this.matrixWorldNeedsUpdate=!0},updateMatrixWorld:function(a){this.matrixAutoUpdate===!0&&this.updateMatrix(),(this.matrixWorldNeedsUpdate===!0||a===!0)&&(void 0===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1,a=!0);for(var b=0,c=this.children.length;c>b;b++)this.children[b].updateMatrixWorld(a)},toJSON:function(){var b={metadata:{version:4.3,type:"Object",generator:"ObjectExporter"}},c={},d=function(a){if(void 0===b.geometries&&(b.geometries=[]),void 0===c[a.uuid]){var d=a.toJSON();delete d.metadata,c[a.uuid]=d,b.geometries.push(d)}return a.uuid},e={},f=function(a){if(void 0===b.materials&&(b.materials=[]),void 0===e[a.uuid]){var c=a.toJSON();delete c.metadata,e[a.uuid]=c,b.materials.push(c)}return a.uuid},g=function(b){var c={};if(c.uuid=b.uuid,c.type=b.type,""!==b.name&&(c.name=b.name),"{}"!==JSON.stringify(b.userData)&&(c.userData=b.userData),b.visible!==!0&&(c.visible=b.visible),b instanceof a.PerspectiveCamera?(c.fov=b.fov,c.aspect=b.aspect,c.near=b.near,c.far=b.far):b instanceof a.OrthographicCamera?(c.left=b.left,c.right=b.right,c.top=b.top,c.bottom=b.bottom,c.near=b.near,c.far=b.far):b instanceof a.AmbientLight?c.color=b.color.getHex():b instanceof a.DirectionalLight?(c.color=b.color.getHex(),c.intensity=b.intensity):b instanceof a.PointLight?(c.color=b.color.getHex(),c.intensity=b.intensity,c.distance=b.distance):b instanceof a.SpotLight?(c.color=b.color.getHex(),c.intensity=b.intensity,c.distance=b.distance,c.angle=b.angle,c.exponent=b.exponent):b instanceof a.HemisphereLight?(c.color=b.color.getHex(),c.groundColor=b.groundColor.getHex()):b instanceof a.Mesh?(c.geometry=d(b.geometry),c.material=f(b.material)):b instanceof a.Line?(c.geometry=d(b.geometry),c.material=f(b.material)):b instanceof a.Sprite&&(c.material=f(b.material)),c.matrix=b.matrix.toArray(),b.children.length>0){c.children=[];for(var e=0;ec;c++)b.vertexNormals[c]=this.vertexNormals[c].clone();for(var c=0,d=this.vertexColors.length;d>c;c++)b.vertexColors[c]=this.vertexColors[c].clone();for(var c=0,d=this.vertexTangents.length;d>c;c++)b.vertexTangents[c]=this.vertexTangents[c].clone();return b}},a.Face4=function(b,c,d,e,f,g,h){return console.warn("THREE.Face4 has been removed. A THREE.Face3 will be created instead."),new a.Face3(b,c,d,f,g,h)},a.BufferAttribute=function(a,b){this.array=a,this.itemSize=b,this.needsUpdate=!1},a.BufferAttribute.prototype={constructor:a.BufferAttribute,get length(){return this.array.length},copyAt:function(a,b,c){a*=this.itemSize,c*=b.itemSize;for(var d=0,e=this.itemSize;e>d;d++)this.array[a+d]=b.array[c+d]},set:function(a){return this.array.set(a),this},setX:function(a,b){return this.array[a*this.itemSize]=b,this},setY:function(a,b){return this.array[a*this.itemSize+1]=b,this},setZ:function(a,b){return this.array[a*this.itemSize+2]=b,this},setXY:function(a,b,c){return a*=this.itemSize,this.array[a]=b,this.array[a+1]=c,this},setXYZ:function(a,b,c,d){return a*=this.itemSize,this.array[a]=b,this.array[a+1]=c,this.array[a+2]=d,this},setXYZW:function(a,b,c,d,e){return a*=this.itemSize,this.array[a]=b,this.array[a+1]=c,this.array[a+2]=d,this.array[a+3]=e,this},clone:function(){return new a.BufferAttribute(new this.array.constructor(this.array),this.itemSize)}},a.Int8Attribute=function(b,c){return console.warn("THREE.Int8Attribute has been removed. Use THREE.BufferAttribute( array, itemSize ) instead."),new a.BufferAttribute(b,c)},a.Uint8Attribute=function(b,c){return console.warn("THREE.Uint8Attribute has been removed. Use THREE.BufferAttribute( array, itemSize ) instead."),new a.BufferAttribute(b,c)},a.Uint8ClampedAttribute=function(b,c){return console.warn("THREE.Uint8ClampedAttribute has been removed. Use THREE.BufferAttribute( array, itemSize ) instead."),new a.BufferAttribute(b,c)},a.Int16Attribute=function(b,c){return console.warn("THREE.Int16Attribute has been removed. Use THREE.BufferAttribute( array, itemSize ) instead."),new a.BufferAttribute(b,c)},a.Uint16Attribute=function(b,c){return console.warn("THREE.Uint16Attribute has been removed. Use THREE.BufferAttribute( array, itemSize ) instead."),new a.BufferAttribute(b,c)},a.Int32Attribute=function(b,c){return console.warn("THREE.Int32Attribute has been removed. Use THREE.BufferAttribute( array, itemSize ) instead."),new a.BufferAttribute(b,c)},a.Uint32Attribute=function(b,c){return console.warn("THREE.Uint32Attribute has been removed. Use THREE.BufferAttribute( array, itemSize ) instead."),new a.BufferAttribute(b,c)},a.Float32Attribute=function(b,c){return console.warn("THREE.Float32Attribute has been removed. Use THREE.BufferAttribute( array, itemSize ) instead."),new a.BufferAttribute(b,c)},a.Float64Attribute=function(b,c){return console.warn("THREE.Float64Attribute has been removed. Use THREE.BufferAttribute( array, itemSize ) instead."),new a.BufferAttribute(b,c)},a.BufferGeometry=function(){Object.defineProperty(this,"id",{value:a.GeometryIdCount++}),this.uuid=a.Math.generateUUID(),this.name="",this.type="BufferGeometry",this.attributes={},this.attributesKeys=[],this.drawcalls=[],this.offsets=this.drawcalls,this.boundingBox=null,this.boundingSphere=null},a.BufferGeometry.prototype={constructor:a.BufferGeometry,addAttribute:function(b,c){return c instanceof a.BufferAttribute==!1?(console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )."),void(this.attributes[b]={array:arguments[1],itemSize:arguments[2]})):(this.attributes[b]=c,void(this.attributesKeys=Object.keys(this.attributes)))},getAttribute:function(a){return this.attributes[a]},addDrawCall:function(a,b,c){this.drawcalls.push({start:a,count:b,index:void 0!==c?c:0})},applyMatrix:function(b){var c=this.attributes.position;void 0!==c&&(b.applyToVector3Array(c.array),c.needsUpdate=!0);var d=this.attributes.normal;if(void 0!==d){var e=(new a.Matrix3).getNormalMatrix(b);e.applyToVector3Array(d.array),d.needsUpdate=!0}},center:function(){},fromGeometry:function(b,c){c=c||{vertexColors:a.NoColors};var d=b.vertices,e=b.faces,f=b.faceVertexUvs,g=c.vertexColors,h=f[0].length>0,i=3==e[0].vertexNormals.length,j=new Float32Array(3*e.length*3);this.addAttribute("position",new a.BufferAttribute(j,3));var k=new Float32Array(3*e.length*3);if(this.addAttribute("normal",new a.BufferAttribute(k,3)),g!==a.NoColors){var l=new Float32Array(3*e.length*3);this.addAttribute("color",new a.BufferAttribute(l,3))}if(h===!0){var m=new Float32Array(3*e.length*2);this.addAttribute("uv",new a.BufferAttribute(m,2))}for(var n=0,o=0,p=0;ne;e+=3)b.set(c[e],c[e+1],c[e+2]),d.expandByPoint(b)}(void 0===c||0===c.length)&&(this.boundingBox.min.set(0,0,0),this.boundingBox.max.set(0,0,0)),(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))&&console.error('THREE.BufferGeometry.computeBoundingBox: Computed min/max have NaN values. The "position" attribute is likely to have NaN values.')}}(),computeBoundingSphere:function(){var b=new a.Box3,c=new a.Vector3;return function(){null===this.boundingSphere&&(this.boundingSphere=new a.Sphere);var d=this.attributes.position.array;if(d){b.makeEmpty();for(var e=this.boundingSphere.center,f=0,g=d.length;g>f;f+=3)c.set(d[f],d[f+1],d[f+2]),b.expandByPoint(c);b.center(e);for(var h=0,f=0,g=d.length;g>f;f+=3)c.set(d[f],d[f+1],d[f+2]),h=Math.max(h,e.distanceToSquared(c));this.boundingSphere.radius=Math.sqrt(h),isNaN(this.boundingSphere.radius)&&console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.')}}}(),computeFaceNormals:function(){},computeVertexNormals:function(){var b=this.attributes;if(b.position){var c=b.position.array;if(void 0===b.normal)this.addAttribute("normal",new a.BufferAttribute(new Float32Array(c.length),3));else for(var d=b.normal.array,e=0,f=d.length;f>e;e++)d[e]=0;var g,h,i,d=b.normal.array,j=new a.Vector3,k=new a.Vector3,l=new a.Vector3,m=new a.Vector3,n=new a.Vector3;if(b.index)for(var o=b.index.array,p=this.offsets.length>0?this.offsets:[{start:0,count:o.length,index:0}],q=0,r=p.length;r>q;++q)for(var s=p[q].start,t=p[q].count,u=p[q].index,e=s,f=s+t;f>e;e+=3)g=3*(u+o[e]),h=3*(u+o[e+1]),i=3*(u+o[e+2]),j.fromArray(c,g),k.fromArray(c,h),l.fromArray(c,i),m.subVectors(l,k),n.subVectors(j,k),m.cross(n),d[g]+=m.x,d[g+1]+=m.y,d[g+2]+=m.z,d[h]+=m.x,d[h+1]+=m.y,d[h+2]+=m.z,d[i]+=m.x,d[i+1]+=m.y,d[i+2]+=m.z;else for(var e=0,f=c.length;f>e;e+=9)j.fromArray(c,e),k.fromArray(c,e+3),l.fromArray(c,e+6),m.subVectors(l,k),n.subVectors(j,k),m.cross(n),d[e]=m.x,d[e+1]=m.y,d[e+2]=m.z,d[e+3]=m.x,d[e+4]=m.y,d[e+5]=m.z,d[e+6]=m.x,d[e+7]=m.y,d[e+8]=m.z;this.normalizeNormals(),b.normal.needsUpdate=!0}},computeTangents:function(){function b(a,b,c){E.fromArray(e,3*a),F.fromArray(e,3*b),G.fromArray(e,3*c),H.fromArray(g,2*a),I.fromArray(g,2*b),J.fromArray(g,2*c),m=F.x-E.x,n=G.x-E.x,o=F.y-E.y,p=G.y-E.y,q=F.z-E.z,r=G.z-E.z,s=I.x-H.x,t=J.x-H.x,u=I.y-H.y,v=J.y-H.y,w=1/(s*v-t*u),K.set((v*m-u*n)*w,(v*o-u*p)*w,(v*q-u*r)*w),L.set((s*n-t*m)*w,(s*p-t*o)*w,(s*r-t*q)*w),j[a].add(K),j[b].add(K),j[c].add(K),k[a].add(L),k[b].add(L),k[c].add(L)}function c(a){V.fromArray(f,3*a),W.copy(V),R=j[a],T.copy(R),T.sub(V.multiplyScalar(V.dot(R))).normalize(),U.crossVectors(W,R),S=U.dot(k[a]),Q=0>S?-1:1,i[4*a]=T.x,i[4*a+1]=T.y,i[4*a+2]=T.z,i[4*a+3]=Q}if(void 0===this.attributes.index||void 0===this.attributes.position||void 0===this.attributes.normal||void 0===this.attributes.uv)return void console.warn("Missing required attributes (index, position, normal or uv) in BufferGeometry.computeTangents()");var d=this.attributes.index.array,e=this.attributes.position.array,f=this.attributes.normal.array,g=this.attributes.uv.array,h=e.length/3;void 0===this.attributes.tangent&&this.addAttribute("tangent",new a.BufferAttribute(new Float32Array(4*h),4));for(var i=this.attributes.tangent.array,j=[],k=[],l=0;h>l;l++)j[l]=new a.Vector3,k[l]=new a.Vector3;var m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E=new a.Vector3,F=new a.Vector3,G=new a.Vector3,H=new a.Vector2,I=new a.Vector2,J=new a.Vector2,K=new a.Vector3,L=new a.Vector3;0===this.drawcalls.length&&this.addDrawCall(0,d.length,0);var M=this.drawcalls;for(z=0,A=M.length;A>z;++z){var N=M[z].start,O=M[z].count,P=M[z].index;for(x=N,y=N+O;y>x;x+=3)B=P+d[x],C=P+d[x+1],D=P+d[x+2],b(B,C,D)}var Q,R,S,T=new a.Vector3,U=new a.Vector3,V=new a.Vector3,W=new a.Vector3;for(z=0,A=M.length;A>z;++z){var N=M[z].start,O=M[z].count,P=M[z].index;for(x=N,y=N+O;y>x;x+=3)B=P+d[x],C=P+d[x+1],D=P+d[x+2],c(B),c(C),c(D)}},computeOffsets:function(a){var b=a;void 0===a&&(b=65535);for(var c=(Date.now(),this.attributes.index.array),d=this.attributes.position.array,e=(d.length/3,c.length/3),f=new Uint16Array(c.length),g=0,h=0,i=[{start:0,count:0,index:0}],j=i[0],k=0,l=0,m=new Int32Array(6),n=new Int32Array(d.length),o=new Int32Array(d.length),p=0;pq;q++){l=0;for(var r=0;3>r;r++){var s=c[3*q+r];-1==n[s]?(m[2*r]=s,m[2*r+1]=-1,l++):n[s]j.index+b){var u={start:g,count:0,index:h};i.push(u),j=u;for(var v=0;6>v;v+=2){var w=m[v+1];w>-1&&wv;v+=2){var s=m[v],w=m[v+1];-1===w&&(w=h++),n[s]=w,o[w]=s,f[g++]=w-j.index,j.count++}}return this.reorderBuffers(f,o,h),this.offsets=i,i},merge:function(){console.log("BufferGeometry.merge(): TODO")},normalizeNormals:function(){for(var a,b,c,d,e=this.attributes.normal.array,f=0,g=e.length;g>f;f+=3)a=e[f],b=e[f+1],c=e[f+2],d=1/Math.sqrt(a*a+b*b+c*c),e[f]*=d,e[f+1]*=d,e[f+2]*=d},reorderBuffers:function(a,b,c){var d={};for(var e in this.attributes)if("index"!=e){var f=this.attributes[e].array;d[e]=new f.constructor(this.attributes[e].itemSize*c)}for(var g=0;c>g;g++){var h=b[g];for(var e in this.attributes)if("index"!=e)for(var i=this.attributes[e].array,j=this.attributes[e].itemSize,k=d[e],l=0;j>l;l++)k[g*j+l]=i[h*j+l]}this.attributes.index.array=a;for(var e in this.attributes)"index"!=e&&(this.attributes[e].array=d[e],this.attributes[e].numItems=this.attributes[e].itemSize*c)},toJSON:function(){var a={metadata:{version:4,type:"BufferGeometry",generator:"BufferGeometryExporter"},uuid:this.uuid,type:this.type,data:{attributes:{}}},b=this.attributes,c=this.offsets,d=this.boundingSphere;for(var e in b){for(var f=b[e],g=[],h=f.array,i=0,j=h.length;j>i;i++)g[i]=h[i];a.data.attributes[e]={itemSize:f.itemSize,type:f.array.constructor.name,array:g}}return c.length>0&&(a.data.offsets=JSON.parse(JSON.stringify(c))),null!==d&&(a.data.boundingSphere={center:d.center.toArray(),radius:d.radius}),a},clone:function(){var b=new a.BufferGeometry;for(var c in this.attributes){var d=this.attributes[c];b.addAttribute(c,d.clone())}for(var e=0,f=this.offsets.length;f>e;e++){var g=this.offsets[e];b.offsets.push({start:g.start,index:g.index,count:g.count})}return b},dispose:function(){this.dispatchEvent({type:"dispose"})}},a.EventDispatcher.prototype.apply(a.BufferGeometry.prototype),a.Geometry=function(){Object.defineProperty(this,"id",{value:a.GeometryIdCount++}),this.uuid=a.Math.generateUUID(),this.name="",this.type="Geometry",this.vertices=[],this.colors=[],this.faces=[],this.faceVertexUvs=[[]],this.morphTargets=[],this.morphColors=[],this.morphNormals=[],this.skinWeights=[],this.skinIndices=[],this.lineDistances=[],this.boundingBox=null,this.boundingSphere=null,this.hasTangents=!1,this.dynamic=!0,this.verticesNeedUpdate=!1,this.elementsNeedUpdate=!1,this.uvsNeedUpdate=!1,this.normalsNeedUpdate=!1,this.tangentsNeedUpdate=!1,this.colorsNeedUpdate=!1,this.lineDistancesNeedUpdate=!1,this.groupsNeedUpdate=!1},a.Geometry.prototype={constructor:a.Geometry,applyMatrix:function(b){for(var c=(new a.Matrix3).getNormalMatrix(b),d=0,e=this.vertices.length;e>d;d++){var f=this.vertices[d];f.applyMatrix4(b)}for(var d=0,e=this.faces.length;e>d;d++){var g=this.faces[d];g.normal.applyMatrix3(c).normalize();for(var h=0,i=g.vertexNormals.length;i>h;h++)g.vertexNormals[h].applyMatrix3(c).normalize()}this.boundingBox instanceof a.Box3&&this.computeBoundingBox(),this.boundingSphere instanceof a.Sphere&&this.computeBoundingSphere()},fromBufferGeometry:function(b){for(var c=this,d=b.attributes,e=d.position.array,f=void 0!==d.index?d.index.array:void 0,g=void 0!==d.normal?d.normal.array:void 0,h=void 0!==d.color?d.color.array:void 0,i=void 0!==d.uv?d.uv.array:void 0,j=[],k=[],l=0,m=0;ld;d++){var f=this.faces[d],g=this.vertices[f.a],h=this.vertices[f.b],i=this.vertices[f.c];b.subVectors(i,h),c.subVectors(g,h),b.cross(c),b.normalize(),f.normal.copy(b)}},computeVertexNormals:function(b){var c,d,e,f,g,h;for(h=new Array(this.vertices.length),c=0,d=this.vertices.length;d>c;c++)h[c]=new a.Vector3;if(b){var i,j,k,l=new a.Vector3,m=new a.Vector3;new a.Vector3,new a.Vector3,new a.Vector3;for(e=0,f=this.faces.length;f>e;e++)g=this.faces[e],i=this.vertices[g.a],j=this.vertices[g.b],k=this.vertices[g.c],l.subVectors(k,j),m.subVectors(i,j),l.cross(m),h[g.a].add(l),h[g.b].add(l),h[g.c].add(l)}else for(e=0,f=this.faces.length;f>e;e++)g=this.faces[e],h[g.a].add(g.normal),h[g.b].add(g.normal),h[g.c].add(g.normal);for(c=0,d=this.vertices.length;d>c;c++)h[c].normalize();for(e=0,f=this.faces.length;f>e;e++)g=this.faces[e],g.vertexNormals[0]=h[g.a].clone(),g.vertexNormals[1]=h[g.b].clone(),g.vertexNormals[2]=h[g.c].clone()},computeMorphNormals:function(){var b,c,d,e,f;for(d=0,e=this.faces.length;e>d;d++)for(f=this.faces[d],f.__originalFaceNormal?f.__originalFaceNormal.copy(f.normal):f.__originalFaceNormal=f.normal.clone(),f.__originalVertexNormals||(f.__originalVertexNormals=[]),b=0,c=f.vertexNormals.length;c>b;b++)f.__originalVertexNormals[b]?f.__originalVertexNormals[b].copy(f.vertexNormals[b]):f.__originalVertexNormals[b]=f.vertexNormals[b].clone();var g=new a.Geometry;for(g.faces=this.faces,b=0,c=this.morphTargets.length;c>b;b++){if(!this.morphNormals[b]){this.morphNormals[b]={},this.morphNormals[b].faceNormals=[],this.morphNormals[b].vertexNormals=[];var h,i,j=this.morphNormals[b].faceNormals,k=this.morphNormals[b].vertexNormals;for(d=0,e=this.faces.length;e>d;d++)h=new a.Vector3,i={a:new a.Vector3,b:new a.Vector3,c:new a.Vector3},j.push(h),k.push(i)}var l=this.morphNormals[b];g.vertices=this.morphTargets[b].vertices,g.computeFaceNormals(),g.computeVertexNormals();var h,i;for(d=0,e=this.faces.length;e>d;d++)f=this.faces[d],h=l.faceNormals[d],i=l.vertexNormals[d],h.copy(f.normal),i.a.copy(f.vertexNormals[0]),i.b.copy(f.vertexNormals[1]),i.c.copy(f.vertexNormals[2])}for(d=0,e=this.faces.length;e>d;d++)f=this.faces[d],f.normal=f.__originalFaceNormal,f.vertexNormals=f.__originalVertexNormals},computeTangents:function(){function b(a,b,c,d,e,f,g){k=a.vertices[b],l=a.vertices[c],m=a.vertices[d],n=j[e],o=j[f],p=j[g],q=l.x-k.x,r=m.x-k.x,s=l.y-k.y,t=m.y-k.y,u=l.z-k.z,v=m.z-k.z,w=o.x-n.x,x=p.x-n.x,y=o.y-n.y,z=p.y-n.y,A=1/(w*z-x*y),G.set((z*q-y*r)*A,(z*s-y*t)*A,(z*u-y*v)*A),H.set((w*r-x*q)*A,(w*t-x*s)*A,(w*v-x*u)*A),E[b].add(G),E[c].add(G),E[d].add(G),F[b].add(H),F[c].add(H),F[d].add(H)}var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E=[],F=[],G=new a.Vector3,H=new a.Vector3,I=new a.Vector3,J=new a.Vector3,K=new a.Vector3;for(e=0,f=this.vertices.length;f>e;e++)E[e]=new a.Vector3,F[e]=new a.Vector3;for(c=0,d=this.faces.length;d>c;c++)i=this.faces[c],j=this.faceVertexUvs[0][c],b(this,i.a,i.b,i.c,0,1,2);var L=["a","b","c","d"];for(c=0,d=this.faces.length;d>c;c++)for(i=this.faces[c],g=0;gC?-1:1,i.vertexTangents[g]=new a.Vector4(I.x,I.y,I.z,D);this.hasTangents=!0},computeLineDistances:function(){for(var a=0,b=this.vertices,c=0,d=b.length;d>c;c++)c>0&&(a+=b[c].distanceTo(b[c-1])),this.lineDistances[c]=a},computeBoundingBox:function(){null===this.boundingBox&&(this.boundingBox=new a.Box3),this.boundingBox.setFromPoints(this.vertices)},computeBoundingSphere:function(){null===this.boundingSphere&&(this.boundingSphere=new a.Sphere), +this.boundingSphere.setFromPoints(this.vertices)},merge:function(b,c,d){if(b instanceof a.Geometry==!1)return void console.error("THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.",b);var e,f=this.vertices.length,g=this.vertices,h=b.vertices,i=this.faces,j=b.faces,k=this.faceVertexUvs[0],l=b.faceVertexUvs[0];void 0===d&&(d=0),void 0!==c&&(e=(new a.Matrix3).getNormalMatrix(c));for(var m=0,n=h.length;n>m;m++){var o=h[m],p=o.clone();void 0!==c&&p.applyMatrix4(c),g.push(p)}for(m=0,n=j.length;n>m;m++){var q,r,s,t=j[m],u=t.vertexNormals,v=t.vertexColors;q=new a.Face3(t.a+f,t.b+f,t.c+f),q.normal.copy(t.normal),void 0!==e&&q.normal.applyMatrix3(e).normalize();for(var w=0,x=u.length;x>w;w++)r=u[w].clone(),void 0!==e&&r.applyMatrix3(e).normalize(),q.vertexNormals.push(r);q.color.copy(t.color);for(var w=0,x=v.length;x>w;w++)s=v[w],q.vertexColors.push(s.clone());q.materialIndex=t.materialIndex+d,i.push(q)}for(m=0,n=l.length;n>m;m++){var y=l[m],z=[];if(void 0!==y){for(var w=0,x=y.length;x>w;w++)z.push(new a.Vector2(y[w].x,y[w].y));k.push(z)}}},mergeVertices:function(){var a,b,c,d,e,f,g,h,i={},j=[],k=[],l=4,m=Math.pow(10,l);for(c=0,d=this.vertices.length;d>c;c++)a=this.vertices[c],b=Math.round(a.x*m)+"_"+Math.round(a.y*m)+"_"+Math.round(a.z*m),void 0===i[b]?(i[b]=c,j.push(this.vertices[c]),k[c]=j.length-1):k[c]=k[i[b]];var n=[];for(c=0,d=this.faces.length;d>c;c++){e=this.faces[c],e.a=k[e.a],e.b=k[e.b],e.c=k[e.c],f=[e.a,e.b,e.c];for(var o=-1,p=0;3>p;p++)if(f[p]==f[(p+1)%3]){o=p,n.push(c);break}}for(c=n.length-1;c>=0;c--){var q=n[c];for(this.faces.splice(q,1),g=0,h=this.faceVertexUvs.length;h>g;g++)this.faceVertexUvs[g].splice(q,1)}var r=this.vertices.length-j.length;return this.vertices=j,r},toJSON:function(){function a(a,b,c){return c?a|1<0,w=r.vertexNormals.length>0,x=1!==r.color.r||1!==r.color.g||1!==r.color.b,y=r.vertexColors.length>0,z=0;if(z=a(z,0,0),z=a(z,1,s),z=a(z,2,t),z=a(z,3,u),z=a(z,4,v),z=a(z,5,w),z=a(z,6,x),z=a(z,7,y),k.push(z),k.push(r.a,r.b,r.c),u){var A=this.faceVertexUvs[0][i];k.push(d(A[0]),d(A[1]),d(A[2]))}if(v&&k.push(b(r.normal)),w){var B=r.vertexNormals;k.push(b(B[0]),b(B[1]),b(B[2]))}if(x&&k.push(c(r.color)),y){var C=r.vertexColors;k.push(c(C[0]),c(C[1]),c(C[2]))}}return e.data={},e.data.vertices=h,e.data.normals=l,n.length>0&&(e.data.colors=n),p.length>0&&(e.data.uvs=[p]),e.data.faces=k,e},clone:function(){for(var b=new a.Geometry,c=this.vertices,d=0,e=c.length;e>d;d++)b.vertices.push(c[d].clone());for(var f=this.faces,d=0,e=f.length;e>d;d++)b.faces.push(f[d].clone());for(var g=this.faceVertexUvs[0],d=0,e=g.length;e>d;d++){for(var h=g[d],i=[],j=0,k=h.length;k>j;j++)i.push(new a.Vector2(h[j].x,h[j].y));b.faceVertexUvs[0].push(i)}return b},dispose:function(){this.dispatchEvent({type:"dispose"})}},a.EventDispatcher.prototype.apply(a.Geometry.prototype),a.GeometryIdCount=0,a.Camera=function(){a.Object3D.call(this),this.type="Camera",this.matrixWorldInverse=new a.Matrix4,this.projectionMatrix=new a.Matrix4},a.Camera.prototype=Object.create(a.Object3D.prototype),a.Camera.prototype.getWorldDirection=function(){var b=new a.Quaternion;return function(c){var d=c||new a.Vector3;return this.getWorldQuaternion(b),d.set(0,0,-1).applyQuaternion(b)}}(),a.Camera.prototype.lookAt=function(){var b=new a.Matrix4;return function(a){b.lookAt(this.position,a,this.up),this.quaternion.setFromRotationMatrix(b)}}(),a.Camera.prototype.clone=function(b){return void 0===b&&(b=new a.Camera),a.Object3D.prototype.clone.call(this,b),b.matrixWorldInverse.copy(this.matrixWorldInverse),b.projectionMatrix.copy(this.projectionMatrix),b},a.CubeCamera=function(b,c,d){a.Object3D.call(this),this.type="CubeCamera";var e=90,f=1,g=new a.PerspectiveCamera(e,f,b,c);g.up.set(0,-1,0),g.lookAt(new a.Vector3(1,0,0)),this.add(g);var h=new a.PerspectiveCamera(e,f,b,c);h.up.set(0,-1,0),h.lookAt(new a.Vector3(-1,0,0)),this.add(h);var i=new a.PerspectiveCamera(e,f,b,c);i.up.set(0,0,1),i.lookAt(new a.Vector3(0,1,0)),this.add(i);var j=new a.PerspectiveCamera(e,f,b,c);j.up.set(0,0,-1),j.lookAt(new a.Vector3(0,-1,0)),this.add(j);var k=new a.PerspectiveCamera(e,f,b,c);k.up.set(0,-1,0),k.lookAt(new a.Vector3(0,0,1)),this.add(k);var l=new a.PerspectiveCamera(e,f,b,c);l.up.set(0,-1,0),l.lookAt(new a.Vector3(0,0,-1)),this.add(l),this.renderTarget=new a.WebGLRenderTargetCube(d,d,{format:a.RGBFormat,magFilter:a.LinearFilter,minFilter:a.LinearFilter}),this.updateCubeMap=function(a,b){var c=this.renderTarget,d=c.generateMipmaps;c.generateMipmaps=!1,c.activeCubeFace=0,a.render(b,g,c),c.activeCubeFace=1,a.render(b,h,c),c.activeCubeFace=2,a.render(b,i,c),c.activeCubeFace=3,a.render(b,j,c),c.activeCubeFace=4,a.render(b,k,c),c.generateMipmaps=d,c.activeCubeFace=5,a.render(b,l,c)}},a.CubeCamera.prototype=Object.create(a.Object3D.prototype),a.OrthographicCamera=function(b,c,d,e,f,g){a.Camera.call(this),this.type="OrthographicCamera",this.zoom=1,this.left=b,this.right=c,this.top=d,this.bottom=e,this.near=void 0!==f?f:.1,this.far=void 0!==g?g:2e3,this.updateProjectionMatrix()},a.OrthographicCamera.prototype=Object.create(a.Camera.prototype),a.OrthographicCamera.prototype.updateProjectionMatrix=function(){var a=(this.right-this.left)/(2*this.zoom),b=(this.top-this.bottom)/(2*this.zoom),c=(this.right+this.left)/2,d=(this.top+this.bottom)/2;this.projectionMatrix.makeOrthographic(c-a,c+a,d+b,d-b,this.near,this.far)},a.OrthographicCamera.prototype.clone=function(){var b=new a.OrthographicCamera;return a.Camera.prototype.clone.call(this,b),b.zoom=this.zoom,b.left=this.left,b.right=this.right,b.top=this.top,b.bottom=this.bottom,b.near=this.near,b.far=this.far,b.projectionMatrix.copy(this.projectionMatrix),b},a.PerspectiveCamera=function(b,c,d,e){a.Camera.call(this),this.type="PerspectiveCamera",this.zoom=1,this.fov=void 0!==b?b:50,this.aspect=void 0!==c?c:1,this.near=void 0!==d?d:.1,this.far=void 0!==e?e:2e3,this.updateProjectionMatrix()},a.PerspectiveCamera.prototype=Object.create(a.Camera.prototype),a.PerspectiveCamera.prototype.setLens=function(b,c){void 0===c&&(c=24),this.fov=2*a.Math.radToDeg(Math.atan(c/(2*b))),this.updateProjectionMatrix()},a.PerspectiveCamera.prototype.setViewOffset=function(a,b,c,d,e,f){this.fullWidth=a,this.fullHeight=b,this.x=c,this.y=d,this.width=e,this.height=f,this.updateProjectionMatrix()},a.PerspectiveCamera.prototype.updateProjectionMatrix=function(){var b=a.Math.radToDeg(2*Math.atan(Math.tan(.5*a.Math.degToRad(this.fov))/this.zoom));if(this.fullWidth){var c=this.fullWidth/this.fullHeight,d=Math.tan(a.Math.degToRad(.5*b))*this.near,e=-d,f=c*e,g=c*d,h=Math.abs(g-f),i=Math.abs(d-e);this.projectionMatrix.makeFrustum(f+this.x*h/this.fullWidth,f+(this.x+this.width)*h/this.fullWidth,d-(this.y+this.height)*i/this.fullHeight,d-this.y*i/this.fullHeight,this.near,this.far)}else this.projectionMatrix.makePerspective(b,this.aspect,this.near,this.far)},a.PerspectiveCamera.prototype.clone=function(){var b=new a.PerspectiveCamera;return a.Camera.prototype.clone.call(this,b),b.zoom=this.zoom,b.fov=this.fov,b.aspect=this.aspect,b.near=this.near,b.far=this.far,b.projectionMatrix.copy(this.projectionMatrix),b},a.Light=function(b){a.Object3D.call(this),this.type="Light",this.color=new a.Color(b)},a.Light.prototype=Object.create(a.Object3D.prototype),a.Light.prototype.clone=function(b){return void 0===b&&(b=new a.Light),a.Object3D.prototype.clone.call(this,b),b.color.copy(this.color),b},a.AmbientLight=function(b){a.Light.call(this,b),this.type="AmbientLight"},a.AmbientLight.prototype=Object.create(a.Light.prototype),a.AmbientLight.prototype.clone=function(){var b=new a.AmbientLight;return a.Light.prototype.clone.call(this,b),b},a.AreaLight=function(b,c){a.Light.call(this,b),this.type="AreaLight",this.normal=new a.Vector3(0,-1,0),this.right=new a.Vector3(1,0,0),this.intensity=void 0!==c?c:1,this.width=1,this.height=1,this.constantAttenuation=1.5,this.linearAttenuation=.5,this.quadraticAttenuation=.1},a.AreaLight.prototype=Object.create(a.Light.prototype),a.DirectionalLight=function(b,c){a.Light.call(this,b),this.type="DirectionalLight",this.position.set(0,1,0),this.target=new a.Object3D,this.intensity=void 0!==c?c:1,this.castShadow=!1,this.onlyShadow=!1,this.shadowCameraNear=50,this.shadowCameraFar=5e3,this.shadowCameraLeft=-500,this.shadowCameraRight=500,this.shadowCameraTop=500,this.shadowCameraBottom=-500,this.shadowCameraVisible=!1,this.shadowBias=0,this.shadowDarkness=.5,this.shadowMapWidth=512,this.shadowMapHeight=512,this.shadowCascade=!1,this.shadowCascadeOffset=new a.Vector3(0,0,-1e3),this.shadowCascadeCount=2,this.shadowCascadeBias=[0,0,0],this.shadowCascadeWidth=[512,512,512],this.shadowCascadeHeight=[512,512,512],this.shadowCascadeNearZ=[-1,.99,.998],this.shadowCascadeFarZ=[.99,.998,1],this.shadowCascadeArray=[],this.shadowMap=null,this.shadowMapSize=null,this.shadowCamera=null,this.shadowMatrix=null},a.DirectionalLight.prototype=Object.create(a.Light.prototype),a.DirectionalLight.prototype.clone=function(){var b=new a.DirectionalLight;return a.Light.prototype.clone.call(this,b),b.target=this.target.clone(),b.intensity=this.intensity,b.castShadow=this.castShadow,b.onlyShadow=this.onlyShadow,b.shadowCameraNear=this.shadowCameraNear,b.shadowCameraFar=this.shadowCameraFar,b.shadowCameraLeft=this.shadowCameraLeft,b.shadowCameraRight=this.shadowCameraRight,b.shadowCameraTop=this.shadowCameraTop,b.shadowCameraBottom=this.shadowCameraBottom,b.shadowCameraVisible=this.shadowCameraVisible,b.shadowBias=this.shadowBias,b.shadowDarkness=this.shadowDarkness,b.shadowMapWidth=this.shadowMapWidth,b.shadowMapHeight=this.shadowMapHeight,b.shadowCascade=this.shadowCascade,b.shadowCascadeOffset.copy(this.shadowCascadeOffset),b.shadowCascadeCount=this.shadowCascadeCount,b.shadowCascadeBias=this.shadowCascadeBias.slice(0),b.shadowCascadeWidth=this.shadowCascadeWidth.slice(0),b.shadowCascadeHeight=this.shadowCascadeHeight.slice(0),b.shadowCascadeNearZ=this.shadowCascadeNearZ.slice(0),b.shadowCascadeFarZ=this.shadowCascadeFarZ.slice(0),b},a.HemisphereLight=function(b,c,d){a.Light.call(this,b),this.type="HemisphereLight",this.position.set(0,100,0),this.groundColor=new a.Color(c),this.intensity=void 0!==d?d:1},a.HemisphereLight.prototype=Object.create(a.Light.prototype),a.HemisphereLight.prototype.clone=function(){var b=new a.HemisphereLight;return a.Light.prototype.clone.call(this,b),b.groundColor.copy(this.groundColor),b.intensity=this.intensity,b},a.PointLight=function(b,c,d){a.Light.call(this,b),this.type="PointLight",this.intensity=void 0!==c?c:1,this.distance=void 0!==d?d:0},a.PointLight.prototype=Object.create(a.Light.prototype),a.PointLight.prototype.clone=function(){var b=new a.PointLight;return a.Light.prototype.clone.call(this,b),b.intensity=this.intensity,b.distance=this.distance,b},a.SpotLight=function(b,c,d,e,f){a.Light.call(this,b),this.type="SpotLight",this.position.set(0,1,0),this.target=new a.Object3D,this.intensity=void 0!==c?c:1,this.distance=void 0!==d?d:0,this.angle=void 0!==e?e:Math.PI/3,this.exponent=void 0!==f?f:10,this.castShadow=!1,this.onlyShadow=!1,this.shadowCameraNear=50,this.shadowCameraFar=5e3,this.shadowCameraFov=50,this.shadowCameraVisible=!1,this.shadowBias=0,this.shadowDarkness=.5,this.shadowMapWidth=512,this.shadowMapHeight=512,this.shadowMap=null,this.shadowMapSize=null,this.shadowCamera=null,this.shadowMatrix=null},a.SpotLight.prototype=Object.create(a.Light.prototype),a.SpotLight.prototype.clone=function(){var b=new a.SpotLight;return a.Light.prototype.clone.call(this,b),b.target=this.target.clone(),b.intensity=this.intensity,b.distance=this.distance,b.angle=this.angle,b.exponent=this.exponent,b.castShadow=this.castShadow,b.onlyShadow=this.onlyShadow,b.shadowCameraNear=this.shadowCameraNear,b.shadowCameraFar=this.shadowCameraFar,b.shadowCameraFov=this.shadowCameraFov,b.shadowCameraVisible=this.shadowCameraVisible,b.shadowBias=this.shadowBias,b.shadowDarkness=this.shadowDarkness,b.shadowMapWidth=this.shadowMapWidth,b.shadowMapHeight=this.shadowMapHeight,b},a.Cache=function(){this.files={}},a.Cache.prototype={constructor:a.Cache,add:function(a,b){this.files[a]=b},get:function(a){return this.files[a]},remove:function(a){delete this.files[a]},clear:function(){this.files={}}},a.Loader=function(b){this.showStatus=b,this.statusDomElement=b?a.Loader.prototype.addStatusElement():null,this.imageLoader=new a.ImageLoader,this.onLoadStart=function(){},this.onLoadProgress=function(){},this.onLoadComplete=function(){}},a.Loader.prototype={constructor:a.Loader,crossOrigin:void 0,addStatusElement:function(){var a=document.createElement("div");return a.style.position="absolute",a.style.right="0px",a.style.top="0px",a.style.fontSize="0.8em",a.style.textAlign="left",a.style.background="rgba(0,0,0,0.25)",a.style.color="#fff",a.style.width="120px",a.style.padding="0.5em 0.5em 0.5em 0.5em",a.style.zIndex=1e3,a.innerHTML="Loading ...",a},updateProgress:function(a){var b="Loaded ";b+=a.total?(100*a.loaded/a.total).toFixed(0)+"%":(a.loaded/1024).toFixed(2)+" KB",this.statusDomElement.innerHTML=b},extractUrlBase:function(a){var b=a.split("/");return 1===b.length?"./":(b.pop(),b.join("/")+"/")},initMaterials:function(a,b){for(var c=[],d=0;dc;c++){var e=b[c];if(e instanceof a.ShaderMaterial)return!0}return!1},createMaterial:function(b,c){function d(a){var b=Math.log(a)/Math.LN2;return Math.pow(2,Math.round(b))}function e(b,e,f,h,i,j,k){var l,m=c+f,n=a.Loader.Handlers.get(m);if(null!==n?l=n.load(m):(l=new a.Texture,n=g.imageLoader,n.crossOrigin=g.crossOrigin,n.load(m,function(b){if(a.Math.isPowerOfTwo(b.width)===!1||a.Math.isPowerOfTwo(b.height)===!1){var c=d(b.width),e=d(b.height),f=document.createElement("canvas");f.width=c,f.height=e;var g=f.getContext("2d");g.drawImage(b,0,0,c,e),l.image=f}else l.image=b;l.needsUpdate=!0})),l.sourceFile=f,h&&(l.repeat.set(h[0],h[1]),1!==h[0]&&(l.wrapS=a.RepeatWrapping),1!==h[1]&&(l.wrapT=a.RepeatWrapping)),i&&l.offset.set(i[0],i[1]),j){var o={repeat:a.RepeatWrapping,mirror:a.MirroredRepeatWrapping};void 0!==o[j[0]]&&(l.wrapS=o[j[0]]),void 0!==o[j[1]]&&(l.wrapT=o[j[1]])}k&&(l.anisotropy=k),b[e]=l}function f(a){return(255*a[0]<<16)+(255*a[1]<<8)+255*a[2]}var g=this,h="MeshLambertMaterial",i={color:15658734,opacity:1,map:null,lightMap:null,normalMap:null,bumpMap:null,wireframe:!1};if(b.shading){var j=b.shading.toLowerCase();"phong"===j?h="MeshPhongMaterial":"basic"===j&&(h="MeshBasicMaterial")}if(void 0!==b.blending&&void 0!==a[b.blending]&&(i.blending=a[b.blending]),(void 0!==b.transparent||b.opacity<1)&&(i.transparent=b.transparent),void 0!==b.depthTest&&(i.depthTest=b.depthTest),void 0!==b.depthWrite&&(i.depthWrite=b.depthWrite),void 0!==b.visible&&(i.visible=b.visible),void 0!==b.flipSided&&(i.side=a.BackSide),void 0!==b.doubleSided&&(i.side=a.DoubleSide),void 0!==b.wireframe&&(i.wireframe=b.wireframe),void 0!==b.vertexColors&&("face"===b.vertexColors?i.vertexColors=a.FaceColors:b.vertexColors&&(i.vertexColors=a.VertexColors)),b.colorDiffuse?i.color=f(b.colorDiffuse):b.DbgColor&&(i.color=b.DbgColor),b.colorSpecular&&(i.specular=f(b.colorSpecular)),b.colorAmbient&&(i.ambient=f(b.colorAmbient)),b.colorEmissive&&(i.emissive=f(b.colorEmissive)),b.transparency&&(i.opacity=b.transparency),b.specularCoef&&(i.shininess=b.specularCoef),b.mapDiffuse&&c&&e(i,"map",b.mapDiffuse,b.mapDiffuseRepeat,b.mapDiffuseOffset,b.mapDiffuseWrap,b.mapDiffuseAnisotropy),b.mapLight&&c&&e(i,"lightMap",b.mapLight,b.mapLightRepeat,b.mapLightOffset,b.mapLightWrap,b.mapLightAnisotropy),b.mapBump&&c&&e(i,"bumpMap",b.mapBump,b.mapBumpRepeat,b.mapBumpOffset,b.mapBumpWrap,b.mapBumpAnisotropy),b.mapNormal&&c&&e(i,"normalMap",b.mapNormal,b.mapNormalRepeat,b.mapNormalOffset,b.mapNormalWrap,b.mapNormalAnisotropy),b.mapSpecular&&c&&e(i,"specularMap",b.mapSpecular,b.mapSpecularRepeat,b.mapSpecularOffset,b.mapSpecularWrap,b.mapSpecularAnisotropy),b.mapAlpha&&c&&e(i,"alphaMap",b.mapAlpha,b.mapAlphaRepeat,b.mapAlphaOffset,b.mapAlphaWrap,b.mapAlphaAnisotropy),b.mapBumpScale&&(i.bumpScale=b.mapBumpScale),b.mapNormal){var k=a.ShaderLib.normalmap,l=a.UniformsUtils.clone(k.uniforms);l.tNormal.value=i.normalMap,b.mapNormalFactor&&l.uNormalScale.value.set(b.mapNormalFactor,b.mapNormalFactor),i.map&&(l.tDiffuse.value=i.map,l.enableDiffuse.value=!0),i.specularMap&&(l.tSpecular.value=i.specularMap,l.enableSpecular.value=!0),i.lightMap&&(l.tAO.value=i.lightMap,l.enableAO.value=!0),l.diffuse.value.setHex(i.color),l.specular.value.setHex(i.specular),l.ambient.value.setHex(i.ambient),l.shininess.value=i.shininess,void 0!==i.opacity&&(l.opacity.value=i.opacity);var m={fragmentShader:k.fragmentShader,vertexShader:k.vertexShader,uniforms:l,lights:!0,fog:!0},n=new a.ShaderMaterial(m);i.transparent&&(n.transparent=!0)}else var n=new a[h](i);return void 0!==b.DbgName&&(n.name=b.DbgName),n}},a.Loader.Handlers={handlers:[],add:function(a,b){this.handlers.push(a,b)},get:function(a){for(var b=0,c=this.handlers.length;c>b;b+=2){var d=this.handlers[b],e=this.handlers[b+1];if(d.test(a))return e}return null}},a.XHRLoader=function(b){this.cache=new a.Cache,this.manager=void 0!==b?b:a.DefaultLoadingManager},a.XHRLoader.prototype={constructor:a.XHRLoader,load:function(a,b,c,d){var e=this,f=e.cache.get(a);if(void 0!==f)return void(b&&b(f));var g=new XMLHttpRequest;g.open("GET",a,!0),g.addEventListener("load",function(c){e.cache.add(a,this.response),b&&b(this.response),e.manager.itemEnd(a)},!1),void 0!==c&&g.addEventListener("progress",function(a){c(a)},!1),void 0!==d&&g.addEventListener("error",function(a){d(a)},!1),void 0!==this.crossOrigin&&(g.crossOrigin=this.crossOrigin),void 0!==this.responseType&&(g.responseType=this.responseType),g.send(null),e.manager.itemStart(a)},setResponseType:function(a){this.responseType=a},setCrossOrigin:function(a){this.crossOrigin=a}},a.ImageLoader=function(b){this.cache=new a.Cache,this.manager=void 0!==b?b:a.DefaultLoadingManager},a.ImageLoader.prototype={constructor:a.ImageLoader,load:function(a,b,c,d){var e=this,f=e.cache.get(a);if(void 0!==f)return void b(f);var g=document.createElement("img");return void 0!==b&&g.addEventListener("load",function(c){e.cache.add(a,this),b(this),e.manager.itemEnd(a)},!1),void 0!==c&&g.addEventListener("progress",function(a){c(a)},!1),void 0!==d&&g.addEventListener("error",function(a){d(a)},!1),void 0!==this.crossOrigin&&(g.crossOrigin=this.crossOrigin),g.src=a,e.manager.itemStart(a),g},setCrossOrigin:function(a){this.crossOrigin=a}},a.JSONLoader=function(b){a.Loader.call(this,b),this.withCredentials=!1},a.JSONLoader.prototype=Object.create(a.Loader.prototype),a.JSONLoader.prototype.load=function(a,b,c){c=c&&"string"==typeof c?c:this.extractUrlBase(a),this.onLoadStart(),this.loadAjaxJSON(this,a,b,c)},a.JSONLoader.prototype.loadAjaxJSON=function(a,b,c,d,e){var f=new XMLHttpRequest,g=0;f.onreadystatechange=function(){if(f.readyState===f.DONE)if(200===f.status||0===f.status){if(f.responseText){var h=JSON.parse(f.responseText);if(void 0!==h.metadata&&"scene"===h.metadata.type)return void console.error('THREE.JSONLoader: "'+b+'" seems to be a Scene. Use THREE.SceneLoader instead.');var i=a.parse(h,d);c(i.geometry,i.materials)}else console.error('THREE.JSONLoader: "'+b+'" seems to be unreachable or the file is empty.');a.onLoadComplete()}else console.error("THREE.JSONLoader: Couldn't load \""+b+'" ('+f.status+")");else f.readyState===f.LOADING?e&&(0===g&&(g=f.getResponseHeader("Content-Length")),e({total:g,loaded:f.responseText.length})):f.readyState===f.HEADERS_RECEIVED&&void 0!==e&&(g=f.getResponseHeader("Content-Length"))},f.open("GET",b,!0),f.withCredentials=this.withCredentials,f.send(null)},a.JSONLoader.prototype.parse=function(b,c){function d(c){function d(a,b){return a&1<e;e++)g.faceVertexUvs[e]=[]}for(i=0,j=H.length;j>i;)w=new a.Vector3,w.x=H[i++]*c,w.y=H[i++]*c,w.z=H[i++]*c,g.vertices.push(w);for(i=0,j=G.length;j>i;)if(o=G[i++],p=d(o,0),q=d(o,1),r=d(o,3),s=d(o,4),t=d(o,5),u=d(o,6),v=d(o,7),p){if(y=new a.Face3,y.a=G[i],y.b=G[i+1],y.c=G[i+3],z=new a.Face3,z.a=G[i+1],z.b=G[i+2],z.c=G[i+3],i+=4,q&&(n=G[i++],y.materialIndex=n,z.materialIndex=n),h=g.faces.length,r)for(e=0;K>e;e++)for(C=b.uvs[e],g.faceVertexUvs[e][h]=[],g.faceVertexUvs[e][h+1]=[],f=0;4>f;f++)m=G[i++],E=C[2*m],F=C[2*m+1],D=new a.Vector2(E,F),2!==f&&g.faceVertexUvs[e][h].push(D),0!==f&&g.faceVertexUvs[e][h+1].push(D);if(s&&(l=3*G[i++],y.normal.set(I[l++],I[l++],I[l]),z.normal.copy(y.normal)),t)for(e=0;4>e;e++)l=3*G[i++],B=new a.Vector3(I[l++],I[l++],I[l]),2!==e&&y.vertexNormals.push(B),0!==e&&z.vertexNormals.push(B);if(u&&(k=G[i++],A=J[k],y.color.setHex(A),z.color.setHex(A)),v)for(e=0;4>e;e++)k=G[i++],A=J[k],2!==e&&y.vertexColors.push(new a.Color(A)),0!==e&&z.vertexColors.push(new a.Color(A));g.faces.push(y),g.faces.push(z)}else{if(x=new a.Face3,x.a=G[i++],x.b=G[i++],x.c=G[i++],q&&(n=G[i++],x.materialIndex=n),h=g.faces.length,r)for(e=0;K>e;e++)for(C=b.uvs[e],g.faceVertexUvs[e][h]=[],f=0;3>f;f++)m=G[i++],E=C[2*m],F=C[2*m+1],D=new a.Vector2(E,F),g.faceVertexUvs[e][h].push(D);if(s&&(l=3*G[i++],x.normal.set(I[l++],I[l++],I[l])),t)for(e=0;3>e;e++)l=3*G[i++],B=new a.Vector3(I[l++],I[l++],I[l]),x.vertexNormals.push(B);if(u&&(k=G[i++],x.color.setHex(J[k])),v)for(e=0;3>e;e++)k=G[i++],x.vertexColors.push(new a.Color(J[k]));g.faces.push(x)}}function e(){var c=void 0!==b.influencesPerVertex?b.influencesPerVertex:2;if(b.skinWeights)for(var d=0,e=b.skinWeights.length;e>d;d+=c){var f=b.skinWeights[d],h=c>1?b.skinWeights[d+1]:0,i=c>2?b.skinWeights[d+2]:0,j=c>3?b.skinWeights[d+3]:0;g.skinWeights.push(new a.Vector4(f,h,i,j))}if(b.skinIndices)for(var d=0,e=b.skinIndices.length;e>d;d+=c){var k=b.skinIndices[d],l=c>1?b.skinIndices[d+1]:0,m=c>2?b.skinIndices[d+2]:0,n=c>3?b.skinIndices[d+3]:0;g.skinIndices.push(new a.Vector4(k,l,m,n))}g.bones=b.bones,g.bones&&g.bones.length>0&&(g.skinWeights.length!==g.skinIndices.length||g.skinIndices.length!==g.vertices.length)&&console.warn("When skinning, number of vertices ("+g.vertices.length+"), skinIndices ("+g.skinIndices.length+"), and skinWeights ("+g.skinWeights.length+") should match."),g.animation=b.animation,g.animations=b.animations}function f(c){if(void 0!==b.morphTargets){var d,e,f,h,i,j;for(d=0,e=b.morphTargets.length;e>d;d++)for(g.morphTargets[d]={},g.morphTargets[d].name=b.morphTargets[d].name,g.morphTargets[d].vertices=[],i=g.morphTargets[d].vertices,j=b.morphTargets[d].vertices,f=0,h=j.length;h>f;f+=3){var k=new a.Vector3;k.x=j[f]*c,k.y=j[f+1]*c,k.z=j[f+2]*c,i.push(k)}}if(void 0!==b.morphColors){var d,e,l,m,n,o,p;for(d=0,e=b.morphColors.length;e>d;d++)for(g.morphColors[d]={},g.morphColors[d].name=b.morphColors[d].name,g.morphColors[d].colors=[],n=g.morphColors[d].colors,o=b.morphColors[d].colors,l=0,m=o.length;m>l;l+=3)p=new a.Color(16755200),p.setRGB(o[l],o[l+1],o[l+2]),n.push(p)}}var g=new a.Geometry,h=void 0!==b.scale?1/b.scale:1;if(d(h),e(),f(h),g.computeFaceNormals(),g.computeBoundingSphere(),void 0===b.materials||0===b.materials.length)return{geometry:g};var i=this.initMaterials(b.materials,c);return this.needsTangents(i)&&g.computeTangents(),{geometry:g,materials:i}},a.LoadingManager=function(a,b,c){var d=this,e=0,f=0;this.onLoad=a,this.onProgress=b,this.onError=c,this.itemStart=function(a){f++},this.itemEnd=function(a){e++,void 0!==d.onProgress&&d.onProgress(a,e,f),e===f&&void 0!==d.onLoad&&d.onLoad()}},a.DefaultLoadingManager=new a.LoadingManager,a.BufferGeometryLoader=function(b){this.manager=void 0!==b?b:a.DefaultLoadingManager},a.BufferGeometryLoader.prototype={constructor:a.BufferGeometryLoader,load:function(b,c,d,e){var f=this,g=new a.XHRLoader;g.setCrossOrigin(this.crossOrigin),g.load(b,function(a){c(f.parse(JSON.parse(a)))},d,e)},setCrossOrigin:function(a){this.crossOrigin=a},parse:function(b){var c=new a.BufferGeometry,d=b.attributes;for(var e in d){var f=d[e],g=new self[f.type](f.array);c.addAttribute(e,new a.BufferAttribute(g,f.itemSize))}var h=b.offsets;void 0!==h&&(c.offsets=JSON.parse(JSON.stringify(h)));var i=b.boundingSphere;if(void 0!==i){var j=new a.Vector3;void 0!==i.center&&j.fromArray(i.center),c.boundingSphere=new a.Sphere(j,i.radius)}return c}},a.MaterialLoader=function(b){this.manager=void 0!==b?b:a.DefaultLoadingManager},a.MaterialLoader.prototype={constructor:a.MaterialLoader,load:function(b,c,d,e){var f=this,g=new a.XHRLoader;g.setCrossOrigin(this.crossOrigin),g.load(b,function(a){c(f.parse(JSON.parse(a)))},d,e)},setCrossOrigin:function(a){this.crossOrigin=a},parse:function(b){var c=new a[b.type];if(void 0!==b.color&&c.color.setHex(b.color),void 0!==b.ambient&&c.ambient.setHex(b.ambient),void 0!==b.emissive&&c.emissive.setHex(b.emissive),void 0!==b.specular&&c.specular.setHex(b.specular),void 0!==b.shininess&&(c.shininess=b.shininess),void 0!==b.uniforms&&(c.uniforms=b.uniforms),void 0!==b.vertexShader&&(c.vertexShader=b.vertexShader),void 0!==b.fragmentShader&&(c.fragmentShader=b.fragmentShader),void 0!==b.vertexColors&&(c.vertexColors=b.vertexColors),void 0!==b.shading&&(c.shading=b.shading),void 0!==b.blending&&(c.blending=b.blending),void 0!==b.side&&(c.side=b.side),void 0!==b.opacity&&(c.opacity=b.opacity),void 0!==b.transparent&&(c.transparent=b.transparent),void 0!==b.wireframe&&(c.wireframe=b.wireframe),void 0!==b.materials)for(var d=0,e=b.materials.length;e>d;d++)c.materials.push(this.parse(b.materials[d]));return c}},a.ObjectLoader=function(b){this.manager=void 0!==b?b:a.DefaultLoadingManager},a.ObjectLoader.prototype={constructor:a.ObjectLoader,load:function(b,c,d,e){var f=this,g=new a.XHRLoader(f.manager);g.setCrossOrigin(this.crossOrigin),g.load(b,function(a){c(f.parse(JSON.parse(a)))},d,e)},setCrossOrigin:function(a){this.crossOrigin=a},parse:function(a){var b=this.parseGeometries(a.geometries),c=this.parseMaterials(a.materials),d=this.parseObject(a.object,b,c);return d},parseGeometries:function(b){var c={};if(void 0!==b)for(var d=new a.JSONLoader,e=new a.BufferGeometryLoader,f=0,g=b.length;g>f;f++){var h,i=b[f];switch(i.type){case"PlaneGeometry":h=new a.PlaneGeometry(i.width,i.height,i.widthSegments,i.heightSegments);break;case"BoxGeometry":case"CubeGeometry":h=new a.BoxGeometry(i.width,i.height,i.depth,i.widthSegments,i.heightSegments,i.depthSegments);break;case"CircleGeometry":h=new a.CircleGeometry(i.radius,i.segments);break;case"CylinderGeometry":h=new a.CylinderGeometry(i.radiusTop,i.radiusBottom,i.height,i.radialSegments,i.heightSegments,i.openEnded);break;case"SphereGeometry":h=new a.SphereGeometry(i.radius,i.widthSegments,i.heightSegments,i.phiStart,i.phiLength,i.thetaStart,i.thetaLength);break;case"IcosahedronGeometry":h=new a.IcosahedronGeometry(i.radius,i.detail);break;case"TorusGeometry":h=new a.TorusGeometry(i.radius,i.tube,i.radialSegments,i.tubularSegments,i.arc);break;case"TorusKnotGeometry":h=new a.TorusKnotGeometry(i.radius,i.tube,i.radialSegments,i.tubularSegments,i.p,i.q,i.heightScale);break;case"BufferGeometry":h=e.parse(i.data);break;case"Geometry":h=d.parse(i.data).geometry}h.uuid=i.uuid,void 0!==i.name&&(h.name=i.name),c[i.uuid]=h}return c},parseMaterials:function(b){var c={};if(void 0!==b)for(var d=new a.MaterialLoader,e=0,f=b.length;f>e;e++){var g=b[e],h=d.parse(g);h.uuid=g.uuid,void 0!==g.name&&(h.name=g.name),c[g.uuid]=h}return c},parseObject:function(){var b=new a.Matrix4;return function(c,d,e){var f;switch(c.type){case"Scene":f=new a.Scene;break;case"PerspectiveCamera":f=new a.PerspectiveCamera(c.fov,c.aspect,c.near,c.far);break;case"OrthographicCamera":f=new a.OrthographicCamera(c.left,c.right,c.top,c.bottom,c.near,c.far);break;case"AmbientLight":f=new a.AmbientLight(c.color);break;case"DirectionalLight":f=new a.DirectionalLight(c.color,c.intensity);break;case"PointLight":f=new a.PointLight(c.color,c.intensity,c.distance);break;case"SpotLight":f=new a.SpotLight(c.color,c.intensity,c.distance,c.angle,c.exponent);break;case"HemisphereLight":f=new a.HemisphereLight(c.color,c.groundColor,c.intensity);break;case"Mesh":var g=d[c.geometry],h=e[c.material];void 0===g&&console.warn("THREE.ObjectLoader: Undefined geometry",c.geometry),void 0===h&&console.warn("THREE.ObjectLoader: Undefined material",c.material),f=new a.Mesh(g,h);break;case"Line":var g=d[c.geometry],h=e[c.material];void 0===g&&console.warn("THREE.ObjectLoader: Undefined geometry",c.geometry),void 0===h&&console.warn("THREE.ObjectLoader: Undefined material",c.material),f=new a.Line(g,h);break;case"Sprite":var h=e[c.material];void 0===h&&console.warn("THREE.ObjectLoader: Undefined material",c.material),f=new a.Sprite(h);break;case"Group":f=new a.Group;break;default:f=new a.Object3D}if(f.uuid=c.uuid,void 0!==c.name&&(f.name=c.name),void 0!==c.matrix?(b.fromArray(c.matrix),b.decompose(f.position,f.quaternion,f.scale)):(void 0!==c.position&&f.position.fromArray(c.position),void 0!==c.rotation&&f.rotation.fromArray(c.rotation),void 0!==c.scale&&f.scale.fromArray(c.scale)),void 0!==c.visible&&(f.visible=c.visible),void 0!==c.userData&&(f.userData=c.userData),void 0!==c.children)for(var i in c.children)f.add(this.parseObject(c.children[i],d,e));return f}}()},a.TextureLoader=function(b){this.manager=void 0!==b?b:a.DefaultLoadingManager},a.TextureLoader.prototype={constructor:a.TextureLoader,load:function(b,c,d,e){var f=this,g=new a.ImageLoader(f.manager);g.setCrossOrigin(this.crossOrigin),g.load(b,function(b){var d=new a.Texture(b);d.needsUpdate=!0,void 0!==c&&c(d)},d,e)},setCrossOrigin:function(a){this.crossOrigin=a}},a.CompressedTextureLoader=function(){this._parser=null},a.CompressedTextureLoader.prototype={constructor:a.CompressedTextureLoader,load:function(b,c,d){var e=this,f=[],g=new a.CompressedTexture;g.image=f;var h=new a.XHRLoader;if(h.setResponseType("arraybuffer"),b instanceof Array)for(var i=0,j=function(d){h.load(b[d],function(b){var h=e._parser(b,!0);f[d]={width:h.width,height:h.height,format:h.format,mipmaps:h.mipmaps},i+=1,6===i&&(1==h.mipmapCount&&(g.minFilter=a.LinearFilter),g.format=h.format,g.needsUpdate=!0,c&&c(g))})},k=0,l=b.length;l>k;++k)j(k);else h.load(b,function(b){var d=e._parser(b,!0);if(d.isCubemap)for(var h=d.mipmaps.length/d.mipmapCount,i=0;h>i;i++){f[i]={mipmaps:[]};for(var j=0;jb;b++)a.materials.push(this.materials[b].toJSON());return a},clone:function(){for(var b=new a.MeshFaceMaterial,c=0;cg){var h=c.closestPointToPoint(a);h.applyMatrix4(f.matrixWorld);var j=d.ray.origin.distanceTo(h);e.push({distance:j,distanceToRay:g,point:h.clone(),index:b,face:null,object:f})}};if(g instanceof a.BufferGeometry){var l=g.attributes,m=l.position.array;if(void 0!==l.index){var n=l.index.array,o=g.offsets;if(0===o.length){var p={start:0,count:n.length,index:0};o=[p]}for(var q=0,r=o.length;r>q;++q)for(var s=o[q].start,t=o[q].count,u=o[q].index,v=s,w=s+t;w>v;v++){var x=u+n[v];j.fromArray(m,3*x),k(j,x)}}else for(var y=m.length/3,v=0;y>v;v++)j.set(m[3*v],m[3*v+1],m[3*v+2]),k(j,v)}else for(var z=this.geometry.vertices,v=0;vo;o+=n){var p=c.distanceSqToSegment(j[o],j[o+1],m,l);if(!(p>h)){var q=c.origin.distanceTo(m);qe.far||f.push({distance:q,point:l.clone().applyMatrix4(this.matrixWorld),face:null,faceIndex:null,object:this})}}}}(),a.Line.prototype.clone=function(b){return void 0===b&&(b=new a.Line(this.geometry,this.material,this.mode)),a.Object3D.prototype.clone.call(this,b),b},a.Mesh=function(b,c){a.Object3D.call(this),this.type="Mesh",this.geometry=void 0!==b?b:new a.Geometry,this.material=void 0!==c?c:new a.MeshBasicMaterial({color:16777215*Math.random()}),this.updateMorphTargets()},a.Mesh.prototype=Object.create(a.Object3D.prototype),a.Mesh.prototype.updateMorphTargets=function(){if(void 0!==this.geometry.morphTargets&&this.geometry.morphTargets.length>0){this.morphTargetBase=-1,this.morphTargetForcedOrder=[],this.morphTargetInfluences=[],this.morphTargetDictionary={};for(var a=0,b=this.geometry.morphTargets.length;b>a;a++)this.morphTargetInfluences.push(0),this.morphTargetDictionary[this.geometry.morphTargets[a].name]=a}},a.Mesh.prototype.getMorphTargetIndexByName=function(a){return void 0!==this.morphTargetDictionary[a]?this.morphTargetDictionary[a]:(console.log("THREE.Mesh.getMorphTargetIndexByName: morph target "+a+" does not exist. Returning 0."),0)},a.Mesh.prototype.raycast=function(){var b=new a.Matrix4,c=new a.Ray,d=new a.Sphere,e=new a.Vector3,f=new a.Vector3,g=new a.Vector3;return function(h,i){var j=this.geometry;if(null===j.boundingSphere&&j.computeBoundingSphere(),d.copy(j.boundingSphere),d.applyMatrix4(this.matrixWorld),h.ray.isIntersectionSphere(d)!==!1&&(b.getInverse(this.matrixWorld),c.copy(h.ray).applyMatrix4(b),null===j.boundingBox||c.isIntersectionBox(j.boundingBox)!==!1))if(j instanceof a.BufferGeometry){var k=this.material;if(void 0===k)return;var l,m,n,o=j.attributes,p=h.precision;if(void 0!==o.index){var q=o.index.array,r=o.position.array,s=j.offsets;0===s.length&&(s=[{start:0,count:q.length,index:0}]);for(var t=0,u=s.length;u>t;++t)for(var v=s[t].start,w=s[t].count,x=s[t].index,y=v,z=v+w;z>y;y+=3){if(l=x+q[y],m=x+q[y+1],n=x+q[y+2],e.fromArray(r,3*l),f.fromArray(r,3*m),g.fromArray(r,3*n),k.side===a.BackSide)var A=c.intersectTriangle(g,f,e,!0);else var A=c.intersectTriangle(e,f,g,k.side!==a.DoubleSide);if(null!==A){A.applyMatrix4(this.matrixWorld);var B=h.ray.origin.distanceTo(A);p>B||Bh.far||i.push({distance:B,point:A,face:new a.Face3(l,m,n,a.Triangle.normal(e,f,g)),faceIndex:null,object:this})}}}else for(var r=o.position.array,y=0,C=0,z=r.length;z>y;y+=3,C+=9){if(l=y,m=y+1,n=y+2,e.fromArray(r,C),f.fromArray(r,C+3),g.fromArray(r,C+6),k.side===a.BackSide)var A=c.intersectTriangle(g,f,e,!0);else var A=c.intersectTriangle(e,f,g,k.side!==a.DoubleSide);if(null!==A){A.applyMatrix4(this.matrixWorld);var B=h.ray.origin.distanceTo(A);p>B||Bh.far||i.push({distance:B,point:A,face:new a.Face3(l,m,n,a.Triangle.normal(e,f,g)),faceIndex:null,object:this})}}}else if(j instanceof a.Geometry)for(var l,m,n,D=this.material instanceof a.MeshFaceMaterial,E=D===!0?this.material.materials:null,p=h.precision,F=j.vertices,G=0,H=j.faces.length;H>G;G++){var I=j.faces[G],k=D===!0?E[I.materialIndex]:this.material;if(void 0!==k){if(l=F[I.a],m=F[I.b],n=F[I.c],k.morphTargets===!0){var J=j.morphTargets,K=this.morphTargetInfluences;e.set(0,0,0),f.set(0,0,0),g.set(0,0,0);for(var L=0,M=J.length;M>L;L++){var N=K[L];if(0!==N){var O=J[L].vertices;e.x+=(O[I.a].x-l.x)*N,e.y+=(O[I.a].y-l.y)*N,e.z+=(O[I.a].z-l.z)*N,f.x+=(O[I.b].x-m.x)*N,f.y+=(O[I.b].y-m.y)*N,f.z+=(O[I.b].z-m.z)*N,g.x+=(O[I.c].x-n.x)*N,g.y+=(O[I.c].y-n.y)*N,g.z+=(O[I.c].z-n.z)*N}}e.add(l),f.add(m),g.add(n),l=e,m=f,n=g}if(k.side===a.BackSide)var A=c.intersectTriangle(n,m,l,!0);else var A=c.intersectTriangle(l,m,n,k.side!==a.DoubleSide);if(null!==A){A.applyMatrix4(this.matrixWorld);var B=h.ray.origin.distanceTo(A);p>B||Bh.far||i.push({distance:B,point:A,face:I,faceIndex:G,object:this})}}}}}(),a.Mesh.prototype.clone=function(b,c){return void 0===b&&(b=new a.Mesh(this.geometry,this.material)),a.Object3D.prototype.clone.call(this,b,c),b},a.Bone=function(b){a.Object3D.call(this),this.skin=b},a.Bone.prototype=Object.create(a.Object3D.prototype),a.Skeleton=function(b,c,d){if(this.useVertexTexture=void 0!==d?d:!0,this.identityMatrix=new a.Matrix4,b=b||[],this.bones=b.slice(0),this.useVertexTexture){var e;e=this.bones.length>256?64:this.bones.length>64?32:this.bones.length>16?16:8,this.boneTextureWidth=e,this.boneTextureHeight=e,this.boneMatrices=new Float32Array(this.boneTextureWidth*this.boneTextureHeight*4),this.boneTexture=new a.DataTexture(this.boneMatrices,this.boneTextureWidth,this.boneTextureHeight,a.RGBAFormat,a.FloatType),this.boneTexture.minFilter=a.NearestFilter,this.boneTexture.magFilter=a.NearestFilter,this.boneTexture.generateMipmaps=!1,this.boneTexture.flipY=!1}else this.boneMatrices=new Float32Array(16*this.bones.length);if(void 0===c)this.calculateInverses();else if(this.bones.length===c.length)this.boneInverses=c.slice(0);else{console.warn("THREE.Skeleton bonInverses is the wrong length."),this.boneInverses=[];for(var f=0,g=this.bones.length;g>f;f++)this.boneInverses.push(new a.Matrix4)}},a.Skeleton.prototype.calculateInverses=function(){this.boneInverses=[];for(var b=0,c=this.bones.length;c>b;b++){var d=new a.Matrix4;this.bones[b]&&d.getInverse(this.bones[b].matrixWorld),this.boneInverses.push(d)}},a.Skeleton.prototype.pose=function(){for(var a,b=0,c=this.bones.length;c>b;b++)a=this.bones[b],a&&a.matrixWorld.getInverse(this.boneInverses[b]);for(var b=0,c=this.bones.length;c>b;b++)a=this.bones[b],a&&(a.parent?(a.matrix.getInverse(a.parent.matrixWorld),a.matrix.multiply(a.matrixWorld)):a.matrix.copy(a.matrixWorld),a.matrix.decompose(a.position,a.quaternion,a.scale))},a.Skeleton.prototype.update=function(){var b=new a.Matrix4;return function(){for(var a=0,c=this.bones.length;c>a;a++){var d=this.bones[a]?this.bones[a].matrixWorld:this.identityMatrix;b.multiplyMatrices(d,this.boneInverses[a]),b.flattenToArrayOffset(this.boneMatrices,16*a)}this.useVertexTexture&&(this.boneTexture.needsUpdate=!0)}}(),a.SkinnedMesh=function(b,c,d){a.Mesh.call(this,b,c),this.type="SkinnedMesh",this.bindMode="attached",this.bindMatrix=new a.Matrix4,this.bindMatrixInverse=new a.Matrix4;var e=[];if(this.geometry&&void 0!==this.geometry.bones){for(var f,g,h,i,j,k=0,l=this.geometry.bones.length;l>k;++k)g=this.geometry.bones[k],h=g.pos,i=g.rotq,j=g.scl,f=new a.Bone(this),e.push(f),f.name=g.name,f.position.set(h[0],h[1],h[2]),f.quaternion.set(i[0],i[1],i[2],i[3]),void 0!==j?f.scale.set(j[0],j[1],j[2]):f.scale.set(1,1,1);for(var k=0,l=this.geometry.bones.length;l>k;++k)g=this.geometry.bones[k],-1!==g.parent?e[g.parent].add(e[k]):this.add(e[k])}this.normalizeSkinWeights(),this.updateMatrixWorld(!0),this.bind(new a.Skeleton(e,void 0,d))},a.SkinnedMesh.prototype=Object.create(a.Mesh.prototype),a.SkinnedMesh.prototype.bind=function(a,b){this.skeleton=a,void 0===b&&(this.updateMatrixWorld(!0),b=this.matrixWorld),this.bindMatrix.copy(b),this.bindMatrixInverse.getInverse(b)},a.SkinnedMesh.prototype.pose=function(){this.skeleton.pose()},a.SkinnedMesh.prototype.normalizeSkinWeights=function(){if(this.geometry instanceof a.Geometry)for(var b=0;be;e++){var g=a.morphTargets[e],h=g.name.match(d);if(h&&h.length>1){var i=h[1];h[2];c[i]||(c[i]={start:1/0,end:-(1/0)});var j=c[i];ej.end&&(j.end=e),b||(b=i)}}a.firstAnimation=b},a.MorphAnimMesh.prototype.setAnimationLabel=function(a,b,c){this.geometry.animations||(this.geometry.animations={}),this.geometry.animations[a]={start:b,end:c}},a.MorphAnimMesh.prototype.playAnimation=function(a,b){var c=this.geometry.animations[a];c?(this.setFrameRange(c.start,c.end),this.duration=1e3*((c.end-c.start)/b),this.time=0):console.warn("animation["+a+"] undefined")},a.MorphAnimMesh.prototype.updateAnimation=function(b){var c=this.duration/this.length;this.time+=this.direction*b,this.mirroredLoop?(this.time>this.duration||this.time<0)&&(this.direction*=-1,this.time>this.duration&&(this.time=this.duration,this.directionBackwards=!0),this.time<0&&(this.time=0,this.directionBackwards=!1)):(this.time=this.time%this.duration,this.time<0&&(this.time+=this.duration));var d=this.startKeyframe+a.Math.clamp(Math.floor(this.time/c),0,this.length-1);d!==this.currentKeyframe&&(this.morphTargetInfluences[this.lastKeyframe]=0,this.morphTargetInfluences[this.currentKeyframe]=1,this.morphTargetInfluences[d]=0,this.lastKeyframe=this.currentKeyframe,this.currentKeyframe=d);var e=this.time%c/c;this.directionBackwards&&(e=1-e),this.morphTargetInfluences[this.currentKeyframe]=e,this.morphTargetInfluences[this.lastKeyframe]=1-e},a.MorphAnimMesh.prototype.interpolateTargets=function(a,b,c){for(var d=this.morphTargetInfluences,e=0,f=d.length;f>e;e++)d[e]=0;a>-1&&(d[a]=1-c),b>-1&&(d[b]=c)},a.MorphAnimMesh.prototype.clone=function(b){return void 0===b&&(b=new a.MorphAnimMesh(this.geometry,this.material)),b.duration=this.duration,b.mirroredLoop=this.mirroredLoop,b.time=this.time,b.lastKeyframe=this.lastKeyframe,b.currentKeyframe=this.currentKeyframe,b.direction=this.direction,b.directionBackwards=this.directionBackwards,a.Mesh.prototype.clone.call(this,b),b},a.LOD=function(){a.Object3D.call(this),this.objects=[]},a.LOD.prototype=Object.create(a.Object3D.prototype),a.LOD.prototype.addLevel=function(a,b){void 0===b&&(b=0),b=Math.abs(b);for(var c=0;cb&&!(a1){b.setFromMatrixPosition(a.matrixWorld),c.setFromMatrixPosition(this.matrixWorld);var d=b.distanceTo(c);this.objects[0].object.visible=!0;for(var e=1,f=this.objects.length;f>e&&d>=this.objects[e].distance;e++)this.objects[e-1].object.visible=!1,this.objects[e].object.visible=!0;for(;f>e;e++)this.objects[e].object.visible=!1}}}(),a.LOD.prototype.clone=function(b){void 0===b&&(b=new a.LOD),a.Object3D.prototype.clone.call(this,b);for(var c=0,d=this.objects.length;d>c;c++){var e=this.objects[c].object.clone();e.visible=0===c,b.addLevel(e,this.objects[c].distance)}return b},a.Sprite=function(){var b=new Uint16Array([0,1,2,0,2,3]),c=new Float32Array([-.5,-.5,0,.5,-.5,0,.5,.5,0,-.5,.5,0]),d=new Float32Array([0,0,1,0,1,1,0,1]),e=new a.BufferGeometry;return e.addAttribute("index",new a.BufferAttribute(b,1)),e.addAttribute("position",new a.BufferAttribute(c,3)),e.addAttribute("uv",new a.BufferAttribute(d,2)),function(b){a.Object3D.call(this),this.type="Sprite",this.geometry=e,this.material=void 0!==b?b:new a.SpriteMaterial}}(),a.Sprite.prototype=Object.create(a.Object3D.prototype),a.Sprite.prototype.raycast=function(){var b=new a.Vector3;return function(a,c){b.setFromMatrixPosition(this.matrixWorld);var d=a.ray.distanceToPoint(b);d>this.scale.x||c.push({distance:d,point:this.position,face:null,object:this})}}(),a.Sprite.prototype.clone=function(b){return void 0===b&&(b=new a.Sprite(this.material)),a.Object3D.prototype.clone.call(this,b),b},a.Particle=a.Sprite,a.LensFlare=function(b,c,d,e,f){a.Object3D.call(this),this.lensFlares=[],this.positionScreen=new a.Vector3,this.customUpdateCallback=void 0,void 0!==b&&this.add(b,c,d,e,f)},a.LensFlare.prototype=Object.create(a.Object3D.prototype),a.LensFlare.prototype.add=function(b,c,d,e,f,g){void 0===c&&(c=-1),void 0===d&&(d=0),void 0===g&&(g=1),void 0===f&&(f=new a.Color(16777215)),void 0===e&&(e=a.NormalBlending),d=Math.min(d,Math.max(0,d)),this.lensFlares.push({texture:b,size:c,distance:d,x:0,y:0,z:0,scale:1,rotation:1,opacity:g,color:f,blending:e})},a.LensFlare.prototype.updateLensFlares=function(){var a,b,c=this.lensFlares.length,d=2*-this.positionScreen.x,e=2*-this.positionScreen.y; +for(a=0;c>a;a++)b=this.lensFlares[a],b.x=this.positionScreen.x+d*b.distance,b.y=this.positionScreen.y+e*b.distance,b.wantedRotation=b.x*Math.PI*.25,b.rotation+=.25*(b.wantedRotation-b.rotation)},a.Scene=function(){a.Object3D.call(this),this.type="Scene",this.fog=null,this.overrideMaterial=null,this.autoUpdate=!0},a.Scene.prototype=Object.create(a.Object3D.prototype),a.Scene.prototype.clone=function(b){return void 0===b&&(b=new a.Scene),a.Object3D.prototype.clone.call(this,b),null!==this.fog&&(b.fog=this.fog.clone()),null!==this.overrideMaterial&&(b.overrideMaterial=this.overrideMaterial.clone()),b.autoUpdate=this.autoUpdate,b.matrixAutoUpdate=this.matrixAutoUpdate,b},a.Fog=function(b,c,d){this.name="",this.color=new a.Color(b),this.near=void 0!==c?c:1,this.far=void 0!==d?d:1e3},a.Fog.prototype.clone=function(){return new a.Fog(this.color.getHex(),this.near,this.far)},a.FogExp2=function(b,c){this.name="",this.color=new a.Color(b),this.density=void 0!==c?c:25e-5},a.FogExp2.prototype.clone=function(){return new a.FogExp2(this.color.getHex(),this.density)},a.ShaderChunk={},a.ShaderChunk.alphatest_fragment="#ifdef ALPHATEST\n\n if ( gl_FragColor.a < ALPHATEST ) discard;\n\n#endif\n",a.ShaderChunk.lights_lambert_vertex="vLightFront = vec3( 0.0 );\n\n#ifdef DOUBLE_SIDED\n\n vLightBack = vec3( 0.0 );\n\n#endif\n\ntransformedNormal = normalize( transformedNormal );\n\n#if MAX_DIR_LIGHTS > 0\n\nfor( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\n\n vec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\n vec3 dirVector = normalize( lDirection.xyz );\n\n float dotProduct = dot( transformedNormal, dirVector );\n vec3 directionalLightWeighting = vec3( max( dotProduct, 0.0 ) );\n\n #ifdef DOUBLE_SIDED\n\n vec3 directionalLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\n\n #ifdef WRAP_AROUND\n\n vec3 directionalLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\n\n #endif\n\n #endif\n\n #ifdef WRAP_AROUND\n\n vec3 directionalLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\n directionalLightWeighting = mix( directionalLightWeighting, directionalLightWeightingHalf, wrapRGB );\n\n #ifdef DOUBLE_SIDED\n\n directionalLightWeightingBack = mix( directionalLightWeightingBack, directionalLightWeightingHalfBack, wrapRGB );\n\n #endif\n\n #endif\n\n vLightFront += directionalLightColor[ i ] * directionalLightWeighting;\n\n #ifdef DOUBLE_SIDED\n\n vLightBack += directionalLightColor[ i ] * directionalLightWeightingBack;\n\n #endif\n\n}\n\n#endif\n\n#if MAX_POINT_LIGHTS > 0\n\n for( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\n\n vec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\n vec3 lVector = lPosition.xyz - mvPosition.xyz;\n\n float lDistance = 1.0;\n if ( pointLightDistance[ i ] > 0.0 )\n lDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\n\n lVector = normalize( lVector );\n float dotProduct = dot( transformedNormal, lVector );\n\n vec3 pointLightWeighting = vec3( max( dotProduct, 0.0 ) );\n\n #ifdef DOUBLE_SIDED\n\n vec3 pointLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\n\n #ifdef WRAP_AROUND\n\n vec3 pointLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\n\n #endif\n\n #endif\n\n #ifdef WRAP_AROUND\n\n vec3 pointLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\n pointLightWeighting = mix( pointLightWeighting, pointLightWeightingHalf, wrapRGB );\n\n #ifdef DOUBLE_SIDED\n\n pointLightWeightingBack = mix( pointLightWeightingBack, pointLightWeightingHalfBack, wrapRGB );\n\n #endif\n\n #endif\n\n vLightFront += pointLightColor[ i ] * pointLightWeighting * lDistance;\n\n #ifdef DOUBLE_SIDED\n\n vLightBack += pointLightColor[ i ] * pointLightWeightingBack * lDistance;\n\n #endif\n\n }\n\n#endif\n\n#if MAX_SPOT_LIGHTS > 0\n\n for( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\n\n vec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\n vec3 lVector = lPosition.xyz - mvPosition.xyz;\n\n float spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - worldPosition.xyz ) );\n\n if ( spotEffect > spotLightAngleCos[ i ] ) {\n\n spotEffect = max( pow( max( spotEffect, 0.0 ), spotLightExponent[ i ] ), 0.0 );\n\n float lDistance = 1.0;\n if ( spotLightDistance[ i ] > 0.0 )\n lDistance = 1.0 - min( ( length( lVector ) / spotLightDistance[ i ] ), 1.0 );\n\n lVector = normalize( lVector );\n\n float dotProduct = dot( transformedNormal, lVector );\n vec3 spotLightWeighting = vec3( max( dotProduct, 0.0 ) );\n\n #ifdef DOUBLE_SIDED\n\n vec3 spotLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\n\n #ifdef WRAP_AROUND\n\n vec3 spotLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\n\n #endif\n\n #endif\n\n #ifdef WRAP_AROUND\n\n vec3 spotLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\n spotLightWeighting = mix( spotLightWeighting, spotLightWeightingHalf, wrapRGB );\n\n #ifdef DOUBLE_SIDED\n\n spotLightWeightingBack = mix( spotLightWeightingBack, spotLightWeightingHalfBack, wrapRGB );\n\n #endif\n\n #endif\n\n vLightFront += spotLightColor[ i ] * spotLightWeighting * lDistance * spotEffect;\n\n #ifdef DOUBLE_SIDED\n\n vLightBack += spotLightColor[ i ] * spotLightWeightingBack * lDistance * spotEffect;\n\n #endif\n\n }\n\n }\n\n#endif\n\n#if MAX_HEMI_LIGHTS > 0\n\n for( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {\n\n vec4 lDirection = viewMatrix * vec4( hemisphereLightDirection[ i ], 0.0 );\n vec3 lVector = normalize( lDirection.xyz );\n\n float dotProduct = dot( transformedNormal, lVector );\n\n float hemiDiffuseWeight = 0.5 * dotProduct + 0.5;\n float hemiDiffuseWeightBack = -0.5 * dotProduct + 0.5;\n\n vLightFront += mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );\n\n #ifdef DOUBLE_SIDED\n\n vLightBack += mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeightBack );\n\n #endif\n\n }\n\n#endif\n\nvLightFront = vLightFront * diffuse + ambient * ambientLightColor + emissive;\n\n#ifdef DOUBLE_SIDED\n\n vLightBack = vLightBack * diffuse + ambient * ambientLightColor + emissive;\n\n#endif",a.ShaderChunk.map_particle_pars_fragment="#ifdef USE_MAP\n\n uniform sampler2D map;\n\n#endif",a.ShaderChunk.default_vertex="vec4 mvPosition;\n\n#ifdef USE_SKINNING\n\n mvPosition = modelViewMatrix * skinned;\n\n#endif\n\n#if !defined( USE_SKINNING ) && defined( USE_MORPHTARGETS )\n\n mvPosition = modelViewMatrix * vec4( morphed, 1.0 );\n\n#endif\n\n#if !defined( USE_SKINNING ) && ! defined( USE_MORPHTARGETS )\n\n mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\n#endif\n\ngl_Position = projectionMatrix * mvPosition;",a.ShaderChunk.map_pars_fragment="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP )\n\n varying vec2 vUv;\n\n#endif\n\n#ifdef USE_MAP\n\n uniform sampler2D map;\n\n#endif",a.ShaderChunk.skinnormal_vertex="#ifdef USE_SKINNING\n\n mat4 skinMatrix = mat4( 0.0 );\n skinMatrix += skinWeight.x * boneMatX;\n skinMatrix += skinWeight.y * boneMatY;\n skinMatrix += skinWeight.z * boneMatZ;\n skinMatrix += skinWeight.w * boneMatW;\n skinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\n #ifdef USE_MORPHNORMALS\n\n vec4 skinnedNormal = skinMatrix * vec4( morphedNormal, 0.0 );\n\n #else\n\n vec4 skinnedNormal = skinMatrix * vec4( normal, 0.0 );\n\n #endif\n\n#endif\n",a.ShaderChunk.logdepthbuf_pars_vertex="#ifdef USE_LOGDEPTHBUF\n\n #ifdef USE_LOGDEPTHBUF_EXT\n\n varying float vFragDepth;\n\n #endif\n\n uniform float logDepthBufFC;\n\n#endif",a.ShaderChunk.lightmap_pars_vertex="#ifdef USE_LIGHTMAP\n\n varying vec2 vUv2;\n\n#endif",a.ShaderChunk.lights_phong_fragment="vec3 normal = normalize( vNormal );\nvec3 viewPosition = normalize( vViewPosition );\n\n#ifdef DOUBLE_SIDED\n\n normal = normal * ( -1.0 + 2.0 * float( gl_FrontFacing ) );\n\n#endif\n\n#ifdef USE_NORMALMAP\n\n normal = perturbNormal2Arb( -vViewPosition, normal );\n\n#elif defined( USE_BUMPMAP )\n\n normal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n\n#endif\n\n#if MAX_POINT_LIGHTS > 0\n\n vec3 pointDiffuse = vec3( 0.0 );\n vec3 pointSpecular = vec3( 0.0 );\n\n for ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\n\n vec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\n vec3 lVector = lPosition.xyz + vViewPosition.xyz;\n\n float lDistance = 1.0;\n if ( pointLightDistance[ i ] > 0.0 )\n lDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\n\n lVector = normalize( lVector );\n\n // diffuse\n\n float dotProduct = dot( normal, lVector );\n\n #ifdef WRAP_AROUND\n\n float pointDiffuseWeightFull = max( dotProduct, 0.0 );\n float pointDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\n\n vec3 pointDiffuseWeight = mix( vec3( pointDiffuseWeightFull ), vec3( pointDiffuseWeightHalf ), wrapRGB );\n\n #else\n\n float pointDiffuseWeight = max( dotProduct, 0.0 );\n\n #endif\n\n pointDiffuse += diffuse * pointLightColor[ i ] * pointDiffuseWeight * lDistance;\n\n // specular\n\n vec3 pointHalfVector = normalize( lVector + viewPosition );\n float pointDotNormalHalf = max( dot( normal, pointHalfVector ), 0.0 );\n float pointSpecularWeight = specularStrength * max( pow( pointDotNormalHalf, shininess ), 0.0 );\n\n float specularNormalization = ( shininess + 2.0 ) / 8.0;\n\n vec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVector, pointHalfVector ), 0.0 ), 5.0 );\n pointSpecular += schlick * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * lDistance * specularNormalization;\n\n }\n\n#endif\n\n#if MAX_SPOT_LIGHTS > 0\n\n vec3 spotDiffuse = vec3( 0.0 );\n vec3 spotSpecular = vec3( 0.0 );\n\n for ( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\n\n vec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\n vec3 lVector = lPosition.xyz + vViewPosition.xyz;\n\n float lDistance = 1.0;\n if ( spotLightDistance[ i ] > 0.0 )\n lDistance = 1.0 - min( ( length( lVector ) / spotLightDistance[ i ] ), 1.0 );\n\n lVector = normalize( lVector );\n\n float spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - vWorldPosition ) );\n\n if ( spotEffect > spotLightAngleCos[ i ] ) {\n\n spotEffect = max( pow( max( spotEffect, 0.0 ), spotLightExponent[ i ] ), 0.0 );\n\n // diffuse\n\n float dotProduct = dot( normal, lVector );\n\n #ifdef WRAP_AROUND\n\n float spotDiffuseWeightFull = max( dotProduct, 0.0 );\n float spotDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\n\n vec3 spotDiffuseWeight = mix( vec3( spotDiffuseWeightFull ), vec3( spotDiffuseWeightHalf ), wrapRGB );\n\n #else\n\n float spotDiffuseWeight = max( dotProduct, 0.0 );\n\n #endif\n\n spotDiffuse += diffuse * spotLightColor[ i ] * spotDiffuseWeight * lDistance * spotEffect;\n\n // specular\n\n vec3 spotHalfVector = normalize( lVector + viewPosition );\n float spotDotNormalHalf = max( dot( normal, spotHalfVector ), 0.0 );\n float spotSpecularWeight = specularStrength * max( pow( spotDotNormalHalf, shininess ), 0.0 );\n\n float specularNormalization = ( shininess + 2.0 ) / 8.0;\n\n vec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVector, spotHalfVector ), 0.0 ), 5.0 );\n spotSpecular += schlick * spotLightColor[ i ] * spotSpecularWeight * spotDiffuseWeight * lDistance * specularNormalization * spotEffect;\n\n }\n\n }\n\n#endif\n\n#if MAX_DIR_LIGHTS > 0\n\n vec3 dirDiffuse = vec3( 0.0 );\n vec3 dirSpecular = vec3( 0.0 );\n\n for( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\n\n vec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\n vec3 dirVector = normalize( lDirection.xyz );\n\n // diffuse\n\n float dotProduct = dot( normal, dirVector );\n\n #ifdef WRAP_AROUND\n\n float dirDiffuseWeightFull = max( dotProduct, 0.0 );\n float dirDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\n\n vec3 dirDiffuseWeight = mix( vec3( dirDiffuseWeightFull ), vec3( dirDiffuseWeightHalf ), wrapRGB );\n\n #else\n\n float dirDiffuseWeight = max( dotProduct, 0.0 );\n\n #endif\n\n dirDiffuse += diffuse * directionalLightColor[ i ] * dirDiffuseWeight;\n\n // specular\n\n vec3 dirHalfVector = normalize( dirVector + viewPosition );\n float dirDotNormalHalf = max( dot( normal, dirHalfVector ), 0.0 );\n float dirSpecularWeight = specularStrength * max( pow( dirDotNormalHalf, shininess ), 0.0 );\n\n /*\n // fresnel term from skin shader\n const float F0 = 0.128;\n\n float base = 1.0 - dot( viewPosition, dirHalfVector );\n float exponential = pow( base, 5.0 );\n\n float fresnel = exponential + F0 * ( 1.0 - exponential );\n */\n\n /*\n // fresnel term from fresnel shader\n const float mFresnelBias = 0.08;\n const float mFresnelScale = 0.3;\n const float mFresnelPower = 5.0;\n\n float fresnel = mFresnelBias + mFresnelScale * pow( 1.0 + dot( normalize( -viewPosition ), normal ), mFresnelPower );\n */\n\n float specularNormalization = ( shininess + 2.0 ) / 8.0;\n\n // dirSpecular += specular * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight * specularNormalization * fresnel;\n\n vec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( dirVector, dirHalfVector ), 0.0 ), 5.0 );\n dirSpecular += schlick * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight * specularNormalization;\n\n\n }\n\n#endif\n\n#if MAX_HEMI_LIGHTS > 0\n\n vec3 hemiDiffuse = vec3( 0.0 );\n vec3 hemiSpecular = vec3( 0.0 );\n\n for( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {\n\n vec4 lDirection = viewMatrix * vec4( hemisphereLightDirection[ i ], 0.0 );\n vec3 lVector = normalize( lDirection.xyz );\n\n // diffuse\n\n float dotProduct = dot( normal, lVector );\n float hemiDiffuseWeight = 0.5 * dotProduct + 0.5;\n\n vec3 hemiColor = mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );\n\n hemiDiffuse += diffuse * hemiColor;\n\n // specular (sky light)\n\n vec3 hemiHalfVectorSky = normalize( lVector + viewPosition );\n float hemiDotNormalHalfSky = 0.5 * dot( normal, hemiHalfVectorSky ) + 0.5;\n float hemiSpecularWeightSky = specularStrength * max( pow( max( hemiDotNormalHalfSky, 0.0 ), shininess ), 0.0 );\n\n // specular (ground light)\n\n vec3 lVectorGround = -lVector;\n\n vec3 hemiHalfVectorGround = normalize( lVectorGround + viewPosition );\n float hemiDotNormalHalfGround = 0.5 * dot( normal, hemiHalfVectorGround ) + 0.5;\n float hemiSpecularWeightGround = specularStrength * max( pow( max( hemiDotNormalHalfGround, 0.0 ), shininess ), 0.0 );\n\n float dotProductGround = dot( normal, lVectorGround );\n\n float specularNormalization = ( shininess + 2.0 ) / 8.0;\n\n vec3 schlickSky = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVector, hemiHalfVectorSky ), 0.0 ), 5.0 );\n vec3 schlickGround = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVectorGround, hemiHalfVectorGround ), 0.0 ), 5.0 );\n hemiSpecular += hemiColor * specularNormalization * ( schlickSky * hemiSpecularWeightSky * max( dotProduct, 0.0 ) + schlickGround * hemiSpecularWeightGround * max( dotProductGround, 0.0 ) );\n\n }\n\n#endif\n\nvec3 totalDiffuse = vec3( 0.0 );\nvec3 totalSpecular = vec3( 0.0 );\n\n#if MAX_DIR_LIGHTS > 0\n\n totalDiffuse += dirDiffuse;\n totalSpecular += dirSpecular;\n\n#endif\n\n#if MAX_HEMI_LIGHTS > 0\n\n totalDiffuse += hemiDiffuse;\n totalSpecular += hemiSpecular;\n\n#endif\n\n#if MAX_POINT_LIGHTS > 0\n\n totalDiffuse += pointDiffuse;\n totalSpecular += pointSpecular;\n\n#endif\n\n#if MAX_SPOT_LIGHTS > 0\n\n totalDiffuse += spotDiffuse;\n totalSpecular += spotSpecular;\n\n#endif\n\n#ifdef METAL\n\n gl_FragColor.xyz = gl_FragColor.xyz * ( emissive + totalDiffuse + ambientLightColor * ambient + totalSpecular );\n\n#else\n\n gl_FragColor.xyz = gl_FragColor.xyz * ( emissive + totalDiffuse + ambientLightColor * ambient ) + totalSpecular;\n\n#endif",a.ShaderChunk.fog_pars_fragment="#ifdef USE_FOG\n\n uniform vec3 fogColor;\n\n #ifdef FOG_EXP2\n\n uniform float fogDensity;\n\n #else\n\n uniform float fogNear;\n uniform float fogFar;\n #endif\n\n#endif",a.ShaderChunk.morphnormal_vertex="#ifdef USE_MORPHNORMALS\n\n vec3 morphedNormal = vec3( 0.0 );\n\n morphedNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\n morphedNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\n morphedNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\n morphedNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\n\n morphedNormal += normal;\n\n#endif",a.ShaderChunk.envmap_pars_fragment="#ifdef USE_ENVMAP\n\n uniform float reflectivity;\n uniform samplerCube envMap;\n uniform float flipEnvMap;\n uniform int combine;\n\n #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\n uniform bool useRefract;\n uniform float refractionRatio;\n\n #else\n\n varying vec3 vReflect;\n\n #endif\n\n#endif",a.ShaderChunk.logdepthbuf_fragment="#if defined(USE_LOGDEPTHBUF) && defined(USE_LOGDEPTHBUF_EXT)\n\n gl_FragDepthEXT = log2(vFragDepth) * logDepthBufFC * 0.5;\n\n#endif",a.ShaderChunk.normalmap_pars_fragment="#ifdef USE_NORMALMAP\n\n uniform sampler2D normalMap;\n uniform vec2 normalScale;\n\n // Per-Pixel Tangent Space Normal Mapping\n // http://hacksoflife.blogspot.ch/2009/11/per-pixel-tangent-space-normal-mapping.html\n\n vec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\n\n vec3 q0 = dFdx( eye_pos.xyz );\n vec3 q1 = dFdy( eye_pos.xyz );\n vec2 st0 = dFdx( vUv.st );\n vec2 st1 = dFdy( vUv.st );\n\n vec3 S = normalize( q0 * st1.t - q1 * st0.t );\n vec3 T = normalize( -q0 * st1.s + q1 * st0.s );\n vec3 N = normalize( surf_norm );\n\n vec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n mapN.xy = normalScale * mapN.xy;\n mat3 tsn = mat3( S, T, N );\n return normalize( tsn * mapN );\n\n }\n\n#endif\n",a.ShaderChunk.lights_phong_pars_vertex="#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP ) || defined( USE_ENVMAP )\n\n varying vec3 vWorldPosition;\n\n#endif\n",a.ShaderChunk.lightmap_pars_fragment="#ifdef USE_LIGHTMAP\n\n varying vec2 vUv2;\n uniform sampler2D lightMap;\n\n#endif",a.ShaderChunk.shadowmap_vertex="#ifdef USE_SHADOWMAP\n\n for( int i = 0; i < MAX_SHADOWS; i ++ ) {\n\n vShadowCoord[ i ] = shadowMatrix[ i ] * worldPosition;\n\n }\n\n#endif",a.ShaderChunk.lights_phong_vertex="#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP ) || defined( USE_ENVMAP )\n\n vWorldPosition = worldPosition.xyz;\n\n#endif",a.ShaderChunk.map_fragment="#ifdef USE_MAP\n\n vec4 texelColor = texture2D( map, vUv );\n\n #ifdef GAMMA_INPUT\n\n texelColor.xyz *= texelColor.xyz;\n\n #endif\n\n gl_FragColor = gl_FragColor * texelColor;\n\n#endif",a.ShaderChunk.lightmap_vertex="#ifdef USE_LIGHTMAP\n\n vUv2 = uv2;\n\n#endif",a.ShaderChunk.map_particle_fragment="#ifdef USE_MAP\n\n gl_FragColor = gl_FragColor * texture2D( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) );\n\n#endif",a.ShaderChunk.color_pars_fragment="#ifdef USE_COLOR\n\n varying vec3 vColor;\n\n#endif\n",a.ShaderChunk.color_vertex="#ifdef USE_COLOR\n\n #ifdef GAMMA_INPUT\n\n vColor = color * color;\n\n #else\n\n vColor = color;\n\n #endif\n\n#endif",a.ShaderChunk.skinning_vertex="#ifdef USE_SKINNING\n\n #ifdef USE_MORPHTARGETS\n\n vec4 skinVertex = bindMatrix * vec4( morphed, 1.0 );\n\n #else\n\n vec4 skinVertex = bindMatrix * vec4( position, 1.0 );\n\n #endif\n\n vec4 skinned = vec4( 0.0 );\n skinned += boneMatX * skinVertex * skinWeight.x;\n skinned += boneMatY * skinVertex * skinWeight.y;\n skinned += boneMatZ * skinVertex * skinWeight.z;\n skinned += boneMatW * skinVertex * skinWeight.w;\n skinned = bindMatrixInverse * skinned;\n\n#endif\n",a.ShaderChunk.envmap_pars_vertex="#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP ) && ! defined( PHONG )\n\n varying vec3 vReflect;\n\n uniform float refractionRatio;\n uniform bool useRefract;\n\n#endif\n",a.ShaderChunk.linear_to_gamma_fragment="#ifdef GAMMA_OUTPUT\n\n gl_FragColor.xyz = sqrt( gl_FragColor.xyz );\n\n#endif",a.ShaderChunk.color_pars_vertex="#ifdef USE_COLOR\n\n varying vec3 vColor;\n\n#endif",a.ShaderChunk.lights_lambert_pars_vertex="uniform vec3 ambient;\nuniform vec3 diffuse;\nuniform vec3 emissive;\n\nuniform vec3 ambientLightColor;\n\n#if MAX_DIR_LIGHTS > 0\n\n uniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\n uniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n\n#endif\n\n#if MAX_HEMI_LIGHTS > 0\n\n uniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];\n uniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];\n uniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];\n\n#endif\n\n#if MAX_POINT_LIGHTS > 0\n\n uniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\n uniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\n uniform float pointLightDistance[ MAX_POINT_LIGHTS ];\n\n#endif\n\n#if MAX_SPOT_LIGHTS > 0\n\n uniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];\n uniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\n uniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];\n uniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\n uniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];\n uniform float spotLightExponent[ MAX_SPOT_LIGHTS ];\n\n#endif\n\n#ifdef WRAP_AROUND\n\n uniform vec3 wrapRGB;\n\n#endif\n",a.ShaderChunk.map_pars_vertex="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP )\n\n varying vec2 vUv;\n uniform vec4 offsetRepeat;\n\n#endif\n",a.ShaderChunk.envmap_fragment="#ifdef USE_ENVMAP\n\n vec3 reflectVec;\n\n #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\n vec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\n\n // http://en.wikibooks.org/wiki/GLSL_Programming/Applying_Matrix_Transformations\n // Transforming Normal Vectors with the Inverse Transformation\n\n vec3 worldNormal = normalize( vec3( vec4( normal, 0.0 ) * viewMatrix ) );\n\n if ( useRefract ) {\n\n reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\n\n } else { \n\n reflectVec = reflect( cameraToVertex, worldNormal );\n\n }\n\n #else\n\n reflectVec = vReflect;\n\n #endif\n\n #ifdef DOUBLE_SIDED\n\n float flipNormal = ( -1.0 + 2.0 * float( gl_FrontFacing ) );\n vec4 cubeColor = textureCube( envMap, flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\n #else\n\n vec4 cubeColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\n #endif\n\n #ifdef GAMMA_INPUT\n\n cubeColor.xyz *= cubeColor.xyz;\n\n #endif\n\n if ( combine == 1 ) {\n\n gl_FragColor.xyz = mix( gl_FragColor.xyz, cubeColor.xyz, specularStrength * reflectivity );\n\n } else if ( combine == 2 ) {\n\n gl_FragColor.xyz += cubeColor.xyz * specularStrength * reflectivity;\n\n } else {\n\n gl_FragColor.xyz = mix( gl_FragColor.xyz, gl_FragColor.xyz * cubeColor.xyz, specularStrength * reflectivity );\n\n }\n\n#endif",a.ShaderChunk.specularmap_pars_fragment="#ifdef USE_SPECULARMAP\n\n uniform sampler2D specularMap;\n\n#endif",a.ShaderChunk.logdepthbuf_vertex="#ifdef USE_LOGDEPTHBUF\n\n gl_Position.z = log2(max(1e-6, gl_Position.w + 1.0)) * logDepthBufFC;\n\n #ifdef USE_LOGDEPTHBUF_EXT\n\n vFragDepth = 1.0 + gl_Position.w;\n\n#else\n\n gl_Position.z = (gl_Position.z - 1.0) * gl_Position.w;\n\n #endif\n\n#endif",a.ShaderChunk.morphtarget_pars_vertex="#ifdef USE_MORPHTARGETS\n\n #ifndef USE_MORPHNORMALS\n\n uniform float morphTargetInfluences[ 8 ];\n\n #else\n\n uniform float morphTargetInfluences[ 4 ];\n\n #endif\n\n#endif",a.ShaderChunk.specularmap_fragment="float specularStrength;\n\n#ifdef USE_SPECULARMAP\n\n vec4 texelSpecular = texture2D( specularMap, vUv );\n specularStrength = texelSpecular.r;\n\n#else\n\n specularStrength = 1.0;\n\n#endif",a.ShaderChunk.fog_fragment="#ifdef USE_FOG\n\n #ifdef USE_LOGDEPTHBUF_EXT\n\n float depth = gl_FragDepthEXT / gl_FragCoord.w;\n\n #else\n\n float depth = gl_FragCoord.z / gl_FragCoord.w;\n\n #endif\n\n #ifdef FOG_EXP2\n\n const float LOG2 = 1.442695;\n float fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\n fogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n\n #else\n\n float fogFactor = smoothstep( fogNear, fogFar, depth );\n\n #endif\n \n gl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n\n#endif",a.ShaderChunk.bumpmap_pars_fragment="#ifdef USE_BUMPMAP\n\n uniform sampler2D bumpMap;\n uniform float bumpScale;\n\n // Derivative maps - bump mapping unparametrized surfaces by Morten Mikkelsen\n // http://mmikkelsen3d.blogspot.sk/2011/07/derivative-maps.html\n\n // Evaluate the derivative of the height w.r.t. screen-space using forward differencing (listing 2)\n\n vec2 dHdxy_fwd() {\n\n vec2 dSTdx = dFdx( vUv );\n vec2 dSTdy = dFdy( vUv );\n\n float Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n float dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n float dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\n return vec2( dBx, dBy );\n\n }\n\n vec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\n vec3 vSigmaX = dFdx( surf_pos );\n vec3 vSigmaY = dFdy( surf_pos );\n vec3 vN = surf_norm; // normalized\n\n vec3 R1 = cross( vSigmaY, vN );\n vec3 R2 = cross( vN, vSigmaX );\n\n float fDet = dot( vSigmaX, R1 );\n\n vec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n return normalize( abs( fDet ) * surf_norm - vGrad );\n\n }\n\n#endif",a.ShaderChunk.defaultnormal_vertex="vec3 objectNormal;\n\n#ifdef USE_SKINNING\n\n objectNormal = skinnedNormal.xyz;\n\n#endif\n\n#if !defined( USE_SKINNING ) && defined( USE_MORPHNORMALS )\n\n objectNormal = morphedNormal;\n\n#endif\n\n#if !defined( USE_SKINNING ) && ! defined( USE_MORPHNORMALS )\n\n objectNormal = normal;\n\n#endif\n\n#ifdef FLIP_SIDED\n\n objectNormal = -objectNormal;\n\n#endif\n\nvec3 transformedNormal = normalMatrix * objectNormal;",a.ShaderChunk.lights_phong_pars_fragment="uniform vec3 ambientLightColor;\n\n#if MAX_DIR_LIGHTS > 0\n\n uniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\n uniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n\n#endif\n\n#if MAX_HEMI_LIGHTS > 0\n\n uniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];\n uniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];\n uniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];\n\n#endif\n\n#if MAX_POINT_LIGHTS > 0\n\n uniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\n\n uniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\n uniform float pointLightDistance[ MAX_POINT_LIGHTS ];\n\n#endif\n\n#if MAX_SPOT_LIGHTS > 0\n\n uniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];\n uniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\n uniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];\n uniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];\n uniform float spotLightExponent[ MAX_SPOT_LIGHTS ];\n\n uniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\n\n#endif\n\n#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP ) || defined( USE_ENVMAP )\n\n varying vec3 vWorldPosition;\n\n#endif\n\n#ifdef WRAP_AROUND\n\n uniform vec3 wrapRGB;\n\n#endif\n\nvarying vec3 vViewPosition;\nvarying vec3 vNormal;",a.ShaderChunk.skinbase_vertex="#ifdef USE_SKINNING\n\n mat4 boneMatX = getBoneMatrix( skinIndex.x );\n mat4 boneMatY = getBoneMatrix( skinIndex.y );\n mat4 boneMatZ = getBoneMatrix( skinIndex.z );\n mat4 boneMatW = getBoneMatrix( skinIndex.w );\n\n#endif",a.ShaderChunk.map_vertex="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP )\n\n vUv = uv * offsetRepeat.zw + offsetRepeat.xy;\n\n#endif",a.ShaderChunk.lightmap_fragment="#ifdef USE_LIGHTMAP\n\n gl_FragColor = gl_FragColor * texture2D( lightMap, vUv2 );\n\n#endif",a.ShaderChunk.shadowmap_pars_vertex="#ifdef USE_SHADOWMAP\n\n varying vec4 vShadowCoord[ MAX_SHADOWS ];\n uniform mat4 shadowMatrix[ MAX_SHADOWS ];\n\n#endif",a.ShaderChunk.color_fragment="#ifdef USE_COLOR\n\n gl_FragColor = gl_FragColor * vec4( vColor, 1.0 );\n\n#endif",a.ShaderChunk.morphtarget_vertex="#ifdef USE_MORPHTARGETS\n\n vec3 morphed = vec3( 0.0 );\n morphed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\n morphed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\n morphed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\n morphed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\n\n #ifndef USE_MORPHNORMALS\n\n morphed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\n morphed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\n morphed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\n morphed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\n\n #endif\n\n morphed += position;\n\n#endif",a.ShaderChunk.envmap_vertex="#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP ) && ! defined( PHONG )\n\n vec3 worldNormal = mat3( modelMatrix[ 0 ].xyz, modelMatrix[ 1 ].xyz, modelMatrix[ 2 ].xyz ) * objectNormal;\n worldNormal = normalize( worldNormal );\n\n vec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\n if ( useRefract ) {\n\n vReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\n } else {\n\n vReflect = reflect( cameraToVertex, worldNormal );\n\n }\n\n#endif",a.ShaderChunk.shadowmap_fragment="#ifdef USE_SHADOWMAP\n\n #ifdef SHADOWMAP_DEBUG\n\n vec3 frustumColors[3];\n frustumColors[0] = vec3( 1.0, 0.5, 0.0 );\n frustumColors[1] = vec3( 0.0, 1.0, 0.8 );\n frustumColors[2] = vec3( 0.0, 0.5, 1.0 );\n\n #endif\n\n #ifdef SHADOWMAP_CASCADE\n\n int inFrustumCount = 0;\n\n #endif\n\n float fDepth;\n vec3 shadowColor = vec3( 1.0 );\n\n for( int i = 0; i < MAX_SHADOWS; i ++ ) {\n\n vec3 shadowCoord = vShadowCoord[ i ].xyz / vShadowCoord[ i ].w;\n\n // if ( something && something ) breaks ATI OpenGL shader compiler\n // if ( all( something, something ) ) using this instead\n\n bvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n bool inFrustum = all( inFrustumVec );\n\n // don't shadow pixels outside of light frustum\n // use just first frustum (for cascades)\n // don't shadow pixels behind far plane of light frustum\n\n #ifdef SHADOWMAP_CASCADE\n\n inFrustumCount += int( inFrustum );\n bvec3 frustumTestVec = bvec3( inFrustum, inFrustumCount == 1, shadowCoord.z <= 1.0 );\n\n #else\n\n bvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\n #endif\n\n bool frustumTest = all( frustumTestVec );\n\n if ( frustumTest ) {\n\n shadowCoord.z += shadowBias[ i ];\n\n #if defined( SHADOWMAP_TYPE_PCF )\n\n // Percentage-close filtering\n // (9 pixel kernel)\n // http://fabiensanglard.net/shadowmappingPCF/\n\n float shadow = 0.0;\n\n /*\n // nested loops breaks shader compiler / validator on some ATI cards when using OpenGL\n // must enroll loop manually\n\n for ( float y = -1.25; y <= 1.25; y += 1.25 )\n for ( float x = -1.25; x <= 1.25; x += 1.25 ) {\n\n vec4 rgbaDepth = texture2D( shadowMap[ i ], vec2( x * xPixelOffset, y * yPixelOffset ) + shadowCoord.xy );\n\n // doesn't seem to produce any noticeable visual difference compared to simple texture2D lookup\n //vec4 rgbaDepth = texture2DProj( shadowMap[ i ], vec4( vShadowCoord[ i ].w * ( vec2( x * xPixelOffset, y * yPixelOffset ) + shadowCoord.xy ), 0.05, vShadowCoord[ i ].w ) );\n\n float fDepth = unpackDepth( rgbaDepth );\n\n if ( fDepth < shadowCoord.z )\n shadow += 1.0;\n\n }\n\n shadow /= 9.0;\n\n */\n\n const float shadowDelta = 1.0 / 9.0;\n\n float xPixelOffset = 1.0 / shadowMapSize[ i ].x;\n float yPixelOffset = 1.0 / shadowMapSize[ i ].y;\n\n float dx0 = -1.25 * xPixelOffset;\n float dy0 = -1.25 * yPixelOffset;\n float dx1 = 1.25 * xPixelOffset;\n float dy1 = 1.25 * yPixelOffset;\n\n fDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy0 ) ) );\n if ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\n fDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy0 ) ) );\n if ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\n fDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy0 ) ) );\n if ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\n fDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, 0.0 ) ) );\n if ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\n fDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy ) );\n if ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\n fDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, 0.0 ) ) );\n if ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\n fDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy1 ) ) );\n if ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\n fDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy1 ) ) );\n if ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\n fDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy1 ) ) );\n if ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\n shadowColor = shadowColor * vec3( ( 1.0 - shadowDarkness[ i ] * shadow ) );\n\n #elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\n // Percentage-close filtering\n // (9 pixel kernel)\n // http://fabiensanglard.net/shadowmappingPCF/\n\n float shadow = 0.0;\n\n float xPixelOffset = 1.0 / shadowMapSize[ i ].x;\n float yPixelOffset = 1.0 / shadowMapSize[ i ].y;\n\n float dx0 = -1.0 * xPixelOffset;\n float dy0 = -1.0 * yPixelOffset;\n float dx1 = 1.0 * xPixelOffset;\n float dy1 = 1.0 * yPixelOffset;\n\n mat3 shadowKernel;\n mat3 depthKernel;\n\n depthKernel[0][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy0 ) ) );\n depthKernel[0][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, 0.0 ) ) );\n depthKernel[0][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy1 ) ) );\n depthKernel[1][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy0 ) ) );\n depthKernel[1][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy ) );\n depthKernel[1][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy1 ) ) );\n depthKernel[2][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy0 ) ) );\n depthKernel[2][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, 0.0 ) ) );\n depthKernel[2][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy1 ) ) );\n\n vec3 shadowZ = vec3( shadowCoord.z );\n shadowKernel[0] = vec3(lessThan(depthKernel[0], shadowZ ));\n shadowKernel[0] *= vec3(0.25);\n\n shadowKernel[1] = vec3(lessThan(depthKernel[1], shadowZ ));\n shadowKernel[1] *= vec3(0.25);\n\n shadowKernel[2] = vec3(lessThan(depthKernel[2], shadowZ ));\n shadowKernel[2] *= vec3(0.25);\n\n vec2 fractionalCoord = 1.0 - fract( shadowCoord.xy * shadowMapSize[i].xy );\n\n shadowKernel[0] = mix( shadowKernel[1], shadowKernel[0], fractionalCoord.x );\n shadowKernel[1] = mix( shadowKernel[2], shadowKernel[1], fractionalCoord.x );\n\n vec4 shadowValues;\n shadowValues.x = mix( shadowKernel[0][1], shadowKernel[0][0], fractionalCoord.y );\n shadowValues.y = mix( shadowKernel[0][2], shadowKernel[0][1], fractionalCoord.y );\n shadowValues.z = mix( shadowKernel[1][1], shadowKernel[1][0], fractionalCoord.y );\n shadowValues.w = mix( shadowKernel[1][2], shadowKernel[1][1], fractionalCoord.y );\n\n shadow = dot( shadowValues, vec4( 1.0 ) );\n\n shadowColor = shadowColor * vec3( ( 1.0 - shadowDarkness[ i ] * shadow ) );\n\n #else\n\n vec4 rgbaDepth = texture2D( shadowMap[ i ], shadowCoord.xy );\n float fDepth = unpackDepth( rgbaDepth );\n\n if ( fDepth < shadowCoord.z )\n\n // spot with multiple shadows is darker\n\n shadowColor = shadowColor * vec3( 1.0 - shadowDarkness[ i ] );\n\n // spot with multiple shadows has the same color as single shadow spot\n\n // shadowColor = min( shadowColor, vec3( shadowDarkness[ i ] ) );\n\n #endif\n\n }\n\n\n #ifdef SHADOWMAP_DEBUG\n\n #ifdef SHADOWMAP_CASCADE\n\n if ( inFrustum && inFrustumCount == 1 ) gl_FragColor.xyz *= frustumColors[ i ];\n\n #else\n\n if ( inFrustum ) gl_FragColor.xyz *= frustumColors[ i ];\n\n #endif\n\n #endif\n\n }\n\n #ifdef GAMMA_OUTPUT\n\n shadowColor *= shadowColor;\n\n #endif\n\n gl_FragColor.xyz = gl_FragColor.xyz * shadowColor;\n\n#endif\n", +a.ShaderChunk.worldpos_vertex="#if defined( USE_ENVMAP ) || defined( PHONG ) || defined( LAMBERT ) || defined ( USE_SHADOWMAP )\n\n #ifdef USE_SKINNING\n\n vec4 worldPosition = modelMatrix * skinned;\n\n #endif\n\n #if defined( USE_MORPHTARGETS ) && ! defined( USE_SKINNING )\n\n vec4 worldPosition = modelMatrix * vec4( morphed, 1.0 );\n\n #endif\n\n #if ! defined( USE_MORPHTARGETS ) && ! defined( USE_SKINNING )\n\n vec4 worldPosition = modelMatrix * vec4( position, 1.0 );\n\n #endif\n\n#endif",a.ShaderChunk.shadowmap_pars_fragment="#ifdef USE_SHADOWMAP\n\n uniform sampler2D shadowMap[ MAX_SHADOWS ];\n uniform vec2 shadowMapSize[ MAX_SHADOWS ];\n\n uniform float shadowDarkness[ MAX_SHADOWS ];\n uniform float shadowBias[ MAX_SHADOWS ];\n\n varying vec4 vShadowCoord[ MAX_SHADOWS ];\n\n float unpackDepth( const in vec4 rgba_depth ) {\n\n const vec4 bit_shift = vec4( 1.0 / ( 256.0 * 256.0 * 256.0 ), 1.0 / ( 256.0 * 256.0 ), 1.0 / 256.0, 1.0 );\n float depth = dot( rgba_depth, bit_shift );\n return depth;\n\n }\n\n#endif",a.ShaderChunk.skinning_pars_vertex="#ifdef USE_SKINNING\n\n uniform mat4 bindMatrix;\n uniform mat4 bindMatrixInverse;\n\n #ifdef BONE_TEXTURE\n\n uniform sampler2D boneTexture;\n uniform int boneTextureWidth;\n uniform int boneTextureHeight;\n\n mat4 getBoneMatrix( const in float i ) {\n\n float j = i * 4.0;\n float x = mod( j, float( boneTextureWidth ) );\n float y = floor( j / float( boneTextureWidth ) );\n\n float dx = 1.0 / float( boneTextureWidth );\n float dy = 1.0 / float( boneTextureHeight );\n\n y = dy * ( y + 0.5 );\n\n vec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n vec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n vec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n vec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\n mat4 bone = mat4( v1, v2, v3, v4 );\n\n return bone;\n\n }\n\n #else\n\n uniform mat4 boneGlobalMatrices[ MAX_BONES ];\n\n mat4 getBoneMatrix( const in float i ) {\n\n mat4 bone = boneGlobalMatrices[ int(i) ];\n return bone;\n\n }\n\n #endif\n\n#endif\n",a.ShaderChunk.logdepthbuf_pars_fragment="#ifdef USE_LOGDEPTHBUF\n\n uniform float logDepthBufFC;\n\n #ifdef USE_LOGDEPTHBUF_EXT\n\n #extension GL_EXT_frag_depth : enable\n varying float vFragDepth;\n\n #endif\n\n#endif",a.ShaderChunk.alphamap_fragment="#ifdef USE_ALPHAMAP\n\n gl_FragColor.a *= texture2D( alphaMap, vUv ).g;\n\n#endif\n",a.ShaderChunk.alphamap_pars_fragment="#ifdef USE_ALPHAMAP\n\n uniform sampler2D alphaMap;\n\n#endif\n",a.UniformsUtils={merge:function(a){for(var b={},c=0;c dashSize ) {"," discard;"," }"," gl_FragColor = vec4( diffuse, opacity );",a.ShaderChunk.logdepthbuf_fragment,a.ShaderChunk.color_fragment,a.ShaderChunk.fog_fragment,"}"].join("\n")},depth:{uniforms:{mNear:{type:"f",value:1},mFar:{type:"f",value:2e3},opacity:{type:"f",value:1}},vertexShader:[a.ShaderChunk.morphtarget_pars_vertex,a.ShaderChunk.logdepthbuf_pars_vertex,"void main() {",a.ShaderChunk.morphtarget_vertex,a.ShaderChunk.default_vertex,a.ShaderChunk.logdepthbuf_vertex,"}"].join("\n"),fragmentShader:["uniform float mNear;","uniform float mFar;","uniform float opacity;",a.ShaderChunk.logdepthbuf_pars_fragment,"void main() {",a.ShaderChunk.logdepthbuf_fragment," #ifdef USE_LOGDEPTHBUF_EXT"," float depth = gl_FragDepthEXT / gl_FragCoord.w;"," #else"," float depth = gl_FragCoord.z / gl_FragCoord.w;"," #endif"," float color = 1.0 - smoothstep( mNear, mFar, depth );"," gl_FragColor = vec4( vec3( color ), opacity );","}"].join("\n")},normal:{uniforms:{opacity:{type:"f",value:1}},vertexShader:["varying vec3 vNormal;",a.ShaderChunk.morphtarget_pars_vertex,a.ShaderChunk.logdepthbuf_pars_vertex,"void main() {"," vNormal = normalize( normalMatrix * normal );",a.ShaderChunk.morphtarget_vertex,a.ShaderChunk.default_vertex,a.ShaderChunk.logdepthbuf_vertex,"}"].join("\n"),fragmentShader:["uniform float opacity;","varying vec3 vNormal;",a.ShaderChunk.logdepthbuf_pars_fragment,"void main() {"," gl_FragColor = vec4( 0.5 * normalize( vNormal ) + 0.5, opacity );",a.ShaderChunk.logdepthbuf_fragment,"}"].join("\n")},normalmap:{uniforms:a.UniformsUtils.merge([a.UniformsLib.fog,a.UniformsLib.lights,a.UniformsLib.shadowmap,{enableAO:{type:"i",value:0},enableDiffuse:{type:"i",value:0},enableSpecular:{type:"i",value:0},enableReflection:{type:"i",value:0},enableDisplacement:{type:"i",value:0},tDisplacement:{type:"t",value:null},tDiffuse:{type:"t",value:null},tCube:{type:"t",value:null},tNormal:{type:"t",value:null},tSpecular:{type:"t",value:null},tAO:{type:"t",value:null},uNormalScale:{type:"v2",value:new a.Vector2(1,1)},uDisplacementBias:{type:"f",value:0},uDisplacementScale:{type:"f",value:1},diffuse:{type:"c",value:new a.Color(16777215)},specular:{type:"c",value:new a.Color(1118481)},ambient:{type:"c",value:new a.Color(16777215)},shininess:{type:"f",value:30},opacity:{type:"f",value:1},useRefract:{type:"i",value:0},refractionRatio:{type:"f",value:.98},reflectivity:{type:"f",value:.5},uOffset:{type:"v2",value:new a.Vector2(0,0)},uRepeat:{type:"v2",value:new a.Vector2(1,1)},wrapRGB:{type:"v3",value:new a.Vector3(1,1,1)}}]),fragmentShader:["uniform vec3 ambient;","uniform vec3 diffuse;","uniform vec3 specular;","uniform float shininess;","uniform float opacity;","uniform bool enableDiffuse;","uniform bool enableSpecular;","uniform bool enableAO;","uniform bool enableReflection;","uniform sampler2D tDiffuse;","uniform sampler2D tNormal;","uniform sampler2D tSpecular;","uniform sampler2D tAO;","uniform samplerCube tCube;","uniform vec2 uNormalScale;","uniform bool useRefract;","uniform float refractionRatio;","uniform float reflectivity;","varying vec3 vTangent;","varying vec3 vBinormal;","varying vec3 vNormal;","varying vec2 vUv;","uniform vec3 ambientLightColor;","#if MAX_DIR_LIGHTS > 0"," uniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];"," uniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];","#endif","#if MAX_HEMI_LIGHTS > 0"," uniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];"," uniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];"," uniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];","#endif","#if MAX_POINT_LIGHTS > 0"," uniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];"," uniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];"," uniform float pointLightDistance[ MAX_POINT_LIGHTS ];","#endif","#if MAX_SPOT_LIGHTS > 0"," uniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];"," uniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];"," uniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];"," uniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];"," uniform float spotLightExponent[ MAX_SPOT_LIGHTS ];"," uniform float spotLightDistance[ MAX_SPOT_LIGHTS ];","#endif","#ifdef WRAP_AROUND"," uniform vec3 wrapRGB;","#endif","varying vec3 vWorldPosition;","varying vec3 vViewPosition;",a.ShaderChunk.shadowmap_pars_fragment,a.ShaderChunk.fog_pars_fragment,a.ShaderChunk.logdepthbuf_pars_fragment,"void main() {",a.ShaderChunk.logdepthbuf_fragment," gl_FragColor = vec4( vec3( 1.0 ), opacity );"," vec3 specularTex = vec3( 1.0 );"," vec3 normalTex = texture2D( tNormal, vUv ).xyz * 2.0 - 1.0;"," normalTex.xy *= uNormalScale;"," normalTex = normalize( normalTex );"," if( enableDiffuse ) {"," #ifdef GAMMA_INPUT"," vec4 texelColor = texture2D( tDiffuse, vUv );"," texelColor.xyz *= texelColor.xyz;"," gl_FragColor = gl_FragColor * texelColor;"," #else"," gl_FragColor = gl_FragColor * texture2D( tDiffuse, vUv );"," #endif"," }"," if( enableAO ) {"," #ifdef GAMMA_INPUT"," vec4 aoColor = texture2D( tAO, vUv );"," aoColor.xyz *= aoColor.xyz;"," gl_FragColor.xyz = gl_FragColor.xyz * aoColor.xyz;"," #else"," gl_FragColor.xyz = gl_FragColor.xyz * texture2D( tAO, vUv ).xyz;"," #endif"," }",a.ShaderChunk.alphatest_fragment," if( enableSpecular )"," specularTex = texture2D( tSpecular, vUv ).xyz;"," mat3 tsb = mat3( normalize( vTangent ), normalize( vBinormal ), normalize( vNormal ) );"," vec3 finalNormal = tsb * normalTex;"," #ifdef FLIP_SIDED"," finalNormal = -finalNormal;"," #endif"," vec3 normal = normalize( finalNormal );"," vec3 viewPosition = normalize( vViewPosition );"," #if MAX_POINT_LIGHTS > 0"," vec3 pointDiffuse = vec3( 0.0 );"," vec3 pointSpecular = vec3( 0.0 );"," for ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {"," vec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );"," vec3 pointVector = lPosition.xyz + vViewPosition.xyz;"," float pointDistance = 1.0;"," if ( pointLightDistance[ i ] > 0.0 )"," pointDistance = 1.0 - min( ( length( pointVector ) / pointLightDistance[ i ] ), 1.0 );"," pointVector = normalize( pointVector );"," #ifdef WRAP_AROUND"," float pointDiffuseWeightFull = max( dot( normal, pointVector ), 0.0 );"," float pointDiffuseWeightHalf = max( 0.5 * dot( normal, pointVector ) + 0.5, 0.0 );"," vec3 pointDiffuseWeight = mix( vec3( pointDiffuseWeightFull ), vec3( pointDiffuseWeightHalf ), wrapRGB );"," #else"," float pointDiffuseWeight = max( dot( normal, pointVector ), 0.0 );"," #endif"," pointDiffuse += pointDistance * pointLightColor[ i ] * diffuse * pointDiffuseWeight;"," vec3 pointHalfVector = normalize( pointVector + viewPosition );"," float pointDotNormalHalf = max( dot( normal, pointHalfVector ), 0.0 );"," float pointSpecularWeight = specularTex.r * max( pow( pointDotNormalHalf, shininess ), 0.0 );"," float specularNormalization = ( shininess + 2.0 ) / 8.0;"," vec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( pointVector, pointHalfVector ), 0.0 ), 5.0 );"," pointSpecular += schlick * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * pointDistance * specularNormalization;"," }"," #endif"," #if MAX_SPOT_LIGHTS > 0"," vec3 spotDiffuse = vec3( 0.0 );"," vec3 spotSpecular = vec3( 0.0 );"," for ( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {"," vec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );"," vec3 spotVector = lPosition.xyz + vViewPosition.xyz;"," float spotDistance = 1.0;"," if ( spotLightDistance[ i ] > 0.0 )"," spotDistance = 1.0 - min( ( length( spotVector ) / spotLightDistance[ i ] ), 1.0 );"," spotVector = normalize( spotVector );"," float spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - vWorldPosition ) );"," if ( spotEffect > spotLightAngleCos[ i ] ) {"," spotEffect = max( pow( max( spotEffect, 0.0 ), spotLightExponent[ i ] ), 0.0 );"," #ifdef WRAP_AROUND"," float spotDiffuseWeightFull = max( dot( normal, spotVector ), 0.0 );"," float spotDiffuseWeightHalf = max( 0.5 * dot( normal, spotVector ) + 0.5, 0.0 );"," vec3 spotDiffuseWeight = mix( vec3( spotDiffuseWeightFull ), vec3( spotDiffuseWeightHalf ), wrapRGB );"," #else"," float spotDiffuseWeight = max( dot( normal, spotVector ), 0.0 );"," #endif"," spotDiffuse += spotDistance * spotLightColor[ i ] * diffuse * spotDiffuseWeight * spotEffect;"," vec3 spotHalfVector = normalize( spotVector + viewPosition );"," float spotDotNormalHalf = max( dot( normal, spotHalfVector ), 0.0 );"," float spotSpecularWeight = specularTex.r * max( pow( spotDotNormalHalf, shininess ), 0.0 );"," float specularNormalization = ( shininess + 2.0 ) / 8.0;"," vec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( spotVector, spotHalfVector ), 0.0 ), 5.0 );"," spotSpecular += schlick * spotLightColor[ i ] * spotSpecularWeight * spotDiffuseWeight * spotDistance * specularNormalization * spotEffect;"," }"," }"," #endif"," #if MAX_DIR_LIGHTS > 0"," vec3 dirDiffuse = vec3( 0.0 );"," vec3 dirSpecular = vec3( 0.0 );"," for( int i = 0; i < MAX_DIR_LIGHTS; i++ ) {"," vec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );"," vec3 dirVector = normalize( lDirection.xyz );"," #ifdef WRAP_AROUND"," float directionalLightWeightingFull = max( dot( normal, dirVector ), 0.0 );"," float directionalLightWeightingHalf = max( 0.5 * dot( normal, dirVector ) + 0.5, 0.0 );"," vec3 dirDiffuseWeight = mix( vec3( directionalLightWeightingFull ), vec3( directionalLightWeightingHalf ), wrapRGB );"," #else"," float dirDiffuseWeight = max( dot( normal, dirVector ), 0.0 );"," #endif"," dirDiffuse += directionalLightColor[ i ] * diffuse * dirDiffuseWeight;"," vec3 dirHalfVector = normalize( dirVector + viewPosition );"," float dirDotNormalHalf = max( dot( normal, dirHalfVector ), 0.0 );"," float dirSpecularWeight = specularTex.r * max( pow( dirDotNormalHalf, shininess ), 0.0 );"," float specularNormalization = ( shininess + 2.0 ) / 8.0;"," vec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( dirVector, dirHalfVector ), 0.0 ), 5.0 );"," dirSpecular += schlick * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight * specularNormalization;"," }"," #endif"," #if MAX_HEMI_LIGHTS > 0"," vec3 hemiDiffuse = vec3( 0.0 );"," vec3 hemiSpecular = vec3( 0.0 );"," for( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {"," vec4 lDirection = viewMatrix * vec4( hemisphereLightDirection[ i ], 0.0 );"," vec3 lVector = normalize( lDirection.xyz );"," float dotProduct = dot( normal, lVector );"," float hemiDiffuseWeight = 0.5 * dotProduct + 0.5;"," vec3 hemiColor = mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );"," hemiDiffuse += diffuse * hemiColor;"," vec3 hemiHalfVectorSky = normalize( lVector + viewPosition );"," float hemiDotNormalHalfSky = 0.5 * dot( normal, hemiHalfVectorSky ) + 0.5;"," float hemiSpecularWeightSky = specularTex.r * max( pow( max( hemiDotNormalHalfSky, 0.0 ), shininess ), 0.0 );"," vec3 lVectorGround = -lVector;"," vec3 hemiHalfVectorGround = normalize( lVectorGround + viewPosition );"," float hemiDotNormalHalfGround = 0.5 * dot( normal, hemiHalfVectorGround ) + 0.5;"," float hemiSpecularWeightGround = specularTex.r * max( pow( max( hemiDotNormalHalfGround, 0.0 ), shininess ), 0.0 );"," float dotProductGround = dot( normal, lVectorGround );"," float specularNormalization = ( shininess + 2.0 ) / 8.0;"," vec3 schlickSky = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVector, hemiHalfVectorSky ), 0.0 ), 5.0 );"," vec3 schlickGround = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVectorGround, hemiHalfVectorGround ), 0.0 ), 5.0 );"," hemiSpecular += hemiColor * specularNormalization * ( schlickSky * hemiSpecularWeightSky * max( dotProduct, 0.0 ) + schlickGround * hemiSpecularWeightGround * max( dotProductGround, 0.0 ) );"," }"," #endif"," vec3 totalDiffuse = vec3( 0.0 );"," vec3 totalSpecular = vec3( 0.0 );"," #if MAX_DIR_LIGHTS > 0"," totalDiffuse += dirDiffuse;"," totalSpecular += dirSpecular;"," #endif"," #if MAX_HEMI_LIGHTS > 0"," totalDiffuse += hemiDiffuse;"," totalSpecular += hemiSpecular;"," #endif"," #if MAX_POINT_LIGHTS > 0"," totalDiffuse += pointDiffuse;"," totalSpecular += pointSpecular;"," #endif"," #if MAX_SPOT_LIGHTS > 0"," totalDiffuse += spotDiffuse;"," totalSpecular += spotSpecular;"," #endif"," #ifdef METAL"," gl_FragColor.xyz = gl_FragColor.xyz * ( totalDiffuse + ambientLightColor * ambient + totalSpecular );"," #else"," gl_FragColor.xyz = gl_FragColor.xyz * ( totalDiffuse + ambientLightColor * ambient ) + totalSpecular;"," #endif"," if ( enableReflection ) {"," vec3 vReflect;"," vec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );"," if ( useRefract ) {"," vReflect = refract( cameraToVertex, normal, refractionRatio );"," } else {"," vReflect = reflect( cameraToVertex, normal );"," }"," vec4 cubeColor = textureCube( tCube, vec3( -vReflect.x, vReflect.yz ) );"," #ifdef GAMMA_INPUT"," cubeColor.xyz *= cubeColor.xyz;"," #endif"," gl_FragColor.xyz = mix( gl_FragColor.xyz, cubeColor.xyz, specularTex.r * reflectivity );"," }",a.ShaderChunk.shadowmap_fragment,a.ShaderChunk.linear_to_gamma_fragment,a.ShaderChunk.fog_fragment,"}"].join("\n"),vertexShader:["attribute vec4 tangent;","uniform vec2 uOffset;","uniform vec2 uRepeat;","uniform bool enableDisplacement;","#ifdef VERTEX_TEXTURES"," uniform sampler2D tDisplacement;"," uniform float uDisplacementScale;"," uniform float uDisplacementBias;","#endif","varying vec3 vTangent;","varying vec3 vBinormal;","varying vec3 vNormal;","varying vec2 vUv;","varying vec3 vWorldPosition;","varying vec3 vViewPosition;",a.ShaderChunk.skinning_pars_vertex,a.ShaderChunk.shadowmap_pars_vertex,a.ShaderChunk.logdepthbuf_pars_vertex,"void main() {",a.ShaderChunk.skinbase_vertex,a.ShaderChunk.skinnormal_vertex," #ifdef USE_SKINNING"," vNormal = normalize( normalMatrix * skinnedNormal.xyz );"," vec4 skinnedTangent = skinMatrix * vec4( tangent.xyz, 0.0 );"," vTangent = normalize( normalMatrix * skinnedTangent.xyz );"," #else"," vNormal = normalize( normalMatrix * normal );"," vTangent = normalize( normalMatrix * tangent.xyz );"," #endif"," vBinormal = normalize( cross( vNormal, vTangent ) * tangent.w );"," vUv = uv * uRepeat + uOffset;"," vec3 displacedPosition;"," #ifdef VERTEX_TEXTURES"," if ( enableDisplacement ) {"," vec3 dv = texture2D( tDisplacement, uv ).xyz;"," float df = uDisplacementScale * dv.x + uDisplacementBias;"," displacedPosition = position + normalize( normal ) * df;"," } else {"," #ifdef USE_SKINNING"," vec4 skinVertex = bindMatrix * vec4( position, 1.0 );"," vec4 skinned = vec4( 0.0 );"," skinned += boneMatX * skinVertex * skinWeight.x;"," skinned += boneMatY * skinVertex * skinWeight.y;"," skinned += boneMatZ * skinVertex * skinWeight.z;"," skinned += boneMatW * skinVertex * skinWeight.w;"," skinned = bindMatrixInverse * skinned;"," displacedPosition = skinned.xyz;"," #else"," displacedPosition = position;"," #endif"," }"," #else"," #ifdef USE_SKINNING"," vec4 skinVertex = bindMatrix * vec4( position, 1.0 );"," vec4 skinned = vec4( 0.0 );"," skinned += boneMatX * skinVertex * skinWeight.x;"," skinned += boneMatY * skinVertex * skinWeight.y;"," skinned += boneMatZ * skinVertex * skinWeight.z;"," skinned += boneMatW * skinVertex * skinWeight.w;"," skinned = bindMatrixInverse * skinned;"," displacedPosition = skinned.xyz;"," #else"," displacedPosition = position;"," #endif"," #endif"," vec4 mvPosition = modelViewMatrix * vec4( displacedPosition, 1.0 );"," vec4 worldPosition = modelMatrix * vec4( displacedPosition, 1.0 );"," gl_Position = projectionMatrix * mvPosition;",a.ShaderChunk.logdepthbuf_vertex," vWorldPosition = worldPosition.xyz;"," vViewPosition = -mvPosition.xyz;"," #ifdef USE_SHADOWMAP"," for( int i = 0; i < MAX_SHADOWS; i ++ ) {"," vShadowCoord[ i ] = shadowMatrix[ i ] * worldPosition;"," }"," #endif","}"].join("\n")},cube:{uniforms:{tCube:{type:"t",value:null},tFlip:{type:"f",value:-1}},vertexShader:["varying vec3 vWorldPosition;",a.ShaderChunk.logdepthbuf_pars_vertex,"void main() {"," vec4 worldPosition = modelMatrix * vec4( position, 1.0 );"," vWorldPosition = worldPosition.xyz;"," gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",a.ShaderChunk.logdepthbuf_vertex,"}"].join("\n"),fragmentShader:["uniform samplerCube tCube;","uniform float tFlip;","varying vec3 vWorldPosition;",a.ShaderChunk.logdepthbuf_pars_fragment,"void main() {"," gl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );",a.ShaderChunk.logdepthbuf_fragment,"}"].join("\n")},depthRGBA:{uniforms:{},vertexShader:[a.ShaderChunk.morphtarget_pars_vertex,a.ShaderChunk.skinning_pars_vertex,a.ShaderChunk.logdepthbuf_pars_vertex,"void main() {",a.ShaderChunk.skinbase_vertex,a.ShaderChunk.morphtarget_vertex,a.ShaderChunk.skinning_vertex,a.ShaderChunk.default_vertex,a.ShaderChunk.logdepthbuf_vertex,"}"].join("\n"),fragmentShader:[a.ShaderChunk.logdepthbuf_pars_fragment,"vec4 pack_depth( const in float depth ) {"," const vec4 bit_shift = vec4( 256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0, 1.0 );"," const vec4 bit_mask = vec4( 0.0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0 );"," vec4 res = mod( depth * bit_shift * vec4( 255 ), vec4( 256 ) ) / vec4( 255 );"," res -= res.xxyz * bit_mask;"," return res;","}","void main() {",a.ShaderChunk.logdepthbuf_fragment," #ifdef USE_LOGDEPTHBUF_EXT"," gl_FragData[ 0 ] = pack_depth( gl_FragDepthEXT );"," #else"," gl_FragData[ 0 ] = pack_depth( gl_FragCoord.z );"," #endif","}"].join("\n")}},a.WebGLRenderer=function(b){function c(){La.clearColor(0,0,0,1),La.clearDepth(1),La.clearStencil(0),La.enable(La.DEPTH_TEST),La.depthFunc(La.LEQUAL),La.frontFace(La.CCW),La.cullFace(La.BACK),La.enable(La.CULL_FACE),La.enable(La.BLEND),La.blendEquation(La.FUNC_ADD),La.blendFunc(La.SRC_ALPHA,La.ONE_MINUS_SRC_ALPHA),La.viewport(eb,fb,gb,hb),La.clearColor(Ca.r,Ca.g,Ca.b,Da)}function d(a){ +a.__webglVertexBuffer=La.createBuffer(),a.__webglColorBuffer=La.createBuffer(),Ma.info.memory.geometries++}function e(a){a.__webglVertexBuffer=La.createBuffer(),a.__webglColorBuffer=La.createBuffer(),a.__webglLineDistanceBuffer=La.createBuffer(),Ma.info.memory.geometries++}function f(a){a.__webglVertexBuffer=La.createBuffer(),a.__webglNormalBuffer=La.createBuffer(),a.__webglTangentBuffer=La.createBuffer(),a.__webglColorBuffer=La.createBuffer(),a.__webglUVBuffer=La.createBuffer(),a.__webglUV2Buffer=La.createBuffer(),a.__webglSkinIndicesBuffer=La.createBuffer(),a.__webglSkinWeightsBuffer=La.createBuffer(),a.__webglFaceBuffer=La.createBuffer(),a.__webglLineBuffer=La.createBuffer();var b,c;if(a.numMorphTargets)for(a.__webglMorphTargetsBuffers=[],b=0,c=a.numMorphTargets;c>b;b++)a.__webglMorphTargetsBuffers.push(La.createBuffer());if(a.numMorphNormals)for(a.__webglMorphNormalsBuffers=[],b=0,c=a.numMorphNormals;c>b;b++)a.__webglMorphNormalsBuffers.push(La.createBuffer());Ma.info.memory.geometries++}function g(a){var b=a.geometry,c=a.material,d=b.vertices.length;if(c.attributes){void 0===b.__webglCustomAttributesList&&(b.__webglCustomAttributesList=[]);for(var e in c.attributes){var f=c.attributes[e];if(!f.__webglInitialized||f.createUniqueBuffers){f.__webglInitialized=!0;var g=1;"v2"===f.type?g=2:"v3"===f.type?g=3:"v4"===f.type?g=4:"c"===f.type&&(g=3),f.size=g,f.array=new Float32Array(d*g),f.buffer=La.createBuffer(),f.buffer.belongsToAttribute=e,f.needsUpdate=!0}b.__webglCustomAttributesList.push(f)}}}function h(a,b){var c=a.vertices.length;a.__vertexArray=new Float32Array(3*c),a.__colorArray=new Float32Array(3*c),a.__sortArray=[],a.__webglParticleCount=c,g(b)}function i(a,b){var c=a.vertices.length;a.__vertexArray=new Float32Array(3*c),a.__colorArray=new Float32Array(3*c),a.__lineDistanceArray=new Float32Array(1*c),a.__webglLineCount=c,g(b)}function j(a,b){var c=b.geometry,d=a.faces3,e=3*d.length,f=1*d.length,g=3*d.length,h=k(b,a);a.__vertexArray=new Float32Array(3*e),a.__normalArray=new Float32Array(3*e),a.__colorArray=new Float32Array(3*e),a.__uvArray=new Float32Array(2*e),c.faceVertexUvs.length>1&&(a.__uv2Array=new Float32Array(2*e)),c.hasTangents&&(a.__tangentArray=new Float32Array(4*e)),b.geometry.skinWeights.length&&b.geometry.skinIndices.length&&(a.__skinIndexArray=new Float32Array(4*e),a.__skinWeightArray=new Float32Array(4*e));var i=null!==vb.get("OES_element_index_uint")&&f>21845?Uint32Array:Uint16Array;a.__typeArray=i,a.__faceArray=new i(3*f),a.__lineArray=new i(2*g);var j,l;if(a.numMorphTargets)for(a.__morphTargetsArrays=[],j=0,l=a.numMorphTargets;l>j;j++)a.__morphTargetsArrays.push(new Float32Array(3*e));if(a.numMorphNormals)for(a.__morphNormalsArrays=[],j=0,l=a.numMorphNormals;l>j;j++)a.__morphNormalsArrays.push(new Float32Array(3*e));if(a.__webglFaceCount=3*f,a.__webglLineCount=2*g,h.attributes){void 0===a.__webglCustomAttributesList&&(a.__webglCustomAttributesList=[]);for(var m in h.attributes){var n=h.attributes[m],o={};for(var p in n)o[p]=n[p];if(!o.__webglInitialized||o.createUniqueBuffers){o.__webglInitialized=!0;var q=1;"v2"===o.type?q=2:"v3"===o.type?q=3:"v4"===o.type?q=4:"c"===o.type&&(q=3),o.size=q,o.array=new Float32Array(e*q),o.buffer=La.createBuffer(),o.buffer.belongsToAttribute=m,n.needsUpdate=!0,o.__original=n}a.__webglCustomAttributesList.push(o)}}a.__inittedArrays=!0}function k(b,c){return b.material instanceof a.MeshFaceMaterial?b.material.materials[c.materialIndex]:b.material}function l(b){return b&&void 0!==b.shading&&b.shading===a.SmoothShading}function m(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p=a.vertices,q=p.length,r=a.colors,s=r.length,t=a.__vertexArray,u=a.__colorArray,v=a.__sortArray,w=a.verticesNeedUpdate,y=(a.elementsNeedUpdate,a.colorsNeedUpdate),z=a.__webglCustomAttributesList;if(c.sortParticles){for(ob.copy(nb),ob.multiply(c.matrixWorld),d=0;q>d;d++)f=p[d],pb.copy(f),pb.applyProjection(ob),v[d]=[pb.z,d];for(v.sort(x),d=0;q>d;d++)f=p[v[d][1]],g=3*d,t[g]=f.x,t[g+1]=f.y,t[g+2]=f.z;for(e=0;s>e;e++)g=3*e,i=r[v[e][1]],u[g]=i.r,u[g+1]=i.g,u[g+2]=i.b;if(z)for(j=0,k=z.length;k>j;j++)if(o=z[j],void 0===o.boundTo||"vertices"===o.boundTo)if(g=0,m=o.value.length,1===o.size)for(l=0;m>l;l++)h=v[l][1],o.array[l]=o.value[h];else if(2===o.size)for(l=0;m>l;l++)h=v[l][1],n=o.value[h],o.array[g]=n.x,o.array[g+1]=n.y,g+=2;else if(3===o.size)if("c"===o.type)for(l=0;m>l;l++)h=v[l][1],n=o.value[h],o.array[g]=n.r,o.array[g+1]=n.g,o.array[g+2]=n.b,g+=3;else for(l=0;m>l;l++)h=v[l][1],n=o.value[h],o.array[g]=n.x,o.array[g+1]=n.y,o.array[g+2]=n.z,g+=3;else if(4===o.size)for(l=0;m>l;l++)h=v[l][1],n=o.value[h],o.array[g]=n.x,o.array[g+1]=n.y,o.array[g+2]=n.z,o.array[g+3]=n.w,g+=4}else{if(w)for(d=0;q>d;d++)f=p[d],g=3*d,t[g]=f.x,t[g+1]=f.y,t[g+2]=f.z;if(y)for(e=0;s>e;e++)i=r[e],g=3*e,u[g]=i.r,u[g+1]=i.g,u[g+2]=i.b;if(z)for(j=0,k=z.length;k>j;j++)if(o=z[j],o.needsUpdate&&(void 0===o.boundTo||"vertices"===o.boundTo))if(m=o.value.length,g=0,1===o.size)for(l=0;m>l;l++)o.array[l]=o.value[l];else if(2===o.size)for(l=0;m>l;l++)n=o.value[l],o.array[g]=n.x,o.array[g+1]=n.y,g+=2;else if(3===o.size)if("c"===o.type)for(l=0;m>l;l++)n=o.value[l],o.array[g]=n.r,o.array[g+1]=n.g,o.array[g+2]=n.b,g+=3;else for(l=0;m>l;l++)n=o.value[l],o.array[g]=n.x,o.array[g+1]=n.y,o.array[g+2]=n.z,g+=3;else if(4===o.size)for(l=0;m>l;l++)n=o.value[l],o.array[g]=n.x,o.array[g+1]=n.y,o.array[g+2]=n.z,o.array[g+3]=n.w,g+=4}if((w||c.sortParticles)&&(La.bindBuffer(La.ARRAY_BUFFER,a.__webglVertexBuffer),La.bufferData(La.ARRAY_BUFFER,t,b)),(y||c.sortParticles)&&(La.bindBuffer(La.ARRAY_BUFFER,a.__webglColorBuffer),La.bufferData(La.ARRAY_BUFFER,u,b)),z)for(j=0,k=z.length;k>j;j++)o=z[j],(o.needsUpdate||c.sortParticles)&&(La.bindBuffer(La.ARRAY_BUFFER,o.buffer),La.bufferData(La.ARRAY_BUFFER,o.array,b))}function n(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o=a.vertices,p=a.colors,q=a.lineDistances,r=o.length,s=p.length,t=q.length,u=a.__vertexArray,v=a.__colorArray,w=a.__lineDistanceArray,x=a.verticesNeedUpdate,y=a.colorsNeedUpdate,z=a.lineDistancesNeedUpdate,A=a.__webglCustomAttributesList;if(x){for(c=0;r>c;c++)f=o[c],g=3*c,u[g]=f.x,u[g+1]=f.y,u[g+2]=f.z;La.bindBuffer(La.ARRAY_BUFFER,a.__webglVertexBuffer),La.bufferData(La.ARRAY_BUFFER,u,b)}if(y){for(d=0;s>d;d++)h=p[d],g=3*d,v[g]=h.r,v[g+1]=h.g,v[g+2]=h.b;La.bindBuffer(La.ARRAY_BUFFER,a.__webglColorBuffer),La.bufferData(La.ARRAY_BUFFER,v,b)}if(z){for(e=0;t>e;e++)w[e]=q[e];La.bindBuffer(La.ARRAY_BUFFER,a.__webglLineDistanceBuffer),La.bufferData(La.ARRAY_BUFFER,w,b)}if(A)for(i=0,j=A.length;j>i;i++)if(n=A[i],n.needsUpdate&&(void 0===n.boundTo||"vertices"===n.boundTo)){if(g=0,l=n.value.length,1===n.size)for(k=0;l>k;k++)n.array[k]=n.value[k];else if(2===n.size)for(k=0;l>k;k++)m=n.value[k],n.array[g]=m.x,n.array[g+1]=m.y,g+=2;else if(3===n.size)if("c"===n.type)for(k=0;l>k;k++)m=n.value[k],n.array[g]=m.r,n.array[g+1]=m.g,n.array[g+2]=m.b,g+=3;else for(k=0;l>k;k++)m=n.value[k],n.array[g]=m.x,n.array[g+1]=m.y,n.array[g+2]=m.z,g+=3;else if(4===n.size)for(k=0;l>k;k++)m=n.value[k],n.array[g]=m.x,n.array[g+1]=m.y,n.array[g+2]=m.z,n.array[g+3]=m.w,g+=4;La.bindBuffer(La.ARRAY_BUFFER,n.buffer),La.bufferData(La.ARRAY_BUFFER,n.array,b)}}function o(b,c,d,e,f){if(b.__inittedArrays){var g,h,i,j,k,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X=l(f),Y=0,Z=0,$=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=b.__vertexArray,ka=b.__uvArray,la=b.__uv2Array,ma=b.__normalArray,na=b.__tangentArray,oa=b.__colorArray,pa=b.__skinIndexArray,qa=b.__skinWeightArray,ra=b.__morphTargetsArrays,sa=b.__morphNormalsArrays,ta=b.__webglCustomAttributesList,ua=b.__faceArray,va=b.__lineArray,wa=c.geometry,xa=wa.verticesNeedUpdate,ya=wa.elementsNeedUpdate,za=wa.uvsNeedUpdate,Aa=wa.normalsNeedUpdate,Ba=wa.tangentsNeedUpdate,Ca=wa.colorsNeedUpdate,Da=wa.morphTargetsNeedUpdate,Ea=wa.vertices,Fa=b.faces3,Ga=wa.faces,Ha=wa.faceVertexUvs[0],Ia=wa.faceVertexUvs[1],Ja=(wa.colors,wa.skinIndices),Ka=wa.skinWeights,Ma=wa.morphTargets,Na=wa.morphNormals;if(xa){for(g=0,h=Fa.length;h>g;g++)j=Ga[Fa[g]],s=Ea[j.a],t=Ea[j.b],u=Ea[j.c],ja[Z]=s.x,ja[Z+1]=s.y,ja[Z+2]=s.z,ja[Z+3]=t.x,ja[Z+4]=t.y,ja[Z+5]=t.z,ja[Z+6]=u.x,ja[Z+7]=u.y,ja[Z+8]=u.z,Z+=9;La.bindBuffer(La.ARRAY_BUFFER,b.__webglVertexBuffer),La.bufferData(La.ARRAY_BUFFER,ja,d)}if(Da)for(P=0,Q=Ma.length;Q>P;P++){for(ga=0,g=0,h=Fa.length;h>g;g++)T=Fa[g],j=Ga[T],s=Ma[P].vertices[j.a],t=Ma[P].vertices[j.b],u=Ma[P].vertices[j.c],R=ra[P],R[ga]=s.x,R[ga+1]=s.y,R[ga+2]=s.z,R[ga+3]=t.x,R[ga+4]=t.y,R[ga+5]=t.z,R[ga+6]=u.x,R[ga+7]=u.y,R[ga+8]=u.z,f.morphNormals&&(X?(U=Na[P].vertexNormals[T],y=U.a,z=U.b,A=U.c):(y=Na[P].faceNormals[T],z=y,A=y),S=sa[P],S[ga]=y.x,S[ga+1]=y.y,S[ga+2]=y.z,S[ga+3]=z.x,S[ga+4]=z.y,S[ga+5]=z.z,S[ga+6]=A.x,S[ga+7]=A.y,S[ga+8]=A.z),ga+=9;La.bindBuffer(La.ARRAY_BUFFER,b.__webglMorphTargetsBuffers[P]),La.bufferData(La.ARRAY_BUFFER,ra[P],d),f.morphNormals&&(La.bindBuffer(La.ARRAY_BUFFER,b.__webglMorphNormalsBuffers[P]),La.bufferData(La.ARRAY_BUFFER,sa[P],d))}if(Ka.length){for(g=0,h=Fa.length;h>g;g++)j=Ga[Fa[g]],E=Ka[j.a],F=Ka[j.b],G=Ka[j.c],qa[fa]=E.x,qa[fa+1]=E.y,qa[fa+2]=E.z,qa[fa+3]=E.w,qa[fa+4]=F.x,qa[fa+5]=F.y,qa[fa+6]=F.z,qa[fa+7]=F.w,qa[fa+8]=G.x,qa[fa+9]=G.y,qa[fa+10]=G.z,qa[fa+11]=G.w,H=Ja[j.a],I=Ja[j.b],J=Ja[j.c],pa[fa]=H.x,pa[fa+1]=H.y,pa[fa+2]=H.z,pa[fa+3]=H.w,pa[fa+4]=I.x,pa[fa+5]=I.y,pa[fa+6]=I.z,pa[fa+7]=I.w,pa[fa+8]=J.x,pa[fa+9]=J.y,pa[fa+10]=J.z,pa[fa+11]=J.w,fa+=12;fa>0&&(La.bindBuffer(La.ARRAY_BUFFER,b.__webglSkinIndicesBuffer),La.bufferData(La.ARRAY_BUFFER,pa,d),La.bindBuffer(La.ARRAY_BUFFER,b.__webglSkinWeightsBuffer),La.bufferData(La.ARRAY_BUFFER,qa,d))}if(Ca){for(g=0,h=Fa.length;h>g;g++)j=Ga[Fa[g]],n=j.vertexColors,o=j.color,3===n.length&&f.vertexColors===a.VertexColors?(B=n[0],C=n[1],D=n[2]):(B=o,C=o,D=o),oa[ea]=B.r,oa[ea+1]=B.g,oa[ea+2]=B.b,oa[ea+3]=C.r,oa[ea+4]=C.g,oa[ea+5]=C.b,oa[ea+6]=D.r,oa[ea+7]=D.g,oa[ea+8]=D.b,ea+=9;ea>0&&(La.bindBuffer(La.ARRAY_BUFFER,b.__webglColorBuffer),La.bufferData(La.ARRAY_BUFFER,oa,d))}if(Ba&&wa.hasTangents){for(g=0,h=Fa.length;h>g;g++)j=Ga[Fa[g]],p=j.vertexTangents,v=p[0],w=p[1],x=p[2],na[ca]=v.x,na[ca+1]=v.y,na[ca+2]=v.z,na[ca+3]=v.w,na[ca+4]=w.x,na[ca+5]=w.y,na[ca+6]=w.z,na[ca+7]=w.w,na[ca+8]=x.x,na[ca+9]=x.y,na[ca+10]=x.z,na[ca+11]=x.w,ca+=12;La.bindBuffer(La.ARRAY_BUFFER,b.__webglTangentBuffer),La.bufferData(La.ARRAY_BUFFER,na,d)}if(Aa){for(g=0,h=Fa.length;h>g;g++)if(j=Ga[Fa[g]],k=j.vertexNormals,m=j.normal,3===k.length&&X)for(K=0;3>K;K++)M=k[K],ma[ba]=M.x,ma[ba+1]=M.y,ma[ba+2]=M.z,ba+=3;else for(K=0;3>K;K++)ma[ba]=m.x,ma[ba+1]=m.y,ma[ba+2]=m.z,ba+=3;La.bindBuffer(La.ARRAY_BUFFER,b.__webglNormalBuffer),La.bufferData(La.ARRAY_BUFFER,ma,d)}if(za&&Ha){for(g=0,h=Fa.length;h>g;g++)if(i=Fa[g],q=Ha[i],void 0!==q)for(K=0;3>K;K++)N=q[K],ka[$]=N.x,ka[$+1]=N.y,$+=2;$>0&&(La.bindBuffer(La.ARRAY_BUFFER,b.__webglUVBuffer),La.bufferData(La.ARRAY_BUFFER,ka,d))}if(za&&Ia){for(g=0,h=Fa.length;h>g;g++)if(i=Fa[g],r=Ia[i],void 0!==r)for(K=0;3>K;K++)O=r[K],la[_]=O.x,la[_+1]=O.y,_+=2;_>0&&(La.bindBuffer(La.ARRAY_BUFFER,b.__webglUV2Buffer),La.bufferData(La.ARRAY_BUFFER,la,d))}if(ya){for(g=0,h=Fa.length;h>g;g++)ua[aa]=Y,ua[aa+1]=Y+1,ua[aa+2]=Y+2,aa+=3,va[da]=Y,va[da+1]=Y+1,va[da+2]=Y,va[da+3]=Y+2,va[da+4]=Y+1,va[da+5]=Y+2,da+=6,Y+=3;La.bindBuffer(La.ELEMENT_ARRAY_BUFFER,b.__webglFaceBuffer),La.bufferData(La.ELEMENT_ARRAY_BUFFER,ua,d),La.bindBuffer(La.ELEMENT_ARRAY_BUFFER,b.__webglLineBuffer),La.bufferData(La.ELEMENT_ARRAY_BUFFER,va,d)}if(ta)for(K=0,L=ta.length;L>K;K++)if(W=ta[K],W.__original.needsUpdate){if(ha=0,ia=0,1===W.size){if(void 0===W.boundTo||"vertices"===W.boundTo)for(g=0,h=Fa.length;h>g;g++)j=Ga[Fa[g]],W.array[ha]=W.value[j.a],W.array[ha+1]=W.value[j.b],W.array[ha+2]=W.value[j.c],ha+=3;else if("faces"===W.boundTo)for(g=0,h=Fa.length;h>g;g++)V=W.value[Fa[g]],W.array[ha]=V,W.array[ha+1]=V,W.array[ha+2]=V,ha+=3}else if(2===W.size){if(void 0===W.boundTo||"vertices"===W.boundTo)for(g=0,h=Fa.length;h>g;g++)j=Ga[Fa[g]],s=W.value[j.a],t=W.value[j.b],u=W.value[j.c],W.array[ha]=s.x,W.array[ha+1]=s.y,W.array[ha+2]=t.x,W.array[ha+3]=t.y,W.array[ha+4]=u.x,W.array[ha+5]=u.y,ha+=6;else if("faces"===W.boundTo)for(g=0,h=Fa.length;h>g;g++)V=W.value[Fa[g]],s=V,t=V,u=V,W.array[ha]=s.x,W.array[ha+1]=s.y,W.array[ha+2]=t.x,W.array[ha+3]=t.y,W.array[ha+4]=u.x,W.array[ha+5]=u.y,ha+=6}else if(3===W.size){var Oa;if(Oa="c"===W.type?["r","g","b"]:["x","y","z"],void 0===W.boundTo||"vertices"===W.boundTo)for(g=0,h=Fa.length;h>g;g++)j=Ga[Fa[g]],s=W.value[j.a],t=W.value[j.b],u=W.value[j.c],W.array[ha]=s[Oa[0]],W.array[ha+1]=s[Oa[1]],W.array[ha+2]=s[Oa[2]],W.array[ha+3]=t[Oa[0]],W.array[ha+4]=t[Oa[1]],W.array[ha+5]=t[Oa[2]],W.array[ha+6]=u[Oa[0]],W.array[ha+7]=u[Oa[1]],W.array[ha+8]=u[Oa[2]],ha+=9;else if("faces"===W.boundTo)for(g=0,h=Fa.length;h>g;g++)V=W.value[Fa[g]],s=V,t=V,u=V,W.array[ha]=s[Oa[0]],W.array[ha+1]=s[Oa[1]],W.array[ha+2]=s[Oa[2]],W.array[ha+3]=t[Oa[0]],W.array[ha+4]=t[Oa[1]],W.array[ha+5]=t[Oa[2]],W.array[ha+6]=u[Oa[0]],W.array[ha+7]=u[Oa[1]],W.array[ha+8]=u[Oa[2]],ha+=9;else if("faceVertices"===W.boundTo)for(g=0,h=Fa.length;h>g;g++)V=W.value[Fa[g]],s=V[0],t=V[1],u=V[2],W.array[ha]=s[Oa[0]],W.array[ha+1]=s[Oa[1]],W.array[ha+2]=s[Oa[2]],W.array[ha+3]=t[Oa[0]],W.array[ha+4]=t[Oa[1]],W.array[ha+5]=t[Oa[2]],W.array[ha+6]=u[Oa[0]],W.array[ha+7]=u[Oa[1]],W.array[ha+8]=u[Oa[2]],ha+=9}else if(4===W.size)if(void 0===W.boundTo||"vertices"===W.boundTo)for(g=0,h=Fa.length;h>g;g++)j=Ga[Fa[g]],s=W.value[j.a],t=W.value[j.b],u=W.value[j.c],W.array[ha]=s.x,W.array[ha+1]=s.y,W.array[ha+2]=s.z,W.array[ha+3]=s.w,W.array[ha+4]=t.x,W.array[ha+5]=t.y,W.array[ha+6]=t.z,W.array[ha+7]=t.w,W.array[ha+8]=u.x,W.array[ha+9]=u.y,W.array[ha+10]=u.z,W.array[ha+11]=u.w,ha+=12;else if("faces"===W.boundTo)for(g=0,h=Fa.length;h>g;g++)V=W.value[Fa[g]],s=V,t=V,u=V,W.array[ha]=s.x,W.array[ha+1]=s.y,W.array[ha+2]=s.z,W.array[ha+3]=s.w,W.array[ha+4]=t.x,W.array[ha+5]=t.y,W.array[ha+6]=t.z,W.array[ha+7]=t.w,W.array[ha+8]=u.x,W.array[ha+9]=u.y,W.array[ha+10]=u.z,W.array[ha+11]=u.w,ha+=12;else if("faceVertices"===W.boundTo)for(g=0,h=Fa.length;h>g;g++)V=W.value[Fa[g]],s=V[0],t=V[1],u=V[2],W.array[ha]=s.x,W.array[ha+1]=s.y,W.array[ha+2]=s.z,W.array[ha+3]=s.w,W.array[ha+4]=t.x,W.array[ha+5]=t.y,W.array[ha+6]=t.z,W.array[ha+7]=t.w,W.array[ha+8]=u.x,W.array[ha+9]=u.y,W.array[ha+10]=u.z,W.array[ha+11]=u.w,ha+=12;La.bindBuffer(La.ARRAY_BUFFER,W.buffer),La.bufferData(La.ARRAY_BUFFER,W.array,d)}e&&(delete b.__inittedArrays,delete b.__colorArray,delete b.__normalArray,delete b.__tangentArray,delete b.__uvArray,delete b.__uv2Array,delete b.__faceArray,delete b.__vertexArray,delete b.__lineArray,delete b.__skinIndexArray,delete b.__skinWeightArray)}}function p(a){for(var b=a.attributes,c=a.attributesKeys,d=0,e=c.length;e>d;d++){var f=c[d],g=b[f];if(void 0===g.buffer&&(g.buffer=La.createBuffer(),g.needsUpdate=!0),g.needsUpdate===!0){var h="index"===f?La.ELEMENT_ARRAY_BUFFER:La.ARRAY_BUFFER;La.bindBuffer(h,g.buffer),La.bufferData(h,g.array,La.STATIC_DRAW),g.needsUpdate=!1}}}function q(a,b,c,d){for(var e=c.attributes,f=b.attributes,g=b.attributesKeys,h=0,i=g.length;i>h;h++){var j=g[h],k=f[j];if(k>=0){var l=e[j];if(void 0!==l){var m=l.itemSize;La.bindBuffer(La.ARRAY_BUFFER,l.buffer),s(k),La.vertexAttribPointer(k,m,La.FLOAT,!1,0,d*m*4)}else void 0!==a.defaultAttributeValues&&(2===a.defaultAttributeValues[j].length?La.vertexAttrib2fv(k,a.defaultAttributeValues[j]):3===a.defaultAttributeValues[j].length&&La.vertexAttrib3fv(k,a.defaultAttributeValues[j]))}}t()}function r(){for(var a=0,b=kb.length;b>a;a++)kb[a]=0}function s(a){kb[a]=1,0===lb[a]&&(La.enableVertexAttribArray(a),lb[a]=1)}function t(){for(var a=0,b=lb.length;b>a;a++)lb[a]!==kb[a]&&(La.disableVertexAttribArray(a),lb[a]=0)}function u(a,b,c){var d=a.program.attributes;if(-1!==c.morphTargetBase&&d.position>=0?(La.bindBuffer(La.ARRAY_BUFFER,b.__webglMorphTargetsBuffers[c.morphTargetBase]),s(d.position),La.vertexAttribPointer(d.position,3,La.FLOAT,!1,0,0)):d.position>=0&&(La.bindBuffer(La.ARRAY_BUFFER,b.__webglVertexBuffer),s(d.position),La.vertexAttribPointer(d.position,3,La.FLOAT,!1,0,0)),c.morphTargetForcedOrder.length)for(var e=0,f=c.morphTargetForcedOrder,g=c.morphTargetInfluences;e=0&&(La.bindBuffer(La.ARRAY_BUFFER,b.__webglMorphTargetsBuffers[f[e]]),s(d["morphTarget"+e]),La.vertexAttribPointer(d["morphTarget"+e],3,La.FLOAT,!1,0,0)),d["morphNormal"+e]>=0&&a.morphNormals&&(La.bindBuffer(La.ARRAY_BUFFER,b.__webglMorphNormalsBuffers[f[e]]),s(d["morphNormal"+e]),La.vertexAttribPointer(d["morphNormal"+e],3,La.FLOAT,!1,0,0)),c.__webglMorphTargetInfluences[e]=g[f[e]],e++;else{var h,i,j=[],g=c.morphTargetInfluences,k=g.length;for(i=0;k>i;i++)h=g[i],h>0&&j.push([h,i]);j.length>a.numSupportedMorphTargets?(j.sort(x),j.length=a.numSupportedMorphTargets):j.length>a.numSupportedMorphNormals?j.sort(x):0===j.length&&j.push([0,0]);for(var l,e=0;e=0&&(La.bindBuffer(La.ARRAY_BUFFER,b.__webglMorphTargetsBuffers[l]),s(d["morphTarget"+e]),La.vertexAttribPointer(d["morphTarget"+e],3,La.FLOAT,!1,0,0)),d["morphNormal"+e]>=0&&a.morphNormals&&(La.bindBuffer(La.ARRAY_BUFFER,b.__webglMorphNormalsBuffers[l]),s(d["morphNormal"+e]),La.vertexAttribPointer(d["morphNormal"+e],3,La.FLOAT,!1,0,0)),c.__webglMorphTargetInfluences[e]=g[l]):c.__webglMorphTargetInfluences[e]=0,e++}null!==a.program.uniforms.morphTargetInfluences&&La.uniform1fv(a.program.uniforms.morphTargetInfluences,c.__webglMorphTargetInfluences)}function v(a,b){return a.material.id!==b.material.id?b.material.id-a.material.id:a.z!==b.z?b.z-a.z:a.id-b.id}function w(a,b){return a.z!==b.z?a.z-b.z:a.id-b.id}function x(a,b){return b[0]-a[0]}function y(b,c){if(c.visible!==!1){if(c instanceof a.Scene||c instanceof a.Group);else if(D(c,b),c instanceof a.Light)Ea.push(c);else if(c instanceof a.Sprite)Ja.push(c);else if(c instanceof a.LensFlare)Ka.push(c);else{var d=Fa[c.id];if(d&&(c.frustumCulled===!1||mb.intersectsObject(c)===!0)){I(c,b);for(var e=0,f=d.length;f>e;e++){var g=d[e];C(g),g.render=!0,Ma.sortObjects===!0&&(null!==c.renderDepth?g.z=c.renderDepth:(pb.setFromMatrixPosition(c.matrixWorld),pb.applyProjection(nb),g.z=pb.z))}}}for(var e=0,f=c.children.length;f>e;e++)y(b,c.children[e])}}function z(b,c,d,e,f,g){for(var h,i=b.length-1;-1!==i;i--){var j=b[i],k=j.object,l=j.buffer;if(aa(k,c),g)h=g;else{if(h=j.material,!h)continue;f&&Ma.setBlending(h.blending,h.blendEquation,h.blendSrc,h.blendDst),Ma.setDepthTest(h.depthTest),Ma.setDepthWrite(h.depthWrite),fa(h.polygonOffset,h.polygonOffsetFactor,h.polygonOffsetUnits)}Ma.setMaterialFaces(h),l instanceof a.BufferGeometry?Ma.renderBufferDirect(c,d,e,h,l,k):Ma.renderBuffer(c,d,e,h,l,k)}}function A(a,b,c,d,e,f,g){for(var h,i=0,j=a.length;j>i;i++){var k=a[i],l=k.object;if(l.visible){if(g)h=g;else{if(h=k[b],!h)continue;f&&Ma.setBlending(h.blending,h.blendEquation,h.blendSrc,h.blendDst),Ma.setDepthTest(h.depthTest),Ma.setDepthWrite(h.depthWrite),fa(h.polygonOffset,h.polygonOffsetFactor,h.polygonOffsetUnits)}Ma.renderImmediateObject(c,d,e,h,l)}}}function B(a){var b=a.object,c=b.material;c.transparent?(a.transparent=c,a.opaque=null):(a.opaque=c,a.transparent=null)}function C(b){var c=b.object,d=b.buffer,e=c.geometry,f=c.material;if(f instanceof a.MeshFaceMaterial){var g=e instanceof a.BufferGeometry?0:d.materialIndex;f=f.materials[g],b.material=f,f.transparent?Ia.push(b):Ha.push(b)}else f&&(b.material=f,f.transparent?Ia.push(b):Ha.push(b))}function D(b,c){void 0===b.__webglInit&&(b.__webglInit=!0,b._modelViewMatrix=new a.Matrix4,b._normalMatrix=new a.Matrix3,b.addEventListener("removed",Mb));var f=b.geometry;if(void 0===f||void 0===f.__webglInit&&(f.__webglInit=!0,f.addEventListener("dispose",Nb),f instanceof a.BufferGeometry||(b instanceof a.Mesh?F(c,b,f):b instanceof a.Line?void 0===f.__webglVertexBuffer&&(e(f),i(f,b),f.verticesNeedUpdate=!0,f.colorsNeedUpdate=!0,f.lineDistancesNeedUpdate=!0):b instanceof a.PointCloud&&void 0===f.__webglVertexBuffer&&(d(f),h(f,b),f.verticesNeedUpdate=!0,f.colorsNeedUpdate=!0))),void 0===b.__webglActive)if(b.__webglActive=!0,b instanceof a.Mesh){if(f instanceof a.BufferGeometry)G(Fa,f,b);else if(f instanceof a.Geometry)for(var g=Wb[f.id],j=0,k=g.length;k>j;j++)G(Fa,g[j],b)}else b instanceof a.Line||b instanceof a.PointCloud?G(Fa,f,b):(b instanceof a.ImmediateRenderObject||b.immediateRenderCallback)&&H(Ga,b)}function E(a,b){for(var c,d,e=vb.get("OES_element_index_uint")?4294967296:65535,f={},g=a.morphTargets.length,h=a.morphNormals.length,i={},j=[],k=0,l=a.faces.length;l>k;k++){var m=a.faces[k],n=b?m.materialIndex:0;n in f||(f[n]={hash:n,counter:0}),c=f[n].hash+"_"+f[n].counter,c in i||(d={id:Xb++,faces3:[],materialIndex:n,vertices:0,numMorphTargets:g,numMorphNormals:h},i[c]=d,j.push(d)),i[c].vertices+3>e&&(f[n].counter+=1,c=f[n].hash+"_"+f[n].counter,c in i||(d={id:Xb++,faces3:[],materialIndex:n,vertices:0,numMorphTargets:g,numMorphNormals:h},i[c]=d,j.push(d))),i[c].faces3.push(k),i[c].vertices+=3}return j}function F(b,c,d){var e=c.material,g=!1;(void 0===Wb[d.id]||d.groupsNeedUpdate===!0)&&(delete Fa[c.id],Wb[d.id]=E(d,e instanceof a.MeshFaceMaterial),d.groupsNeedUpdate=!1);for(var h=Wb[d.id],i=0,k=h.length;k>i;i++){var l=h[i];void 0===l.__webglVertexBuffer?(f(l),j(l,c),d.verticesNeedUpdate=!0,d.morphTargetsNeedUpdate=!0,d.elementsNeedUpdate=!0,d.uvsNeedUpdate=!0,d.normalsNeedUpdate=!0,d.tangentsNeedUpdate=!0,d.colorsNeedUpdate=!0,g=!0):g=!1,(g||void 0===c.__webglActive)&&G(Fa,l,c)}c.__webglActive=!0}function G(a,b,c){var d=c.id;a[d]=a[d]||[],a[d].push({id:d,buffer:b,object:c,material:null,z:0})}function H(a,b){a.push({id:null,object:b,opaque:null,transparent:null,z:0})}function I(b,c){var d,e,f=b.geometry;if(f instanceof a.BufferGeometry)p(f);else if(b instanceof a.Mesh){f.groupsNeedUpdate===!0&&F(c,b,f);for(var g=Wb[f.id],h=0,i=g.length;i>h;h++){var l=g[h];e=k(b,l),f.groupsNeedUpdate===!0&&j(l,b),d=e.attributes&&J(e),(f.verticesNeedUpdate||f.morphTargetsNeedUpdate||f.elementsNeedUpdate||f.uvsNeedUpdate||f.normalsNeedUpdate||f.colorsNeedUpdate||f.tangentsNeedUpdate||d)&&o(l,b,La.DYNAMIC_DRAW,!f.dynamic,e)}f.verticesNeedUpdate=!1,f.morphTargetsNeedUpdate=!1,f.elementsNeedUpdate=!1,f.uvsNeedUpdate=!1,f.normalsNeedUpdate=!1,f.colorsNeedUpdate=!1,f.tangentsNeedUpdate=!1,e.attributes&&K(e)}else b instanceof a.Line?(e=k(b,f),d=e.attributes&&J(e),(f.verticesNeedUpdate||f.colorsNeedUpdate||f.lineDistancesNeedUpdate||d)&&n(f,La.DYNAMIC_DRAW),f.verticesNeedUpdate=!1,f.colorsNeedUpdate=!1,f.lineDistancesNeedUpdate=!1,e.attributes&&K(e)):b instanceof a.PointCloud&&(e=k(b,f),d=e.attributes&&J(e),(f.verticesNeedUpdate||f.colorsNeedUpdate||b.sortParticles||d)&&m(f,La.DYNAMIC_DRAW,b),f.verticesNeedUpdate=!1,f.colorsNeedUpdate=!1,e.attributes&&K(e))}function J(a){for(var b in a.attributes)if(a.attributes[b].needsUpdate)return!0;return!1}function K(a){for(var b in a.attributes)a.attributes[b].needsUpdate=!1}function L(b){b instanceof a.Mesh||b instanceof a.PointCloud||b instanceof a.Line?delete Fa[b.id]:(b instanceof a.ImmediateRenderObject||b.immediateRenderCallback)&&M(Ga,b),delete b.__webglInit,delete b._modelViewMatrix,delete b._normalMatrix,delete b.__webglActive}function M(a,b){for(var c=a.length-1;c>=0;c--)a[c].object===b&&a.splice(c,1)}function N(b,c,d,e){b.addEventListener("dispose",Qb);var f;if(b instanceof a.MeshDepthMaterial?f="depth":b instanceof a.MeshNormalMaterial?f="normal":b instanceof a.MeshBasicMaterial?f="basic":b instanceof a.MeshLambertMaterial?f="lambert":b instanceof a.MeshPhongMaterial?f="phong":b instanceof a.LineBasicMaterial?f="basic":b instanceof a.LineDashedMaterial?f="dashed":b instanceof a.PointCloudMaterial&&(f="particle_basic"),f){var g=a.ShaderLib[f];b.__webglShader={uniforms:a.UniformsUtils.clone(g.uniforms),vertexShader:g.vertexShader,fragmentShader:g.fragmentShader}}else b.__webglShader={uniforms:b.uniforms,vertexShader:b.vertexShader,fragmentShader:b.fragmentShader};var h=qa(c),i=ra(c),j=pa(e),k={precision:ua,supportsVertexTextures:Ab,map:!!b.map,envMap:!!b.envMap,lightMap:!!b.lightMap,bumpMap:!!b.bumpMap,normalMap:!!b.normalMap,specularMap:!!b.specularMap,alphaMap:!!b.alphaMap,vertexColors:b.vertexColors,fog:d,useFog:b.fog,fogExp:d instanceof a.FogExp2,sizeAttenuation:b.sizeAttenuation,logarithmicDepthBuffer:Ba,skinning:b.skinning,maxBones:j,useVertexTexture:Bb&&e&&e.skeleton&&e.skeleton.useVertexTexture,morphTargets:b.morphTargets,morphNormals:b.morphNormals,maxMorphTargets:Ma.maxMorphTargets,maxMorphNormals:Ma.maxMorphNormals,maxDirLights:h.directional,maxPointLights:h.point,maxSpotLights:h.spot,maxHemiLights:h.hemi,maxShadows:i,shadowMapEnabled:Ma.shadowMapEnabled&&e.receiveShadow&&i>0,shadowMapType:Ma.shadowMapType,shadowMapDebug:Ma.shadowMapDebug,shadowMapCascade:Ma.shadowMapCascade,alphaTest:b.alphaTest,metal:b.metal,wrapAround:b.wrapAround,doubleSided:b.side===a.DoubleSide,flipSided:b.side===a.BackSide},l=[];if(f?l.push(f):(l.push(b.fragmentShader),l.push(b.vertexShader)),void 0!==b.defines)for(var m in b.defines)l.push(m),l.push(b.defines[m]);for(var m in k)l.push(m),l.push(k[m]);for(var n,o=l.join(),p=0,q=Na.length;q>p;p++){var r=Na[p];if(r.code===o){n=r,n.usedTimes++;break}}void 0===n&&(n=new a.WebGLProgram(Ma,o,b,k),Na.push(n),Ma.info.memory.programs=Na.length),b.program=n;var s=n.attributes;if(b.morphTargets){b.numSupportedMorphTargets=0;for(var t,u="morphTarget",v=0;v=0&&b.numSupportedMorphTargets++}if(b.morphNormals){b.numSupportedMorphNormals=0;var t,u="morphNormal";for(v=0;v=0&&b.numSupportedMorphNormals++}b.uniformsList=[];for(var w in b.__webglShader.uniforms){var x=b.program.uniforms[w];x&&b.uniformsList.push([b.__webglShader.uniforms[w],x])}}function O(b,c,d,e,f){Ta=0,e.needsUpdate&&(e.program&&Vb(e),N(e,c,d,f),e.needsUpdate=!1),e.morphTargets&&(f.__webglMorphTargetInfluences||(f.__webglMorphTargetInfluences=new Float32Array(Ma.maxMorphTargets)));var g=!1,h=!1,i=!1,j=e.program,k=j.uniforms,l=e.__webglShader.uniforms;if(j.id!==Oa&&(La.useProgram(j.program),Oa=j.id,g=!0,h=!0,i=!0),e.id!==Qa&&(-1===Qa&&(i=!0),Qa=e.id,h=!0),(g||b!==Sa)&&(La.uniformMatrix4fv(k.projectionMatrix,!1,b.projectionMatrix.elements),Ba&&La.uniform1f(k.logDepthBufFC,2/(Math.log(b.far+1)/Math.LN2)),b!==Sa&&(Sa=b),(e instanceof a.ShaderMaterial||e instanceof a.MeshPhongMaterial||e.envMap)&&null!==k.cameraPosition&&(pb.setFromMatrixPosition(b.matrixWorld),La.uniform3f(k.cameraPosition,pb.x,pb.y,pb.z)),(e instanceof a.MeshPhongMaterial||e instanceof a.MeshLambertMaterial||e instanceof a.ShaderMaterial||e.skinning)&&null!==k.viewMatrix&&La.uniformMatrix4fv(k.viewMatrix,!1,b.matrixWorldInverse.elements)),e.skinning)if(f.bindMatrix&&null!==k.bindMatrix&&La.uniformMatrix4fv(k.bindMatrix,!1,f.bindMatrix.elements),f.bindMatrixInverse&&null!==k.bindMatrixInverse&&La.uniformMatrix4fv(k.bindMatrixInverse,!1,f.bindMatrixInverse.elements),Bb&&f.skeleton&&f.skeleton.useVertexTexture){if(null!==k.boneTexture){var m=$();La.uniform1i(k.boneTexture,m),Ma.setTexture(f.skeleton.boneTexture,m)}null!==k.boneTextureWidth&&La.uniform1i(k.boneTextureWidth,f.skeleton.boneTextureWidth),null!==k.boneTextureHeight&&La.uniform1i(k.boneTextureHeight,f.skeleton.boneTextureHeight)}else f.skeleton&&f.skeleton.boneMatrices&&null!==k.boneGlobalMatrices&&La.uniformMatrix4fv(k.boneGlobalMatrices,!1,f.skeleton.boneMatrices);return h&&(d&&e.fog&&T(l,d),(e instanceof a.MeshPhongMaterial||e instanceof a.MeshLambertMaterial||e.lights)&&(rb&&(i=!0,da(c),rb=!1),i?(W(l,sb),X(l,!0)):X(l,!1)),(e instanceof a.MeshBasicMaterial||e instanceof a.MeshLambertMaterial||e instanceof a.MeshPhongMaterial)&&P(l,e),e instanceof a.LineBasicMaterial?Q(l,e):e instanceof a.LineDashedMaterial?(Q(l,e),R(l,e)):e instanceof a.PointCloudMaterial?S(l,e):e instanceof a.MeshPhongMaterial?U(l,e):e instanceof a.MeshLambertMaterial?V(l,e):e instanceof a.MeshDepthMaterial?(l.mNear.value=b.near,l.mFar.value=b.far,l.opacity.value=e.opacity):e instanceof a.MeshNormalMaterial&&(l.opacity.value=e.opacity),f.receiveShadow&&!e._shadowPass&&Y(l,c),_(e.uniformsList)),Z(k,f),null!==k.modelMatrix&&La.uniformMatrix4fv(k.modelMatrix,!1,f.matrixWorld.elements),j}function P(b,c){b.opacity.value=c.opacity,Ma.gammaInput?b.diffuse.value.copyGammaToLinear(c.color):b.diffuse.value=c.color,b.map.value=c.map,b.lightMap.value=c.lightMap,b.specularMap.value=c.specularMap,b.alphaMap.value=c.alphaMap,c.bumpMap&&(b.bumpMap.value=c.bumpMap,b.bumpScale.value=c.bumpScale),c.normalMap&&(b.normalMap.value=c.normalMap,b.normalScale.value.copy(c.normalScale));var d;if(c.map?d=c.map:c.specularMap?d=c.specularMap:c.normalMap?d=c.normalMap:c.bumpMap?d=c.bumpMap:c.alphaMap&&(d=c.alphaMap),void 0!==d){var e=d.offset,f=d.repeat;b.offsetRepeat.value.set(e.x,e.y,f.x,f.y)}b.envMap.value=c.envMap,b.flipEnvMap.value=c.envMap instanceof a.WebGLRenderTargetCube?1:-1,Ma.gammaInput?b.reflectivity.value=c.reflectivity:b.reflectivity.value=c.reflectivity,b.refractionRatio.value=c.refractionRatio,b.combine.value=c.combine,b.useRefract.value=c.envMap&&c.envMap.mapping instanceof a.CubeRefractionMapping}function Q(a,b){a.diffuse.value=b.color,a.opacity.value=b.opacity}function R(a,b){a.dashSize.value=b.dashSize,a.totalSize.value=b.dashSize+b.gapSize,a.scale.value=b.scale}function S(a,b){a.psColor.value=b.color,a.opacity.value=b.opacity,a.size.value=b.size,a.scale.value=sa.height/2,a.map.value=b.map}function T(b,c){b.fogColor.value=c.color,c instanceof a.Fog?(b.fogNear.value=c.near,b.fogFar.value=c.far):c instanceof a.FogExp2&&(b.fogDensity.value=c.density)}function U(a,b){a.shininess.value=b.shininess,Ma.gammaInput?(a.ambient.value.copyGammaToLinear(b.ambient),a.emissive.value.copyGammaToLinear(b.emissive),a.specular.value.copyGammaToLinear(b.specular)):(a.ambient.value=b.ambient,a.emissive.value=b.emissive,a.specular.value=b.specular),b.wrapAround&&a.wrapRGB.value.copy(b.wrapRGB)}function V(a,b){Ma.gammaInput?(a.ambient.value.copyGammaToLinear(b.ambient),a.emissive.value.copyGammaToLinear(b.emissive)):(a.ambient.value=b.ambient,a.emissive.value=b.emissive),b.wrapAround&&a.wrapRGB.value.copy(b.wrapRGB)}function W(a,b){a.ambientLightColor.value=b.ambient,a.directionalLightColor.value=b.directional.colors,a.directionalLightDirection.value=b.directional.positions,a.pointLightColor.value=b.point.colors,a.pointLightPosition.value=b.point.positions,a.pointLightDistance.value=b.point.distances,a.spotLightColor.value=b.spot.colors,a.spotLightPosition.value=b.spot.positions,a.spotLightDistance.value=b.spot.distances,a.spotLightDirection.value=b.spot.directions,a.spotLightAngleCos.value=b.spot.anglesCos,a.spotLightExponent.value=b.spot.exponents,a.hemisphereLightSkyColor.value=b.hemi.skyColors,a.hemisphereLightGroundColor.value=b.hemi.groundColors,a.hemisphereLightDirection.value=b.hemi.positions}function X(a,b){a.ambientLightColor.needsUpdate=b,a.directionalLightColor.needsUpdate=b,a.directionalLightDirection.needsUpdate=b,a.pointLightColor.needsUpdate=b,a.pointLightPosition.needsUpdate=b,a.pointLightDistance.needsUpdate=b,a.spotLightColor.needsUpdate=b,a.spotLightPosition.needsUpdate=b,a.spotLightDistance.needsUpdate=b,a.spotLightDirection.needsUpdate=b,a.spotLightAngleCos.needsUpdate=b,a.spotLightExponent.needsUpdate=b,a.hemisphereLightSkyColor.needsUpdate=b,a.hemisphereLightGroundColor.needsUpdate=b,a.hemisphereLightDirection.needsUpdate=b}function Y(b,c){if(b.shadowMatrix)for(var d=0,e=0,f=c.length;f>e;e++){var g=c[e];g.castShadow&&(g instanceof a.SpotLight||g instanceof a.DirectionalLight&&!g.shadowCascade)&&(b.shadowMap.value[d]=g.shadowMap,b.shadowMapSize.value[d]=g.shadowMapSize,b.shadowMatrix.value[d]=g.shadowMatrix,b.shadowDarkness.value[d]=g.shadowDarkness,b.shadowBias.value[d]=g.shadowBias,d++)}}function Z(a,b){La.uniformMatrix4fv(a.modelViewMatrix,!1,b._modelViewMatrix.elements),a.normalMatrix&&La.uniformMatrix3fv(a.normalMatrix,!1,b._normalMatrix.elements)}function $(){var a=Ta;return a>=wb&&console.warn("WebGLRenderer: trying to use "+a+" texture units while this GPU supports only "+wb), +Ta+=1,a}function _(b){for(var c,d,e,f=0,g=b.length;g>f;f++){var h=b[f][0];if(h.needsUpdate!==!1){var i=h.type,j=h.value,k=b[f][1];switch(i){case"1i":La.uniform1i(k,j);break;case"1f":La.uniform1f(k,j);break;case"2f":La.uniform2f(k,j[0],j[1]);break;case"3f":La.uniform3f(k,j[0],j[1],j[2]);break;case"4f":La.uniform4f(k,j[0],j[1],j[2],j[3]);break;case"1iv":La.uniform1iv(k,j);break;case"3iv":La.uniform3iv(k,j);break;case"1fv":La.uniform1fv(k,j);break;case"2fv":La.uniform2fv(k,j);break;case"3fv":La.uniform3fv(k,j);break;case"4fv":La.uniform4fv(k,j);break;case"Matrix3fv":La.uniformMatrix3fv(k,!1,j);break;case"Matrix4fv":La.uniformMatrix4fv(k,!1,j);break;case"i":La.uniform1i(k,j);break;case"f":La.uniform1f(k,j);break;case"v2":La.uniform2f(k,j.x,j.y);break;case"v3":La.uniform3f(k,j.x,j.y,j.z);break;case"v4":La.uniform4f(k,j.x,j.y,j.z,j.w);break;case"c":La.uniform3f(k,j.r,j.g,j.b);break;case"iv1":La.uniform1iv(k,j);break;case"iv":La.uniform3iv(k,j);break;case"fv1":La.uniform1fv(k,j);break;case"fv":La.uniform3fv(k,j);break;case"v2v":void 0===h._array&&(h._array=new Float32Array(2*j.length));for(var l=0,m=j.length;m>l;l++)e=2*l,h._array[e]=j[l].x,h._array[e+1]=j[l].y;La.uniform2fv(k,h._array);break;case"v3v":void 0===h._array&&(h._array=new Float32Array(3*j.length));for(var l=0,m=j.length;m>l;l++)e=3*l,h._array[e]=j[l].x,h._array[e+1]=j[l].y,h._array[e+2]=j[l].z;La.uniform3fv(k,h._array);break;case"v4v":void 0===h._array&&(h._array=new Float32Array(4*j.length));for(var l=0,m=j.length;m>l;l++)e=4*l,h._array[e]=j[l].x,h._array[e+1]=j[l].y,h._array[e+2]=j[l].z,h._array[e+3]=j[l].w;La.uniform4fv(k,h._array);break;case"m3":La.uniformMatrix3fv(k,!1,j.elements);break;case"m3v":void 0===h._array&&(h._array=new Float32Array(9*j.length));for(var l=0,m=j.length;m>l;l++)j[l].flattenToArrayOffset(h._array,9*l);La.uniformMatrix3fv(k,!1,h._array);break;case"m4":La.uniformMatrix4fv(k,!1,j.elements);break;case"m4v":void 0===h._array&&(h._array=new Float32Array(16*j.length));for(var l=0,m=j.length;m>l;l++)j[l].flattenToArrayOffset(h._array,16*l);La.uniformMatrix4fv(k,!1,h._array);break;case"t":if(c=j,d=$(),La.uniform1i(k,d),!c)continue;c instanceof a.CubeTexture||c.image instanceof Array&&6===c.image.length?ia(c,d):c instanceof a.WebGLRenderTargetCube?ja(c,d):Ma.setTexture(c,d);break;case"tv":void 0===h._array&&(h._array=[]);for(var l=0,m=h.value.length;m>l;l++)h._array[l]=$();La.uniform1iv(k,h._array);for(var l=0,m=h.value.length;m>l;l++)c=h.value[l],d=h._array[l],c&&Ma.setTexture(c,d);break;default:console.warn("THREE.WebGLRenderer: Unknown uniform type: "+i)}}}}function aa(a,b){a._modelViewMatrix.multiplyMatrices(b.matrixWorldInverse,a.matrixWorld),a._normalMatrix.getNormalMatrix(a._modelViewMatrix)}function ba(a,b,c,d){a[b]=c.r*c.r*d,a[b+1]=c.g*c.g*d,a[b+2]=c.b*c.b*d}function ca(a,b,c,d){a[b]=c.r*d,a[b+1]=c.g*d,a[b+2]=c.b*d}function da(b){var c,d,e,f,g,h,i,j,k,l=0,m=0,n=0,o=sb,p=o.directional.colors,q=o.directional.positions,r=o.point.colors,s=o.point.positions,t=o.point.distances,u=o.spot.colors,v=o.spot.positions,w=o.spot.distances,x=o.spot.directions,y=o.spot.anglesCos,z=o.spot.exponents,A=o.hemi.skyColors,B=o.hemi.groundColors,C=o.hemi.positions,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;for(c=0,d=b.length;d>c;c++)if(e=b[c],!e.onlyShadow)if(f=e.color,i=e.intensity,k=e.distance,e instanceof a.AmbientLight){if(!e.visible)continue;Ma.gammaInput?(l+=f.r*f.r,m+=f.g*f.g,n+=f.b*f.b):(l+=f.r,m+=f.g,n+=f.b)}else if(e instanceof a.DirectionalLight){if(H+=1,!e.visible)continue;qb.setFromMatrixPosition(e.matrixWorld),pb.setFromMatrixPosition(e.target.matrixWorld),qb.sub(pb),qb.normalize(),L=3*D,q[L]=qb.x,q[L+1]=qb.y,q[L+2]=qb.z,Ma.gammaInput?ba(p,L,f,i*i):ca(p,L,f,i),D+=1}else if(e instanceof a.PointLight){if(I+=1,!e.visible)continue;M=3*E,Ma.gammaInput?ba(r,M,f,i*i):ca(r,M,f,i),pb.setFromMatrixPosition(e.matrixWorld),s[M]=pb.x,s[M+1]=pb.y,s[M+2]=pb.z,t[E]=k,E+=1}else if(e instanceof a.SpotLight){if(J+=1,!e.visible)continue;N=3*F,Ma.gammaInput?ba(u,N,f,i*i):ca(u,N,f,i),qb.setFromMatrixPosition(e.matrixWorld),v[N]=qb.x,v[N+1]=qb.y,v[N+2]=qb.z,w[F]=k,pb.setFromMatrixPosition(e.target.matrixWorld),qb.sub(pb),qb.normalize(),x[N]=qb.x,x[N+1]=qb.y,x[N+2]=qb.z,y[F]=Math.cos(e.angle),z[F]=e.exponent,F+=1}else if(e instanceof a.HemisphereLight){if(K+=1,!e.visible)continue;qb.setFromMatrixPosition(e.matrixWorld),qb.normalize(),O=3*G,C[O]=qb.x,C[O+1]=qb.y,C[O+2]=qb.z,g=e.color,h=e.groundColor,Ma.gammaInput?(j=i*i,ba(A,O,g,j),ba(B,O,h,j)):(ca(A,O,g,i),ca(B,O,h,i)),G+=1}for(c=3*D,d=Math.max(p.length,3*H);d>c;c++)p[c]=0;for(c=3*E,d=Math.max(r.length,3*I);d>c;c++)r[c]=0;for(c=3*F,d=Math.max(u.length,3*J);d>c;c++)u[c]=0;for(c=3*G,d=Math.max(A.length,3*K);d>c;c++)A[c]=0;for(c=3*G,d=Math.max(B.length,3*K);d>c;c++)B[c]=0;o.directional.length=D,o.point.length=E,o.spot.length=F,o.hemi.length=G,o.ambient[0]=l,o.ambient[1]=m,o.ambient[2]=n}function ea(a){a!==db&&(La.lineWidth(a),db=a)}function fa(a,b,c){ab!==a&&(a?La.enable(La.POLYGON_OFFSET_FILL):La.disable(La.POLYGON_OFFSET_FILL),ab=a),!a||bb===b&&cb===c||(La.polygonOffset(b,c),bb=b,cb=c)}function ga(b,c,d){var e;d?(La.texParameteri(b,La.TEXTURE_WRAP_S,oa(c.wrapS)),La.texParameteri(b,La.TEXTURE_WRAP_T,oa(c.wrapT)),La.texParameteri(b,La.TEXTURE_MAG_FILTER,oa(c.magFilter)),La.texParameteri(b,La.TEXTURE_MIN_FILTER,oa(c.minFilter))):(La.texParameteri(b,La.TEXTURE_WRAP_S,La.CLAMP_TO_EDGE),La.texParameteri(b,La.TEXTURE_WRAP_T,La.CLAMP_TO_EDGE),La.texParameteri(b,La.TEXTURE_MAG_FILTER,na(c.magFilter)),La.texParameteri(b,La.TEXTURE_MIN_FILTER,na(c.minFilter))),e=vb.get("EXT_texture_filter_anisotropic"),e&&c.type!==a.FloatType&&(c.anisotropy>1||c.__oldAnisotropy)&&(La.texParameterf(b,e.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(c.anisotropy,Ma.getMaxAnisotropy())),c.__oldAnisotropy=c.anisotropy)}function ha(a,b){if(a.width>b||a.height>b){var c=b/Math.max(a.width,a.height),d=document.createElement("canvas");d.width=Math.floor(a.width*c),d.height=Math.floor(a.height*c);var e=d.getContext("2d");return e.drawImage(a,0,0,a.width,a.height,0,0,d.width,d.height),console.log("THREE.WebGLRenderer:",a,"is too big ("+a.width+"x"+a.height+"). Resized to "+d.width+"x"+d.height+"."),d}return a}function ia(b,c){if(6===b.image.length)if(b.needsUpdate){b.image.__webglTextureCube||(b.addEventListener("dispose",Ob),b.image.__webglTextureCube=La.createTexture(),Ma.info.memory.textures++),La.activeTexture(La.TEXTURE0+c),La.bindTexture(La.TEXTURE_CUBE_MAP,b.image.__webglTextureCube),La.pixelStorei(La.UNPACK_FLIP_Y_WEBGL,b.flipY);for(var d=b instanceof a.CompressedTexture,e=b.image[0]instanceof a.DataTexture,f=[],g=0;6>g;g++)!Ma.autoScaleCubemaps||d||e?f[g]=e?b.image[g].image:b.image[g]:f[g]=ha(b.image[g],zb);var h=f[0],i=a.Math.isPowerOfTwo(h.width)&&a.Math.isPowerOfTwo(h.height),j=oa(b.format),k=oa(b.type);ga(La.TEXTURE_CUBE_MAP,b,i);for(var g=0;6>g;g++)if(d)for(var l,m=f[g].mipmaps,n=0,o=m.length;o>n;n++)l=m[n],b.format!==a.RGBAFormat&&b.format!==a.RGBFormat?Gb().indexOf(j)>-1?La.compressedTexImage2D(La.TEXTURE_CUBE_MAP_POSITIVE_X+g,n,j,l.width,l.height,0,l.data):console.warn("Attempt to load unsupported compressed texture format"):La.texImage2D(La.TEXTURE_CUBE_MAP_POSITIVE_X+g,n,j,l.width,l.height,0,j,k,l.data);else e?La.texImage2D(La.TEXTURE_CUBE_MAP_POSITIVE_X+g,0,j,f[g].width,f[g].height,0,j,k,f[g].data):La.texImage2D(La.TEXTURE_CUBE_MAP_POSITIVE_X+g,0,j,j,k,f[g]);b.generateMipmaps&&i&&La.generateMipmap(La.TEXTURE_CUBE_MAP),b.needsUpdate=!1,b.onUpdate&&b.onUpdate()}else La.activeTexture(La.TEXTURE0+c),La.bindTexture(La.TEXTURE_CUBE_MAP,b.image.__webglTextureCube)}function ja(a,b){La.activeTexture(La.TEXTURE0+b),La.bindTexture(La.TEXTURE_CUBE_MAP,a.__webglTexture)}function ka(a,b,c){La.bindFramebuffer(La.FRAMEBUFFER,a),La.framebufferTexture2D(La.FRAMEBUFFER,La.COLOR_ATTACHMENT0,c,b.__webglTexture,0)}function la(a,b){La.bindRenderbuffer(La.RENDERBUFFER,a),b.depthBuffer&&!b.stencilBuffer?(La.renderbufferStorage(La.RENDERBUFFER,La.DEPTH_COMPONENT16,b.width,b.height),La.framebufferRenderbuffer(La.FRAMEBUFFER,La.DEPTH_ATTACHMENT,La.RENDERBUFFER,a)):b.depthBuffer&&b.stencilBuffer?(La.renderbufferStorage(La.RENDERBUFFER,La.DEPTH_STENCIL,b.width,b.height),La.framebufferRenderbuffer(La.FRAMEBUFFER,La.DEPTH_STENCIL_ATTACHMENT,La.RENDERBUFFER,a)):La.renderbufferStorage(La.RENDERBUFFER,La.RGBA4,b.width,b.height)}function ma(b){b instanceof a.WebGLRenderTargetCube?(La.bindTexture(La.TEXTURE_CUBE_MAP,b.__webglTexture),La.generateMipmap(La.TEXTURE_CUBE_MAP),La.bindTexture(La.TEXTURE_CUBE_MAP,null)):(La.bindTexture(La.TEXTURE_2D,b.__webglTexture),La.generateMipmap(La.TEXTURE_2D),La.bindTexture(La.TEXTURE_2D,null))}function na(b){return b===a.NearestFilter||b===a.NearestMipMapNearestFilter||b===a.NearestMipMapLinearFilter?La.NEAREST:La.LINEAR}function oa(b){var c;if(b===a.RepeatWrapping)return La.REPEAT;if(b===a.ClampToEdgeWrapping)return La.CLAMP_TO_EDGE;if(b===a.MirroredRepeatWrapping)return La.MIRRORED_REPEAT;if(b===a.NearestFilter)return La.NEAREST;if(b===a.NearestMipMapNearestFilter)return La.NEAREST_MIPMAP_NEAREST;if(b===a.NearestMipMapLinearFilter)return La.NEAREST_MIPMAP_LINEAR;if(b===a.LinearFilter)return La.LINEAR;if(b===a.LinearMipMapNearestFilter)return La.LINEAR_MIPMAP_NEAREST;if(b===a.LinearMipMapLinearFilter)return La.LINEAR_MIPMAP_LINEAR;if(b===a.UnsignedByteType)return La.UNSIGNED_BYTE;if(b===a.UnsignedShort4444Type)return La.UNSIGNED_SHORT_4_4_4_4;if(b===a.UnsignedShort5551Type)return La.UNSIGNED_SHORT_5_5_5_1;if(b===a.UnsignedShort565Type)return La.UNSIGNED_SHORT_5_6_5;if(b===a.ByteType)return La.BYTE;if(b===a.ShortType)return La.SHORT;if(b===a.UnsignedShortType)return La.UNSIGNED_SHORT;if(b===a.IntType)return La.INT;if(b===a.UnsignedIntType)return La.UNSIGNED_INT;if(b===a.FloatType)return La.FLOAT;if(b===a.AlphaFormat)return La.ALPHA;if(b===a.RGBFormat)return La.RGB;if(b===a.RGBAFormat)return La.RGBA;if(b===a.LuminanceFormat)return La.LUMINANCE;if(b===a.LuminanceAlphaFormat)return La.LUMINANCE_ALPHA;if(b===a.AddEquation)return La.FUNC_ADD;if(b===a.SubtractEquation)return La.FUNC_SUBTRACT;if(b===a.ReverseSubtractEquation)return La.FUNC_REVERSE_SUBTRACT;if(b===a.ZeroFactor)return La.ZERO;if(b===a.OneFactor)return La.ONE;if(b===a.SrcColorFactor)return La.SRC_COLOR;if(b===a.OneMinusSrcColorFactor)return La.ONE_MINUS_SRC_COLOR;if(b===a.SrcAlphaFactor)return La.SRC_ALPHA;if(b===a.OneMinusSrcAlphaFactor)return La.ONE_MINUS_SRC_ALPHA;if(b===a.DstAlphaFactor)return La.DST_ALPHA;if(b===a.OneMinusDstAlphaFactor)return La.ONE_MINUS_DST_ALPHA;if(b===a.DstColorFactor)return La.DST_COLOR;if(b===a.OneMinusDstColorFactor)return La.ONE_MINUS_DST_COLOR;if(b===a.SrcAlphaSaturateFactor)return La.SRC_ALPHA_SATURATE;if(c=vb.get("WEBGL_compressed_texture_s3tc"),null!==c){if(b===a.RGB_S3TC_DXT1_Format)return c.COMPRESSED_RGB_S3TC_DXT1_EXT;if(b===a.RGBA_S3TC_DXT1_Format)return c.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(b===a.RGBA_S3TC_DXT3_Format)return c.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(b===a.RGBA_S3TC_DXT5_Format)return c.COMPRESSED_RGBA_S3TC_DXT5_EXT}if(c=vb.get("WEBGL_compressed_texture_pvrtc"),null!==c){if(b===a.RGB_PVRTC_4BPPV1_Format)return c.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(b===a.RGB_PVRTC_2BPPV1_Format)return c.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(b===a.RGBA_PVRTC_4BPPV1_Format)return c.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(b===a.RGBA_PVRTC_2BPPV1_Format)return c.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(c=vb.get("EXT_blend_minmax"),null!==c){if(b===a.MinEquation)return c.MIN_EXT;if(b===a.MaxEquation)return c.MAX_EXT}return 0}function pa(b){if(Bb&&b&&b.skeleton&&b.skeleton.useVertexTexture)return 1024;var c=La.getParameter(La.MAX_VERTEX_UNIFORM_VECTORS),d=Math.floor((c-20)/4),e=d;return void 0!==b&&b instanceof a.SkinnedMesh&&(e=Math.min(b.skeleton.bones.length,e),eg;g++){var i=b[g];i.onlyShadow||i.visible===!1||(i instanceof a.DirectionalLight&&c++,i instanceof a.PointLight&&d++,i instanceof a.SpotLight&&e++,i instanceof a.HemisphereLight&&f++)}return{directional:c,point:d,spot:e,hemi:f}}function ra(b){for(var c=0,d=0,e=b.length;e>d;d++){var f=b[d];f.castShadow&&(f instanceof a.SpotLight&&c++,f instanceof a.DirectionalLight&&!f.shadowCascade&&c++)}return c}console.log("THREE.WebGLRenderer",a.REVISION),b=b||{};var sa=void 0!==b.canvas?b.canvas:document.createElement("canvas"),ta=void 0!==b.context?b.context:null,ua=void 0!==b.precision?b.precision:"highp",va=void 0!==b.alpha?b.alpha:!1,wa=void 0!==b.depth?b.depth:!0,xa=void 0!==b.stencil?b.stencil:!0,ya=void 0!==b.antialias?b.antialias:!1,za=void 0!==b.premultipliedAlpha?b.premultipliedAlpha:!0,Aa=void 0!==b.preserveDrawingBuffer?b.preserveDrawingBuffer:!1,Ba=void 0!==b.logarithmicDepthBuffer?b.logarithmicDepthBuffer:!1,Ca=new a.Color(0),Da=0,Ea=[],Fa={},Ga=[],Ha=[],Ia=[],Ja=[],Ka=[];this.domElement=sa,this.context=null,this.devicePixelRatio=void 0!==b.devicePixelRatio?b.devicePixelRatio:void 0!==self.devicePixelRatio?self.devicePixelRatio:1,this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.gammaInput=!1,this.gammaOutput=!1,this.shadowMapEnabled=!1,this.shadowMapType=a.PCFShadowMap,this.shadowMapCullFace=a.CullFaceFront,this.shadowMapDebug=!1,this.shadowMapCascade=!1,this.maxMorphTargets=8,this.maxMorphNormals=4,this.autoScaleCubemaps=!0,this.info={memory:{programs:0,geometries:0,textures:0},render:{calls:0,vertices:0,faces:0,points:0}};var La,Ma=this,Na=[],Oa=null,Pa=null,Qa=-1,Ra=-1,Sa=null,Ta=0,Ua=-1,Va=-1,Wa=-1,Xa=-1,Ya=-1,Za=-1,$a=-1,_a=-1,ab=null,bb=null,cb=null,db=null,eb=0,fb=0,gb=sa.width,hb=sa.height,ib=0,jb=0,kb=new Uint8Array(16),lb=new Uint8Array(16),mb=new a.Frustum,nb=new a.Matrix4,ob=new a.Matrix4,pb=new a.Vector3,qb=new a.Vector3,rb=!0,sb={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]},spot:{length:0,colors:[],positions:[],distances:[],directions:[],anglesCos:[],exponents:[]},hemi:{length:0,skyColors:[],groundColors:[],positions:[]}};try{var tb={alpha:va,depth:wa,stencil:xa,antialias:ya,premultipliedAlpha:za,preserveDrawingBuffer:Aa};if(La=ta||sa.getContext("webgl",tb)||sa.getContext("experimental-webgl",tb),null===La)throw null!==sa.getContext("webgl")?"Error creating WebGL context with your selected attributes.":"Error creating WebGL context."}catch(ub){console.error(ub)}void 0===La.getShaderPrecisionFormat&&(La.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}});var vb=new a.WebGLExtensions(La);vb.get("OES_texture_float"),vb.get("OES_texture_float_linear"),vb.get("OES_standard_derivatives"),Ba&&vb.get("EXT_frag_depth"),c(),this.context=La;var wb=La.getParameter(La.MAX_TEXTURE_IMAGE_UNITS),xb=La.getParameter(La.MAX_VERTEX_TEXTURE_IMAGE_UNITS),yb=La.getParameter(La.MAX_TEXTURE_SIZE),zb=La.getParameter(La.MAX_CUBE_MAP_TEXTURE_SIZE),Ab=xb>0,Bb=Ab&&vb.get("OES_texture_float"),Cb=La.getShaderPrecisionFormat(La.VERTEX_SHADER,La.HIGH_FLOAT),Db=La.getShaderPrecisionFormat(La.VERTEX_SHADER,La.MEDIUM_FLOAT),Eb=(La.getShaderPrecisionFormat(La.VERTEX_SHADER,La.LOW_FLOAT),La.getShaderPrecisionFormat(La.FRAGMENT_SHADER,La.HIGH_FLOAT)),Fb=La.getShaderPrecisionFormat(La.FRAGMENT_SHADER,La.MEDIUM_FLOAT),Gb=(La.getShaderPrecisionFormat(La.FRAGMENT_SHADER,La.LOW_FLOAT),function(){var a;return function(){if(void 0!==a)return a;if(a=[],vb.get("WEBGL_compressed_texture_pvrtc")||vb.get("WEBGL_compressed_texture_s3tc"))for(var b=La.getParameter(La.COMPRESSED_TEXTURE_FORMATS),c=0;c0&&Eb.precision>0,Ib=Db.precision>0&&Fb.precision>0;"highp"!==ua||Hb||(Ib?(ua="mediump",console.warn("THREE.WebGLRenderer: highp not supported, using mediump.")):(ua="lowp",console.warn("THREE.WebGLRenderer: highp and mediump not supported, using lowp."))),"mediump"!==ua||Ib||(ua="lowp",console.warn("THREE.WebGLRenderer: mediump not supported, using lowp."));var Jb=new a.ShadowMapPlugin(this,Ea,Fa,Ga),Kb=new a.SpritePlugin(this,Ja),Lb=new a.LensFlarePlugin(this,Ka);this.getContext=function(){return La},this.supportsVertexTextures=function(){return Ab},this.supportsFloatTextures=function(){return vb.get("OES_texture_float")},this.supportsStandardDerivatives=function(){return vb.get("OES_standard_derivatives")},this.supportsCompressedTextureS3TC=function(){return vb.get("WEBGL_compressed_texture_s3tc")},this.supportsCompressedTexturePVRTC=function(){return vb.get("WEBGL_compressed_texture_pvrtc")},this.supportsBlendMinMax=function(){return vb.get("EXT_blend_minmax")},this.getMaxAnisotropy=function(){var a;return function(){if(void 0!==a)return a;var b=vb.get("EXT_texture_filter_anisotropic");return a=null!==b?La.getParameter(b.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0}}(),this.getPrecision=function(){return ua},this.setSize=function(a,b,c){sa.width=a*this.devicePixelRatio,sa.height=b*this.devicePixelRatio,c!==!1&&(sa.style.width=a+"px",sa.style.height=b+"px"),this.setViewport(0,0,a,b)},this.setViewport=function(a,b,c,d){eb=a*this.devicePixelRatio,fb=b*this.devicePixelRatio,gb=c*this.devicePixelRatio,hb=d*this.devicePixelRatio,La.viewport(eb,fb,gb,hb)},this.setScissor=function(a,b,c,d){La.scissor(a*this.devicePixelRatio,b*this.devicePixelRatio,c*this.devicePixelRatio,d*this.devicePixelRatio)},this.enableScissorTest=function(a){a?La.enable(La.SCISSOR_TEST):La.disable(La.SCISSOR_TEST)},this.setClearColor=function(a,b){Ca.set(a),Da=void 0!==b?b:1,La.clearColor(Ca.r,Ca.g,Ca.b,Da)},this.setClearColorHex=function(a,b){console.warn("THREE.WebGLRenderer: .setClearColorHex() is being removed. Use .setClearColor() instead."),this.setClearColor(a,b)},this.getClearColor=function(){return Ca},this.getClearAlpha=function(){return Da},this.clear=function(a,b,c){var d=0;(void 0===a||a)&&(d|=La.COLOR_BUFFER_BIT),(void 0===b||b)&&(d|=La.DEPTH_BUFFER_BIT),(void 0===c||c)&&(d|=La.STENCIL_BUFFER_BIT),La.clear(d)},this.clearColor=function(){La.clear(La.COLOR_BUFFER_BIT)},this.clearDepth=function(){La.clear(La.DEPTH_BUFFER_BIT)},this.clearStencil=function(){La.clear(La.STENCIL_BUFFER_BIT)},this.clearTarget=function(a,b,c,d){this.setRenderTarget(a),this.clear(b,c,d)},this.resetGLState=function(){Oa=null,Sa=null,Wa=-1,$a=-1,_a=-1,Ua=-1,Va=-1,Ra=-1,Qa=-1,rb=!0};var Mb=function(a){var b=a.target;b.traverse(function(a){a.removeEventListener("remove",Mb),L(a)})},Nb=function(a){var b=a.target;b.removeEventListener("dispose",Nb),Sb(b)},Ob=function(a){var b=a.target;b.removeEventListener("dispose",Ob),Tb(b),Ma.info.memory.textures--},Pb=function(a){var b=a.target;b.removeEventListener("dispose",Pb),Ub(b),Ma.info.memory.textures--},Qb=function(a){var b=a.target;b.removeEventListener("dispose",Qb),Vb(b)},Rb=function(a){for(var b=["__webglVertexBuffer","__webglNormalBuffer","__webglTangentBuffer","__webglColorBuffer","__webglUVBuffer","__webglUV2Buffer","__webglSkinIndicesBuffer","__webglSkinWeightsBuffer","__webglFaceBuffer","__webglLineBuffer","__webglLineDistanceBuffer"],c=0,d=b.length;d>c;c++){var e=b[c];void 0!==a[e]&&(La.deleteBuffer(a[e]),delete a[e])}if(void 0!==a.__webglCustomAttributesList){for(var e in a.__webglCustomAttributesList)La.deleteBuffer(a.__webglCustomAttributesList[e].buffer);delete a.__webglCustomAttributesList}Ma.info.memory.geometries--},Sb=function(b){if(delete b.__webglInit,b instanceof a.BufferGeometry){for(var c in b.attributes){var d=b.attributes[c];void 0!==d.buffer&&(La.deleteBuffer(d.buffer),delete d.buffer)}Ma.info.memory.geometries--}else{var e=Wb[b.id];if(void 0!==e){for(var f=0,g=e.length;g>f;f++){var h=e[f];if(void 0!==h.numMorphTargets){for(var i=0,j=h.numMorphTargets;j>i;i++)La.deleteBuffer(h.__webglMorphTargetsBuffers[i]);delete h.__webglMorphTargetsBuffers}if(void 0!==h.numMorphNormals){for(var i=0,j=h.numMorphNormals;j>i;i++)La.deleteBuffer(h.__webglMorphNormalsBuffers[i]);delete h.__webglMorphNormalsBuffers}Rb(h)}delete Wb[b.id]}else Rb(b)}Ra=-1},Tb=function(a){if(a.image&&a.image.__webglTextureCube)La.deleteTexture(a.image.__webglTextureCube),delete a.image.__webglTextureCube;else{if(void 0===a.__webglInit)return;La.deleteTexture(a.__webglTexture),delete a.__webglTexture,delete a.__webglInit}},Ub=function(b){if(b&&void 0!==b.__webglTexture){if(La.deleteTexture(b.__webglTexture),delete b.__webglTexture,b instanceof a.WebGLRenderTargetCube)for(var c=0;6>c;c++)La.deleteFramebuffer(b.__webglFramebuffer[c]),La.deleteRenderbuffer(b.__webglRenderbuffer[c]);else La.deleteFramebuffer(b.__webglFramebuffer),La.deleteRenderbuffer(b.__webglRenderbuffer);delete b.__webglFramebuffer,delete b.__webglRenderbuffer}},Vb=function(a){var b=a.program.program;if(void 0!==b){a.program=void 0;var c,d,e,f=!1;for(c=0,d=Na.length;d>c;c++)if(e=Na[c],e.program===b){e.usedTimes--,0===e.usedTimes&&(f=!0);break}if(f===!0){var g=[];for(c=0,d=Na.length;d>c;c++)e=Na[c],e.program!==b&&g.push(e);Na=g,La.deleteProgram(b),Ma.info.memory.programs--}}};this.renderBufferImmediate=function(b,c,d){if(r(),b.hasPositions&&!b.__webglVertexBuffer&&(b.__webglVertexBuffer=La.createBuffer()),b.hasNormals&&!b.__webglNormalBuffer&&(b.__webglNormalBuffer=La.createBuffer()),b.hasUvs&&!b.__webglUvBuffer&&(b.__webglUvBuffer=La.createBuffer()),b.hasColors&&!b.__webglColorBuffer&&(b.__webglColorBuffer=La.createBuffer()),b.hasPositions&&(La.bindBuffer(La.ARRAY_BUFFER,b.__webglVertexBuffer),La.bufferData(La.ARRAY_BUFFER,b.positionArray,La.DYNAMIC_DRAW),s(c.attributes.position),La.vertexAttribPointer(c.attributes.position,3,La.FLOAT,!1,0,0)),b.hasNormals){if(La.bindBuffer(La.ARRAY_BUFFER,b.__webglNormalBuffer),d.shading===a.FlatShading){var e,f,g,h,i,j,k,l,m,n,o,p,q,u,v=3*b.count;for(u=0;v>u;u+=9)q=b.normalArray,h=q[u],k=q[u+1],n=q[u+2],i=q[u+3],l=q[u+4],o=q[u+5],j=q[u+6],m=q[u+7],p=q[u+8],e=(h+i+j)/3,f=(k+l+m)/3,g=(n+o+p)/3,q[u]=e,q[u+1]=f,q[u+2]=g,q[u+3]=e,q[u+4]=f,q[u+5]=g,q[u+6]=e,q[u+7]=f,q[u+8]=g}La.bufferData(La.ARRAY_BUFFER,b.normalArray,La.DYNAMIC_DRAW),s(c.attributes.normal),La.vertexAttribPointer(c.attributes.normal,3,La.FLOAT,!1,0,0)}b.hasUvs&&d.map&&(La.bindBuffer(La.ARRAY_BUFFER,b.__webglUvBuffer),La.bufferData(La.ARRAY_BUFFER,b.uvArray,La.DYNAMIC_DRAW),s(c.attributes.uv),La.vertexAttribPointer(c.attributes.uv,2,La.FLOAT,!1,0,0)),b.hasColors&&d.vertexColors!==a.NoColors&&(La.bindBuffer(La.ARRAY_BUFFER,b.__webglColorBuffer),La.bufferData(La.ARRAY_BUFFER,b.colorArray,La.DYNAMIC_DRAW),s(c.attributes.color),La.vertexAttribPointer(c.attributes.color,3,La.FLOAT,!1,0,0)),t(),La.drawArrays(La.TRIANGLES,0,b.count),b.count=0},this.renderBufferDirect=function(b,c,d,e,f,g){if(e.visible!==!1){var h=O(b,c,d,e,g),i=!1,j=e.wireframe?1:0,k=16777215*f.id+2*h.id+j;if(k!==Ra&&(Ra=k,i=!0),i&&r(),g instanceof a.Mesh){var l=e.wireframe===!0?La.LINES:La.TRIANGLES,m=f.attributes.index;if(m){var n,o;m.array instanceof Uint32Array&&vb.get("OES_element_index_uint")?(n=La.UNSIGNED_INT,o=4):(n=La.UNSIGNED_SHORT,o=2);var p=f.offsets;if(0===p.length)i&&(q(e,h,f,0),La.bindBuffer(La.ELEMENT_ARRAY_BUFFER,m.buffer)),La.drawElements(l,m.array.length,n,0),Ma.info.render.calls++,Ma.info.render.vertices+=m.array.length,Ma.info.render.faces+=m.array.length/3;else{i=!0;for(var s=0,t=p.length;t>s;s++){var u=p[s].index;i&&(q(e,h,f,u),La.bindBuffer(La.ELEMENT_ARRAY_BUFFER,m.buffer)),La.drawElements(l,p[s].count,n,p[s].start*o),Ma.info.render.calls++,Ma.info.render.vertices+=p[s].count,Ma.info.render.faces+=p[s].count/3}}}else{i&&q(e,h,f,0);var v=f.attributes.position;La.drawArrays(l,0,v.array.length/3),Ma.info.render.calls++,Ma.info.render.vertices+=v.array.length/3,Ma.info.render.faces+=v.array.length/9}}else if(g instanceof a.PointCloud){i&&q(e,h,f,0);var v=f.attributes.position;La.drawArrays(La.POINTS,0,v.array.length/3),Ma.info.render.calls++,Ma.info.render.points+=v.array.length/3}else if(g instanceof a.Line){var l=g.mode===a.LineStrip?La.LINE_STRIP:La.LINES;ea(e.linewidth);var m=f.attributes.index;if(m){var n,o;m.array instanceof Uint32Array?(n=La.UNSIGNED_INT,o=4):(n=La.UNSIGNED_SHORT,o=2);var p=f.offsets;if(0===p.length)i&&(q(e,h,f,0),La.bindBuffer(La.ELEMENT_ARRAY_BUFFER,m.buffer)),La.drawElements(l,m.array.length,n,0),Ma.info.render.calls++,Ma.info.render.vertices+=m.array.length;else{p.length>1&&(i=!0);for(var s=0,t=p.length;t>s;s++){var u=p[s].index;i&&(q(e,h,f,u),La.bindBuffer(La.ELEMENT_ARRAY_BUFFER,m.buffer)),La.drawElements(l,p[s].count,n,p[s].start*o),Ma.info.render.calls++,Ma.info.render.vertices+=p[s].count}}}else{i&&q(e,h,f,0);var v=f.attributes.position;La.drawArrays(l,0,v.array.length/3),Ma.info.render.calls++,Ma.info.render.points+=v.array.length/3}}}},this.renderBuffer=function(b,c,d,e,f,g){if(e.visible!==!1){var h=O(b,c,d,e,g),i=h.attributes,j=!1,k=e.wireframe?1:0,l=16777215*f.id+2*h.id+k;if(l!==Ra&&(Ra=l,j=!0),j&&r(),!e.morphTargets&&i.position>=0?j&&(La.bindBuffer(La.ARRAY_BUFFER,f.__webglVertexBuffer),s(i.position),La.vertexAttribPointer(i.position,3,La.FLOAT,!1,0,0)):g.morphTargetBase&&u(e,f,g),j){if(f.__webglCustomAttributesList)for(var m=0,n=f.__webglCustomAttributesList.length;n>m;m++){var o=f.__webglCustomAttributesList[m];i[o.buffer.belongsToAttribute]>=0&&(La.bindBuffer(La.ARRAY_BUFFER,o.buffer),s(i[o.buffer.belongsToAttribute]),La.vertexAttribPointer(i[o.buffer.belongsToAttribute],o.size,La.FLOAT,!1,0,0))}i.color>=0&&(g.geometry.colors.length>0||g.geometry.faces.length>0?(La.bindBuffer(La.ARRAY_BUFFER,f.__webglColorBuffer),s(i.color),La.vertexAttribPointer(i.color,3,La.FLOAT,!1,0,0)):void 0!==e.defaultAttributeValues&&La.vertexAttrib3fv(i.color,e.defaultAttributeValues.color)),i.normal>=0&&(La.bindBuffer(La.ARRAY_BUFFER,f.__webglNormalBuffer),s(i.normal),La.vertexAttribPointer(i.normal,3,La.FLOAT,!1,0,0)),i.tangent>=0&&(La.bindBuffer(La.ARRAY_BUFFER,f.__webglTangentBuffer),s(i.tangent),La.vertexAttribPointer(i.tangent,4,La.FLOAT,!1,0,0)),i.uv>=0&&(g.geometry.faceVertexUvs[0]?(La.bindBuffer(La.ARRAY_BUFFER,f.__webglUVBuffer),s(i.uv),La.vertexAttribPointer(i.uv,2,La.FLOAT,!1,0,0)):void 0!==e.defaultAttributeValues&&La.vertexAttrib2fv(i.uv,e.defaultAttributeValues.uv)),i.uv2>=0&&(g.geometry.faceVertexUvs[1]?(La.bindBuffer(La.ARRAY_BUFFER,f.__webglUV2Buffer),s(i.uv2),La.vertexAttribPointer(i.uv2,2,La.FLOAT,!1,0,0)):void 0!==e.defaultAttributeValues&&La.vertexAttrib2fv(i.uv2,e.defaultAttributeValues.uv2)),e.skinning&&i.skinIndex>=0&&i.skinWeight>=0&&(La.bindBuffer(La.ARRAY_BUFFER,f.__webglSkinIndicesBuffer),s(i.skinIndex),La.vertexAttribPointer(i.skinIndex,4,La.FLOAT,!1,0,0),La.bindBuffer(La.ARRAY_BUFFER,f.__webglSkinWeightsBuffer),s(i.skinWeight),La.vertexAttribPointer(i.skinWeight,4,La.FLOAT,!1,0,0)),i.lineDistance>=0&&(La.bindBuffer(La.ARRAY_BUFFER,f.__webglLineDistanceBuffer),s(i.lineDistance),La.vertexAttribPointer(i.lineDistance,1,La.FLOAT,!1,0,0))}if(t(),g instanceof a.Mesh){var p=f.__typeArray===Uint32Array?La.UNSIGNED_INT:La.UNSIGNED_SHORT;e.wireframe?(ea(e.wireframeLinewidth),j&&La.bindBuffer(La.ELEMENT_ARRAY_BUFFER,f.__webglLineBuffer),La.drawElements(La.LINES,f.__webglLineCount,p,0)):(j&&La.bindBuffer(La.ELEMENT_ARRAY_BUFFER,f.__webglFaceBuffer),La.drawElements(La.TRIANGLES,f.__webglFaceCount,p,0)),Ma.info.render.calls++,Ma.info.render.vertices+=f.__webglFaceCount,Ma.info.render.faces+=f.__webglFaceCount/3}else if(g instanceof a.Line){var q=g.mode===a.LineStrip?La.LINE_STRIP:La.LINES;ea(e.linewidth),La.drawArrays(q,0,f.__webglLineCount),Ma.info.render.calls++}else g instanceof a.PointCloud&&(La.drawArrays(La.POINTS,0,f.__webglParticleCount),Ma.info.render.calls++,Ma.info.render.points+=f.__webglParticleCount)}},this.render=function(b,c,d,e){if(c instanceof a.Camera==!1)return void console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");var f=b.fog;Ra=-1,Qa=-1,Sa=null,rb=!0,b.autoUpdate===!0&&b.updateMatrixWorld(),void 0===c.parent&&c.updateMatrixWorld(),b.traverse(function(b){b instanceof a.SkinnedMesh&&b.skeleton.update()}),c.matrixWorldInverse.getInverse(c.matrixWorld),nb.multiplyMatrices(c.projectionMatrix,c.matrixWorldInverse),mb.setFromMatrix(nb),Ea.length=0,Ha.length=0,Ia.length=0,Ja.length=0,Ka.length=0,y(b,b),Ma.sortObjects===!0&&(Ha.sort(v),Ia.sort(w)),Jb.render(b,c),Ma.info.render.calls=0,Ma.info.render.vertices=0,Ma.info.render.faces=0,Ma.info.render.points=0,this.setRenderTarget(d),(this.autoClear||e)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil);for(var g=0,h=Ga.length;h>g;g++){var i=Ga[g],j=i.object;j.visible&&(aa(j,c),B(i))}if(b.overrideMaterial){var k=b.overrideMaterial;this.setBlending(k.blending,k.blendEquation,k.blendSrc,k.blendDst),this.setDepthTest(k.depthTest),this.setDepthWrite(k.depthWrite),fa(k.polygonOffset,k.polygonOffsetFactor,k.polygonOffsetUnits),z(Ha,c,Ea,f,!0,k),z(Ia,c,Ea,f,!0,k),A(Ga,"",c,Ea,f,!1,k)}else{var k=null;this.setBlending(a.NoBlending),z(Ha,c,Ea,f,!1,k),A(Ga,"opaque",c,Ea,f,!1,k),z(Ia,c,Ea,f,!0,k),A(Ga,"transparent",c,Ea,f,!0,k)}Kb.render(b,c),Lb.render(b,c,ib,jb),d&&d.generateMipmaps&&d.minFilter!==a.NearestFilter&&d.minFilter!==a.LinearFilter&&ma(d),this.setDepthTest(!0),this.setDepthWrite(!0)},this.renderImmediateObject=function(a,b,c,d,e){var f=O(a,b,c,d,e);Ra=-1,Ma.setMaterialFaces(d),e.immediateRenderCallback?e.immediateRenderCallback(f,La,mb):e.render(function(a){Ma.renderBufferImmediate(a,f,d)})};var Wb={},Xb=0;this.setFaceCulling=function(b,c){b===a.CullFaceNone?La.disable(La.CULL_FACE):(c===a.FrontFaceDirectionCW?La.frontFace(La.CW):La.frontFace(La.CCW),b===a.CullFaceBack?La.cullFace(La.BACK):b===a.CullFaceFront?La.cullFace(La.FRONT):La.cullFace(La.FRONT_AND_BACK),La.enable(La.CULL_FACE))},this.setMaterialFaces=function(b){var c=b.side===a.DoubleSide,d=b.side===a.BackSide;Ua!==c&&(c?La.disable(La.CULL_FACE):La.enable(La.CULL_FACE),Ua=c),Va!==d&&(d?La.frontFace(La.CW):La.frontFace(La.CCW),Va=d)},this.setDepthTest=function(a){$a!==a&&(a?La.enable(La.DEPTH_TEST):La.disable(La.DEPTH_TEST),$a=a)},this.setDepthWrite=function(a){_a!==a&&(La.depthMask(a),_a=a)},this.setBlending=function(b,c,d,e){b!==Wa&&(b===a.NoBlending?La.disable(La.BLEND):b===a.AdditiveBlending?(La.enable(La.BLEND),La.blendEquation(La.FUNC_ADD),La.blendFunc(La.SRC_ALPHA,La.ONE)):b===a.SubtractiveBlending?(La.enable(La.BLEND),La.blendEquation(La.FUNC_ADD),La.blendFunc(La.ZERO,La.ONE_MINUS_SRC_COLOR)):b===a.MultiplyBlending?(La.enable(La.BLEND),La.blendEquation(La.FUNC_ADD),La.blendFunc(La.ZERO,La.SRC_COLOR)):b===a.CustomBlending?La.enable(La.BLEND):(La.enable(La.BLEND),La.blendEquationSeparate(La.FUNC_ADD,La.FUNC_ADD),La.blendFuncSeparate(La.SRC_ALPHA,La.ONE_MINUS_SRC_ALPHA,La.ONE,La.ONE_MINUS_SRC_ALPHA)),Wa=b),b===a.CustomBlending?(c!==Xa&&(La.blendEquation(oa(c)),Xa=c),(d!==Ya||e!==Za)&&(La.blendFunc(oa(d),oa(e)),Ya=d,Za=e)):(Xa=null,Ya=null,Za=null)},this.uploadTexture=function(b){void 0===b.__webglInit&&(b.__webglInit=!0,b.addEventListener("dispose",Ob),b.__webglTexture=La.createTexture(),Ma.info.memory.textures++),La.bindTexture(La.TEXTURE_2D,b.__webglTexture),La.pixelStorei(La.UNPACK_FLIP_Y_WEBGL,b.flipY),La.pixelStorei(La.UNPACK_PREMULTIPLY_ALPHA_WEBGL,b.premultiplyAlpha),La.pixelStorei(La.UNPACK_ALIGNMENT,b.unpackAlignment),b.image=ha(b.image,yb);var c=b.image,d=a.Math.isPowerOfTwo(c.width)&&a.Math.isPowerOfTwo(c.height),e=oa(b.format),f=oa(b.type);ga(La.TEXTURE_2D,b,d);var g,h=b.mipmaps;if(b instanceof a.DataTexture)if(h.length>0&&d){for(var i=0,j=h.length;j>i;i++)g=h[i],La.texImage2D(La.TEXTURE_2D,i,e,g.width,g.height,0,e,f,g.data);b.generateMipmaps=!1}else La.texImage2D(La.TEXTURE_2D,0,e,c.width,c.height,0,e,f,c.data);else if(b instanceof a.CompressedTexture)for(var i=0,j=h.length;j>i;i++)g=h[i],b.format!==a.RGBAFormat&&b.format!==a.RGBFormat?Gb().indexOf(e)>-1?La.compressedTexImage2D(La.TEXTURE_2D,i,e,g.width,g.height,0,g.data):console.warn("Attempt to load unsupported compressed texture format"):La.texImage2D(La.TEXTURE_2D,i,e,g.width,g.height,0,e,f,g.data);else if(h.length>0&&d){for(var i=0,j=h.length;j>i;i++)g=h[i],La.texImage2D(La.TEXTURE_2D,i,e,e,f,g);b.generateMipmaps=!1; +}else La.texImage2D(La.TEXTURE_2D,0,e,e,f,b.image);b.generateMipmaps&&d&&La.generateMipmap(La.TEXTURE_2D),b.needsUpdate=!1,b.onUpdate&&b.onUpdate()},this.setTexture=function(a,b){La.activeTexture(La.TEXTURE0+b),a.needsUpdate?Ma.uploadTexture(a):La.bindTexture(La.TEXTURE_2D,a.__webglTexture)},this.setRenderTarget=function(b){var c=b instanceof a.WebGLRenderTargetCube;if(b&&void 0===b.__webglFramebuffer){void 0===b.depthBuffer&&(b.depthBuffer=!0),void 0===b.stencilBuffer&&(b.stencilBuffer=!0),b.addEventListener("dispose",Pb),b.__webglTexture=La.createTexture(),Ma.info.memory.textures++;var d=a.Math.isPowerOfTwo(b.width)&&a.Math.isPowerOfTwo(b.height),e=oa(b.format),f=oa(b.type);if(c){b.__webglFramebuffer=[],b.__webglRenderbuffer=[],La.bindTexture(La.TEXTURE_CUBE_MAP,b.__webglTexture),ga(La.TEXTURE_CUBE_MAP,b,d);for(var g=0;6>g;g++)b.__webglFramebuffer[g]=La.createFramebuffer(),b.__webglRenderbuffer[g]=La.createRenderbuffer(),La.texImage2D(La.TEXTURE_CUBE_MAP_POSITIVE_X+g,0,e,b.width,b.height,0,e,f,null),ka(b.__webglFramebuffer[g],b,La.TEXTURE_CUBE_MAP_POSITIVE_X+g),la(b.__webglRenderbuffer[g],b);d&&La.generateMipmap(La.TEXTURE_CUBE_MAP)}else b.__webglFramebuffer=La.createFramebuffer(),b.shareDepthFrom?b.__webglRenderbuffer=b.shareDepthFrom.__webglRenderbuffer:b.__webglRenderbuffer=La.createRenderbuffer(),La.bindTexture(La.TEXTURE_2D,b.__webglTexture),ga(La.TEXTURE_2D,b,d),La.texImage2D(La.TEXTURE_2D,0,e,b.width,b.height,0,e,f,null),ka(b.__webglFramebuffer,b,La.TEXTURE_2D),b.shareDepthFrom?b.depthBuffer&&!b.stencilBuffer?La.framebufferRenderbuffer(La.FRAMEBUFFER,La.DEPTH_ATTACHMENT,La.RENDERBUFFER,b.__webglRenderbuffer):b.depthBuffer&&b.stencilBuffer&&La.framebufferRenderbuffer(La.FRAMEBUFFER,La.DEPTH_STENCIL_ATTACHMENT,La.RENDERBUFFER,b.__webglRenderbuffer):la(b.__webglRenderbuffer,b),d&&La.generateMipmap(La.TEXTURE_2D);c?La.bindTexture(La.TEXTURE_CUBE_MAP,null):La.bindTexture(La.TEXTURE_2D,null),La.bindRenderbuffer(La.RENDERBUFFER,null),La.bindFramebuffer(La.FRAMEBUFFER,null)}var h,i,j,k,l;b?(h=c?b.__webglFramebuffer[b.activeCubeFace]:b.__webglFramebuffer,i=b.width,j=b.height,k=0,l=0):(h=null,i=gb,j=hb,k=eb,l=fb),h!==Pa&&(La.bindFramebuffer(La.FRAMEBUFFER,h),La.viewport(k,l,i,j),Pa=h),ib=i,jb=j},this.initMaterial=function(){console.warn("THREE.WebGLRenderer: .initMaterial() has been removed.")},this.addPrePlugin=function(){console.warn("THREE.WebGLRenderer: .addPrePlugin() has been removed.")},this.addPostPlugin=function(){console.warn("THREE.WebGLRenderer: .addPostPlugin() has been removed.")},this.updateShadowMap=function(){console.warn("THREE.WebGLRenderer: .updateShadowMap() has been removed.")}},a.WebGLRenderTarget=function(b,c,d){this.width=b,this.height=c,d=d||{},this.wrapS=void 0!==d.wrapS?d.wrapS:a.ClampToEdgeWrapping,this.wrapT=void 0!==d.wrapT?d.wrapT:a.ClampToEdgeWrapping,this.magFilter=void 0!==d.magFilter?d.magFilter:a.LinearFilter,this.minFilter=void 0!==d.minFilter?d.minFilter:a.LinearMipMapLinearFilter,this.anisotropy=void 0!==d.anisotropy?d.anisotropy:1,this.offset=new a.Vector2(0,0),this.repeat=new a.Vector2(1,1),this.format=void 0!==d.format?d.format:a.RGBAFormat,this.type=void 0!==d.type?d.type:a.UnsignedByteType,this.depthBuffer=void 0!==d.depthBuffer?d.depthBuffer:!0,this.stencilBuffer=void 0!==d.stencilBuffer?d.stencilBuffer:!0,this.generateMipmaps=!0,this.shareDepthFrom=null},a.WebGLRenderTarget.prototype={constructor:a.WebGLRenderTarget,setSize:function(a,b){this.width=a,this.height=b},clone:function(){var b=new a.WebGLRenderTarget(this.width,this.height);return b.wrapS=this.wrapS,b.wrapT=this.wrapT,b.magFilter=this.magFilter,b.minFilter=this.minFilter,b.anisotropy=this.anisotropy,b.offset.copy(this.offset),b.repeat.copy(this.repeat),b.format=this.format,b.type=this.type,b.depthBuffer=this.depthBuffer,b.stencilBuffer=this.stencilBuffer,b.generateMipmaps=this.generateMipmaps,b.shareDepthFrom=this.shareDepthFrom,b},dispose:function(){this.dispatchEvent({type:"dispose"})}},a.EventDispatcher.prototype.apply(a.WebGLRenderTarget.prototype),a.WebGLRenderTargetCube=function(b,c,d){a.WebGLRenderTarget.call(this,b,c,d),this.activeCubeFace=0},a.WebGLRenderTargetCube.prototype=Object.create(a.WebGLRenderTarget.prototype),a.WebGLExtensions=function(a){var b={};this.get=function(c){if(void 0!==b[c])return b[c];var d;switch(c){case"OES_texture_float":d=a.getExtension("OES_texture_float");break;case"OES_texture_float_linear":d=a.getExtension("OES_texture_float_linear");break;case"OES_standard_derivatives":d=a.getExtension("OES_standard_derivatives");break;case"EXT_texture_filter_anisotropic":d=a.getExtension("EXT_texture_filter_anisotropic")||a.getExtension("MOZ_EXT_texture_filter_anisotropic")||a.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":d=a.getExtension("WEBGL_compressed_texture_s3tc")||a.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||a.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":d=a.getExtension("WEBGL_compressed_texture_pvrtc")||a.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;case"OES_element_index_uint":d=a.getExtension("OES_element_index_uint");break;case"EXT_blend_minmax":d=a.getExtension("EXT_blend_minmax");break;case"EXT_frag_depth":d=a.getExtension("EXT_frag_depth")}return null===d&&console.log("THREE.WebGLRenderer: "+c+" extension not supported."),b[c]=d,d}},a.WebGLProgram=function(){var b=0,c=function(a){var b,c,d=[];for(var e in a)b=a[e],b!==!1&&(c="#define "+e+" "+b,d.push(c));return d.join("\n")},d=function(a,b,c){for(var d={},e=0,f=c.length;f>e;e++){var g=c[e];d[g]=a.getUniformLocation(b,g)}return d},e=function(a,b,c){for(var d={},e=0,f=c.length;f>e;e++){var g=c[e];d[g]=a.getAttribLocation(b,g)}return d};return function(f,g,h,i){var j=f,k=j.context,l=h.defines,m=h.__webglShader.uniforms,n=h.attributes,o=h.__webglShader.vertexShader,p=h.__webglShader.fragmentShader,q=h.index0AttributeName;void 0===q&&i.morphTargets===!0&&(q="position");var r="SHADOWMAP_TYPE_BASIC";i.shadowMapType===a.PCFShadowMap?r="SHADOWMAP_TYPE_PCF":i.shadowMapType===a.PCFSoftShadowMap&&(r="SHADOWMAP_TYPE_PCF_SOFT");var s,t,u=c(l),v=k.createProgram();h instanceof a.RawShaderMaterial?(s="",t=""):(s=["precision "+i.precision+" float;","precision "+i.precision+" int;",u,i.supportsVertexTextures?"#define VERTEX_TEXTURES":"",j.gammaInput?"#define GAMMA_INPUT":"",j.gammaOutput?"#define GAMMA_OUTPUT":"","#define MAX_DIR_LIGHTS "+i.maxDirLights,"#define MAX_POINT_LIGHTS "+i.maxPointLights,"#define MAX_SPOT_LIGHTS "+i.maxSpotLights,"#define MAX_HEMI_LIGHTS "+i.maxHemiLights,"#define MAX_SHADOWS "+i.maxShadows,"#define MAX_BONES "+i.maxBones,i.map?"#define USE_MAP":"",i.envMap?"#define USE_ENVMAP":"",i.lightMap?"#define USE_LIGHTMAP":"",i.bumpMap?"#define USE_BUMPMAP":"",i.normalMap?"#define USE_NORMALMAP":"",i.specularMap?"#define USE_SPECULARMAP":"",i.alphaMap?"#define USE_ALPHAMAP":"",i.vertexColors?"#define USE_COLOR":"",i.skinning?"#define USE_SKINNING":"",i.useVertexTexture?"#define BONE_TEXTURE":"",i.morphTargets?"#define USE_MORPHTARGETS":"",i.morphNormals?"#define USE_MORPHNORMALS":"",i.wrapAround?"#define WRAP_AROUND":"",i.doubleSided?"#define DOUBLE_SIDED":"",i.flipSided?"#define FLIP_SIDED":"",i.shadowMapEnabled?"#define USE_SHADOWMAP":"",i.shadowMapEnabled?"#define "+r:"",i.shadowMapDebug?"#define SHADOWMAP_DEBUG":"",i.shadowMapCascade?"#define SHADOWMAP_CASCADE":"",i.sizeAttenuation?"#define USE_SIZEATTENUATION":"",i.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","attribute vec2 uv2;","#ifdef USE_COLOR"," attribute vec3 color;","#endif","#ifdef USE_MORPHTARGETS"," attribute vec3 morphTarget0;"," attribute vec3 morphTarget1;"," attribute vec3 morphTarget2;"," attribute vec3 morphTarget3;"," #ifdef USE_MORPHNORMALS"," attribute vec3 morphNormal0;"," attribute vec3 morphNormal1;"," attribute vec3 morphNormal2;"," attribute vec3 morphNormal3;"," #else"," attribute vec3 morphTarget4;"," attribute vec3 morphTarget5;"," attribute vec3 morphTarget6;"," attribute vec3 morphTarget7;"," #endif","#endif","#ifdef USE_SKINNING"," attribute vec4 skinIndex;"," attribute vec4 skinWeight;","#endif",""].join("\n"),t=["precision "+i.precision+" float;","precision "+i.precision+" int;",i.bumpMap||i.normalMap?"#extension GL_OES_standard_derivatives : enable":"",u,"#define MAX_DIR_LIGHTS "+i.maxDirLights,"#define MAX_POINT_LIGHTS "+i.maxPointLights,"#define MAX_SPOT_LIGHTS "+i.maxSpotLights,"#define MAX_HEMI_LIGHTS "+i.maxHemiLights,"#define MAX_SHADOWS "+i.maxShadows,i.alphaTest?"#define ALPHATEST "+i.alphaTest:"",j.gammaInput?"#define GAMMA_INPUT":"",j.gammaOutput?"#define GAMMA_OUTPUT":"",i.useFog&&i.fog?"#define USE_FOG":"",i.useFog&&i.fogExp?"#define FOG_EXP2":"",i.map?"#define USE_MAP":"",i.envMap?"#define USE_ENVMAP":"",i.lightMap?"#define USE_LIGHTMAP":"",i.bumpMap?"#define USE_BUMPMAP":"",i.normalMap?"#define USE_NORMALMAP":"",i.specularMap?"#define USE_SPECULARMAP":"",i.alphaMap?"#define USE_ALPHAMAP":"",i.vertexColors?"#define USE_COLOR":"",i.metal?"#define METAL":"",i.wrapAround?"#define WRAP_AROUND":"",i.doubleSided?"#define DOUBLE_SIDED":"",i.flipSided?"#define FLIP_SIDED":"",i.shadowMapEnabled?"#define USE_SHADOWMAP":"",i.shadowMapEnabled?"#define "+r:"",i.shadowMapDebug?"#define SHADOWMAP_DEBUG":"",i.shadowMapCascade?"#define SHADOWMAP_CASCADE":"",i.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;",""].join("\n"));var w=new a.WebGLShader(k,k.VERTEX_SHADER,s+o),x=new a.WebGLShader(k,k.FRAGMENT_SHADER,t+p);k.attachShader(v,w),k.attachShader(v,x),void 0!==q&&k.bindAttribLocation(v,0,q),k.linkProgram(v),k.getProgramParameter(v,k.LINK_STATUS)===!1&&(console.error("THREE.WebGLProgram: Could not initialise shader."),console.error("gl.VALIDATE_STATUS",k.getProgramParameter(v,k.VALIDATE_STATUS)),console.error("gl.getError()",k.getError())),""!==k.getProgramInfoLog(v)&&console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()",k.getProgramInfoLog(v)),k.deleteShader(w),k.deleteShader(x);var y=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","modelMatrix","cameraPosition","morphTargetInfluences","bindMatrix","bindMatrixInverse"];i.useVertexTexture?(y.push("boneTexture"),y.push("boneTextureWidth"),y.push("boneTextureHeight")):y.push("boneGlobalMatrices"),i.logarithmicDepthBuffer&&y.push("logDepthBufFC");for(var z in m)y.push(z);this.uniforms=d(k,v,y),y=["position","normal","uv","uv2","tangent","color","skinIndex","skinWeight","lineDistance"];for(var A=0;A0;var c;c=j?{vertexShader:["uniform lowp int renderType;","uniform vec3 screenPosition;","uniform vec2 scale;","uniform float rotation;","uniform sampler2D occlusionMap;","attribute vec2 position;","attribute vec2 uv;","varying vec2 vUV;","varying float vVisibility;","void main() {","vUV = uv;","vec2 pos = position;","if( renderType == 2 ) {","vec4 visibility = texture2D( occlusionMap, vec2( 0.1, 0.1 ) );","visibility += texture2D( occlusionMap, vec2( 0.5, 0.1 ) );","visibility += texture2D( occlusionMap, vec2( 0.9, 0.1 ) );","visibility += texture2D( occlusionMap, vec2( 0.9, 0.5 ) );","visibility += texture2D( occlusionMap, vec2( 0.9, 0.9 ) );","visibility += texture2D( occlusionMap, vec2( 0.5, 0.9 ) );","visibility += texture2D( occlusionMap, vec2( 0.1, 0.9 ) );","visibility += texture2D( occlusionMap, vec2( 0.1, 0.5 ) );","visibility += texture2D( occlusionMap, vec2( 0.5, 0.5 ) );","vVisibility = visibility.r / 9.0;","vVisibility *= 1.0 - visibility.g / 9.0;","vVisibility *= visibility.b / 9.0;","vVisibility *= 1.0 - visibility.a / 9.0;","pos.x = cos( rotation ) * position.x - sin( rotation ) * position.y;","pos.y = sin( rotation ) * position.x + cos( rotation ) * position.y;","}","gl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );","}"].join("\n"),fragmentShader:["uniform lowp int renderType;","uniform sampler2D map;","uniform float opacity;","uniform vec3 color;","varying vec2 vUV;","varying float vVisibility;","void main() {","if( renderType == 0 ) {","gl_FragColor = vec4( 1.0, 0.0, 1.0, 0.0 );","} else if( renderType == 1 ) {","gl_FragColor = texture2D( map, vUV );","} else {","vec4 texture = texture2D( map, vUV );","texture.a *= opacity * vVisibility;","gl_FragColor = texture;","gl_FragColor.rgb *= color;","}","}"].join("\n")}:{vertexShader:["uniform lowp int renderType;","uniform vec3 screenPosition;","uniform vec2 scale;","uniform float rotation;","attribute vec2 position;","attribute vec2 uv;","varying vec2 vUV;","void main() {","vUV = uv;","vec2 pos = position;","if( renderType == 2 ) {","pos.x = cos( rotation ) * position.x - sin( rotation ) * position.y;","pos.y = sin( rotation ) * position.x + cos( rotation ) * position.y;","}","gl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );","}"].join("\n"),fragmentShader:["precision mediump float;","uniform lowp int renderType;","uniform sampler2D map;","uniform sampler2D occlusionMap;","uniform float opacity;","uniform vec3 color;","varying vec2 vUV;","void main() {","if( renderType == 0 ) {","gl_FragColor = vec4( texture2D( map, vUV ).rgb, 0.0 );","} else if( renderType == 1 ) {","gl_FragColor = texture2D( map, vUV );","} else {","float visibility = texture2D( occlusionMap, vec2( 0.5, 0.1 ) ).a;","visibility += texture2D( occlusionMap, vec2( 0.9, 0.5 ) ).a;","visibility += texture2D( occlusionMap, vec2( 0.5, 0.9 ) ).a;","visibility += texture2D( occlusionMap, vec2( 0.1, 0.5 ) ).a;","visibility = ( 1.0 - visibility / 4.0 );","vec4 texture = texture2D( map, vUV );","texture.a *= opacity * visibility;","gl_FragColor = texture;","gl_FragColor.rgb *= color;","}","}"].join("\n")},g=d(c),h={vertex:m.getAttribLocation(g,"position"),uv:m.getAttribLocation(g,"uv")},i={renderType:m.getUniformLocation(g,"renderType"),map:m.getUniformLocation(g,"map"),occlusionMap:m.getUniformLocation(g,"occlusionMap"),opacity:m.getUniformLocation(g,"opacity"),color:m.getUniformLocation(g,"color"),scale:m.getUniformLocation(g,"scale"),rotation:m.getUniformLocation(g,"rotation"),screenPosition:m.getUniformLocation(g,"screenPosition")}};this.render=function(d,o,p,q){if(0!==c.length){var r=new a.Vector3,s=q/p,t=.5*p,u=.5*q,v=16/q,w=new a.Vector2(v*s,v),x=new a.Vector3(1,1,0),y=new a.Vector2(1,1);void 0===g&&n(),m.useProgram(g),m.enableVertexAttribArray(h.vertex),m.enableVertexAttribArray(h.uv),m.uniform1i(i.occlusionMap,0),m.uniform1i(i.map,1),m.bindBuffer(m.ARRAY_BUFFER,e),m.vertexAttribPointer(h.vertex,2,m.FLOAT,!1,16,0),m.vertexAttribPointer(h.uv,2,m.FLOAT,!1,16,8),m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,f),m.disable(m.CULL_FACE),m.depthMask(!1);for(var z=0,A=c.length;A>z;z++){v=16/q,w.set(v*s,v);var B=c[z];if(r.set(B.matrixWorld.elements[12],B.matrixWorld.elements[13],B.matrixWorld.elements[14]),r.applyMatrix4(o.matrixWorldInverse),r.applyProjection(o.projectionMatrix),x.copy(r),y.x=x.x*t+t,y.y=x.y*u+u,j||y.x>0&&y.x0&&y.yC;C++){var E=B.lensFlares[C];E.opacity>.001&&E.scale>.001&&(x.x=E.x,x.y=E.y,x.z=E.z,v=E.size*E.scale/q,w.x=v*s,w.y=v,m.uniform3f(i.screenPosition,x.x,x.y,x.z),m.uniform2f(i.scale,w.x,w.y),m.uniform1f(i.rotation,E.rotation),m.uniform1f(i.opacity,E.opacity),m.uniform3f(i.color,E.color.r,E.color.g,E.color.b),b.setBlending(E.blending,E.blendEquation,E.blendSrc,E.blendDst),b.setTexture(E.texture,1),m.drawElements(m.TRIANGLES,6,m.UNSIGNED_SHORT,0))}}}m.enable(m.CULL_FACE),m.enable(m.DEPTH_TEST),m.depthMask(!0),b.resetGLState()}}},a.ShadowMapPlugin=function(b,c,d,e){function f(a,b,c){if(b.visible){var e=d[b.id];if(e&&b.castShadow&&(b.frustumCulled===!1||p.intersectsObject(b)===!0))for(var g=0,h=e.length;h>g;g++){var i=e[g];b._modelViewMatrix.multiplyMatrices(c.matrixWorldInverse,b.matrixWorld),u.push(i)}for(var g=0,h=b.children.length;h>g;g++)f(a,b.children[g],c)}}function g(b,c){var d=new a.DirectionalLight;d.isVirtual=!0,d.onlyShadow=!0,d.castShadow=!0,d.shadowCameraNear=b.shadowCameraNear,d.shadowCameraFar=b.shadowCameraFar,d.shadowCameraLeft=b.shadowCameraLeft,d.shadowCameraRight=b.shadowCameraRight,d.shadowCameraBottom=b.shadowCameraBottom,d.shadowCameraTop=b.shadowCameraTop,d.shadowCameraVisible=b.shadowCameraVisible,d.shadowDarkness=b.shadowDarkness,d.shadowBias=b.shadowCascadeBias[c],d.shadowMapWidth=b.shadowCascadeWidth[c],d.shadowMapHeight=b.shadowCascadeHeight[c],d.pointsWorld=[],d.pointsFrustum=[];for(var e=d.pointsWorld,f=d.pointsFrustum,g=0;8>g;g++)e[g]=new a.Vector3,f[g]=new a.Vector3;var h=b.shadowCascadeNearZ[c],i=b.shadowCascadeFarZ[c];return f[0].set(-1,-1,h),f[1].set(1,-1,h),f[2].set(-1,1,h),f[3].set(1,1,h),f[4].set(-1,-1,i),f[5].set(1,-1,i),f[6].set(-1,1,i),f[7].set(1,1,i),d}function h(a,b){var c=a.shadowCascadeArray[b];c.position.copy(a.position),c.target.position.copy(a.target.position),c.lookAt(c.target),c.shadowCameraVisible=a.shadowCameraVisible,c.shadowDarkness=a.shadowDarkness,c.shadowBias=a.shadowCascadeBias[b];var d=a.shadowCascadeNearZ[b],e=a.shadowCascadeFarZ[b],f=c.pointsFrustum;f[0].z=d,f[1].z=d,f[2].z=d,f[3].z=d,f[4].z=e,f[5].z=e,f[6].z=e,f[7].z=e}function i(a,b){var c=b.shadowCamera,d=b.pointsFrustum,e=b.pointsWorld;r.set(1/0,1/0,1/0),s.set(-(1/0),-(1/0),-(1/0));for(var f=0;8>f;f++){var g=e[f];g.copy(d[f]),g.unproject(a),g.applyMatrix4(c.matrixWorldInverse),g.xs.x&&(s.x=g.x),g.ys.y&&(s.y=g.y),g.zs.z&&(s.z=g.z)}c.left=r.x,c.right=s.x,c.top=s.y,c.bottom=r.y,c.updateProjectionMatrix()}function j(b){return b.material instanceof a.MeshFaceMaterial?b.material.materials[0]:b.material}var k,l,m,n,o=b.context,p=new a.Frustum,q=new a.Matrix4,r=new a.Vector3,s=new a.Vector3,t=new a.Vector3,u=[],v=a.ShaderLib.depthRGBA,w=a.UniformsUtils.clone(v.uniforms);k=new a.ShaderMaterial({uniforms:w,vertexShader:v.vertexShader,fragmentShader:v.fragmentShader}),l=new a.ShaderMaterial({uniforms:w,vertexShader:v.vertexShader,fragmentShader:v.fragmentShader,morphTargets:!0}),m=new a.ShaderMaterial({uniforms:w,vertexShader:v.vertexShader,fragmentShader:v.fragmentShader,skinning:!0}),n=new a.ShaderMaterial({uniforms:w,vertexShader:v.vertexShader,fragmentShader:v.fragmentShader,morphTargets:!0,skinning:!0}),k._shadowPass=!0,l._shadowPass=!0,m._shadowPass=!0,n._shadowPass=!0,this.render=function(d,r){if(b.shadowMapEnabled!==!1){var s,v,w,x,y,z,A,B,C,D,E,F,G,H=[],I=0,J=null;for(o.clearColor(1,1,1,1),o.disable(o.BLEND),o.enable(o.CULL_FACE),o.frontFace(o.CCW),b.shadowMapCullFace===a.CullFaceFront?o.cullFace(o.FRONT):o.cullFace(o.BACK),b.setDepthTest(!0),s=0,v=c.length;v>s;s++)if(G=c[s],G.castShadow)if(G instanceof a.DirectionalLight&&G.shadowCascade)for(y=0;ys;s++){if(G=H[s],!G.shadowMap){var M=a.LinearFilter;b.shadowMapType===a.PCFSoftShadowMap&&(M=a.NearestFilter);var N={minFilter:M,magFilter:M,format:a.RGBAFormat};G.shadowMap=new a.WebGLRenderTarget(G.shadowMapWidth,G.shadowMapHeight,N),G.shadowMapSize=new a.Vector2(G.shadowMapWidth,G.shadowMapHeight),G.shadowMatrix=new a.Matrix4}if(!G.shadowCamera){if(G instanceof a.SpotLight)G.shadowCamera=new a.PerspectiveCamera(G.shadowCameraFov,G.shadowMapWidth/G.shadowMapHeight,G.shadowCameraNear,G.shadowCameraFar);else{if(!(G instanceof a.DirectionalLight)){console.error("Unsupported light type for shadow");continue}G.shadowCamera=new a.OrthographicCamera(G.shadowCameraLeft,G.shadowCameraRight,G.shadowCameraTop,G.shadowCameraBottom,G.shadowCameraNear,G.shadowCameraFar)}d.add(G.shadowCamera),d.autoUpdate===!0&&d.updateMatrixWorld()}G.shadowCameraVisible&&!G.cameraHelper&&(G.cameraHelper=new a.CameraHelper(G.shadowCamera),d.add(G.cameraHelper)),G.isVirtual&&K.originalCamera==r&&i(r,G),z=G.shadowMap,A=G.shadowMatrix,B=G.shadowCamera,B.position.setFromMatrixPosition(G.matrixWorld),t.setFromMatrixPosition(G.target.matrixWorld),B.lookAt(t),B.updateMatrixWorld(),B.matrixWorldInverse.getInverse(B.matrixWorld),G.cameraHelper&&(G.cameraHelper.visible=G.shadowCameraVisible),G.shadowCameraVisible&&G.cameraHelper.update(),A.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),A.multiply(B.projectionMatrix),A.multiply(B.matrixWorldInverse),q.multiplyMatrices(B.projectionMatrix,B.matrixWorldInverse),p.setFromMatrix(q),b.setRenderTarget(z),b.clear(),u.length=0,f(d,d,B);var O,P,Q;for(w=0,x=u.length;x>w;w++)E=u[w],F=E.object,C=E.buffer,O=j(F),P=void 0!==F.geometry.morphTargets&&F.geometry.morphTargets.length>0&&O.morphTargets,Q=F instanceof a.SkinnedMesh&&O.skinning,D=F.customDepthMaterial?F.customDepthMaterial:Q?P?n:m:P?l:k,b.setMaterialFaces(O),C instanceof a.BufferGeometry?b.renderBufferDirect(B,c,J,D,C,F):b.renderBuffer(B,c,J,D,C,F);for(w=0,x=e.length;x>w;w++)E=e[w],F=E.object,F.visible&&F.castShadow&&(F._modelViewMatrix.multiplyMatrices(B.matrixWorldInverse,F.matrixWorld),b.renderImmediateObject(B,c,J,k,F))}var R=b.getClearColor(),S=b.getClearAlpha();o.clearColor(R.r,R.g,R.b,S),o.enable(o.BLEND),b.shadowMapCullFace===a.CullFaceFront&&o.cullFace(o.BACK),b.resetGLState()}}},a.SpritePlugin=function(b,c){function d(){var a=l.createProgram(),c=l.createShader(l.VERTEX_SHADER),d=l.createShader(l.FRAGMENT_SHADER);return l.shaderSource(c,["precision "+b.getPrecision()+" float;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform float rotation;","uniform vec2 scale;","uniform vec2 uvOffset;","uniform vec2 uvScale;","attribute vec2 position;","attribute vec2 uv;","varying vec2 vUV;","void main() {","vUV = uvOffset + uv * uvScale;","vec2 alignedPosition = position * scale;","vec2 rotatedPosition;","rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;","rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;","vec4 finalPosition;","finalPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );","finalPosition.xy += rotatedPosition;","finalPosition = projectionMatrix * finalPosition;","gl_Position = finalPosition;","}"].join("\n")),l.shaderSource(d,["precision "+b.getPrecision()+" float;","uniform vec3 color;","uniform sampler2D map;","uniform float opacity;","uniform int fogType;","uniform vec3 fogColor;","uniform float fogDensity;","uniform float fogNear;","uniform float fogFar;","uniform float alphaTest;","varying vec2 vUV;","void main() {","vec4 texture = texture2D( map, vUV );","if ( texture.a < alphaTest ) discard;","gl_FragColor = vec4( color * texture.xyz, texture.a * opacity );","if ( fogType > 0 ) {","float depth = gl_FragCoord.z / gl_FragCoord.w;","float fogFactor = 0.0;","if ( fogType == 1 ) {","fogFactor = smoothstep( fogNear, fogFar, depth );","} else {","const float LOG2 = 1.442695;","float fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );","fogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );","}","gl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );","}","}"].join("\n")),l.compileShader(c),l.compileShader(d),l.attachShader(a,c),l.attachShader(a,d),l.linkProgram(a),a}function e(a,b){return a.z!==b.z?b.z-a.z:b.id-a.id}var f,g,h,i,j,k,l=b.context,m=function(){var b=new Float32Array([-.5,-.5,0,0,.5,-.5,1,0,.5,.5,1,1,-.5,.5,0,1]),c=new Uint16Array([0,1,2,0,2,3]);f=l.createBuffer(),g=l.createBuffer(),l.bindBuffer(l.ARRAY_BUFFER,f),l.bufferData(l.ARRAY_BUFFER,b,l.STATIC_DRAW),l.bindBuffer(l.ELEMENT_ARRAY_BUFFER,g),l.bufferData(l.ELEMENT_ARRAY_BUFFER,c,l.STATIC_DRAW),h=d(),i={position:l.getAttribLocation(h,"position"),uv:l.getAttribLocation(h,"uv")},j={uvOffset:l.getUniformLocation(h,"uvOffset"),uvScale:l.getUniformLocation(h,"uvScale"),rotation:l.getUniformLocation(h,"rotation"),scale:l.getUniformLocation(h,"scale"),color:l.getUniformLocation(h,"color"),map:l.getUniformLocation(h,"map"),opacity:l.getUniformLocation(h,"opacity"),modelViewMatrix:l.getUniformLocation(h,"modelViewMatrix"),projectionMatrix:l.getUniformLocation(h,"projectionMatrix"),fogType:l.getUniformLocation(h,"fogType"),fogDensity:l.getUniformLocation(h,"fogDensity"),fogNear:l.getUniformLocation(h,"fogNear"),fogFar:l.getUniformLocation(h,"fogFar"),fogColor:l.getUniformLocation(h,"fogColor"),alphaTest:l.getUniformLocation(h,"alphaTest")};var e=document.createElement("canvas");e.width=8,e.height=8;var m=e.getContext("2d");m.fillStyle="white",m.fillRect(0,0,8,8),k=new a.Texture(e),k.needsUpdate=!0};this.render=function(d,n){if(0!==c.length){void 0===h&&m(),l.useProgram(h),l.enableVertexAttribArray(i.position),l.enableVertexAttribArray(i.uv),l.disable(l.CULL_FACE),l.enable(l.BLEND),l.bindBuffer(l.ARRAY_BUFFER,f),l.vertexAttribPointer(i.position,2,l.FLOAT,!1,16,0),l.vertexAttribPointer(i.uv,2,l.FLOAT,!1,16,8),l.bindBuffer(l.ELEMENT_ARRAY_BUFFER,g),l.uniformMatrix4fv(j.projectionMatrix,!1,n.projectionMatrix.elements),l.activeTexture(l.TEXTURE0),l.uniform1i(j.map,0);var o=0,p=0,q=d.fog;q?(l.uniform3f(j.fogColor,q.color.r,q.color.g,q.color.b),q instanceof a.Fog?(l.uniform1f(j.fogNear,q.near),l.uniform1f(j.fogFar,q.far),l.uniform1i(j.fogType,1),o=1,p=1):q instanceof a.FogExp2&&(l.uniform1f(j.fogDensity,q.density),l.uniform1i(j.fogType,2),o=2,p=2)):(l.uniform1i(j.fogType,0),o=0,p=0);for(var r=0,s=c.length;s>r;r++){var t=c[r];t._modelViewMatrix.multiplyMatrices(n.matrixWorldInverse,t.matrixWorld),null===t.renderDepth?t.z=-t._modelViewMatrix.elements[14]:t.z=t.renderDepth}c.sort(e);for(var u=[],r=0,s=c.length;s>r;r++){var t=c[r],v=t.material;l.uniform1f(j.alphaTest,v.alphaTest),l.uniformMatrix4fv(j.modelViewMatrix,!1,t._modelViewMatrix.elements),u[0]=t.scale.x,u[1]=t.scale.y;var w=0;d.fog&&v.fog&&(w=p),o!==w&&(l.uniform1i(j.fogType,w),o=w),null!==v.map?(l.uniform2f(j.uvOffset,v.map.offset.x,v.map.offset.y),l.uniform2f(j.uvScale,v.map.repeat.x,v.map.repeat.y)):(l.uniform2f(j.uvOffset,0,0),l.uniform2f(j.uvScale,1,1)),l.uniform1f(j.opacity,v.opacity),l.uniform3f(j.color,v.color.r,v.color.g,v.color.b),l.uniform1f(j.rotation,v.rotation),l.uniform2fv(j.scale,u),b.setBlending(v.blending,v.blendEquation,v.blendSrc,v.blendDst),b.setDepthTest(v.depthTest),b.setDepthWrite(v.depthWrite),v.map&&v.map.image&&v.map.image.width?b.setTexture(v.map,0):b.setTexture(k,0),l.drawElements(l.TRIANGLES,6,l.UNSIGNED_SHORT,0)}l.enable(l.CULL_FACE),b.resetGLState()}}},a.GeometryUtils={merge:function(b,c,d){console.warn("THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead.");var e;c instanceof a.Mesh&&(c.matrixAutoUpdate&&c.updateMatrix(),e=c.matrix,c=c.geometry),b.merge(c,e,d)},center:function(a){return console.warn("THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead."),a.center()}},a.ImageUtils={crossOrigin:void 0,loadTexture:function(b,c,d,e){var f=new a.ImageLoader;f.crossOrigin=this.crossOrigin;var g=new a.Texture(void 0,c);return f.load(b,function(a){g.image=a,g.needsUpdate=!0,d&&d(g)},void 0,function(a){e&&e(a)}),g.sourceFile=b,g},loadTextureCube:function(b,c,d,e){var f=[],g=new a.ImageLoader;g.crossOrigin=this.crossOrigin;var h=new a.CubeTexture(f,c);h.flipY=!1;for(var i=0,j=function(a){g.load(b[a],function(b){h.images[a]=b,i+=1,6===i&&(h.needsUpdate=!0,d&&d(h))})},k=0,l=b.length;l>k;++k)j(k);return h},loadCompressedTexture:function(){console.error("THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.")},loadCompressedTextureCube:function(){console.error("THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.")},getNormalMap:function(a,b){var c=function(a,b){return[a[1]*b[2]-a[2]*b[1],a[2]*b[0]-a[0]*b[2],a[0]*b[1]-a[1]*b[0]]},d=function(a,b){return[a[0]-b[0],a[1]-b[1],a[2]-b[2]]},e=function(a){var b=Math.sqrt(a[0]*a[0]+a[1]*a[1]+a[2]*a[2]);return[a[0]/b,a[1]/b,a[2]/b]};b=1|b;var f=a.width,g=a.height,h=document.createElement("canvas");h.width=f,h.height=g;var i=h.getContext("2d");i.drawImage(a,0,0);for(var j=i.getImageData(0,0,f,g).data,k=i.createImageData(f,g),l=k.data,m=0;f>m;m++)for(var n=0;g>n;n++){var o=0>n-1?0:n-1,p=n+1>g-1?g-1:n+1,q=0>m-1?0:m-1,r=m+1>f-1?f-1:m+1,s=[],t=[0,0,j[4*(n*f+m)]/255*b];s.push([-1,0,j[4*(n*f+q)]/255*b]),s.push([-1,-1,j[4*(o*f+q)]/255*b]),s.push([0,-1,j[4*(o*f+m)]/255*b]),s.push([1,-1,j[4*(o*f+r)]/255*b]),s.push([1,0,j[4*(n*f+r)]/255*b]),s.push([1,1,j[4*(p*f+r)]/255*b]),s.push([0,1,j[4*(p*f+m)]/255*b]),s.push([-1,1,j[4*(p*f+q)]/255*b]);for(var u=[],v=s.length,w=0;v>w;w++){var x=s[w],y=s[(w+1)%v];x=d(x,t),y=d(y,t),u.push(e(c(x,y)))}for(var z=[0,0,0],w=0;wj;j++)f[3*j]=g,f[3*j+1]=h,f[3*j+2]=i;var k=new a.DataTexture(f,b,c,a.RGBFormat);return k.needsUpdate=!0,k}},a.SceneUtils={createMultiMaterialObject:function(b,c){for(var d=new a.Object3D,e=0,f=c.length;f>e;e++)d.add(new a.Mesh(b,c[e]));return d},detach:function(a,b,c){a.applyMatrix(b.matrixWorld),b.remove(a),c.add(a)},attach:function(b,c,d){var e=new a.Matrix4;e.getInverse(d.matrixWorld),b.applyMatrix(e),c.remove(b),d.add(b)}},a.FontUtils={faces:{},face:"helvetiker",weight:"normal",style:"normal",size:150,divisions:10,getFace:function(){try{return this.faces[this.face][this.weight][this.style]}catch(a){throw"The font "+this.face+" with "+this.weight+" weight and "+this.style+" style is missing."}},loadFace:function(a){var b=a.familyName.toLowerCase(),c=this;c.faces[b]=c.faces[b]||{},c.faces[b][a.cssFontWeight]=c.faces[b][a.cssFontWeight]||{},c.faces[b][a.cssFontWeight][a.cssFontStyle]=a;c.faces[b][a.cssFontWeight][a.cssFontStyle]=a;return a},drawText:function(b){var c,d=this.getFace(),e=this.size/d.resolution,f=0,g=String(b).split(""),h=g.length,i=[];for(c=0;h>c;c++){var j=new a.Path,k=this.extractGlyphPoints(g[c],d,e,f,j);f+=k.offset,i.push(k.path)}var l=f/2;return{paths:i,offset:l}},extractGlyphPoints:function(b,c,d,e,f){var g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z=[],A=c.glyphs[b]||c.glyphs["?"];if(A){if(A.o)for(j=A._cachedOutline||(A._cachedOutline=A.o.split(" ")),l=j.length,m=d,n=d,g=0;l>g;)switch(k=j[g++]){case"m":o=j[g++]*m+e,p=j[g++]*n,f.moveTo(o,p);break;case"l":o=j[g++]*m+e,p=j[g++]*n,f.lineTo(o,p);break;case"q":if(q=j[g++]*m+e,r=j[g++]*n,u=j[g++]*m+e,v=j[g++]*n,f.quadraticCurveTo(u,v,q,r),y=z[z.length-1])for(s=y.x,t=y.y,h=1,i=this.divisions;i>=h;h++){var B=h/i;a.Shape.Utils.b2(B,s,u,q),a.Shape.Utils.b2(B,t,v,r)}break;case"b":if(q=j[g++]*m+e,r=j[g++]*n,u=j[g++]*m+e,v=j[g++]*n,w=j[g++]*m+e,x=j[g++]*n,f.bezierCurveTo(u,v,w,x,q,r),y=z[z.length-1])for(s=y.x,t=y.y,h=1,i=this.divisions;i>=h;h++){var B=h/i;a.Shape.Utils.b3(B,s,u,w,q),a.Shape.Utils.b3(B,t,v,x,r)}}return{offset:A.ha*d,path:f}}}},a.FontUtils.generateShapes=function(b,c){c=c||{};var d=void 0!==c.size?c.size:100,e=void 0!==c.curveSegments?c.curveSegments:4,f=void 0!==c.font?c.font:"helvetiker",g=void 0!==c.weight?c.weight:"normal",h=void 0!==c.style?c.style:"normal";a.FontUtils.size=d,a.FontUtils.divisions=e,a.FontUtils.face=f,a.FontUtils.weight=g,a.FontUtils.style=h;for(var i=a.FontUtils.drawText(b),j=i.paths,k=[],l=0,m=j.length;m>l;l++)Array.prototype.push.apply(k,j[l].toShapes());return k},function(a){var b=1e-10,c=function(a,b){var c=a.length;if(3>c)return null;var f,g,h,i=[],j=[],k=[];if(d(a)>0)for(g=0;c>g;g++)j[g]=g;else for(g=0;c>g;g++)j[g]=c-1-g;var l=c,m=2*l;for(g=l-1;l>2;){if(m--<=0)return console.log("Warning, unable to triangulate polygon!"),b?k:i;if(f=g,f>=l&&(f=0),g=f+1,g>=l&&(g=0),h=g+1,h>=l&&(h=0),e(a,f,g,h,l,j)){var n,o,p,q,r;for(n=j[f],o=j[g],p=j[h],i.push([a[n],a[o],a[p]]),k.push([j[f],j[g],j[h]]),q=g,r=g+1;l>r;q++,r++)j[q]=j[r];l--,m=2*l}}return b?k:i},d=function(a){for(var b=a.length,c=0,d=b-1,e=0;b>e;d=e++)c+=a[d].x*a[e].y-a[e].x*a[d].y;return.5*c},e=function(a,c,d,e,f,g){var h,i,j,k,l,m,n,o,p;if(i=a[g[c]].x,j=a[g[c]].y,k=a[g[d]].x,l=a[g[d]].y,m=a[g[e]].x,n=a[g[e]].y,b>(k-i)*(n-j)-(l-j)*(m-i))return!1;var q,r,s,t,u,v,w,x,y,z,A,B,C,D,E;for(q=m-k,r=n-l,s=i-m,t=j-n,u=k-i,v=l-j,h=0;f>h;h++)if(o=a[g[h]].x,p=a[g[h]].y,!(o===i&&p===j||o===k&&p===l||o===m&&p===n)&&(w=o-i,x=p-j,y=o-k,z=p-l,A=o-m,B=p-n,E=q*z-r*y,C=u*x-v*w,D=s*B-t*A,E>=-b&&D>=-b&&C>=-b))return!1;return!0};return a.Triangulate=c,a.Triangulate.area=d,a}(a.FontUtils),self._typeface_js={faces:a.FontUtils.faces,loadFace:a.FontUtils.loadFace},a.typeface_js=self._typeface_js,a.Audio=function(b){a.Object3D.call(this),this.type="Audio",this.context=b.context,this.source=this.context.createBufferSource(),this.gain=this.context.createGain(),this.gain.connect(this.context.destination),this.panner=this.context.createPanner(),this.panner.connect(this.gain)},a.Audio.prototype=Object.create(a.Object3D.prototype),a.Audio.prototype.load=function(a){var b=this,c=new XMLHttpRequest;return c.open("GET",a,!0),c.responseType="arraybuffer",c.onload=function(a){b.context.decodeAudioData(this.response,function(a){b.source.buffer=a,b.source.connect(b.panner),b.source.start(0)})},c.send(),this},a.Audio.prototype.setLoop=function(a){this.source.loop=a},a.Audio.prototype.setRefDistance=function(a){this.panner.refDistance=a},a.Audio.prototype.setRolloffFactor=function(a){this.panner.rolloffFactor=a},a.Audio.prototype.updateMatrixWorld=function(){var b=new a.Vector3;return function(c){a.Object3D.prototype.updateMatrixWorld.call(this,c),b.setFromMatrixPosition(this.matrixWorld),this.panner.setPosition(b.x,b.y,b.z)}}(),a.AudioListener=function(){a.Object3D.call(this),this.type="AudioListener",this.context=new(window.AudioContext||window.webkitAudioContext)},a.AudioListener.prototype=Object.create(a.Object3D.prototype),a.AudioListener.prototype.updateMatrixWorld=function(){var b=new a.Vector3,c=new a.Quaternion,d=new a.Vector3,e=new a.Vector3,f=new a.Vector3,g=new a.Vector3;return function(h){a.Object3D.prototype.updateMatrixWorld.call(this,h);var i=this.context.listener;this.matrixWorld.decompose(b,c,d),e.set(0,0,-1).applyQuaternion(c),f.subVectors(b,g),i.setPosition(b.x,b.y,b.z),i.setOrientation(e.x,e.y,e.z,this.up.x,this.up.y,this.up.z),i.setVelocity(f.x,f.y,f.z),g.copy(b)}}(),a.Curve=function(){},a.Curve.prototype.getPoint=function(a){return console.log("Warning, getPoint() not implemented!"),null},a.Curve.prototype.getPointAt=function(a){var b=this.getUtoTmapping(a);return this.getPoint(b)},a.Curve.prototype.getPoints=function(a){a||(a=5);var b,c=[];for(b=0;a>=b;b++)c.push(this.getPoint(b/a));return c},a.Curve.prototype.getSpacedPoints=function(a){a||(a=5);var b,c=[];for(b=0;a>=b;b++)c.push(this.getPointAt(b/a));return c},a.Curve.prototype.getLength=function(){var a=this.getLengths();return a[a.length-1]},a.Curve.prototype.getLengths=function(a){if(a||(a=this.__arcLengthDivisions?this.__arcLengthDivisions:200),this.cacheArcLengths&&this.cacheArcLengths.length==a+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;var b,c,d=[],e=this.getPoint(0),f=0;for(d.push(0),c=1;a>=c;c++)b=this.getPoint(c/a),f+=b.distanceTo(e),d.push(f),e=b;return this.cacheArcLengths=d,d},a.Curve.prototype.updateArcLengths=function(){this.needsUpdate=!0,this.getLengths()},a.Curve.prototype.getUtoTmapping=function(a,b){var c,d=this.getLengths(),e=0,f=d.length;c=b?b:a*d[f-1];for(var g,h=0,i=f-1;i>=h;)if(e=Math.floor(h+(i-h)/2),g=d[e]-c,0>g)h=e+1;else{if(!(g>0)){i=e;break}i=e-1}if(e=i,d[e]==c){var j=e/(f-1);return j}var k=d[e],l=d[e+1],m=l-k,n=(c-k)/m,j=(e+n)/(f-1);return j},a.Curve.prototype.getTangent=function(a){var b=1e-4,c=a-b,d=a+b;0>c&&(c=0),d>1&&(d=1);var e=this.getPoint(c),f=this.getPoint(d),g=f.clone().sub(e);return g.normalize()},a.Curve.prototype.getTangentAt=function(a){var b=this.getUtoTmapping(a);return this.getTangent(b)},a.Curve.Utils={tangentQuadraticBezier:function(a,b,c,d){return 2*(1-a)*(c-b)+2*a*(d-c)},tangentCubicBezier:function(a,b,c,d,e){return-3*b*(1-a)*(1-a)+3*c*(1-a)*(1-a)-6*a*c*(1-a)+6*a*d*(1-a)-3*a*a*d+3*a*a*e},tangentSpline:function(a,b,c,d,e){var f=6*a*a-6*a,g=3*a*a-4*a+1,h=-6*a*a+6*a,i=3*a*a-2*a;return f+g+h+i},interpolate:function(a,b,c,d,e){var f=.5*(c-a),g=.5*(d-b),h=e*e,i=e*h;return(2*b-2*c+f+g)*i+(-3*b+3*c-2*f-g)*h+f*e+b}},a.Curve.create=function(b,c){return b.prototype=Object.create(a.Curve.prototype),b.prototype.getPoint=c,b},a.CurvePath=function(){this.curves=[],this.bends=[],this.autoClose=!1},a.CurvePath.prototype=Object.create(a.Curve.prototype),a.CurvePath.prototype.add=function(a){this.curves.push(a)},a.CurvePath.prototype.checkConnection=function(){},a.CurvePath.prototype.closePath=function(){var b=this.curves[0].getPoint(0),c=this.curves[this.curves.length-1].getPoint(1);b.equals(c)||this.curves.push(new a.LineCurve(c,b))},a.CurvePath.prototype.getPoint=function(a){for(var b,c,d=a*this.getLength(),e=this.getCurveLengths(),f=0;f=d){b=e[f]-d,c=this.curves[f];var g=1-b/c.getLength();return c.getPointAt(g)}f++}return null},a.CurvePath.prototype.getLength=function(){var a=this.getCurveLengths();return a[a.length-1]},a.CurvePath.prototype.getCurveLengths=function(){if(this.cacheLengths&&this.cacheLengths.length==this.curves.length)return this.cacheLengths;var a,b=[],c=0,d=this.curves.length;for(a=0;d>a;a++)c+=this.curves[a].getLength(),b.push(c);return this.cacheLengths=b,b},a.CurvePath.prototype.getBoundingBox=function(){var b,c,d,e,f,g,h=this.getPoints();b=c=Number.NEGATIVE_INFINITY,e=f=Number.POSITIVE_INFINITY;var i,j,k,l,m=h[0]instanceof a.Vector3;for(l=m?new a.Vector3:new a.Vector2,j=0,k=h.length;k>j;j++)i=h[j],i.x>b?b=i.x:i.xc?c=i.y:i.yd?d=i.z:i.zc;c++)e=this.getWrapPoints(e,b[c]);return e},a.CurvePath.prototype.getTransformedSpacedPoints=function(a,b){var c,d,e=this.getSpacedPoints(a);for(b||(b=this.bends),c=0,d=b.length;d>c;c++)e=this.getWrapPoints(e,b[c]);return e},a.CurvePath.prototype.getWrapPoints=function(a,b){var c,d,e,f,g,h,i=this.getBoundingBox();for(c=0,d=a.length;d>c;c++){e=a[c],f=e.x,g=e.y,h=f/i.maxX,h=b.getUtoTmapping(h,f);var j=b.getPoint(h),k=b.getTangent(h);k.set(-k.y,k.x).multiplyScalar(g),e.x=j.x+k.x,e.y=j.y+k.y}return a},a.Gyroscope=function(){a.Object3D.call(this)},a.Gyroscope.prototype=Object.create(a.Object3D.prototype),a.Gyroscope.prototype.updateMatrixWorld=function(){var b=new a.Vector3,c=new a.Quaternion,d=new a.Vector3,e=new a.Vector3,f=new a.Quaternion,g=new a.Vector3;return function(a){this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||a)&&(this.parent?(this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorld.decompose(e,f,g),this.matrix.decompose(b,c,d),this.matrixWorld.compose(e,c,g)):this.matrixWorld.copy(this.matrix),this.matrixWorldNeedsUpdate=!1,a=!0);for(var h=0,i=this.children.length;i>h;h++)this.children[h].updateMatrixWorld(a)}}(),a.Path=function(b){a.CurvePath.call(this),this.actions=[],b&&this.fromPoints(b)},a.Path.prototype=Object.create(a.CurvePath.prototype),a.PathActions={MOVE_TO:"moveTo",LINE_TO:"lineTo",QUADRATIC_CURVE_TO:"quadraticCurveTo",BEZIER_CURVE_TO:"bezierCurveTo",CSPLINE_THRU:"splineThru",ARC:"arc",ELLIPSE:"ellipse"},a.Path.prototype.fromPoints=function(a){this.moveTo(a[0].x,a[0].y);for(var b=1,c=a.length;c>b;b++)this.lineTo(a[b].x,a[b].y)},a.Path.prototype.moveTo=function(b,c){var d=Array.prototype.slice.call(arguments);this.actions.push({action:a.PathActions.MOVE_TO,args:d})},a.Path.prototype.lineTo=function(b,c){var d=Array.prototype.slice.call(arguments),e=this.actions[this.actions.length-1].args,f=e[e.length-2],g=e[e.length-1],h=new a.LineCurve(new a.Vector2(f,g),new a.Vector2(b,c));this.curves.push(h),this.actions.push({action:a.PathActions.LINE_TO,args:d})},a.Path.prototype.quadraticCurveTo=function(b,c,d,e){var f=Array.prototype.slice.call(arguments),g=this.actions[this.actions.length-1].args,h=g[g.length-2],i=g[g.length-1],j=new a.QuadraticBezierCurve(new a.Vector2(h,i),new a.Vector2(b,c),new a.Vector2(d,e));this.curves.push(j),this.actions.push({action:a.PathActions.QUADRATIC_CURVE_TO,args:f})},a.Path.prototype.bezierCurveTo=function(b,c,d,e,f,g){var h=Array.prototype.slice.call(arguments),i=this.actions[this.actions.length-1].args,j=i[i.length-2],k=i[i.length-1],l=new a.CubicBezierCurve(new a.Vector2(j,k),new a.Vector2(b,c),new a.Vector2(d,e),new a.Vector2(f,g));this.curves.push(l),this.actions.push({action:a.PathActions.BEZIER_CURVE_TO,args:h})},a.Path.prototype.splineThru=function(b){var c=Array.prototype.slice.call(arguments),d=this.actions[this.actions.length-1].args,e=d[d.length-2],f=d[d.length-1],g=[new a.Vector2(e,f)];Array.prototype.push.apply(g,b);var h=new a.SplineCurve(g);this.curves.push(h),this.actions.push({action:a.PathActions.CSPLINE_THRU,args:c})},a.Path.prototype.arc=function(a,b,c,d,e,f){var g=this.actions[this.actions.length-1].args,h=g[g.length-2],i=g[g.length-1];this.absarc(a+h,b+i,c,d,e,f)},a.Path.prototype.absarc=function(a,b,c,d,e,f){this.absellipse(a,b,c,c,d,e,f)},a.Path.prototype.ellipse=function(a,b,c,d,e,f,g){var h=this.actions[this.actions.length-1].args,i=h[h.length-2],j=h[h.length-1];this.absellipse(a+i,b+j,c,d,e,f,g)},a.Path.prototype.absellipse=function(b,c,d,e,f,g,h){var i=Array.prototype.slice.call(arguments),j=new a.EllipseCurve(b,c,d,e,f,g,h);this.curves.push(j);var k=j.getPoint(1);i.push(k.x),i.push(k.y),this.actions.push({action:a.PathActions.ELLIPSE,args:i})},a.Path.prototype.getSpacedPoints=function(a,b){a||(a=40);for(var c=[],d=0;a>d;d++)c.push(this.getPoint(d/a));return c},a.Path.prototype.getPoints=function(b,c){if(this.useSpacedPoints)return console.log("tata"),this.getSpacedPoints(b,c);b=b||12;var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v=[];for(d=0,e=this.actions.length;e>d;d++)switch(f=this.actions[d],g=f.action,h=f.args,g){case a.PathActions.MOVE_TO:v.push(new a.Vector2(h[0],h[1]));break;case a.PathActions.LINE_TO:v.push(new a.Vector2(h[0],h[1]));break;case a.PathActions.QUADRATIC_CURVE_TO:for(i=h[2],j=h[3],m=h[0],n=h[1],v.length>0?(q=v[v.length-1],o=q.x,p=q.y):(q=this.actions[d-1].args,o=q[q.length-2],p=q[q.length-1]),r=1;b>=r;r++)s=r/b,t=a.Shape.Utils.b2(s,o,m,i),u=a.Shape.Utils.b2(s,p,n,j),v.push(new a.Vector2(t,u));break;case a.PathActions.BEZIER_CURVE_TO:for(i=h[4],j=h[5],m=h[0],n=h[1],k=h[2],l=h[3],v.length>0?(q=v[v.length-1],o=q.x,p=q.y):(q=this.actions[d-1].args,o=q[q.length-2],p=q[q.length-1]),r=1;b>=r;r++)s=r/b,t=a.Shape.Utils.b3(s,o,m,k,i),u=a.Shape.Utils.b3(s,p,n,l,j),v.push(new a.Vector2(t,u));break;case a.PathActions.CSPLINE_THRU:q=this.actions[d-1].args;var w=new a.Vector2(q[q.length-2],q[q.length-1]),x=[w],y=b*h[0].length;x=x.concat(h[0]);var z=new a.SplineCurve(x);for(r=1;y>=r;r++)v.push(z.getPointAt(r/y));break;case a.PathActions.ARC:var A,B=h[0],C=h[1],D=h[2],E=h[3],F=h[4],G=!!h[5],H=F-E,I=2*b;for(r=1;I>=r;r++)s=r/I,G||(s=1-s),A=E+s*H,t=B+D*Math.cos(A),u=C+D*Math.sin(A),v.push(new a.Vector2(t,u));break;case a.PathActions.ELLIPSE:var A,B=h[0],C=h[1],J=h[2],K=h[3],E=h[4],F=h[5],G=!!h[6],H=F-E,I=2*b;for(r=1;I>=r;r++)s=r/I,G||(s=1-s),A=E+s*H,t=B+J*Math.cos(A),u=C+K*Math.sin(A),v.push(new a.Vector2(t,u))}var L=v[v.length-1],M=1e-10;return Math.abs(L.x-v[0].x)c;c++)e=b[c],g=e.args,f=e.action,f==a.PathActions.MOVE_TO&&0!=i.actions.length&&(h.push(i),i=new a.Path),i[f].apply(i,g);return 0!=i.actions.length&&h.push(i),h}function e(b){for(var c=[],d=0,e=b.length;e>d;d++){var f=b[d],g=new a.Shape;g.actions=f.actions,g.curves=f.curves,c.push(g)}return c}function f(a,b){for(var c=1e-10,d=b.length,e=!1,f=d-1,g=0;d>g;f=g++){var h=b[f],i=b[g],j=i.x-h.x,k=i.y-h.y;if(Math.abs(k)>c){if(0>k&&(h=b[g],j=-j,i=b[f],k=-k),a.yi.y)continue;if(a.y==h.y){if(a.x==h.x)return!0}else{var l=k*(a.x-h.x)-j*(a.y-h.y);if(0==l)return!0;if(0>l)continue;e=!e}}else{if(a.y!=h.y)continue;if(i.x<=a.x&&a.x<=h.x||h.x<=a.x&&a.x<=i.x)return!0}}return e}var g=d(this.actions);if(0==g.length)return[];if(c===!0)return e(g);var h,i,j,k=[];if(1==g.length)return i=g[0],j=new a.Shape,j.actions=i.actions,j.curves=i.curves,k.push(j),k;var l=!a.Shape.Utils.isClockWise(g[0].getPoints());l=b?!l:l;var m,n=[],o=[],p=[],q=0;o[q]=void 0,p[q]=[];var r,s;for(r=0,s=g.length;s>r;r++)i=g[r],m=i.getPoints(),h=a.Shape.Utils.isClockWise(m),h=b?!h:h,h?(!l&&o[q]&&q++,o[q]={s:new a.Shape,p:m},o[q].s.actions=i.actions,o[q].s.curves=i.curves,l&&q++,p[q]=[]):p[q].push({h:i,p:m[0]});if(!o[0])return e(g);if(o.length>1){for(var t=!1,u=[],v=0,w=o.length;w>v;v++)n[v]=[];for(var v=0,w=o.length;w>v;v++)for(var x=(o[v],p[v]),y=0;y0&&(t||(p=n))}var C,D,E;for(r=0,s=o.length;s>r;r++)for(j=o[r].s,k.push(j),C=p[r],D=0,E=C.length;E>D;D++)j.holes.push(C[D].h);return k},a.Shape=function(){a.Path.apply(this,arguments),this.holes=[]},a.Shape.prototype=Object.create(a.Path.prototype),a.Shape.prototype.extrude=function(b){var c=new a.ExtrudeGeometry(this,b);return c},a.Shape.prototype.makeGeometry=function(b){var c=new a.ShapeGeometry(this,b);return c},a.Shape.prototype.getPointsHoles=function(a){var b,c=this.holes.length,d=[];for(b=0;c>b;b++)d[b]=this.holes[b].getTransformedPoints(a,this.bends);return d},a.Shape.prototype.getSpacedPointsHoles=function(a){var b,c=this.holes.length,d=[];for(b=0;c>b;b++)d[b]=this.holes[b].getTransformedSpacedPoints(a,this.bends);return d},a.Shape.prototype.extractAllPoints=function(a){return{shape:this.getTransformedPoints(a),holes:this.getPointsHoles(a)}},a.Shape.prototype.extractPoints=function(a){return this.useSpacedPoints?this.extractAllSpacedPoints(a):this.extractAllPoints(a)},a.Shape.prototype.extractAllSpacedPoints=function(a){return{shape:this.getTransformedSpacedPoints(a),holes:this.getSpacedPointsHoles(a)}},a.Shape.Utils={triangulateShape:function(b,c){function d(a,b,c){return a.x!=b.x?a.xg){var p;if(n>0){if(0>o||o>n)return[];if(p=k*l-j*m,0>p||p>n)return[]}else{if(o>0||n>o)return[];if(p=k*l-j*m,p>0||n>p)return[]}if(0==p)return!f||0!=o&&o!=n?[a]:[];if(p==n)return!f||0!=o&&o!=n?[b]:[];if(0==o)return[c];if(o==n)return[e];var q=p/n;return[{x:a.x+q*h,y:a.y+q*i}]}if(0!=o||k*l!=j*m)return[];var r=0==h&&0==i,s=0==j&&0==k;if(r&&s)return a.x!=c.x||a.y!=c.y?[]:[a];if(r)return d(c,e,a)?[a]:[];if(s)return d(a,b,c)?[c]:[];var t,u,v,w,x,y,z,A;return 0!=h?(a.x=v?z>w?[]:w==z?f?[]:[x]:A>=w?[x,u]:[x,y]:v>A?[]:v==A?f?[]:[t]:A>=w?[t,u]:[t,y]}function f(a,b,c,d){var e=1e-10,f=b.x-a.x,g=b.y-a.y,h=c.x-a.x,i=c.y-a.y,j=d.x-a.x,k=d.y-a.y,l=f*i-g*h,m=f*k-g*j;if(Math.abs(l)>e){var n=j*i-k*h;return l>0?m>=0&&n>=0:m>=0||n>=0}return m>0}function g(a,b){function c(a,b){var c=s.length-1,d=a-1;0>d&&(d=c);var e=a+1;e>c&&(e=0);var g=f(s[a],s[d],s[e],h[b]);if(!g)return!1;var i=h.length-1,j=b-1;0>j&&(j=i);var k=b+1;return k>i&&(k=0),g=f(h[b],h[j],h[k],s[a]),g?!0:!1}function d(a,b){var c,d,f;for(c=0;c0)return!0;return!1}function g(a,c){var d,f,g,h,i;for(d=0;d0)return!0;return!1}for(var h,i,j,k,l,m,n,o,p,q,r,s=a.concat(),t=[],u=[],v=0,w=b.length;w>v;v++)t.push(v);for(var x=0,y=2*t.length;t.length>0;){if(y--,0>y){console.log("Infinite Loop! Holes left:"+t.length+", Probably Hole outside Shape!");break}for(j=x;j=0)break;u[n]=!0}if(i>=0)break}}return s}for(var h,i,j,k,l,m,n={},o=b.concat(),p=0,q=c.length;q>p;p++)Array.prototype.push.apply(o,c[p]);for(h=0,i=o.length;i>h;h++)l=o[h].x+":"+o[h].y,void 0!==n[l]&&console.log("Duplicate point",l),n[l]=h;var r=g(b,c),s=a.FontUtils.Triangulate(r,!1);for(h=0,i=s.length;i>h;h++)for(k=s[h],j=0;3>j;j++)l=k[j].x+":"+k[j].y,m=n[l],void 0!==m&&(k[j]=m);return s.concat()},isClockWise:function(b){return a.FontUtils.Triangulate.area(b)<0},b2p0:function(a,b){var c=1-a;return c*c*b},b2p1:function(a,b){return 2*(1-a)*a*b},b2p2:function(a,b){return a*a*b},b2:function(a,b,c,d){return this.b2p0(a,b)+this.b2p1(a,c)+this.b2p2(a,d)},b3p0:function(a,b){var c=1-a;return c*c*c*b},b3p1:function(a,b){var c=1-a;return 3*c*c*a*b},b3p2:function(a,b){var c=1-a;return 3*c*a*a*b},b3p3:function(a,b){return a*a*a*b},b3:function(a,b,c,d,e){return this.b3p0(a,b)+this.b3p1(a,c)+this.b3p2(a,d)+this.b3p3(a,e)}},a.LineCurve=function(a,b){this.v1=a,this.v2=b},a.LineCurve.prototype=Object.create(a.Curve.prototype),a.LineCurve.prototype.getPoint=function(a){var b=this.v2.clone().sub(this.v1);return b.multiplyScalar(a).add(this.v1),b},a.LineCurve.prototype.getPointAt=function(a){return this.getPoint(a)},a.LineCurve.prototype.getTangent=function(a){var b=this.v2.clone().sub(this.v1);return b.normalize()},a.QuadraticBezierCurve=function(a,b,c){this.v0=a,this.v1=b,this.v2=c},a.QuadraticBezierCurve.prototype=Object.create(a.Curve.prototype),a.QuadraticBezierCurve.prototype.getPoint=function(b){var c=new a.Vector2;return c.x=a.Shape.Utils.b2(b,this.v0.x,this.v1.x,this.v2.x),c.y=a.Shape.Utils.b2(b,this.v0.y,this.v1.y,this.v2.y),c},a.QuadraticBezierCurve.prototype.getTangent=function(b){var c=new a.Vector2;return c.x=a.Curve.Utils.tangentQuadraticBezier(b,this.v0.x,this.v1.x,this.v2.x),c.y=a.Curve.Utils.tangentQuadraticBezier(b,this.v0.y,this.v1.y,this.v2.y),c.normalize()},a.CubicBezierCurve=function(a,b,c,d){this.v0=a,this.v1=b,this.v2=c,this.v3=d},a.CubicBezierCurve.prototype=Object.create(a.Curve.prototype),a.CubicBezierCurve.prototype.getPoint=function(b){var c,d;return c=a.Shape.Utils.b3(b,this.v0.x,this.v1.x,this.v2.x,this.v3.x),d=a.Shape.Utils.b3(b,this.v0.y,this.v1.y,this.v2.y,this.v3.y),new a.Vector2(c,d)},a.CubicBezierCurve.prototype.getTangent=function(b){var c,d;c=a.Curve.Utils.tangentCubicBezier(b,this.v0.x,this.v1.x,this.v2.x,this.v3.x),d=a.Curve.Utils.tangentCubicBezier(b,this.v0.y,this.v1.y,this.v2.y,this.v3.y);var e=new a.Vector2(c,d);return e.normalize(),e},a.SplineCurve=function(a){this.points=void 0==a?[]:a},a.SplineCurve.prototype=Object.create(a.Curve.prototype),a.SplineCurve.prototype.getPoint=function(b){var c=this.points,d=(c.length-1)*b,e=Math.floor(d),f=d-e,g=c[0==e?e:e-1],h=c[e],i=c[e>c.length-2?c.length-1:e+1],j=c[e>c.length-3?c.length-1:e+2],k=new a.Vector2;return k.x=a.Curve.Utils.interpolate(g.x,h.x,i.x,j.x,f),k.y=a.Curve.Utils.interpolate(g.y,h.y,i.y,j.y,f),k},a.EllipseCurve=function(a,b,c,d,e,f,g){this.aX=a,this.aY=b,this.xRadius=c,this.yRadius=d,this.aStartAngle=e,this.aEndAngle=f,this.aClockwise=g},a.EllipseCurve.prototype=Object.create(a.Curve.prototype),a.EllipseCurve.prototype.getPoint=function(b){var c=this.aEndAngle-this.aStartAngle;0>c&&(c+=2*Math.PI),c>2*Math.PI&&(c-=2*Math.PI);var d;d=this.aClockwise===!0?this.aEndAngle+(1-b)*(2*Math.PI-c):this.aStartAngle+b*c;var e=new a.Vector2;return e.x=this.aX+this.xRadius*Math.cos(d),e.y=this.aY+this.yRadius*Math.sin(d),e},a.ArcCurve=function(b,c,d,e,f,g){a.EllipseCurve.call(this,b,c,d,d,e,f,g)},a.ArcCurve.prototype=Object.create(a.EllipseCurve.prototype),a.LineCurve3=a.Curve.create(function(a,b){this.v1=a,this.v2=b},function(b){var c=new a.Vector3;return c.subVectors(this.v2,this.v1),c.multiplyScalar(b),c.add(this.v1),c}),a.QuadraticBezierCurve3=a.Curve.create(function(a,b,c){this.v0=a,this.v1=b,this.v2=c},function(b){var c=new a.Vector3;return c.x=a.Shape.Utils.b2(b,this.v0.x,this.v1.x,this.v2.x),c.y=a.Shape.Utils.b2(b,this.v0.y,this.v1.y,this.v2.y),c.z=a.Shape.Utils.b2(b,this.v0.z,this.v1.z,this.v2.z),c}),a.CubicBezierCurve3=a.Curve.create(function(a,b,c,d){this.v0=a,this.v1=b,this.v2=c,this.v3=d},function(b){var c=new a.Vector3;return c.x=a.Shape.Utils.b3(b,this.v0.x,this.v1.x,this.v2.x,this.v3.x),c.y=a.Shape.Utils.b3(b,this.v0.y,this.v1.y,this.v2.y,this.v3.y),c.z=a.Shape.Utils.b3(b,this.v0.z,this.v1.z,this.v2.z,this.v3.z),c}),a.SplineCurve3=a.Curve.create(function(a){this.points=void 0==a?[]:a},function(b){var c=this.points,d=(c.length-1)*b,e=Math.floor(d),f=d-e,g=c[0==e?e:e-1],h=c[e],i=c[e>c.length-2?c.length-1:e+1],j=c[e>c.length-3?c.length-1:e+2],k=new a.Vector3;return k.x=a.Curve.Utils.interpolate(g.x,h.x,i.x,j.x,f),k.y=a.Curve.Utils.interpolate(g.y,h.y,i.y,j.y,f),k.z=a.Curve.Utils.interpolate(g.z,h.z,i.z,j.z,f),k}),a.ClosedSplineCurve3=a.Curve.create(function(a){this.points=void 0==a?[]:a},function(b){var c=this.points,d=(c.length-0)*b,e=Math.floor(d),f=d-e;e+=e>0?0:(Math.floor(Math.abs(e)/c.length)+1)*c.length;var g=c[(e-1)%c.length],h=c[e%c.length],i=c[(e+1)%c.length],j=c[(e+2)%c.length],k=new a.Vector3;return k.x=a.Curve.Utils.interpolate(g.x,h.x,i.x,j.x,f),k.y=a.Curve.Utils.interpolate(g.y,h.y,i.y,j.y,f),k.z=a.Curve.Utils.interpolate(g.z,h.z,i.z,j.z,f),k}),a.AnimationHandler={LINEAR:0,CATMULLROM:1,CATMULLROM_FORWARD:2,add:function(){console.warn("THREE.AnimationHandler.add() has been deprecated.")},get:function(){console.warn("THREE.AnimationHandler.get() has been deprecated.")},remove:function(){console.warn("THREE.AnimationHandler.remove() has been deprecated.")},animations:[],init:function(b){if(b.initialized!==!0){for(var c=0;ca;a++){var c=this.hierarchy[a];c.matrixAutoUpdate=!0,void 0===c.animationCache&&(c.animationCache={animations:{},blending:{positionWeight:0,quaternionWeight:0,scaleWeight:0}}),void 0===c.animationCache.animations[this.data.name]&&(c.animationCache.animations[this.data.name]={},c.animationCache.animations[this.data.name].prevKey={pos:0,rot:0,scl:0},c.animationCache.animations[this.data.name].nextKey={pos:0,rot:0,scl:0},c.animationCache.animations[this.data.name].originalMatrix=c.matrix);for(var d=c.animationCache.animations[this.data.name],e=0;3>e;e++){for(var f=this.keyTypes[e],g=this.data.hierarchy[a].keys[0],h=this.getNextKeyWith(f,a,1);h.timeg.index;)g=h,h=this.getNextKeyWith(f,a,h.index+1);d.prevKey[f]=g,d.nextKey[f]=h}}},a.Animation.prototype.resetBlendWeights=function(){for(var a=0,b=this.hierarchy.length;b>a;a++){var c=this.hierarchy[a];void 0!==c.animationCache&&(c.animationCache.blending.positionWeight=0,c.animationCache.blending.quaternionWeight=0,c.animationCache.blending.scaleWeight=0)}},a.Animation.prototype.update=function(){var b=[],c=new a.Vector3,d=new a.Vector3,e=new a.Quaternion,f=function(a,b){var c,d,e,f,h,i,j,k,l,m=[],n=[];return c=(a.length-1)*b,d=Math.floor(c),e=c-d,m[0]=0===d?d:d-1,m[1]=d,m[2]=d>a.length-2?d:d+1,m[3]=d>a.length-3?d:d+2,i=a[m[0]],j=a[m[1]],k=a[m[2]],l=a[m[3]],f=e*e,h=e*f,n[0]=g(i[0],j[0],k[0],l[0],e,f,h),n[1]=g(i[1],j[1],k[1],l[1],e,f,h),n[2]=g(i[2],j[2],k[2],l[2],e,f,h),n},g=function(a,b,c,d,e,f,g){var h=.5*(c-a),i=.5*(d-b);return(2*(b-c)+h+i)*g+(-3*(b-c)-2*h-i)*f+h*e+b};return function(g){if(this.isPlaying!==!1&&(this.currentTime+=g*this.timeScale,0!==this.weight)){var h=this.data.length;if(this.currentTime>h||this.currentTime<0){if(!this.loop)return void this.stop();this.currentTime%=h,this.currentTime<0&&(this.currentTime+=h),this.reset()}for(var i=0,j=this.hierarchy.length;j>i;i++)for(var k=this.hierarchy[i],l=k.animationCache.animations[this.data.name],m=k.animationCache.blending,n=0;3>n;n++){var o=this.keyTypes[n],p=l.prevKey[o],q=l.nextKey[o];if(this.timeScale>0&&q.time<=this.currentTime||this.timeScale<0&&p.time>=this.currentTime){for(p=this.data.hierarchy[i].keys[0],q=this.getNextKeyWith(o,i,1);q.timep.index;)p=q,q=this.getNextKeyWith(o,i,q.index+1);l.prevKey[o]=p,l.nextKey[o]=q}k.matrixAutoUpdate=!0,k.matrixWorldNeedsUpdate=!0;var r=(this.currentTime-p.time)/(q.time-p.time),s=p[o],t=q[o];if(0>r&&(r=0),r>1&&(r=1),"pos"===o){if(this.interpolationType===a.AnimationHandler.LINEAR){d.x=s[0]+(t[0]-s[0])*r,d.y=s[1]+(t[1]-s[1])*r,d.z=s[2]+(t[2]-s[2])*r;var u=this.weight/(this.weight+m.positionWeight);k.position.lerp(d,u),m.positionWeight+=this.weight}else if(this.interpolationType===a.AnimationHandler.CATMULLROM||this.interpolationType===a.AnimationHandler.CATMULLROM_FORWARD){b[0]=this.getPrevKeyWith("pos",i,p.index-1).pos,b[1]=s,b[2]=t,b[3]=this.getNextKeyWith("pos",i,q.index+1).pos,r=.33*r+.33;var v=f(b,r),u=this.weight/(this.weight+m.positionWeight);m.positionWeight+=this.weight;var w=k.position;if(w.x=w.x+(v[0]-w.x)*u,w.y=w.y+(v[1]-w.y)*u,w.z=w.z+(v[2]-w.z)*u,this.interpolationType===a.AnimationHandler.CATMULLROM_FORWARD){var x=f(b,1.01*r);c.set(x[0],x[1],x[2]),c.sub(w),c.y=0,c.normalize();var y=Math.atan2(c.x,c.z);k.rotation.set(0,y,0)}}}else if("rot"===o)if(a.Quaternion.slerp(s,t,e,r),0===m.quaternionWeight)k.quaternion.copy(e),m.quaternionWeight=this.weight;else{var u=this.weight/(this.weight+m.quaternionWeight);a.Quaternion.slerp(k.quaternion,e,k.quaternion,u),m.quaternionWeight+=this.weight}else if("scl"===o){d.x=s[0]+(t[0]-s[0])*r,d.y=s[1]+(t[1]-s[1])*r,d.z=s[2]+(t[2]-s[2])*r; +var u=this.weight/(this.weight+m.scaleWeight);k.scale.lerp(d,u),m.scaleWeight+=this.weight}}return!0}}}(),a.Animation.prototype.getNextKeyWith=function(b,c,d){var e=this.data.hierarchy[c].keys;for(this.interpolationType===a.AnimationHandler.CATMULLROM||this.interpolationType===a.AnimationHandler.CATMULLROM_FORWARD?d=d0?d:0:d>=0?d:d+e.length;d>=0;d--)if(void 0!==e[d][b])return e[d];return this.data.hierarchy[c].keys[e.length-1]},a.KeyFrameAnimation=function(b){this.root=b.node,this.data=a.AnimationHandler.init(b),this.hierarchy=a.AnimationHandler.parse(this.root),this.currentTime=0,this.timeScale=.001,this.isPlaying=!1,this.isPaused=!0,this.loop=!0;for(var c=0,d=this.hierarchy.length;d>c;c++){var e=this.data.hierarchy[c].keys,f=this.data.hierarchy[c].sids,g=this.hierarchy[c];if(e.length&&f){for(var h=0;hc;c++){d=this.hierarchy[c],e=this.data.hierarchy[c],void 0===e.animationCache&&(e.animationCache={},e.animationCache.prevKey=null,e.animationCache.nextKey=null,e.animationCache.originalMatrix=d.matrix);var g=this.data.hierarchy[c].keys;g.length&&(e.animationCache.prevKey=g[0],e.animationCache.nextKey=g[1],this.startTime=Math.min(g[0].time,this.startTime),this.endTime=Math.max(g[g.length-1].time,this.endTime))}this.update(0)}this.isPaused=!1,a.AnimationHandler.play(this)},a.KeyFrameAnimation.prototype.stop=function(){this.isPlaying=!1,this.isPaused=!1,a.AnimationHandler.stop(this);for(var b=0;bb&&(this.currentTime%=b),this.currentTime=Math.min(this.currentTime,b);for(var c=0,d=this.hierarchy.length;d>c;c++){var e=this.hierarchy[c],f=this.data.hierarchy[c],g=f.keys,h=f.animationCache;if(g.length){var i=h.prevKey,j=h.nextKey;if(j.time<=this.currentTime){for(;j.timei.index;)i=j,j=g[i.index+1];h.prevKey=i,h.nextKey=j}j.time>=this.currentTime?i.interpolate(j,this.currentTime):i.interpolate(j,j.time),this.data.hierarchy[c].node.updateMatrix(),e.matrixWorldNeedsUpdate=!0}}}},a.KeyFrameAnimation.prototype.getNextKeyWith=function(a,b,c){var d=this.data.hierarchy[b].keys;for(c%=d.length;c=0?c:c+d.length;c>=0;c--)if(d[c].hasTarget(a))return d[c];return d[d.length-1]},a.MorphAnimation=function(a){this.mesh=a,this.frames=a.morphTargetInfluences.length,this.currentTime=0,this.duration=1e3,this.loop=!0,this.isPlaying=!1},a.MorphAnimation.prototype={play:function(){this.isPlaying=!0},pause:function(){this.isPlaying=!1},update:function(){var a=0,b=0;return function(c){if(this.isPlaying!==!1){this.currentTime+=c,this.loop===!0&&this.currentTime>this.duration&&(this.currentTime%=this.duration),this.currentTime=Math.min(this.currentTime,this.duration);var d=this.duration/this.frames,e=Math.floor(this.currentTime/d);e!=b&&(this.mesh.morphTargetInfluences[a]=0,this.mesh.morphTargetInfluences[b]=1,this.mesh.morphTargetInfluences[e]=0,a=b,b=e),this.mesh.morphTargetInfluences[e]=this.currentTime%d/d,this.mesh.morphTargetInfluences[a]=1-this.mesh.morphTargetInfluences[e]}}}()},a.BoxGeometry=function(b,c,d,e,f,g){function h(b,c,d,e,f,g,h,j){var k,l,m,n=i.widthSegments,o=i.heightSegments,p=f/2,q=g/2,r=i.vertices.length;"x"===b&&"y"===c||"y"===b&&"x"===c?k="z":"x"===b&&"z"===c||"z"===b&&"x"===c?(k="y",o=i.depthSegments):("z"===b&&"y"===c||"y"===b&&"z"===c)&&(k="x",n=i.depthSegments);var s=n+1,t=o+1,u=f/n,v=g/o,w=new a.Vector3;for(w[k]=h>0?1:-1,m=0;t>m;m++)for(l=0;s>l;l++){var x=new a.Vector3;x[b]=(l*u-p)*d,x[c]=(m*v-q)*e,x[k]=h,i.vertices.push(x)}for(m=0;o>m;m++)for(l=0;n>l;l++){var y=l+s*m,z=l+s*(m+1),A=l+1+s*(m+1),B=l+1+s*m,C=new a.Vector2(l/n,1-m/o),D=new a.Vector2(l/n,1-(m+1)/o),E=new a.Vector2((l+1)/n,1-(m+1)/o),F=new a.Vector2((l+1)/n,1-m/o),G=new a.Face3(y+r,z+r,B+r);G.normal.copy(w),G.vertexNormals.push(w.clone(),w.clone(),w.clone()),G.materialIndex=j,i.faces.push(G),i.faceVertexUvs[0].push([C,D,F]),G=new a.Face3(z+r,A+r,B+r),G.normal.copy(w),G.vertexNormals.push(w.clone(),w.clone(),w.clone()),G.materialIndex=j,i.faces.push(G),i.faceVertexUvs[0].push([D.clone(),E,F.clone()])}}a.Geometry.call(this),this.type="BoxGeometry",this.parameters={width:b,height:c,depth:d,widthSegments:e,heightSegments:f,depthSegments:g},this.widthSegments=e||1,this.heightSegments=f||1,this.depthSegments=g||1;var i=this,j=b/2,k=c/2,l=d/2;h("z","y",-1,-1,d,c,j,0),h("z","y",1,-1,d,c,-j,1),h("x","z",1,1,b,d,k,2),h("x","z",1,-1,b,d,-k,3),h("x","y",1,-1,b,c,l,4),h("x","y",-1,-1,b,c,-l,5),this.mergeVertices()},a.BoxGeometry.prototype=Object.create(a.Geometry.prototype),a.CircleGeometry=function(b,c,d,e){a.Geometry.call(this),this.type="CircleGeometry",this.parameters={radius:b,segments:c,thetaStart:d,thetaLength:e},b=b||50,c=void 0!==c?Math.max(3,c):8,d=void 0!==d?d:0,e=void 0!==e?e:2*Math.PI;var f,g=[],h=new a.Vector3,i=new a.Vector2(.5,.5);for(this.vertices.push(h),g.push(i),f=0;c>=f;f++){var j=new a.Vector3,k=d+f/c*e;j.x=b*Math.cos(k),j.y=b*Math.sin(k),this.vertices.push(j),g.push(new a.Vector2((j.x/b+1)/2,(j.y/b+1)/2))}var l=new a.Vector3(0,0,1);for(f=1;c>=f;f++)this.faces.push(new a.Face3(f,f+1,0,[l.clone(),l.clone(),l.clone()])),this.faceVertexUvs[0].push([g[f].clone(),g[f+1].clone(),i.clone()]);this.computeFaceNormals(),this.boundingSphere=new a.Sphere(new a.Vector3,b)},a.CircleGeometry.prototype=Object.create(a.Geometry.prototype),a.CubeGeometry=function(b,c,d,e,f,g){return console.warn("THREE.CubeGeometry has been renamed to THREE.BoxGeometry."),new a.BoxGeometry(b,c,d,e,f,g)},a.CylinderGeometry=function(b,c,d,e,f,g){a.Geometry.call(this),this.type="CylinderGeometry",this.parameters={radiusTop:b,radiusBottom:c,height:d,radialSegments:e,heightSegments:f,openEnded:g},b=void 0!==b?b:20,c=void 0!==c?c:20,d=void 0!==d?d:100,e=e||8,f=f||1,g=void 0!==g?g:!1;var h,i,j=d/2,k=[],l=[];for(i=0;f>=i;i++){var m=[],n=[],o=i/f,p=o*(c-b)+b;for(h=0;e>=h;h++){var q=h/e,r=new a.Vector3;r.x=p*Math.sin(q*Math.PI*2),r.y=-o*d+j,r.z=p*Math.cos(q*Math.PI*2),this.vertices.push(r),m.push(this.vertices.length-1),n.push(new a.Vector2(q,1-o))}k.push(m),l.push(n)}var s,t,u=(c-b)/d;for(h=0;e>h;h++)for(0!==b?(s=this.vertices[k[0][h]].clone(),t=this.vertices[k[0][h+1]].clone()):(s=this.vertices[k[1][h]].clone(),t=this.vertices[k[1][h+1]].clone()),s.setY(Math.sqrt(s.x*s.x+s.z*s.z)*u).normalize(),t.setY(Math.sqrt(t.x*t.x+t.z*t.z)*u).normalize(),i=0;f>i;i++){var v=k[i][h],w=k[i+1][h],x=k[i+1][h+1],y=k[i][h+1],z=s.clone(),A=s.clone(),B=t.clone(),C=t.clone(),D=l[i][h].clone(),E=l[i+1][h].clone(),F=l[i+1][h+1].clone(),G=l[i][h+1].clone();this.faces.push(new a.Face3(v,w,y,[z,A,C])),this.faceVertexUvs[0].push([D,E,G]),this.faces.push(new a.Face3(w,x,y,[A.clone(),B,C.clone()])),this.faceVertexUvs[0].push([E.clone(),F,G.clone()])}if(g===!1&&b>0)for(this.vertices.push(new a.Vector3(0,j,0)),h=0;e>h;h++){var v=k[0][h],w=k[0][h+1],x=this.vertices.length-1,z=new a.Vector3(0,1,0),A=new a.Vector3(0,1,0),B=new a.Vector3(0,1,0),D=l[0][h].clone(),E=l[0][h+1].clone(),F=new a.Vector2(E.x,0);this.faces.push(new a.Face3(v,w,x,[z,A,B])),this.faceVertexUvs[0].push([D,E,F])}if(g===!1&&c>0)for(this.vertices.push(new a.Vector3(0,-j,0)),h=0;e>h;h++){var v=k[i][h+1],w=k[i][h],x=this.vertices.length-1,z=new a.Vector3(0,-1,0),A=new a.Vector3(0,-1,0),B=new a.Vector3(0,-1,0),D=l[i][h+1].clone(),E=l[i][h].clone(),F=new a.Vector2(E.x,1);this.faces.push(new a.Face3(v,w,x,[z,A,B])),this.faceVertexUvs[0].push([D,E,F])}this.computeFaceNormals()},a.CylinderGeometry.prototype=Object.create(a.Geometry.prototype),a.ExtrudeGeometry=function(b,c){return"undefined"==typeof b?void(b=[]):(a.Geometry.call(this),this.type="ExtrudeGeometry",b=b instanceof Array?b:[b],this.addShapeList(b,c),void this.computeFaceNormals())},a.ExtrudeGeometry.prototype=Object.create(a.Geometry.prototype),a.ExtrudeGeometry.prototype.addShapeList=function(a,b){for(var c=a.length,d=0;c>d;d++){var e=a[d];this.addShape(e,b)}},a.ExtrudeGeometry.prototype.addShape=function(b,c){function d(a,b,c){return b||console.log("die"),b.clone().multiplyScalar(c).add(a)}function e(b,c,d){var e,f,g=1e-10,h=1,i=b.x-c.x,j=b.y-c.y,k=d.x-b.x,l=d.y-b.y,m=i*i+j*j,n=i*l-j*k;if(Math.abs(n)>g){var o=Math.sqrt(m),p=Math.sqrt(k*k+l*l),q=c.x-j/o,r=c.y+i/o,s=d.x-l/p,t=d.y+k/p,u=((s-q)*l-(t-r)*k)/(i*l-j*k);e=q+i*u-b.x,f=r+j*u-b.y;var v=e*e+f*f;if(2>=v)return new a.Vector2(e,f);h=Math.sqrt(v/2)}else{var w=!1;i>g?k>g&&(w=!0):-g>i?-g>k&&(w=!0):Math.sign(j)==Math.sign(l)&&(w=!0),w?(e=-j,f=i,h=Math.sqrt(m)):(e=i,f=j,h=Math.sqrt(m/2))}return new a.Vector2(e/h,f/h)}function f(){if(u){var a=0,b=T*a;for(W=0;U>W;W++)S=L[W],j(S[2]+b,S[1]+b,S[0]+b);for(a=w+2*t,b=T*a,W=0;U>W;W++)S=L[W],j(S[0]+b,S[1]+b,S[2]+b)}else{for(W=0;U>W;W++)S=L[W],j(S[2],S[1],S[0]);for(W=0;U>W;W++)S=L[W],j(S[0]+T*w,S[1]+T*w,S[2]+T*w)}}function g(){var a=0;for(h(M,a),a+=M.length,D=0,E=J.length;E>D;D++)C=J[D],h(C,a),a+=C.length}function h(a,b){var c,d;for(W=a.length;--W>=0;){c=W,d=W-1,0>d&&(d=a.length-1);var e=0,f=w+2*t;for(e=0;f>e;e++){var g=T*e,h=T*(e+1),i=b+c+g,j=b+d+g,l=b+d+h,m=b+c+h;k(i,j,l,m,a,e,f,c,d)}}}function i(b,c,d){F.vertices.push(new a.Vector3(b,c,d))}function j(b,c,d){b+=G,c+=G,d+=G,F.faces.push(new a.Face3(b,c,d,null,null,z));var e=B.generateTopUV(F,b,c,d);F.faceVertexUvs[0].push(e)}function k(b,c,d,e,f,g,h,i,j){b+=G,c+=G,d+=G,e+=G,F.faces.push(new a.Face3(b,c,e,null,null,A)),F.faces.push(new a.Face3(c,d,e,null,null,A));var k=B.generateSideWallUV(F,b,c,d,e);F.faceVertexUvs[0].push([k[0],k[1],k[3]]),F.faceVertexUvs[0].push([k[1],k[2],k[3]])}var l,m,n,o,p,q=void 0!==c.amount?c.amount:100,r=void 0!==c.bevelThickness?c.bevelThickness:6,s=void 0!==c.bevelSize?c.bevelSize:r-2,t=void 0!==c.bevelSegments?c.bevelSegments:3,u=void 0!==c.bevelEnabled?c.bevelEnabled:!0,v=void 0!==c.curveSegments?c.curveSegments:12,w=void 0!==c.steps?c.steps:1,x=c.extrudePath,y=!1,z=c.material,A=c.extrudeMaterial,B=void 0!==c.UVGenerator?c.UVGenerator:a.ExtrudeGeometry.WorldUVGenerator;x&&(l=x.getSpacedPoints(w),y=!0,u=!1,m=void 0!==c.frames?c.frames:new a.TubeGeometry.FrenetFrames(x,w,!1),n=new a.Vector3,o=new a.Vector3,p=new a.Vector3),u||(t=0,r=0,s=0);var C,D,E,F=this,G=this.vertices.length,H=b.extractPoints(v),I=H.shape,J=H.holes,K=!a.Shape.Utils.isClockWise(I);if(K){for(I=I.reverse(),D=0,E=J.length;E>D;D++)C=J[D],a.Shape.Utils.isClockWise(C)&&(J[D]=C.reverse());K=!1}var L=a.Shape.Utils.triangulateShape(I,J),M=I;for(D=0,E=J.length;E>D;D++)C=J[D],I=I.concat(C);for(var N,O,P,Q,R,S,T=I.length,U=L.length,V=(M.length,180/Math.PI,[]),W=0,X=M.length,Y=X-1,Z=W+1;X>W;W++,Y++,Z++){Y===X&&(Y=0),Z===X&&(Z=0);M[W],M[Y],M[Z];V[W]=e(M[W],M[Y],M[Z])}var $,_=[],aa=V.concat();for(D=0,E=J.length;E>D;D++){for(C=J[D],$=[],W=0,X=C.length,Y=X-1,Z=W+1;X>W;W++,Y++,Z++)Y===X&&(Y=0),Z===X&&(Z=0),$[W]=e(C[W],C[Y],C[Z]);_.push($),aa=aa.concat($)}for(N=0;t>N;N++){for(P=N/t,Q=r*(1-P),O=s*Math.sin(P*Math.PI/2),W=0,X=M.length;X>W;W++)R=d(M[W],V[W],O),i(R.x,R.y,-Q);for(D=0,E=J.length;E>D;D++)for(C=J[D],$=_[D],W=0,X=C.length;X>W;W++)R=d(C[W],$[W],O),i(R.x,R.y,-Q)}for(O=s,W=0;T>W;W++)R=u?d(I[W],aa[W],O):I[W],y?(o.copy(m.normals[0]).multiplyScalar(R.x),n.copy(m.binormals[0]).multiplyScalar(R.y),p.copy(l[0]).add(o).add(n),i(p.x,p.y,p.z)):i(R.x,R.y,0);var ba;for(ba=1;w>=ba;ba++)for(W=0;T>W;W++)R=u?d(I[W],aa[W],O):I[W],y?(o.copy(m.normals[ba]).multiplyScalar(R.x),n.copy(m.binormals[ba]).multiplyScalar(R.y),p.copy(l[ba]).add(o).add(n),i(p.x,p.y,p.z)):i(R.x,R.y,q/w*ba);for(N=t-1;N>=0;N--){for(P=N/t,Q=r*(1-P),O=s*Math.sin(P*Math.PI/2),W=0,X=M.length;X>W;W++)R=d(M[W],V[W],O),i(R.x,R.y,q+Q);for(D=0,E=J.length;E>D;D++)for(C=J[D],$=_[D],W=0,X=C.length;X>W;W++)R=d(C[W],$[W],O),y?i(R.x,R.y+l[w-1].y,l[w-1].x+Q):i(R.x,R.y,q+Q)}f(),g()},a.ExtrudeGeometry.WorldUVGenerator={generateTopUV:function(b,c,d,e){var f=b.vertices,g=f[c],h=f[d],i=f[e];return[new a.Vector2(g.x,g.y),new a.Vector2(h.x,h.y),new a.Vector2(i.x,i.y)]},generateSideWallUV:function(b,c,d,e,f){var g=b.vertices,h=g[c],i=g[d],j=g[e],k=g[f];return Math.abs(h.y-i.y)<.01?[new a.Vector2(h.x,1-h.z),new a.Vector2(i.x,1-i.z),new a.Vector2(j.x,1-j.z),new a.Vector2(k.x,1-k.z)]:[new a.Vector2(h.y,1-h.z),new a.Vector2(i.y,1-i.z),new a.Vector2(j.y,1-j.z),new a.Vector2(k.y,1-k.z)]}},a.ShapeGeometry=function(b,c){a.Geometry.call(this),this.type="ShapeGeometry",b instanceof Array==!1&&(b=[b]),this.addShapeList(b,c),this.computeFaceNormals()},a.ShapeGeometry.prototype=Object.create(a.Geometry.prototype),a.ShapeGeometry.prototype.addShapeList=function(a,b){for(var c=0,d=a.length;d>c;c++)this.addShape(a[c],b);return this},a.ShapeGeometry.prototype.addShape=function(b,c){void 0===c&&(c={});var d,e,f,g=void 0!==c.curveSegments?c.curveSegments:12,h=c.material,i=void 0===c.UVGenerator?a.ExtrudeGeometry.WorldUVGenerator:c.UVGenerator,j=this.vertices.length,k=b.extractPoints(g),l=k.shape,m=k.holes,n=!a.Shape.Utils.isClockWise(l);if(n){for(l=l.reverse(),d=0,e=m.length;e>d;d++)f=m[d],a.Shape.Utils.isClockWise(f)&&(m[d]=f.reverse());n=!1}var o=a.Shape.Utils.triangulateShape(l,m),p=l;for(d=0,e=m.length;e>d;d++)f=m[d],l=l.concat(f);var q,r,s=l.length,t=o.length;p.length;for(d=0;s>d;d++)q=l[d],this.vertices.push(new a.Vector3(q.x,q.y,0));for(d=0;t>d;d++){r=o[d];var u=r[0]+j,v=r[1]+j,w=r[2]+j;this.faces.push(new a.Face3(u,v,w,null,null,h)),this.faceVertexUvs[0].push(i.generateTopUV(this,u,v,w))}},a.LatheGeometry=function(b,c,d,e){a.Geometry.call(this),this.type="LatheGeometry",this.parameters={points:b,segments:c,phiStart:d,phiLength:e},c=c||12,d=d||0,e=e||2*Math.PI;for(var f=1/(b.length-1),g=1/c,h=0,i=c;i>=h;h++)for(var j=d+h*g*e,k=Math.cos(j),l=Math.sin(j),m=0,n=b.length;n>m;m++){var o=b[m],p=new a.Vector3;p.x=k*o.x-l*o.y,p.y=l*o.x+k*o.y,p.z=o.z,this.vertices.push(p)}for(var q=b.length,h=0,i=c;i>h;h++)for(var m=0,n=b.length-1;n>m;m++){var r=m+q*h,s=r,t=r+q,k=r+1+q,u=r+1,v=h*g,w=m*f,x=v+g,y=w+f;this.faces.push(new a.Face3(s,t,u)),this.faceVertexUvs[0].push([new a.Vector2(v,w),new a.Vector2(x,w),new a.Vector2(v,y)]),this.faces.push(new a.Face3(t,k,u)),this.faceVertexUvs[0].push([new a.Vector2(x,w),new a.Vector2(x,y),new a.Vector2(v,y)])}this.mergeVertices(),this.computeFaceNormals(),this.computeVertexNormals()},a.LatheGeometry.prototype=Object.create(a.Geometry.prototype),a.PlaneGeometry=function(b,c,d,e){console.info("THREE.PlaneGeometry: Consider using THREE.PlaneBufferGeometry for lower memory footprint."),a.Geometry.call(this),this.type="PlaneGeometry",this.parameters={width:b,height:c,widthSegments:d,heightSegments:e},this.fromBufferGeometry(new a.PlaneBufferGeometry(b,c,d,e))},a.PlaneGeometry.prototype=Object.create(a.Geometry.prototype),a.PlaneBufferGeometry=function(b,c,d,e){a.BufferGeometry.call(this),this.type="PlaneBufferGeometry",this.parameters={width:b,height:c,widthSegments:d,heightSegments:e};for(var f=b/2,g=c/2,h=d||1,i=e||1,j=h+1,k=i+1,l=b/h,m=c/i,n=new Float32Array(j*k*3),o=new Float32Array(j*k*3),p=new Float32Array(j*k*2),q=0,r=0,s=0;k>s;s++)for(var t=s*m-g,u=0;j>u;u++){var v=u*l-f;n[q]=v,n[q+1]=-t,o[q+2]=1,p[r]=u/h,p[r+1]=1-s/i,q+=3,r+=2}q=0;for(var w=new(n.length/3>65535?Uint32Array:Uint16Array)(h*i*6),s=0;i>s;s++)for(var u=0;h>u;u++){var x=u+j*s,y=u+j*(s+1),z=u+1+j*(s+1),A=u+1+j*s;w[q]=x,w[q+1]=y,w[q+2]=A,w[q+3]=y,w[q+4]=z,w[q+5]=A,q+=6}this.addAttribute("index",new a.BufferAttribute(w,1)),this.addAttribute("position",new a.BufferAttribute(n,3)),this.addAttribute("normal",new a.BufferAttribute(o,3)),this.addAttribute("uv",new a.BufferAttribute(p,2))},a.PlaneBufferGeometry.prototype=Object.create(a.BufferGeometry.prototype),a.RingGeometry=function(b,c,d,e,f,g){a.Geometry.call(this),this.type="RingGeometry",this.parameters={innerRadius:b,outerRadius:c,thetaSegments:d,phiSegments:e,thetaStart:f,thetaLength:g},b=b||0,c=c||50,f=void 0!==f?f:0,g=void 0!==g?g:2*Math.PI,d=void 0!==d?Math.max(3,d):8,e=void 0!==e?Math.max(1,e):8;var h,i,j=[],k=b,l=(c-b)/e;for(h=0;e+1>h;h++){for(i=0;d+1>i;i++){var m=new a.Vector3,n=f+i/d*g;m.x=k*Math.cos(n),m.y=k*Math.sin(n),this.vertices.push(m),j.push(new a.Vector2((m.x/c+1)/2,(m.y/c+1)/2))}k+=l}var o=new a.Vector3(0,0,1);for(h=0;e>h;h++){var p=h*(d+1);for(i=0;d>i;i++){var n=i+p,q=n,r=n+d+1,s=n+d+2;this.faces.push(new a.Face3(q,r,s,[o.clone(),o.clone(),o.clone()])),this.faceVertexUvs[0].push([j[q].clone(),j[r].clone(),j[s].clone()]),q=n,r=n+d+2,s=n+1,this.faces.push(new a.Face3(q,r,s,[o.clone(),o.clone(),o.clone()])),this.faceVertexUvs[0].push([j[q].clone(),j[r].clone(),j[s].clone()])}}this.computeFaceNormals(),this.boundingSphere=new a.Sphere(new a.Vector3,k)},a.RingGeometry.prototype=Object.create(a.Geometry.prototype),a.SphereGeometry=function(b,c,d,e,f,g,h){a.Geometry.call(this),this.type="SphereGeometry",this.parameters={radius:b,widthSegments:c,heightSegments:d,phiStart:e,phiLength:f,thetaStart:g,thetaLength:h},b=b||50,c=Math.max(3,Math.floor(c)||8),d=Math.max(2,Math.floor(d)||6),e=void 0!==e?e:0,f=void 0!==f?f:2*Math.PI,g=void 0!==g?g:0,h=void 0!==h?h:Math.PI;var i,j,k=[],l=[];for(j=0;d>=j;j++){var m=[],n=[];for(i=0;c>=i;i++){var o=i/c,p=j/d,q=new a.Vector3;q.x=-b*Math.cos(e+o*f)*Math.sin(g+p*h),q.y=b*Math.cos(g+p*h),q.z=b*Math.sin(e+o*f)*Math.sin(g+p*h),this.vertices.push(q),m.push(this.vertices.length-1),n.push(new a.Vector2(o,1-p))}k.push(m),l.push(n)}for(j=0;d>j;j++)for(i=0;c>i;i++){var r=k[j][i+1],s=k[j][i],t=k[j+1][i],u=k[j+1][i+1],v=this.vertices[r].clone().normalize(),w=this.vertices[s].clone().normalize(),x=this.vertices[t].clone().normalize(),y=this.vertices[u].clone().normalize(),z=l[j][i+1].clone(),A=l[j][i].clone(),B=l[j+1][i].clone(),C=l[j+1][i+1].clone();Math.abs(this.vertices[r].y)===b?(z.x=(z.x+A.x)/2,this.faces.push(new a.Face3(r,t,u,[v,x,y])),this.faceVertexUvs[0].push([z,B,C])):Math.abs(this.vertices[t].y)===b?(B.x=(B.x+C.x)/2,this.faces.push(new a.Face3(r,s,t,[v,w,x])),this.faceVertexUvs[0].push([z,A,B])):(this.faces.push(new a.Face3(r,s,u,[v,w,y])),this.faceVertexUvs[0].push([z,A,C]),this.faces.push(new a.Face3(s,t,u,[w.clone(),x,y.clone()])),this.faceVertexUvs[0].push([A.clone(),B,C.clone()]))}this.computeFaceNormals(),this.boundingSphere=new a.Sphere(new a.Vector3,b)},a.SphereGeometry.prototype=Object.create(a.Geometry.prototype),a.TextGeometry=function(b,c){c=c||{};var d=a.FontUtils.generateShapes(b,c);c.amount=void 0!==c.height?c.height:50,void 0===c.bevelThickness&&(c.bevelThickness=10),void 0===c.bevelSize&&(c.bevelSize=8),void 0===c.bevelEnabled&&(c.bevelEnabled=!1),a.ExtrudeGeometry.call(this,d,c),this.type="TextGeometry"},a.TextGeometry.prototype=Object.create(a.ExtrudeGeometry.prototype),a.TorusGeometry=function(b,c,d,e,f){a.Geometry.call(this),this.type="TorusGeometry",this.parameters={radius:b,tube:c,radialSegments:d,tubularSegments:e,arc:f},b=b||100,c=c||40,d=d||8,e=e||6,f=f||2*Math.PI;for(var g=new a.Vector3,h=[],i=[],j=0;d>=j;j++)for(var k=0;e>=k;k++){var l=k/e*f,m=j/d*Math.PI*2;g.x=b*Math.cos(l),g.y=b*Math.sin(l);var n=new a.Vector3;n.x=(b+c*Math.cos(m))*Math.cos(l),n.y=(b+c*Math.cos(m))*Math.sin(l),n.z=c*Math.sin(m),this.vertices.push(n),h.push(new a.Vector2(k/e,j/d)),i.push(n.clone().sub(g).normalize())}for(var j=1;d>=j;j++)for(var k=1;e>=k;k++){var o=(e+1)*j+k-1,p=(e+1)*(j-1)+k-1,q=(e+1)*(j-1)+k,r=(e+1)*j+k,s=new a.Face3(o,p,r,[i[o].clone(),i[p].clone(),i[r].clone()]);this.faces.push(s),this.faceVertexUvs[0].push([h[o].clone(),h[p].clone(),h[r].clone()]),s=new a.Face3(p,q,r,[i[p].clone(),i[q].clone(),i[r].clone()]),this.faces.push(s),this.faceVertexUvs[0].push([h[p].clone(),h[q].clone(),h[r].clone()])}this.computeFaceNormals()},a.TorusGeometry.prototype=Object.create(a.Geometry.prototype),a.TorusKnotGeometry=function(b,c,d,e,f,g,h){function i(b,c,d,e,f){var g=Math.cos(b),h=Math.sin(b),i=c/d*b,j=Math.cos(i),k=e*(2+j)*.5*g,l=e*(2+j)*h*.5,m=f*e*Math.sin(i)*.5;return new a.Vector3(k,l,m)}a.Geometry.call(this),this.type="TorusKnotGeometry",this.parameters={radius:b,tube:c,radialSegments:d,tubularSegments:e,p:f,q:g,heightScale:h},b=b||100,c=c||40,d=d||64,e=e||8,f=f||2,g=g||3,h=h||1;for(var j=new Array(d),k=new a.Vector3,l=new a.Vector3,m=new a.Vector3,n=0;d>n;++n){j[n]=new Array(e);var o=n/d*2*f*Math.PI,p=i(o,g,f,b,h),q=i(o+.01,g,f,b,h);k.subVectors(q,p),l.addVectors(q,p),m.crossVectors(k,l),l.crossVectors(m,k),m.normalize(),l.normalize();for(var r=0;e>r;++r){var s=r/e*2*Math.PI,t=-c*Math.cos(s),u=c*Math.sin(s),v=new a.Vector3;v.x=p.x+t*l.x+u*m.x,v.y=p.y+t*l.y+u*m.y,v.z=p.z+t*l.z+u*m.z,j[n][r]=this.vertices.push(v)-1}}for(var n=0;d>n;++n)for(var r=0;e>r;++r){var w=(n+1)%d,x=(r+1)%e,y=j[n][r],z=j[w][r],A=j[w][x],B=j[n][x],C=new a.Vector2(n/d,r/e),D=new a.Vector2((n+1)/d,r/e),E=new a.Vector2((n+1)/d,(r+1)/e),F=new a.Vector2(n/d,(r+1)/e);this.faces.push(new a.Face3(y,z,B)),this.faceVertexUvs[0].push([C,D,F]),this.faces.push(new a.Face3(z,A,B)),this.faceVertexUvs[0].push([D.clone(),E,F.clone()])}this.computeFaceNormals(),this.computeVertexNormals()},a.TorusKnotGeometry.prototype=Object.create(a.Geometry.prototype),a.TubeGeometry=function(b,c,d,e,f){function g(b,c,d){return C.vertices.push(new a.Vector3(b,c,d))-1}a.Geometry.call(this),this.type="TubeGeometry",this.parameters={path:b,segments:c,radius:d,radialSegments:e,closed:f},c=c||64,d=d||1,e=e||8,f=f||!1;var h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B=[],C=this,D=c+1,E=new a.Vector3,F=new a.TubeGeometry.FrenetFrames(b,c,f),G=F.tangents,H=F.normals,I=F.binormals;for(this.tangents=G,this.normals=H,this.binormals=I,p=0;D>p;p++)for(B[p]=[],k=p/(D-1),o=b.getPointAt(k),h=G[p],i=H[p],j=I[p],q=0;e>q;q++)l=q/e*2*Math.PI,m=-d*Math.cos(l),n=d*Math.sin(l),E.copy(o),E.x+=m*i.x+n*j.x,E.y+=m*i.y+n*j.y,E.z+=m*i.z+n*j.z,B[p][q]=g(E.x,E.y,E.z);for(p=0;c>p;p++)for(q=0;e>q;q++)r=f?(p+1)%c:p+1,s=(q+1)%e,t=B[p][q],u=B[r][q],v=B[r][s],w=B[p][s],x=new a.Vector2(p/c,q/e),y=new a.Vector2((p+1)/c,q/e),z=new a.Vector2((p+1)/c,(q+1)/e),A=new a.Vector2(p/c,(q+1)/e),this.faces.push(new a.Face3(t,u,w)),this.faceVertexUvs[0].push([x,y,A]),this.faces.push(new a.Face3(u,v,w)),this.faceVertexUvs[0].push([y.clone(),z,A.clone()]);this.computeFaceNormals(),this.computeVertexNormals()},a.TubeGeometry.prototype=Object.create(a.Geometry.prototype),a.TubeGeometry.FrenetFrames=function(b,c,d){function e(){o[0]=new a.Vector3,p[0]=new a.Vector3,g=Number.MAX_VALUE,h=Math.abs(n[0].x),i=Math.abs(n[0].y),j=Math.abs(n[0].z),g>=h&&(g=h,m.set(1,0,0)),g>=i&&(g=i,m.set(0,1,0)),g>=j&&m.set(0,0,1),q.crossVectors(n[0],m).normalize(),o[0].crossVectors(n[0],q),p[0].crossVectors(n[0],o[0])}var f,g,h,i,j,k,l,m=(new a.Vector3,new a.Vector3),n=(new a.Vector3,[]),o=[],p=[],q=new a.Vector3,r=new a.Matrix4,s=c+1,t=1e-4;for(this.tangents=n,this.normals=o,this.binormals=p,k=0;s>k;k++)l=k/(s-1),n[k]=b.getTangentAt(l),n[k].normalize();for(e(),k=1;s>k;k++)o[k]=o[k-1].clone(),p[k]=p[k-1].clone(),q.crossVectors(n[k-1],n[k]),q.length()>t&&(q.normalize(),f=Math.acos(a.Math.clamp(n[k-1].dot(n[k]),-1,1)),o[k].applyMatrix4(r.makeRotationAxis(q,f))),p[k].crossVectors(n[k],o[k]);if(d)for(f=Math.acos(a.Math.clamp(o[0].dot(o[s-1]),-1,1)),f/=s-1,n[0].dot(q.crossVectors(o[0],o[s-1]))>0&&(f=-f),k=1;s>k;k++)o[k].applyMatrix4(r.makeRotationAxis(n[k],f*k)),p[k].crossVectors(n[k],o[k])},a.PolyhedronGeometry=function(b,c,d,e){function f(b){var c=b.normalize().clone();c.index=l.vertices.push(c)-1;var d=i(b)/2/Math.PI+.5,e=j(b)/Math.PI+.5;return c.uv=new a.Vector2(d,1-e),c}function g(b,c,d){var e=new a.Face3(b.index,c.index,d.index,[b.clone(),c.clone(),d.clone()]);l.faces.push(e),u.copy(b).add(c).add(d).divideScalar(3);var f=i(u);l.faceVertexUvs[0].push([k(b.uv,b,f),k(c.uv,c,f),k(d.uv,d,f)])}function h(a,b){for(var c=Math.pow(2,b),d=(Math.pow(4,b),f(l.vertices[a.a])),e=f(l.vertices[a.b]),h=f(l.vertices[a.c]),i=[],j=0;c>=j;j++){i[j]=[];for(var k=f(d.clone().lerp(h,j/c)),m=f(e.clone().lerp(h,j/c)),n=c-j,o=0;n>=o;o++)0==o&&j==c?i[j][o]=k:i[j][o]=f(k.clone().lerp(m,o/n))}for(var j=0;c>j;j++)for(var o=0;2*(c-j)-1>o;o++){var p=Math.floor(o/2);o%2==0?g(i[j][p+1],i[j+1][p],i[j][p]):g(i[j][p+1],i[j+1][p+1],i[j+1][p])}}function i(a){return Math.atan2(a.z,-a.x)}function j(a){return Math.atan2(-a.y,Math.sqrt(a.x*a.x+a.z*a.z))}function k(b,c,d){return 0>d&&1===b.x&&(b=new a.Vector2(b.x-1,b.y)),0===c.x&&0===c.z&&(b=new a.Vector2(d/2/Math.PI+.5,b.y)),b.clone()}a.Geometry.call(this),this.type="PolyhedronGeometry",this.parameters={vertices:b,indices:c,radius:d,detail:e},d=d||1,e=e||0;for(var l=this,m=0,n=b.length;n>m;m+=3)f(new a.Vector3(b[m],b[m+1],b[m+2]));for(var o=this.vertices,p=[],m=0,q=0,n=c.length;n>m;m+=3,q++){var r=o[c[m]],s=o[c[m+1]],t=o[c[m+2]];p[q]=new a.Face3(r.index,s.index,t.index,[r.clone(),s.clone(),t.clone()])}for(var u=new a.Vector3,m=0,n=p.length;n>m;m++)h(p[m],e);for(var m=0,n=this.faceVertexUvs[0].length;n>m;m++){var v=this.faceVertexUvs[0][m],w=v[0].x,x=v[1].x,y=v[2].x,z=Math.max(w,Math.max(x,y)),A=Math.min(w,Math.min(x,y));z>.9&&.1>A&&(.2>w&&(v[0].x+=1),.2>x&&(v[1].x+=1),.2>y&&(v[2].x+=1))}for(var m=0,n=this.vertices.length;n>m;m++)this.vertices[m].multiplyScalar(d);this.mergeVertices(),this.computeFaceNormals(),this.boundingSphere=new a.Sphere(new a.Vector3,d)},a.PolyhedronGeometry.prototype=Object.create(a.Geometry.prototype),a.DodecahedronGeometry=function(b,c){this.parameters={radius:b,detail:c};var d=(1+Math.sqrt(5))/2,e=1/d,f=[-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,-e,-d,0,-e,d,0,e,-d,0,e,d,-e,-d,0,-e,d,0,e,-d,0,e,d,0,-d,0,-e,d,0,-e,-d,0,e,d,0,e],g=[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];a.PolyhedronGeometry.call(this,f,g,b,c)},a.DodecahedronGeometry.prototype=Object.create(a.Geometry.prototype),a.IcosahedronGeometry=function(b,c){var d=(1+Math.sqrt(5))/2,e=[-1,d,0,1,d,0,-1,-d,0,1,-d,0,0,-1,d,0,1,d,0,-1,-d,0,1,-d,d,0,-1,d,0,1,-d,0,-1,-d,0,1],f=[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5,11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1];a.PolyhedronGeometry.call(this,e,f,b,c),this.type="IcosahedronGeometry",this.parameters={radius:b,detail:c}},a.IcosahedronGeometry.prototype=Object.create(a.Geometry.prototype),a.OctahedronGeometry=function(b,c){this.parameters={radius:b,detail:c};var d=[1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1],e=[0,2,4,0,4,3,0,3,5,0,5,2,1,2,5,1,5,3,1,3,4,1,4,2];a.PolyhedronGeometry.call(this,d,e,b,c),this.type="OctahedronGeometry",this.parameters={radius:b,detail:c}},a.OctahedronGeometry.prototype=Object.create(a.Geometry.prototype),a.TetrahedronGeometry=function(b,c){var d=[1,1,1,-1,-1,1,-1,1,-1,1,-1,-1],e=[2,1,0,0,3,2,1,3,0,2,3,1];a.PolyhedronGeometry.call(this,d,e,b,c),this.type="TetrahedronGeometry",this.parameters={radius:b,detail:c}},a.TetrahedronGeometry.prototype=Object.create(a.Geometry.prototype),a.ParametricGeometry=function(b,c,d){a.Geometry.call(this),this.type="ParametricGeometry",this.parameters={func:b,slices:c,stacks:d};var e,f,g,h,i,j=this.vertices,k=this.faces,l=this.faceVertexUvs[0],m=c+1;for(e=0;d>=e;e++)for(i=e/d,f=0;c>=f;f++)h=f/c,g=b(h,i),j.push(g);var n,o,p,q,r,s,t,u;for(e=0;d>e;e++)for(f=0;c>f;f++)n=e*m+f,o=e*m+f+1,p=(e+1)*m+f+1,q=(e+1)*m+f,r=new a.Vector2(f/c,e/d),s=new a.Vector2((f+1)/c,e/d),t=new a.Vector2((f+1)/c,(e+1)/d),u=new a.Vector2(f/c,(e+1)/d),k.push(new a.Face3(n,o,q)),l.push([r,s,u]),k.push(new a.Face3(o,p,q)),l.push([s.clone(),t,u.clone()]);this.computeFaceNormals(),this.computeVertexNormals()},a.ParametricGeometry.prototype=Object.create(a.Geometry.prototype),a.AxisHelper=function(b){b=b||1;var c=new Float32Array([0,0,0,b,0,0,0,0,0,0,b,0,0,0,0,0,0,b]),d=new Float32Array([1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1]),e=new a.BufferGeometry;e.addAttribute("position",new a.BufferAttribute(c,3)),e.addAttribute("color",new a.BufferAttribute(d,3));var f=new a.LineBasicMaterial({vertexColors:a.VertexColors});a.Line.call(this,e,f,a.LinePieces)},a.AxisHelper.prototype=Object.create(a.Line.prototype),a.ArrowHelper=function(){var b=new a.Geometry;b.vertices.push(new a.Vector3(0,0,0),new a.Vector3(0,1,0));var c=new a.CylinderGeometry(0,.5,1,5,1);return c.applyMatrix((new a.Matrix4).makeTranslation(0,-.5,0)),function(d,e,f,g,h,i){a.Object3D.call(this),void 0===g&&(g=16776960),void 0===f&&(f=1),void 0===h&&(h=.2*f),void 0===i&&(i=.2*h),this.position.copy(e),this.line=new a.Line(b,new a.LineBasicMaterial({color:g})),this.line.matrixAutoUpdate=!1,this.add(this.line),this.cone=new a.Mesh(c,new a.MeshBasicMaterial({color:g})),this.cone.matrixAutoUpdate=!1,this.add(this.cone),this.setDirection(d),this.setLength(f,h,i)}}(),a.ArrowHelper.prototype=Object.create(a.Object3D.prototype),a.ArrowHelper.prototype.setDirection=function(){var b,c=new a.Vector3;return function(a){a.y>.99999?this.quaternion.set(0,0,0,1):a.y<-.99999?this.quaternion.set(1,0,0,0):(c.set(a.z,0,-a.x).normalize(),b=Math.acos(a.y),this.quaternion.setFromAxisAngle(c,b))}}(),a.ArrowHelper.prototype.setLength=function(a,b,c){void 0===b&&(b=.2*a),void 0===c&&(c=.2*b),this.line.scale.set(1,a,1),this.line.updateMatrix(),this.cone.scale.set(c,b,c),this.cone.position.y=a,this.cone.updateMatrix()},a.ArrowHelper.prototype.setColor=function(a){this.line.material.color.set(a),this.cone.material.color.set(a)},a.BoxHelper=function(b){var c=new a.BufferGeometry;c.addAttribute("position",new a.BufferAttribute(new Float32Array(72),3)),a.Line.call(this,c,new a.LineBasicMaterial({color:16776960}),a.LinePieces),void 0!==b&&this.update(b)},a.BoxHelper.prototype=Object.create(a.Line.prototype),a.BoxHelper.prototype.update=function(a){var b=a.geometry;null===b.boundingBox&&b.computeBoundingBox();var c=b.boundingBox.min,d=b.boundingBox.max,e=this.geometry.attributes.position.array;e[0]=d.x,e[1]=d.y,e[2]=d.z,e[3]=c.x,e[4]=d.y,e[5]=d.z,e[6]=c.x,e[7]=d.y,e[8]=d.z,e[9]=c.x,e[10]=c.y,e[11]=d.z,e[12]=c.x,e[13]=c.y,e[14]=d.z,e[15]=d.x,e[16]=c.y,e[17]=d.z,e[18]=d.x,e[19]=c.y,e[20]=d.z,e[21]=d.x,e[22]=d.y,e[23]=d.z,e[24]=d.x,e[25]=d.y,e[26]=c.z,e[27]=c.x,e[28]=d.y,e[29]=c.z,e[30]=c.x,e[31]=d.y,e[32]=c.z,e[33]=c.x,e[34]=c.y,e[35]=c.z,e[36]=c.x,e[37]=c.y,e[38]=c.z,e[39]=d.x,e[40]=c.y,e[41]=c.z,e[42]=d.x,e[43]=c.y,e[44]=c.z,e[45]=d.x,e[46]=d.y,e[47]=c.z,e[48]=d.x,e[49]=d.y,e[50]=d.z,e[51]=d.x,e[52]=d.y,e[53]=c.z,e[54]=c.x,e[55]=d.y,e[56]=d.z,e[57]=c.x,e[58]=d.y,e[59]=c.z,e[60]=c.x,e[61]=c.y,e[62]=d.z,e[63]=c.x,e[64]=c.y,e[65]=c.z,e[66]=d.x,e[67]=c.y,e[68]=d.z,e[69]=d.x,e[70]=c.y,e[71]=c.z,this.geometry.attributes.position.needsUpdate=!0,this.geometry.computeBoundingSphere(),this.matrix=a.matrixWorld,this.matrixAutoUpdate=!1},a.BoundingBoxHelper=function(b,c){var d=void 0!==c?c:8947848;this.object=b,this.box=new a.Box3,a.Mesh.call(this,new a.BoxGeometry(1,1,1),new a.MeshBasicMaterial({color:d,wireframe:!0}))},a.BoundingBoxHelper.prototype=Object.create(a.Mesh.prototype),a.BoundingBoxHelper.prototype.update=function(){this.box.setFromObject(this.object),this.box.size(this.scale),this.box.center(this.position)},a.CameraHelper=function(b){function c(a,b,c){d(a,c),d(b,c)}function d(b,c){e.vertices.push(new a.Vector3),e.colors.push(new a.Color(c)), +void 0===g[b]&&(g[b]=[]),g[b].push(e.vertices.length-1)}var e=new a.Geometry,f=new a.LineBasicMaterial({color:16777215,vertexColors:a.FaceColors}),g={},h=16755200,i=16711680,j=43775,k=16777215,l=3355443;c("n1","n2",h),c("n2","n4",h),c("n4","n3",h),c("n3","n1",h),c("f1","f2",h),c("f2","f4",h),c("f4","f3",h),c("f3","f1",h),c("n1","f1",h),c("n2","f2",h),c("n3","f3",h),c("n4","f4",h),c("p","n1",i),c("p","n2",i),c("p","n3",i),c("p","n4",i),c("u1","u2",j),c("u2","u3",j),c("u3","u1",j),c("c","t",k),c("p","c",l),c("cn1","cn2",l),c("cn3","cn4",l),c("cf1","cf2",l),c("cf3","cf4",l),a.Line.call(this,e,f,a.LinePieces),this.camera=b,this.matrix=b.matrixWorld,this.matrixAutoUpdate=!1,this.pointMap=g,this.update()},a.CameraHelper.prototype=Object.create(a.Line.prototype),a.CameraHelper.prototype.update=function(){var b,c,d=new a.Vector3,e=new a.Camera,f=function(a,f,g,h){d.set(f,g,h).unproject(e);var i=c[a];if(void 0!==i)for(var j=0,k=i.length;k>j;j++)b.vertices[i[j]].copy(d)};return function(){b=this.geometry,c=this.pointMap;var a=1,d=1;e.projectionMatrix.copy(this.camera.projectionMatrix),f("c",0,0,-1),f("t",0,0,1),f("n1",-a,-d,-1),f("n2",a,-d,-1),f("n3",-a,d,-1),f("n4",a,d,-1),f("f1",-a,-d,1),f("f2",a,-d,1),f("f3",-a,d,1),f("f4",a,d,1),f("u1",.7*a,1.1*d,-1),f("u2",.7*-a,1.1*d,-1),f("u3",0,2*d,-1),f("cf1",-a,0,1),f("cf2",a,0,1),f("cf3",0,-d,1),f("cf4",0,d,1),f("cn1",-a,0,-1),f("cn2",a,0,-1),f("cn3",0,-d,-1),f("cn4",0,d,-1),b.verticesNeedUpdate=!0}}(),a.DirectionalLightHelper=function(b,c){a.Object3D.call(this),this.light=b,this.light.updateMatrixWorld(),this.matrix=b.matrixWorld,this.matrixAutoUpdate=!1,c=c||1;var d=new a.Geometry;d.vertices.push(new a.Vector3(-c,c,0),new a.Vector3(c,c,0),new a.Vector3(c,-c,0),new a.Vector3(-c,-c,0),new a.Vector3(-c,c,0));var e=new a.LineBasicMaterial({fog:!1});e.color.copy(this.light.color).multiplyScalar(this.light.intensity),this.lightPlane=new a.Line(d,e),this.add(this.lightPlane),d=new a.Geometry,d.vertices.push(new a.Vector3,new a.Vector3),e=new a.LineBasicMaterial({fog:!1}),e.color.copy(this.light.color).multiplyScalar(this.light.intensity),this.targetLine=new a.Line(d,e),this.add(this.targetLine),this.update()},a.DirectionalLightHelper.prototype=Object.create(a.Object3D.prototype),a.DirectionalLightHelper.prototype.dispose=function(){this.lightPlane.geometry.dispose(),this.lightPlane.material.dispose(),this.targetLine.geometry.dispose(),this.targetLine.material.dispose()},a.DirectionalLightHelper.prototype.update=function(){var b=new a.Vector3,c=new a.Vector3,d=new a.Vector3;return function(){b.setFromMatrixPosition(this.light.matrixWorld),c.setFromMatrixPosition(this.light.target.matrixWorld),d.subVectors(c,b),this.lightPlane.lookAt(d),this.lightPlane.material.color.copy(this.light.color).multiplyScalar(this.light.intensity),this.targetLine.geometry.vertices[1].copy(d),this.targetLine.geometry.verticesNeedUpdate=!0,this.targetLine.material.color.copy(this.lightPlane.material.color)}}(),a.EdgesHelper=function(b,c){var d=void 0!==c?c:16777215,e=[0,0],f={},g=function(a,b){return a-b},h=["a","b","c"],i=new a.BufferGeometry,j=b.geometry.clone();j.mergeVertices(),j.computeFaceNormals();for(var k=j.vertices,l=j.faces,m=0,n=0,o=l.length;o>n;n++)for(var p=l[n],q=0;3>q;q++){e[0]=p[h[q]],e[1]=p[h[(q+1)%3]],e.sort(g);var r=e.toString();void 0===f[r]?(f[r]={vert1:e[0],vert2:e[1],face1:n,face2:void 0},m++):f[r].face2=n}var s=new Float32Array(2*m*3),t=0;for(var r in f){var u=f[r];if(void 0===u.face2||l[u.face1].normal.dot(l[u.face2].normal)<.9999){var v=k[u.vert1];s[t++]=v.x,s[t++]=v.y,s[t++]=v.z,v=k[u.vert2],s[t++]=v.x,s[t++]=v.y,s[t++]=v.z}}i.addAttribute("position",new a.BufferAttribute(s,3)),a.Line.call(this,i,new a.LineBasicMaterial({color:d}),a.LinePieces),this.matrix=b.matrixWorld,this.matrixAutoUpdate=!1},a.EdgesHelper.prototype=Object.create(a.Line.prototype),a.FaceNormalsHelper=function(b,c,d,e){this.object=b,this.size=void 0!==c?c:1;for(var f=void 0!==d?d:16776960,g=void 0!==e?e:1,h=new a.Geometry,i=this.object.geometry.faces,j=0,k=i.length;k>j;j++)h.vertices.push(new a.Vector3,new a.Vector3);a.Line.call(this,h,new a.LineBasicMaterial({color:f,linewidth:g}),a.LinePieces),this.matrixAutoUpdate=!1,this.normalMatrix=new a.Matrix3,this.update()},a.FaceNormalsHelper.prototype=Object.create(a.Line.prototype),a.FaceNormalsHelper.prototype.update=function(){var a=this.geometry.vertices,b=this.object,c=b.geometry.vertices,d=b.geometry.faces,e=b.matrixWorld;b.updateMatrixWorld(!0),this.normalMatrix.getNormalMatrix(e);for(var f=0,g=0,h=d.length;h>f;f++,g+=2){var i=d[f];a[g].copy(c[i.a]).add(c[i.b]).add(c[i.c]).divideScalar(3).applyMatrix4(e),a[g+1].copy(i.normal).applyMatrix3(this.normalMatrix).normalize().multiplyScalar(this.size).add(a[g])}return this.geometry.verticesNeedUpdate=!0,this},a.GridHelper=function(b,c){var d=new a.Geometry,e=new a.LineBasicMaterial({vertexColors:a.VertexColors});this.color1=new a.Color(4473924),this.color2=new a.Color(8947848);for(var f=-b;b>=f;f+=c){d.vertices.push(new a.Vector3(-b,0,f),new a.Vector3(b,0,f),new a.Vector3(f,0,-b),new a.Vector3(f,0,b));var g=0===f?this.color1:this.color2;d.colors.push(g,g,g,g)}a.Line.call(this,d,e,a.LinePieces)},a.GridHelper.prototype=Object.create(a.Line.prototype),a.GridHelper.prototype.setColors=function(a,b){this.color1.set(a),this.color2.set(b),this.geometry.colorsNeedUpdate=!0},a.HemisphereLightHelper=function(b,c,d,e){a.Object3D.call(this),this.light=b,this.light.updateMatrixWorld(),this.matrix=b.matrixWorld,this.matrixAutoUpdate=!1,this.colors=[new a.Color,new a.Color];var f=new a.SphereGeometry(c,4,2);f.applyMatrix((new a.Matrix4).makeRotationX(-Math.PI/2));for(var g=0,h=8;h>g;g++)f.faces[g].color=this.colors[4>g?0:1];var i=new a.MeshBasicMaterial({vertexColors:a.FaceColors,wireframe:!0});this.lightSphere=new a.Mesh(f,i),this.add(this.lightSphere),this.update()},a.HemisphereLightHelper.prototype=Object.create(a.Object3D.prototype),a.HemisphereLightHelper.prototype.dispose=function(){this.lightSphere.geometry.dispose(),this.lightSphere.material.dispose()},a.HemisphereLightHelper.prototype.update=function(){var b=new a.Vector3;return function(){this.colors[0].copy(this.light.color).multiplyScalar(this.light.intensity),this.colors[1].copy(this.light.groundColor).multiplyScalar(this.light.intensity),this.lightSphere.lookAt(b.setFromMatrixPosition(this.light.matrixWorld).negate()),this.lightSphere.geometry.colorsNeedUpdate=!0}}(),a.PointLightHelper=function(b,c){this.light=b,this.light.updateMatrixWorld();var d=new a.SphereGeometry(c,4,2),e=new a.MeshBasicMaterial({wireframe:!0,fog:!1});e.color.copy(this.light.color).multiplyScalar(this.light.intensity),a.Mesh.call(this,d,e),this.matrix=this.light.matrixWorld,this.matrixAutoUpdate=!1},a.PointLightHelper.prototype=Object.create(a.Mesh.prototype),a.PointLightHelper.prototype.dispose=function(){this.geometry.dispose(),this.material.dispose()},a.PointLightHelper.prototype.update=function(){this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity)},a.SkeletonHelper=function(b){this.bones=this.getBoneList(b);for(var c=new a.Geometry,d=0;dj;j++)for(var l=i[j],m=0,n=l.vertexNormals.length;n>m;m++)h.vertices.push(new a.Vector3,new a.Vector3);a.Line.call(this,h,new a.LineBasicMaterial({color:f,linewidth:g}),a.LinePieces),this.matrixAutoUpdate=!1,this.normalMatrix=new a.Matrix3,this.update()},a.VertexNormalsHelper.prototype=Object.create(a.Line.prototype),a.VertexNormalsHelper.prototype.update=function(b){var c=new a.Vector3;return function(a){var b=["a","b","c","d"];this.object.updateMatrixWorld(!0),this.normalMatrix.getNormalMatrix(this.object.matrixWorld);for(var d=this.geometry.vertices,e=this.object.geometry.vertices,f=this.object.geometry.faces,g=this.object.matrixWorld,h=0,i=0,j=f.length;j>i;i++)for(var k=f[i],l=0,m=k.vertexNormals.length;m>l;l++){var n=k[b[l]],o=e[n],p=k.vertexNormals[l];d[h].copy(o).applyMatrix4(g),c.copy(p).applyMatrix3(this.normalMatrix).normalize().multiplyScalar(this.size),c.add(d[h]),h+=1,d[h].copy(c),h+=1}return this.geometry.verticesNeedUpdate=!0,this}}(),a.VertexTangentsHelper=function(b,c,d,e){this.object=b,this.size=void 0!==c?c:1;for(var f=void 0!==d?d:255,g=void 0!==e?e:1,h=new a.Geometry,i=(b.geometry.vertices,b.geometry.faces),j=0,k=i.length;k>j;j++)for(var l=i[j],m=0,n=l.vertexTangents.length;n>m;m++)h.vertices.push(new a.Vector3),h.vertices.push(new a.Vector3);a.Line.call(this,h,new a.LineBasicMaterial({color:f,linewidth:g}),a.LinePieces),this.matrixAutoUpdate=!1,this.update()},a.VertexTangentsHelper.prototype=Object.create(a.Line.prototype),a.VertexTangentsHelper.prototype.update=function(b){var c=new a.Vector3;return function(a){var b=["a","b","c","d"];this.object.updateMatrixWorld(!0);for(var d=this.geometry.vertices,e=this.object.geometry.vertices,f=this.object.geometry.faces,g=this.object.matrixWorld,h=0,i=0,j=f.length;j>i;i++)for(var k=f[i],l=0,m=k.vertexTangents.length;m>l;l++){var n=k[b[l]],o=e[n],p=k.vertexTangents[l];d[h].copy(o).applyMatrix4(g),c.copy(p).transformDirection(g).multiplyScalar(this.size),c.add(d[h]),h+=1,d[h].copy(c),h+=1}return this.geometry.verticesNeedUpdate=!0,this}}(),a.WireframeHelper=function(b,c){var d=void 0!==c?c:16777215,e=[0,0],f={},g=function(a,b){return a-b},h=["a","b","c"],i=new a.BufferGeometry;if(b.geometry instanceof a.Geometry){for(var j=b.geometry.vertices,k=b.geometry.faces,l=0,m=new Uint32Array(6*k.length),n=0,o=k.length;o>n;n++)for(var p=k[n],q=0;3>q;q++){e[0]=p[h[q]],e[1]=p[h[(q+1)%3]],e.sort(g);var r=e.toString();void 0===f[r]&&(m[2*l]=e[0],m[2*l+1]=e[1],f[r]=!0,l++)}for(var s=new Float32Array(2*l*3),n=0,o=l;o>n;n++)for(var q=0;2>q;q++){var t=j[m[2*n+q]],u=6*n+3*q;s[u+0]=t.x,s[u+1]=t.y,s[u+2]=t.z}i.addAttribute("position",new a.BufferAttribute(s,3))}else if(b.geometry instanceof a.BufferGeometry)if(void 0!==b.geometry.attributes.index){var j=b.geometry.attributes.position.array,v=b.geometry.attributes.index.array,w=b.geometry.drawcalls,l=0;0===w.length&&(w=[{count:v.length,index:0,start:0}]);for(var m=new Uint32Array(2*v.length),x=0,y=w.length;y>x;++x)for(var z=w[x].start,A=w[x].count,u=w[x].index,n=z,B=z+A;B>n;n+=3)for(var q=0;3>q;q++){e[0]=u+v[n+q],e[1]=u+v[n+(q+1)%3],e.sort(g);var r=e.toString();void 0===f[r]&&(m[2*l]=e[0],m[2*l+1]=e[1],f[r]=!0,l++)}for(var s=new Float32Array(2*l*3),n=0,o=l;o>n;n++)for(var q=0;2>q;q++){var u=6*n+3*q,C=3*m[2*n+q];s[u+0]=j[C],s[u+1]=j[C+1],s[u+2]=j[C+2]}i.addAttribute("position",new a.BufferAttribute(s,3))}else{for(var j=b.geometry.attributes.position.array,l=j.length/3,D=l/3,s=new Float32Array(2*l*3),n=0,o=D;o>n;n++)for(var q=0;3>q;q++){var u=18*n+6*q,E=9*n+3*q;s[u+0]=j[E],s[u+1]=j[E+1],s[u+2]=j[E+2];var C=9*n+3*((q+1)%3);s[u+3]=j[C],s[u+4]=j[C+1],s[u+5]=j[C+2]}i.addAttribute("position",new a.BufferAttribute(s,3))}a.Line.call(this,i,new a.LineBasicMaterial({color:d}),a.LinePieces),this.matrix=b.matrixWorld,this.matrixAutoUpdate=!1},a.WireframeHelper.prototype=Object.create(a.Line.prototype),a.ImmediateRenderObject=function(){a.Object3D.call(this),this.render=function(a){}},a.ImmediateRenderObject.prototype=Object.create(a.Object3D.prototype),a.MorphBlendMesh=function(b,c){a.Mesh.call(this,b,c),this.animationsMap={},this.animationsList=[];var d=this.geometry.morphTargets.length,e="__default",f=0,g=d-1,h=d/1;this.createAnimation(e,f,g,h),this.setAnimationWeight(e,1)},a.MorphBlendMesh.prototype=Object.create(a.Mesh.prototype),a.MorphBlendMesh.prototype.createAnimation=function(a,b,c,d){var e={startFrame:b,endFrame:c,length:c-b+1,fps:d,duration:(c-b)/d,lastFrame:0,currentFrame:0,active:!1,time:0,direction:1,weight:1,directionBackwards:!1,mirroredLoop:!1};this.animationsMap[a]=e,this.animationsList.push(e)},a.MorphBlendMesh.prototype.autoCreateAnimations=function(a){for(var b,c=/([a-z]+)_?(\d+)/,d={},e=this.geometry,f=0,g=e.morphTargets.length;g>f;f++){var h=e.morphTargets[f],i=h.name.match(c);if(i&&i.length>1){var j=i[1];i[2];d[j]||(d[j]={start:1/0,end:-(1/0)});var k=d[j];fk.end&&(k.end=f),b||(b=j)}}for(var j in d){var k=d[j];this.createAnimation(j,k.start,k.end,a)}this.firstAnimation=b},a.MorphBlendMesh.prototype.setAnimationDirectionForward=function(a){var b=this.animationsMap[a];b&&(b.direction=1,b.directionBackwards=!1)},a.MorphBlendMesh.prototype.setAnimationDirectionBackward=function(a){var b=this.animationsMap[a];b&&(b.direction=-1,b.directionBackwards=!0)},a.MorphBlendMesh.prototype.setAnimationFPS=function(a,b){var c=this.animationsMap[a];c&&(c.fps=b,c.duration=(c.end-c.start)/c.fps)},a.MorphBlendMesh.prototype.setAnimationDuration=function(a,b){var c=this.animationsMap[a];c&&(c.duration=b,c.fps=(c.end-c.start)/c.duration)},a.MorphBlendMesh.prototype.setAnimationWeight=function(a,b){var c=this.animationsMap[a];c&&(c.weight=b)},a.MorphBlendMesh.prototype.setAnimationTime=function(a,b){var c=this.animationsMap[a];c&&(c.time=b)},a.MorphBlendMesh.prototype.getAnimationTime=function(a){var b=0,c=this.animationsMap[a];return c&&(b=c.time),b},a.MorphBlendMesh.prototype.getAnimationDuration=function(a){var b=-1,c=this.animationsMap[a];return c&&(b=c.duration),b},a.MorphBlendMesh.prototype.playAnimation=function(a){var b=this.animationsMap[a];b?(b.time=0,b.active=!0):console.warn("animation["+a+"] undefined")},a.MorphBlendMesh.prototype.stopAnimation=function(a){var b=this.animationsMap[a];b&&(b.active=!1)},a.MorphBlendMesh.prototype.update=function(b){for(var c=0,d=this.animationsList.length;d>c;c++){var e=this.animationsList[c];if(e.active){var f=e.duration/e.length;e.time+=e.direction*b,e.mirroredLoop?(e.time>e.duration||e.time<0)&&(e.direction*=-1,e.time>e.duration&&(e.time=e.duration,e.directionBackwards=!0),e.time<0&&(e.time=0,e.directionBackwards=!1)):(e.time=e.time%e.duration,e.time<0&&(e.time+=e.duration));var g=e.startFrame+a.Math.clamp(Math.floor(e.time/f),0,e.length-1),h=e.weight;g!==e.currentFrame&&(this.morphTargetInfluences[e.lastFrame]=0,this.morphTargetInfluences[e.currentFrame]=1*h,this.morphTargetInfluences[g]=0,e.lastFrame=e.currentFrame,e.currentFrame=g);var i=e.time%f/f;e.directionBackwards&&(i=1-i),this.morphTargetInfluences[e.currentFrame]=i*h,this.morphTargetInfluences[e.lastFrame]=(1-i)*h}}}}(),BrainBrowser.SurfaceViewer.modules.annotations=function(a){"use strict";function b(b){b=b||{};var c=b.model_name||null;return!c&&a.model.children[0]&&(c=a.model.children[0].userData.model_name),c}var c=BrainBrowser.createTreeStore(),d=.5,e=65280,f=16711680;a.annotations={add:function(e,g,h){h=h||{};var i,j,k=b(h);k&&(j=a.getVertex(e,{model_name:h.model_name}),i={data:g,model_name:k,vertex:e,position:j,marker:a.drawDot(j.x,j.y,j.z,d,f)},i.marker.userData.annotation_info=i,c.set(k,e,i),h.activate!==!1&&a.annotations.activate(e,h))},get:function(d,e){e=e||{};var f,g=b(e);return g?(f=c.get(g,d),e.activate!==!1&&a.annotations.activate(d,e),f):null},remove:function(d,e){e=e||{};var f,g=b(e);return g?(f=c.remove(g,d),a.model.remove(f.marker),f.marker=null,a.updated=!0,f):null},reset:function(){a.annotations.forEach(function(b){a.annotations.remove(b.vertex)})},activate:function(b,c){c=c||{};var d=a.annotations.get(b,{model_name:c.model_name,activate:!1});d&&(a.annotations.forEach(function(a){a===d?a.marker.material.color.setHex(e):a.marker.material.color.setHex(f)}),a.updated=!0)},forEach:function(a){c.forEach(2,a)},setMarkerOnColor:function(a){e=a},setMarkerOffColor:function(a){f=a},setMarkerRadius:function(a){d=a}}},BrainBrowser.SurfaceViewer.modules.color=function(a){"use strict";function b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;for(i=0,k=b.length;k>i;i++){if(d=b[i],l=d.getObjectByName("__WIREFRAME__"),p=!!l,p&&(m=l.geometry.attributes.color.array),c=d.geometry,e=d.userData.original_data.indices,f=c.attributes.color,g=f.array,BrainBrowser.WEBGL_UINT_INDEX_ENABLED){for(h=0;hh;h+=3)n=4*h,o=2*n,g[n]=a[4*e[h]],g[n+1]=a[4*e[h]+1],g[n+2]=a[4*e[h]+2],g[n+3]=1,g[n+4]=a[4*e[h+1]],g[n+5]=a[4*e[h+1]+1],g[n+6]=a[4*e[h+1]+2],g[n+7]=1,g[n+8]=a[4*e[h+2]],g[n+9]=a[4*e[h+2]+1],g[n+10]=a[4*e[h+2]+2],g[n+11]=1,p&&(m[o]=g[n],m[o+1]=g[n+1],m[o+2]=g[n+2],m[o+3]=g[n+3],m[o+4]=g[n+4],m[o+5]=g[n+5],m[o+6]=g[n+6],m[o+7]=g[n+7],m[o+8]=g[n+4],m[o+9]=g[n+5],m[o+10]=g[n+6],m[o+11]=g[n+7],m[o+12]=g[n+8],m[o+13]=g[n+9],m[o+14]=g[n+10],m[o+15]=g[n+11],m[o+16]=g[n+8],m[o+17]=g[n+9],m[o+18]=g[n+10],m[o+19]=g[n+11],m[o+20]=g[n],m[o+21]=g[n+1],m[o+22]=g[n+2],m[o+23]=g[n+3]);f.needsUpdate=!0,p&&(l.geometry.attributes.color.needsUpdate=!0)}}function c(b,c){var d,e,f,g,h,i,j,k=a.model_data.get(c),l=[],m=[];for(b.forEach(function(b){l.push(a.color_map.mapColors(b.values,{min:b.range_min,max:b.range_max,default_colors:k.colors})),m.push(b.alpha)}),d=new Float32Array(l[0].length),e=0,i=l[0].length/4;i>e;e++)for(f=0,h=l.length;h>f;f++)g=4*e,j=m[f],d[g]+=l[f][g]*j,d[g+1]+=l[f][g+1]*j,d[g+2]+=l[f][g+2]*j,d[g+3]+=j;return d}var d=null,e=[];a.updateColors=function(f){function g(c){var d,f=a.model.getObjectByName(l,!0);d=f?[f]:a.model.children.filter(function(a){return!!a.userData.original_data}),b(c,d),e.forEach(function(a){a()}),e.length=0,a.triggerEvent("updatecolors",{model_data:m,intensity_data:h,colors:c,blend:i}),i&&a.triggerEvent("blendcolors",{model_data:m,intensity_data:h,colors:c})}f=f||{};var h,i,j=f.complete,k=f.model_name,l=f.shape_name||k+"_1",m=a.model_data.get(k);BrainBrowser.utils.isFunction(j)&&e.push(j),m.intensity_data.length>1?(h=m.intensity_data,i=!0):(h=m.intensity_data[0],i=!1),clearTimeout(d),d=setTimeout(function(){g(i?c(h,f.model_name):a.color_map.mapColors(h.values,{min:h.range_min,max:h.range_max,default_colors:a.model_data.get(f.model_name).colors}))},0)},a.setIntensity=function(){var b,c,d,e,f,g=Array.prototype.slice.call(arguments);b=BrainBrowser.utils.isNumeric(g[0])?a.model_data.getDefaultIntensityData():g.shift(),f=b.model_data,c=g[0],d=g[1],e=g[2]||{},b&&c>=0&&c1?a.blend(d.complete):a.updateColors({model_name:h,complete:d.complete}),a.triggerEvent("loadintensitydata",{model_data:i,intensity_data:b})})}function d(b){a.color_map=b,a.triggerEvent("loadcolormap",{color_map:b}),a.model_data.forEach(function(b){b.intensity_data[0]&&a.updateColors({model_name:b.name})})}function e(a,b,c,d){var e,g=b+"_model";if(!n.worker_urls[g])throw e="error in SurfaceViewer configuration.\nModel worker URL for "+b+" not defined.\nUse 'BrainBrowser.config.set(\"model_types."+b+".worker\", ...)' to set it.",BrainBrowser.events.triggerEvent("error",{message:e}),new Error(e);var h,i=new Worker(n.worker_urls[g]);i.addEventListener("message",function(a){var g,j=a.data;if(j.error)throw e="error parsing model.\n"+j.error_message+"\nFile type: "+b+"\nOptions: "+JSON.stringify(c),BrainBrowser.events.triggerEvent("error",{message:e}),new Error(e);j.colors=j.colors||new Float32Array([.7,.7,.7,1]),BrainBrowser.WEBGL_UINT_INDEX_ENABLED?f(j,d):(h=new Worker(n.worker_urls.deindex),h.addEventListener("message",function(a){d(a.data)}),g=[j.vertices.buffer],j.normals&&g.push(j.normals.buffer),j.colors&&g.push(j.colors.buffer),j.shapes.forEach(function(a){g.push(a.indices.buffer)}),h.postMessage(j,g)),i.terminate()}),i.postMessage({data:a,options:c})}function f(a,b){var c=a.vertices;4===a.colors.length&&(a.colors=g(a.colors,c.length/3)),k(a),b(a)}function g(a,b){var c,d,e,f,g,h,i;for(g=new Float32Array(4*b),c=a[0],d=a[1],e=a[2],f=a[3],h=0,i=g.length;i>h;h+=4)g[h]=c,g[h+1]=d,g[h+2]=e,g[h+3]=f;return g}function h(b,c,d){d=d||{};var e=d.complete,f=i(b,c,d);a.triggerEvent("displaymodel",{model:a.model,model_data:b,new_shapes:f}),e&&e()}function i(b,c,d){var e,f,g,h,i,k,m,n=a.model,p=b.shapes,q="line"===b.type,r=d.render_depth,s=d.pick_ignore,t=d.recenter||b.split,u=[],v={is_line:q};if(BrainBrowser.WEBGL_UINT_INDEX_ENABLED&&(i=new o.BufferAttribute(new Float32Array(b.vertices),3),b.normals&&(k=new o.BufferAttribute(new Float32Array(b.normals),3)),b.colors&&(m=new o.BufferAttribute(new Float32Array(b.colors),4))),b.name=b.name||c,a.model_data.add(b.name,b),p){for(g=0,h=p.length;h>g;g++)f=b.shapes[g],0!==f.indices.length&&(BrainBrowser.WEBGL_UINT_INDEX_ENABLED?(l(m.array,f.color,f.indices),v={position:i,normal:k,color:m,index:new o.BufferAttribute(new Uint32Array(f.indices),1)}):(i=k=m=null,i=new o.BufferAttribute(new Float32Array(f.unindexed.position),3),f.unindexed.normal&&(k=new o.BufferAttribute(new Float32Array(f.unindexed.normal),3)),f.unindexed.color&&(m=new o.BufferAttribute(new Float32Array(f.unindexed.color),4)),v={position:i,normal:k,color:m}),v.is_line=q,v.centroid=f.centroid,v.recenter=t,e=j(v),e.name=f.name||c+"_"+(g+1),e.userData.model_name=b.name,e.userData.original_data={vertices:b.vertices,indices:f.indices,normals:b.normals,colors:b.colors},e.userData.pick_ignore=s,r&&(e.renderDepth=r),u.push(e),n.add(e));b.split&&(n.children[0].name="left",n.children[1].name="right")}return u}function j(a){var b,c,d,e,f,g,h,i=a.position,j=i.array,k=a.normal,l=a.color,m=a.index,n=a.centroid,p=a.is_line,q=a.recenter,r=new o.BufferGeometry;if(r.dynamic=!0,q)if(m)for(b=m.array,c=new Float32Array(j),g=0,h=b.length;h>g;g++)d=3*b[g],j[d]=c[d]-n.x,j[d+1]=c[d+1]-n.y,j[d+2]=c[d+2]-n.z;else for(g=0,h=j.length;h>g;g+=3)j[g]-=n.x,j[g+1]-=n.y,j[g+2]-=n.z;return r.addAttribute("position",i),m&&r.addAttribute("index",m),k?r.addAttribute("normal",k):r.computeVertexNormals(),l&&r.addAttribute("color",l),p?(e=new o.LineBasicMaterial({vertexColors:o.VertexColors}),f=new o.Line(r,e,o.LinePieces)):(e=new o.MeshPhongMaterial({color:16777215,ambient:16777215,specular:1052688,shininess:150,vertexColors:o.VertexColors}),f=new o.Mesh(r,e),f.userData.has_wireframe=!0),f.userData.centroid=n,q&&(f.userData.recentered=!0,f.position.set(n.x,n.y,n.z)),f}function k(a){var b,c,d,e,f,g,h=a.vertices;b=d=f=Number.POSITIVE_INFINITY,c=e=g=Number.NEGATIVE_INFINITY,a.shapes.forEach(function(a){var i,j,k,l,m,n,o,p,q,r,s,t,u=a.indices;for(o=q=s=Number.POSITIVE_INFINITY,p=r=t=Number.NEGATIVE_INFINITY,m=0,n=u.length;n>m;m++)i=u[m],j=h[3*i],k=h[3*i+1],l=h[3*i+2],o=Math.min(o,j),q=Math.min(q,k),s=Math.min(s,l),p=Math.max(p,j),r=Math.max(r,k),t=Math.max(t,l);a.bounding_box={min_x:o,min_y:q,min_z:s,max_x:p,max_y:r,max_z:t},a.centroid={x:o+(p-o)/2,y:q+(r-q)/2,z:s+(t-s)/2},b=Math.min(b,o),d=Math.min(d,q),f=Math.min(f,s),c=Math.max(c,p),e=Math.max(e,r),g=Math.max(g,t)}),a.bounding_box={min_x:b,min_y:d,min_z:f,max_x:c,max_y:e,max_z:g},a.size={x:c-b,y:e-d,z:g-f}}function l(a,b,c){if(b){var d,e,f,g,h,i,j,k=4===b.length;for(d=b[0],e=b[1],f=b[2],g=b[3],h=0,j=c.length;j>h;h++)k||(i=4*h,d=b[i],e=b[i+1],f=b[i+2],g=b[i+3]),i=4*c[h],a[i]=d,a[i+1]=e,a[i+2]=f,a[i+3]=g}}function m(a,b){b=b||{};var c=b.format||"mniobj",d=BrainBrowser.config.get(a+"."+c);return d&&d.binary&&(b.result_type=b.result_type||"arraybuffer"),b}var n=BrainBrowser.SurfaceViewer,o=n.THREE,p=BrainBrowser.loader,q={};a.model_data={add:function(a,b){q[a]=b,b.intensity_data=[]},get:function(a){return a=a||Object.keys(q)[0],q[a]||null},getDefaultIntensityData:function(a){var b,c,d,e;if(a)b=this.get(a),c=b?b.intensity_data[0]:null;else for(b=Object.keys(q).map(function(a){return q[a]}),d=0,e=b.length;e>d&&!(c=b[d].intensity_data[0]);d++);return c||null},count:function(){return Object.keys(q).length},clear:function(){q={}},forEach:function(a){Object.keys(q).forEach(function(b){a(q[b],b)})}},a.loadModelFromURL=function(a,c){c=m("model_types",c),p.loadFromURL(a,b,c)},a.loadModelFromFile=function(a,c){c=m("model_types",c),p.loadFromFile(a,b,c)},a.loadIntensityDataFromURL=function(a,b){b=m("intensity_data_types",b),p.loadFromURL(a,c,b)},a.loadIntensityDataFromFile=function(a,b){b=m("intensity_data_types",b),p.loadFromFile(a,c,b)},a.loadColorMapFromURL=function(a,b){p.loadColorMapFromURL(a,d,b)},a.loadColorMapFromFile=function(a,b){p.loadColorMapFromFile(a,d,b)},a.clearScreen=function(){for(var b=a.model.children;b.length>0;)a.model.remove(b[0]);a.model_data.clear(),a.resetView(),a.triggerEvent("clearscreen")}},BrainBrowser.SurfaceViewer.modules.rendering=function(a){"use strict";function b(f){var g,m,n=a.model,o=i.position,p=j/a.zoom;window.requestAnimationFrame(b),d=c||f,c=f,g=c-d,m=15e-5*g,a.autorotate.x&&(n.rotation.x+=m,a.updated=!0),a.autorotate.y&&(n.rotation.y+=m,a.updated=!0),a.autorotate.z&&(n.rotation.z+=m,a.updated=!0),e!==a.zoom&&(e=a.zoom,a.updated=!0,a.triggerEvent("zoom",{zoom:a.zoom})),a.updated&&(p>i.near&&p<.9*i.far&&(o.z=p,k.position.z=p),l.render(h,i),a.triggerEvent("draw",{renderer:l,scene:h,camera:i}),a.updated=!1)}var c,d,e,f=BrainBrowser.SurfaceViewer.THREE,g=new f.WebGLRenderer({preserveDrawingBuffer:!0,alpha:!0,autoClear:!1}),h=new f.Scene,i=new f.PerspectiveCamera(30,a.dom_element.offsetWidth/a.dom_element.offsetHeight,1,3e3),j=500,k=new f.PointLight(16777215),l=g,m={},n=g.domElement;a.model=new f.Object3D,h.add(a.model),a.render=function(){var c=a.dom_element;g.setClearColor(0),c.appendChild(g.domElement),i.position.z=j,k.position.set(0,0,j),h.add(k),a.updateViewport(),b()},a.updateViewport=function(){var b=a.dom_element;l.setSize(b.offsetWidth,b.offsetHeight),i.aspect=b.offsetWidth/b.offsetHeight,i.updateProjectionMatrix(),a.updated=!0},a.canvasDataURL=function(){return g.domElement.toDataURL()},a.addEffect=function(b){var c;BrainBrowser.utils.isFunction(f[b])&&(c=new f[b](g),c.setSize(a.dom_element.offsetWidth,a.dom_element.offsetHeight),m[b]=c)},a.setEffect=function(b){l=m[b]?m[b]:g,l.setSize(a.dom_element.offsetWidth,a.dom_element.offsetHeight),l.render(h,i),a.updated=!0},a.setCameraPosition=function(b,c,d){i.position.set(b,c,d),k.position.set(b,c,d),a.updated=!0},a.getCameraPosition=function(){return i.position},a.resetView=function(){var b=a.model,c=new f.Matrix4;c.getInverse(b.matrix),b.applyMatrix(c),i.position.set(0,0,j),k.position.set(0,0,j);var d=b.userData.model_center_offset||new f.Vector3(0,0,0);b.children.forEach(function(a){var b=a.userData.centroid,c=a.userData.recentered;a.userData.original_data&&(b&&c?a.position.set(b.x+d.x,b.y+d.y,b.z+d.z):a.position.set(d.x,d.y,d.z),a.rotation.set(0,0,0),a.material.opacity=1)}),b.rotation.set(0,0,0),a.zoom=1,a.updated=!0},a.setClearColor=function(b,c){void 0===c&&(c=1),g.setClearColor(b,c),a.updated=!0},a.drawDot=function(b,c,d,e,g){e=e||2,e=e>=0?e:0,g=g>=0?g:16711680;var i=new f.SphereGeometry(e),j=new f.MeshBasicMaterial({color:g}),k=new f.Mesh(i,j);if(k.position.set(b,c,d),a.model){var l=a.model.userData.model_center_offset;void 0!==l&&(k.translateX(-l.x),k.translateY(-l.y),k.translateZ(-l.z)),a.model.add(k)}else h.add(k);return a.updated=!0,k},a.drawGrid=function(b,c,d){d=d||{};var e=d.name,g=d.color_center_line,i=d.color_grid,j=d.x||0,k=d.y||0,l=d.z||0,m=d.euler_rotation;(void 0===b||0>=b)&&(b=100),(void 0===c||0>=c)&&(c=10),g=g>=0?g:4473924,i=i>=0?i:8947848;var n=new f.GridHelper(b,c);return n.name=e,n.setColors(g,i),n.position.set(j,k,l),void 0!==m&&n.setRotationFromEuler(m),a.model?a.model.add(n):h.add(n),a.updated=!0,n},a.gridHelper=function(a,b,c,d,e,g,h,i,j,k,l){for(var m=new f.Geometry,n=new f.LineBasicMaterial({vertexColors:f.VertexColors}),o=Object.create(f.GridHelper.prototype),p=a;b>=p;p+=l)m.vertices.push(new f.Vector3(c,0,p),new f.Vector3(d,0,p)),m.colors.push(e,e);for(var q=g;h>=q;q+=l)m.vertices.push(new f.Vector3(q,0,i),new f.Vector3(q,0,j)),m.colors.push(k,k);return f.Line.call(o,m,n,f.LinePieces),o},a.drawLine=function(b,c,d){d=d||{};var e=d.color>=0?d.color:4473924,g=new f.Geometry;g.vertices.push(b.clone()),g.vertices.push(c.clone()),g.computeLineDistances();var i=d.dashed===!0?new f.LineDashedMaterial({linewidth:3,color:e,gapSize:3}):new f.LineBasicMaterial({linewidth:3,color:e}),j=new f.Line(g,i,f.LinePieces);return d.draw===!1?j:(a.model?a.model.add(j):h.add(j),a.updated=!0,j)},a.drawAxes=function(b,c){c=c||{};var d=c.name||"axes",e=c.center||new f.Vector3(0,0,0),g=c.x_color>=0?c.x_color:16711680,i=c.y_color>=0?c.y_color:65280,j=c.z_color>=0?c.z_color:255,k=c.complete===!0;if(void 0===b){var l=a.model_data.get().size,m=Math.max(l.x,l.y,l.z);b=m/2*1.2}var n=new f.Object3D;return n.name=d, +n.add(a.drawLine(e,new f.Vector3(e.x+b,e.y,e.z),{color:g,dashed:!1,draw:!1})),k&&n.add(a.drawLine(e,new f.Vector3(-b+e.x,e.y,e.z),{color:g,dashed:!0,draw:!1})),n.add(a.drawLine(e,new f.Vector3(e.x,e.y+b,e.z),{color:i,dashed:!1,draw:!1})),k&&n.add(a.drawLine(e,new f.Vector3(e.x,-b+e.y,e.z),{color:i,dashed:!0,draw:!1})),n.add(a.drawLine(e,new f.Vector3(e.x,e.y,e.z+b),{color:j,dashed:!1,draw:!1})),k&&n.add(a.drawLine(e,new f.Vector3(e.x,e.y,-b+e.z),{color:j,dashed:!0,draw:!1})),a.model?a.model.add(n):h.add(n),a.updated=!0,n},a.pick=function(b,c,d){b=void 0===b?a.mouse.x:b,c=void 0===c?a.mouse.y:c,d=void 0===d?.25:d/100,b=b/a.dom_element.offsetWidth*2-1,c=-c/a.dom_element.offsetHeight*2+1;var e,g,h,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A=a.model,B=new f.Raycaster,C=new f.Vector3(b,c,i.near),D=null,E=new f.Matrix4;for(C.unproject(i),B.set(i.position,C.sub(i.position).normalize()),e=B.intersectObject(A,!0),u=0;uu;u++)r=k[u],BrainBrowser.WEBGL_UINT_INDEX_ENABLED||(r=q[r]),s=new f.Vector3(p[3*r],p[3*r+1],p[3*r+2]),t=j.distanceTo(new f.Vector3(s.x-x,s.y-y,s.z-z)),o>t&&(m=r,n=s,o=t);g={index:m,point:n,object:h}}else g=null;return g},a.pickByVertex=function(b,c){var d=a.model;if(c=c||{},void 0===b)return null;var e,f,g=a.getVertex(b,{model_name:c.model_name});return d.children.forEach(function(a){if(!(0===Object.keys(a.userData).length&&a.userData.constructor===Object||0!==Object.keys(a.userData).length&&a.userData.model_name!==c.model_name)){var d,h=a.geometry.attributes.index.array;for(b=parseInt(b,0),d=0;dg?c(a,d):setTimeout(function(){b(a,d)},0)}function c(a,b){var c,d=new Worker(BrainBrowser.SurfaceViewer.worker_urls.wireframe),f=a.geometry.attributes;d.addEventListener("message",function(c){var h,i,j,k,l=new e.BufferGeometry;j=c.data.positions?new e.BufferAttribute(c.data.positions,3):f.position,k=c.data.colors?new e.BufferAttribute(c.data.colors,4):f.color,l.addAttribute("position",j),l.addAttribute("color",k),c.data.indices&&l.addAttribute("index",new e.BufferAttribute(c.data.indices,1)),l.attributes.color.needsUpdate=!0,h=new e.LineBasicMaterial({vertexColors:e.VertexColors}),i=new e.Line(l,h,e.LinePieces),i.name="__WIREFRAME__",i.material.visible=!1,a.add(i),a.creating_wireframe=!1,g--,b(i),d.terminate()}),c=BrainBrowser.WEBGL_UINT_INDEX_ENABLED?{indices:f.index.array}:{positions:f.position.array,colors:f.color.array},d.postMessage(c),g++}function d(b,c,d,e){b.material.visible=e||!d,c.material.visible=d,a.updated=!0}var e=BrainBrowser.SurfaceViewer.THREE,f=20,g=0,h={medialView:function(b){var c=a.model;b.split?(c.getObjectByName("left").position.x-=100,c.getObjectByName("left").rotation.z-=Math.PI/2,c.getObjectByName("right").position.x+=100,c.getObjectByName("right").rotation.z+=Math.PI/2,c.rotation.x-=Math.PI/2):(c.rotation.x+=Math.PI/2,c.rotation.y+=Math.PI,c.rotation.z+=Math.PI/2)},lateralView:function(b){var c,d,e=a.model;b.split?(c=e.getObjectByName("left"),d=e.getObjectByName("right"),c.position.x-=100,c.rotation.z-=Math.PI/2,d.position.x+=100,d.rotation.z+=Math.PI/2,e.rotation.x+=Math.PI/2,e.rotation.y+=Math.PI):(e.rotation.x+=Math.PI/2,e.rotation.y+=Math.PI,e.rotation.z-=Math.PI/2)},inferiorView:function(){a.model.rotation.y+=Math.PI},anteriorView:function(){a.resetView(),a.model.rotation.x-=Math.PI/2,a.model.rotation.z+=Math.PI},posteriorView:function(){a.resetView(),a.model.rotation.x-=Math.PI/2}};a.setTransparency=function(b,c){c=c||{};var d,e,f,g=c.shape_name,h=a.model.getObjectByName(g);d=h?[h]:a.model.children||[],d.forEach(function(a){e=a.material,e.opacity=b,1===b||b>1?e.transparent=!1:e.transparent=!0,f=a.getObjectByName("__WIREFRAME__"),f&&(f.material.opacity=e.opacity,f.material.transparent=e.transparent)}),a.updated=!0},a.setWireframe=function(c,e){e=e||{};var f,g,h=e.keep_surface!==!0?!1:!0,i=e.shape_name,j=a.model.getObjectByName(i);f=j?[j]:a.model.children||[],f.forEach(function(a){g=a.getObjectByName("__WIREFRAME__"),g?d(a,g,c,h):a.userData.has_wireframe&&!a.userData.creating_wireframe&&b(a,function(b){d(a,b,c,h)})})},a.setView=function(b,c){var d=b+"View",e=a.model_data.get(c);a.resetView(),e&&BrainBrowser.utils.isFunction(h[d])&&h[d](e),a.updated=!0},a.separateHalves=function(b,c){b=b||1,c=c||{},a.model_data.get(c.model_name).split&&(a.model.children[0].position.x-=b,a.model.children[1].position.x+=b),a.updated=!0}}; \ No newline at end of file diff --git a/build/brainbrowser-2.5.2/brainbrowser.volume-viewer.min.js b/build/brainbrowser-2.5.2/brainbrowser.volume-viewer.min.js new file mode 100644 index 00000000..b31a777a --- /dev/null +++ b/build/brainbrowser-2.5.2/brainbrowser.volume-viewer.min.js @@ -0,0 +1,35 @@ +/* +* BrainBrowser: Web-based Neurological Visualization Tools +* (https://brainbrowser.cbrain.mcgill.ca) +* +* Copyright (C) 2011 +* The Royal Institution for the Advancement of Learning +* McGill University +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Affero General Public License as +* published by the Free Software Foundation, either version 3 of the +* License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Affero General Public License for more details. +* +* You should have received a copy of the GNU Affero General Public License +* along with this program. If not, see . +*/ + +/* +* BrainBrowser v2.5.2 +* +* Author: Tarek Sherif (http://tareksherif.ca/) +* Author: Nicolas Kassis +* Author: Paul Mougel +* +* three.js (c) 2010-2014 three.js authors, used under the MIT license +*/ +!function(){"use strict";function a(a){var b=!1,c=!1,d=!1,e=!1,f=document.createElement("canvas"),g=null;b=!!f,c=!!window.Worker;try{f&&window.WebGLRenderingContext&&(g=f.getContext("webgl")||f.getContext("experimental-webgl")),d=!!g}catch(h){d=!1}d&&(e=!!g.getExtension("OES_element_index_uint")),a.CANVAS_ENABLED=b,a.WEB_WORKERS_ENABLED=c,a.WEBGL_ENABLED=d,a.WEBGL_UINT_INDEX_ENABLED=e}var b="2.5.2";b=b.indexOf("BRAINBROWSER_VERSION")>0?"D.E.V":b;var c=window.BrainBrowser={version:b};a(c),window.requestAnimationFrame=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a){return window.setTimeout(a,1e3/60)},window.cancelAnimationFrame=window.cancelAnimationFrame||function(a){window.clearTimeout(a)}}(),function(){"use strict";function a(b,c,d,e){return c>d?e(b):void Object.keys(b).forEach(function(f){a(b[f],c+1,d,e)})}BrainBrowser.createTreeStore=function(){var b={};return{set:function(){var a,c,d,e,f=arguments[arguments.length-1],g=Array.prototype.slice.call(arguments,0,arguments.length-1),h=b;for(c=0,d=g.length-1;d>c;c++){if(a=g[c],h[a]&&"object"!=typeof h[a])throw e="Hash key '["+g.slice(0,c+1).join("][")+"]' has already been set to a non-object value.\nCannot set '["+g.join("][")+"]'",BrainBrowser.events.triggerEvent("error",{message:e}),new Error(e);h[a]||(h[a]={}),h=h[a]}a=g[c],h[a]=f},get:function(){var a,c,d,e=Array.prototype.slice.call(arguments),f=b;if(0===e.length)return b;for(c=0,d=e.length-1;d>c;c++){if(a=e[c],void 0===f[a])return null;f=f[a]}return a=e[c],void 0!==f[a]?f[a]:null},remove:function(){var a,c,d,e,f=Array.prototype.slice.call(arguments),g=b;for(c=0,d=f.length-1;d>c;c++){if(a=f[c],void 0===g[a])return null;g=g[a]}return a=f[c],e=g[a],g[a]=void 0,e},reset:function(a){a=a&&"object"==typeof a?a:{},b=a},forEach:function(c,d){c=c>0?c:1,a(b,1,c,d)}}}}(),function(){"use strict";BrainBrowser.createColorMap=function(a,b){function c(a,b,c,d,e,f,g){var h;return(b>a||a>c)&&!e?-1:(h=Math.floor(Math.max(0,Math.min((a-b)*d,g-1))),f&&(h=g-1-h),h*=4)}function d(a,b,c){var d,e,f,g=document.createElement("canvas"),h=new Array(256);for(g.width=256,g.height=c,d=0;256>d;d++)h[d]=d;for(f=r.scale,r.scale=255,a=r.mapColors(h),r.scale=f,e=g.getContext("2d"),d=0;256>d;d++)e.fillStyle="rgb("+Math.floor(a[4*d])+", "+Math.floor(a[4*d+1])+", "+Math.floor(a[4*d+2])+")",e.fillRect(d,0,1,b);return g}b=b||{};var e,f,g,h,i,j,k,l,m=void 0===b.clamp?!0:b.clamp,n=b.flip||!1,o=b.scale||1,p=b.contrast||1,q=b.brightness||0;if(a)for(f=a.trim().split(/\n/),e=new Float32Array(4*f.length),k=0,i=0,g=f.length;g>i;i++)if(l=f[i].trim().split(/\s+/).slice(0,4),h=l.length,!(3>h)){for(j=0;h>j;j++)e[k+j]=parseFloat(l[j]);4>h&&(e[k+3]=1),k+=4}var r={colors:e,clamp:m,flip:n,scale:o,contrast:p,brightness:q,mapColors:function(a,b){b=b||{};var d,e,f,g,h,i,j=void 0===b.min?0:b.min,k=void 0===b.max?255:b.max,l=b.default_colors||[0,0,0,1],m=b.destination||new Float32Array(4*a.length),n=r.colors,o=r.colors.length/4,p=void 0===b.scale?r.scale:b.scale,q=void 0===b.clamp?r.clamp:b.clamp,s=void 0===b.flip?r.flip:b.flip,t=void 0===b.brightness?r.brightness:b.brightness,u=void 0===b.contrast?r.contrast:b.contrast,v=4===l.length?0:1,w=k-j,x=o/w;for(t*=p,u*=p,e=0,h=a.length;h>e;e++)d=a[e],f=4*e,i=c(d,j,k,x,q,s,o),0>i?(g=f*v,m[f]=u*l[g]+t,m[f+1]=u*l[g+1]+t,m[f+2]=u*l[g+2]+t,m[f+3]=p*l[g+3]):(m[f]=u*n[i]+t,m[f+1]=u*n[i+1]+t,m[f+2]=u*n[i+2]+t,m[f+3]=p*n[i+3]);return m},colorFromValue:function(a,b){b=b||{};var d,e=b.hex||!1,f=void 0===b.min?0:b.min,g=void 0===b.max?255:b.max,h=void 0===b.scale?r.scale:b.scale,i=void 0===b.brightness?r.brightness:b.brightness,j=void 0===b.contrast?r.contrast:b.contrast,k=g-f,l=r.colors.length/4,m=l/k,n=c(a,f,g,m,r.clamp,r.flip,l);return d=n>=0?Array.prototype.slice.call(r.colors,n,n+4):[0,0,0,1],d[0]=Math.max(0,Math.min(j*d[0]+i,1)),d[1]=Math.max(0,Math.min(j*d[1]+i,1)),d[2]=Math.max(0,Math.min(j*d[2]+i,1)),e?(d[0]=Math.floor(255*d[0]),d[1]=Math.floor(255*d[1]),d[2]=Math.floor(255*d[2]),d[3]=Math.floor(255*d[3]),d[0]=("0"+d[0].toString(16)).slice(-2),d[1]=("0"+d[1].toString(16)).slice(-2),d[2]=("0"+d[2].toString(16)).slice(-2),d=d.slice(0,3).join("")):(d[0]=d[0]*h,d[1]=d[1]*h,d[2]=d[2]*h,d[3]=d[3]*h),d},createElement:function(a,b){var c,e,f=r.colors,g=b-a;return c=d(f,20,40,n),e=c.getContext("2d"),e.fillStyle="#FFA000",e.fillRect(.5,20,1,10),e.fillText(a.toPrecision(3),.5,40),e.fillRect(c.width/4,20,1,10),e.fillText((a+.25*g).toPrecision(3),.25*c.width,40),e.fillRect(c.width/2,20,1,10),e.fillText((a+.5*g).toPrecision(3),.5*c.width,40),e.fillRect(3*c.width/4,20,1,10),e.fillText((a+.75*g).toPrecision(3),.75*c.width,40),e.fillRect(c.width-.5,20,1,10),e.fillText(b.toPrecision(3),c.width-20,40),c}};return r}}(),function(){"use strict";var a=BrainBrowser.createTreeStore();BrainBrowser.config={set:function(b,c){b=b||"";var d=b.split(".");d.push(c),a.set.apply(a,d)},get:function(b){b=b||"";var c=b.split(".");return a.get.apply(a,c)}}}(),function(){"use strict";function a(a,b){try{a.call(b.target,b)}catch(c){console.error("Error in event handler for: ",b.name),console.error(c.stack||c.message||c)}}var b=["eventmodelcleanup"];BrainBrowser.events={unpropagatedEvent:function(a){b.push(a)},addEventModel:function(c){var d=[],e={};c.addEventListener=function(a,b){d[a]||(d[a]=[]),d[a].push(b)},c.triggerEvent=function(e,f){var g=this,h=c.directPropagationTargets(e);f=f||{},f.name=e,f.target=g,d[e]&&d[e].forEach(function(b){a(b,f)}),d["*"]&&d["*"].forEach(function(b){a(b,f)}),-1===b.indexOf(e)&&(h.forEach(function(a){a.triggerEvent.call(g,e,f)}),0===h.length&&c!==BrainBrowser.events&&BrainBrowser.events.triggerEvent.call(g,e,f))},c.propagateEventTo=function(a,b){if(!BrainBrowser.utils.isFunction(b.allPropagationTargets))throw new Error("Propagation target doesn't seem to have an event model.");if(c===BrainBrowser.events||-1!==b.allPropagationTargets(a).indexOf(c))throw new Error("Propagating event '"+a+"' would cause a cycle.");e[a]=e[a]||[],-1===c.directPropagationTargets().indexOf(b)&&b.addEventListener("eventmodelcleanup",function(){this===b&&c.stopPropagatingTo(b)}),-1===e[a].indexOf(b)&&e[a].push(b)},c.propagateEventFrom=function(a,b){b.propagateEventTo(a,c)},c.stopPropagatingTo=function(a){Object.keys(e).forEach(function(b){e[b]=e[b].filter(function(b){return b!==a})})},c.directPropagationTargets=function(a){var b=[],c=void 0===a?Object.keys(e):[a,"*"];return c.forEach(function(a){var c=e[a]||[];c.forEach(function(a){-1===b.indexOf(a)&&b.push(a)})}),b},c.allPropagationTargets=function(a){var b=c.directPropagationTargets(a),d=Array.prototype.slice.call(b);return b.forEach(function(b){b.allPropagationTargets(a).forEach(function(a){-1===d.indexOf(a)&&d.push(a)})}),d}}},BrainBrowser.events.addEventModel(BrainBrowser.events)}(),function(){"use strict";var a=BrainBrowser.loader={loadFromURL:function(b,c,d){d=d||{};var e,f=new XMLHttpRequest,g=d.result_type,h=b.split("/"),i=h[h.length-1];f.open("GET",b),"arraybuffer"===g&&(f.responseType="arraybuffer"),f.onreadystatechange=function(){if(4===f.readyState){if(e=f.status,!(e>=200&&300>e||304===e)){var g="error loading URL: "+b+"\nHTTP Response: "+f.status+"\nHTTP Status: "+f.statusText+"\nResponse was: \n"+f.response;throw BrainBrowser.events.triggerEvent("error",{message:g}),new Error(g)}a.checkCancel(d)||c(f.response,i,d)}},f.send()},loadFromFile:function(a,b,c){var d=a.files;if(0!==d.length){c=c||{};var e=c.result_type,f=new FileReader,g=a.value.split("\\"),h=g[g.length-1];f.file=d[0],f.onloadend=function(a){var d=a.target.result;try{var f=pako.inflate(d);d=f.buffer}catch(g){}finally{if("arraybuffer"!==e)if("function"!=typeof TextDecoder){var i=new Blob([d]),j=new FileReader;j.onload=function(a){b(a.target.result,h,c)},j.readAsText(i)}else{var k=new DataView(d),l=new TextDecoder;d=l.decode(k),b(d,h,c)}else b(d,h,c)}},f.onerror=function(){var a="error reading file: "+h;throw BrainBrowser.events.triggerEvent("error",{message:a}),new Error(a)},f.readAsArrayBuffer(d[0])}},loadColorMapFromURL:function(b,c,d){a.loadFromURL(b,function(a,b,d){c(BrainBrowser.createColorMap(a,d),b,d)},d)},loadColorMapFromFile:function(b,c,d){a.loadFromFile(b,function(a,b,d){c(BrainBrowser.createColorMap(a,d),b,d)},d)},checkCancel:function(a){a=a||{},BrainBrowser.utils.isFunction(a)&&(a={test:a});var b=a.test,c=a.cleanup,d=!1;return b&&b()&&(d=!0,c&&c()),d}}}(),function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.pako=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g0?b.windowBits=-b.windowBits:b.gzip&&b.windowBits>0&&b.windowBits<16&&(b.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new l,this.strm.avail_out=0;var c=h.deflateInit2(this.strm,b.level,b.method,b.windowBits,b.memLevel,b.strategy);if(c!==p)throw new Error(k[c]);if(b.header&&h.deflateSetHeader(this.strm,b.header),b.dictionary){var e;if(e="string"==typeof b.dictionary?j.string2buf(b.dictionary):"[object ArrayBuffer]"===m.call(b.dictionary)?new Uint8Array(b.dictionary):b.dictionary,c=h.deflateSetDictionary(this.strm,e),c!==p)throw new Error(k[c]);this._dict_set=!0}}function e(a,b){var c=new d(b);if(c.push(a,!0),c.err)throw c.msg;return c.result}function f(a,b){return b=b||{},b.raw=!0,e(a,b)}function g(a,b){return b=b||{},b.gzip=!0,e(a,b)}var h=a("./zlib/deflate"),i=a("./utils/common"),j=a("./utils/strings"),k=a("./zlib/messages"),l=a("./zlib/zstream"),m=Object.prototype.toString,n=0,o=4,p=0,q=1,r=2,s=-1,t=0,u=8;d.prototype.push=function(a,b){var c,d,e=this.strm,f=this.options.chunkSize;if(this.ended)return!1;d=b===~~b?b:b===!0?o:n,"string"==typeof a?e.input=j.string2buf(a):"[object ArrayBuffer]"===m.call(a)?e.input=new Uint8Array(a):e.input=a,e.next_in=0,e.avail_in=e.input.length;do{if(0===e.avail_out&&(e.output=new i.Buf8(f),e.next_out=0,e.avail_out=f),c=h.deflate(e,d),c!==q&&c!==p)return this.onEnd(c),this.ended=!0,!1;(0===e.avail_out||0===e.avail_in&&(d===o||d===r))&&("string"===this.options.to?this.onData(j.buf2binstring(i.shrinkBuf(e.output,e.next_out))):this.onData(i.shrinkBuf(e.output,e.next_out)))}while((e.avail_in>0||0===e.avail_out)&&c!==q);return d===o?(c=h.deflateEnd(this.strm),this.onEnd(c),this.ended=!0,c===p):d===r?(this.onEnd(p),e.avail_out=0,!0):!0},d.prototype.onData=function(a){this.chunks.push(a)},d.prototype.onEnd=function(a){a===p&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=i.flattenChunks(this.chunks)),this.chunks=[],this.err=a,this.msg=this.strm.msg},c.Deflate=d,c.deflate=e,c.deflateRaw=f,c.gzip=g},{"./utils/common":3,"./utils/strings":4,"./zlib/deflate":8,"./zlib/messages":13,"./zlib/zstream":15}],2:[function(a,b,c){"use strict";function d(a){if(!(this instanceof d))return new d(a);this.options=h.assign({chunkSize:16384,windowBits:0,to:""},a||{});var b=this.options;b.raw&&b.windowBits>=0&&b.windowBits<16&&(b.windowBits=-b.windowBits,0===b.windowBits&&(b.windowBits=-15)),!(b.windowBits>=0&&b.windowBits<16)||a&&a.windowBits||(b.windowBits+=32),b.windowBits>15&&b.windowBits<48&&0===(15&b.windowBits)&&(b.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new l,this.strm.avail_out=0;var c=g.inflateInit2(this.strm,b.windowBits);if(c!==j.Z_OK)throw new Error(k[c]);this.header=new m,g.inflateGetHeader(this.strm,this.header)}function e(a,b){var c=new d(b);if(c.push(a,!0),c.err)throw c.msg;return c.result}function f(a,b){return b=b||{},b.raw=!0,e(a,b)}var g=a("./zlib/inflate"),h=a("./utils/common"),i=a("./utils/strings"),j=a("./zlib/constants"),k=a("./zlib/messages"),l=a("./zlib/zstream"),m=a("./zlib/gzheader"),n=Object.prototype.toString;d.prototype.push=function(a,b){var c,d,e,f,k,l,m=this.strm,o=this.options.chunkSize,p=this.options.dictionary,q=!1;if(this.ended)return!1;d=b===~~b?b:b===!0?j.Z_FINISH:j.Z_NO_FLUSH,"string"==typeof a?m.input=i.binstring2buf(a):"[object ArrayBuffer]"===n.call(a)?m.input=new Uint8Array(a):m.input=a,m.next_in=0,m.avail_in=m.input.length;do{if(0===m.avail_out&&(m.output=new h.Buf8(o),m.next_out=0,m.avail_out=o),c=g.inflate(m,j.Z_NO_FLUSH),c===j.Z_NEED_DICT&&p&&(l="string"==typeof p?i.string2buf(p):"[object ArrayBuffer]"===n.call(p)?new Uint8Array(p):p,c=g.inflateSetDictionary(this.strm,l)),c===j.Z_BUF_ERROR&&q===!0&&(c=j.Z_OK,q=!1),c!==j.Z_STREAM_END&&c!==j.Z_OK)return this.onEnd(c),this.ended=!0,!1;m.next_out&&(0===m.avail_out||c===j.Z_STREAM_END||0===m.avail_in&&(d===j.Z_FINISH||d===j.Z_SYNC_FLUSH))&&("string"===this.options.to?(e=i.utf8border(m.output,m.next_out),f=m.next_out-e,k=i.buf2string(m.output,e),m.next_out=f,m.avail_out=o-f,f&&h.arraySet(m.output,m.output,e,f,0),this.onData(k)):this.onData(h.shrinkBuf(m.output,m.next_out))),0===m.avail_in&&0===m.avail_out&&(q=!0)}while((m.avail_in>0||0===m.avail_out)&&c!==j.Z_STREAM_END);return c===j.Z_STREAM_END&&(d=j.Z_FINISH),d===j.Z_FINISH?(c=g.inflateEnd(this.strm),this.onEnd(c),this.ended=!0,c===j.Z_OK):d===j.Z_SYNC_FLUSH?(this.onEnd(j.Z_OK),m.avail_out=0,!0):!0},d.prototype.onData=function(a){this.chunks.push(a)},d.prototype.onEnd=function(a){a===j.Z_OK&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=h.flattenChunks(this.chunks)),this.chunks=[],this.err=a,this.msg=this.strm.msg},c.Inflate=d,c.inflate=e,c.inflateRaw=f,c.ungzip=e},{"./utils/common":3,"./utils/strings":4,"./zlib/constants":6,"./zlib/gzheader":9,"./zlib/inflate":11,"./zlib/messages":13,"./zlib/zstream":15}],3:[function(a,b,c){"use strict";var d="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;c.assign=function(a){for(var b=Array.prototype.slice.call(arguments,1);b.length;){var c=b.shift();if(c){if("object"!=typeof c)throw new TypeError(c+"must be non-object");for(var d in c)c.hasOwnProperty(d)&&(a[d]=c[d])}}return a},c.shrinkBuf=function(a,b){return a.length===b?a:a.subarray?a.subarray(0,b):(a.length=b,a)};var e={arraySet:function(a,b,c,d,e){if(b.subarray&&a.subarray)return void a.set(b.subarray(c,c+d),e);for(var f=0;d>f;f++)a[e+f]=b[c+f]},flattenChunks:function(a){var b,c,d,e,f,g;for(d=0,b=0,c=a.length;c>b;b++)d+=a[b].length;for(g=new Uint8Array(d),e=0,b=0,c=a.length;c>b;b++)f=a[b],g.set(f,e),e+=f.length;return g}},f={arraySet:function(a,b,c,d,e){for(var f=0;d>f;f++)a[e+f]=b[c+f]},flattenChunks:function(a){return[].concat.apply([],a)}};c.setTyped=function(a){a?(c.Buf8=Uint8Array,c.Buf16=Uint16Array,c.Buf32=Int32Array,c.assign(c,e)):(c.Buf8=Array,c.Buf16=Array,c.Buf32=Array,c.assign(c,f))},c.setTyped(d)},{}],4:[function(a,b,c){"use strict";function d(a,b){if(65537>b&&(a.subarray&&g||!a.subarray&&f))return String.fromCharCode.apply(null,e.shrinkBuf(a,b));for(var c="",d=0;b>d;d++)c+=String.fromCharCode(a[d]);return c}var e=a("./common"),f=!0,g=!0;try{String.fromCharCode.apply(null,[0])}catch(h){f=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(h){g=!1}for(var i=new e.Buf8(256),j=0;256>j;j++)i[j]=j>=252?6:j>=248?5:j>=240?4:j>=224?3:j>=192?2:1;i[254]=i[254]=1,c.string2buf=function(a){var b,c,d,f,g,h=a.length,i=0;for(f=0;h>f;f++)c=a.charCodeAt(f),55296===(64512&c)&&h>f+1&&(d=a.charCodeAt(f+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),f++)),i+=128>c?1:2048>c?2:65536>c?3:4;for(b=new e.Buf8(i),g=0,f=0;i>g;f++)c=a.charCodeAt(f),55296===(64512&c)&&h>f+1&&(d=a.charCodeAt(f+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),f++)),128>c?b[g++]=c:2048>c?(b[g++]=192|c>>>6,b[g++]=128|63&c):65536>c?(b[g++]=224|c>>>12,b[g++]=128|c>>>6&63,b[g++]=128|63&c):(b[g++]=240|c>>>18,b[g++]=128|c>>>12&63,b[g++]=128|c>>>6&63,b[g++]=128|63&c);return b},c.buf2binstring=function(a){return d(a,a.length)},c.binstring2buf=function(a){for(var b=new e.Buf8(a.length),c=0,d=b.length;d>c;c++)b[c]=a.charCodeAt(c);return b},c.buf2string=function(a,b){var c,e,f,g,h=b||a.length,j=new Array(2*h);for(e=0,c=0;h>c;)if(f=a[c++],128>f)j[e++]=f;else if(g=i[f],g>4)j[e++]=65533,c+=g-1;else{for(f&=2===g?31:3===g?15:7;g>1&&h>c;)f=f<<6|63&a[c++],g--;g>1?j[e++]=65533:65536>f?j[e++]=f:(f-=65536,j[e++]=55296|f>>10&1023,j[e++]=56320|1023&f)}return d(j,e)},c.utf8border=function(a,b){var c;for(b=b||a.length,b>a.length&&(b=a.length),c=b-1;c>=0&&128===(192&a[c]);)c--;return 0>c?b:0===c?b:c+i[a[c]]>b?c:b}},{"./common":3}],5:[function(a,b,c){"use strict";function d(a,b,c,d){for(var e=65535&a|0,f=a>>>16&65535|0,g=0;0!==c;){g=c>2e3?2e3:c,c-=g;do e=e+b[d++]|0,f=f+e|0;while(--g);e%=65521,f%=65521}return e|f<<16|0}b.exports=d},{}],6:[function(a,b,c){"use strict";b.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],7:[function(a,b,c){"use strict";function d(){for(var a,b=[],c=0;256>c;c++){a=c;for(var d=0;8>d;d++)a=1&a?3988292384^a>>>1:a>>>1;b[c]=a}return b}function e(a,b,c,d){var e=f,g=d+c;a^=-1;for(var h=d;g>h;h++)a=a>>>8^e[255&(a^b[h])];return-1^a}var f=d();b.exports=e},{}],8:[function(a,b,c){"use strict";function d(a,b){return a.msg=I[b],b}function e(a){return(a<<1)-(a>4?9:0)}function f(a){for(var b=a.length;--b>=0;)a[b]=0}function g(a){var b=a.state,c=b.pending;c>a.avail_out&&(c=a.avail_out),0!==c&&(E.arraySet(a.output,b.pending_buf,b.pending_out,c,a.next_out),a.next_out+=c,b.pending_out+=c,a.total_out+=c,a.avail_out-=c,b.pending-=c,0===b.pending&&(b.pending_out=0))}function h(a,b){F._tr_flush_block(a,a.block_start>=0?a.block_start:-1,a.strstart-a.block_start,b),a.block_start=a.strstart,g(a.strm)}function i(a,b){a.pending_buf[a.pending++]=b}function j(a,b){a.pending_buf[a.pending++]=b>>>8&255,a.pending_buf[a.pending++]=255&b}function k(a,b,c,d){var e=a.avail_in;return e>d&&(e=d),0===e?0:(a.avail_in-=e,E.arraySet(b,a.input,a.next_in,e,c),1===a.state.wrap?a.adler=G(a.adler,b,e,c):2===a.state.wrap&&(a.adler=H(a.adler,b,e,c)),a.next_in+=e,a.total_in+=e,e)}function l(a,b){var c,d,e=a.max_chain_length,f=a.strstart,g=a.prev_length,h=a.nice_match,i=a.strstart>a.w_size-la?a.strstart-(a.w_size-la):0,j=a.window,k=a.w_mask,l=a.prev,m=a.strstart+ka,n=j[f+g-1],o=j[f+g];a.prev_length>=a.good_match&&(e>>=2),h>a.lookahead&&(h=a.lookahead);do if(c=b,j[c+g]===o&&j[c+g-1]===n&&j[c]===j[f]&&j[++c]===j[f+1]){f+=2,c++;do;while(j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&m>f);if(d=ka-(m-f),f=m-ka,d>g){if(a.match_start=b,g=d,d>=h)break;n=j[f+g-1],o=j[f+g]}}while((b=l[b&k])>i&&0!==--e);return g<=a.lookahead?g:a.lookahead}function m(a){var b,c,d,e,f,g=a.w_size;do{if(e=a.window_size-a.lookahead-a.strstart,a.strstart>=g+(g-la)){E.arraySet(a.window,a.window,g,g,0),a.match_start-=g,a.strstart-=g,a.block_start-=g,c=a.hash_size,b=c;do d=a.head[--b],a.head[b]=d>=g?d-g:0;while(--c);c=g,b=c;do d=a.prev[--b],a.prev[b]=d>=g?d-g:0;while(--c);e+=g}if(0===a.strm.avail_in)break;if(c=k(a.strm,a.window,a.strstart+a.lookahead,e),a.lookahead+=c,a.lookahead+a.insert>=ja)for(f=a.strstart-a.insert,a.ins_h=a.window[f],a.ins_h=(a.ins_h<a.pending_buf_size-5&&(c=a.pending_buf_size-5);;){if(a.lookahead<=1){if(m(a),0===a.lookahead&&b===J)return ua;if(0===a.lookahead)break}a.strstart+=a.lookahead,a.lookahead=0;var d=a.block_start+c;if((0===a.strstart||a.strstart>=d)&&(a.lookahead=a.strstart-d,a.strstart=d,h(a,!1),0===a.strm.avail_out))return ua;if(a.strstart-a.block_start>=a.w_size-la&&(h(a,!1),0===a.strm.avail_out))return ua}return a.insert=0,b===M?(h(a,!0),0===a.strm.avail_out?wa:xa):a.strstart>a.block_start&&(h(a,!1),0===a.strm.avail_out)?ua:ua}function o(a,b){for(var c,d;;){if(a.lookahead=ja&&(a.ins_h=(a.ins_h<=ja)if(d=F._tr_tally(a,a.strstart-a.match_start,a.match_length-ja),a.lookahead-=a.match_length,a.match_length<=a.max_lazy_match&&a.lookahead>=ja){a.match_length--;do a.strstart++,a.ins_h=(a.ins_h<=ja&&(a.ins_h=(a.ins_h<4096)&&(a.match_length=ja-1)),a.prev_length>=ja&&a.match_length<=a.prev_length){e=a.strstart+a.lookahead-ja,d=F._tr_tally(a,a.strstart-1-a.prev_match,a.prev_length-ja),a.lookahead-=a.prev_length-1,a.prev_length-=2;do++a.strstart<=e&&(a.ins_h=(a.ins_h<=ja&&a.strstart>0&&(e=a.strstart-1,d=g[e],d===g[++e]&&d===g[++e]&&d===g[++e])){f=a.strstart+ka;do;while(d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&f>e);a.match_length=ka-(f-e),a.match_length>a.lookahead&&(a.match_length=a.lookahead)}if(a.match_length>=ja?(c=F._tr_tally(a,1,a.match_length-ja),a.lookahead-=a.match_length,a.strstart+=a.match_length,a.match_length=0):(c=F._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++),c&&(h(a,!1),0===a.strm.avail_out))return ua}return a.insert=0,b===M?(h(a,!0),0===a.strm.avail_out?wa:xa):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?ua:va}function r(a,b){for(var c;;){if(0===a.lookahead&&(m(a),0===a.lookahead)){if(b===J)return ua;break}if(a.match_length=0,c=F._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++,c&&(h(a,!1),0===a.strm.avail_out))return ua}return a.insert=0,b===M?(h(a,!0),0===a.strm.avail_out?wa:xa):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?ua:va}function s(a,b,c,d,e){this.good_length=a,this.max_lazy=b,this.nice_length=c,this.max_chain=d,this.func=e}function t(a){a.window_size=2*a.w_size,f(a.head),a.max_lazy_match=D[a.level].max_lazy,a.good_match=D[a.level].good_length,a.nice_match=D[a.level].nice_length,a.max_chain_length=D[a.level].max_chain,a.strstart=0,a.block_start=0,a.lookahead=0,a.insert=0,a.match_length=a.prev_length=ja-1,a.match_available=0,a.ins_h=0}function u(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=$,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new E.Buf16(2*ha),this.dyn_dtree=new E.Buf16(2*(2*fa+1)),this.bl_tree=new E.Buf16(2*(2*ga+1)),f(this.dyn_ltree),f(this.dyn_dtree),f(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new E.Buf16(ia+1),this.heap=new E.Buf16(2*ea+1),f(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new E.Buf16(2*ea+1),f(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function v(a){var b;return a&&a.state?(a.total_in=a.total_out=0,a.data_type=Z,b=a.state,b.pending=0,b.pending_out=0,b.wrap<0&&(b.wrap=-b.wrap),b.status=b.wrap?na:sa,a.adler=2===b.wrap?0:1,b.last_flush=J,F._tr_init(b),O):d(a,Q)}function w(a){var b=v(a);return b===O&&t(a.state),b}function x(a,b){return a&&a.state?2!==a.state.wrap?Q:(a.state.gzhead=b,O):Q}function y(a,b,c,e,f,g){if(!a)return Q;var h=1;if(b===T&&(b=6),0>e?(h=0,e=-e):e>15&&(h=2,e-=16),1>f||f>_||c!==$||8>e||e>15||0>b||b>9||0>g||g>X)return d(a,Q);8===e&&(e=9);var i=new u;return a.state=i,i.strm=a,i.wrap=h,i.gzhead=null,i.w_bits=e,i.w_size=1<>1,i.l_buf=3*i.lit_bufsize,i.level=b,i.strategy=g,i.method=c,w(a)}function z(a,b){return y(a,b,$,aa,ba,Y)}function A(a,b){var c,h,k,l;if(!a||!a.state||b>N||0>b)return a?d(a,Q):Q;if(h=a.state,!a.output||!a.input&&0!==a.avail_in||h.status===ta&&b!==M)return d(a,0===a.avail_out?S:Q);if(h.strm=a,c=h.last_flush,h.last_flush=b,h.status===na)if(2===h.wrap)a.adler=0,i(h,31),i(h,139),i(h,8),h.gzhead?(i(h,(h.gzhead.text?1:0)+(h.gzhead.hcrc?2:0)+(h.gzhead.extra?4:0)+(h.gzhead.name?8:0)+(h.gzhead.comment?16:0)),i(h,255&h.gzhead.time),i(h,h.gzhead.time>>8&255),i(h,h.gzhead.time>>16&255),i(h,h.gzhead.time>>24&255),i(h,9===h.level?2:h.strategy>=V||h.level<2?4:0),i(h,255&h.gzhead.os),h.gzhead.extra&&h.gzhead.extra.length&&(i(h,255&h.gzhead.extra.length),i(h,h.gzhead.extra.length>>8&255)),h.gzhead.hcrc&&(a.adler=H(a.adler,h.pending_buf,h.pending,0)),h.gzindex=0,h.status=oa):(i(h,0),i(h,0),i(h,0),i(h,0),i(h,0),i(h,9===h.level?2:h.strategy>=V||h.level<2?4:0),i(h,ya),h.status=sa);else{var m=$+(h.w_bits-8<<4)<<8,n=-1;n=h.strategy>=V||h.level<2?0:h.level<6?1:6===h.level?2:3,m|=n<<6,0!==h.strstart&&(m|=ma),m+=31-m%31,h.status=sa,j(h,m),0!==h.strstart&&(j(h,a.adler>>>16),j(h,65535&a.adler)),a.adler=1}if(h.status===oa)if(h.gzhead.extra){for(k=h.pending;h.gzindex<(65535&h.gzhead.extra.length)&&(h.pending!==h.pending_buf_size||(h.gzhead.hcrc&&h.pending>k&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending!==h.pending_buf_size));)i(h,255&h.gzhead.extra[h.gzindex]),h.gzindex++;h.gzhead.hcrc&&h.pending>k&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),h.gzindex===h.gzhead.extra.length&&(h.gzindex=0,h.status=pa)}else h.status=pa;if(h.status===pa)if(h.gzhead.name){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindexk&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.gzindex=0,h.status=qa)}else h.status=qa;if(h.status===qa)if(h.gzhead.comment){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindexk&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.status=ra)}else h.status=ra;if(h.status===ra&&(h.gzhead.hcrc?(h.pending+2>h.pending_buf_size&&g(a),h.pending+2<=h.pending_buf_size&&(i(h,255&a.adler),i(h,a.adler>>8&255),a.adler=0,h.status=sa)):h.status=sa),0!==h.pending){if(g(a),0===a.avail_out)return h.last_flush=-1,O}else if(0===a.avail_in&&e(b)<=e(c)&&b!==M)return d(a,S);if(h.status===ta&&0!==a.avail_in)return d(a,S);if(0!==a.avail_in||0!==h.lookahead||b!==J&&h.status!==ta){var o=h.strategy===V?r(h,b):h.strategy===W?q(h,b):D[h.level].func(h,b);if((o===wa||o===xa)&&(h.status=ta),o===ua||o===wa)return 0===a.avail_out&&(h.last_flush=-1),O;if(o===va&&(b===K?F._tr_align(h):b!==N&&(F._tr_stored_block(h,0,0,!1),b===L&&(f(h.head),0===h.lookahead&&(h.strstart=0,h.block_start=0,h.insert=0))),g(a),0===a.avail_out))return h.last_flush=-1,O}return b!==M?O:h.wrap<=0?P:(2===h.wrap?(i(h,255&a.adler),i(h,a.adler>>8&255),i(h,a.adler>>16&255),i(h,a.adler>>24&255),i(h,255&a.total_in),i(h,a.total_in>>8&255),i(h,a.total_in>>16&255),i(h,a.total_in>>24&255)):(j(h,a.adler>>>16),j(h,65535&a.adler)),g(a),h.wrap>0&&(h.wrap=-h.wrap),0!==h.pending?O:P)}function B(a){var b;return a&&a.state?(b=a.state.status,b!==na&&b!==oa&&b!==pa&&b!==qa&&b!==ra&&b!==sa&&b!==ta?d(a,Q):(a.state=null,b===sa?d(a,R):O)):Q}function C(a,b){var c,d,e,g,h,i,j,k,l=b.length;if(!a||!a.state)return Q;if(c=a.state,g=c.wrap,2===g||1===g&&c.status!==na||c.lookahead)return Q;for(1===g&&(a.adler=G(a.adler,b,l,0)),c.wrap=0,l>=c.w_size&&(0===g&&(f(c.head),c.strstart=0,c.block_start=0,c.insert=0),k=new E.Buf8(c.w_size),E.arraySet(k,b,l-c.w_size,c.w_size,0),b=k,l=c.w_size),h=a.avail_in,i=a.next_in,j=a.input,a.avail_in=l,a.next_in=0,a.input=b,m(c);c.lookahead>=ja;){d=c.strstart,e=c.lookahead-(ja-1);do c.ins_h=(c.ins_h<q&&(p+=B[f++]<>>24,p>>>=w,q-=w,w=v>>>16&255,0===w)C[h++]=65535&v;else{if(!(16&w)){if(0===(64&w)){v=r[(65535&v)+(p&(1<q&&(p+=B[f++]<>>=w,q-=w),15>q&&(p+=B[f++]<>>24,p>>>=w,q-=w,w=v>>>16&255,!(16&w)){if(0===(64&w)){v=s[(65535&v)+(p&(1<q&&(p+=B[f++]<q&&(p+=B[f++]<k){a.msg="invalid distance too far back",c.mode=d;break a}if(p>>>=w,q-=w,w=h-i,y>w){if(w=y-w,w>m&&c.sane){a.msg="invalid distance too far back",c.mode=d;break a}if(z=0,A=o,0===n){if(z+=l-w,x>w){x-=w;do C[h++]=o[z++];while(--w);z=h-y,A=C}}else if(w>n){if(z+=l+n-w,w-=n,x>w){x-=w;do C[h++]=o[z++];while(--w);if(z=0,x>n){w=n,x-=w;do C[h++]=o[z++];while(--w);z=h-y,A=C}}}else if(z+=n-w,x>w){x-=w;do C[h++]=o[z++];while(--w);z=h-y,A=C}for(;x>2;)C[h++]=A[z++],C[h++]=A[z++],C[h++]=A[z++],x-=3;x&&(C[h++]=A[z++],x>1&&(C[h++]=A[z++]))}else{z=h-y;do C[h++]=C[z++],C[h++]=C[z++],C[h++]=C[z++],x-=3;while(x>2);x&&(C[h++]=C[z++],x>1&&(C[h++]=C[z++]))}break}}break}}while(g>f&&j>h);x=q>>3,f-=x,q-=x<<3,p&=(1<f?5+(g-f):5-(f-g),a.avail_out=j>h?257+(j-h):257-(h-j),c.hold=p,c.bits=q}},{}],11:[function(a,b,c){"use strict";function d(a){return(a>>>24&255)+(a>>>8&65280)+((65280&a)<<8)+((255&a)<<24)}function e(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new s.Buf16(320),this.work=new s.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function f(a){var b;return a&&a.state?(b=a.state,a.total_in=a.total_out=b.total=0,a.msg="",b.wrap&&(a.adler=1&b.wrap),b.mode=L,b.last=0,b.havedict=0,b.dmax=32768,b.head=null,b.hold=0,b.bits=0,b.lencode=b.lendyn=new s.Buf32(pa),b.distcode=b.distdyn=new s.Buf32(qa),b.sane=1,b.back=-1,D):G}function g(a){var b;return a&&a.state?(b=a.state,b.wsize=0,b.whave=0,b.wnext=0,f(a)):G}function h(a,b){var c,d;return a&&a.state?(d=a.state,0>b?(c=0,b=-b):(c=(b>>4)+1,48>b&&(b&=15)),b&&(8>b||b>15)?G:(null!==d.window&&d.wbits!==b&&(d.window=null),d.wrap=c,d.wbits=b,g(a))):G}function i(a,b){var c,d;return a?(d=new e,a.state=d,d.window=null,c=h(a,b),c!==D&&(a.state=null),c):G}function j(a){return i(a,sa)}function k(a){if(ta){var b;for(q=new s.Buf32(512),r=new s.Buf32(32),b=0;144>b;)a.lens[b++]=8;for(;256>b;)a.lens[b++]=9;for(;280>b;)a.lens[b++]=7;for(;288>b;)a.lens[b++]=8;for(w(y,a.lens,0,288,q,0,a.work,{bits:9}),b=0;32>b;)a.lens[b++]=5;w(z,a.lens,0,32,r,0,a.work,{bits:5}),ta=!1}a.lencode=q,a.lenbits=9,a.distcode=r,a.distbits=5}function l(a,b,c,d){var e,f=a.state;return null===f.window&&(f.wsize=1<=f.wsize?(s.arraySet(f.window,b,c-f.wsize,f.wsize,0),f.wnext=0,f.whave=f.wsize):(e=f.wsize-f.wnext,e>d&&(e=d),s.arraySet(f.window,b,c-d,e,f.wnext),d-=e,d?(s.arraySet(f.window,b,c-d,d,0),f.wnext=d,f.whave=f.wsize):(f.wnext+=e,f.wnext===f.wsize&&(f.wnext=0),f.whaven;){if(0===i)break a;i--,m+=e[g++]<>>8&255,c.check=u(c.check,Ba,2,0),m=0,n=0,c.mode=M;break}if(c.flags=0,c.head&&(c.head.done=!1),!(1&c.wrap)||(((255&m)<<8)+(m>>8))%31){a.msg="incorrect header check",c.mode=ma;break}if((15&m)!==K){a.msg="unknown compression method",c.mode=ma;break}if(m>>>=4,n-=4,wa=(15&m)+8,0===c.wbits)c.wbits=wa;else if(wa>c.wbits){a.msg="invalid window size",c.mode=ma;break}c.dmax=1<n;){if(0===i)break a;i--,m+=e[g++]<>8&1),512&c.flags&&(Ba[0]=255&m,Ba[1]=m>>>8&255,c.check=u(c.check,Ba,2,0)),m=0,n=0,c.mode=N;case N:for(;32>n;){if(0===i)break a;i--,m+=e[g++]<>>8&255,Ba[2]=m>>>16&255,Ba[3]=m>>>24&255,c.check=u(c.check,Ba,4,0)),m=0,n=0,c.mode=O;case O:for(;16>n;){if(0===i)break a;i--,m+=e[g++]<>8),512&c.flags&&(Ba[0]=255&m,Ba[1]=m>>>8&255,c.check=u(c.check,Ba,2,0)),m=0,n=0,c.mode=P;case P:if(1024&c.flags){for(;16>n;){if(0===i)break a;i--,m+=e[g++]<>>8&255,c.check=u(c.check,Ba,2,0)),m=0,n=0}else c.head&&(c.head.extra=null);c.mode=Q;case Q:if(1024&c.flags&&(q=c.length,q>i&&(q=i),q&&(c.head&&(wa=c.head.extra_len-c.length,c.head.extra||(c.head.extra=new Array(c.head.extra_len)),s.arraySet(c.head.extra,e,g,q,wa)),512&c.flags&&(c.check=u(c.check,e,q,g)),i-=q,g+=q,c.length-=q),c.length))break a;c.length=0,c.mode=R;case R:if(2048&c.flags){if(0===i)break a;q=0;do wa=e[g+q++],c.head&&wa&&c.length<65536&&(c.head.name+=String.fromCharCode(wa));while(wa&&i>q);if(512&c.flags&&(c.check=u(c.check,e,q,g)),i-=q,g+=q,wa)break a}else c.head&&(c.head.name=null);c.length=0,c.mode=S;case S:if(4096&c.flags){if(0===i)break a;q=0;do wa=e[g+q++],c.head&&wa&&c.length<65536&&(c.head.comment+=String.fromCharCode(wa));while(wa&&i>q);if(512&c.flags&&(c.check=u(c.check,e,q,g)),i-=q,g+=q,wa)break a}else c.head&&(c.head.comment=null);c.mode=T;case T:if(512&c.flags){for(;16>n;){if(0===i)break a;i--,m+=e[g++]<>9&1,c.head.done=!0),a.adler=c.check=0,c.mode=W;break;case U:for(;32>n;){if(0===i)break a;i--,m+=e[g++]<>>=7&n,n-=7&n,c.mode=ja;break}for(;3>n;){if(0===i)break a;i--,m+=e[g++]<>>=1,n-=1,3&m){case 0:c.mode=Y;break;case 1:if(k(c),c.mode=ca,b===C){m>>>=2,n-=2;break a}break;case 2:c.mode=_;break;case 3:a.msg="invalid block type",c.mode=ma}m>>>=2,n-=2;break;case Y:for(m>>>=7&n,n-=7&n;32>n;){if(0===i)break a;i--,m+=e[g++]<>>16^65535)){a.msg="invalid stored block lengths",c.mode=ma;break}if(c.length=65535&m,m=0,n=0,c.mode=Z,b===C)break a;case Z:c.mode=$;case $:if(q=c.length){if(q>i&&(q=i),q>j&&(q=j),0===q)break a;s.arraySet(f,e,g,q,h),i-=q,g+=q,j-=q,h+=q,c.length-=q;break}c.mode=W;break;case _:for(;14>n;){if(0===i)break a;i--,m+=e[g++]<>>=5,n-=5,c.ndist=(31&m)+1,m>>>=5,n-=5,c.ncode=(15&m)+4,m>>>=4,n-=4,c.nlen>286||c.ndist>30){a.msg="too many length or distance symbols",c.mode=ma;break}c.have=0,c.mode=aa;case aa:for(;c.haven;){if(0===i)break a;i--,m+=e[g++]<>>=3,n-=3}for(;c.have<19;)c.lens[Ca[c.have++]]=0;if(c.lencode=c.lendyn,c.lenbits=7,ya={bits:c.lenbits},xa=w(x,c.lens,0,19,c.lencode,0,c.work,ya),c.lenbits=ya.bits,xa){a.msg="invalid code lengths set",c.mode=ma;break}c.have=0,c.mode=ba;case ba:for(;c.have>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=qa);){if(0===i)break a;i--,m+=e[g++]<sa)m>>>=qa,n-=qa,c.lens[c.have++]=sa;else{if(16===sa){for(za=qa+2;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=qa,n-=qa,0===c.have){a.msg="invalid bit length repeat",c.mode=ma;break}wa=c.lens[c.have-1],q=3+(3&m),m>>>=2,n-=2}else if(17===sa){for(za=qa+3;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=qa,n-=qa,wa=0,q=3+(7&m),m>>>=3,n-=3}else{for(za=qa+7;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=qa,n-=qa,wa=0,q=11+(127&m),m>>>=7,n-=7}if(c.have+q>c.nlen+c.ndist){a.msg="invalid bit length repeat",c.mode=ma;break}for(;q--;)c.lens[c.have++]=wa}}if(c.mode===ma)break;if(0===c.lens[256]){a.msg="invalid code -- missing end-of-block",c.mode=ma;break}if(c.lenbits=9,ya={bits:c.lenbits},xa=w(y,c.lens,0,c.nlen,c.lencode,0,c.work,ya),c.lenbits=ya.bits,xa){a.msg="invalid literal/lengths set",c.mode=ma;break}if(c.distbits=6,c.distcode=c.distdyn,ya={bits:c.distbits},xa=w(z,c.lens,c.nlen,c.ndist,c.distcode,0,c.work,ya),c.distbits=ya.bits,xa){a.msg="invalid distances set",c.mode=ma;break}if(c.mode=ca,b===C)break a;case ca:c.mode=da;case da:if(i>=6&&j>=258){a.next_out=h,a.avail_out=j,a.next_in=g,a.avail_in=i,c.hold=m,c.bits=n,v(a,p),h=a.next_out,f=a.output,j=a.avail_out,g=a.next_in,e=a.input,i=a.avail_in,m=c.hold,n=c.bits,c.mode===W&&(c.back=-1);break}for(c.back=0;Aa=c.lencode[m&(1<>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=qa);){if(0===i)break a;i--,m+=e[g++]<>ta)],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=ta+qa);){if(0===i)break a;i--,m+=e[g++]<>>=ta,n-=ta,c.back+=ta}if(m>>>=qa,n-=qa,c.back+=qa,c.length=sa,0===ra){c.mode=ia;break}if(32&ra){c.back=-1,c.mode=W;break}if(64&ra){a.msg="invalid literal/length code",c.mode=ma;break}c.extra=15&ra,c.mode=ea;case ea:if(c.extra){for(za=c.extra;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=c.extra,n-=c.extra,c.back+=c.extra}c.was=c.length,c.mode=fa;case fa:for(;Aa=c.distcode[m&(1<>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=qa);){if(0===i)break a;i--,m+=e[g++]<>ta)],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=ta+qa);){if(0===i)break a;i--,m+=e[g++]<>>=ta,n-=ta,c.back+=ta}if(m>>>=qa,n-=qa,c.back+=qa,64&ra){a.msg="invalid distance code",c.mode=ma;break}c.offset=sa,c.extra=15&ra,c.mode=ga;case ga:if(c.extra){for(za=c.extra;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=c.extra,n-=c.extra,c.back+=c.extra}if(c.offset>c.dmax){a.msg="invalid distance too far back",c.mode=ma;break}c.mode=ha;case ha:if(0===j)break a;if(q=p-j,c.offset>q){if(q=c.offset-q,q>c.whave&&c.sane){a.msg="invalid distance too far back",c.mode=ma;break}q>c.wnext?(q-=c.wnext,r=c.wsize-q):r=c.wnext-q,q>c.length&&(q=c.length),pa=c.window}else pa=f,r=h-c.offset,q=c.length;q>j&&(q=j),j-=q,c.length-=q;do f[h++]=pa[r++];while(--q);0===c.length&&(c.mode=da);break;case ia:if(0===j)break a;f[h++]=c.length,j--,c.mode=da;break;case ja:if(c.wrap){for(;32>n;){if(0===i)break a;i--,m|=e[g++]<n;){if(0===i)break a;i--,m+=e[g++]<=D;D++)P[D]=0;for(E=0;o>E;E++)P[b[c+E]]++;for(H=C,G=e;G>=1&&0===P[G];G--);if(H>G&&(H=G),0===G)return p[q++]=20971520,p[q++]=20971520,s.bits=1,0;for(F=1;G>F&&0===P[F];F++);for(F>H&&(H=F),K=1,D=1;e>=D;D++)if(K<<=1,K-=P[D],0>K)return-1;if(K>0&&(a===h||1!==G))return-1;for(Q[1]=0,D=1;e>D;D++)Q[D+1]=Q[D]+P[D];for(E=0;o>E;E++)0!==b[c+E]&&(r[Q[b[c+E]]++]=E);if(a===h?(N=R=r,y=19):a===i?(N=k,O-=257,R=l,S-=257,y=256):(N=m,R=n,y=-1),M=0,E=0,D=F,x=q,I=H,J=0,v=-1,L=1<f||a===j&&L>g)return 1;for(var T=0;;){T++,z=D-J,r[E]y?(A=R[S+r[E]],B=N[O+r[E]]):(A=96,B=0),t=1<>J)+u]=z<<24|A<<16|B|0;while(0!==u);for(t=1<>=1;if(0!==t?(M&=t-1,M+=t):M=0,E++,0===--P[D]){if(D===G)break;D=b[c+r[E]]}if(D>H&&(M&w)!==v){for(0===J&&(J=H),x+=F,I=D-J,K=1<I+J&&(K-=P[I+J],!(0>=K));)I++,K<<=1;if(L+=1<f||a===j&&L>g)return 1;v=M&w,p[v]=H<<24|I<<16|x-q|0}}return 0!==M&&(p[x+M]=D-J<<24|64<<16|0),s.bits=H,0}},{"../utils/common":3}],13:[function(a,b,c){"use strict";b.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],14:[function(a,b,c){"use strict";function d(a){for(var b=a.length;--b>=0;)a[b]=0}function e(a,b,c,d,e){this.static_tree=a,this.extra_bits=b,this.extra_base=c,this.elems=d,this.max_length=e,this.has_stree=a&&a.length}function f(a,b){this.dyn_tree=a,this.max_code=0,this.stat_desc=b}function g(a){return 256>a?ia[a]:ia[256+(a>>>7)]}function h(a,b){a.pending_buf[a.pending++]=255&b,a.pending_buf[a.pending++]=b>>>8&255}function i(a,b,c){a.bi_valid>X-c?(a.bi_buf|=b<>X-a.bi_valid,a.bi_valid+=c-X):(a.bi_buf|=b<>>=1,c<<=1;while(--b>0);return c>>>1}function l(a){16===a.bi_valid?(h(a,a.bi_buf),a.bi_buf=0,a.bi_valid=0):a.bi_valid>=8&&(a.pending_buf[a.pending++]=255&a.bi_buf,a.bi_buf>>=8,a.bi_valid-=8)}function m(a,b){var c,d,e,f,g,h,i=b.dyn_tree,j=b.max_code,k=b.stat_desc.static_tree,l=b.stat_desc.has_stree,m=b.stat_desc.extra_bits,n=b.stat_desc.extra_base,o=b.stat_desc.max_length,p=0;for(f=0;W>=f;f++)a.bl_count[f]=0;for(i[2*a.heap[a.heap_max]+1]=0,c=a.heap_max+1;V>c;c++)d=a.heap[c],f=i[2*i[2*d+1]+1]+1,f>o&&(f=o,p++),i[2*d+1]=f,d>j||(a.bl_count[f]++,g=0,d>=n&&(g=m[d-n]),h=i[2*d],a.opt_len+=h*(f+g),l&&(a.static_len+=h*(k[2*d+1]+g)));if(0!==p){do{for(f=o-1;0===a.bl_count[f];)f--;a.bl_count[f]--,a.bl_count[f+1]+=2,a.bl_count[o]--,p-=2}while(p>0);for(f=o;0!==f;f--)for(d=a.bl_count[f];0!==d;)e=a.heap[--c],e>j||(i[2*e+1]!==f&&(a.opt_len+=(f-i[2*e+1])*i[2*e],i[2*e+1]=f),d--)}}function n(a,b,c){var d,e,f=new Array(W+1),g=0;for(d=1;W>=d;d++)f[d]=g=g+c[d-1]<<1;for(e=0;b>=e;e++){var h=a[2*e+1];0!==h&&(a[2*e]=k(f[h]++,h))}}function o(){var a,b,c,d,f,g=new Array(W+1);for(c=0,d=0;Q-1>d;d++)for(ka[d]=c,a=0;a<1<d;d++)for(la[d]=f,a=0;a<1<>=7;T>d;d++)for(la[d]=f<<7,a=0;a<1<=b;b++)g[b]=0;for(a=0;143>=a;)ga[2*a+1]=8,a++,g[8]++;for(;255>=a;)ga[2*a+1]=9,a++,g[9]++;for(;279>=a;)ga[2*a+1]=7,a++,g[7]++;for(;287>=a;)ga[2*a+1]=8,a++,g[8]++;for(n(ga,S+1,g),a=0;T>a;a++)ha[2*a+1]=5,ha[2*a]=k(a,5);ma=new e(ga,ba,R+1,S,W),na=new e(ha,ca,0,T,W),oa=new e(new Array(0),da,0,U,Y)}function p(a){var b;for(b=0;S>b;b++)a.dyn_ltree[2*b]=0;for(b=0;T>b;b++)a.dyn_dtree[2*b]=0;for(b=0;U>b;b++)a.bl_tree[2*b]=0;a.dyn_ltree[2*Z]=1,a.opt_len=a.static_len=0,a.last_lit=a.matches=0}function q(a){a.bi_valid>8?h(a,a.bi_buf):a.bi_valid>0&&(a.pending_buf[a.pending++]=a.bi_buf),a.bi_buf=0,a.bi_valid=0}function r(a,b,c,d){q(a),d&&(h(a,c),h(a,~c)),G.arraySet(a.pending_buf,a.window,b,c,a.pending),a.pending+=c}function s(a,b,c,d){var e=2*b,f=2*c;return a[e]c;c++)0!==f[2*c]?(a.heap[++a.heap_len]=j=c,a.depth[c]=0):f[2*c+1]=0;for(;a.heap_len<2;)e=a.heap[++a.heap_len]=2>j?++j:0,f[2*e]=1,a.depth[e]=0,a.opt_len--,h&&(a.static_len-=g[2*e+1]);for(b.max_code=j,c=a.heap_len>>1;c>=1;c--)t(a,f,c);e=i;do c=a.heap[1],a.heap[1]=a.heap[a.heap_len--],t(a,f,1),d=a.heap[1],a.heap[--a.heap_max]=c,a.heap[--a.heap_max]=d,f[2*e]=f[2*c]+f[2*d],a.depth[e]=(a.depth[c]>=a.depth[d]?a.depth[c]:a.depth[d])+1,f[2*c+1]=f[2*d+1]=e,a.heap[1]=e++,t(a,f,1);while(a.heap_len>=2);a.heap[--a.heap_max]=a.heap[1],m(a,b),n(f,j,a.bl_count)}function w(a,b,c){var d,e,f=-1,g=b[1],h=0,i=7,j=4;for(0===g&&(i=138,j=3),b[2*(c+1)+1]=65535,d=0;c>=d;d++)e=g,g=b[2*(d+1)+1],++hh?a.bl_tree[2*e]+=h:0!==e?(e!==f&&a.bl_tree[2*e]++,a.bl_tree[2*$]++):10>=h?a.bl_tree[2*_]++:a.bl_tree[2*aa]++,h=0,f=e,0===g?(i=138,j=3):e===g?(i=6,j=3):(i=7,j=4))}function x(a,b,c){var d,e,f=-1,g=b[1],h=0,k=7,l=4;for(0===g&&(k=138,l=3),d=0;c>=d;d++)if(e=g,g=b[2*(d+1)+1],!(++hh){do j(a,e,a.bl_tree);while(0!==--h)}else 0!==e?(e!==f&&(j(a,e,a.bl_tree),h--),j(a,$,a.bl_tree),i(a,h-3,2)):10>=h?(j(a,_,a.bl_tree),i(a,h-3,3)):(j(a,aa,a.bl_tree),i(a,h-11,7));h=0,f=e,0===g?(k=138,l=3):e===g?(k=6,l=3):(k=7,l=4)}}function y(a){var b;for(w(a,a.dyn_ltree,a.l_desc.max_code),w(a,a.dyn_dtree,a.d_desc.max_code),v(a,a.bl_desc),b=U-1;b>=3&&0===a.bl_tree[2*ea[b]+1];b--);return a.opt_len+=3*(b+1)+5+5+4,b}function z(a,b,c,d){var e;for(i(a,b-257,5),i(a,c-1,5),i(a,d-4,4),e=0;d>e;e++)i(a,a.bl_tree[2*ea[e]+1],3);x(a,a.dyn_ltree,b-1),x(a,a.dyn_dtree,c-1)}function A(a){var b,c=4093624447;for(b=0;31>=b;b++,c>>>=1)if(1&c&&0!==a.dyn_ltree[2*b])return I;if(0!==a.dyn_ltree[18]||0!==a.dyn_ltree[20]||0!==a.dyn_ltree[26])return J;for(b=32;R>b;b++)if(0!==a.dyn_ltree[2*b])return J;return I}function B(a){pa||(o(),pa=!0),a.l_desc=new f(a.dyn_ltree,ma),a.d_desc=new f(a.dyn_dtree,na),a.bl_desc=new f(a.bl_tree,oa),a.bi_buf=0,a.bi_valid=0,p(a)}function C(a,b,c,d){i(a,(L<<1)+(d?1:0),3),r(a,b,c,!0)}function D(a){i(a,M<<1,3),j(a,Z,ga),l(a)}function E(a,b,c,d){var e,f,g=0;a.level>0?(a.strm.data_type===K&&(a.strm.data_type=A(a)),v(a,a.l_desc),v(a,a.d_desc),g=y(a),e=a.opt_len+3+7>>>3,f=a.static_len+3+7>>>3,e>=f&&(e=f)):e=f=c+5,e>=c+4&&-1!==b?C(a,b,c,d):a.strategy===H||f===e?(i(a,(M<<1)+(d?1:0),3),u(a,ga,ha)):(i(a,(N<<1)+(d?1:0),3),z(a,a.l_desc.max_code+1,a.d_desc.max_code+1,g+1),u(a,a.dyn_ltree,a.dyn_dtree)),p(a),d&&q(a)}function F(a,b,c){return a.pending_buf[a.d_buf+2*a.last_lit]=b>>>8&255,a.pending_buf[a.d_buf+2*a.last_lit+1]=255&b,a.pending_buf[a.l_buf+a.last_lit]=255&c,a.last_lit++,0===b?a.dyn_ltree[2*c]++:(a.matches++,b--,a.dyn_ltree[2*(ja[c]+R+1)]++,a.dyn_dtree[2*g(b)]++),a.last_lit===a.lit_bufsize-1}var G=a("../utils/common"),H=4,I=0,J=1,K=2,L=0,M=1,N=2,O=3,P=258,Q=29,R=256,S=R+1+Q,T=30,U=19,V=2*S+1,W=15,X=16,Y=7,Z=256,$=16,_=17,aa=18,ba=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],ca=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],da=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],ea=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],fa=512,ga=new Array(2*(S+2));d(ga);var ha=new Array(2*T);d(ha);var ia=new Array(fa);d(ia);var ja=new Array(P-O+1);d(ja);var ka=new Array(Q);d(ka);var la=new Array(T);d(la);var ma,na,oa,pa=!1;c._tr_init=B,c._tr_stored_block=C,c._tr_flush_block=E,c._tr_tally=F,c._tr_align=D},{"../utils/common":3}],15:[function(a,b,c){"use strict";function d(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}b.exports=d},{}],"/":[function(a,b,c){"use strict";var d=a("./lib/utils/common").assign,e=a("./lib/deflate"),f=a("./lib/inflate"),g=a("./lib/zlib/constants"),h={};d(h,e,f,g),b.exports=h},{"./lib/deflate":1,"./lib/inflate":2,"./lib/utils/common":3,"./lib/zlib/constants":6}]},{},[])("/")}),function(){"use strict";BrainBrowser.utils={webglExtensionAvailable:function(a){if(!BrainBrowser.WEBGL_ENABLED)return!1;var b=document.createElement("canvas"),c=b.getContext("webgl")||b.getContext("experimental-webgl");return!!c.getExtension(a)},webGLErrorMessage:function(){var a,b='BrainBrowser requires WebGL.
';return b+=window.WebGLRenderingContext?"Your browser seems to support it, but it is
disabled or unavailable.
":"Your browser does not seem to support it.
",b+='Test your browser\'s WebGL support here.',a=document.createElement("div"),a.id="webgl-error",a.innerHTML=b,a},isFunction:function(a){return a instanceof Function||"function"==typeof a},isNumeric:function(a){return!isNaN(parseFloat(a))},createDataURL:function(a,b){if(!window.URL||!window.URL.createObjectURL)throw new Error("createDataURL requires URL.createObjectURL which does not seem to be available is this browser.");return window.URL.createObjectURL(new Blob([a],{type:b||"text/plain"}))},min:function(){var a=Array.prototype.slice.call(arguments);a=1===a.length&&BrainBrowser.utils.isNumeric(a[0].length)?a[0]:a;var b,c,d=a[0];for(b=1,c=a.length;c>b;b++)a[b]b;b++)a[b]>d&&(d=a[b]);return d},getOffset:function(a){for(var b=0,c=0;a.offsetParent;)b+=a.offsetTop,c+=a.offsetLeft,a=a.offsetParent;return{top:b,left:c}},captureMouse:function(a){var b={x:0,y:0,left:!1,middle:!1,right:!1};return document.addEventListener("mousemove",function(c){var d,e,f=BrainBrowser.utils.getOffset(a);void 0!==c.pageX?(d=c.pageX,e=c.pageY):(d=c.clientX+window.pageXOffset,e=c.clientY+window.pageYOffset),b.x=d-f.left,b.y=e-f.top},!1),a.addEventListener("mousedown",function(a){a.preventDefault(),0===a.button&&(b.left=!0),1===a.button&&(b.middle=!0),2===a.button&&(b.right=!0)},!1),a.addEventListener("mouseup",function(a){a.preventDefault(),0===a.button&&(b.left=!1),1===a.button&&(b.middle=!1),2===a.button&&(b.right=!1)},!1),a.addEventListener("mouseleave",function(a){a.preventDefault(),b.left=b.middle=b.right=!1},!1),a.addEventListener("contextmenu",function(a){a.preventDefault()},!1),b},captureTouch:function(a){function b(b){var d,e,f,g,h,i=BrainBrowser.utils.getOffset(a);for(c.length=g=b.touches.length,f=0;g>f;f++)h=b.touches[f],void 0!==h.pageX?(d=h.pageX,e=h.pageY):(d=h.clientX+window.pageXOffset,e=h.clientY+window.pageYOffset),c[f]=c[f]||{},c[f].x=d-i.left,c[f].y=e-i.top}var c=[];return a.addEventListener("touchstart",b,!1),a.addEventListener("touchmove",b,!1),a.addEventListener("touchend",b,!1),c}}}(),function(){"use strict";var a=BrainBrowser.VolumeViewer={};a.modules={},a.volume_loaders={},a.start=function(b,c){function d(){document.addEventListener("keydown",function(a){if(f.active_panel){var b,c,d=f.active_panel,e=d.volume,g=d.axis,h=a.which,i={17:function(){d.anchor||(d.mouse.left||d.mouse.middle||d.mouse.right)&&(d.anchor={x:d.mouse.x,y:d.mouse.y})},37:function(){b=d.slice.width_space.name,e.position[b]>0&&e.position[b]--},38:function(){b=d.slice.height_space.name,e.position[b]0&&e.position[b]--}};return"function"==typeof i[h]?(a.preventDefault(),i[h](),d.updated=!0,e.display.forEach(function(a){d!==a&&a.updateSlice()}),f.synced&&f.syncPosition(d,e,g),!1):32===h&&(a.preventDefault(),e.header.time)?(c=a.shiftKey?Math.max(0,e.current_time-1):Math.min(e.current_time+1,e.header.time.space_length-1),e.current_time=c,f.synced&&f.volumes.forEach(function(a){a!==e&&(a.current_time=Math.max(0,Math.min(c,a.header.time.space_length-1)))}),f.redrawVolumes(),!1):void 0}},!1),document.addEventListener("keyup",function(a){var b=a.which,c={17:function(){f.volumes.forEach(function(a){a.display.forEach(function(a){a.anchor=null})})}};return"function"==typeof c[b]?(a.preventDefault(),c[b](),!1):void 0},!1)}var e;e="string"==typeof b?document.getElementById(b):b;var f={dom_element:e,volumes:[],containers:[],synced:!1};return Object.keys(a.modules).forEach(function(b){a.modules[b](f)}),BrainBrowser.events.addEventModel(f),console.log("BrainBrowser Volume Viewer v"+BrainBrowser.version),d(),c(f),f}}(),function(){"use strict";BrainBrowser.VolumeViewer.createDisplay=function(){var a={},b={setPanel:function(c,d){a[c]&&a[c].triggerEvent("eventmodelcleanup"),d.propagateEventTo("*",b),a[c]=d},getPanel:function(b){return a[b]},refreshPanels:function(){b.forEach(function(a){a.updateSlice()})},setContrast:function(a){b.forEach(function(b){b.contrast=a})},setBrightness:function(a){b.forEach(function(b){b.brightness=a})},forEach:function(b){Object.keys(a).forEach(function(c,d){b(a[c],c,d)})}};return BrainBrowser.events.addEventModel(b),b.addEventListener("eventmodelcleanup",function(){b.forEach(function(a){a.triggerEvent("eventmodelcleanup")})}),b}}(),function(){"use strict";function a(a,b){a.slice=b,a.slice_image=a.volume.getSliceImage(a.slice,a.zoom,a.contrast,a.brightness)}function b(a,b){var c,d,e,f,g,h,i=a.context,j=a.getCursorPosition(),k=a.zoom,l=8*(k/a.default_zoom);b=b||"#FF0000",i.save(),i.strokeStyle=b,i.fillStyle=b,e=1,c=j.x,d=j.y,i.lineWidth=2*e,i.beginPath(),i.moveTo(c,d-l),i.lineTo(c,d-e),i.moveTo(c,d+e),i.lineTo(c,d+l),i.moveTo(c-l,d),i.lineTo(c-e,d),i.moveTo(c+e,d),i.lineTo(c+l,d),i.stroke(),a.anchor&&(g=(a.anchor.x-j.x)/a.zoom,h=(a.anchor.y-j.y)/a.zoom,f=Math.sqrt(g*g+h*h),i.font="bold 12px arial",a.canvas.width-j.x<50?(i.textAlign="right",c=j.x-l):(i.textAlign="left",c=j.x+l),j.y<30?(i.textBaseline="top",d=j.y+l):(i.textBaseline="bottom",d=j.y-l),i.fillText(f.toFixed(2),c,d),i.lineWidth=1,i.beginPath(),i.arc(a.anchor.x,a.anchor.y,2*e,0,2*Math.PI),i.fill(),i.moveTo(a.anchor.x,a.anchor.y),i.lineTo(j.x,j.y),i.stroke()),i.restore()}function c(a){var b,c=a.slice_image;c&&(b={x:a.image_center.x-a.slice_image.width/2,y:a.image_center.y-a.slice_image.height/2},a.context.putImageData(c,b.x,b.y))}function d(a){var b=a.slice;return{x:a.image_center.x-Math.abs(b.width_space.step*b.width_space.space_length*a.zoom)/2,y:a.image_center.y-Math.abs(b.height_space.step*b.height_space.space_length*a.zoom)/2}}BrainBrowser.VolumeViewer.createPanel=function(e){e=e||{};var f=0,g={x:0,y:0},h={x:0,y:0},i=null,j=[],k={image_center:{x:0,y:0},zoom:1,contrast:1,brightness:0,updated:!0,setSize:function(a,b,c){c=c||{},a=a>0?a:0,b=b>0?b:0;var d,e,f,g=c.scale_image;g&&(d=k.canvas.width,e=k.canvas.width,f=Math.min(a/d,b/e)),k.canvas.width=a,k.canvas.height=b,g&&(k.zoom=k.zoom*f,k.default_zoom=k.default_zoom*f,k.image_center.x=a/2,k.image_center.y=b/2,k.updateVolumePosition(),k.updateSlice()),k.updated=!0},followPointer:function(a){var b=a.x-h.x,c=a.y-h.y;return k.translateImage(b,c),h.x=a.x,h.y=a.y,{dx:b,dy:c}},translateImage:function(a,b){k.image_center.x+=a,k.image_center.y+=b,k.updated=!0},reset:function(){k.zoom=k.default_zoom,k.image_center.x=k.canvas.width/2,k.image_center.y=k.canvas.height/2,k.updated=!0},getCursorPosition:function(){var a=k.volume,b=k.slice,c=d(k);return{x:a.position[b.width_space.name]*Math.abs(b.width_space.step)*k.zoom+c.x,y:(b.height_space.space_length-a.position[b.height_space.name]-1)*Math.abs(b.height_space.step)*k.zoom+c.y}},updateVolumePosition:function(a,b){var c,e,f,g=d(k),h=k.zoom,i=k.volume,j=k.slice;(void 0===a||void 0===b)&&(c=k.getCursorPosition(),a=c.x,b=c.y),e=Math.round((a-g.x)/h/Math.abs(j.width_space.step)),f=Math.round(j.height_space.space_length-(b-g.y)/h/Math.abs(j.height_space.step)-1),i.position[k.slice.width_space.name]=e,i.position[k.slice.height_space.name]=f,k.updated=!0},updateSlice:function(b){clearTimeout(i),BrainBrowser.utils.isFunction(b)&&j.push(b),i=setTimeout(function(){var b,c=k.volume;b=c.slice(k.axis),a(k,b),k.triggerEvent("sliceupdate",{volume:c,slice:b}),k.updated=!0,j.forEach(function(a){a(b)}),j.length=0},0)},draw:function(a,d){var e=k.getCursorPosition();if((g.x!==e.x||g.y!==e.y)&&(g.x=e.x,g.y=e.y,k.updated=!0,k.triggerEvent("cursorupdate",{volume:k.volume,cursor:e})),f!==k.zoom&&(f=k.zoom,k.updated=!0,k.triggerEvent("zoom",{volume:k.volume,zoom:k.zoom})),k.touches[0]?(h.x=k.touches[0].x,h.y=k.touches[0].y):(h.x=k.mouse.x,h.y=k.mouse.y),k.updated){var i=k.canvas,j=k.context,l=4,m=l/2;j.globalAlpha=255,j.clearRect(0,0,i.width,i.height),c(k),k.triggerEvent("draw",{volume:k.volume,cursor:e,canvas:i,context:j}),b(k,a),d&&(j.save(),j.strokeStyle="#EC2121",j.lineWidth=l,j.strokeRect(m,m,i.width-l,i.height-l),j.restore()),k.updated=!1}}};if(Object.keys(e).forEach(function(a){ +BrainBrowser.utils.isFunction(k[a])||(k[a]=e[a])}),BrainBrowser.events.addEventModel(k),k.canvas&&BrainBrowser.utils.isFunction(k.canvas.getContext)&&(k.context=k.canvas.getContext("2d"),k.mouse=BrainBrowser.utils.captureMouse(k.canvas),k.touches=BrainBrowser.utils.captureTouch(k.canvas)),k.volume){var l=k.volume;a(k,l.slice(k.axis)),k.default_zoom=l.getPreferredZoom(k.canvas.width,k.canvas.height),k.zoom=k.default_zoom}return k}}(),function(){"use strict";BrainBrowser.VolumeViewer.utils={nearestNeighbor:function(a,b,c,d,e,f){f=f||{};var g,h,i,j,k,l,m,n,o,p,q=f.block_size||1,r=f.array_type||Uint8ClampedArray;if(b===d&&c===e)return a;for(k=new r(d*e*q),g=b/d,h=c/e,m=0;e>m;m++)for(i=Math.floor(m*h)*b,n=m*d,l=0;d>l;l++)for(j=(i+Math.floor(l*g))*q,o=(n+l)*q,p=0;q>p;p++)k[o+p]=a[j+p];return k},flipArray:function(a,b,c,d){d=d||{};var e,f,g,h,i,j,k,l,m,n=d.flipx||!1,o=d.flipy||!1,p=d.block_size||1,q=new a.constructor(a.length);if(!n&&!o){for(e=0,f=a.length;f>e;e++)q[e]=a[e];return q}for(f=0;c>f;f++)for(j=f*b,i=o?c-f-1:f,l=i*b,e=0;b>e;e++)for(k=(j+e)*p,h=n?b-e-1:e,m=(l+h)*p,g=0;p>g;g++)q[k+g]=a[m+g];return q}}}(),BrainBrowser.VolumeViewer.modules.loading=function(a){"use strict";function b(a,b){var c,d=h.volume_loaders[a.type];if(!d)throw c="Unsuported Volume Type",BrainBrowser.events.triggerEvent("error",{message:c}),new Error(c);d(a,b)}function c(c,d,e){b(d,function(b){var f=0,h=d.views||["xspace","yspace","zspace"];BrainBrowser.events.addEventModel(b),b.addEventListener("eventmodelcleanup",function(){b.display.triggerEvent("eventmodelcleanup")}),a.volumes[c]=b,b.color_map=i,b.display=g(a.dom_element,c,d),b.propagateEventTo("*",a),["xspace","yspace","zspace"].forEach(function(a){b.position[a]=Math.floor(b.header[a].space_length/2)}),b.display.forEach(function(c){c.updateSlice(function(){++f===h.length&&(a.triggerEvent("volumeloaded",{volume:b}),BrainBrowser.utils.isFunction(e)&&e(b))})})})}function d(b,c,d){b.cursor_color=c,i=b,a.volumes.forEach(function(a){a.color_map=a.color_map||i}),BrainBrowser.utils.isFunction(d)&&d(b)}function e(b,c,d,e){c.cursor_color=d,a.setVolumeColorMap(b,c),BrainBrowser.utils.isFunction(e)&&e(a.volumes[b],c)}function f(a,b,c,d){var e=document.getElementById(c).innerHTML.replace(/\{\{VOLID\}\}/gm,b),f=document.createElement("div");f.innerHTML=e;var g,h,i,j=f.childNodes,k=f.getElementsByClassName(d)[0];for(g=0,h=a.childNodes.length;h>g;g++)i=a.childNodes[g],1===i.nodeType&&(k.appendChild(i),g--,h--);return j}function g(b,c,d){var e,g=document.createElement("div"),i=a.volumes[c],l=h.createDisplay(),m=d.template||{},n=d.views||["xspace","yspace","zspace"];l.propagateEventTo("*",i),g.classList.add("volume-container"),n.forEach(function(a){var b=document.createElement("canvas");b.width=j,b.height=k,b.classList.add("slice-display"),b.style.backgroundColor="#000000",g.appendChild(b),l.setPanel(a,h.createPanel({volume:i,volume_id:c,axis:a,canvas:b,image_center:{x:b.width/2,y:b.height/2}}))}),m.element_id&&m.viewer_insert_class&&(e=f(g,c,m.element_id,m.viewer_insert_class),"function"==typeof m.complete&&m.complete(i,e),Array.prototype.forEach.call(e,function(a){1===a.nodeType&&g.appendChild(a)})),function(){var b=null;n.forEach(function(d){function e(b,c,e){e&&(a.volumes.forEach(function(a){a.display.forEach(function(a){a.anchor=null})}),r.anchor={x:b.x,y:b.y}),c||(r.updateVolumePosition(b.x,b.y),i.display.forEach(function(a){r!==a&&a.updateSlice()}),a.synced&&a.syncPosition(r,i,d)),r.updated=!0}function f(b,e){var f;e?(f=r.followPointer(b),a.synced&&a.volumes.forEach(function(a,b){var e;b!==c&&(e=a.display.getPanel(d),e.translateImage(f.dx,f.dy))})):(r.updateVolumePosition(b.x,b.y),i.display.forEach(function(a){r!==a&&a.updateSlice()}),a.synced&&a.syncPosition(r,i,d)),r.updated=!0}function g(a){a.target===b&&(a.preventDefault(),f(r.mouse,a.shiftKey))}function h(a){a.target===b&&(a.preventDefault(),f(r.touches[0],r.touches.length===n.length))}function j(){document.removeEventListener("mousemove",g,!1),document.removeEventListener("mouseup",j,!1),a.volumes.forEach(function(a){a.display.forEach(function(a){a.anchor=null})}),b=null}function k(){document.removeEventListener("touchmove",h,!1),document.removeEventListener("touchend",k,!1),a.volumes.forEach(function(a){a.display.forEach(function(a){a.anchor=null})}),b=null}function m(a){var b,c=r.touches[0].x-r.touches[1].x,d=r.touches[0].y-r.touches[1].y,e=Math.sqrt(c*c+d*d);a.preventDefault(),null!==t&&(b=e-t,q(.2*b)),t=e}function o(){document.removeEventListener("touchmove",m,!1),document.removeEventListener("touchend",o,!1),t=null}function p(a){a.preventDefault(),q(Math.max(-1,Math.min(1,a.wheelDelta||-a.detail)))}function q(b){r.zoom*=0>b?1/1.05:1.05,r.zoom=Math.max(r.zoom,.25),r.updateVolumePosition(),r.updateSlice(),a.synced&&a.volumes.forEach(function(a,b){var e=a.display.getPanel(d);b!==c&&(e.zoom=r.zoom,e.updateVolumePosition(),e.updateSlice())})}var r=l.getPanel(d),s=r.canvas,t=null;s.addEventListener("mousedown",function(c){c.preventDefault(),b=c.target,a.active_panel&&(a.active_panel.updated=!0),a.active_panel=r,document.addEventListener("mousemove",g,!1),document.addEventListener("mouseup",j,!1),e(r.mouse,c.shiftKey,c.ctrlKey)},!1),s.addEventListener("touchstart",function(c){c.preventDefault(),b=c.target,a.active_panel&&(a.active_panel.updated=!0),a.active_panel=r,2===r.touches.length?(document.removeEventListener("touchmove",h,!1),document.removeEventListener("touchend",k,!1),document.addEventListener("touchmove",m,!1),document.addEventListener("touchend",o,!1)):(document.removeEventListener("touchmove",m,!1),document.removeEventListener("touchend",o,!1),document.addEventListener("touchmove",h,!1),document.addEventListener("touchend",k,!1),e(r.touches[0],3===r.touches.length,!0))},!1),s.addEventListener("mousewheel",p,!1),s.addEventListener("DOMMouseScroll",p,!1)})}(),a.containers[c]=g;var o,p=a.containers;for(o=c+1;o1?a.createOverlay(f,function(){BrainBrowser.utils.isFunction(i)&&i(),a.triggerEvent("volumesloaded")}):(BrainBrowser.utils.isFunction(i)&&i(),a.triggerEvent("volumesloaded")))})}b=b||{};var e,f=b.overlay&&"object"==typeof b.overlay?b.overlay:{},g=b.volumes,h=b.volumes.length,i=b.complete,j=0;for(e=0;h>e;e++)d(e)},a.loadVolumeColorMapFromURL=function(a,b,c,d){BrainBrowser.loader.loadColorMapFromURL(b,function(b){e(a,b,c,d)},{scale:255})},a.loadDefaultColorMapFromURL=function(a,b,c){BrainBrowser.loader.loadColorMapFromURL(a,function(a){d(a,b,c)},{scale:255})},a.loadVolumeColorMapFromFile=function(a,b,c,d){BrainBrowser.loader.loadColorMapFromFile(b,function(b){e(a,b,c,d)},{scale:255})},a.loadDefaultColorMapFromFile=function(a,b,c){BrainBrowser.loader.loadColorMapFromFile(a,function(a){d(a,b,c)},{scale:255})},a.setVolumeColorMap=function(b,c){a.volumes[b].color_map=c},a.loadVolume=function(b,d){c(a.volumes.length,b,d)},a.clearVolumes=function(){a.volumes.forEach(function(a){a.triggerEvent("eventmodelcleanup")}),a.volumes=[],a.containers=[],a.active_panel=null,a.dom_element.innerHTML=""},a.createOverlay=function(b,c){b=b||{},a.loadVolume({volumes:a.volumes,type:"overlay",template:b.template},c)},a.setDefaultPanelSize=function(a,b){j=a,k=b},a.syncPosition=function(b,c,d){var e=c.getWorldCoords();a.volumes.forEach(function(a){if(a!==c){var b=a.display.getPanel(d);b.volume.setWorldCoords(e.x,e.y,e.z),b.updated=!0,a.display.forEach(function(a){a!==b&&a.updateSlice()})}})}},BrainBrowser.VolumeViewer.modules.rendering=function(a){"use strict";a.draw=function(){a.volumes.forEach(function(b){b.display.forEach(function(c){c.draw(b.color_map.cursor_color,a.active_panel===c)})})},a.render=function(){a.triggerEvent("rendering"),function b(){window.requestAnimationFrame(b),a.draw()}()},a.redrawVolume=function(b){var c=a.volumes[b];c.display.forEach(function(a){a.updateSlice()})},a.redrawVolumes=function(){a.volumes.forEach(function(b,c){a.redrawVolume(c)})},a.resetDisplays=function(){a.volumes.forEach(function(a){a.display.forEach(function(a){a.reset()})})},a.setPanelSize=function(b,c,d){a.volumes.forEach(function(a){a.display.forEach(function(a){a.setSize(b,c,d)})})}},function(){"use strict";function a(a){return"undefined"!=typeof a}function b(b){return a(b)?b.constructor.name:"undefined"}function c(a){if(a>=m.INT8&&a=m.FLT&&a<=m.DBL}function e(a,b){function d(){var a={};return a.hdr_offset=0,a.data_offset=0,a.data_length=0,a.n_filled=0,a.chunk_size=0,a.sym_btree=0,a.sym_lheap=0,a.name="",a.attributes={},a.children=[],a.array=void 0,a.type=-1,a.inflate=!1,a.dims=[],a}function e(){ca=Y}function f(){var a=Y-ca;if(a%Z!==0){var c=Z-a%Z;Y+=c,b&&console.log("skipping "+c+" bytes at "+a+" for alignmnent")}}function g(a){Y+=a}function h(a){Y=a}function i(){return Y}function j(){var a=aa.getUint8(Y);return Y+=1,a}function k(){var a=aa.getUint16(Y,$);return Y+=2,a}function l(){var a=aa.getUint32(Y,$);return Y+=4,a}function n(){var a=aa.getUint64(Y,$);return Y+=8,a}function o(){var a=aa.getFloat32(Y,$);return Y+=4,a}function p(){var a=aa.getFloat64(Y,$);return Y+=8,a}function q(a){var b=0;if(a=a||ba.offsz,4===a)b=aa.getUint32(Y,$);else{if(8!==a)throw new Error("Unsupported value for offset size "+a);b=aa.getUint64(Y,$)}return Y+=a,b}function r(){var a=aa.getUint64(Y,$);return Y+=ba.lensz,a}function s(a){var b,c,d="";for(b=0;a>b;b+=1){if(c=j(),0===c){Y+=a-b-1;break}d+=String.fromCharCode(c)}return d}function t(b,c,d){var e,f,g,h,i=Y;switch(d&&(Y=d),b){case m.INT8:e=new Int8Array(a,Y,c);break;case m.UINT8:e=new Uint8Array(a,Y,c);break;case m.INT16:if(Y%2!==0)for(g=new ArrayBuffer(c),f=c/2,e=new Int16Array(g),h=0;f>h;h+=1)e[h]=k();else e=new Int16Array(a,Y,c/2),Y+=c;break;case m.UINT16:if(Y%2!==0)for(g=new ArrayBuffer(c),f=c/2,e=new Uint16Array(g),h=0;f>h;h+=1)e[h]=k();else e=new Uint16Array(a,Y,c/2),Y+=c;break;case m.INT32:if(Y%4!==0)for(g=new ArrayBuffer(c),f=c/4,e=new Int32Array(g),h=0;f>h;h+=1)e[h]=l();else e=new Int32Array(a,Y,c/4),Y+=c;break;case m.UINT32:if(Y%4!==0)for(g=new ArrayBuffer(c),f=c/4,e=new Uint32Array(g),h=0;f>h;h+=1)e[h]=l();else e=new Uint32Array(a,Y,c/4),Y+=c;break;case m.FLT:if(Y%4!==0)for(g=new ArrayBuffer(c),f=c/4,e=new Float32Array(g),h=0;f>h;h+=1)e[h]=o();else e=new Float32Array(a,Y,c/4),Y+=c;break;case m.DBL:if(Y%8!==0)for(g=new ArrayBuffer(c),f=c/8,e=new Float64Array(g),h=0;f>h;h+=1)e[h]=p();else e=new Float64Array(a,Y,c/8),Y+=c;break;default:throw new Error("Bad type in getArray "+b)}return d&&(Y=i),e}function u(a){var b,c;switch(a){case 1:b=aa.getUint8(Y);break;case 2:b=aa.getUint16(Y,$);break;case 4:b=aa.getUint32(Y,$);break;case 8:b=aa.getUint64(Y,$);break;default:if(b=0,$)for(c=a-1;c>=0;c--)b=(b<<8)+aa.getUint8(Y+c);else for(c=0;a>c;c++)b=(b<<8)+aa.getUint8(Y+c)}return Y+=a,b}function v(a){var b;for(b=0;b2)throw new Error("Unsupported HDF5 superblock version "+a.sbver);return a.sbver<=1?(a.fsver=j(),a.rgver=j(),g(1),a.shver=j(),a.offsz=j(),a.lensz=j(),g(1),a.gln_k=k(),a.gin_k=k(),a.cflags=l(),1===a.sbver&&(a.isin_k=k(),g(2)),a.base_addr=q(a.offsz),a.gfsi_addr=q(a.offsz),a.eof_addr=q(a.offsz),a.dib_addr=q(a.offsz),a.root_ln_offs=q(a.offsz),a.root_addr=q(a.offsz),a.root_cache_type=l(),g(4),g(16)):(a.offsz=j(),a.lensz=j(),a.cflags=j(),a.base_addr=q(a.offsz),a.ext_addr=q(a.offsz),a.eof_addr=q(a.offsz),a.root_addr=q(a.offsz),a.checksum=l()),b&&console.log("HDF5 SB "+a.sbver+" "+a.offsz+" "+a.lensz+" "+a.cflags),a}function x(){var a={};if(!v("FRHP"))throw new Error("Bad or missing FRHP signature");a.ver=j(),a.idlen=k(),a.iof_el=k(),a.flags=j(),a.objmax=l(),a.objnid=r(),a.objbta=q(),a.nf_blk=r(),a.af_blk=q(),a.heap_total=r(),a.heap_alloc=r(),a.bai_offset=r(),a.heap_nobj=r(),a.heap_chuge=r(),a.heap_nhuge=r(),a.heap_ctiny=r(),a.heap_ntiny=r(),a.table_width=k(),a.start_blksz=r(),a.max_blksz=r(),a.max_heapsz=k(),a.rib_srows=k(),a.root_addr=q(),a.rib_crows=k();var c=Math.log2(a.max_blksz)-Math.log2(a.start_blksz)+2;if(a.K=Math.min(a.rib_crows,c)*a.table_width,a.N=a.rib_crows0)throw new Error("Filters present in fractal heap.");return a}function y(){var a={};if(!v("BTHD"))throw new Error("Bad or missing BTHD signature");return a.ver=j(),a.type=j(),a.nodesz=l(),a.recsz=k(),a.depth=k(),a.splitp=j(),a.mergep=j(),a.root_addr=q(),a.root_nrec=k(),a.total_nrec=r(),a.checksum=l(),b&&console.log("BTHD V"+a.ver+" T"+a.type+" "+a.nodesz+" "+a.recsz+" "+a.depth+" "+a.root_addr+" "+a.root_nrec+" "+a.total_nrec),a}function z(a,c,d,e){var f,g,k,m;if(1===c)for(f=0;d>f;f++){k=q(),m=r();var n=r();b&&console.log(" -> "+k+" "+m+" "+n+" "+da),g=i(),n===da&&(h(k),M(m,e)),h(g)}else{if(8!==c)throw new Error("Unhandled V2 btree type.");var o,p;o=a.max_heapsz/8;var s=Math.min(a.objmax,a.max_blksz);for(p=256>=s?1:65536>=s?2:4,f=0;d>f;f++){var t=j();if(0!==(192&t))throw new Error("Bad Fractal Heap ID version "+t);var v,w=48&t;if(16===w)da=u(7);else{if(0!==w)throw new Error("Can't handle this Heap ID: "+t);k=u(o),m=u(p)}if(v=j(),l(),l(),b&&console.log(" -> "+t+" "+k+" "+m+" "+v),g=i(),16===w){h(a.objbta);var x=y();if(1!==x.type)throw new Error("Can only handle type-1 btrees");h(x.root_addr),A(a,x.root_nrec,e)}else{var z=S(a,k);h(z),M(m,e)}h(g)}}}function A(a,c,d){if(!v("BTLF"))throw new Error("Bad or missing BTLF signature");var e=j(),f=j();b&&console.log("BTLF V"+e+" T"+f+" "+i()),z(a,f,c,d)}function B(a,c,d,e){if(!v("BTIN"))throw new Error("Bad or missing BTIN signature");var f,g=j(),h=j();for(b&&console.log("BTIN V"+g+" T"+h),z(a,h,c,e),f=0;c>=f;f++){var i,k=q(),l=u(1);d>1&&(i=u(1)),b&&console.log(" child->"+k+" "+l+" "+i)}}function C(a){if(am&&(r=d(),r.hdr_offset=o,a&&(t=i(),h(a.lh_dseg_off+n),r.name=s(a.lh_dseg_len),h(t)),b&&console.log(" "+m+" O "+n+" A "+o+" T "+p+" '"+r.name+"'"),c.children.push(r))}function F(){var a={};if(!v("HEAP"))throw new Error("Bad or missing HEAP signature");return a.lh_ver=j(),g(3),a.lh_dseg_len=r(),a.lh_flst_len=r(),a.lh_dseg_off=q(),b&&console.log("LHEAP V"+a.lh_ver+" "+a.lh_dseg_len+" "+a.lh_flst_len+" "+a.lh_dseg_off),a}function G(a,c){var d,e=j(),f=j(),h=j();g(1>=e?5:1);var i,k=1,l=[];for(i=0;f>i;i+=1)l[i]=r(),k*=l[i];d=f*ba.lensz+(1>=e?8:4);var m=[];if(0!==(1&h))for(d+=f*ba.lensz,i=0;f>i;i+=1)m[i]=r();var n=[];if(0!==(2&h))for(d+=f*ba.lensz,i=0;f>i;i+=1)n[i]=r();var o="hdf5MsgDataspace V"+e+" N"+f+" F"+h;return b&&(0!==f&&(o+="["+l.join(", ")+"]"),console.log(o)),a>d&&g(a-d),c&&(c.dims=l),k}function H(a){var c=j(),d=j();0!==(1&d)&&n();var e=q(),f=q();0!==(2&d)&&q(),b&&console.log("hdf5MsgLinkInfo V"+c+" F"+d+" FH "+e+" BT "+f);var g=i();if(e>4,u=15&s,v=[];for(o=0;3>o;o+=1)v[o]=j();var w=l();switch(b&&console.log("hdf5MsgDatatype V"+t+" C"+u+" "+I(u)+" "+v[0]+"."+v[1]+"."+v[2]+" "+w),u){case 0:switch(c=k(),d=k(),w){case 4:p.typ_type=8&v[0]?m.INT32:m.UINT32;break;case 2:p.typ_type=8&v[0]?m.INT16:m.UINT16;break;case 1:p.typ_type=8&v[0]?m.INT8:m.UINT8;break;default:throw new Error("Unknown type size "+w)}p.typ_length=w,q+=4,b&&console.log(" ("+c+" "+d+")");break;case 1:if(r="",b)switch(65&v[0]){case 0:r+="LE ";break;case 1:r+="BE ";break;case 65:r+="VX ";break;default:throw new Error("Reserved fp byte order: "+v[0])}if(c=k(),d=k(),e=j(),f=j(),h=j(),i=j(),n=l(),b&&(r+=c+" "+d+" "+e+" "+f+" "+h+" "+i+" "+n),64===d&&0===c&&52===e&&11===f&&0===h&&52===i&&1023===n&&8===w)p.typ_type=m.DBL;else{if(32!==d||0!==c||23!==e||8!==f||0!==h||23!==i||127!==n||4!==w)throw new Error("Unsupported floating-point type");p.typ_type=m.FLT}b&&console.log(r),p.typ_length=w,q+=12;break;case 3:p.typ_type=m.STR,p.typ_length=w;break;default:throw new Error("Unimplemented HDF5 data class "+u)}return a>q&&g(a-q),p}function K(a){var c,d,e,f,h,m,n,o="",p=j(),s=[],t=1;if(1===p||2===p){if(d=j(),c=j(),g(5),b&&(o+="hdf5MsgLayout V"+p+" N"+d+" C"+c),1===c||2===c){var u=q();b&&(o+=" A"+u),a.data_offset=u}for(f=0;d>f;f+=1)s[f]=l(),t*=s[f];b&&(o+="["+s.join(", ")+"]"),2===c&&(n=l(),a.chunk_size=t*n,b&&(o+=" E"+n)),0===c?(e=l(),b&&(o+="("+e+")"),a.data_offset=i(),a.data_length=e):1===c&&(a.data_length=t)}else{if(3!==p)throw new Error("Illegal layout version "+p);if(c=j(),o="hdf5MsgLayout V"+p+" C"+c,0===c)e=k(),b&&(o+="("+e+")"),a.data_offset=i(),a.data_length=e;else if(1===c)h=q(),m=r(),b&&(o+="("+h+", "+m+")"),a.data_offset=h,a.data_length=m;else if(2===c){for(d=j(),h=q(),a.data_offset=h,a.chunk_size=1,f=0;d-1>f;f+=1)s[f]=l(),t*=s[f];b&&(o+="(N"+d+", A"+h+" ["+s.join(",")+"]"),n=l(),a.chunk_size=t*n,b&&(o+=" E"+n)}}b&&console.log(o)}function L(a){var c=j(),d=j(),e="hdf5MsgPipeline V"+c+" N"+d;1===c&&g(6),b&&console.log(e);var f,h,i,l,m;for(f=0;d>f;f+=1){if(h=k(),1!==h)throw new Error("Unimplemented HDF5 filter "+h);if("object"!=typeof pako)throw new Error("Need pako to inflate data.");a.inflate=!0,i=1===c||h>256?k():0,l=k(),m=k(),0!==(1&m)&&(m+=1),0!==i&&g(i),g(4*m),b&&console.log(" "+f+" ID"+h+" F"+l+" "+m)}}function M(a,c){var d=j(),e=j(),f=k(),g=k(),h=k(),l="hdf5MsgAttribute V"+d+" F"+e+" "+a+": ";if(0!==(3&e))throw new Error("Shared dataspaces and datatypes are not supported.");if(3===d){var n=j();b&&(l+=0===n?"ASCII":"UTF-8")}b&&(l+="("+f+" "+g+" "+h+")"),3>d&&(f=8*Math.floor((f+7)/8),g=8*Math.floor((g+7)/8),h=8*Math.floor((h+7)/8),b&&(l+="/("+f+" "+g+" "+h+")"));var o=s(f);b&&(l+=" Name: "+o,console.log(l));var p=J(g),q=G(h),r=0;r=a>0?3>d?a-(8+f+g+h):a-(9+f+g+h):p.typ_length*q,b&&console.log(" attribute data size "+r+" "+i());var u;u=p.typ_type===m.STR?s(r):t(p.typ_type,r),c.attributes[o]=u}function N(){var a=4,c=8,d=j(),e=j();0!==(1&e)&&(k(),k()),0!==(2&e)&&(a=k(),c=k()),b&&console.log("hdf5MsgGroupInfo V"+d+" F"+e+" ENT "+a+" LNL "+c)}function O(a){var c=j(),e=0;if(1!==c)throw new Error("Bad link message version "+c);var f=j();0!==(8&f)&&(e=j()),0!==(4&f)&&n(),0!==(16&f)&&j();var g=1<<(3&f),h=u(g),i=d();i.name=s(h),0===(8&f)&&(i.hdr_offset=q()),b&&console.log("hdf5MsgLink V"+c+" F"+f+" T"+e+" NM "+i.name+" OF "+i.hdr_offset),a.children.push(i)}function P(a,c,d,e){if(!v("FHDB"))throw new Error("Bad or missing FHDB signature");var f=j();if(0!==f)throw new Error("Bad FHDB version: "+f);q();var g=Math.ceil(a.max_heapsz/8),h=u(g);0!==(2&a.flags)&&l(),b&&console.log("FHDB V:"+f+" R:"+c+" O:"+h+" A:"+d);var i=5+ba.offsz+g;0!==(2&a.flags)&&(i+=4);var k;return k=1>=c?a.start_blksz:Math.pow(2,c-1)*a.start_blksz,e?e(c,d,h,k):!0}function Q(a,c){if(!v("FHIB"))throw new Error("Bad or missing FHIB signature");var d=j();if(0!==d)throw new Error("Bad FHIB version: "+d);q();var e=Math.ceil(a.max_heapsz/8),f=u(e);b&&console.log("FHIB V:"+d+" O:"+f);var g,i,k=[];for(g=0;g=e&&e+f>b?(c=d+(b-e),!1):!0}),c}function T(a){var c=j();if(0!==c)throw new Error("Bad attribute information message version: "+c);var d=j();0!==(1&d)&&k();var e=q(),f=q();0!==(2&d)&&q(),b&&console.log("hdf5MsgAttrInfo V"+c+" F"+d+" HP "+e+" AN "+f);var g,l=i();if(e0?B(g,m.root_nrec,m.depth,a):A(g,m.root_nrec,a)}h(l)}function U(a,c){var d,e={};switch(a.hm_type){case 1:G(a.hm_size,c);break;case 2:H(c);break;case 3:d=J(a.hm_size),c&&(c.type=d.typ_type);break;case 6:O(c);break;case 8:K(c);break;case 10:N();break;case 11:L(c);break;case 12:M(a.hm_size,c);break;case 16:e.cq_off=q(),e.cq_len=r(),_.push(e),b&&console.log("hdf5MsgObjHdrContinue "+e.cq_off+" "+e.cq_len);break;case 17:c.sym_btree=q(),c.sym_lheap=q(),b&&console.log("hdf5MsgSymbolTable "+c.sym_btree+" "+c.sym_lheap);break;case 21:T(c);break;case 0:case 4:case 5:case 7:case 18:case 19:case 20:case 22:case 24:g(a.hm_size);break;default:throw new Error("Unknown message type: "+a.hm_type)}}function V(a){if(!v("OHDR"))throw new Error("Bad or missing OHDR signature");var c=j(),d=j();0!==(32&d)&&(l(),l(),l(),l()),0!==(16&d)&&(k(),k());var e=1<<(3&d),f=u(e),m=0,n=0,o=f;b&&console.log("hdf5V2ObjectHeader V"+c+" F"+d+" HS"+f);for(var p,q,r;;){for(;o-n>=8;)p={},p.hm_type=j(),p.hm_size=k(),p.hm_flags=j(),b&&console.log(" msg"+m+" F"+p.hm_flags+" T "+p.hm_type+" S "+p.hm_size+" ("+n+"/"+o+") "+C(p.hm_type)),0!==(4&d)&&(p.hm_corder=k()),r=i(),U(p,a),h(r+p.hm_size),n+=p.hm_size+4,m+=1;if(o-n>4&&g(o-(n+4)),l(),0===_.length)break;if(q=_.shift(),h(q.cq_off),o=q.cq_len-4,n=0,b&&console.log("continuing with "+q.cq_len+" bytes at "+i()),!v("OCHK"))throw new Error("Bad v2 object continuation")}a.children.forEach(function(a,c){h(a.hdr_offset),b&&console.log(c+" "+a.hdr_offset+" "+a.name),v("OHDR")?(h(a.hdr_offset),V(a)):(h(a.hdr_offset),X(a))})}function W(a){if(0!==a.chunk_size){h(a.data_offset);var d,e=1;for(d=0;d0&&a.data_offset=p){if(0===_.length)break;d=_.shift(),h(d.cq_off),p=d.cq_len,b&&console.log("continuing with "+p+" bytes at "+i()),e()}if(f(),n={},n.hm_type=k(),n.hm_size=k(),n.hm_flags=j(),n.hm_size%8!==0)throw new Error("Size is not 8-byte aligned: "+n.hm_size);g(3),p-=8+n.hm_size,b&&console.log(" msg"+m+" F "+n.hm_flags+" T "+n.hm_type+" S "+n.hm_size+"("+p+") "+C(n.hm_type)),o=i(),U(n,a),h(o+n.hm_size)}if(0!==a.sym_btree&&0!==a.sym_lheap){h(a.sym_btree);var q=D();h(a.sym_lheap);var r,s=F();for(r=0;rd;d+=1)e+=" ";e+=a.name+(a.children.length?"/":""),a.type>0&&(e+=" "+b(a.array),a.dims.length&&(e+="["+a.dims.join(", ")+"]"),e+=a.array?":"+a.array.length:" NULL"),console.log(e),Object.keys(a.attributes).forEach(function(g){var h=a.attributes[g];for(e="",d=0;2*c+1>d;d+=1)e+=" ";e+=a.name+":"+g+" "+b(h)+"["+h.length+"] ","string"==typeof h?e+=JSON.stringify(h):(e+="{"+f(h.slice(0,16),", "),h.length>16&&(e+=", ..."),e+="}"),console.log(e)}),a.children.forEach(function(a){g(a,c+1)})}function h(b,c,d){var e;return b.name===c&&b.type>0?e=b:b.children.find(function(b){return e=h(b,c,d+1),a(e)}),e}function i(b,c,d){var e=b.attributes[c];return e?e:(b.children.find(function(b){return e=i(b,c,d+1),a(e)}),e)}function j(a,b,c,e,f){var g=new ArrayBuffer(a.array.length*Float32Array.BYTES_PER_ELEMENT),h=new Float32Array(g),i=a.dims.length-b.dims.length;if(1>i)throw new Error("Too few slice dimensions: "+a.dims.length+" "+b.dims.length);var j,k=1;for(j=b.dims.length;jv;v+=1)w=p[m],we[1]?h[m]=0:(h[m]=w,l+=w,w>n&&(n=w),o>w&&(o=w)),m+=1;else for(s=e[1]-e[0],t=q[j]-r[j],u=r[j],v=0;k>v;v+=1)w=(p[m]-x)/s*t+u,h[m]=w,l+=w,m+=1,w>n&&(n=w),o>w&&(o=w);return f&&(console.log("Min: "+o),console.log("Max: "+n),console.log("Sum: "+l),console.log("Mean: "+l/m)),g}function k(a,b){var c=a.order;return"Uint8Array"===b.array.constructor.name&&c.length>0&&"vector_dimension"===c[c.length-1]&&3===a.vector_dimension.space_length}function l(a){var b,c=a.array,d=c.length,e=new ArrayBuffer(d/3*4),f=new Uint8Array(e),g=0;for(b=0;d>b;b+=3)f[g+0]=c[b+0],f[g+1]=c[b+1],f[g+2]=c[b+2],f[g+3]=255,g+=4;return e}var m={INT8:1,UINT8:2,INT16:3,UINT16:4,INT32:5,UINT32:6,FLT:7,DBL:8,STR:9};Array.prototype.find||(Array.prototype.find=function(a){if(null===this)throw new TypeError("Array.prototype.find called on null or undefined");if("function"!=typeof a)throw new TypeError("predicate must be a function");for(var b,c=Object(this),d=c.length>>>0,e=arguments[1],f=0;d>f;f++)if(b=c[f],a.call(e,b,f,c))return b;return void 0});var n=[0,1,1,2,2,4,4,4,8,0],o=BrainBrowser.VolumeViewer;o.utils.hdf5Loader=function(b){var c,d=!1;try{c=e(b,d)}catch(f){d&&(console.log(f),console.log("Trying as NetCDF...")),c=o.utils.netcdfReader(b,d)}d&&g(c,0);var n=h(c,"image");if(!a(n))throw new Error("Can't find image dataset.");var p=i(n,"valid_range",0);if(!a(p)){var q,r;switch(n.type){case m.INT8:q=-128,r=127;break;case m.UINT8:q=0,r=255;break;case m.INT16:q=-32768,r=32767;break;case m.UINT16:q=0,r=65535;break;case m.INT32:q=-(1<<31),r=(1<<31)-1;break;case m.UINT32:q=0,r=0}p=Float32Array.of(q,r)}var s=h(c,"image-min");a(s)||(s={array:Float32Array.of(0),dims:[]});var t=h(c,"image-max");a(t)||(t={array:Float32Array.of(1),dims:[]});var u={},v=i(n,"dimorder",0);if("string"!=typeof v)throw new Error("Can't find dimension order.");u.order=v.split(","),u.order.forEach(function(b){var d=h(c,b);if(!a(d))throw new Error("Can't find dimension variable "+b);if(u[b]={},v=i(d,"step",0),a(v)||(v=Float32Array.of(1)),u[b].step=v[0],v=i(d,"start",0),a(v)||(v=Float32Array.of(0)),u[b].start=v[0],v=i(d,"length",0),!a(v))throw new Error("Can't find length for "+b);u[b].space_length=v[0],v=i(d,"direction_cosines",0),a(v)?u[b].direction_cosines=Array.prototype.slice.call(v):"xspace"===b?u[b].direction_cosines=[1,0,0]:"yspace"===b?u[b].direction_cosines=[0,1,0]:"zspace"===b&&(u[b].direction_cosines=[0,0,1])});var w;return k(u,n)?(u.order.pop(),u.datatype="rgb8",w=l(n)):(u.datatype="float32",w=j(n,s,t,p,d)),{header_text:JSON.stringify(u),raw_data:w}}}(),function(){"use strict";function a(a,b){var c,f={order:["xspace","yspace","zspace"],xspace:{},yspace:{},zspace:{}},g=new DataView(a,0,284),h=!0,i=g.getUint32(0,!0);1===i?h=!0:16777216===i?h=!1:c="This does not look like an MGH file.";var j=0,k=[0,0,0,0],l=4,m=1;for(j=0;4>j&&(k[j]=g.getUint32(l,h),!(k[j]<=1));j++)m*=k[j],l+=4;(3>j||j>4)&&(c="Cannot handle "+j+"-dimensional images yet.");var n,o,p=g.getUint32(20,h),q=g.getUint16(28,h),r=[1,1,1],s=[[-1,0,0],[0,0,-1],[0,1,0],[0,0,0]];if(q){for(l=30,n=0;3>n;n++)r[n]=g.getFloat32(l,h),l+=4;for(n=0;4>n;n++)for(o=0;3>o;o++)s[n][o]=g.getFloat32(l,h),l+=4}if(e)for(n=0;3>n;n++){var t="";for(o=0;4>o;o++)t+="xyzc"[o]+"_"+"ras"[n]+" "+s[o][n]+" ";console.log(t)}for(var u=[0,1,2],v=0;3>v;v++){var w=0,x=Math.abs(s[v][0]),y=Math.abs(s[v][1]),z=Math.abs(s[v][2]);f.order[v]="xspace",y>x&&y>z&&(w=1,f.order[v]="yspace"),z>x&&z>y&&(w=2,f.order[v]="zspace"),u[v]=w}4===j&&(e&&console.log("Creating time dimension: "+k[3]),f.time={space_length:k[3],step:1,start:0,name:"time"},f.order.push("time"));var A=!1,B=[[0,0,0,0],[0,0,0,0],[0,0,0,0]];for(n=0;3>n;n++)for(o=0;3>o;o++)B[n][o]=s[o][n]*r[n];for(n=0;3>n;n++){var C=0;for(o=0;3>o;o++)C+=B[n][o]*(k[o]/2); +A?B[n][3]=-C:B[n][3]=s[3][n]-C}var D=[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]];for(n=0;3>n;n++)for(o=0;4>o;o++){var E=o;3>o&&(E=u[o]),D[n][E]=B[n][o]}if(d.utils.transformToMinc(D,f),void 0!==c)throw BrainBrowser.events.triggerEvent("error",{message:c}),new Error(c);for(f.datatype=p,f.little_endian=h,f.nvoxels=m,n=0;3>n;n++)f[f.order[n]].space_length=k[n];BrainBrowser.utils.isFunction(b)&&b(f)}function b(a,b,e){var f=d.createVolume(a,c(a,b));f.type="mgh",f.intensity_min=a.voxel_min,f.intensity_max=a.voxel_max,f.saveOriginAndTransform(a),BrainBrowser.utils.isFunction(e)&&e(f)}function c(a,b){var c=null,e=1;switch(a.datatype){case 0:e=1;break;case 1:case 3:e=4;break;case 4:e=2;break;default:var f="Unsupported data type: "+a.datatype;throw BrainBrowser.events.triggerEvent("error",{message:f}),new Error(f)}var g=a.nvoxels*e;switch(e>1&&!a.little_endian&&d.utils.swapn(new Uint8Array(b,284,g),e),a.datatype){case 0:c=new Uint8Array(b,284,a.nvoxels);break;case 1:c=new Int32Array(b,284,a.nvoxels);break;case 3:c=new Float32Array(b,284,a.nvoxels);break;case 4:c=new Int16Array(b,284,a.nvoxels)}d.utils.scanDataRange(c,a);var h,i=1;for(h=0;h0,A=s.step>0,B=q.step>0,C=0;if(l=B?b:q.space_length-b-1,l>=0&&l=0;h--)for(k=A?h:u-h-1,n=m+k*x,i=0;t>i;i++)j=z?i:t-i-1,o=n+j*w,y[C++]=g.data[o];return e={axis:a,data:y,width_space:r,height_space:s,width:t,height:u},f[a][c][b]=e,e},saveOriginAndTransform:function(a){var b=a.xspace.start,c=a.yspace.start,d=a.zspace.start,e=a.xspace.direction_cosines,f=a.yspace.direction_cosines,g=a.zspace.direction_cosines,h=a.xspace.step,i=a.yspace.step,j=a.zspace.step;a.voxel_origin={x:b*e[0]+c*f[0]+d*g[0],y:b*e[1]+c*f[1]+d*g[1],z:b*e[2]+c*f[2]+d*g[2]};var k=a.voxel_origin,l=(-k.x*e[0]-k.y*e[1]-k.z*e[2])/h,m=(-k.x*f[0]-k.y*f[1]-k.z*f[2])/i,n=(-k.x*g[0]-k.y*g[1]-k.z*g[2])/j;a.w2v=[[e[0]/h,e[1]/h,e[2]/h,l],[f[0]/i,f[1]/i,f[2]/i,m],[g[0]/j,g[1]/j,g[2]/j,n]]},getSliceImage:function(a,b,c,f){b=b||1;var h,i=g.color_map;if(!i)throw h="No color map set for this volume. Cannot render slice.",g.triggerEvent("error",h),new Error(h);var j=a.width_space.step,k=a.height_space.step,l=Math.abs(Math.floor(a.width*j*b)),m=Math.abs(Math.floor(a.height*k*b)),n=d.createImageData(a.width,a.height),o=d.createImageData(l,m);if("rgb8"===g.header.datatype){var p=new Uint8ClampedArray(a.data.buffer);n.data.set(p,0)}else i.mapColors(a.data,{min:g.intensity_min,max:g.intensity_max,contrast:c,brightness:f,destination:n.data});return o.data.set(e.utils.nearestNeighbor(n.data,n.width,n.height,l,m,{block_size:4})),o},getIntensityValue:function(a,b,c,d){var e=g.header,f=g.getVoxelCoords();if(a=void 0===a?f.i:a,b=void 0===b?f.j:b,c=void 0===c?f.k:c,d=void 0===d?g.current_time:d,0>a||a>=e[e.order[0]].space_length||0>b||b>=e[e.order[1]].space_length||0>c||c>=e[e.order[2]].space_length)return 0;var h=e.time?d*e.time.offset:0,i=a*e[e.order[0]].offset+b*e[e.order[1]].offset+c*e[e.order[2]].offset+h;return g.data[i]},getVoxelCoords:function(){var a=g.header,b={xspace:a.xspace.step>0?g.position.xspace:a.xspace.space_length-g.position.xspace,yspace:a.yspace.step>0?g.position.yspace:a.yspace.space_length-g.position.yspace,zspace:a.zspace.step>0?g.position.zspace:a.zspace.space_length-g.position.zspace};return{i:b[a.order[0]],j:b[a.order[1]],k:b[a.order[2]]}},setVoxelCoords:function(a,b,c){var d=g.header,e=d.order[0],f=d.order[1],h=d.order[2];g.position[e]=d[e].step>0?a:d[e].space_length-a,g.position[f]=d[f].step>0?b:d[f].space_length-b,g.position[h]=d[h].step>0?c:d[h].space_length-c},getWorldCoords:function(){var a=g.getVoxelCoords();return g.voxelToWorld(a.i,a.j,a.k)},setWorldCoords:function(a,b,c){var d=g.worldToVoxel(a,b,c);g.setVoxelCoords(d.i,d.j,d.k)},voxelToWorld:function(a,b,c){var d,e,f,h={},i=g.header;h[i.order[0]]=a,h[i.order[1]]=b,h[i.order[2]]=c,d=h.xspace,e=h.yspace,f=h.zspace;var j=i.xspace.direction_cosines,k=i.yspace.direction_cosines,l=i.zspace.direction_cosines,m=i.xspace.step,n=i.yspace.step,o=i.zspace.step,p=i.voxel_origin;return{x:d*j[0]*m+e*k[0]*n+f*l[0]*o+p.x,y:d*j[1]*m+e*k[1]*n+f*l[1]*o+p.y,z:d*j[2]*m+e*k[2]*n+f*l[2]*o+p.z}},worldToVoxel:function(b,c,d){var e=a.w2v,f={vx:b*e[0][0]+c*e[0][1]+d*e[0][2]+e[0][3],vy:b*e[1][0]+c*e[1][1]+d*e[1][2]+e[1][3],vz:b*e[2][0]+c*e[2][1]+d*e[2][2]+e[2][3]},g={};return g[a.order[0]]=Math.round(f.vx),g[a.order[1]]=Math.round(f.vy),g[a.order[2]]=Math.round(f.vz),{i:g.xspace,j:g.yspace,k:g.zspace}},getVoxelMin:function(){return g.header.voxel_min},getVoxelMax:function(){return g.header.voxel_max},getPreferredZoom:function(a,b){var c=g.header,d=c.xspace.space_length*Math.abs(c.xspace.step),e=c.yspace.space_length*Math.abs(c.yspace.step),f=c.zspace.space_length*Math.abs(c.xspace.step),h=a/d,i=a/e,j=b/e,k=b/f;return Math.min(i,h,k,j)}};return g},e.utils.scanDataRange=function(a,b){var c=0,d=+(1/0),e=-(1/0);for(c=0;ce&&(e=f),d>f&&(d=f)}b.voxel_min=d,b.voxel_max=e}}(),function(){"use strict";function a(a){if(a>=c.BYTE&&a0&&(h+=","),h+=c[g].name;h.length>0&&(a.attributes.dimorder=h)}var c={BYTE:1,CHAR:2,SHORT:3,INT:4,FLOAT:5,DOUBLE:6},d=[0,1,1,2,4,4,8],e=BrainBrowser.VolumeViewer;e.utils.netcdfReader=function(d,f){function g(){return{begin:0,vsize:0,name:"",attributes:{},children:[],array:void 0,type:-1,dims:[],nelem:0}}function h(){var a=x.getUint8(v);return v+=1,a}function i(){var a=x.getUint32(v,w);return v+=4,a}function j(a){var b,c,d="";for(b=0;a>b;b+=1){if(c=h(),0===c){v+=a-b-1;break}d+=String.fromCharCode(c)}return d}function k(a){return 4*Math.floor((a+3)/4)}function l(b,f,g,h){var i,j;if(h=h||v,b===c.CHAR)i=new Int8Array(d,h,f);else if(b===c.BYTE)i=new Uint8Array(d,h,f);else if(b===c.DOUBLE){var l=new ArrayBuffer(f),m=0;for(i=new Float64Array(l),j=0;f>j;j+=8)i[m]=x.getFloat64(h+j),m+=1}else{var n=f/a(b);if(e.utils.swapn(new Uint8Array(d,h,f),a(b)),b===c.SHORT)i=new Int16Array(d,h,n);else if(b===c.INT)i=new Int32Array(d,h,n);else{if(b!==c.FLOAT)throw"Bad type in getArray "+b;i=new Float32Array(d,h,n)}}return h===v&&(v+=k(f)),i}function m(){var a=j(3);if("CDF"!==a)return!1;var b=h();return 1!==b?!1:!0}function n(a,b,c){var d,e=i(),f=i();if(e===a)for(d=0;f>d;d++)b(c);else if(0!==e||0!==f)throw new Error("Protocol error.")}function o(){var a=i(),b=j(k(a)),c=i();y.push({name:b,length:c})}function p(){n(10,o)}function q(b){var d=i(),e=j(k(d)),f=i(),g=i(),h=l(f,a(f)*g,[]);if(f===c.CHAR){var m,n="";for(m=0;me;e++){if(f=i(),0>f||f>=y.length)throw new Error("Illegal dimension id: "+f);p.push(f),o.push(y[f].length),0===o[e]&&(s=!0)}r(q);var t=i(),u=i(),v=i();for(q.name=m,q.type=t,q.dims=o,q.dimids=p,q.vsize=u,q.begin=v,q.nelem=1,e=0;eb;b++)h=l(e.type,e.nelem,[],c),e.array.set(h,d),c+=g,d+=h.length}}var v=0,w=!1,x=new DataView(d),y=[];if(f=f||!1,!m())throw new Error("Sorry, this does not look like a NetCDF file.");var z=g(),A=i(),B=[];return p(),r(z),t(z),u(),z.dimensions=y,z.numrec=A,z}}(),function(){"use strict";function a(a,c){var d,f={order:[],xspace:{},yspace:{},zspace:{}},g=new DataView(a,0,348),h=new Uint8Array(a,0,348),i=!0,j=g.getUint32(0,!0);348===j?i=!0:1543569408===j?i=!1:d="This does not look like a NIfTI-1 file.";var k=g.getUint16(40,i);(3>k||k>4)&&(d="Cannot handle "+k+"-dimensional images yet.");var l=String.fromCharCode.apply(null,h.subarray(344,348));if("n+1\x00"!==l&&(d="Bad magic number: '"+l+"'"),void 0!==d)throw BrainBrowser.events.triggerEvent("error",{message:d}),new Error(d);var m=g.getUint16(48,i),n=g.getUint16(70,i),o=g.getUint16(72,i),p=g.getFloat32(80,i),q=g.getFloat32(84,i),r=g.getFloat32(88,i),s=g.getFloat32(92,i),t=g.getFloat32(108,i);352>t&&(t=352);var u=g.getFloat32(112,i),v=g.getFloat32(116,i),w=g.getUint16(252,i),x=g.getUint16(254,i),y=[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]];if(m>=1&&(f.time={},f.time.space_length=m,f.time.step=s,f.time.start=0,f.time.name="time"),f.bytes_per_voxel=o/8,f.must_swap_data=!i&&f.bytes_per_voxel>1,x>0)y[0][0]=g.getFloat32(280,i),y[0][1]=g.getFloat32(284,i),y[0][2]=g.getFloat32(288,i),y[0][3]=g.getFloat32(292,i),y[1][0]=g.getFloat32(296,i),y[1][1]=g.getFloat32(300,i),y[1][2]=g.getFloat32(304,i),y[1][3]=g.getFloat32(308,i),y[2][0]=g.getFloat32(312,i),y[2][1]=g.getFloat32(316,i),y[2][2]=g.getFloat32(320,i),y[2][3]=g.getFloat32(324,i);else if(w>0){var z=g.getFloat32(256,i),A=g.getFloat32(260,i),B=g.getFloat32(264,i),C=g.getFloat32(268,i),D=g.getFloat32(272,i),E=g.getFloat32(276,i),F=g.getFloat32(76,i)<0?-1:1;y=b(z,A,B,C,D,E,p,q,r,F)}else y[0][0]=p,y[1][1]=q,y[2][2]=r;var G,H,I=[0,1,2],J=[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,1]];for(G=0;3>G;G++){var K=Math.abs(y[0][G]),L=Math.abs(y[1][G]),M=Math.abs(y[2][G]);K>L&&K>M?(f.order[2-G]="xspace",I[G]=0):L>K&&L>M?(f.order[2-G]="yspace",I[G]=1):(f.order[2-G]="zspace",I[G]=2)}for(G=0;3>G;G++)for(H=0;4>H;H++){var N=H;3>H&&(N=I[H]),J[G][N]=y[G][H]}e.utils.transformToMinc(J,f),f[f.order[2]].space_length=g.getUint16(42,i),f[f.order[1]].space_length=g.getUint16(44,i),f[f.order[0]].space_length=g.getUint16(46,i),m>=1&&f.order.unshift("time"),f.datatype=n,f.vox_offset=t,f.scl_slope=u,f.scl_inter=v,BrainBrowser.utils.isFunction(c)&&c(f)}function b(a,b,c,d,e,f,g,h,i,j){var k,l,m,n,o=[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,1]],p=a,q=b,r=c;return k=1-(p*p+q*q+r*r),1e-7>k?(k=1/Math.sqrt(p*p+q*q+r*r),p*=k,q*=k,r*=k,k=0):k=Math.sqrt(k),l=g>0?g:1,m=h>0?h:1,n=i>0?i:1,0>j&&(n=-n),o[0][0]=(k*k+p*p-q*q-r*r)*l,o[0][1]=2*(p*q-k*r)*m,o[0][2]=2*(p*r+k*q)*n,o[1][0]=2*(p*q+k*r)*l,o[1][1]=(k*k+q*q-p*p-r*r)*m,o[1][2]=2*(q*r-k*p)*n,o[2][0]=2*(p*r-k*q)*l,o[2][1]=2*(q*r+k*p)*m,o[2][2]=(k*k+r*r-q*q-p*p)*n,o[0][3]=d,o[1][3]=e,o[2][3]=f,o}function c(a,b,c){var f=e.createVolume(a,d(a,b));f.type="nifti",f.intensity_min=f.header.voxel_min,f.intensity_max=f.header.voxel_max,f.saveOriginAndTransform(a),BrainBrowser.utils.isFunction(c)&&c(f)}function d(a,b){var c=null;switch(a.must_swap_data&&e.utils.swapn(new Uint8Array(b,a.vox_offset),a.bytes_per_voxel),a.datatype){case 2:c=new Uint8Array(b,a.vox_offset);break;case 4:c=new Int16Array(b,a.vox_offset);break;case 8:c=new Int32Array(b,a.vox_offset);break;case 16:c=new Float32Array(b,a.vox_offset);break;case 64:c=new Float64Array(b,a.vox_offset);break;case 256:c=new Int8Array(b,a.vox_offset);break;case 512:c=new Uint16Array(b,a.vox_offset);break;case 768:c=new Uint32Array(b,a.vox_offset);break;default:var d="Unsupported data type: "+a.datatype;throw BrainBrowser.events.triggerEvent("error",{message:d}),new Error(d)}var f=0,g=a.scl_slope,h=a.scl_inter;if(0!==g){var i=new Float32Array(c.length);for(f=0;f=b&&(b=1),Math.sqrt(b)}function d(a,b,c){return a[0]*(b[1]*c[2]-b[2]*c[1])-a[1]*(b[0]*c[2]-b[2]*c[0])+a[2]*(b[0]*c[1]-b[1]*c[0])}for(var e=[],f=[],g=[],h=c(a[0]),i=c(a[1]),j=c(a[2]),k=a[0][0]<0?-h:h,l=a[1][1]<0?-i:i,m=a[2][2]<0?-j:j,n=0;3>n;n++)e[n]=a[n][0]/k,f[n]=a[n][1]/l,g[n]=a[n][2]/m;b.xspace.step=k,b.yspace.step=l,b.zspace.step=m;var o=[a[0][3],a[1][3],a[2][3]],p=d(e,f,g),q=d(o,f,g),r=d(e,o,g),s=d(e,f,o);b.xspace.start=q/p,b.yspace.start=r/p,b.zspace.start=s/p,b.xspace.direction_cosines=e,b.yspace.direction_cosines=f,b.zspace.direction_cosines=g},e.utils.swapn=function(a,b){for(var c=0;ce;){var f=a[c+d];a[c+d]=a[c+e],a[c+e]=f,d--,e++}}}(),function(){"use strict";function a(a,b,c){var d=a.length;if(1===d)return a[0];var e,f,g,h,i,j,k,l,m,n=c.data,o=c.width,p=c.height,q=new Uint32Array(a.length),r=new Float32Array(b);for(e=0;p>e;e+=1)for(m=e*o,f=0;o>f;f+=1)for(j=4*(m+f),k=0,g=0;d>g;g+=1)h=a[g],e=t;O--){for(var P={i:N.i,j:N.j,k:N.k},Q=r;s>Q;Q++){if(P.i<0||P.i>=D||P.j<0||P.j>=E||P.k<0||P.k>=F)H[I]=0;else{var R=w+Math.round(P.i)*A+Math.round(P.j)*B+Math.round(P.k)*C;G>I&&(H[I]=m.data[R])}I++,P.i+=L.di,P.j+=L.dj,P.k+=L.dk}N.i-=M.di,N.j-=M.dj,N.k-=M.dk}n.mapColors(H,{min:o,max:p,contrast:e,brightness:f,destination:q.data}),i.push(q)}),a(i,k.blend_ratios,c.createImageData(j,l))},k.getIntensityValue=function(a,b,c,d){var e=k.getVoxelCoords();a=void 0===a?e.i:a,b=void 0===b?e.j:b,c=void 0===c?e.k:c,d=void 0===d?this.current_time:d;var f=[],g=k.voxelToWorld(a,b,c);return this.volumes.forEach(function(a){var b=a.worldToVoxel(g.x,g.y,g.z);f.push(a.getIntensityValue(b.i,b.j,b.k,d))}),f.reduce(function(a,b,c){return a+b*k.blend_ratios[c]},0)},f.forEach(function(a){k.volumes.push(a),k.blend_ratios.push(1/f.length)}),BrainBrowser.utils.isFunction(e)&&e(k)}}(); \ No newline at end of file diff --git a/build/brainbrowser-2.5.2/workers/deindex.worker.js b/build/brainbrowser-2.5.2/workers/deindex.worker.js new file mode 100644 index 00000000..d4b7683b --- /dev/null +++ b/build/brainbrowser-2.5.2/workers/deindex.worker.js @@ -0,0 +1,32 @@ +/* +* BrainBrowser: Web-based Neurological Visualization Tools +* (https://brainbrowser.cbrain.mcgill.ca) +* +* Copyright (C) 2011 +* The Royal Institution for the Advancement of Learning +* McGill University +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Affero General Public License as +* published by the Free Software Foundation, either version 3 of the +* License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Affero General Public License for more details. +* +* You should have received a copy of the GNU Affero General Public License +* along with this program. If not, see . +*/ + +/* +* BrainBrowser v2.5.2 +* +* Author: Tarek Sherif (http://tareksherif.ca/) +* Author: Nicolas Kassis +* Author: Paul Mougel +* +* three.js (c) 2010-2014 three.js authors, used under the MIT license +*/ +!function(){"use strict";function a(a,c,d,e){a=a||[],c=c||[],d=d||[],e=e;var f,g,h,i,j,k,l,m,n,o,p=a.length,q=3*p,r=4*p,s=d.length>0,t={},u={};4===e.length&&(j=!0,f=e[0],g=e[1],h=e[2],i=e[3]);var v=new Float32Array(q),w=s?new Float32Array(q):null,x=new Float32Array(r);for(k=0,l=a.length;l>k;k++)b(t,c[3*a[k]],c[3*a[k]+1],c[3*a[k]+2]);for(u.x=t.min_x+(t.max_x-t.min_x)/2,u.y=t.min_y+(t.max_y-t.min_y)/2,u.z=t.min_z+(t.max_z-t.min_z)/2,k=0;p>k;k+=3)m=3*k,n=4*k,v[m]=c[3*a[k]],v[m+1]=c[3*a[k]+1],v[m+2]=c[3*a[k]+2],v[m+3]=c[3*a[k+1]],v[m+4]=c[3*a[k+1]+1],v[m+5]=c[3*a[k+1]+2],v[m+6]=c[3*a[k+2]],v[m+7]=c[3*a[k+2]+1],v[m+8]=c[3*a[k+2]+2],s&&(w[m]=d[3*a[k]],w[m+1]=d[3*a[k]+1],w[m+2]=d[3*a[k]+2],w[m+3]=d[3*a[k+1]],w[m+4]=d[3*a[k+1]+1],w[m+5]=d[3*a[k+1]+2],w[m+6]=d[3*a[k+2]],w[m+7]=d[3*a[k+2]+1],w[m+8]=d[3*a[k+2]+2]),j?(x[n]=f,x[n+1]=g,x[n+2]=h,x[n+3]=i,x[n+4]=f,x[n+5]=g,x[n+6]=h,x[n+7]=i,x[n+8]=f,x[n+9]=g,x[n+10]=h,x[n+11]=i):(x[n]=e[4*a[k]],x[n+1]=e[4*a[k]+1],x[n+2]=e[4*a[k]+2],x[n+3]=e[4*a[k]+3],x[n+4]=e[4*a[k+1]],x[n+5]=e[4*a[k+1]+1],x[n+6]=e[4*a[k+1]+2],x[n+7]=e[4*a[k+1]+3],x[n+8]=e[4*a[k+2]],x[n+9]=e[4*a[k+2]+1],x[n+10]=e[4*a[k+2]+2],x[n+11]=e[4*a[k+2]+3]);return o={centroid:u,bounding_box:t,unindexed:{position:v,normal:w,color:x}}}function b(a,b,c,d){(!a.min_x||a.min_x>b)&&(a.min_x=b),(!a.max_x||a.max_xc)&&(a.min_y=c),(!a.max_y||a.max_yd)&&(a.min_z=d),(!a.max_z||a.max_zc;c++)e=h[c],f=a(e.indices,i,j,e.color||k),e.centroid=f.centroid,e.unindexed=f.unindexed,l.push(e.indices.buffer),l.push(e.unindexed.position.buffer),e.unindexed.normal&&l.push(e.unindexed.normal.buffer),e.unindexed.color&&l.push(e.unindexed.color.buffer);j&&l.push(j.buffer),k&&l.push(k.buffer),g.deindexed=!0,self.postMessage(g,l)})}(); \ No newline at end of file diff --git a/build/brainbrowser-2.5.2/workers/freesurferasc.intensity.worker.js b/build/brainbrowser-2.5.2/workers/freesurferasc.intensity.worker.js new file mode 100644 index 00000000..d8062b06 --- /dev/null +++ b/build/brainbrowser-2.5.2/workers/freesurferasc.intensity.worker.js @@ -0,0 +1,32 @@ +/* +* BrainBrowser: Web-based Neurological Visualization Tools +* (https://brainbrowser.cbrain.mcgill.ca) +* +* Copyright (C) 2011 +* The Royal Institution for the Advancement of Learning +* McGill University +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Affero General Public License as +* published by the Free Software Foundation, either version 3 of the +* License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Affero General Public License for more details. +* +* You should have received a copy of the GNU Affero General Public License +* along with this program. If not, see . +*/ + +/* +* BrainBrowser v2.5.2 +* +* Author: Tarek Sherif (http://tareksherif.ca/) +* Author: Nicolas Kassis +* Author: Paul Mougel +* +* three.js (c) 2010-2014 three.js authors, used under the MIT license +*/ +!function(){"use strict";function a(a){var b,c,d,e,f,g,h;for(a=a.trim(),c=a.split("\n"),f=c.length,b=new Float32Array(f),d=parseFloat(c[0].trim().split(/\s+/)[4]),b[0]=d,g=d,h=d,e=1;f>e;e++)d=parseFloat(c[e].trim().split(/\s+/)[4]),b[e]=d,g=Math.min(g,d),h=Math.max(h,d);return{values:new Float32Array(b),min:g,max:h}}self.addEventListener("message",function(b){var c=a(b.data.data);self.postMessage(c,[c.values.buffer])})}(); \ No newline at end of file diff --git a/build/brainbrowser-2.5.2/workers/freesurferasc.worker.js b/build/brainbrowser-2.5.2/workers/freesurferasc.worker.js new file mode 100644 index 00000000..ee849d49 --- /dev/null +++ b/build/brainbrowser-2.5.2/workers/freesurferasc.worker.js @@ -0,0 +1,32 @@ +/* +* BrainBrowser: Web-based Neurological Visualization Tools +* (https://brainbrowser.cbrain.mcgill.ca) +* +* Copyright (C) 2011 +* The Royal Institution for the Advancement of Learning +* McGill University +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Affero General Public License as +* published by the Free Software Foundation, either version 3 of the +* License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Affero General Public License for more details. +* +* You should have received a copy of the GNU Affero General Public License +* along with this program. If not, see . +*/ + +/* +* BrainBrowser v2.5.2 +* +* Author: Tarek Sherif (http://tareksherif.ca/) +* Author: Nicolas Kassis +* Author: Paul Mougel +* +* three.js (c) 2010-2014 three.js authors, used under the MIT license +*/ +!function(){"use strict";function a(a){var b,c,d,e,f,g,h,i,j={};for(a=a.split("\n"),d=a[1].trim().split(/\s+/),e=parseInt(d[0],10),f=parseInt(d[1],10),b=new Float32Array(3*e),c=new Uint32Array(3*f),h=0;e>h;h++)g=a[h+2].trim().split(/\s+/),i=3*h,b[i]=parseFloat(g[0]),b[i+1]=parseFloat(g[1]),b[i+2]=parseFloat(g[2]);for(h=0;f>h;h++)g=a[h+e+2].trim().split(/\s+/),i=3*h,c[i]=parseInt(g[0],10),c[i+1]=parseInt(g[1],10),c[i+2]=parseInt(g[2],10);return j.type="polygon",j.vertices=b,j.shapes=[{indices:c}],j}self.addEventListener("message",function(b){var c=a(b.data.data),d=[c.vertices.buffer,c.shapes[0].indices.buffer];self.postMessage(c,d)})}(); \ No newline at end of file diff --git a/build/brainbrowser-2.5.2/workers/freesurferbin.intensity.worker.js b/build/brainbrowser-2.5.2/workers/freesurferbin.intensity.worker.js new file mode 100644 index 00000000..0d64eb89 --- /dev/null +++ b/build/brainbrowser-2.5.2/workers/freesurferbin.intensity.worker.js @@ -0,0 +1,32 @@ +/* +* BrainBrowser: Web-based Neurological Visualization Tools +* (https://brainbrowser.cbrain.mcgill.ca) +* +* Copyright (C) 2011 +* The Royal Institution for the Advancement of Learning +* McGill University +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Affero General Public License as +* published by the Free Software Foundation, either version 3 of the +* License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Affero General Public License for more details. +* +* You should have received a copy of the GNU Affero General Public License +* along with this program. If not, see . +*/ + +/* +* BrainBrowser v2.5.2 +* +* Author: Tarek Sherif (http://tareksherif.ca/) +* Author: Nicolas Kassis +* Author: Paul Mougel +* +* three.js (c) 2010-2014 three.js authors, used under the MIT license +*/ +!function(){"use strict";function a(a){var c,d,e,f,g,h,i=new DataView(a),j=0,k=b(i);if(j+=3,16777215!==k)return{error:!0,error_message:"Unrecognized file format."};if(d=i.getUint32(j),j+=8,e=i.getUint32(j),j+=4,1!==e)return{error:!0,error_message:"Only one value per vertex supported. Number of values: "+e};for(c=new Float32Array(d),c[0]=f=g=i.getFloat32(j),j+=4,h=1;d>h;h++)c[h]=i.getFloat32(j),f=Math.min(f,c[h]),g=Math.max(g,c[h]),j+=4;return{values:c,min:f,max:g}}function b(a){var b,c=0;for(b=0;3>b;b++)c+=a.getUint8(b)<<8*(3-b-1);return c}self.addEventListener("message",function(b){var c=a(b.data.data);self.postMessage(c,[c.values.buffer])})}(); \ No newline at end of file diff --git a/build/brainbrowser-2.5.2/workers/freesurferbin.worker.js b/build/brainbrowser-2.5.2/workers/freesurferbin.worker.js new file mode 100644 index 00000000..f5708602 --- /dev/null +++ b/build/brainbrowser-2.5.2/workers/freesurferbin.worker.js @@ -0,0 +1,32 @@ +/* +* BrainBrowser: Web-based Neurological Visualization Tools +* (https://brainbrowser.cbrain.mcgill.ca) +* +* Copyright (C) 2011 +* The Royal Institution for the Advancement of Learning +* McGill University +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Affero General Public License as +* published by the Free Software Foundation, either version 3 of the +* License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Affero General Public License for more details. +* +* You should have received a copy of the GNU Affero General Public License +* along with this program. If not, see . +*/ + +/* +* BrainBrowser v2.5.2 +* +* Author: Tarek Sherif (http://tareksherif.ca/) +* Author: Nicolas Kassis +* Author: Paul Mougel +* +* three.js (c) 2010-2014 three.js authors, used under the MIT license +*/ +!function(){"use strict";function a(a){var c,d,e,f,g,h,i=new DataView(a),j=0,k=b(i);if(j+=3,16777214!==k)return{error:!0,error_message:"Only triangle meshes supported."};for(;10!==i.getUint8(j)||10!==i.getUint8(j+1);)j++;for(j+=2,d=i.getUint32(j),j+=4,f=3*i.getUint32(j),j+=4,c=new Float32Array(3*d),e=new Uint32Array(f),g=0;d>g;g++)h=3*g,c[h]=i.getFloat32(j),j+=4,c[h+1]=i.getFloat32(j),j+=4,c[h+2]=i.getFloat32(j),j+=4;for(g=0;f>g;g++)e[g]=i.getUint32(j),j+=4;return{vertices:c,shapes:[{indices:e}]}}function b(a){var b,c=0;for(b=0;3>b;b++)c+=a.getUint8(b)<<8*(3-b-1);return c}self.addEventListener("message",function(b){var c=a(b.data.data),d=[c.vertices.buffer,c.shapes[0].indices.buffer];self.postMessage(c,d)})}(); \ No newline at end of file diff --git a/build/brainbrowser-2.5.2/workers/json.worker.js b/build/brainbrowser-2.5.2/workers/json.worker.js new file mode 100644 index 00000000..c52f20fe --- /dev/null +++ b/build/brainbrowser-2.5.2/workers/json.worker.js @@ -0,0 +1,32 @@ +/* +* BrainBrowser: Web-based Neurological Visualization Tools +* (https://brainbrowser.cbrain.mcgill.ca) +* +* Copyright (C) 2011 +* The Royal Institution for the Advancement of Learning +* McGill University +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Affero General Public License as +* published by the Free Software Foundation, either version 3 of the +* License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Affero General Public License for more details. +* +* You should have received a copy of the GNU Affero General Public License +* along with this program. If not, see . +*/ + +/* +* BrainBrowser v2.5.2 +* +* Author: Tarek Sherif (http://tareksherif.ca/) +* Author: Nicolas Kassis +* Author: Paul Mougel +* +* three.js (c) 2010-2014 three.js authors, used under the MIT license +*/ +!function(){"use strict";function a(a){var e={name:a.name,type:a.type,shapes:[]},f=[];return e.vertices=new Float32Array(b(a.vertices)),f.push(e.vertices.buffer),a.colors=a.colors||a.color,a.colors&&(e.colors=b(a.colors),e.vertices.length===e.colors.length||3===e.colors.length?e.colors=c(e.colors):e.colors=new Float32Array(e.colors),f.push(e.colors.buffer)),a.normals&&(e.normals=new Float32Array(b(a.normals)),f.push(e.normals.buffer)),void 0===a.shapes&&(a.shapes=[]),a.indices&&a.shapes.push({indices:a.indices}),a.shapes.forEach(function(a){var c=new Uint32Array(b(a.indices));a.one_indexed&&d(c),f.push(c.buffer),a.color=a.color||a.colors,Array.isArray(a.color)&&3===a.color.length&&a.color.push(1),a.color&&(a.color=new Float32Array(a.color),f.push(a.color.buffer)),e.shapes.push({name:a.name,indices:c,color:a.color})}),{result:e,transfer:f}}function b(a,c){if(!Array.isArray(a))return[a];if(c=c||0,c===a.length)return[];var d,e,f=[];for(d=0,e=a.length;e>d;d++)f.push.apply(f,b(a[d]));return f}function c(a){var b,c,d,e;for(b=new Float32Array(4*a.length/3),c=d=0,e=a.length;e>c;)b[d++]=a[c++],b[d++]=a[c++],b[d++]=a[c++],b[d++]=1;return b}function d(a){var b,c;for(b=0,c=a.length;c>b;b++)a[b]=a[b]-1}self.addEventListener("message",function(b){var c=a(JSON.parse(b.data.data)),d=c.result,e=c.transfer;self.postMessage(d,e)})}(); \ No newline at end of file diff --git a/build/brainbrowser-2.5.2/workers/mniobj.worker.js b/build/brainbrowser-2.5.2/workers/mniobj.worker.js new file mode 100644 index 00000000..6bd880f4 --- /dev/null +++ b/build/brainbrowser-2.5.2/workers/mniobj.worker.js @@ -0,0 +1,32 @@ +/* +* BrainBrowser: Web-based Neurological Visualization Tools +* (https://brainbrowser.cbrain.mcgill.ca) +* +* Copyright (C) 2011 +* The Royal Institution for the Advancement of Learning +* McGill University +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Affero General Public License as +* published by the Free Software Foundation, either version 3 of the +* License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Affero General Public License for more details. +* +* You should have received a copy of the GNU Affero General Public License +* along with this program. If not, see . +*/ + +/* +* BrainBrowser v2.5.2 +* +* Author: Tarek Sherif (http://tareksherif.ca/) +* Author: Nicolas Kassis +* Author: Paul Mougel +* +* three.js (c) 2010-2014 three.js authors, used under the MIT license +*/ +!function(){"use strict";function a(a,l){j=a.trim().split(/\s+/).reverse(),k=j.length-1;var m,n,o,p,q,r,s,t,u,v,w=l.split,x={},y=i();if(x.split=!1,x.type="P"===y?"polygon":"L"===y?"line":y,"polygon"===x.type)b(x),x.num_vertices=parseInt(i(),10),c(x),d(x),x.nitems=parseInt(i(),10);else{if("line"!==x.type)return x.error=!0,void(x.error_message='Invalid MNI Object class: must be "polygon" or "line"');b(x),x.num_vertices=parseInt(i(),10),c(x),x.nitems=parseInt(i(),10)}if(e(x),f(x),g(x),"polygon"===x.type)w&&(x.split=!0,h(x));else if("line"===x.type){for(t=[],r=x.indices,s=x.end_indices,q=x.nitems,u=v=0,m=0;q>m;m++)o=0===m?0:s[m-1],p=s[m],u+=2*(p-o-1);for(t=new Uint32Array(u),m=0;q>m;m++){for(o=0===m?0:s[m-1],t[v++]=r[o],p=s[m],n=o+1;p-1>n;n++)t[v++]=r[n],t[v++]=r[n];t[v++]=r[p-1]}x.indices=t}return x}function b(a){"polygon"===a.type?a.surface_properties={ambient:parseFloat(i()),diffuse:parseFloat(i()),specular_reflectance:parseFloat(i()),specular_scattering:parseFloat(i()),transparency:parseFloat(i())}:"line"===a.type&&(a.surfaceProperties={width:i()})}function c(a){var b,c=3*a.num_vertices,d=new Float32Array(c);for(b=0;c>b;b++)d[b]=parseFloat(i());a.vertices=d}function d(a){var b,c=3*a.num_vertices,d=new Float32Array(c);for(b=0;c>b;b++)d[b]=parseFloat(i());a.normals=d}function e(a){var b,c,d,e=parseInt(i(),10);if(0===e)for(b=new Float32Array(4),c=0;4>c;c++)b[c]=parseFloat(i());else if(1===e)for(d=4*a.num_polygons,b=new Float32Array(d),c=0;d>c;c++)b[c]=parseFloat(i());else if(2===e)for(d=4*a.num_vertices,b=new Float32Array(d),c=0;d>c;c++)b[c]=parseFloat(i());else a.error=!0,a.error_message="Invalid color flag: "+e;a.color_flag=e,a.colors=b}function f(a){var b,c=a.nitems,d=new Uint32Array(c);for(b=0;c>b;b++)d[b]=parseInt(i(),10);a.end_indices=d}function g(a){var b,c=k+1,d=new Uint32Array(c);for(b=0;c>b;b++)d[b]=parseInt(i(),10);a.indices=d}function h(a){var b=a.indices.length;a.left={indices:new Uint32Array(Array.prototype.slice.call(a.indices,0,b/2))},a.right={indices:new Uint32Array(Array.prototype.slice.call(a.indices,b/2))}}function i(){return j[k--]}var j,k;self.addEventListener("message",function(b){var c=b.data,d=a(c.data,c.options)||{error:!0,error_message:"Error parsing data."},e={type:d.type,vertices:d.vertices,normals:d.normals,colors:d.colors,surface_properties:d.surface_properties,split:d.split,error:d.error,error_message:d.error_message},f=[e.vertices.buffer,e.colors.buffer];e.normals&&f.push(e.normals.buffer),e.split?(e.shapes=[{indices:d.left.indices},{indices:d.right.indices}],f.push(d.left.indices.buffer,d.right.indices.buffer)):(e.shapes=[{indices:d.indices}],f.push(d.indices.buffer)),self.postMessage(e,f)})}(); \ No newline at end of file diff --git a/build/brainbrowser-2.5.2/workers/text.intensity.worker.js b/build/brainbrowser-2.5.2/workers/text.intensity.worker.js new file mode 100644 index 00000000..d337b110 --- /dev/null +++ b/build/brainbrowser-2.5.2/workers/text.intensity.worker.js @@ -0,0 +1,32 @@ +/* +* BrainBrowser: Web-based Neurological Visualization Tools +* (https://brainbrowser.cbrain.mcgill.ca) +* +* Copyright (C) 2011 +* The Royal Institution for the Advancement of Learning +* McGill University +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Affero General Public License as +* published by the Free Software Foundation, either version 3 of the +* License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Affero General Public License for more details. +* +* You should have received a copy of the GNU Affero General Public License +* along with this program. If not, see . +*/ + +/* +* BrainBrowser v2.5.2 +* +* Author: Tarek Sherif (http://tareksherif.ca/) +* Author: Nicolas Kassis +* Author: Paul Mougel +* +* three.js (c) 2010-2014 three.js authors, used under the MIT license +*/ +!function(){"use strict";function a(a){var b,c,d,e,f={};for(f.values=new Float32Array(a.trim().split(/\s+/).map(parseFloat)),d=f.values[0],e=f.values[0],b=1,c=f.values.length;c>b;b++)d=Math.min(d,f.values[b]),e=Math.max(e,f.values[b]);return f.min=d,f.max=e,f}self.addEventListener("message",function(b){var c=a(b.data.data);self.postMessage(c,[c.values.buffer])})}(); \ No newline at end of file diff --git a/build/brainbrowser-2.5.2/workers/wavefrontobj.worker.js b/build/brainbrowser-2.5.2/workers/wavefrontobj.worker.js new file mode 100644 index 00000000..8f0c5555 --- /dev/null +++ b/build/brainbrowser-2.5.2/workers/wavefrontobj.worker.js @@ -0,0 +1,32 @@ +/* +* BrainBrowser: Web-based Neurological Visualization Tools +* (https://brainbrowser.cbrain.mcgill.ca) +* +* Copyright (C) 2011 +* The Royal Institution for the Advancement of Learning +* McGill University +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Affero General Public License as +* published by the Free Software Foundation, either version 3 of the +* License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Affero General Public License for more details. +* +* You should have received a copy of the GNU Affero General Public License +* along with this program. If not, see . +*/ + +/* +* BrainBrowser v2.5.2 +* +* Author: Tarek Sherif (http://tareksherif.ca/) +* Author: Nicolas Kassis +* Author: Paul Mougel +* +* three.js (c) 2010-2014 three.js authors, used under the MIT license +*/ +!function(){"use strict";function a(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p=[],q=[],r=[],s=[],t={},u=[];for(t.shapes=[],a=a.split("\n"),b={indices:[],texture_indices:[],normal_indices:[]},s.push(b),j=0,m=a.length;m>j;j++)if(g=a[j].replace(/^\s+/,"").replace(/\s+$/,"").split(/\s+/),h=g[0],i=g.length,!h.match("#")||""===g)switch(h){case"o":case"g":b={name:g[1],indices:[],texture_indices:[],normal_indices:[]},s.push(b);break;case"v":p.push(parseFloat(g[1]),parseFloat(g[2]),parseFloat(g[3]));break;case"vt":for(k=1;i>k;k++)q.push(parseFloat(g[k]));break;case"vn":r.push(parseFloat(g[1]),parseFloat(g[2]),parseFloat(g[3]));break;case"f":for(d=b.indices,f=b.normal_indices,e=b.texture_indices,o=g[1].split("/"),l=2;i-1>l;l++)d.push(parseInt(o[0],10)-1),e.push(parseInt(o[1],10)-1),o[2]&&f.push(parseInt(o[2],10)-1),n=g[l].split("/"),d.push(parseInt(n[0],10)-1),e.push(parseInt(n[1],10)-1),n[2]&&f.push(parseInt(n[2],10)-1),n=g[l+1].split("/"),d.push(parseInt(n[0],10)-1),e.push(parseInt(n[1],10)-1),n[2]&&f.push(parseInt(n[2],10)-1)}return t.type="polygon",t.vertices=new Float32Array(p),u.push(t.vertices.buffer),r.length>0&&(c=new Float32Array(p.length)),s.forEach(function(a){var b,d,e={};if(e.indices=new Uint32Array(a.indices),u.push(e.indices.buffer),a.normal_indices.length>0)for(j=0,m=a.normal_indices.length;m>j;j++)b=3*a.indices[j],d=3*a.normal_indices[j],c[b]=r[d],c[b+1]=r[d+1],c[b+2]=r[d+2];a.texture_indices.length>0&&(e.texture_indices=new Uint32Array(a.texture_indices),u.push(e.texture_indices.buffer)),t.shapes.push(e)}),c&&(t.normals=new Float32Array(c),u.push(t.normals.buffer)),q.length>0&&(t.texture_coords=new Float32Array(q),u.push(t.texture_coords.buffer)),{result:t,transfer:u}}self.addEventListener("message",function(b){var c=a(b.data.data),d=c.result,e=c.transfer;self.postMessage(d,e)})}(); \ No newline at end of file diff --git a/build/brainbrowser-2.5.2/workers/wireframe.worker.js b/build/brainbrowser-2.5.2/workers/wireframe.worker.js new file mode 100644 index 00000000..63814957 --- /dev/null +++ b/build/brainbrowser-2.5.2/workers/wireframe.worker.js @@ -0,0 +1,32 @@ +/* +* BrainBrowser: Web-based Neurological Visualization Tools +* (https://brainbrowser.cbrain.mcgill.ca) +* +* Copyright (C) 2011 +* The Royal Institution for the Advancement of Learning +* McGill University +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Affero General Public License as +* published by the Free Software Foundation, either version 3 of the +* License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Affero General Public License for more details. +* +* You should have received a copy of the GNU Affero General Public License +* along with this program. If not, see . +*/ + +/* +* BrainBrowser v2.5.2 +* +* Author: Tarek Sherif (http://tareksherif.ca/) +* Author: Nicolas Kassis +* Author: Paul Mougel +* +* three.js (c) 2010-2014 three.js authors, used under the MIT license +*/ +!function(){"use strict";function a(a){var b,c,d,e=new Uint32Array(2*a.length);for(b=0,d=a.length;d>b;b+=3)c=2*b,e[c]=a[b],e[c+1]=a[b+1],e[c+2]=a[b+1],e[c+3]=a[b+2],e[c+4]=a[b+2],e[c+5]=a[b];return{indices:e}}function b(a,b){var c,d,e,f,g,h=new Float32Array(2*a.length),i=new Float32Array(2*b.length),j=a.length/3;for(c=0;j>c;c+=3)e=3*c,f=4*c,d=2*e,g=2*f,h[d]=a[e],h[d+1]=a[e+1],h[d+2]=a[e+2],h[d+3]=a[e+3],h[d+4]=a[e+4],h[d+5]=a[e+5],h[d+6]=a[e+3],h[d+7]=a[e+4],h[d+8]=a[e+5],h[d+9]=a[e+6],h[d+10]=a[e+7],h[d+11]=a[e+8],h[d+12]=a[e+6],h[d+13]=a[e+7],h[d+14]=a[e+8],h[d+15]=a[e],h[d+16]=a[e+1],h[d+17]=a[e+2],i[g]=b[f],i[g+1]=b[f+1],i[g+2]=b[f+2],i[g+3]=b[f+3],i[g+4]=b[f+4],i[g+5]=b[f+5],i[g+6]=b[f+6],i[g+7]=b[f+7],i[g+8]=b[f+4],i[g+9]=b[f+5],i[g+10]=b[f+6],i[g+11]=b[f+7],i[g+12]=b[f+8],i[g+13]=b[f+9],i[g+14]=b[f+10],i[g+15]=b[f+11],i[g+16]=b[f+8],i[g+17]=b[f+9],i[g+18]=b[f+10],i[g+19]=b[f+11],i[g+20]=b[f],i[g+21]=b[f+1],i[g+22]=b[f+2],i[g+23]=b[f+3];return{positions:h,colors:i}}self.addEventListener("message",function(c){var d,e,f=c.data;f.indices?(d=a(f.indices),e=[d.indices.buffer]):(d=b(f.positions,f.colors),e=[d.positions.buffer,d.colors.buffer]),self.postMessage(d,e)})}(); \ No newline at end of file diff --git a/package.json b/package.json index e84978b9..3a548af0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "brainbrowser", - "version": "2.5.1", + "version": "2.5.2", "license": "GNU Affero GPL 3.0", "devDependencies": { "bower": "~1.7.9", diff --git a/release/brainbrowser-2.5.2.tar.gz b/release/brainbrowser-2.5.2.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..9a7fbac156b578ef406e0ed196d91ca235ff0f5a GIT binary patch literal 199525 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�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ßr?wU#UBjk9sVri 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

!4>Dc#|ja{PGFVw+sr5l!p%=>_2#V{|#}8XythJ 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