{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///dolly.min.js","webpack:///webpack/bootstrap 27b1d2d8b849a9002443","webpack:///./src/index.js","webpack:///./src/vector.js","webpack:///./~/gl-matrix-vec3/index.js","webpack:///./~/gl-matrix-vec3/~/gl-matrix-common/index.js","webpack:///./~/object-assign/index.js","webpack:///./~/event-emitter/index.js","webpack:///./~/event-emitter/~/d/index.js","webpack:///./~/event-emitter/~/es5-ext/object/assign/index.js","webpack:///./~/event-emitter/~/es5-ext/object/assign/is-implemented.js","webpack:///./~/event-emitter/~/es5-ext/object/assign/shim.js","webpack:///./~/event-emitter/~/es5-ext/object/keys/index.js","webpack:///./~/event-emitter/~/es5-ext/object/keys/is-implemented.js","webpack:///./~/event-emitter/~/es5-ext/object/keys/shim.js","webpack:///./~/event-emitter/~/es5-ext/object/valid-value.js","webpack:///./~/event-emitter/~/es5-ext/object/normalize-options.js","webpack:///./~/event-emitter/~/es5-ext/object/is-callable.js","webpack:///./~/event-emitter/~/es5-ext/string/#/contains/index.js","webpack:///./~/event-emitter/~/es5-ext/string/#/contains/is-implemented.js","webpack:///./~/event-emitter/~/es5-ext/string/#/contains/shim.js","webpack:///./~/event-emitter/~/es5-ext/object/valid-callable.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","makeVector","arg","V","Vector","apply","Array","isArray","prototype","clone","x","y","z","safeDivide","a","b","i","denom","va","vec","vb","Prop","opts","options","lastUpdate","propId","name","position","minBounds","undefined","Infinity","maxBounds","lag","isNaN","maxSpeed","goal","attractorGoal","velocity","lastPosition","targets","attractors","eventEmitter","Dolly","tick","props","updating","self","update","delta","forEach","prop","push","active","epsilon","length","assign","scratch","totalWeight","follow","target","weight","Error","radius","offset","offsetPosition","attract","subject","attractor","innerRadius","outerRadius","attraction","_this","totalAttractionWeight","totalAttraction","copyVector","emit","zero","distance","lastAttraction","Math","min","max","add","scaleAndAdd","scale","subtract","normalize","multiply","lerp","pow","vec3","fromValues","Object","defineProperties","writeable","enumerable","get","set","val","toString","str","v","copy","negate","t","key","fn","squaredLength","fromArray","array","GLMAT_ARRAY_TYPE","GLMAT_RANDOM","create","out","sub","mul","divide","div","sqrt","dist","squaredDistance","sqrDist","len","sqrLen","dot","cross","ax","ay","az","bx","by","bz","random","r","PI","zScale","cos","sin","transformMat4","transformMat3","transformQuat","q","qx","qy","qz","qw","ix","iy","iz","iw","rotateX","rotateY","rotateZ","stride","count","l","GLMAT_EPSILON","Float32Array","glMatrix","setMatrixArrayType","type","degree","toRadian","ToObject","TypeError","ownEnumerableKeys","obj","keys","getOwnPropertyNames","getOwnPropertySymbols","concat","filter","propIsEnumerable","propertyIsEnumerable","source","from","to","s","arguments","on","once","off","methods","descriptors","base","d","callable","Function","defineProperty","hasOwnProperty","descriptor","configurable","writable","listener","data","__ee__","value","__eeOnceListener__","listeners","candidate","splice","args","slice","o","normalizeOpts","isCallable","contains","dscr","e","w","desc","gs","foo","bar","trzy","dest","src","error","object","process","result","String","indexOf","searchString"],"mappings":"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","file":"dolly.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Dolly\"] = factory();\n\telse\n\t\troot[\"Dolly\"] = factory();\n})(this, function() {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Dolly\"] = factory();\n\telse\n\t\troot[\"Dolly\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t//dependencies\n\tvar Vector = __webpack_require__(1);\n\tvar assign = __webpack_require__(4); //todo: use babel\n\tvar eventEmitter = __webpack_require__(5);\n\t\n\tvar propId = 0;\n\t\n\t//scratch vectors so we don't have to re-allocate all the time (too slow)\n\tvar scratch = new Vector();\n\tvar totalWeight = new Vector();\n\t\n\tfunction makeVector(arg) {\n\t\tfunction V() {\n\t\t\treturn Vector.apply(this, arg);\n\t\t}\n\t\n\t\tif (typeof arg === 'number') {\n\t\t\treturn new Vector(arg, arg, arg);\n\t\t}\n\t\n\t\tif (Array.isArray(arg)) {\n\t\t\tV.prototype = Vector.prototype;\n\t\t\treturn new V();\n\t\t}\n\t\n\t\tif (arg instanceof Vector) {\n\t\t\treturn Vector.clone(arg);\n\t\t}\n\t\n\t\tif (arg && typeof arg === 'object') {\n\t\t\treturn new Vector(arg.x || 0, arg.y || 0, arg.z || 0);\n\t\t}\n\t\n\t\treturn new Vector();\n\t}\n\t\n\tfunction safeDivide(a, b) {\n\t\tvar va = a.vec,\n\t\t vb = b.vec,\n\t\t i,\n\t\t denom;\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\tdenom = vb[i];\n\t\t\tif (denom) {\n\t\t\t\tva[i] = va[i] / denom;\n\t\t\t}\n\t\t}\n\t}\n\t\n\tfunction Prop(opts) {\n\t\tvar options = opts || {};\n\t\n\t\tthis.lastUpdate = -1;\n\t\tthis.id = propId++;\n\t\n\t\tthis.name = options.name || 'prop' + this.id;\n\t\n\t\tthis.position = makeVector(options.position);\n\t\tthis.minBounds = makeVector(options.minBounds === undefined ? -Infinity : options.minBounds);\n\t\tthis.maxBounds = makeVector(options.maxBounds === undefined ? Infinity : options.maxBounds);\n\t\tthis.lag = typeof options.lag === 'number' && !isNaN(options.lag) ? options.lag : 0;\n\t\tthis.maxSpeed = typeof options.maxSpeed === 'number' && !isNaN(options.maxSpeed) ? options.maxSpeed : Infinity;\n\t\n\t\tthis.goal = new Vector();\n\t\tthis.attractorGoal = new Vector();\n\t\tthis.velocity = new Vector();\n\t\tthis.lastPosition = Vector.clone(this.position);\n\t\tthis.targets = [];\n\t\tthis.attractors = [];\n\t\n\t\teventEmitter(this);\n\t}\n\t\n\tProp.prototype.follow = function (prop, options) {\n\t\tvar target;\n\t\tvar self = this;\n\t\tvar weight;\n\t\n\t\tif (Array.isArray(prop)) {\n\t\t\tprop.forEach(function (p) {\n\t\t\t\tself.follow(p, options);\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\n\t\tif (!(prop instanceof Prop)) {\n\t\t\tthrow new Error('Attempt to follow object that is not a Prop');\n\t\t}\n\t\n\t\tweight = options && options.weight;\n\t\tif (weight === undefined || isNaN(weight) && typeof weight === 'number') {\n\t\t\tweight = 1;\n\t\t}\n\t\n\t\ttarget = assign({\n\t\t\tradius: 0,\n\t\t\t// minDistance: 0, //not implemented yet\n\t\t\t// maxDistance: Infinity, //not implemented yet\n\t\t\tweight: 1\n\t\t}, options, {\n\t\t\tprop: prop,\n\t\t\tweight: makeVector(weight),\n\t\t\toffset: makeVector(options && options.offset),\n\t\t\toffsetPosition: new Vector()\n\t\t});\n\t\n\t\tthis.targets.push(target);\n\t\n\t\treturn this;\n\t};\n\t\n\tProp.prototype.attract = function (prop, subject, options) {\n\t\tvar attractor;\n\t\tvar self = this;\n\t\n\t\tif (Array.isArray(prop)) {\n\t\t\tprop.forEach(function (p) {\n\t\t\t\tself.attract(p, options);\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\n\t\tif (!(prop instanceof Prop) || !(subject instanceof Prop)) {\n\t\t\tthrow new Error('Attempt to follow object that is not a Prop');\n\t\t}\n\t\n\t\tattractor = assign({\n\t\t\tinnerRadius: 0,\n\t\t\touterRadius: 0,\n\t\t\tweight: 1\n\t\t}, options, {\n\t\t\tprop: prop, //the object that moves\n\t\t\tsubject: subject, //the point of interest\n\t\t\toffset: makeVector(options && options.offset),\n\t\t\toffsetPosition: new Vector(),\n\t\t\tattraction: 0\n\t\t});\n\t\n\t\tthis.attractors.push(attractor);\n\t\n\t\treturn this;\n\t};\n\t\n\tProp.prototype.update = function (delta, tick) {\n\t\tvar _this = this;\n\t\n\t\tvar totalAttractionWeight = 0;\n\t\tvar totalAttraction = 0;\n\t\n\t\t//prevent infinite loops if follower graph is cyclical\n\t\tif (this.lastUpdate >= tick || tick === undefined) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tthis.lastUpdate = tick;\n\t\n\t\tthis.lastPosition.copyVector(this.position);\n\t\n\t\tthis.emit('updatestart', this.position);\n\t\n\t\tif (!this.targets.length && !this.attractors.length) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tthis.attractorGoal.zero();\n\t\tthis.attractors.forEach(function (attractor) {\n\t\t\tvar distance;\n\t\t\tvar attraction = 0;\n\t\t\tvar lastAttraction = attractor.attraction;\n\t\n\t\t\tattractor.prop.update(delta, tick);\n\t\t\tattractor.subject.update(delta, tick);\n\t\n\t\t\tdistance = attractor.prop.position.distance(attractor.subject.position);\n\t\t\tif (distance < attractor.outerRadius) {\n\t\t\t\tattraction = Math.min(1, (attractor.outerRadius - distance) / (attractor.outerRadius - attractor.innerRadius));\n\t\t\t\ttotalAttraction = Math.max(totalAttraction, attraction * attractor.weight);\n\t\t\t\ttotalAttractionWeight += attractor.weight;\n\t\n\t\t\t\tattractor.offsetPosition.copyVector(attractor.subject.position).add(attractor.offset);\n\t\t\t\t_this.attractorGoal.scaleAndAdd(attractor.offsetPosition, attractor.weight);\n\t\n\t\t\t\tattractor.attraction = attraction;\n\t\t\t\tif (!lastAttraction) {\n\t\t\t\t\t_this.emit('enterattractor', attractor.prop, attractor.subject, attraction);\n\t\t\t\t} else if (lastAttraction !== attraction) {\n\t\t\t\t\t_this.emit('moveattractor', attractor.prop, attractor.subject, attraction);\n\t\t\t\t}\n\t\t\t} else if (attractor.attraction) {\n\t\t\t\tattractor.attraction = attraction;\n\t\t\t\t_this.emit('leaveattractor', attractor.prop, attractor.subject);\n\t\t\t}\n\t\t});\n\t\tif (totalAttractionWeight) {\n\t\t\tthis.attractorGoal.scale(1 / totalAttractionWeight);\n\t\t}\n\t\n\t\ttotalWeight.zero();\n\t\tthis.goal.zero();\n\t\tif (totalAttraction < 1) {\n\t\t\tthis.targets.forEach(function (target) {\n\t\t\t\tvar distance;\n\t\n\t\t\t\ttarget.prop.update(delta, tick);\n\t\n\t\t\t\ttarget.offsetPosition.copyVector(target.prop.position).add(target.offset);\n\t\n\t\t\t\tscratch.copyVector(target.offsetPosition).subtract(_this.position); //vector towards target\n\t\n\t\t\t\ttarget.offsetPosition.copyVector(_this.position);\n\t\t\t\tdistance = scratch.length();\n\t\t\t\tif (distance > target.radius) {\n\t\t\t\t\tscratch.normalize().scale(distance - target.radius);\n\t\t\t\t\ttarget.offsetPosition.add(scratch);\n\t\t\t\t}\n\t\n\t\t\t\ttarget.offsetPosition.multiply(target.weight);\n\t\t\t\t_this.goal.add(target.offsetPosition);\n\t\t\t\ttotalWeight.add(target.weight);\n\t\t\t});\n\t\t\tif (totalWeight.length()) {\n\t\t\t\tsafeDivide(this.goal, totalWeight);\n\t\t\t}\n\t\t\tif (totalAttraction) {\n\t\t\t\tthis.goal.lerp(this.attractorGoal, totalAttraction);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.goal.copyVector(this.attractorGoal);\n\t\t}\n\t\n\t\tthis.velocity.copyVector(this.goal).subtract(this.position);\n\t\tif (this.lag) {\n\t\t\tthis.velocity.scale(Math.pow(delta, this.lag));\n\t\t}\n\t\n\t\t//cap velocity to maxSpeed\n\t\tif (this.maxSpeed && this.maxSpeed < Infinity && this.maxSpeed < this.velocity.length()) {\n\t\t\tthis.velocity.normalize().scale(this.maxSpeed);\n\t\t}\n\t\n\t\tthis.emit('update', this.position, this.velocity);\n\t\n\t\tthis.position.add(this.velocity);\n\t\n\t\t//fit within bounds\n\t\tthis.position.min(this.maxBounds).max(this.minBounds);\n\t\n\t\tthis.emit('updated', this.position);\n\t\n\t\treturn this;\n\t};\n\t\n\tProp.prototype.active = function (epsilon) {\n\t\treturn this.position.distance(this.lastPosition) > (epsilon || 0.00001);\n\t};\n\t\n\tfunction Dolly() {\n\t\tvar tick = -1;\n\t\tvar props = [];\n\t\tvar updating = false;\n\t\tvar self = this;\n\t\n\t\tthis.update = function (delta) {\n\t\t\tif (updating) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tupdating = true;\n\t\n\t\t\ttick++;\n\t\t\tprops.forEach(function (prop) {\n\t\t\t\tprop.update(delta, tick);\n\t\t\t});\n\t\n\t\t\tupdating = false;\n\t\n\t\t\treturn self;\n\t\t};\n\t\n\t\tthis.prop = function (options) {\n\t\t\tvar prop = new Prop(options);\n\t\t\tprops.push(prop);\n\t\t\treturn prop;\n\t\t};\n\t\n\t\tthis.active = function (epsilon) {\n\t\t\tvar i;\n\t\t\tfor (i = 0; i < props.length; i++) {\n\t\t\t\tif (props[i].active(epsilon)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t}\n\t\n\tmodule.exports = Dolly;\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t//dependencies\n\tvar vec3 = __webpack_require__(2);\n\t\n\tfunction Vector(x, y, z) {\n\t\tvar _this = this;\n\t\n\t\tthis.vec = vec3.fromValues(x || 0, y || 0, z || 0);\n\t\n\t\tObject.defineProperties(this, {\n\t\t\tx: {\n\t\t\t\twriteable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tget: function get() {\n\t\t\t\t\treturn _this.vec[0];\n\t\t\t\t},\n\t\t\t\tset: function set(val) {\n\t\t\t\t\treturn _this.vec[0] = val;\n\t\t\t\t}\n\t\t\t},\n\t\t\ty: {\n\t\t\t\twriteable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tget: function get() {\n\t\t\t\t\treturn _this.vec[1];\n\t\t\t\t},\n\t\t\t\tset: function set(val) {\n\t\t\t\t\treturn _this.vec[1] = val;\n\t\t\t\t}\n\t\t\t},\n\t\t\tz: {\n\t\t\t\twriteable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tget: function get() {\n\t\t\t\t\treturn _this.vec[2];\n\t\t\t\t},\n\t\t\t\tset: function set(val) {\n\t\t\t\t\treturn _this.vec[2] = val;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\t\n\tVector.prototype.toString = function () {\n\t\treturn vec3.str(this.vec);\n\t};\n\t\n\tVector.prototype.clone = function (v) {\n\t\treturn new Vector(v.x, v.y, v.z);\n\t};\n\t\n\tVector.prototype.copy = function (v) {\n\t\tif (v instanceof Vector) {\n\t\t\tvec3.copy(this.vec, v.vec);\n\t\t} else if (typeof v === 'object' && v) {\n\t\t\tthis.set(v.x || 0, v.y || 0, v.z || 0);\n\t\t}\n\t\treturn this;\n\t};\n\t\n\tVector.prototype.copyVector = function (v) {\n\t\tvec3.copy(this.vec, v.vec);\n\t\treturn this;\n\t};\n\t\n\tVector.prototype.zero = function () {\n\t\tvec3.set(this.vec, 0, 0, 0);\n\t\treturn this;\n\t};\n\t\n\tVector.prototype.set = function (x, y, z) {\n\t\tvec3.set(this.vec, x, y, z);\n\t\treturn this;\n\t};\n\t\n\tVector.prototype.negate = function () {\n\t\tvec3.negate(this.vec, this.vec);\n\t\treturn this;\n\t};\n\t\n\tVector.prototype.normalize = function () {\n\t\tvec3.normalize(this.vec, this.vec);\n\t\treturn this;\n\t};\n\t\n\tVector.prototype.scale = function (scale) {\n\t\tvec3.scale(this.vec, this.vec, scale);\n\t\treturn this;\n\t};\n\t\n\tVector.prototype.scaleAndAdd = function (v, scale) {\n\t\tvec3.scaleAndAdd(this.vec, this.vec, v.vec, scale);\n\t\treturn this;\n\t};\n\t\n\tVector.prototype.lerp = function (v, t) {\n\t\tvec3.lerp(this.vec, this.vec, v.vec, t);\n\t\treturn this;\n\t};\n\t\n\t//wrap functions that operate on `this` and another vector\n\t['add', 'cross', 'divide', 'max', 'min', 'multiply', 'subtract'].forEach(function (key) {\n\t\tvar fn = vec3[key];\n\t\tVector.prototype[key] = function (v) {\n\t\t\tfn(this.vec, this.vec, v.vec);\n\t\t\treturn this;\n\t\t};\n\t});\n\t\n\tVector.prototype.length = function () {\n\t\treturn vec3.length(this.vec);\n\t};\n\t\n\tVector.prototype.squaredLength = function () {\n\t\treturn vec3.squaredLength(this.vec);\n\t};\n\t\n\t//wrap functions that return a number based on this and another vector\n\t['distance', 'dot', 'squaredDistance'].forEach(function (key) {\n\t\tvar fn = vec3[key];\n\t\tVector.prototype[key] = function (v) {\n\t\t\treturn fn(this.vec, v.vec);\n\t\t};\n\t});\n\t\n\tVector.fromArray = function (array) {\n\t\treturn new Vector.apply(null, array);\n\t};\n\t\n\tVector.clone = function (v) {\n\t\treturn new Vector(v.x, v.y, v.z);\n\t};\n\t\n\tmodule.exports = Vector;\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved.\n\t\n\tRedistribution and use in source and binary forms, with or without modification,\n\tare permitted provided that the following conditions are met:\n\t\n\t * Redistributions of source code must retain the above copyright notice, this\n\t list of conditions and the following disclaimer.\n\t * Redistributions in binary form must reproduce the above copyright notice,\n\t this list of conditions and the following disclaimer in the documentation \n\t and/or other materials provided with the distribution.\n\t\n\tTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n\tANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n\tWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE \n\tDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n\tANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n\t(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n\tLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n\tANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\t(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n\tSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */\n\t\n\t/**\n\t * @class 3 Dimensional Vector\n\t * @name vec3\n\t */\n\tvar vec3 = {};\n\t\n\tvar GLMAT_ARRAY_TYPE = __webpack_require__(3).GLMAT_ARRAY_TYPE;\n\tvar GLMAT_RANDOM = __webpack_require__(3).GLMAT_RANDOM;\n\t\n\t/**\n\t * Creates a new, empty vec3\n\t *\n\t * @returns {vec3} a new 3D vector\n\t */\n\tvec3.create = function() {\n\t var out = new GLMAT_ARRAY_TYPE(3);\n\t out[0] = 0;\n\t out[1] = 0;\n\t out[2] = 0;\n\t return out;\n\t};\n\t\n\t/**\n\t * Creates a new vec3 initialized with values from an existing vector\n\t *\n\t * @param {vec3} a vector to clone\n\t * @returns {vec3} a new 3D vector\n\t */\n\tvec3.clone = function(a) {\n\t var out = new GLMAT_ARRAY_TYPE(3);\n\t out[0] = a[0];\n\t out[1] = a[1];\n\t out[2] = a[2];\n\t return out;\n\t};\n\t\n\t/**\n\t * Creates a new vec3 initialized with the given values\n\t *\n\t * @param {Number} x X component\n\t * @param {Number} y Y component\n\t * @param {Number} z Z component\n\t * @returns {vec3} a new 3D vector\n\t */\n\tvec3.fromValues = function(x, y, z) {\n\t var out = new GLMAT_ARRAY_TYPE(3);\n\t out[0] = x;\n\t out[1] = y;\n\t out[2] = z;\n\t return out;\n\t};\n\t\n\t/**\n\t * Copy the values from one vec3 to another\n\t *\n\t * @param {vec3} out the receiving vector\n\t * @param {vec3} a the source vector\n\t * @returns {vec3} out\n\t */\n\tvec3.copy = function(out, a) {\n\t out[0] = a[0];\n\t out[1] = a[1];\n\t out[2] = a[2];\n\t return out;\n\t};\n\t\n\t/**\n\t * Set the components of a vec3 to the given values\n\t *\n\t * @param {vec3} out the receiving vector\n\t * @param {Number} x X component\n\t * @param {Number} y Y component\n\t * @param {Number} z Z component\n\t * @returns {vec3} out\n\t */\n\tvec3.set = function(out, x, y, z) {\n\t out[0] = x;\n\t out[1] = y;\n\t out[2] = z;\n\t return out;\n\t};\n\t\n\t/**\n\t * Adds two vec3's\n\t *\n\t * @param {vec3} out the receiving vector\n\t * @param {vec3} a the first operand\n\t * @param {vec3} b the second operand\n\t * @returns {vec3} out\n\t */\n\tvec3.add = function(out, a, b) {\n\t out[0] = a[0] + b[0];\n\t out[1] = a[1] + b[1];\n\t out[2] = a[2] + b[2];\n\t return out;\n\t};\n\t\n\t/**\n\t * Subtracts vector b from vector a\n\t *\n\t * @param {vec3} out the receiving vector\n\t * @param {vec3} a the first operand\n\t * @param {vec3} b the second operand\n\t * @returns {vec3} out\n\t */\n\tvec3.subtract = function(out, a, b) {\n\t out[0] = a[0] - b[0];\n\t out[1] = a[1] - b[1];\n\t out[2] = a[2] - b[2];\n\t return out;\n\t};\n\t\n\t/**\n\t * Alias for {@link vec3.subtract}\n\t * @function\n\t */\n\tvec3.sub = vec3.subtract;\n\t\n\t/**\n\t * Multiplies two vec3's\n\t *\n\t * @param {vec3} out the receiving vector\n\t * @param {vec3} a the first operand\n\t * @param {vec3} b the second operand\n\t * @returns {vec3} out\n\t */\n\tvec3.multiply = function(out, a, b) {\n\t out[0] = a[0] * b[0];\n\t out[1] = a[1] * b[1];\n\t out[2] = a[2] * b[2];\n\t return out;\n\t};\n\t\n\t/**\n\t * Alias for {@link vec3.multiply}\n\t * @function\n\t */\n\tvec3.mul = vec3.multiply;\n\t\n\t/**\n\t * Divides two vec3's\n\t *\n\t * @param {vec3} out the receiving vector\n\t * @param {vec3} a the first operand\n\t * @param {vec3} b the second operand\n\t * @returns {vec3} out\n\t */\n\tvec3.divide = function(out, a, b) {\n\t out[0] = a[0] / b[0];\n\t out[1] = a[1] / b[1];\n\t out[2] = a[2] / b[2];\n\t return out;\n\t};\n\t\n\t/**\n\t * Alias for {@link vec3.divide}\n\t * @function\n\t */\n\tvec3.div = vec3.divide;\n\t\n\t/**\n\t * Returns the minimum of two vec3's\n\t *\n\t * @param {vec3} out the receiving vector\n\t * @param {vec3} a the first operand\n\t * @param {vec3} b the second operand\n\t * @returns {vec3} out\n\t */\n\tvec3.min = function(out, a, b) {\n\t out[0] = Math.min(a[0], b[0]);\n\t out[1] = Math.min(a[1], b[1]);\n\t out[2] = Math.min(a[2], b[2]);\n\t return out;\n\t};\n\t\n\t/**\n\t * Returns the maximum of two vec3's\n\t *\n\t * @param {vec3} out the receiving vector\n\t * @param {vec3} a the first operand\n\t * @param {vec3} b the second operand\n\t * @returns {vec3} out\n\t */\n\tvec3.max = function(out, a, b) {\n\t out[0] = Math.max(a[0], b[0]);\n\t out[1] = Math.max(a[1], b[1]);\n\t out[2] = Math.max(a[2], b[2]);\n\t return out;\n\t};\n\t\n\t/**\n\t * Scales a vec3 by a scalar number\n\t *\n\t * @param {vec3} out the receiving vector\n\t * @param {vec3} a the vector to scale\n\t * @param {Number} b amount to scale the vector by\n\t * @returns {vec3} out\n\t */\n\tvec3.scale = function(out, a, b) {\n\t out[0] = a[0] * b;\n\t out[1] = a[1] * b;\n\t out[2] = a[2] * b;\n\t return out;\n\t};\n\t\n\t/**\n\t * Adds two vec3's after scaling the second operand by a scalar value\n\t *\n\t * @param {vec3} out the receiving vector\n\t * @param {vec3} a the first operand\n\t * @param {vec3} b the second operand\n\t * @param {Number} scale the amount to scale b by before adding\n\t * @returns {vec3} out\n\t */\n\tvec3.scaleAndAdd = function(out, a, b, scale) {\n\t out[0] = a[0] + (b[0] * scale);\n\t out[1] = a[1] + (b[1] * scale);\n\t out[2] = a[2] + (b[2] * scale);\n\t return out;\n\t};\n\t\n\t/**\n\t * Calculates the euclidian distance between two vec3's\n\t *\n\t * @param {vec3} a the first operand\n\t * @param {vec3} b the second operand\n\t * @returns {Number} distance between a and b\n\t */\n\tvec3.distance = function(a, b) {\n\t var x = b[0] - a[0],\n\t y = b[1] - a[1],\n\t z = b[2] - a[2];\n\t return Math.sqrt(x*x + y*y + z*z);\n\t};\n\t\n\t/**\n\t * Alias for {@link vec3.distance}\n\t * @function\n\t */\n\tvec3.dist = vec3.distance;\n\t\n\t/**\n\t * Calculates the squared euclidian distance between two vec3's\n\t *\n\t * @param {vec3} a the first operand\n\t * @param {vec3} b the second operand\n\t * @returns {Number} squared distance between a and b\n\t */\n\tvec3.squaredDistance = function(a, b) {\n\t var x = b[0] - a[0],\n\t y = b[1] - a[1],\n\t z = b[2] - a[2];\n\t return x*x + y*y + z*z;\n\t};\n\t\n\t/**\n\t * Alias for {@link vec3.squaredDistance}\n\t * @function\n\t */\n\tvec3.sqrDist = vec3.squaredDistance;\n\t\n\t/**\n\t * Calculates the length of a vec3\n\t *\n\t * @param {vec3} a vector to calculate length of\n\t * @returns {Number} length of a\n\t */\n\tvec3.length = function (a) {\n\t var x = a[0],\n\t y = a[1],\n\t z = a[2];\n\t return Math.sqrt(x*x + y*y + z*z);\n\t};\n\t\n\t/**\n\t * Alias for {@link vec3.length}\n\t * @function\n\t */\n\tvec3.len = vec3.length;\n\t\n\t/**\n\t * Calculates the squared length of a vec3\n\t *\n\t * @param {vec3} a vector to calculate squared length of\n\t * @returns {Number} squared length of a\n\t */\n\tvec3.squaredLength = function (a) {\n\t var x = a[0],\n\t y = a[1],\n\t z = a[2];\n\t return x*x + y*y + z*z;\n\t};\n\t\n\t/**\n\t * Alias for {@link vec3.squaredLength}\n\t * @function\n\t */\n\tvec3.sqrLen = vec3.squaredLength;\n\t\n\t/**\n\t * Negates the components of a vec3\n\t *\n\t * @param {vec3} out the receiving vector\n\t * @param {vec3} a vector to negate\n\t * @returns {vec3} out\n\t */\n\tvec3.negate = function(out, a) {\n\t out[0] = -a[0];\n\t out[1] = -a[1];\n\t out[2] = -a[2];\n\t return out;\n\t};\n\t\n\t/**\n\t * Normalize a vec3\n\t *\n\t * @param {vec3} out the receiving vector\n\t * @param {vec3} a vector to normalize\n\t * @returns {vec3} out\n\t */\n\tvec3.normalize = function(out, a) {\n\t var x = a[0],\n\t y = a[1],\n\t z = a[2];\n\t var len = x*x + y*y + z*z;\n\t if (len > 0) {\n\t //TODO: evaluate use of glm_invsqrt here?\n\t len = 1 / Math.sqrt(len);\n\t out[0] = a[0] * len;\n\t out[1] = a[1] * len;\n\t out[2] = a[2] * len;\n\t }\n\t return out;\n\t};\n\t\n\t/**\n\t * Calculates the dot product of two vec3's\n\t *\n\t * @param {vec3} a the first operand\n\t * @param {vec3} b the second operand\n\t * @returns {Number} dot product of a and b\n\t */\n\tvec3.dot = function (a, b) {\n\t return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n\t};\n\t\n\t/**\n\t * Computes the cross product of two vec3's\n\t *\n\t * @param {vec3} out the receiving vector\n\t * @param {vec3} a the first operand\n\t * @param {vec3} b the second operand\n\t * @returns {vec3} out\n\t */\n\tvec3.cross = function(out, a, b) {\n\t var ax = a[0], ay = a[1], az = a[2],\n\t bx = b[0], by = b[1], bz = b[2];\n\t\n\t out[0] = ay * bz - az * by;\n\t out[1] = az * bx - ax * bz;\n\t out[2] = ax * by - ay * bx;\n\t return out;\n\t};\n\t\n\t/**\n\t * Performs a linear interpolation between two vec3's\n\t *\n\t * @param {vec3} out the receiving vector\n\t * @param {vec3} a the first operand\n\t * @param {vec3} b the second operand\n\t * @param {Number} t interpolation amount between the two inputs\n\t * @returns {vec3} out\n\t */\n\tvec3.lerp = function (out, a, b, t) {\n\t var ax = a[0],\n\t ay = a[1],\n\t az = a[2];\n\t out[0] = ax + t * (b[0] - ax);\n\t out[1] = ay + t * (b[1] - ay);\n\t out[2] = az + t * (b[2] - az);\n\t return out;\n\t};\n\t\n\t/**\n\t * Generates a random vector with the given scale\n\t *\n\t * @param {vec3} out the receiving vector\n\t * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\n\t * @returns {vec3} out\n\t */\n\tvec3.random = function (out, scale) {\n\t scale = scale || 1.0;\n\t\n\t var r = GLMAT_RANDOM() * 2.0 * Math.PI;\n\t var z = (GLMAT_RANDOM() * 2.0) - 1.0;\n\t var zScale = Math.sqrt(1.0-z*z) * scale;\n\t\n\t out[0] = Math.cos(r) * zScale;\n\t out[1] = Math.sin(r) * zScale;\n\t out[2] = z * scale;\n\t return out;\n\t};\n\t\n\t/**\n\t * Transforms the vec3 with a mat4.\n\t * 4th vector component is implicitly '1'\n\t *\n\t * @param {vec3} out the receiving vector\n\t * @param {vec3} a the vector to transform\n\t * @param {mat4} m matrix to transform with\n\t * @returns {vec3} out\n\t */\n\tvec3.transformMat4 = function(out, a, m) {\n\t var x = a[0], y = a[1], z = a[2];\n\t out[0] = m[0] * x + m[4] * y + m[8] * z + m[12];\n\t out[1] = m[1] * x + m[5] * y + m[9] * z + m[13];\n\t out[2] = m[2] * x + m[6] * y + m[10] * z + m[14];\n\t return out;\n\t};\n\t\n\t/**\n\t * Transforms the vec3 with a mat3.\n\t *\n\t * @param {vec3} out the receiving vector\n\t * @param {vec3} a the vector to transform\n\t * @param {mat4} m the 3x3 matrix to transform with\n\t * @returns {vec3} out\n\t */\n\tvec3.transformMat3 = function(out, a, m) {\n\t var x = a[0], y = a[1], z = a[2];\n\t out[0] = x * m[0] + y * m[3] + z * m[6];\n\t out[1] = x * m[1] + y * m[4] + z * m[7];\n\t out[2] = x * m[2] + y * m[5] + z * m[8];\n\t return out;\n\t};\n\t\n\t/**\n\t * Transforms the vec3 with a quat\n\t *\n\t * @param {vec3} out the receiving vector\n\t * @param {vec3} a the vector to transform\n\t * @param {quat} q quaternion to transform with\n\t * @returns {vec3} out\n\t */\n\tvec3.transformQuat = function(out, a, q) {\n\t // benchmarks: http://jsperf.com/quaternion-transform-vec3-implementations\n\t\n\t var x = a[0], y = a[1], z = a[2],\n\t qx = q[0], qy = q[1], qz = q[2], qw = q[3],\n\t\n\t // calculate quat * vec\n\t ix = qw * x + qy * z - qz * y,\n\t iy = qw * y + qz * x - qx * z,\n\t iz = qw * z + qx * y - qy * x,\n\t iw = -qx * x - qy * y - qz * z;\n\t\n\t // calculate result * inverse quat\n\t out[0] = ix * qw + iw * -qx + iy * -qz - iz * -qy;\n\t out[1] = iy * qw + iw * -qy + iz * -qx - ix * -qz;\n\t out[2] = iz * qw + iw * -qz + ix * -qy - iy * -qx;\n\t return out;\n\t};\n\t\n\t/*\n\t* Rotate a 3D vector around the x-axis\n\t* @param {vec3} out The receiving vec3\n\t* @param {vec3} a The vec3 point to rotate\n\t* @param {vec3} b The origin of the rotation\n\t* @param {Number} c The angle of rotation\n\t* @returns {vec3} out\n\t*/\n\tvec3.rotateX = function(out, a, b, c){\n\t var p = [], r=[];\n\t\t //Translate point to the origin\n\t\t p[0] = a[0] - b[0];\n\t\t p[1] = a[1] - b[1];\n\t \tp[2] = a[2] - b[2];\n\t\n\t\t //perform rotation\n\t\t r[0] = p[0];\n\t\t r[1] = p[1]*Math.cos(c) - p[2]*Math.sin(c);\n\t\t r[2] = p[1]*Math.sin(c) + p[2]*Math.cos(c);\n\t\n\t\t //translate to correct position\n\t\t out[0] = r[0] + b[0];\n\t\t out[1] = r[1] + b[1];\n\t\t out[2] = r[2] + b[2];\n\t\n\t \treturn out;\n\t};\n\t\n\t/*\n\t* Rotate a 3D vector around the y-axis\n\t* @param {vec3} out The receiving vec3\n\t* @param {vec3} a The vec3 point to rotate\n\t* @param {vec3} b The origin of the rotation\n\t* @param {Number} c The angle of rotation\n\t* @returns {vec3} out\n\t*/\n\tvec3.rotateY = function(out, a, b, c){\n\t \tvar p = [], r=[];\n\t \t//Translate point to the origin\n\t \tp[0] = a[0] - b[0];\n\t \tp[1] = a[1] - b[1];\n\t \tp[2] = a[2] - b[2];\n\t \n\t \t//perform rotation\n\t \tr[0] = p[2]*Math.sin(c) + p[0]*Math.cos(c);\n\t \tr[1] = p[1];\n\t \tr[2] = p[2]*Math.cos(c) - p[0]*Math.sin(c);\n\t \n\t \t//translate to correct position\n\t \tout[0] = r[0] + b[0];\n\t \tout[1] = r[1] + b[1];\n\t \tout[2] = r[2] + b[2];\n\t \n\t \treturn out;\n\t};\n\t\n\t/*\n\t* Rotate a 3D vector around the z-axis\n\t* @param {vec3} out The receiving vec3\n\t* @param {vec3} a The vec3 point to rotate\n\t* @param {vec3} b The origin of the rotation\n\t* @param {Number} c The angle of rotation\n\t* @returns {vec3} out\n\t*/\n\tvec3.rotateZ = function(out, a, b, c){\n\t \tvar p = [], r=[];\n\t \t//Translate point to the origin\n\t \tp[0] = a[0] - b[0];\n\t \tp[1] = a[1] - b[1];\n\t \tp[2] = a[2] - b[2];\n\t \n\t \t//perform rotation\n\t \tr[0] = p[0]*Math.cos(c) - p[1]*Math.sin(c);\n\t \tr[1] = p[0]*Math.sin(c) + p[1]*Math.cos(c);\n\t \tr[2] = p[2];\n\t \n\t \t//translate to correct position\n\t \tout[0] = r[0] + b[0];\n\t \tout[1] = r[1] + b[1];\n\t \tout[2] = r[2] + b[2];\n\t \n\t \treturn out;\n\t};\n\t\n\t/**\n\t * Perform some operation over an array of vec3s.\n\t *\n\t * @param {Array} a the array of vectors to iterate over\n\t * @param {Number} stride Number of elements between the start of each vec3. If 0 assumes tightly packed\n\t * @param {Number} offset Number of elements to skip at the beginning of the array\n\t * @param {Number} count Number of vec3s to iterate over. If 0 iterates over entire array\n\t * @param {Function} fn Function to call for each vector in the array\n\t * @param {Object} [arg] additional argument to pass to fn\n\t * @returns {Array} a\n\t * @function\n\t */\n\tvec3.forEach = (function() {\n\t var vec = vec3.create();\n\t\n\t return function(a, stride, offset, count, fn, arg) {\n\t var i, l;\n\t if(!stride) {\n\t stride = 3;\n\t }\n\t\n\t if(!offset) {\n\t offset = 0;\n\t }\n\t \n\t if(count) {\n\t l = Math.min((count * stride) + offset, a.length);\n\t } else {\n\t l = a.length;\n\t }\n\t\n\t for(i = offset; i < l; i += stride) {\n\t vec[0] = a[i]; vec[1] = a[i+1]; vec[2] = a[i+2];\n\t fn(vec, vec, arg);\n\t a[i] = vec[0]; a[i+1] = vec[1]; a[i+2] = vec[2];\n\t }\n\t \n\t return a;\n\t };\n\t})();\n\t\n\t/**\n\t * Returns a string representation of a vector\n\t *\n\t * @param {vec3} vec vector to represent as a string\n\t * @returns {String} string representation of the vector\n\t */\n\tvec3.str = function (a) {\n\t return 'vec3(' + a[0] + ', ' + a[1] + ', ' + a[2] + ')';\n\t};\n\t\n\tmodule.exports = vec3;\n\t\n\n\n/***/ },\n/* 3 */\n/***/ function(module, exports) {\n\n\t/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved.\n\t\n\tRedistribution and use in source and binary forms, with or without modification,\n\tare permitted provided that the following conditions are met:\n\t\n\t * Redistributions of source code must retain the above copyright notice, this\n\t list of conditions and the following disclaimer.\n\t * Redistributions in binary form must reproduce the above copyright notice,\n\t this list of conditions and the following disclaimer in the documentation \n\t and/or other materials provided with the distribution.\n\t\n\tTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n\tANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n\tWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE \n\tDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n\tANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n\t(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n\tLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n\tANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\t(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n\tSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */\n\t\n\tif(!GLMAT_EPSILON) {\n\t var GLMAT_EPSILON = 0.000001;\n\t}\n\t\n\tif(!GLMAT_ARRAY_TYPE) {\n\t var GLMAT_ARRAY_TYPE = (typeof Float32Array !== 'undefined') ? Float32Array : Array;\n\t}\n\t\n\tif(!GLMAT_RANDOM) {\n\t var GLMAT_RANDOM = Math.random;\n\t}\n\t\n\t/**\n\t * @class Common utilities\n\t * @name glMatrix\n\t */\n\tvar glMatrix = {};\n\t\n\t/**\n\t * Sets the type of array used when creating new vectors and matricies\n\t *\n\t * @param {Type} type Array type, such as Float32Array or Array\n\t */\n\tglMatrix.setMatrixArrayType = function(type) {\n\t GLMAT_ARRAY_TYPE = type;\n\t}\n\t\n\t\n\tvar degree = Math.PI / 180;\n\t\n\t/**\n\t* Convert Degree To Radian\n\t*\n\t* @param {Number} Angle in Degrees\n\t*/\n\tglMatrix.toRadian = function(a){\n\t return a * degree;\n\t}\n\t\n\tmodule.exports = {\n\t GLMAT_EPSILON : GLMAT_EPSILON,\n\t GLMAT_ARRAY_TYPE : GLMAT_ARRAY_TYPE,\n\t GLMAT_RANDOM : GLMAT_RANDOM,\n\t glMatrix : glMatrix\n\t};\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\tvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\t\n\tfunction ToObject(val) {\n\t\tif (val == null) {\n\t\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t\t}\n\t\n\t\treturn Object(val);\n\t}\n\t\n\tfunction ownEnumerableKeys(obj) {\n\t\tvar keys = Object.getOwnPropertyNames(obj);\n\t\n\t\tif (Object.getOwnPropertySymbols) {\n\t\t\tkeys = keys.concat(Object.getOwnPropertySymbols(obj));\n\t\t}\n\t\n\t\treturn keys.filter(function (key) {\n\t\t\treturn propIsEnumerable.call(obj, key);\n\t\t});\n\t}\n\t\n\tmodule.exports = Object.assign || function (target, source) {\n\t\tvar from;\n\t\tvar keys;\n\t\tvar to = ToObject(target);\n\t\n\t\tfor (var s = 1; s < arguments.length; s++) {\n\t\t\tfrom = arguments[s];\n\t\t\tkeys = ownEnumerableKeys(Object(from));\n\t\n\t\t\tfor (var i = 0; i < keys.length; i++) {\n\t\t\t\tto[keys[i]] = from[keys[i]];\n\t\t\t}\n\t\t}\n\t\n\t\treturn to;\n\t};\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar d = __webpack_require__(6)\n\t , callable = __webpack_require__(19)\n\t\n\t , apply = Function.prototype.apply, call = Function.prototype.call\n\t , create = Object.create, defineProperty = Object.defineProperty\n\t , defineProperties = Object.defineProperties\n\t , hasOwnProperty = Object.prototype.hasOwnProperty\n\t , descriptor = { configurable: true, enumerable: false, writable: true }\n\t\n\t , on, once, off, emit, methods, descriptors, base;\n\t\n\ton = function (type, listener) {\n\t\tvar data;\n\t\n\t\tcallable(listener);\n\t\n\t\tif (!hasOwnProperty.call(this, '__ee__')) {\n\t\t\tdata = descriptor.value = create(null);\n\t\t\tdefineProperty(this, '__ee__', descriptor);\n\t\t\tdescriptor.value = null;\n\t\t} else {\n\t\t\tdata = this.__ee__;\n\t\t}\n\t\tif (!data[type]) data[type] = listener;\n\t\telse if (typeof data[type] === 'object') data[type].push(listener);\n\t\telse data[type] = [data[type], listener];\n\t\n\t\treturn this;\n\t};\n\t\n\tonce = function (type, listener) {\n\t\tvar once, self;\n\t\n\t\tcallable(listener);\n\t\tself = this;\n\t\ton.call(this, type, once = function () {\n\t\t\toff.call(self, type, once);\n\t\t\tapply.call(listener, this, arguments);\n\t\t});\n\t\n\t\tonce.__eeOnceListener__ = listener;\n\t\treturn this;\n\t};\n\t\n\toff = function (type, listener) {\n\t\tvar data, listeners, candidate, i;\n\t\n\t\tcallable(listener);\n\t\n\t\tif (!hasOwnProperty.call(this, '__ee__')) return this;\n\t\tdata = this.__ee__;\n\t\tif (!data[type]) return this;\n\t\tlisteners = data[type];\n\t\n\t\tif (typeof listeners === 'object') {\n\t\t\tfor (i = 0; (candidate = listeners[i]); ++i) {\n\t\t\t\tif ((candidate === listener) ||\n\t\t\t\t\t\t(candidate.__eeOnceListener__ === listener)) {\n\t\t\t\t\tif (listeners.length === 2) data[type] = listeners[i ? 0 : 1];\n\t\t\t\t\telse listeners.splice(i, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif ((listeners === listener) ||\n\t\t\t\t\t(listeners.__eeOnceListener__ === listener)) {\n\t\t\t\tdelete data[type];\n\t\t\t}\n\t\t}\n\t\n\t\treturn this;\n\t};\n\t\n\temit = function (type) {\n\t\tvar i, l, listener, listeners, args;\n\t\n\t\tif (!hasOwnProperty.call(this, '__ee__')) return;\n\t\tlisteners = this.__ee__[type];\n\t\tif (!listeners) return;\n\t\n\t\tif (typeof listeners === 'object') {\n\t\t\tl = arguments.length;\n\t\t\targs = new Array(l - 1);\n\t\t\tfor (i = 1; i < l; ++i) args[i - 1] = arguments[i];\n\t\n\t\t\tlisteners = listeners.slice();\n\t\t\tfor (i = 0; (listener = listeners[i]); ++i) {\n\t\t\t\tapply.call(listener, this, args);\n\t\t\t}\n\t\t} else {\n\t\t\tswitch (arguments.length) {\n\t\t\tcase 1:\n\t\t\t\tcall.call(listeners, this);\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\tcall.call(listeners, this, arguments[1]);\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\tcall.call(listeners, this, arguments[1], arguments[2]);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tl = arguments.length;\n\t\t\t\targs = new Array(l - 1);\n\t\t\t\tfor (i = 1; i < l; ++i) {\n\t\t\t\t\targs[i - 1] = arguments[i];\n\t\t\t\t}\n\t\t\t\tapply.call(listeners, this, args);\n\t\t\t}\n\t\t}\n\t};\n\t\n\tmethods = {\n\t\ton: on,\n\t\tonce: once,\n\t\toff: off,\n\t\temit: emit\n\t};\n\t\n\tdescriptors = {\n\t\ton: d(on),\n\t\tonce: d(once),\n\t\toff: d(off),\n\t\temit: d(emit)\n\t};\n\t\n\tbase = defineProperties({}, descriptors);\n\t\n\tmodule.exports = exports = function (o) {\n\t\treturn (o == null) ? create(base) : defineProperties(Object(o), descriptors);\n\t};\n\texports.methods = methods;\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar assign = __webpack_require__(7)\n\t , normalizeOpts = __webpack_require__(14)\n\t , isCallable = __webpack_require__(15)\n\t , contains = __webpack_require__(16)\n\t\n\t , d;\n\t\n\td = module.exports = function (dscr, value/*, options*/) {\n\t\tvar c, e, w, options, desc;\n\t\tif ((arguments.length < 2) || (typeof dscr !== 'string')) {\n\t\t\toptions = value;\n\t\t\tvalue = dscr;\n\t\t\tdscr = null;\n\t\t} else {\n\t\t\toptions = arguments[2];\n\t\t}\n\t\tif (dscr == null) {\n\t\t\tc = w = true;\n\t\t\te = false;\n\t\t} else {\n\t\t\tc = contains.call(dscr, 'c');\n\t\t\te = contains.call(dscr, 'e');\n\t\t\tw = contains.call(dscr, 'w');\n\t\t}\n\t\n\t\tdesc = { value: value, configurable: c, enumerable: e, writable: w };\n\t\treturn !options ? desc : assign(normalizeOpts(options), desc);\n\t};\n\t\n\td.gs = function (dscr, get, set/*, options*/) {\n\t\tvar c, e, options, desc;\n\t\tif (typeof dscr !== 'string') {\n\t\t\toptions = set;\n\t\t\tset = get;\n\t\t\tget = dscr;\n\t\t\tdscr = null;\n\t\t} else {\n\t\t\toptions = arguments[3];\n\t\t}\n\t\tif (get == null) {\n\t\t\tget = undefined;\n\t\t} else if (!isCallable(get)) {\n\t\t\toptions = get;\n\t\t\tget = set = undefined;\n\t\t} else if (set == null) {\n\t\t\tset = undefined;\n\t\t} else if (!isCallable(set)) {\n\t\t\toptions = set;\n\t\t\tset = undefined;\n\t\t}\n\t\tif (dscr == null) {\n\t\t\tc = true;\n\t\t\te = false;\n\t\t} else {\n\t\t\tc = contains.call(dscr, 'c');\n\t\t\te = contains.call(dscr, 'e');\n\t\t}\n\t\n\t\tdesc = { get: get, set: set, configurable: c, enumerable: e };\n\t\treturn !options ? desc : assign(normalizeOpts(options), desc);\n\t};\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tmodule.exports = __webpack_require__(8)()\n\t\t? Object.assign\n\t\t: __webpack_require__(9);\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tmodule.exports = function () {\n\t\tvar assign = Object.assign, obj;\n\t\tif (typeof assign !== 'function') return false;\n\t\tobj = { foo: 'raz' };\n\t\tassign(obj, { bar: 'dwa' }, { trzy: 'trzy' });\n\t\treturn (obj.foo + obj.bar + obj.trzy) === 'razdwatrzy';\n\t};\n\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar keys = __webpack_require__(10)\n\t , value = __webpack_require__(13)\n\t\n\t , max = Math.max;\n\t\n\tmodule.exports = function (dest, src/*, …srcn*/) {\n\t\tvar error, i, l = max(arguments.length, 2), assign;\n\t\tdest = Object(value(dest));\n\t\tassign = function (key) {\n\t\t\ttry { dest[key] = src[key]; } catch (e) {\n\t\t\t\tif (!error) error = e;\n\t\t\t}\n\t\t};\n\t\tfor (i = 1; i < l; ++i) {\n\t\t\tsrc = arguments[i];\n\t\t\tkeys(src).forEach(assign);\n\t\t}\n\t\tif (error !== undefined) throw error;\n\t\treturn dest;\n\t};\n\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tmodule.exports = __webpack_require__(11)()\n\t\t? Object.keys\n\t\t: __webpack_require__(12);\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tmodule.exports = function () {\n\t\ttry {\n\t\t\tObject.keys('primitive');\n\t\t\treturn true;\n\t\t} catch (e) { return false; }\n\t};\n\n\n/***/ },\n/* 12 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tvar keys = Object.keys;\n\t\n\tmodule.exports = function (object) {\n\t\treturn keys(object == null ? object : Object(object));\n\t};\n\n\n/***/ },\n/* 13 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tmodule.exports = function (value) {\n\t\tif (value == null) throw new TypeError(\"Cannot use null or undefined\");\n\t\treturn value;\n\t};\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tvar forEach = Array.prototype.forEach, create = Object.create;\n\t\n\tvar process = function (src, obj) {\n\t\tvar key;\n\t\tfor (key in src) obj[key] = src[key];\n\t};\n\t\n\tmodule.exports = function (options/*, …options*/) {\n\t\tvar result = create(null);\n\t\tforEach.call(arguments, function (options) {\n\t\t\tif (options == null) return;\n\t\t\tprocess(Object(options), result);\n\t\t});\n\t\treturn result;\n\t};\n\n\n/***/ },\n/* 15 */\n/***/ function(module, exports) {\n\n\t// Deprecated\n\t\n\t'use strict';\n\t\n\tmodule.exports = function (obj) { return typeof obj === 'function'; };\n\n\n/***/ },\n/* 16 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tmodule.exports = __webpack_require__(17)()\n\t\t? String.prototype.contains\n\t\t: __webpack_require__(18);\n\n\n/***/ },\n/* 17 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tvar str = 'razdwatrzy';\n\t\n\tmodule.exports = function () {\n\t\tif (typeof str.contains !== 'function') return false;\n\t\treturn ((str.contains('dwa') === true) && (str.contains('foo') === false));\n\t};\n\n\n/***/ },\n/* 18 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tvar indexOf = String.prototype.indexOf;\n\t\n\tmodule.exports = function (searchString/*, position*/) {\n\t\treturn indexOf.call(this, searchString, arguments[1]) > -1;\n\t};\n\n\n/***/ },\n/* 19 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tmodule.exports = function (fn) {\n\t\tif (typeof fn !== 'function') throw new TypeError(fn + \" is not a function\");\n\t\treturn fn;\n\t};\n\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** dolly.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 27b1d2d8b849a9002443\n **/","'use strict';\n\n//dependencies\nvar Vector = require('./vector');\nvar assign = require('object-assign'); //todo: use babel\nvar eventEmitter = require('event-emitter');\n\nvar propId = 0;\n\n//scratch vectors so we don't have to re-allocate all the time (too slow)\nvar scratch = new Vector();\nvar totalWeight = new Vector();\n\nfunction makeVector(arg) {\n\tfunction V() {\n\t\treturn Vector.apply(this, arg);\n\t}\n\n\tif (typeof arg === 'number') {\n\t\treturn new Vector(arg, arg, arg);\n\t}\n\n\tif (Array.isArray(arg)) {\n\t\tV.prototype = Vector.prototype;\n\t\treturn new V();\n\t}\n\n\tif (arg instanceof Vector) {\n\t\treturn Vector.clone(arg);\n\t}\n\n\tif (arg && typeof arg === 'object') {\n\t\treturn new Vector(arg.x || 0, arg.y || 0, arg.z || 0);\n\t}\n\n\treturn new Vector();\n}\n\nfunction safeDivide(a, b) {\n\tvar va = a.vec,\n\t\tvb = b.vec,\n\t\ti,\n\t\tdenom;\n\tfor (i = 0; i <3; i++) {\n\t\tdenom = vb[i];\n\t\tif (denom) {\n\t\t\tva[i] = va[i] / denom;\n\t\t}\n\t}\n}\n\nfunction Prop(opts) {\n\tvar options = opts || {};\n\n\tthis.lastUpdate = -1;\n\tthis.id = propId++;\n\n\tthis.name = options.name || 'prop' + this.id;\n\n\tthis.position = makeVector(options.position);\n\tthis.minBounds = makeVector(options.minBounds === undefined ? -Infinity : options.minBounds);\n\tthis.maxBounds = makeVector(options.maxBounds === undefined ? Infinity : options.maxBounds);\n\tthis.lag = typeof options.lag === 'number' && !isNaN(options.lag) ? options.lag : 0;\n\tthis.maxSpeed = typeof options.maxSpeed === 'number' && !isNaN(options.maxSpeed) ? options.maxSpeed : Infinity;\n\n\tthis.goal = new Vector();\n\tthis.attractorGoal = new Vector();\n\tthis.velocity = new Vector();\n\tthis.lastPosition = Vector.clone(this.position);\n\tthis.targets = [];\n\tthis.attractors = [];\n\n\teventEmitter(this);\n}\n\nProp.prototype.follow = function (prop, options) {\n\tvar target;\n\tvar self = this;\n\tvar weight;\n\n\tif (Array.isArray(prop)) {\n\t\tprop.forEach(function (p) {\n\t\t\tself.follow(p, options);\n\t\t});\n\t\treturn;\n\t}\n\n\tif (!(prop instanceof Prop)) {\n\t\tthrow new Error('Attempt to follow object that is not a Prop');\n\t}\n\n\tweight = options && options.weight;\n\tif (weight === undefined || isNaN(weight) && typeof weight === 'number') {\n\t\tweight = 1;\n\t}\n\n\ttarget = assign(\n\t\t{\n\t\t\tradius: 0,\n\t\t\t// minDistance: 0, //not implemented yet\n\t\t\t// maxDistance: Infinity, //not implemented yet\n\t\t\tweight: 1\n\t\t},\n\t\toptions,\n\t\t{\n\t\t\tprop: prop,\n\t\t\tweight: makeVector(weight),\n\t\t\toffset: makeVector(options && options.offset),\n\t\t\toffsetPosition: new Vector()\n\t\t}\n\t);\n\n\tthis.targets.push(target);\n\n\treturn this;\n};\n\nProp.prototype.attract = function (prop, subject, options) {\n\tvar attractor;\n\tvar self = this;\n\n\tif (Array.isArray(prop)) {\n\t\tprop.forEach(function (p) {\n\t\t\tself.attract(p, options);\n\t\t});\n\t\treturn;\n\t}\n\n\tif (!(prop instanceof Prop) || !(subject instanceof Prop)) {\n\t\tthrow new Error('Attempt to follow object that is not a Prop');\n\t}\n\n\tattractor = assign(\n\t\t{\n\t\t\tinnerRadius: 0,\n\t\t\touterRadius: 0,\n\t\t\tweight: 1\n\t\t},\n\t\toptions,\n\t\t{\n\t\t\tprop: prop, //the object that moves\n\t\t\tsubject: subject, //the point of interest\n\t\t\toffset: makeVector(options && options.offset),\n\t\t\toffsetPosition: new Vector(),\n\t\t\tattraction: 0\n\t\t}\n\t);\n\n\tthis.attractors.push(attractor);\n\n\treturn this;\n};\n\nProp.prototype.update = function (delta, tick) {\n\tvar totalAttractionWeight = 0;\n\tvar totalAttraction = 0;\n\n\t//prevent infinite loops if follower graph is cyclical\n\tif (this.lastUpdate >= tick || tick === undefined) {\n\t\treturn;\n\t}\n\n\tthis.lastUpdate = tick;\n\n\tthis.lastPosition.copyVector(this.position);\n\n\tthis.emit('updatestart', this.position);\n\n\tif (!this.targets.length && !this.attractors.length) {\n\t\treturn;\n\t}\n\n\tthis.attractorGoal.zero();\n\tthis.attractors.forEach((attractor) => {\n\t\tvar distance;\n\t\tvar attraction = 0;\n\t\tvar lastAttraction = attractor.attraction;\n\n\t\tattractor.prop.update(delta, tick);\n\t\tattractor.subject.update(delta, tick);\n\n\t\tdistance = attractor.prop.position.distance(attractor.subject.position);\n\t\tif (distance < attractor.outerRadius) {\n\t\t\tattraction = Math.min(1, (attractor.outerRadius - distance) / (attractor.outerRadius - attractor.innerRadius));\n\t\t\ttotalAttraction = Math.max(totalAttraction, attraction * attractor.weight);\n\t\t\ttotalAttractionWeight += attractor.weight;\n\n\t\t\tattractor.offsetPosition.copyVector(attractor.subject.position).add(attractor.offset);\n\t\t\tthis.attractorGoal.scaleAndAdd(attractor.offsetPosition, attractor.weight);\n\n\t\t\tattractor.attraction = attraction;\n\t\t\tif (!lastAttraction) {\n\t\t\t\tthis.emit('enterattractor', attractor.prop, attractor.subject, attraction);\n\t\t\t} else if (lastAttraction !== attraction) {\n\t\t\t\tthis.emit('moveattractor', attractor.prop, attractor.subject, attraction);\n\t\t\t}\n\t\t} else if (attractor.attraction) {\n\t\t\tattractor.attraction = attraction;\n\t\t\tthis.emit('leaveattractor', attractor.prop, attractor.subject);\n\t\t}\n\t});\n\tif (totalAttractionWeight) {\n\t\tthis.attractorGoal.scale(1 / totalAttractionWeight);\n\t}\n\n\ttotalWeight.zero();\n\tthis.goal.zero();\n\tif (totalAttraction < 1) {\n\t\tthis.targets.forEach((target) => {\n\t\t\tvar distance;\n\n\t\t\ttarget.prop.update(delta, tick);\n\n\t\t\ttarget.offsetPosition.copyVector(target.prop.position).add(target.offset);\n\n\t\t\tscratch.copyVector(target.offsetPosition).subtract(this.position); //vector towards target\n\n\t\t\ttarget.offsetPosition.copyVector(this.position);\n\t\t\tdistance = scratch.length();\n\t\t\tif (distance > target.radius) {\n\t\t\t\tscratch.normalize().scale(distance - target.radius);\n\t\t\t\ttarget.offsetPosition.add(scratch);\n\t\t\t}\n\n\t\t\ttarget.offsetPosition.multiply(target.weight);\n\t\t\tthis.goal.add(target.offsetPosition);\n\t\t\ttotalWeight.add(target.weight);\n\t\t});\n\t\tif (totalWeight.length()) {\n\t\t\tsafeDivide(this.goal, totalWeight);\n\t\t}\n\t\tif (totalAttraction) {\n\t\t\tthis.goal.lerp(this.attractorGoal, totalAttraction);\n\t\t}\n\t} else {\n\t\tthis.goal.copyVector(this.attractorGoal);\n\t}\n\n\tthis.velocity.copyVector(this.goal).subtract(this.position);\n\tif (this.lag) {\n\t\tthis.velocity.scale(Math.pow(delta, this.lag));\n\t}\n\n\t//cap velocity to maxSpeed\n\tif (this.maxSpeed && this.maxSpeed < Infinity && this.maxSpeed < this.velocity.length()) {\n\t\tthis.velocity.normalize().scale(this.maxSpeed);\n\t}\n\n\tthis.emit('update', this.position, this.velocity);\n\n\tthis.position.add(this.velocity);\n\n\t//fit within bounds\n\tthis.position.min(this.maxBounds).max(this.minBounds);\n\n\tthis.emit('updated', this.position);\n\n\treturn this;\n};\n\nProp.prototype.active = function (epsilon) {\n\treturn this.position.distance(this.lastPosition) > (epsilon || 0.00001);\n};\n\nfunction Dolly() {\n\tvar tick = -1;\n\tvar props = [];\n\tvar updating = false;\n\tvar self = this;\n\n\tthis.update = function (delta) {\n\t\tif (updating) {\n\t\t\treturn;\n\t\t}\n\t\tupdating = true;\n\n\t\ttick++;\n\t\tprops.forEach(function (prop) {\n\t\t\tprop.update(delta, tick);\n\t\t});\n\n\t\tupdating = false;\n\n\t\treturn self;\n\t};\n\n\tthis.prop = function (options) {\n\t\tvar prop = new Prop(options);\n\t\tprops.push(prop);\n\t\treturn prop;\n\t};\n\n\tthis.active = function (epsilon) {\n\t\tvar i;\n\t\tfor (i = 0; i < props.length; i++) {\n\t\t\tif (props[i].active(epsilon)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n}\n\nmodule.exports = Dolly;\n\n\n/** WEBPACK FOOTER **\n ** ./~/jshint-loader!./src/index.js\n **/","'use strict';\n\n//dependencies\nvar vec3 = require('gl-matrix-vec3');\n\nfunction Vector(x, y, z) {\n\tthis.vec = vec3.fromValues(x || 0, y || 0, z || 0);\n\n\tObject.defineProperties(this, {\n\t\tx: {\n\t\t\twriteable: true,\n\t\t\tenumerable: true,\n\t\t\tget: () => this.vec[0],\n\t\t\tset: (val) => this.vec[0] = val\n\t\t},\n\t\ty: {\n\t\t\twriteable: true,\n\t\t\tenumerable: true,\n\t\t\tget: () => this.vec[1],\n\t\t\tset: (val) => this.vec[1] = val\n\t\t},\n\t\tz: {\n\t\t\twriteable: true,\n\t\t\tenumerable: true,\n\t\t\tget: () => this.vec[2],\n\t\t\tset: (val) => this.vec[2] = val\n\t\t}\n\t});\n}\n\nVector.prototype.toString = function() {\n\treturn vec3.str(this.vec);\n};\n\nVector.prototype.clone = function (v) {\n\treturn new Vector(v.x, v.y, v.z);\n};\n\nVector.prototype.copy = function (v) {\n\tif (v instanceof Vector) {\n\t\tvec3.copy(this.vec, v.vec);\n\t} else if (typeof v === 'object' && v) {\n\t\tthis.set(v.x || 0, v.y || 0, v.z || 0);\n\t}\n\treturn this;\n};\n\nVector.prototype.copyVector = function (v) {\n\tvec3.copy(this.vec, v.vec);\n\treturn this;\n};\n\nVector.prototype.zero = function () {\n\tvec3.set(this.vec, 0, 0, 0);\n\treturn this;\n};\n\nVector.prototype.set = function (x, y, z) {\n\tvec3.set(this.vec, x, y, z);\n\treturn this;\n};\n\nVector.prototype.negate = function () {\n\tvec3.negate(this.vec, this.vec);\n\treturn this;\n};\n\nVector.prototype.normalize = function () {\n\tvec3.normalize(this.vec, this.vec);\n\treturn this;\n};\n\nVector.prototype.scale = function (scale) {\n\tvec3.scale(this.vec, this.vec, scale);\n\treturn this;\n};\n\nVector.prototype.scaleAndAdd = function (v, scale) {\n\tvec3.scaleAndAdd(this.vec, this.vec, v.vec, scale);\n\treturn this;\n};\n\nVector.prototype.lerp = function (v, t) {\n\tvec3.lerp(this.vec, this.vec, v.vec, t);\n\treturn this;\n};\n\n//wrap functions that operate on `this` and another vector\n[\n\t'add',\n\t'cross',\n\t'divide',\n\t'max',\n\t'min',\n\t'multiply',\n\t'subtract'\n].forEach(function (key) {\n\tvar fn = vec3[key];\n\tVector.prototype[key] = function (v) {\n\t\tfn(this.vec, this.vec, v.vec);\n\t\treturn this;\n\t};\n});\n\nVector.prototype.length = function () {\n\treturn vec3.length(this.vec);\n};\n\nVector.prototype.squaredLength = function () {\n\treturn vec3.squaredLength(this.vec);\n};\n\n//wrap functions that return a number based on this and another vector\n[\n\t'distance',\n\t'dot',\n\t'squaredDistance'\n].forEach(function (key) {\n\tvar fn = vec3[key];\n\tVector.prototype[key] = function (v) {\n\t\treturn fn(this.vec, v.vec);\n\t};\n});\n\nVector.fromArray = function (array) {\n\treturn new Vector.apply(null, array);\n};\n\nVector.clone = function (v) {\n\treturn new Vector(v.x, v.y, v.z);\n};\n\nmodule.exports = Vector;\n\n\n/** WEBPACK FOOTER **\n ** ./~/jshint-loader!./src/vector.js\n **/","/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation \n and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE \nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */\n\n/**\n * @class 3 Dimensional Vector\n * @name vec3\n */\nvar vec3 = {};\n\nvar GLMAT_ARRAY_TYPE = require('common').GLMAT_ARRAY_TYPE;\nvar GLMAT_RANDOM = require('common').GLMAT_RANDOM;\n\n/**\n * Creates a new, empty vec3\n *\n * @returns {vec3} a new 3D vector\n */\nvec3.create = function() {\n var out = new GLMAT_ARRAY_TYPE(3);\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n return out;\n};\n\n/**\n * Creates a new vec3 initialized with values from an existing vector\n *\n * @param {vec3} a vector to clone\n * @returns {vec3} a new 3D vector\n */\nvec3.clone = function(a) {\n var out = new GLMAT_ARRAY_TYPE(3);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n};\n\n/**\n * Creates a new vec3 initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @returns {vec3} a new 3D vector\n */\nvec3.fromValues = function(x, y, z) {\n var out = new GLMAT_ARRAY_TYPE(3);\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n};\n\n/**\n * Copy the values from one vec3 to another\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the source vector\n * @returns {vec3} out\n */\nvec3.copy = function(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n};\n\n/**\n * Set the components of a vec3 to the given values\n *\n * @param {vec3} out the receiving vector\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @returns {vec3} out\n */\nvec3.set = function(out, x, y, z) {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n};\n\n/**\n * Adds two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nvec3.add = function(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n return out;\n};\n\n/**\n * Subtracts vector b from vector a\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nvec3.subtract = function(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n return out;\n};\n\n/**\n * Alias for {@link vec3.subtract}\n * @function\n */\nvec3.sub = vec3.subtract;\n\n/**\n * Multiplies two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nvec3.multiply = function(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n out[2] = a[2] * b[2];\n return out;\n};\n\n/**\n * Alias for {@link vec3.multiply}\n * @function\n */\nvec3.mul = vec3.multiply;\n\n/**\n * Divides two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nvec3.divide = function(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n out[2] = a[2] / b[2];\n return out;\n};\n\n/**\n * Alias for {@link vec3.divide}\n * @function\n */\nvec3.div = vec3.divide;\n\n/**\n * Returns the minimum of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nvec3.min = function(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n out[2] = Math.min(a[2], b[2]);\n return out;\n};\n\n/**\n * Returns the maximum of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nvec3.max = function(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n out[2] = Math.max(a[2], b[2]);\n return out;\n};\n\n/**\n * Scales a vec3 by a scalar number\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {vec3} out\n */\nvec3.scale = function(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n return out;\n};\n\n/**\n * Adds two vec3's after scaling the second operand by a scalar value\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @param {Number} scale the amount to scale b by before adding\n * @returns {vec3} out\n */\nvec3.scaleAndAdd = function(out, a, b, scale) {\n out[0] = a[0] + (b[0] * scale);\n out[1] = a[1] + (b[1] * scale);\n out[2] = a[2] + (b[2] * scale);\n return out;\n};\n\n/**\n * Calculates the euclidian distance between two vec3's\n *\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {Number} distance between a and b\n */\nvec3.distance = function(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1],\n z = b[2] - a[2];\n return Math.sqrt(x*x + y*y + z*z);\n};\n\n/**\n * Alias for {@link vec3.distance}\n * @function\n */\nvec3.dist = vec3.distance;\n\n/**\n * Calculates the squared euclidian distance between two vec3's\n *\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {Number} squared distance between a and b\n */\nvec3.squaredDistance = function(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1],\n z = b[2] - a[2];\n return x*x + y*y + z*z;\n};\n\n/**\n * Alias for {@link vec3.squaredDistance}\n * @function\n */\nvec3.sqrDist = vec3.squaredDistance;\n\n/**\n * Calculates the length of a vec3\n *\n * @param {vec3} a vector to calculate length of\n * @returns {Number} length of a\n */\nvec3.length = function (a) {\n var x = a[0],\n y = a[1],\n z = a[2];\n return Math.sqrt(x*x + y*y + z*z);\n};\n\n/**\n * Alias for {@link vec3.length}\n * @function\n */\nvec3.len = vec3.length;\n\n/**\n * Calculates the squared length of a vec3\n *\n * @param {vec3} a vector to calculate squared length of\n * @returns {Number} squared length of a\n */\nvec3.squaredLength = function (a) {\n var x = a[0],\n y = a[1],\n z = a[2];\n return x*x + y*y + z*z;\n};\n\n/**\n * Alias for {@link vec3.squaredLength}\n * @function\n */\nvec3.sqrLen = vec3.squaredLength;\n\n/**\n * Negates the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a vector to negate\n * @returns {vec3} out\n */\nvec3.negate = function(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n return out;\n};\n\n/**\n * Normalize a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a vector to normalize\n * @returns {vec3} out\n */\nvec3.normalize = function(out, a) {\n var x = a[0],\n y = a[1],\n z = a[2];\n var len = x*x + y*y + z*z;\n if (len > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len);\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n out[2] = a[2] * len;\n }\n return out;\n};\n\n/**\n * Calculates the dot product of two vec3's\n *\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {Number} dot product of a and b\n */\nvec3.dot = function (a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n};\n\n/**\n * Computes the cross product of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nvec3.cross = function(out, a, b) {\n var ax = a[0], ay = a[1], az = a[2],\n bx = b[0], by = b[1], bz = b[2];\n\n out[0] = ay * bz - az * by;\n out[1] = az * bx - ax * bz;\n out[2] = ax * by - ay * bx;\n return out;\n};\n\n/**\n * Performs a linear interpolation between two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @param {Number} t interpolation amount between the two inputs\n * @returns {vec3} out\n */\nvec3.lerp = function (out, a, b, t) {\n var ax = a[0],\n ay = a[1],\n az = a[2];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n out[2] = az + t * (b[2] - az);\n return out;\n};\n\n/**\n * Generates a random vector with the given scale\n *\n * @param {vec3} out the receiving vector\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\n * @returns {vec3} out\n */\nvec3.random = function (out, scale) {\n scale = scale || 1.0;\n\n var r = GLMAT_RANDOM() * 2.0 * Math.PI;\n var z = (GLMAT_RANDOM() * 2.0) - 1.0;\n var zScale = Math.sqrt(1.0-z*z) * scale;\n\n out[0] = Math.cos(r) * zScale;\n out[1] = Math.sin(r) * zScale;\n out[2] = z * scale;\n return out;\n};\n\n/**\n * Transforms the vec3 with a mat4.\n * 4th vector component is implicitly '1'\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the vector to transform\n * @param {mat4} m matrix to transform with\n * @returns {vec3} out\n */\nvec3.transformMat4 = function(out, a, m) {\n var x = a[0], y = a[1], z = a[2];\n out[0] = m[0] * x + m[4] * y + m[8] * z + m[12];\n out[1] = m[1] * x + m[5] * y + m[9] * z + m[13];\n out[2] = m[2] * x + m[6] * y + m[10] * z + m[14];\n return out;\n};\n\n/**\n * Transforms the vec3 with a mat3.\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the vector to transform\n * @param {mat4} m the 3x3 matrix to transform with\n * @returns {vec3} out\n */\nvec3.transformMat3 = function(out, a, m) {\n var x = a[0], y = a[1], z = a[2];\n out[0] = x * m[0] + y * m[3] + z * m[6];\n out[1] = x * m[1] + y * m[4] + z * m[7];\n out[2] = x * m[2] + y * m[5] + z * m[8];\n return out;\n};\n\n/**\n * Transforms the vec3 with a quat\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the vector to transform\n * @param {quat} q quaternion to transform with\n * @returns {vec3} out\n */\nvec3.transformQuat = function(out, a, q) {\n // benchmarks: http://jsperf.com/quaternion-transform-vec3-implementations\n\n var x = a[0], y = a[1], z = a[2],\n qx = q[0], qy = q[1], qz = q[2], qw = q[3],\n\n // calculate quat * vec\n ix = qw * x + qy * z - qz * y,\n iy = qw * y + qz * x - qx * z,\n iz = qw * z + qx * y - qy * x,\n iw = -qx * x - qy * y - qz * z;\n\n // calculate result * inverse quat\n out[0] = ix * qw + iw * -qx + iy * -qz - iz * -qy;\n out[1] = iy * qw + iw * -qy + iz * -qx - ix * -qz;\n out[2] = iz * qw + iw * -qz + ix * -qy - iy * -qx;\n return out;\n};\n\n/*\n* Rotate a 3D vector around the x-axis\n* @param {vec3} out The receiving vec3\n* @param {vec3} a The vec3 point to rotate\n* @param {vec3} b The origin of the rotation\n* @param {Number} c The angle of rotation\n* @returns {vec3} out\n*/\nvec3.rotateX = function(out, a, b, c){\n var p = [], r=[];\n\t //Translate point to the origin\n\t p[0] = a[0] - b[0];\n\t p[1] = a[1] - b[1];\n \tp[2] = a[2] - b[2];\n\n\t //perform rotation\n\t r[0] = p[0];\n\t r[1] = p[1]*Math.cos(c) - p[2]*Math.sin(c);\n\t r[2] = p[1]*Math.sin(c) + p[2]*Math.cos(c);\n\n\t //translate to correct position\n\t out[0] = r[0] + b[0];\n\t out[1] = r[1] + b[1];\n\t out[2] = r[2] + b[2];\n\n \treturn out;\n};\n\n/*\n* Rotate a 3D vector around the y-axis\n* @param {vec3} out The receiving vec3\n* @param {vec3} a The vec3 point to rotate\n* @param {vec3} b The origin of the rotation\n* @param {Number} c The angle of rotation\n* @returns {vec3} out\n*/\nvec3.rotateY = function(out, a, b, c){\n \tvar p = [], r=[];\n \t//Translate point to the origin\n \tp[0] = a[0] - b[0];\n \tp[1] = a[1] - b[1];\n \tp[2] = a[2] - b[2];\n \n \t//perform rotation\n \tr[0] = p[2]*Math.sin(c) + p[0]*Math.cos(c);\n \tr[1] = p[1];\n \tr[2] = p[2]*Math.cos(c) - p[0]*Math.sin(c);\n \n \t//translate to correct position\n \tout[0] = r[0] + b[0];\n \tout[1] = r[1] + b[1];\n \tout[2] = r[2] + b[2];\n \n \treturn out;\n};\n\n/*\n* Rotate a 3D vector around the z-axis\n* @param {vec3} out The receiving vec3\n* @param {vec3} a The vec3 point to rotate\n* @param {vec3} b The origin of the rotation\n* @param {Number} c The angle of rotation\n* @returns {vec3} out\n*/\nvec3.rotateZ = function(out, a, b, c){\n \tvar p = [], r=[];\n \t//Translate point to the origin\n \tp[0] = a[0] - b[0];\n \tp[1] = a[1] - b[1];\n \tp[2] = a[2] - b[2];\n \n \t//perform rotation\n \tr[0] = p[0]*Math.cos(c) - p[1]*Math.sin(c);\n \tr[1] = p[0]*Math.sin(c) + p[1]*Math.cos(c);\n \tr[2] = p[2];\n \n \t//translate to correct position\n \tout[0] = r[0] + b[0];\n \tout[1] = r[1] + b[1];\n \tout[2] = r[2] + b[2];\n \n \treturn out;\n};\n\n/**\n * Perform some operation over an array of vec3s.\n *\n * @param {Array} a the array of vectors to iterate over\n * @param {Number} stride Number of elements between the start of each vec3. If 0 assumes tightly packed\n * @param {Number} offset Number of elements to skip at the beginning of the array\n * @param {Number} count Number of vec3s to iterate over. If 0 iterates over entire array\n * @param {Function} fn Function to call for each vector in the array\n * @param {Object} [arg] additional argument to pass to fn\n * @returns {Array} a\n * @function\n */\nvec3.forEach = (function() {\n var vec = vec3.create();\n\n return function(a, stride, offset, count, fn, arg) {\n var i, l;\n if(!stride) {\n stride = 3;\n }\n\n if(!offset) {\n offset = 0;\n }\n \n if(count) {\n l = Math.min((count * stride) + offset, a.length);\n } else {\n l = a.length;\n }\n\n for(i = offset; i < l; i += stride) {\n vec[0] = a[i]; vec[1] = a[i+1]; vec[2] = a[i+2];\n fn(vec, vec, arg);\n a[i] = vec[0]; a[i+1] = vec[1]; a[i+2] = vec[2];\n }\n \n return a;\n };\n})();\n\n/**\n * Returns a string representation of a vector\n *\n * @param {vec3} vec vector to represent as a string\n * @returns {String} string representation of the vector\n */\nvec3.str = function (a) {\n return 'vec3(' + a[0] + ', ' + a[1] + ', ' + a[2] + ')';\n};\n\nmodule.exports = vec3;\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/gl-matrix-vec3/index.js\n ** module id = 2\n ** module chunks = 0\n **/","/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation \n and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE \nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */\n\nif(!GLMAT_EPSILON) {\n var GLMAT_EPSILON = 0.000001;\n}\n\nif(!GLMAT_ARRAY_TYPE) {\n var GLMAT_ARRAY_TYPE = (typeof Float32Array !== 'undefined') ? Float32Array : Array;\n}\n\nif(!GLMAT_RANDOM) {\n var GLMAT_RANDOM = Math.random;\n}\n\n/**\n * @class Common utilities\n * @name glMatrix\n */\nvar glMatrix = {};\n\n/**\n * Sets the type of array used when creating new vectors and matricies\n *\n * @param {Type} type Array type, such as Float32Array or Array\n */\nglMatrix.setMatrixArrayType = function(type) {\n GLMAT_ARRAY_TYPE = type;\n}\n\n\nvar degree = Math.PI / 180;\n\n/**\n* Convert Degree To Radian\n*\n* @param {Number} Angle in Degrees\n*/\nglMatrix.toRadian = function(a){\n return a * degree;\n}\n\nmodule.exports = {\n GLMAT_EPSILON : GLMAT_EPSILON,\n GLMAT_ARRAY_TYPE : GLMAT_ARRAY_TYPE,\n GLMAT_RANDOM : GLMAT_RANDOM,\n glMatrix : glMatrix\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/gl-matrix-vec3/~/gl-matrix-common/index.js\n ** module id = 3\n ** module chunks = 0\n **/","'use strict';\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction ToObject(val) {\n\tif (val == null) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction ownEnumerableKeys(obj) {\n\tvar keys = Object.getOwnPropertyNames(obj);\n\n\tif (Object.getOwnPropertySymbols) {\n\t\tkeys = keys.concat(Object.getOwnPropertySymbols(obj));\n\t}\n\n\treturn keys.filter(function (key) {\n\t\treturn propIsEnumerable.call(obj, key);\n\t});\n}\n\nmodule.exports = Object.assign || function (target, source) {\n\tvar from;\n\tvar keys;\n\tvar to = ToObject(target);\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = arguments[s];\n\t\tkeys = ownEnumerableKeys(Object(from));\n\n\t\tfor (var i = 0; i < keys.length; i++) {\n\t\t\tto[keys[i]] = from[keys[i]];\n\t\t}\n\t}\n\n\treturn to;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/object-assign/index.js\n ** module id = 4\n ** module chunks = 0\n **/","'use strict';\n\nvar d = require('d')\n , callable = require('es5-ext/object/valid-callable')\n\n , apply = Function.prototype.apply, call = Function.prototype.call\n , create = Object.create, defineProperty = Object.defineProperty\n , defineProperties = Object.defineProperties\n , hasOwnProperty = Object.prototype.hasOwnProperty\n , descriptor = { configurable: true, enumerable: false, writable: true }\n\n , on, once, off, emit, methods, descriptors, base;\n\non = function (type, listener) {\n\tvar data;\n\n\tcallable(listener);\n\n\tif (!hasOwnProperty.call(this, '__ee__')) {\n\t\tdata = descriptor.value = create(null);\n\t\tdefineProperty(this, '__ee__', descriptor);\n\t\tdescriptor.value = null;\n\t} else {\n\t\tdata = this.__ee__;\n\t}\n\tif (!data[type]) data[type] = listener;\n\telse if (typeof data[type] === 'object') data[type].push(listener);\n\telse data[type] = [data[type], listener];\n\n\treturn this;\n};\n\nonce = function (type, listener) {\n\tvar once, self;\n\n\tcallable(listener);\n\tself = this;\n\ton.call(this, type, once = function () {\n\t\toff.call(self, type, once);\n\t\tapply.call(listener, this, arguments);\n\t});\n\n\tonce.__eeOnceListener__ = listener;\n\treturn this;\n};\n\noff = function (type, listener) {\n\tvar data, listeners, candidate, i;\n\n\tcallable(listener);\n\n\tif (!hasOwnProperty.call(this, '__ee__')) return this;\n\tdata = this.__ee__;\n\tif (!data[type]) return this;\n\tlisteners = data[type];\n\n\tif (typeof listeners === 'object') {\n\t\tfor (i = 0; (candidate = listeners[i]); ++i) {\n\t\t\tif ((candidate === listener) ||\n\t\t\t\t\t(candidate.__eeOnceListener__ === listener)) {\n\t\t\t\tif (listeners.length === 2) data[type] = listeners[i ? 0 : 1];\n\t\t\t\telse listeners.splice(i, 1);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif ((listeners === listener) ||\n\t\t\t\t(listeners.__eeOnceListener__ === listener)) {\n\t\t\tdelete data[type];\n\t\t}\n\t}\n\n\treturn this;\n};\n\nemit = function (type) {\n\tvar i, l, listener, listeners, args;\n\n\tif (!hasOwnProperty.call(this, '__ee__')) return;\n\tlisteners = this.__ee__[type];\n\tif (!listeners) return;\n\n\tif (typeof listeners === 'object') {\n\t\tl = arguments.length;\n\t\targs = new Array(l - 1);\n\t\tfor (i = 1; i < l; ++i) args[i - 1] = arguments[i];\n\n\t\tlisteners = listeners.slice();\n\t\tfor (i = 0; (listener = listeners[i]); ++i) {\n\t\t\tapply.call(listener, this, args);\n\t\t}\n\t} else {\n\t\tswitch (arguments.length) {\n\t\tcase 1:\n\t\t\tcall.call(listeners, this);\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tcall.call(listeners, this, arguments[1]);\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tcall.call(listeners, this, arguments[1], arguments[2]);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tl = arguments.length;\n\t\t\targs = new Array(l - 1);\n\t\t\tfor (i = 1; i < l; ++i) {\n\t\t\t\targs[i - 1] = arguments[i];\n\t\t\t}\n\t\t\tapply.call(listeners, this, args);\n\t\t}\n\t}\n};\n\nmethods = {\n\ton: on,\n\tonce: once,\n\toff: off,\n\temit: emit\n};\n\ndescriptors = {\n\ton: d(on),\n\tonce: d(once),\n\toff: d(off),\n\temit: d(emit)\n};\n\nbase = defineProperties({}, descriptors);\n\nmodule.exports = exports = function (o) {\n\treturn (o == null) ? create(base) : defineProperties(Object(o), descriptors);\n};\nexports.methods = methods;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/event-emitter/index.js\n ** module id = 5\n ** module chunks = 0\n **/","'use strict';\n\nvar assign = require('es5-ext/object/assign')\n , normalizeOpts = require('es5-ext/object/normalize-options')\n , isCallable = require('es5-ext/object/is-callable')\n , contains = require('es5-ext/string/#/contains')\n\n , d;\n\nd = module.exports = function (dscr, value/*, options*/) {\n\tvar c, e, w, options, desc;\n\tif ((arguments.length < 2) || (typeof dscr !== 'string')) {\n\t\toptions = value;\n\t\tvalue = dscr;\n\t\tdscr = null;\n\t} else {\n\t\toptions = arguments[2];\n\t}\n\tif (dscr == null) {\n\t\tc = w = true;\n\t\te = false;\n\t} else {\n\t\tc = contains.call(dscr, 'c');\n\t\te = contains.call(dscr, 'e');\n\t\tw = contains.call(dscr, 'w');\n\t}\n\n\tdesc = { value: value, configurable: c, enumerable: e, writable: w };\n\treturn !options ? desc : assign(normalizeOpts(options), desc);\n};\n\nd.gs = function (dscr, get, set/*, options*/) {\n\tvar c, e, options, desc;\n\tif (typeof dscr !== 'string') {\n\t\toptions = set;\n\t\tset = get;\n\t\tget = dscr;\n\t\tdscr = null;\n\t} else {\n\t\toptions = arguments[3];\n\t}\n\tif (get == null) {\n\t\tget = undefined;\n\t} else if (!isCallable(get)) {\n\t\toptions = get;\n\t\tget = set = undefined;\n\t} else if (set == null) {\n\t\tset = undefined;\n\t} else if (!isCallable(set)) {\n\t\toptions = set;\n\t\tset = undefined;\n\t}\n\tif (dscr == null) {\n\t\tc = true;\n\t\te = false;\n\t} else {\n\t\tc = contains.call(dscr, 'c');\n\t\te = contains.call(dscr, 'e');\n\t}\n\n\tdesc = { get: get, set: set, configurable: c, enumerable: e };\n\treturn !options ? desc : assign(normalizeOpts(options), desc);\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/event-emitter/~/d/index.js\n ** module id = 6\n ** module chunks = 0\n **/","'use strict';\n\nmodule.exports = require('./is-implemented')()\n\t? Object.assign\n\t: require('./shim');\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/event-emitter/~/es5-ext/object/assign/index.js\n ** module id = 7\n ** module chunks = 0\n **/","'use strict';\n\nmodule.exports = function () {\n\tvar assign = Object.assign, obj;\n\tif (typeof assign !== 'function') return false;\n\tobj = { foo: 'raz' };\n\tassign(obj, { bar: 'dwa' }, { trzy: 'trzy' });\n\treturn (obj.foo + obj.bar + obj.trzy) === 'razdwatrzy';\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/event-emitter/~/es5-ext/object/assign/is-implemented.js\n ** module id = 8\n ** module chunks = 0\n **/","'use strict';\n\nvar keys = require('../keys')\n , value = require('../valid-value')\n\n , max = Math.max;\n\nmodule.exports = function (dest, src/*, …srcn*/) {\n\tvar error, i, l = max(arguments.length, 2), assign;\n\tdest = Object(value(dest));\n\tassign = function (key) {\n\t\ttry { dest[key] = src[key]; } catch (e) {\n\t\t\tif (!error) error = e;\n\t\t}\n\t};\n\tfor (i = 1; i < l; ++i) {\n\t\tsrc = arguments[i];\n\t\tkeys(src).forEach(assign);\n\t}\n\tif (error !== undefined) throw error;\n\treturn dest;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/event-emitter/~/es5-ext/object/assign/shim.js\n ** module id = 9\n ** module chunks = 0\n **/","'use strict';\n\nmodule.exports = require('./is-implemented')()\n\t? Object.keys\n\t: require('./shim');\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/event-emitter/~/es5-ext/object/keys/index.js\n ** module id = 10\n ** module chunks = 0\n **/","'use strict';\n\nmodule.exports = function () {\n\ttry {\n\t\tObject.keys('primitive');\n\t\treturn true;\n\t} catch (e) { return false; }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/event-emitter/~/es5-ext/object/keys/is-implemented.js\n ** module id = 11\n ** module chunks = 0\n **/","'use strict';\n\nvar keys = Object.keys;\n\nmodule.exports = function (object) {\n\treturn keys(object == null ? object : Object(object));\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/event-emitter/~/es5-ext/object/keys/shim.js\n ** module id = 12\n ** module chunks = 0\n **/","'use strict';\n\nmodule.exports = function (value) {\n\tif (value == null) throw new TypeError(\"Cannot use null or undefined\");\n\treturn value;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/event-emitter/~/es5-ext/object/valid-value.js\n ** module id = 13\n ** module chunks = 0\n **/","'use strict';\n\nvar forEach = Array.prototype.forEach, create = Object.create;\n\nvar process = function (src, obj) {\n\tvar key;\n\tfor (key in src) obj[key] = src[key];\n};\n\nmodule.exports = function (options/*, …options*/) {\n\tvar result = create(null);\n\tforEach.call(arguments, function (options) {\n\t\tif (options == null) return;\n\t\tprocess(Object(options), result);\n\t});\n\treturn result;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/event-emitter/~/es5-ext/object/normalize-options.js\n ** module id = 14\n ** module chunks = 0\n **/","// Deprecated\n\n'use strict';\n\nmodule.exports = function (obj) { return typeof obj === 'function'; };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/event-emitter/~/es5-ext/object/is-callable.js\n ** module id = 15\n ** module chunks = 0\n **/","'use strict';\n\nmodule.exports = require('./is-implemented')()\n\t? String.prototype.contains\n\t: require('./shim');\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/event-emitter/~/es5-ext/string/#/contains/index.js\n ** module id = 16\n ** module chunks = 0\n **/","'use strict';\n\nvar str = 'razdwatrzy';\n\nmodule.exports = function () {\n\tif (typeof str.contains !== 'function') return false;\n\treturn ((str.contains('dwa') === true) && (str.contains('foo') === false));\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/event-emitter/~/es5-ext/string/#/contains/is-implemented.js\n ** module id = 17\n ** module chunks = 0\n **/","'use strict';\n\nvar indexOf = String.prototype.indexOf;\n\nmodule.exports = function (searchString/*, position*/) {\n\treturn indexOf.call(this, searchString, arguments[1]) > -1;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/event-emitter/~/es5-ext/string/#/contains/shim.js\n ** module id = 18\n ** module chunks = 0\n **/","'use strict';\n\nmodule.exports = function (fn) {\n\tif (typeof fn !== 'function') throw new TypeError(fn + \" is not a function\");\n\treturn fn;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/event-emitter/~/es5-ext/object/valid-callable.js\n ** module id = 19\n ** module chunks = 0\n **/"],"sourceRoot":""}