forked from sdouglas/cadnanoJS
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtwo.min.js
96 lines (96 loc) · 50.2 KB
/
two.min.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
(function(){function q(k,b,e){if(k===b)return 0!==k||1/k==1/b;if(null==k||null==b)return k===b;k._chain&&(k=k._wrapped);b._chain&&(b=b._wrapped);if(k.isEqual&&d.isFunction(k.isEqual))return k.isEqual(b);if(b.isEqual&&d.isFunction(b.isEqual))return b.isEqual(k);var c=a.call(k);if(c!=a.call(b))return!1;switch(c){case "[object String]":return k==String(b);case "[object Number]":return k!=+k?b!=+b:0==k?1/k==1/b:k==+b;case "[object Date]":case "[object Boolean]":return+k==+b;case "[object RegExp]":return k.source==
b.source&&k.global==b.global&&k.multiline==b.multiline&&k.ignoreCase==b.ignoreCase}if("object"!=typeof k||"object"!=typeof b)return!1;for(var j=e.length;j--;)if(e[j]==k)return!0;e.push(k);var j=0,l=!0;if("[object Array]"==c){if(j=k.length,l=j==b.length)for(;j--&&(l=j in k==j in b&&q(k[j],b[j],e)););}else{if("constructor"in k!="constructor"in b||k.constructor!=b.constructor)return!1;for(var t in k)if(d.has(k,t)&&(j++,!(l=d.has(b,t)&&q(k[t],b[t],e))))break;if(l){for(t in b)if(d.has(b,t)&&!j--)break;
l=!j}}e.pop();return l}var f=this,n=f._,p={},m=Array.prototype,c=Object.prototype,b=m.slice,l=m.unshift,a=c.toString,e=c.hasOwnProperty,u=m.forEach,A=m.map,s=m.reduce,j=m.reduceRight,x=m.filter,B=m.every,z=m.some,r=m.indexOf,w=m.lastIndexOf,c=Array.isArray,t=Object.keys,v=Function.prototype.bind,d=function(k){return new I(k)};"undefined"!==typeof exports?("undefined"!==typeof module&&module.exports&&(exports=module.exports=d),exports._=d):f._=d;d.VERSION="1.3.3";var y=d.each=d.forEach=function(k,
a,b){if(null!=k)if(u&&k.forEach===u)k.forEach(a,b);else if(k.length===+k.length)for(var e=0,c=k.length;e<c&&!(e in k&&a.call(b,k[e],e,k)===p);e++);else for(e in k)if(d.has(k,e)&&a.call(b,k[e],e,k)===p)break};d.map=d.collect=function(k,a,d){var b=[];if(null==k)return b;if(A&&k.map===A)return k.map(a,d);y(k,function(k,e,c){b[b.length]=a.call(d,k,e,c)});k.length===+k.length&&(b.length=k.length);return b};d.reduce=d.foldl=d.inject=function(k,a,b,e){var c=2<arguments.length;null==k&&(k=[]);if(s&&k.reduce===
s)return e&&(a=d.bind(a,e)),c?k.reduce(a,b):k.reduce(a);y(k,function(k,d,j){c?b=a.call(e,b,k,d,j):(b=k,c=!0)});if(!c)throw new TypeError("Reduce of empty array with no initial value");return b};d.reduceRight=d.foldr=function(k,a,b,e){var c=2<arguments.length;null==k&&(k=[]);if(j&&k.reduceRight===j)return e&&(a=d.bind(a,e)),c?k.reduceRight(a,b):k.reduceRight(a);var l=d.toArray(k).reverse();e&&!c&&(a=d.bind(a,e));return c?d.reduce(l,a,b,e):d.reduce(l,a)};d.find=d.detect=function(k,a,d){var b;D(k,function(k,
e,c){if(a.call(d,k,e,c))return b=k,!0});return b};d.filter=d.select=function(k,a,d){var b=[];if(null==k)return b;if(x&&k.filter===x)return k.filter(a,d);y(k,function(k,e,c){a.call(d,k,e,c)&&(b[b.length]=k)});return b};d.reject=function(k,a,d){var b=[];if(null==k)return b;y(k,function(k,e,c){a.call(d,k,e,c)||(b[b.length]=k)});return b};d.every=d.all=function(k,a,d){var b=!0;if(null==k)return b;if(B&&k.every===B)return k.every(a,d);y(k,function(k,e,c){if(!(b=b&&a.call(d,k,e,c)))return p});return!!b};
var D=d.some=d.any=function(k,a,b){a||(a=d.identity);var e=!1;if(null==k)return e;if(z&&k.some===z)return k.some(a,b);y(k,function(k,d,c){if(e||(e=a.call(b,k,d,c)))return p});return!!e};d.include=d.contains=function(k,a){var d=!1;return null==k?d:r&&k.indexOf===r?-1!=k.indexOf(a):d=D(k,function(k){return k===a})};d.invoke=function(k,a){var e=b.call(arguments,2);return d.map(k,function(k){return(d.isFunction(a)?a||k:k[a]).apply(k,e)})};d.pluck=function(k,a){return d.map(k,function(k){return k[a]})};
d.max=function(k,a,b){if(!a&&d.isArray(k)&&k[0]===+k[0])return Math.max.apply(Math,k);if(!a&&d.isEmpty(k))return-Infinity;var e={computed:-Infinity};y(k,function(k,d,c){d=a?a.call(b,k,d,c):k;d>=e.computed&&(e={value:k,computed:d})});return e.value};d.min=function(k,a,b){if(!a&&d.isArray(k)&&k[0]===+k[0])return Math.min.apply(Math,k);if(!a&&d.isEmpty(k))return Infinity;var e={computed:Infinity};y(k,function(k,d,c){d=a?a.call(b,k,d,c):k;d<e.computed&&(e={value:k,computed:d})});return e.value};d.shuffle=
function(k){var a=[],d;y(k,function(k,b){d=Math.floor(Math.random()*(b+1));a[b]=a[d];a[d]=k});return a};d.sortBy=function(k,a,b){var e=d.isFunction(a)?a:function(k){return k[a]};return d.pluck(d.map(k,function(k,a,d){return{value:k,criteria:e.call(b,k,a,d)}}).sort(function(k,a){var d=k.criteria,b=a.criteria;return void 0===d?1:void 0===b?-1:d<b?-1:d>b?1:0}),"value")};d.groupBy=function(k,a){var b={},e=d.isFunction(a)?a:function(k){return k[a]};y(k,function(k,a){var d=e(k,a);(b[d]||(b[d]=[])).push(k)});
return b};d.sortedIndex=function(k,a,b){b||(b=d.identity);for(var e=0,c=k.length;e<c;){var j=e+c>>1;b(k[j])<b(a)?e=j+1:c=j}return e};d.toArray=function(k){return!k?[]:d.isArray(k)||d.isArguments(k)?b.call(k):k.toArray&&d.isFunction(k.toArray)?k.toArray():d.values(k)};d.size=function(k){return d.isArray(k)?k.length:d.keys(k).length};d.first=d.head=d.take=function(k,a,d){return null!=a&&!d?b.call(k,0,a):k[0]};d.initial=function(a,d,e){return b.call(a,0,a.length-(null==d||e?1:d))};d.last=function(a,
d,e){return null!=d&&!e?b.call(a,Math.max(a.length-d,0)):a[a.length-1]};d.rest=d.tail=function(a,d,e){return b.call(a,null==d||e?1:d)};d.compact=function(a){return d.filter(a,function(a){return!!a})};d.flatten=function(a,b){return d.reduce(a,function(a,k){if(d.isArray(k))return a.concat(b?k:d.flatten(k));a[a.length]=k;return a},[])};d.without=function(a){return d.difference(a,b.call(arguments,1))};d.uniq=d.unique=function(a,b,e){e=e?d.map(a,e):a;var c=[];3>a.length&&(b=!0);d.reduce(e,function(e,j,
l){if(b?d.last(e)!==j||!e.length:!d.include(e,j))e.push(j),c.push(a[l]);return e},[]);return c};d.union=function(){return d.uniq(d.flatten(arguments,!0))};d.intersection=d.intersect=function(a){var e=b.call(arguments,1);return d.filter(d.uniq(a),function(a){return d.every(e,function(k){return 0<=d.indexOf(k,a)})})};d.difference=function(a){var e=d.flatten(b.call(arguments,1),!0);return d.filter(a,function(a){return!d.include(e,a)})};d.zip=function(){for(var a=b.call(arguments),e=d.max(d.pluck(a,"length")),
c=Array(e),j=0;j<e;j++)c[j]=d.pluck(a,""+j);return c};d.indexOf=function(a,b,e){if(null==a)return-1;var c;if(e)return e=d.sortedIndex(a,b),a[e]===b?e:-1;if(r&&a.indexOf===r)return a.indexOf(b);e=0;for(c=a.length;e<c;e++)if(e in a&&a[e]===b)return e;return-1};d.lastIndexOf=function(a,d){if(null==a)return-1;if(w&&a.lastIndexOf===w)return a.lastIndexOf(d);for(var b=a.length;b--;)if(b in a&&a[b]===d)return b;return-1};d.range=function(a,d,b){1>=arguments.length&&(d=a||0,a=0);b=arguments[2]||1;for(var e=
Math.max(Math.ceil((d-a)/b),0),c=0,j=Array(e);c<e;)j[c++]=a,a+=b;return j};var E=function(){};d.bind=function(a,e){var c,j;if(a.bind===v&&v)return v.apply(a,b.call(arguments,1));if(!d.isFunction(a))throw new TypeError;j=b.call(arguments,2);return c=function(){if(!(this instanceof c))return a.apply(e,j.concat(b.call(arguments)));E.prototype=a.prototype;var d=new E,l=a.apply(d,j.concat(b.call(arguments)));return Object(l)===l?l:d}};d.bindAll=function(a){var e=b.call(arguments,1);0==e.length&&(e=d.functions(a));
y(e,function(b){a[b]=d.bind(a[b],a)});return a};d.memoize=function(a,b){var e={};b||(b=d.identity);return function(){var c=b.apply(this,arguments);return d.has(e,c)?e[c]:e[c]=a.apply(this,arguments)}};d.delay=function(a,d){var e=b.call(arguments,2);return setTimeout(function(){return a.apply(null,e)},d)};d.defer=function(a){return d.delay.apply(d,[a,1].concat(b.call(arguments,1)))};d.throttle=function(a,b){var e,c,j,l,t,v,m=d.debounce(function(){t=l=!1},b);return function(){e=this;c=arguments;j||
(j=setTimeout(function(){j=null;t&&a.apply(e,c);m()},b));l?t=!0:v=a.apply(e,c);m();l=!0;return v}};d.debounce=function(a,d,b){var e;return function(){var c=this,j=arguments;b&&!e&&a.apply(c,j);clearTimeout(e);e=setTimeout(function(){e=null;b||a.apply(c,j)},d)}};d.once=function(a){var d=!1,b;return function(){if(d)return b;d=!0;return b=a.apply(this,arguments)}};d.wrap=function(a,d){return function(){var e=[a].concat(b.call(arguments,0));return d.apply(this,e)}};d.compose=function(){var a=arguments;
return function(){for(var d=arguments,b=a.length-1;0<=b;b--)d=[a[b].apply(this,d)];return d[0]}};d.after=function(a,d){return 0>=a?d():function(){if(1>--a)return d.apply(this,arguments)}};d.keys=t||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var b=[],e;for(e in a)d.has(a,e)&&(b[b.length]=e);return b};d.values=function(a){return d.map(a,d.identity)};d.functions=d.methods=function(a){var b=[],e;for(e in a)d.isFunction(a[e])&&b.push(e);return b.sort()};d.extend=function(a){y(b.call(arguments,
1),function(d){for(var b in d)a[b]=d[b]});return a};d.pick=function(a){var e={};y(d.flatten(b.call(arguments,1)),function(d){d in a&&(e[d]=a[d])});return e};d.defaults=function(a){y(b.call(arguments,1),function(d){for(var b in d)null==a[b]&&(a[b]=d[b])});return a};d.clone=function(a){return!d.isObject(a)?a:d.isArray(a)?a.slice():d.extend({},a)};d.tap=function(a,d){d(a);return a};d.isEqual=function(a,d){return q(a,d,[])};d.isEmpty=function(a){if(null==a)return!0;if(d.isArray(a)||d.isString(a))return 0===
a.length;for(var b in a)if(d.has(a,b))return!1;return!0};d.isElement=function(a){return!!(a&&1==a.nodeType)};d.isArray=c||function(d){return"[object Array]"==a.call(d)};d.isObject=function(a){return a===Object(a)};d.isArguments=function(d){return"[object Arguments]"==a.call(d)};d.isArguments(arguments)||(d.isArguments=function(a){return!(!a||!d.has(a,"callee"))});d.isFunction=function(d){return"[object Function]"==a.call(d)};d.isString=function(d){return"[object String]"==a.call(d)};d.isNumber=function(d){return"[object Number]"==
a.call(d)};d.isFinite=function(a){return d.isNumber(a)&&isFinite(a)};d.isNaN=function(a){return a!==a};d.isBoolean=function(d){return!0===d||!1===d||"[object Boolean]"==a.call(d)};d.isDate=function(d){return"[object Date]"==a.call(d)};d.isRegExp=function(d){return"[object RegExp]"==a.call(d)};d.isNull=function(a){return null===a};d.isUndefined=function(a){return void 0===a};d.has=function(a,d){return e.call(a,d)};d.noConflict=function(){f._=n;return this};d.identity=function(a){return a};d.times=
function(a,d,b){for(var e=0;e<a;e++)d.call(b,e)};d.escape=function(a){return(""+a).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")};d.result=function(a,b){if(null==a)return null;var e=a[b];return d.isFunction(e)?e.call(a):e};d.mixin=function(a){y(d.functions(a),function(e){var c=d[e]=a[e];I.prototype[e]=function(){var a=b.call(arguments);l.call(a,this._wrapped);return N(c.apply(d,a),this._chain)}})};var H=0;d.uniqueId=
function(a){var d=H++;return a?a+d:d};d.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var O=/.^/,M={"\\":"\\","'":"'",r:"\r",n:"\n",t:"\t",u2028:"\u2028",u2029:"\u2029"},P;for(P in M)M[M[P]]=P;var V=/\\|'|\r|\n|\t|\u2028|\u2029/g,W=/\\(\\|'|r|n|t|u2028|u2029)/g,Q=function(a){return a.replace(W,function(a,d){return M[d]})};d.template=function(a,b,e){e=d.defaults(e||{},d.templateSettings);a="__p+='"+a.replace(V,function(a){return"\\"+M[a]}).replace(e.escape||
O,function(a,d){return"'+\n_.escape("+Q(d)+")+\n'"}).replace(e.interpolate||O,function(a,d){return"'+\n("+Q(d)+")+\n'"}).replace(e.evaluate||O,function(a,d){return"';\n"+Q(d)+"\n;__p+='"})+"';\n";e.variable||(a="with(obj||{}){\n"+a+"}\n");a="var __p='';var print=function(){__p+=Array.prototype.join.call(arguments, '')};\n"+a+"return __p;\n";var c=new Function(e.variable||"obj","_",a);if(b)return c(b,d);b=function(a){return c.call(this,a,d)};b.source="function("+(e.variable||"obj")+"){\n"+a+"}";return b};
d.chain=function(a){return d(a).chain()};var I=function(a){this._wrapped=a};d.prototype=I.prototype;var N=function(a,b){return b?d(a).chain():a};d.mixin(d);y("pop push reverse shift sort splice unshift".split(" "),function(a){var d=m[a];I.prototype[a]=function(){var b=this._wrapped;d.apply(b,arguments);var e=b.length;("shift"==a||"splice"==a)&&0===e&&delete b[0];return N(b,this._chain)}});y(["concat","join","slice"],function(a){var d=m[a];I.prototype[a]=function(){return N(d.apply(this._wrapped,arguments),
this._chain)}});I.prototype.chain=function(){this._chain=!0;return this};I.prototype.value=function(){return this._wrapped}}).call(this);var Backbone=Backbone||{};
(function(){var q=[].slice,f=/\s+/,n=function(c,b,l,a){if(!l)return!0;if("object"===typeof l)for(var e in l)c[b].apply(c,[e,l[e]].concat(a));else if(f.test(l)){l=l.split(f);e=0;for(var m=l.length;e<m;e++)c[b].apply(c,[l[e]].concat(a))}else return!0},p=function(c,b,l){var a;c=-1;var e=b.length;switch(l.length){case 0:for(;++c<e;)(a=b[c]).callback.call(a.ctx);break;case 1:for(;++c<e;)(a=b[c]).callback.call(a.ctx,l[0]);break;case 2:for(;++c<e;)(a=b[c]).callback.call(a.ctx,l[0],l[1]);break;case 3:for(;++c<
e;)(a=b[c]).callback.call(a.ctx,l[0],l[1],l[2]);break;default:for(;++c<e;)(a=b[c]).callback.apply(a.ctx,l)}},m=Backbone.Events={on:function(c,b,l){if(!n(this,"on",c,[b,l])||!b)return this;this._events||(this._events={});(this._events[c]||(this._events[c]=[])).push({callback:b,context:l,ctx:l||this});return this},once:function(c,b,l){if(!n(this,"once",c,[b,l])||!b)return this;var a=this,e=_.once(function(){a.off(c,e);b.apply(this,arguments)});e._callback=b;this.on(c,e,l);return this},off:function(c,
b,l){var a,e,m,f,s,j,p,q;if(!this._events||!n(this,"off",c,[b,l]))return this;if(!c&&!b&&!l)return this._events={},this;f=c?[c]:_.keys(this._events);s=0;for(j=f.length;s<j;s++)if(c=f[s],a=this._events[c]){m=[];if(b||l){p=0;for(q=a.length;p<q;p++)e=a[p],(b&&b!==(e.callback._callback||e.callback)||l&&l!==e.context)&&m.push(e)}this._events[c]=m}return this},trigger:function(c){if(!this._events)return this;var b=q.call(arguments,1);if(!n(this,"trigger",c,b))return this;var l=this._events[c],a=this._events.all;
l&&p(this,l,b);a&&p(this,a,arguments);return this},listenTo:function(c,b,l){var a=this._listeners||(this._listeners={}),e=c._listenerId||(c._listenerId=_.uniqueId("l"));a[e]=c;c.on(b,l||this,this);return this},stopListening:function(c,b,l){var a=this._listeners;if(a){if(c)c.off(b,l,this),!b&&!l&&delete a[c._listenerId];else{for(var e in a)a[e].off(null,null,this);this._listeners={}}return this}}};m.bind=m.on;m.unbind=m.off})();(function(){for(var q=0,f=["ms","moz","webkit","o"],n=0;n<f.length&&!window.requestAnimationFrame;++n)window.requestAnimationFrame=window[f[n]+"RequestAnimationFrame"],window.cancelAnimationFrame=window[f[n]+"CancelAnimationFrame"]||window[f[n]+"CancelRequestAnimationFrame"];window.requestAnimationFrame||(window.requestAnimationFrame=function(f){var m=(new Date).getTime(),c=Math.max(0,16-(m-q)),b=window.setTimeout(function(){f(m+c)},c);q=m+c;return b});window.cancelAnimationFrame||(window.cancelAnimationFrame=
function(f){clearTimeout(f)})})();(function(){function q(){var a=document.body.getBoundingClientRect(),b=this.width=a.width,a=this.height=a.height;this.renderer.setSize(b,a);this.trigger(j.Events.resize,b,a)}var f=this,n=f.Two||{},p=Math.sin,m=Math.cos,c=Math.atan2,b=Math.sqrt,l=Math.abs,a=Math.PI,e=2*a,u=a/2,A=Math.pow,s={hasEventListeners:_.isFunction(f.addEventListener),bind:function(a,b,d,e){this.hasEventListeners?a.addEventListener(b,d,!!e):a.attachEvent("on"+b,d);return this},unbind:function(a,b,d,e){this.hasEventListeners?
a.removeEventListeners(b,d,!!e):a.detachEvent("on"+b,d);return this}},j=f.Two=function(a){a=_.defaults(a||{},{fullscreen:!1,width:640,height:480,type:j.Types.svg,autostart:!1});this.type=a.type;this.renderer=new j[this.type](this);j.Utils.setPlaying.call(this,a.autostart);this.frameCount=0;a.fullscreen?(a=_.bind(q,this),_.extend(document.body.style,{overflow:"hidden",margin:0,padding:0,top:0,left:0,right:0,bottom:0,position:"fixed"}),_.extend(this.renderer.domElement.style,{display:"block",top:0,
left:0,right:0,bottom:0,position:"fixed"}),s.bind(window,"resize",a),a()):(this.renderer.setSize(a.width,a.height),this.width=a.width,this.height=a.height);this.scene=new j.Group;this.renderer.add(this.scene);j.Instances.push(this)};_.extend(j,{Array:f.Float32Array||Array,Types:{webgl:"WebGLRenderer",svg:"SVGRenderer",canvas:"CanvasRenderer"},Properties:{hierarchy:"hierarchy",demotion:"demotion"},Events:{play:"play",pause:"pause",update:"update",render:"render",resize:"resize",change:"change"},Resolution:8,
Instances:[],noConflict:function(){f.Two=n;return this},Utils:{Curve:{CollinearityEpsilon:A(10,-30),RecursionLimit:16,CuspLimit:0,Tolerance:{distance:0.25,angle:0,epsilon:0.01}},setPlaying:function(a){_.defer(_.bind(function(){this.playing=!!a},this))},applySvgAttributes:function(a,b){b.cap="butt";b.join="bevel";_.each(a.attributes,function(a){switch(a.nodeName){case "visibility":b.visible=!!a.nodeValue;break;case "stroke-linecap":b.cap=a.nodeValue;break;case "stroke-linejoin":b.join=a.nodeValue;
break;case "stroke-miterlimit":b.miter=a.nodeValue;break;case "stroke-width":b.linewidth=parseFloat(a.nodeValue);break;case "stroke-opacity":case "fill-opacity":b.opacity=a.nodeValue;break;case "fill":b.fill=a.nodeValue;break;case "stroke":b.stroke=a.nodeValue}});return b},read:{svg:function(){return j.Utils.read.g.apply(this,arguments)},g:function(a){var b=new j.Group;this.add(b);_.each(a.childNodes,function(a){if(a.localName){var e=a.localName.toLowerCase();e in j.Utils.read&&(a=j.Utils.read[e].call(this,
a),b.add(a))}},this);return j.Utils.applySvgAttributes(a,b)},polygon:function(a,b){var d=a.points,e=_.map(_.range(d.numberOfItems),function(a){a=d.getItem(a);return new j.Vector(a.x,a.y)}),e=(new j.Polygon(e,!b)).noStroke();return j.Utils.applySvgAttributes(a,e)},polyline:function(a){return j.Utils.read.polygon(a,!0)},path:function(a){var b=a.getAttribute("d"),b=_.flatten(_.map(_.compact(b.split(/M/g)),function(a){a=_.map(_.compact(a.split(/m/g)),function(a,d){return 0>=d?a:"m"+a});a[0]="M"+a[0];
return a})),d=new j.Vector,e=new j.Vector;return _.map(b,function(b){var c,l=!1,m=!1;b=_.flatten(_.map(b.match(/[a-z][^a-z]*/ig),function(a){var b,t,f=a[0],v=f.toLowerCase();c=a.slice(1).trim().split(/[\s,]+|(?=[+\-])/);l=f===v;var u,s,k;switch(v){case "z":m=!0;break;case "m":case "l":t=parseFloat(c[0]);b=parseFloat(c[1]);b=new j.Vector(t,b);l&&b.addSelf(d);d.copy(b);break;case "h":case "v":t="h"===v?"x":"y";a="x"===t?"y":"x";b=new j.Vector;b[t]=parseFloat(c[0]);b[a]=d[a];l&&(b[t]+=d[t]);d.copy(b);
break;case "s":case "c":b=d.x;a=d.y;"c"===v?(f=parseFloat(c[0]),t=parseFloat(c[1]),v=parseFloat(c[2]),u=parseFloat(c[3]),s=parseFloat(c[4]),k=parseFloat(c[5])):(u=(new j.Vector).copy(d).subSelf(e),f=parseFloat(u.x),t=parseFloat(u.y),v=parseFloat(c[0]),u=parseFloat(c[1]),s=parseFloat(c[2]),k=parseFloat(c[3]));l&&(f+=b,t+=a,v+=b,u+=a,s+=b,k+=a);b=j.Utils.subdivide(b,a,f,t,v,u,s,k);d.set(s,k);e.set(v,u);break;case "t":case "q":b=d.x;a=d.y;e.isZero()?(f=b,t=a):(f=e.x,a=e.y);"q"===v?(v=parseFloat(c[0]),
u=parseFloat(c[1]),s=parseFloat(c[1]),k=parseFloat(c[2])):(u=(new j.Vector).copy(d).subSelf(e),v=parseFloat(u.x),u=parseFloat(u.y),s=parseFloat(c[0]),k=parseFloat(c[1]));l&&(f+=b,t+=a,v+=b,u+=a,s+=b,k+=a);b=j.Utils.subdivide(b,a,f,t,v,u,s,k);d.set(s,k);e.set(v,u);break;case "a":throw new j.Utils.Error("not yet able to interpret Elliptical Arcs.");}return b}));_.isUndefined(b[b.length-1])&&b.pop();b=(new j.Polygon(b,m)).noStroke();return j.Utils.applySvgAttributes(a,b)})},circle:function(a){var b=
parseFloat(a.getAttribute("cx")),d=parseFloat(a.getAttribute("cy")),c=parseFloat(a.getAttribute("r")),l=j.Resolution,f=_.map(_.range(l),function(a){var b=a/l*e;a=c*m(b);b=c*p(b);return new j.Vector(a,b)},this),f=(new j.Polygon(f,!0,!0)).noStroke();f.translation.set(b,d);return j.Utils.applySvgAttributes(a,f)},ellipse:function(a){var b=parseFloat(a.getAttribute("cx")),d=parseFloat(a.getAttribute("cy")),c=parseFloat(a.getAttribute("rx")),l=parseFloat(a.getAttribute("ry")),f=j.Resolution,u=_.map(_.range(f),
function(a){var b=a/f*e;a=c*m(b);b=l*p(b);return new j.Vector(a,b)},this),u=(new j.Polygon(u,!0,!0)).noStroke();u.translation.set(b,d);return j.Utils.applySvgAttributes(a,u)},rect:function(a){var b=parseFloat(a.getAttribute("x")),d=parseFloat(a.getAttribute("y")),e=parseFloat(a.getAttribute("width")),c=parseFloat(a.getAttribute("height")),e=e/2,c=c/2,l=[new j.Vector(e,c),new j.Vector(-e,c),new j.Vector(-e,-c),new j.Vector(e,-c)],l=(new j.Polygon(l,!0)).noStroke();l.translation.set(b+e,d+c);return j.Utils.applySvgAttributes(a,
l)},line:function(a){var b=parseFloat(a.getAttribute("x1")),d=parseFloat(a.getAttribute("y1")),e=parseFloat(a.getAttribute("x2")),c=parseFloat(a.getAttribute("y2")),e=(e-b)/2,c=(c-d)/2,l=[new j.Vector(-e,-c),new j.Vector(e,c)],l=(new j.Polygon(l)).noFill();l.translation.set(b+e,d+c);return j.Utils.applySvgAttributes(a,l)}},subdivide:function(b,f,d,m,u,s,A,n,p){var x=j.Utils.Curve.CollinearityEpsilon,q=j.Utils.Curve.RecursionLimit,z=j.Utils.Curve.CuspLimit,B=j.Utils.Curve.Tolerance,r;p=p||0;if(p>q)return[];
var q=(b+d)/2,w=(f+m)/2,k=(d+u)/2,L=(m+s)/2,R=(u+A)/2,S=(s+n)/2,T=(q+k)/2,U=(w+L)/2,k=(k+R)/2,L=(L+S)/2,F=(T+k)/2,G=(U+L)/2;r=A-b;var C=n-f,J=l((d-A)*C-(m-n)*r),K=l((u-A)*C-(s-n)*r);if(0<p){if(J>x&&K>x&&(J+K)*(J+K)<=B.distance*(r*r+C*C)){if(B.angle<B.epsilon)return[new j.Vector(F,G)];r=c(s-m,u-d);x=l(r-c(m-f,d-b));r=l(c(n-s,A-u)-r);x>=a&&(x=e-x);r>=a&&(r=e-r);if(x+r<B.angle)return[new j.Vector(F,G)];if(0!==z){if(x>z)return[new j.Vector(d,m)];if(r>z)return[new j.Vector(u,s)]}}}else if(J>x)if(J*J<=
B.distance*(r*r+C*C)){if(B.angle<B.epsilon)return[new j.Vector(F,G)];x=l(c(s-m,u-d)-c(m-f,d-b));x>=a&&(x=e-x);if(x<B.angle)return[new j.Vector(d,m),new j.Vector(u,s)];if(0!==z&&x>z)return[new j.Vector(d,m)]}else if(K>x){if(K*K<=B.distance*(r*r+C*C)){if(B.angle<B.epsilon)return[new j.Vector(F,G)];x=l(c(n-s,A-u)-c(s-m,u-d));x>=a&&(x=e-x);if(x<B.angle)return[new j.Vector(d,m),new j.Vector(u,s)];if(0!==z&&x>z)return[new j.Vector2(u,s)]}}else if(r=F-(b+A)/2,C=G-(f+n)/2,r*r+C*C<=B.distance)return[new j.Vector(F,
G)];return j.Utils.subdivide(b,f,q,w,T,U,F,G,p+1).concat(j.Utils.subdivide(F,G,k,L,R,S,A,n,p+1))},getCurveFromPoints:function(a,b){for(var d=[],e=a.length,c=e-1,j=0;j<e;j++){var l=a[j],m={x:l.x,y:l.y};d.push(m);var l=b?w(j-1,e):Math.max(j-1,0),f=b?w(j+1,e):Math.min(j+1,c);r(a[l],m,a[f]);!m.u.x&&!m.u.y&&(m.u.x=m.x,m.u.y=m.y);!m.v.x&&!m.v.y&&(m.v.x=m.x,m.v.y=m.y)}return d},getControlPoints:function(b,e,d){var c=z(b,e),j=z(d,e);b=x(b,e);d=x(d,e);var l=(c+j)/2;if(1E-4>b||1E-4>d)return e.u={x:e.x,y:e.y},
e.v={x:e.x,y:e.y},e;b*=0.33;d*=0.33;l=j<c?l+u:l-u;c={x:e.x+m(l)*b,y:e.y+p(l)*b};l-=a;j={x:e.x+m(l)*d,y:e.y+p(l)*d};e.u=c;e.v=j;return e},angleBetween:function(a,b){return c(a.y-b.y,a.x-b.x)},distanceBetweenSquared:function(a,b){var d=a.x-b.x,e=a.y-b.y;return d*d+e*e},distanceBetween:function(a,e){return b(B(a,e))},mod:function(a,b){for(;0>a;)a+=b;return a%b},Error:function(a){this.name="two.js";this.message=a}}});j.Utils.Error.prototype=Error();j.Utils.Error.prototype.constructor=j.Utils.Error;var x=
j.Utils.distanceBetween,B=j.Utils.distanceBetweenSquared,z=j.Utils.angleBetween,r=j.Utils.getControlPoints,w=j.Utils.mod;_.extend(j.prototype,Backbone.Events,{appendTo:function(a){a.appendChild(this.renderer.domElement);return this},play:function(){j.Utils.setPlaying.call(this,!0);return this.trigger(j.Events.play)},pause:function(){this.playing=!1;return this.trigger(j.Events.pause)},update:function(){var a=!!this._lastFrame,b=(window.performance&&window.performance.now?window.performance:Date).now();
this.frameCount++;a&&(this.timeDelta=parseFloat((b-this._lastFrame).toFixed(3)));this._lastFrame=b;var a=this.width,b=this.height,d=this.renderer;(a!==d.width||b!==d.height)&&d.setSize(a,b);this.trigger(j.Events.update,this.frameCount,this.timeDelta);return this.render()},render:function(){this.renderer.render();return this.trigger(j.Events.render,this.frameCount)},add:function(a){var b=a;_.isArray(a)||(b=_.toArray(arguments));this.scene.add(b);return this},makeLine:function(a,b,d,e){d=(d-a)/2;e=
(e-b)/2;var c=[new j.Vector(-d,-e),new j.Vector(d,e)],c=(new j.Polygon(c)).noFill();c.translation.set(a+d,b+e);this.scene.add(c);return c},makeRectangle:function(a,b,d,e){d/=2;e/=2;e=[new j.Vector(d,e),new j.Vector(-d,e),new j.Vector(-d,-e),new j.Vector(d,-e)];e=new j.Polygon(e,!0);e.translation.set(a,b);this.scene.add(e);return e},makeCircle:function(a,b,d){return this.makeEllipse(a,b,d,d)},makeEllipse:function(a,b,d,c){var l=j.Resolution,f=_.map(_.range(l),function(a){var b=a/l*e;a=d*m(b);b=c*p(b);
return new j.Vector(a,b)},this),f=new j.Polygon(f,!0,!0);f.translation.set(a,b);this.scene.add(f);return f},makeCurve:function(a){var b=arguments.length,d=a;if(!_.isArray(a))for(var d=[],e=0;e<b;e+=2){var c=arguments[e];if(!_.isNumber(c))break;d.push(new j.Vector(c,arguments[e+1]))}var b=arguments[b-1],d=new j.Polygon(d,!(_.isBoolean(b)&&b),!0),b=d.getBoundingClientRect(),l=b.left+b.width/2,m=b.top+b.height/2;_.each(d.vertices,function(a){a.x-=l;a.y-=m});d.translation.set(l,m);this.scene.add(d);return d},
makePolygon:function(a){var b=arguments.length,e=a;if(!_.isArray(a))for(var e=[],c=0;c<b;c+=2){var l=arguments[c];if(!_.isNumber(l))break;e.push(new j.Vector(l,arguments[c+1]))}b=arguments[b-1];e=new j.Polygon(e,!(_.isBoolean(b)&&b));e.center();this.scene.add(e);return e},makeGroup:function(a){var b=a;_.isArray(a)||(b=_.toArray(arguments));var e=new j.Group;this.scene.add(e);e.add(b);return e},interpret:function(a){var b=a.tagName.toLowerCase();if(!(b in j.Utils.read))return null;a=j.Utils.read[b].call(this,
a);this.add(a);return a}});(function(){_.each(j.Instances,function(a){a.playing&&a.update()});requestAnimationFrame(arguments.callee)})()})();(function(){var q=Two.Vector=function(f,n){f=f||0;n=n||0;Object.defineProperty(this,"x",{get:function(){return f},set:function(n){f=n;this.trigger("change","x")}});Object.defineProperty(this,"y",{get:function(){return n},set:function(f){n=f;this.trigger("change","y")}})};_.extend(q,{});_.extend(q.prototype,Backbone.Events,{set:function(f,n){this.x=f;this.y=n;return this},copy:function(f){this.x=f.x;this.y=f.y;return this},clear:function(){this.y=this.x=0;return this},clone:function(){return new q(this.x,
this.y)},add:function(f,n){this.x=f.x+n.x;this.y=f.y+n.y;return this},addSelf:function(f){this.x+=f.x;this.y+=f.y;return this},sub:function(f,n){this.x=f.x-n.x;this.y=f.y-n.y;return this},subSelf:function(f){this.x-=f.x;this.y-=f.y;return this},multiplySelf:function(f){this.x*=f.x;this.y*=f.y;return this},multiplyScalar:function(f){this.x*=f;this.y*=f;return this},divideScalar:function(f){f?(this.x/=f,this.y/=f):this.set(0,0);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(f){return this.x*
f.x+this.y*f.y},lengthSquared:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.lengthSquared())},normalize:function(){return this.divideScalar(this.length())},distanceTo:function(f){return Math.sqrt(this.distanceToSquared(f))},distanceToSquared:function(f){var n=this.x-f.x;f=this.y-f.y;return n*n+f*f},setLength:function(f){return this.normalize().multiplyScalar(f)},equals:function(f){return 1E-4>this.distanceTo(f)},lerp:function(f,n){return this.set((f.x-this.x)*
n+this.x,(f.y-this.y)*n+this.y)},isZero:function(){return 1E-4>this.length()}})})();(function(){_.range(6);var q=Math.cos,f=Math.sin,n=Math.tan,p=Two.Matrix=function(m,c,b,l,a,e){this.elements=new Two.Array(9);var f=m;_.isArray(f)||(f=_.toArray(arguments));this.identity().set(f)};_.extend(p,{Identity:[1,0,0,0,1,0,0,0,1],Multiply:function(m,c){if(3>=c.length){var b=c[0]||0,l=c[1]||0,a=c[2]||0;return{x:m[0]*b+m[1]*l+m[2]*a,y:m[3]*b+m[4]*l+m[5]*a,z:m[6]*b+m[7]*l+m[8]*a}}var b=m[0],l=m[1],a=m[2],e=m[3],f=m[4],A=m[5],s=m[6],j=m[7],n=m[8],p=c[0],q=c[1],r=c[2],w=c[3],t=c[4],v=c[5],d=c[6],
y=c[7],D=c[8];return[b*p+l*w+a*d,b*q+l*t+a*y,b*r+l*v+a*D,e*p+f*w+A*d,e*q+f*t+A*y,e*r+f*v+A*D,s*p+j*w+n*d,s*q+j*t+n*y,s*r+j*v+n*D]}});_.extend(p.prototype,{set:function(m,c,b,l,a,e){var f=m;_.isArray(f)||(f=_.toArray(arguments));_.each(f,function(a,b){_.isNumber(a)&&(this.elements[b]=a)},this);return this},identity:function(){this.set(p.Identity);return this},multiply:function(m,c,b,l,a,e,f,A,s){var j=arguments,n=j.length;if(1>=n)return _.each(this.elements,function(a,b){this.elements[b]=a*m},this),
this;if(3>=n)return m=m||0,c=c||0,b=b||0,a=this.elements,{x:a[0]*m+a[1]*c+a[2]*b,y:a[3]*m+a[4]*c+a[5]*b,z:a[6]*m+a[7]*c+a[8]*b};n=this.elements;A0=n[0];A1=n[1];A2=n[2];A3=n[3];A4=n[4];A5=n[5];A6=n[6];A7=n[7];A8=n[8];B0=j[0];B1=j[1];B2=j[2];B3=j[3];B4=j[4];B5=j[5];B6=j[6];B7=j[7];B8=j[8];this.elements[0]=A0*B0+A1*B3+A2*B6;this.elements[1]=A0*B1+A1*B4+A2*B7;this.elements[2]=A0*B2+A1*B5+A2*B8;this.elements[3]=A3*B0+A4*B3+A5*B6;this.elements[4]=A3*B1+A4*B4+A5*B7;this.elements[5]=A3*B2+A4*B5+A5*B8;this.elements[6]=
A6*B0+A7*B3+A8*B6;this.elements[7]=A6*B1+A7*B4+A8*B7;this.elements[8]=A6*B2+A7*B5+A8*B8;return this},scale:function(f,c){1>=arguments.length&&(c=f);return this.multiply(f,0,0,0,c,0,0,0,1)},rotate:function(m){var c=q(m);m=f(m);return this.multiply(c,-m,0,m,c,0,0,0,1)},translate:function(f,c){return this.multiply(1,0,f,0,1,c,0,0,1)},skewX:function(f){f=n(f);return this.multiply(1,f,0,0,1,0,0,0,1)},skewY:function(f){f=n(f);return this.multiply(1,0,0,f,1,0,0,0,1)},toString:function(){return this.toArray().join(" ")},
toArray:function(f){var c=this.elements,b=parseFloat(c[0].toFixed(3)),l=parseFloat(c[1].toFixed(3)),a=parseFloat(c[2].toFixed(3)),e=parseFloat(c[3].toFixed(3)),u=parseFloat(c[4].toFixed(3)),n=parseFloat(c[5].toFixed(3));if(f){f=parseFloat(c[6].toFixed(3));var s=parseFloat(c[7].toFixed(3)),c=parseFloat(c[8].toFixed(3));return[b,e,f,l,u,s,a,n,c]}return[b,e,l,u,a,n]},clone:function(){var f=this.elements[0],c=this.elements[1],b=this.elements[2],l=this.elements[3],a=this.elements[4],e=this.elements[5];
g=this.elements[6];h=this.elements[7];i=this.elements[8];return new Two.Matrix(f,c,b,l,a,e,g,h,i)}})})();(function(){function q(c){var b={},l=c.id,a=c.translation,e=c.rotation,f=c.scale,n=c.stroke,s=c.linewidth,j=c.fill,x=c.opacity,q=c.visible,z=c.cap,r=c.join,w=c.miter,t=c.curved,v=c.closed,d=c.vertices;l&&(b.id=m.Identifier+l);a&&(_.isNumber(f)&&_.isNumber(e))&&(b.transform="matrix("+c._matrix.toString()+")");n&&(b.stroke=n);j&&(b.fill=j);x&&(b["stroke-opacity"]=b["fill-opacity"]=x);b.visibility=q?"visible":"hidden";z&&(b["stroke-linecap"]=z);r&&(b["stroke-linejoin"]=r);w&&(b["stroke-miterlimit"]=
w);s&&(b["stroke-width"]=s);d&&(b.d=p.toString(d,v,t));return b}var f=Two.Utils.getCurveFromPoints,n=Two.Utils.mod,p={version:1.1,ns:"http://www.w3.org/2000/svg",xlink:"http://www.w3.org/1999/xlink",createElement:function(c,b){var l=c.toLowerCase(),a=document.createElementNS(this.ns,l);"svg"===l&&(b=_.defaults(b||{},{version:this.version}));_.isObject(b)&&this.setAttributes(a,b);return a},setAttributes:function(c,b){_.each(b,function(b,a){this.setAttribute(a,b)},c);return this},removeAttributes:function(c,
b){_.each(b,function(b){this.removeAttribute(b)},c);return this},toString:function(c,b,l){var a=c.length,e=a-1;if(!l)return _.map(c,function(a,c){var j;j=(0>=c?"M":"L")+(" "+a.x.toFixed(3)+" "+a.y.toFixed(3));c>=e&&b&&(j+=" Z");return j}).join(" ");var m=f(c,b);return _.map(m,function(c,l){var j,f=b?n(l-1,a):Math.max(l-1,0),p=b?n(l+1,a):Math.min(l+1,e);j=m[f];var p=m[p],f=j.v.x.toFixed(3),q=j.v.y.toFixed(3),r=c.u.x.toFixed(3),w=c.u.y.toFixed(3),t=c.x.toFixed(3),v=c.y.toFixed(3);j=0>=l?"M "+t+" "+
v:"C "+f+" "+q+" "+r+" "+w+" "+t+" "+v;l>=e&&b&&(f=c.v.x.toFixed(3),q=c.v.y.toFixed(3),r=p.u.x.toFixed(3),w=p.u.y.toFixed(3),t=p.x.toFixed(3),v=p.y.toFixed(3),j=j+(" C "+f+" "+q+" "+r+" "+w+" "+t+" "+v)+" Z");return j}).join(" ")}},m=Two[Two.Types.svg]=function(){this.count=0;this.domElement=p.createElement("svg");this.elements=[];this.domElement.style.visibility="hidden";this.unveil=_.once(_.bind(function(){this.domElement.style.visibility="visible"},this))};_.extend(m,{Identifier:"two-"});_.extend(m.prototype,
Backbone.Events,{setSize:function(c,b){this.width=c;this.height=b;p.setAttributes(this.domElement,{width:c,height:b});return this},add:function(c){var b=c,l=this.elements,a=this.domElement;_.isArray(c)||(b=_.map(arguments,function(a){return a}));_.each(b,function(b){var c;c=b instanceof Two.Group;if(_.isUndefined(b.id)){var f=this.count;this.count++;b.id=f}c?(c="g",_.isUndefined(b.parent)&&(b.parent=this,b.unbind(Two.Events.change).bind(Two.Events.change,_.bind(this.update,this))),b=q(b),delete b.stroke,
delete b.fill,delete b["fill-opacity"],delete b["stroke-opacity"],delete b["stroke-linecap"],delete b["stroke-linejoin"],delete b["stroke-miterlimit"],delete b["stroke-width"]):(c="path",b=q(b));b=p.createElement(c,b);a.appendChild(b);l.push(b)},this);return this},update:function(c,b,l,a,e){var f=this.elements,m=f[c];switch(b){case Two.Properties.hierarchy:_.each(l,function(a){m.appendChild(f[a])});break;case Two.Properties.demotion:_.each(l,function(a){m.removeChild(f[a])});break;default:a:{c=b;
switch(c){case "matrix":c="transform";l="matrix("+l.toString()+")";break;case "visible":c="visibility";l=l?"visible":"hidden";break;case "cap":c="stroke-linecap";break;case "join":c="stroke-linejoin";break;case "miter":c="stroke-miterlimit";break;case "linewidth":c="stroke-width";break;case "vertices":c="d";l=p.toString(l,a,e);break;case "opacity":p.setAttributes(m,{"stroke-opacity":l,"fill-opacity":l});break a}m.setAttribute(c,l)}}return this},render:function(){this.unveil();return this}})})();(function(){var q=Two.Utils.getCurveFromPoints,f=Two.Utils.mod,n=function(b){_.each(b,function(b,a){this[a]=b},this);this.children={}};_.extend(n.prototype,{appendChild:function(b){var c=b.parent,a=b.id;_.isUndefined(c)||delete c.children[a];this.children[a]=b;b.parent=this;return this},removeChild:function(b){delete this.children[b.id];return this},render:function(b){var c=this.matrix;b.save();b.transform(c[0],c[1],c[2],c[3],c[4],c[5]);_.each(this.children,function(a){a.render(b)});b.restore();return this}});
var p=function(b){_.each(b,function(b,a){this[a]=b},this)};_.extend(p.prototype,{render:function(b){var c=this.matrix,a=this.stroke,e=this.linewidth,m=this.fill,n=this.opacity,s=this.cap,j=this.join,p=this.miter,q=this.curved,z=this.closed,r=this.commands,w=r.length,t=w-1;if(!this.visible)return this;b.save();c&&b.transform(c[0],c[1],c[2],c[3],c[4],c[5]);m&&(b.fillStyle=m);a&&(b.strokeStyle=a);e&&(b.lineWidth=e);p&&(b.miterLimit=p);j&&(b.lineJoin=j);s&&(b.lineCap=s);_.isNumber(n)&&(b.globalAlpha=
n);b.beginPath();_.each(r,function(a,d){var e=a.x.toFixed(3),c=a.y.toFixed(3);if(q){var j=z?f(d-1,w):Math.max(d-1,0),l=z?f(d+1,w):Math.min(d+1,t),m=r[j],l=r[l],j=m.v.x.toFixed(3),m=m.v.y.toFixed(3),n=a.u.x.toFixed(3),s=a.u.y.toFixed(3);0>=d?b.moveTo(e,c):(b.bezierCurveTo(j,m,n,s,e,c),d>=t&&z&&(j=a.v.x.toFixed(3),m=a.v.y.toFixed(3),n=l.u.x.toFixed(3),s=l.u.y.toFixed(3),e=l.x.toFixed(3),c=l.y.toFixed(3),b.bezierCurveTo(j,m,n,s,e,c)))}else 0>=d?b.moveTo(e,c):b.lineTo(e,c)});z&&!q&&b.closePath();b.fill();
b.stroke();b.restore()}});var m={toArray:function(b,c,a){return!c?_.map(b,function(a){return{x:a.x,y:a.y}}):q(b,a)}},c=Two[Two.Types.canvas]=function(){this.count=0;this.domElement=document.createElement("canvas");this.ctx=this.domElement.getContext("2d");this.elements=[];this.stage=null};_.extend(c,{});_.extend(c,{Group:n,Element:p,getStyles:function(b){var c={},a=b.id,e=b._matrix,f=b.stroke,n=b.linewidth,s=b.fill,j=b.opacity,p=b.visible,q=b.cap,z=b.join,r=b.miter,w=b.curved,t=b.closed;b=b.vertices;
a&&(c.id=a);_.isObject(e)&&(c.matrix=e.toArray());f&&(c.stroke=f);s&&(c.fill=s);_.isNumber(j)&&(c.opacity=j);q&&(c.cap=q);z&&(c.join=z);r&&(c.miter=r);n&&(c.linewidth=n);b&&(c.commands=m.toArray(b,w,t));c.visible=!!p;c.curved=!!w;c.closed=!!t;return c},setStyles:function(b,c,a,e,f){switch(c){case "matrix":c="matrix";a=a.toArray();break;case "vertices":c="commands",b.curved=f,b.closed=e,a=m.toArray(a,b.curved,b.closed)}b[c]=a},Utils:m});_.extend(c.prototype,Backbone.Events,{setSize:function(b,c){this.width=
this.domElement.width=b;this.height=this.domElement.height=c;_.extend(this.domElement.style,{width:this.width+"px",height:this.height+"px"});return this},add:function(b){constructor=Object.getPrototypeOf(this).constructor;var c=b,a=this.elements,e=constructor.Group,f=constructor.Element,m=constructor.getStyles;_.isArray(b)||(c=_.map(arguments,function(a){return a}));_.each(c,function(b){var c;c=b instanceof Two.Group;var l=_.isNull(this.stage);if(_.isUndefined(b.id)){var n=this.count;this.count++;
b.id=n}c?(c=m.call(this,b),delete c.stroke,delete c.fill,delete c.opacity,delete c.cap,delete c.join,delete c.miter,delete c.linewidth,c=new e(c),l&&(this.stage=c,this.stage.object=b,b.parent=this,b.unbind(Two.Events.change).bind(Two.Events.change,_.bind(this.update,this)))):c=new f(m.call(this,b));a.push(c);l||this.stage.appendChild(c)},this);return this},update:function(b,c,a,e,f,m){var n=Object.getPrototypeOf(this).constructor,j=this.elements,p=j[b];switch(c){case Two.Properties.hierarchy:_.each(a,
function(a){p.appendChild(j[a])});break;case Two.Properties.demotion:_.each(a,function(a){p.removeChild(j[a]);this.elements[a]=null},this);break;default:n.setStyles.call(this,p,c,a,e,f,m)}return this},render:function(){if(_.isNull(this.stage))return this;this.ctx.clearRect(0,0,this.width,this.height);this.stage.render(this.ctx);return this}})})();(function(){var q=Two[Two.Types.canvas],f=Two.Matrix.Multiply,n=Two[Two.Types.canvas].Utils.toArray,p=Two.Utils.mod,m=function(a){q.Group.call(this,a)};_.extend(m.prototype,q.Group.prototype,{appendChild:function(){q.Group.prototype.appendChild.apply(this,arguments);this.updateMatrix();return this},updateTexture:function(a){_.each(this.children,function(b){b.updateTexture(a)});return this},updateMatrix:function(a){var b=a&&a._matrix||this.parent&&this.parent._matrix;a=a&&a._scale||this.parent&&this.parent._scale;
if(!b)return this;this._matrix=f(this.matrix,b);this._scale=this.scale*a;_.each(this.children,function(a){a.updateMatrix(this)},this);return this},render:function(a,b){_.each(this.children,function(c){c.render(a,b)})}});var c=function(a){q.Element.call(this,a)};_.extend(c.prototype,q.Element.prototype,{updateMatrix:function(a){var b=a&&a._matrix||this.parent&&this.parent._matrix;a=a&&a._scale||this.parent&&this.parent._scale;if(!b)return this;this._matrix=f(this.matrix,b);this._scale=this.scale*a;
return this},updateTexture:function(a){b.updateTexture(a,this);return this},render:function(a,b){if(!this.visible||!this.opacity||!this.buffer)return this;a.bindBuffer(a.ARRAY_BUFFER,this.textureCoordsBuffer);a.vertexAttribPointer(b.textureCoords,2,a.FLOAT,!1,0,0);a.bindTexture(a.TEXTURE_2D,this.texture);a.uniformMatrix3fv(b.matrix,!1,this._matrix);a.bindBuffer(a.ARRAY_BUFFER,this.buffer);a.vertexAttribPointer(b.position,2,a.FLOAT,!1,0,0);a.drawArrays(a.TRIANGLES,0,6);return this}});var b={canvas:document.createElement("canvas"),
uv:new Two.Array([0,0,1,0,0,1,0,1,1,0,1,1]),getBoundingClientRect:function(a,b,c){var f=Infinity,l=-Infinity,j=Infinity,m=-Infinity;_.each(a,function(a){var b=a.x,e=a.y,n;j=Math.min(e,j);f=Math.min(b,f);l=Math.max(b,l);m=Math.max(e,m);c&&(b=a.u.x,e=a.u.y,n=a.v.x,a=a.v.y,j=Math.min(e,a,j),f=Math.min(b,n,f),l=Math.max(b,n,l),m=Math.max(e,a,m))});_.isNumber(b)&&(j-=b,f-=b,l+=b,m+=b);a=l-f;b=m-j;var n={x:Math.abs(f),y:Math.abs(j)};return{top:j,left:f,right:l,bottom:m,width:a,height:b,centroid:n}},getTriangles:function(a){var b=
a.top,c=a.left,f=a.right;a=a.bottom;return new Two.Array([c,b,f,b,c,a,c,a,f,b,f,a])},updateCanvas:function(a){var b=a.commands,c=this.canvas,f=this.ctx,l=a._scale,j=a.stroke,m=a.linewidth*l,n=a.fill,q=a.opacity,r=a.cap,w=a.join,t=a.miter,v=a.curved,d=a.closed,y=b.length,D=y-1;c.width=Math.max(Math.ceil(a.rect.width*l),1);c.height=Math.max(Math.ceil(a.rect.height*l),1);a=a.rect.centroid;var E=a.x*l,H=a.y*l;f.clearRect(0,0,c.width,c.height);n&&(f.fillStyle=n);j&&(f.strokeStyle=j);m&&(f.lineWidth=m);
t&&(f.miterLimit=t);w&&(f.lineJoin=w);r&&(f.lineCap=r);_.isNumber(q)&&(f.globalAlpha=q);f.beginPath();_.each(b,function(a,c){var j=(a.x*l+E).toFixed(3),m=(a.y*l+H).toFixed(3);if(v){var n=d?p(c-1,y):Math.max(c-1,0),u=d?p(c+1,y):Math.min(c+1,D),q=b[n],u=b[u],n=(q.v.x*l+E).toFixed(3),q=(q.v.y*l+H).toFixed(3),r=(a.u.x*l+E).toFixed(3),k=(a.u.y*l+H).toFixed(3);0>=c?f.moveTo(j,m):(f.bezierCurveTo(n,q,r,k,j,m),c>=D&&d&&(n=(a.v.x*l+E).toFixed(3),q=(a.v.y*l+H).toFixed(3),r=(u.u.x*l+E).toFixed(3),k=(u.u.y*l+
H).toFixed(3),j=(u.x*l+E).toFixed(3),m=(u.y*l+H).toFixed(3),f.bezierCurveTo(n,q,r,k,j,m)))}else 0>=c?f.moveTo(j,m):f.lineTo(j,m)});d&&!v&&f.closePath();f.fill();f.stroke()},updateTexture:function(a,b){this.updateCanvas(b);b.texture&&a.deleteTexture(b.texture);a.bindBuffer(a.ARRAY_BUFFER,b.textureCoordsBuffer);b.texture=a.createTexture();a.bindTexture(a.TEXTURE_2D,b.texture);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_S,a.CLAMP_TO_EDGE);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_T,a.CLAMP_TO_EDGE);
a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.LINEAR);a.texImage2D(a.TEXTURE_2D,0,a.RGBA,a.RGBA,a.UNSIGNED_BYTE,this.canvas)},updateBuffer:function(a,b,c){_.isObject(b.buffer)&&a.deleteBuffer(b.buffer);b.buffer=a.createBuffer();a.bindBuffer(a.ARRAY_BUFFER,b.buffer);a.enableVertexAttribArray(c.position);a.bufferData(a.ARRAY_BUFFER,b.triangles,a.STATIC_DRAW);_.isObject(b.textureCoordsBuffer)&&a.deleteBuffer(b.textureCoordsBuffer);b.textureCoordsBuffer=a.createBuffer();a.bindBuffer(a.ARRAY_BUFFER,
b.textureCoordsBuffer);a.enableVertexAttribArray(c.textureCoords);a.bufferData(a.ARRAY_BUFFER,this.uv,a.STATIC_DRAW)},program:{create:function(a,b){var c=a.createProgram();_.each(b,function(b){a.attachShader(c,b)});a.linkProgram(c);if(!a.getProgramParameter(c,a.LINK_STATUS))throw error=a.getProgramInfoLog(c),a.deleteProgram(c),new Two.Utils.Error("unable to link program: "+error);return c}},shaders:{create:function(a,b,c){c=a.createShader(a[c]);a.shaderSource(c,b);a.compileShader(c);if(!a.getShaderParameter(c,
a.COMPILE_STATUS))throw b=a.getShaderInfoLog(c),a.deleteShader(c),new Two.Utils.Error("unable to compile shader "+c+": "+b);return c},types:{vertex:"VERTEX_SHADER",fragment:"FRAGMENT_SHADER"},vertex:"attribute vec2 a_position;\nattribute vec2 a_textureCoords;\n\nuniform mat3 u_matrix;\nuniform vec2 u_resolution;\n\nvarying vec2 v_textureCoords;\n\nvoid main() {\n vec2 projected = (u_matrix * vec3(a_position, 1)).xy;\n vec2 normal = projected / u_resolution;\n vec2 clipspace = (normal * 2.0) - 1.0;\n\n gl_Position = vec4(clipspace * vec2(1.0, -1.0), 0.0, 1.0);\n v_textureCoords = a_textureCoords;\n}",
fragment:"precision mediump float;\n\nuniform sampler2D u_image;\nvarying vec2 v_textureCoords;\n\nvoid main() {\n gl_FragColor = texture2D(u_image, v_textureCoords);\n}"}};b.ctx=b.canvas.getContext("2d");var l=Two[Two.Types.webgl]=function(a){this.count=0;this.domElement=document.createElement("canvas");this.elements=[];this.stage=null;a=_.defaults(a||{},{antialias:!1,alpha:!0,premultipliedAlpha:!0,stencil:!0,preserveDrawingBuffer:!1});a=this.ctx=this.domElement.getContext("webgl",a)||this.domElement.getContext("experimental-webgl",
a);if(!this.ctx)throw new Two.Utils.Error("unable to create a webgl context. Try using another renderer.");var c=b.shaders.create(a,b.shaders.vertex,b.shaders.types.vertex),f=b.shaders.create(a,b.shaders.fragment,b.shaders.types.fragment);this.program=b.program.create(a,[c,f]);a.useProgram(this.program);this.program.position=a.getAttribLocation(this.program,"a_position");this.program.matrix=a.getUniformLocation(this.program,"u_matrix");this.program.textureCoords=a.getAttribLocation(this.program,"a_textureCoords");
a.disable(a.DEPTH_TEST);a.enable(a.BLEND);a.blendEquationSeparate(a.FUNC_ADD,a.FUNC_ADD);a.blendFuncSeparate(a.SRC_ALPHA,a.ONE_MINUS_SRC_ALPHA,a.ONE,a.ONE_MINUS_SRC_ALPHA)};_.extend(l,{Group:m,Element:c,getStyles:function(a){var e={},f=a.id,l=a._matrix,m=a.stroke,j=a.linewidth,p=a.fill,q=a.opacity,z=a.visible,r=a.cap,w=a.join,t=a.miter,v=a.curved,d=a.closed,y=a.vertices;f&&(e.id=f);_.isObject(l)&&(e.matrix=e._matrix=l.toArray(!0),e.scale=e._scale=1);m&&(e.stroke=m);p&&(e.fill=p);_.isNumber(q)&&(e.opacity=
q);r&&(e.cap=r);w&&(e.join=w);t&&(e.miter=t);j&&(e.linewidth=j);y&&(e.vertices=n(y,v,d),e.commands=e.vertices,e.rect=b.getBoundingClientRect(e.commands,e.linewidth,e.curved),e.triangles=b.getTriangles(e.rect));e.visible=!!z;e.curved=!!v;e.closed=!!d;a instanceof Two.Polygon&&(b.updateBuffer(this.ctx,e,this.program),c.prototype.updateTexture.call(e,this.ctx));return e},setStyles:function(a,c,f,l,m,j){var p=!1;/matrix/.test(c)?(a[c]=f.toArray(!0),_.isNumber(l)&&(p=a.scale!==l,a.scale=l),a.updateMatrix()):
/(stroke|fill|opacity|cap|join|miter|linewidth)/.test(c)?(a[c]=f,a.rect=b.getBoundingClientRect(a.commands,a.linewidth,a.curved),a.triangles=b.getTriangles(a.rect),b.updateBuffer(this.ctx,a,this.program),p=!0):"vertices"===c?(_.isUndefined(l)||(a.closed=l),_.isUndefined(m)||(a.curved=m),j?a.commands=n(f,a.curved,a.closed):(a.vertices=n(f,a.curved,a.closed),a.commands=a.vertices),a.rect=b.getBoundingClientRect(a.vertices,a.linewidth,a.curved),a.triangles=b.getTriangles(a.rect),b.updateBuffer(this.ctx,
a,this.program),p=!0):a[c]=f;p&&a.updateTexture(this.ctx)}});_.extend(l.prototype,Backbone.Events,q.prototype,{setSize:function(a,b){q.prototype.setSize.apply(this,arguments);this.ctx.viewport(0,0,a,b);var c=this.ctx.getUniformLocation(this.program,"u_resolution");this.ctx.uniform2f(c,a,b);return this},render:function(){if(_.isNull(this.stage))return this;this.stage.render(this.ctx,this.program);return this}})})();(function(){var q=Two.Shape=function(f){this._matrix=new Two.Matrix;var n=_.debounce(_.bind(function(){var f=this._matrix.identity().translate(this.translation.x,this.translation.y).scale(this.scale).rotate(this.rotation);this.trigger(Two.Events.change,this.id,"matrix",f,this.scale)},this),0);this._rotation="rotation";Object.defineProperty(this,"rotation",{get:function(){return this._rotation},set:function(f){this._rotation=f;n()}});this._scale="scale";Object.defineProperty(this,"scale",{get:function(){return this._scale},
set:function(f){this._scale=f;n()}});this.translation=new Two.Vector;this.rotation=0;this.scale=1;this.translation.bind(Two.Events.change,n);if(f)return this;q.MakeGetterSetter(this,q.Properties);this.fill="#fff";this.stroke="#000";this.opacity=this.linewidth=1;this.visible=!0;this.join=this.cap="round";this.miter=1};_.extend(q,{Properties:"fill stroke linewidth opacity visible cap join miter".split(" "),MakeGetterSetter:function(f,n){_.isArray(n)||(n=[n]);_.each(n,function(n){var m="_"+n;Object.defineProperty(f,
n,{get:function(){return this[m]},set:function(c){this[m]=c;this.trigger(Two.Events.change,this.id,n,c,this)}})})}});_.extend(q.prototype,Backbone.Events,{addTo:function(f){f.add(this);return this},noFill:function(){this.fill="transparent";return this},noStroke:function(){this.stroke="transparent";return this},clone:function(){var f=new q;f.translation.copy(this.translation);_.each(q.Properties,function(n){f[n]=this[n]},this);return this}})})();(function(){var q=Two.Group=function(){Two.Shape.call(this,!0);delete this.stroke;delete this.fill;delete this.linewidth;delete this.opacity;delete this.cap;delete this.join;delete this.miter;q.MakeGetterSetter(this,Two.Shape.Properties);this.children={}};_.extend(q,{MakeGetterSetter:function(f,n){_.isArray(n)||(n=[n]);_.each(n,function(n){var m="_"+n;Object.defineProperty(f,n,{get:function(){return this[m]},set:function(c){this[m]=c;_.each(this.children,function(b){b[n]=c})}})})}});_.extend(q.prototype,
Two.Shape.prototype,{clone:function(f){f=f||this.parent;var n=_.map(this.children,function(m){return m.clone(f)}),p=new q;f.add(p);p.add(n);p.translation.copy(this.translation);p.rotation=this.rotation;p.scale=this.scale;return p},center:function(){var f=this.getBoundingClientRect();f.centroid={x:f.left+f.width/2,y:f.top+f.height/2};_.each(this.children,function(n){n.translation.subSelf(f.centroid)});this.translation.copy(f.centroid);return this},add:function(f){var n=f,p=this.children,m=this.parent,
c=[];_.isArray(f)||(n=_.toArray(arguments));var b=_.bind(function(b,a,c,f,m,n){this.trigger(Two.Events.change,b,a,c,f,m,n)},this);_.each(n,function(f){var a=f.id,e=f.parent;_.isUndefined(a)&&(m.add(f),a=f.id);_.isUndefined(p[a])&&(e&&delete e.children[a],p[a]=f,f.parent=this,f.unbind(Two.Events.change).bind(Two.Events.change,b),c.push(a))},this);0<c.length&&this.trigger(Two.Events.change,this.id,Two.Properties.hierarchy,c);return this},remove:function(f){var n=f,p=this.children,m=this.parent,c=[];
if(0>=arguments.length&&m)return m.remove(this),this;_.isArray(f)||(n=_.toArray(arguments));_.each(n,function(b){var f=b.id;f in p&&(delete p[f],b.unbind(Two.Events.change),c.push(f))});0<c.length&&this.trigger(Two.Events.change,this.id,Two.Properties.demotion,c);return this},getBoundingClientRect:function(){var f=Infinity,n=-Infinity,p=Infinity,m=-Infinity;_.each(this.children,function(b){b=b.getBoundingClientRect();p&&(f&&n&&m)&&(p=Math.min(b.top,p),f=Math.min(b.left,f),n=Math.max(b.right,n),m=
Math.max(b.bottom,m))},this);var c=this._matrix.multiply(f,p,1),b=this._matrix.multiply(n,m,1);return{top:c.y,left:c.x,right:b.x,bottom:b.y,width:b.x-c.x,height:b.y-c.y}},noFill:function(){_.each(this.children,function(f){f.noFill()});return this},noStroke:function(){_.each(this.children,function(f){f.noStroke()});return this}})})();(function(){var q=Math.min,f=Math.max,n=Math.round,p=Two.Polygon=function(m,c,b){Two.Shape.call(this);c=!!c;b=!!b;var l=0,a=1,e=!1,p=m.slice(0),A=_.debounce(_.bind(function(){var f,j;if(e){f=this.vertices.length;f-=1;j=n(l*f);f=n(a*f);for(p.length=0;j<f+1;j++){var m=this.vertices[j];p.push(new Two.Vector(m.x,m.y))}}this.trigger(Two.Events.change,this.id,"vertices",p,c,b,e);e=!1},this),0);Object.defineProperty(this,"closed",{get:function(){return c},set:function(a){c=!!a;A()}});Object.defineProperty(this,
"curved",{get:function(){return b},set:function(a){b=!!a;A()}});Object.defineProperty(this,"beginning",{get:function(){return l},set:function(a){l=q(f(a,0),1);e=!0;A()}});Object.defineProperty(this,"ending",{get:function(){return a},set:function(b){a=q(f(b,0),1);e=!0;A()}});this.vertices=m.slice(0);_.each(this.vertices,function(a){a.bind(Two.Events.change,A)},this);A()};_.extend(p.prototype,Two.Shape.prototype,{clone:function(){var f=_.map(this.vertices,function(b){return new Two.Vector(b.x,b.y)}),
c=new p(f,this.closed,this.curved);_.each(Two.Shape.Properties,function(b){c[b]=this[b]},this);c.translation.copy(this.translation);c.rotation=this.rotation;c.scale=this.scale;return c},center:function(){var f=this.getBoundingClientRect();f.centroid={x:f.left+f.width/2,y:f.top+f.height/2};_.each(this.vertices,function(c){c.subSelf(f.centroid)});this.translation.addSelf(f.centroid);return this},remove:function(){if(!this.parent)return this;this.parent.remove(this);return this},getBoundingClientRect:function(){var f=
this.linewidth,c=Infinity,b=-Infinity,l=Infinity,a=-Infinity;_.each(this.vertices,function(e){var f=e.x;e=e.y;l=Math.min(e,l);c=Math.min(f,c);b=Math.max(f,b);a=Math.max(e,a)});var l=l-f,c=c-f,b=b+f,a=a+f,f=this._matrix.multiply(c,l,1),e=this._matrix.multiply(b,a,1);return{top:f.y,left:f.x,right:e.x,bottom:e.y,width:e.x-f.x,height:e.y-f.y}}})})();