UNPKG

@sky-foundry/two.js

Version:

A renderer agnostic two-dimensional drawing api for the web.

101 lines 138 kB
var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(a,h,m){a!=Array.prototype&&a!=Object.prototype&&(a[h]=m.value)};$jscomp.getGlobal=function(a){return"undefined"!=typeof window&&window===a?a:"undefined"!=typeof global&&null!=global?global:a};$jscomp.global=$jscomp.getGlobal(this);$jscomp.SYMBOL_PREFIX="jscomp_symbol_"; $jscomp.initSymbol=function(){$jscomp.initSymbol=function(){};$jscomp.global.Symbol||($jscomp.global.Symbol=$jscomp.Symbol)};$jscomp.Symbol=function(){var a=0;return function(h){return $jscomp.SYMBOL_PREFIX+(h||"")+a++}}(); $jscomp.initSymbolIterator=function(){$jscomp.initSymbol();var a=$jscomp.global.Symbol.iterator;a||(a=$jscomp.global.Symbol.iterator=$jscomp.global.Symbol("iterator"));"function"!=typeof Array.prototype[a]&&$jscomp.defineProperty(Array.prototype,a,{configurable:!0,writable:!0,value:function(){return $jscomp.arrayIterator(this)}});$jscomp.initSymbolIterator=function(){}};$jscomp.arrayIterator=function(a){var h=0;return $jscomp.iteratorPrototype(function(){return h<a.length?{done:!1,value:a[h++]}:{done:!0}})}; $jscomp.iteratorPrototype=function(a){$jscomp.initSymbolIterator();a={next:a};a[$jscomp.global.Symbol.iterator]=function(){return this};return a};$jscomp.iteratorFromArray=function(a,h){$jscomp.initSymbolIterator();a instanceof String&&(a+="");var m=0,k={next:function(){if(m<a.length){var g=m++;return{value:h(g,a[g]),done:!1}}k.next=function(){return{done:!0,value:void 0}};return k.next()}};k[Symbol.iterator]=function(){return k};return k}; $jscomp.polyfill=function(a,h,m,k){if(h){m=$jscomp.global;a=a.split(".");for(k=0;k<a.length-1;k++){var g=a[k];g in m||(m[g]={});m=m[g]}a=a[a.length-1];k=m[a];h=h(k);h!=k&&null!=h&&$jscomp.defineProperty(m,a,{configurable:!0,writable:!0,value:h})}};$jscomp.polyfill("Array.prototype.keys",function(a){return a?a:function(){return $jscomp.iteratorFromArray(this,function(a){return a})}},"es6","es3"); $jscomp.polyfill("Array.prototype.values",function(a){return a?a:function(){return $jscomp.iteratorFromArray(this,function(a,m){return m})}},"es8","es3");$jscomp.polyfill("Number.EPSILON",function(a){return Math.pow(2,-52)},"es6","es3");$jscomp.polyfill("Array.prototype.fill",function(a){return a?a:function(a,m,k){var g=this.length||0;0>m&&(m=Math.max(0,g+m));if(null==k||k>g)k=g;k=Number(k);0>k&&(k=Math.max(0,g+k));for(m=Number(m||0);m<k;m++)this[m]=a;return this}},"es6","es3"); (this||window).Two=function(a){function h(){var c=document.body.getBoundingClientRect(),a=this.width=c.width;c=this.height=c.height;this.renderer.setSize(a,c,this.ratio)}function m(c,a){this.width=c;this.height=a;this.trigger(n.Events.resize,c,a)}function k(){for(var c=0;c<n.Instances.length;c++){var a=n.Instances[c];a.playing&&a.update()}n.nextFrameID=M(k)}var g="undefined"!=typeof window?window:"undefined"!=typeof global?global:null,d=Object.prototype.toString,c={_indexAmount:0,natural:{slice:Array.prototype.slice, indexOf:Array.prototype.indexOf,keys:Object.keys,bind:Function.prototype.bind,create:Object.create},identity:function(c){return c},isArguments:function(c){return"[object Arguments]"===d.call(c)},isFunction:function(c){return"[object Function]"===d.call(c)},isString:function(c){return"[object String]"===d.call(c)},isNumber:function(c){return"[object Number]"===d.call(c)},isDate:function(c){return"[object Date]"===d.call(c)},isRegExp:function(c){return"[object RegExp]"===d.call(c)},isError:function(c){return"[object Error]"=== d.call(c)},isFinite:function(c){return isFinite(c)&&!isNaN(parseFloat(c))},isNaN:function(a){return c.isNumber(a)&&a!==+a},isBoolean:function(c){return!0===c||!1===c||"[object Boolean]"===d.call(c)},isNull:function(c){return null===c},isUndefined:function(c){return void 0===c},isEmpty:function(a){return null==a?!0:y&&(c.isArray(a)||c.isString(a)||c.isArguments(a))?0===a.length:0===c.keys(a).length},isElement:function(c){return!(!c||1!==c.nodeType)},isArray:Array.isArray||function(c){return"[object Array]"=== d.call(c)},isObject:function(c){var a=typeof c;return"function"===a||"object"===a&&!!c},toArray:function(a){return a?c.isArray(a)?B.call(a):y(a)?c.map(a,c.identity):c.values(a):[]},range:function(c,a,b){null==a&&(a=c||0,c=0);b=b||1;a=Math.max(Math.ceil((a-c)/b),0);for(var x=Array(a),e=0;e<a;e++,c+=b)x[e]=c;return x},indexOf:function(a,b){if(c.natural.indexOf)return c.natural.indexOf.call(a,b);for(var x=0;x<a.length;x++)if(a[x]===b)return x;return-1},has:function(c,a){return null!=c&&hasOwnProperty.call(c, a)},bind:function(a,b){var x=c.natural.bind;if(x&&a.bind===x)return x.apply(a,B.call(arguments,1));var e=B.call(arguments,2);return function(){a.apply(b,e)}},extend:function(c){for(var a=B.call(arguments,1),b=0;b<a.length;b++){var x=a[b],e;for(e in x)c[e]=x[e]}return c},defaults:function(c){for(var a=B.call(arguments,1),b=0;b<a.length;b++){var x=a[b],e;for(e in x)void 0===c[e]&&(c[e]=x[e])}return c},keys:function(a){if(!c.isObject(a))return[];if(c.natural.keys)return c.natural.keys(a);var b=[],x; for(x in a)c.has(a,x)&&b.push(x);return b},values:function(a){for(var b=c.keys(a),x=[],e=0;e<b.length;e++)x.push(a[b[e]]);return x},each:function(a,b,e){e=e||this;for(var x=!y(a)&&c.keys(a),f=(x||a).length,l=0;l<f;l++){var d=x?x[l]:l;b.call(e,a[d],d,a)}return a},map:function(a,b,e){e=e||this;for(var x=!y(a)&&c.keys(a),f=(x||a).length,l=[],d=0;d<f;d++){var q=x?x[d]:d;l[d]=b.call(e,a[q],q,a)}return l},once:function(c){var a=!1;return function(){if(a)return c;a=!0;return c.apply(this,arguments)}},after:function(c, a){return function(){for(;1>--c;)return a.apply(this,arguments)}},uniqueId:function(a){var b=++c._indexAmount+"";return a?a+b:b}},b=Math.sin,f=Math.cos,t=Math.sqrt,u=Math.abs,e=Math.PI,l=e/2,q=Math.pow,p=Math.min,C=Math.max,A=0,B=c.natural.slice,r=g.performance&&g.performance.now?g.performance:Date,w=Math.pow(2,53)-1,y=function(c){c=null==c?void 0:c.length;return"number"==typeof c&&0<=c&&c<=w},z={temp:g.document?g.document.createElement("div"):{},hasEventListeners:c.isFunction(g.addEventListener), bind:function(c,a,b,e){this.hasEventListeners?c.addEventListener(a,b,!!e):c.attachEvent("on"+a,b);return z},unbind:function(c,a,b,e){z.hasEventListeners?c.removeEventListeners(a,b,!!e):c.detachEvent("on"+a,b);return z},getRequestAnimationFrame:function(){var a=0,b=["ms","moz","webkit","o"],e=g.requestAnimationFrame;if(!e){for(var f=0;f<b.length;f++)e=g[b[f]+"RequestAnimationFrame"]||e;e=e||function(c,b){var e=(new Date).getTime(),x=Math.max(0,16-(e-a));b=g.setTimeout(function(){c(e+x)},x);a=e+x;return b}}e.init= c.once(k);return e}},n=g.Two=function(a){a=c.defaults(a||{},{fullscreen:!1,width:640,height:480,type:n.Types.svg,autostart:!1});c.each(a,function(c,a){/fullscreen/i.test(a)||/autostart/i.test(a)||(this[a]=c)},this);if(c.isElement(a.domElement)){var b=a.domElement.tagName.toLowerCase();/^(CanvasRenderer-canvas|WebGLRenderer-canvas|SVGRenderer-svg)$/.test(this.type+"-"+b)||(this.type=n.Types[b])}this.renderer=new n[this.type](this);n.Utils.setPlaying.call(this,a.autostart);this.frameCount=0;a.fullscreen? (b=c.bind(h,this),c.extend(document.body.style,{overflow:"hidden",margin:0,padding:0,top:0,left:0,right:0,bottom:0,position:"fixed"}),c.extend(this.renderer.domElement.style,{display:"block",top:0,left:0,right:0,bottom:0,position:"fixed"}),z.bind(g,"resize",b),b()):c.isElement(a.domElement)||(this.renderer.setSize(a.width,a.height,this.ratio),this.width=a.width,this.height=a.height);this.renderer.bind(n.Events.resize,c.bind(m,this));this.scene=this.renderer.scene;n.Instances.push(this);a.autostart&& M.init()};c.extend(n,{root:g,nextFrameID:null,Array:g.Float32Array||Array,Types:{webgl:"WebGLRenderer",svg:"SVGRenderer",canvas:"CanvasRenderer"},Version:"v0.7.0-beta.3",PublishDate:"2018-12-08T22:41:43+01:00",Identifier:"two-",Events:{play:"play",pause:"pause",update:"update",render:"render",resize:"resize",change:"change",remove:"remove",insert:"insert",order:"order",load:"load"},Commands:{move:"M",line:"L",curve:"C",arc:"A",close:"Z"},Resolution:12,Instances:[],noConflict:function(){g.Two=a;return n}, uniqueId:function(){var c=A;A++;return c},Utils:c.extend(c,{performance:r,defineProperty:function(c){var a="_"+c,b="_flag"+c.charAt(0).toUpperCase()+c.slice(1);Object.defineProperty(this,c,{enumerable:!0,get:function(){return this[a]},set:function(c){this[a]=c;this[b]=!0}})},Image:null,isHeadless:!1,shim:function(a,b){n.CanvasRenderer.Utils.shim(a);c.isUndefined(b)||(n.Utils.Image=b);n.Utils.isHeadless=!0;return a},release:function(a){if(c.isObject(a))return c.isFunction(a.unbind)&&a.unbind(),a.vertices&& (c.isFunction(a.vertices.unbind)&&a.vertices.unbind(),c.each(a.vertices,function(a){c.isFunction(a.unbind)&&a.unbind()})),a.children&&c.each(a.children,function(a){n.Utils.release(a)}),a},xhr:function(a,c){var b=new XMLHttpRequest;b.open("GET",a);b.onreadystatechange=function(){4===b.readyState&&200===b.status&&c(b.responseText)};b.send();return b},Curve:{CollinearityEpsilon:q(10,-30),RecursionLimit:16,CuspLimit:0,Tolerance:{distance:.25,angle:0,epsilon:Number.EPSILON},abscissas:[[.5773502691896257], [0,.7745966692414834],[.33998104358485626,.8611363115940526],[0,.5384693101056831,.906179845938664],[.2386191860831969,.6612093864662645,.932469514203152],[0,.4058451513773972,.7415311855993945,.9491079123427585],[.1834346424956498,.525532409916329,.7966664774136267,.9602898564975363],[0,.3242534234038089,.6133714327005904,.8360311073266358,.9681602395076261],[.14887433898163122,.4333953941292472,.6794095682990244,.8650633666889845,.9739065285171717],[0,.26954315595234496,.5190961292068118,.7301520055740494, .8870625997680953,.978228658146057],[.1252334085114689,.3678314989981802,.5873179542866175,.7699026741943047,.9041172563704749,.9815606342467192],[0,.2304583159551348,.44849275103644687,.6423493394403402,.8015780907333099,.9175983992229779,.9841830547185881],[.10805494870734367,.31911236892788974,.5152486363581541,.6872929048116855,.827201315069765,.9284348836635735,.9862838086968123],[0,.20119409399743451,.3941513470775634,.5709721726085388,.7244177313601701,.8482065834104272,.937273392400706,.9879925180204854], [.09501250983763744,.2816035507792589,.45801677765722737,.6178762444026438,.755404408355003,.8656312023878318,.9445750230732326,.9894009349916499]],weights:[[1],[.8888888888888888,.5555555555555556],[.6521451548625461,.34785484513745385],[.5688888888888889,.47862867049936647,.23692688505618908],[.46791393457269104,.3607615730481386,.17132449237917036],[.4179591836734694,.3818300505051189,.27970539148927664,.1294849661688697],[.362683783378362,.31370664587788727,.22238103445337448,.10122853629037626], [.3302393550012598,.31234707704000286,.26061069640293544,.1806481606948574,.08127438836157441],[.29552422471475287,.26926671930999635,.21908636251598204,.1494513491505806,.06667134430868814],[.2729250867779006,.26280454451024665,.23319376459199048,.18629021092773426,.1255803694649046,.05566856711617366],[.24914704581340277,.2334925365383548,.20316742672306592,.16007832854334622,.10693932599531843,.04717533638651183],[.2325515532308739,.22628318026289723,.2078160475368885,.17814598076194574,.13887351021978725, .09212149983772845,.04048400476531588],[.2152638534631578,.2051984637212956,.18553839747793782,.15720316715819355,.12151857068790319,.08015808715976021,.03511946033175186],[.2025782419255613,.19843148532711158,.1861610000155622,.16626920581699392,.13957067792615432,.10715922046717194,.07036604748810812,.03075324199611727],[.1894506104550685,.18260341504492358,.16915651939500254,.14959598881657674,.12462897125553388,.09515851168249279,.062253523938647894,.027152459411754096]]},devicePixelRatio:g.devicePixelRatio|| 1,getBackingStoreRatio:function(a){return a.webkitBackingStorePixelRatio||a.mozBackingStorePixelRatio||a.msBackingStorePixelRatio||a.oBackingStorePixelRatio||a.backingStorePixelRatio||1},getRatio:function(a){return n.Utils.devicePixelRatio/I(a)},setPlaying:function(a){this.playing=!!a;return this},getComputedMatrix:function(a,c){c=c&&c.identity()||new n.Matrix;var b=a;for(a=[];b&&b._matrix;)a.push(b._matrix),b=b.parent;a.reverse();for(b=0;b<a.length;b++){var e=a[b].elements;c.multiply(e[0],e[1],e[2], e[3],e[4],e[5],e[6],e[7],e[8],e[9])}return c},deltaTransformPoint:function(a,c,b){return new n.Vector(c*a.a+b*a.c,c*a.b+b*a.d)},decomposeMatrix:function(a){var c=n.Utils.deltaTransformPoint(a,0,1),b=n.Utils.deltaTransformPoint(a,1,0);c=180/Math.PI*Math.atan2(c.y,c.x)-90;return{translateX:a.e,translateY:a.f,scaleX:Math.sqrt(a.a*a.a+a.b*a.b),scaleY:Math.sqrt(a.c*a.c+a.d*a.d),skewX:c,skewY:180/Math.PI*Math.atan2(b.y,b.x),rotation:c}},extractCSSText:function(a,b){b||(b={});a=a.split(";");for(var e=0;e< a.length;e++){var f=a[e].split(":");var l=f[0];f=f[1];c.isUndefined(l)||c.isUndefined(f)||(b[l]=f.replace(/\s/,""))}return b},getSvgStyles:function(a){for(var c={},b=0;b<a.style.length;b++){var e=a.style[b];c[e]=a.style[e]}return c},applySvgViewBox:function(a,c){var b=c.split(/\s/);c=parseFloat(b[0]);var e=parseFloat(b[1]),f=parseFloat(b[2]);b=parseFloat(b[3]);f=Math.min(this.width/f,this.height/b);a.translation.x-=c*f;a.translation.y-=e*f;a.scale=f;return a},applySvgAttributes:function(a,b,e){var f= {},l={},d={},q;if(g.getComputedStyle){var x=g.getComputedStyle(a);for(q=x.length;q--;){var t=x[q];var p=x[t];c.isUndefined(p)||(f[t]=p)}}for(q=0;q<a.attributes.length;q++)p=a.attributes[q],/style/i.test(p.nodeName)?n.Utils.extractCSSText(p.value,d):l[p.nodeName]=p.value;c.isUndefined(f.opacity)||(f["stroke-opacity"]=f.opacity,f["fill-opacity"]=f.opacity,delete f.opacity);e&&c.defaults(f,e);c.extend(f,l,d);f.visible=!(c.isUndefined(f.display)&&/none/i.test(f.display))||c.isUndefined(f.visibility)&& /hidden/i.test(f.visibility);for(t in f)switch(p=f[t],t){case "transform":if(/none/i.test(p))break;e=a.transform&&a.transform.baseVal&&0<a.transform.baseVal.length?a.transform.baseVal[0].matrix:a.getCTM?a.getCTM():null;if(c.isNull(e))break;e=n.Utils.decomposeMatrix(e);b.translation.set(e.translateX,e.translateY);b.rotation=e.rotation;b.scale=new n.Vector(e.scaleX,e.scaleY);e=parseFloat((f.x+"").replace("px"));l=parseFloat((f.y+"").replace("px"));e&&(b.translation.x=e);l&&(b.translation.y=l);break; case "viewBox":n.Utils.applySvgViewBox.call(this,b,p);break;case "visible":b.visible=p;break;case "stroke-linecap":b.cap=p;break;case "stroke-linejoin":b.join=p;break;case "stroke-miterlimit":b.miter=p;break;case "stroke-width":b.linewidth=parseFloat(p);break;case "opacity":case "stroke-opacity":case "fill-opacity":b instanceof n.Group||(b.opacity=parseFloat(p));break;case "fill":case "stroke":/url\(#.*\)/i.test(p)?b[t]=this.getById(p.replace(/url\(#(.*)\)/i,"$1")):b[t]=/none/i.test(p)?"transparent": p;break;case "id":b.id=p;break;case "class":case "className":b.classList=p.split(" ")}return f},read:{svg:function(a){var c=n.Utils.read.g.call(this,a);a.getAttribute("viewBox");return c},g:function(a){var c=new n.Group;var b=n.Utils.getSvgStyles.call(this,a);for(var e=0,f=a.childNodes.length;e<f;e++){var l=a.childNodes[e],d=l.nodeName;if(!d)return;d=d.replace(/svg:/ig,"").toLowerCase();d in n.Utils.read&&(l=n.Utils.read[d].call(c,l,b),c.add(l))}return c},polygon:function(a,c){var b=[];a.getAttribute("points").replace(/(-?[\d\.?]+)[,|\s](-?[\d\.?]+)/g, function(a,c,e){b.push(new n.Anchor(parseFloat(c),parseFloat(e)))});var e=(new n.Path(b,!0)).noStroke();e.fill="black";n.Utils.applySvgAttributes.call(this,a,e,c);return e},polyline:function(a,c){a=n.Utils.read.polygon.call(this,a,c);a.closed=!1;return a},path:function(a,b){var e=a.getAttribute("d"),f=new n.Anchor,l,d,t=!1,x=!1,p=e.match(/[a-df-z][^a-df-z]*/ig),g=p.length-1;c.each(p.slice(0),function(a,c){var b,e=a[0];var f=e.toLowerCase();var l=a.slice(1).trim().split(/[\s,]+|(?=\s?[+\-])/),d=[], q,t=!1;for(b=0;b<l.length;b++){var x=l[b];var n=x.indexOf(".");var g=x.lastIndexOf(".");if(n!==g){x=x.split(".");n=x[0]+"."+x[1];l.splice(b,1,n);for(n=2;n<x.length;n++)l.splice(b+n-1,0,"0."+x[n]);t=!0}}t&&(a=e+l.join(","));0>=c&&(p=[]);switch(f){case "h":case "v":1<l.length&&(q=1);break;case "m":case "l":case "t":2<l.length&&(q=2);break;case "s":case "q":4<l.length&&(q=4);break;case "c":6<l.length&&(q=6);break;case "a":7<l.length&&(q=7)}if(q){b=0;c=l.length;for(f=0;b<c;b+=q){a=e;if(0<f)switch(e){case "m":a= "l";break;case "M":a="L"}d.push(a+l.slice(b,b+q).join(" "));f++}p=Array.prototype.concat.apply(p,d)}else p.push(a)});var u=[];c.each(p,function(a,b){var e=a[0],p=e.toLowerCase();d=a.slice(1).trim();d=d.replace(/(-?\d+(?:\.\d*)?)[eE]([+\-]?\d+)/g,function(a,c,b){return parseFloat(c)*q(10,b)});d=d.split(/[\s,]+|(?=\s?[+\-])/);x=e===p;switch(p){case "z":if(b>=g)t=!0;else{var r=f.x;b=f.y;r=new n.Anchor(r,b,void 0,void 0,void 0,void 0,n.Commands.close);for(b=u.length-1;0<=b;b--)if(p=u[b],/m/i.test(p.command)){f= p;break}}break;case "m":case "l":l=void 0;r=parseFloat(d[0]);b=parseFloat(d[1]);r=new n.Anchor(r,b,void 0,void 0,void 0,void 0,/m/i.test(p)?n.Commands.move:n.Commands.line);x&&r.addSelf(f);f=r;break;case "h":case "v":b=/h/i.test(p)?"x":"y";p=/x/i.test(b)?"y":"x";r=new n.Anchor(void 0,void 0,void 0,void 0,void 0,void 0,n.Commands.line);r[b]=parseFloat(d[0]);r[p]=f[p];x&&(r[b]+=f[b]);f=r;break;case "c":case "s":r=f.x;b=f.y;l||(l=new n.Vector);if(/c/i.test(p)){e=parseFloat(d[0]);var w=parseFloat(d[1]); var k=parseFloat(d[2]);var h=parseFloat(d[3]);p=parseFloat(d[4]);a=parseFloat(d[5])}else p=L(f,l,x),e=p.x,w=p.y,k=parseFloat(d[0]),h=parseFloat(d[1]),p=parseFloat(d[2]),a=parseFloat(d[3]);x&&(e+=r,w+=b,k+=r,h+=b,p+=r,a+=b);c.isObject(f.controls)||n.Anchor.AppendCurveProperties(f);f.controls.right.set(e-f.x,w-f.y);f=r=new n.Anchor(p,a,k-p,h-a,void 0,void 0,n.Commands.curve);l=r.controls.left;break;case "t":case "q":r=f.x;b=f.y;l||(l=new n.Vector);l.isZero()?(e=r,w=b):(e=l.x,w=l.y);/q/i.test(p)?(k= parseFloat(d[0]),h=parseFloat(d[1]),p=parseFloat(d[2]),a=parseFloat(d[3])):(p=L(f,l,x),k=p.x,h=p.y,p=parseFloat(d[0]),a=parseFloat(d[1]));x&&(e+=r,w+=b,k+=r,h+=b,p+=r,a+=b);c.isObject(f.controls)||n.Anchor.AppendCurveProperties(f);f.controls.right.set(e-f.x,w-f.y);f=r=new n.Anchor(p,a,k-p,h-a,void 0,void 0,n.Commands.curve);l=r.controls.left;break;case "a":r=f.x;b=f.y;e=parseFloat(d[0]);w=parseFloat(d[1]);k=parseFloat(d[2]);h=parseFloat(d[3]);var m=parseFloat(d[4]);p=parseFloat(d[5]);a=parseFloat(d[6]); x&&(p+=r,a+=b);b=new n.Anchor(p,a);b.command=n.Commands.arc;b.rx=e;b.ry=w;b.xAxisRotation=k;b.largeArcFlag=h;b.sweepFlag=m;f=r=b;l=void 0}r&&(c.isArray(r)?u=u.concat(r):u.push(r))});if(!(1>=u.length)){e=(new n.Path(u,t,void 0,!0)).noStroke();e.fill="black";var r=e.getBoundingClientRect(!0);r.centroid={x:r.left+r.width/2,y:r.top+r.height/2};c.each(e.vertices,function(a){a.subSelf(r.centroid)});e.translation.addSelf(r.centroid);n.Utils.applySvgAttributes.call(this,a,e,b);return e}},circle:function(a, c){var b=parseFloat(a.getAttribute("cx")),e=parseFloat(a.getAttribute("cy")),f=parseFloat(a.getAttribute("r"));b=(new n.Circle(b,e,f)).noStroke();b.fill="black";n.Utils.applySvgAttributes.call(this,a,b,c);return b},ellipse:function(a,c){var b=parseFloat(a.getAttribute("cx")),e=parseFloat(a.getAttribute("cy")),f=parseFloat(a.getAttribute("rx")),l=parseFloat(a.getAttribute("ry"));b=(new n.Ellipse(b,e,f,l)).noStroke();b.fill="black";n.Utils.applySvgAttributes.call(this,a,b,c);return b},rect:function(a, b){var e=parseFloat(a.getAttribute("rx")),f=parseFloat(a.getAttribute("ry"));if(!c.isNaN(e)||!c.isNaN(f))return n.Utils.read["rounded-rect"](a);e=parseFloat(a.getAttribute("x"))||0;f=parseFloat(a.getAttribute("y"))||0;var l=parseFloat(a.getAttribute("width")),d=parseFloat(a.getAttribute("height"));e=(new n.Rectangle(e+l/2,f+d/2,l,d)).noStroke();e.fill="black";n.Utils.applySvgAttributes.call(this,a,e,b);return e},"rounded-rect":function(a,c){var b=parseFloat(a.getAttribute("x"))||0,e=parseFloat(a.getAttribute("y"))|| 0,f=parseFloat(a.getAttribute("rx"))||0,l=parseFloat(a.getAttribute("ry"))||0,d=parseFloat(a.getAttribute("width")),q=parseFloat(a.getAttribute("height")),t=d/2,p=q/2;f=new n.Vector(f,l);b=(new n.RoundedRectangle(b+t,e+p,d,q,f)).noStroke();b.fill="black";n.Utils.applySvgAttributes.call(this,a,b,c);return b},line:function(a,c){var b=parseFloat(a.getAttribute("x1")),e=parseFloat(a.getAttribute("y1")),f=parseFloat(a.getAttribute("x2")),l=parseFloat(a.getAttribute("y2"));b=(new n.Line(b,e,f,l)).noFill(); n.Utils.applySvgAttributes.call(this,a,b,c);return b},lineargradient:function(a,b){for(var e=parseFloat(a.getAttribute("x1")),f=parseFloat(a.getAttribute("y1")),l=parseFloat(a.getAttribute("x2")),d=parseFloat(a.getAttribute("y2")),q=(l+e)/2,t=(d+f)/2,p=[],x=0;x<a.children.length;x++){var r=a.children[x],g=parseFloat(r.getAttribute("offset")),u=r.getAttribute("stop-color"),w=r.getAttribute("stop-opacity");r=r.getAttribute("style");if(c.isNull(u)){var k=r?r.match(/stop\-color:\s?([#a-fA-F0-9]*)/):!1; u=k&&1<k.length?k[1]:void 0}c.isNull(w)&&(w=(k=r?r.match(/stop\-opacity:\s?([0-9\.\-]*)/):!1)&&1<k.length?parseFloat(k[1]):1);p.push(new n.Gradient.Stop(g,u,w))}e=new n.LinearGradient(e-q,f-t,l-q,d-t,p);n.Utils.applySvgAttributes.call(this,a,e,b);return e},radialgradient:function(a,b){var e=parseFloat(a.getAttribute("cx"))||0,f=parseFloat(a.getAttribute("cy"))||0,l=parseFloat(a.getAttribute("r")),d=parseFloat(a.getAttribute("fx")),q=parseFloat(a.getAttribute("fy"));c.isNaN(d)&&(d=e);c.isNaN(q)&&(q= f);for(var t=u(e+d)/2,p=u(f+q)/2,r=[],x=0;x<a.children.length;x++){var g=a.children[x],w=parseFloat(g.getAttribute("offset")),k=g.getAttribute("stop-color"),h=g.getAttribute("stop-opacity");g=g.getAttribute("style");if(c.isNull(k)){var m=g?g.match(/stop\-color:\s?([#a-fA-F0-9]*)/):!1;k=m&&1<m.length?m[1]:void 0}c.isNull(h)&&(h=(m=g?g.match(/stop\-opacity:\s?([0-9\.\-]*)/):!1)&&1<m.length?parseFloat(m[1]):1);r.push(new n.Gradient.Stop(w,k,h))}e=new n.RadialGradient(e-t,f-p,l,r,d-t,q-p);n.Utils.applySvgAttributes.call(this, a,e,b);return e}},subdivide:function(a,c,b,e,f,l,d,q,t){t=t||n.Utils.Curve.RecursionLimit;t+=1;if(.001>u(a-d)&&.001>u(c-q))return[new n.Anchor(d,q)];for(var p=[],r=0;r<t;r++){var x=r/t,g=F(x,a,b,f,d);x=F(x,c,e,l,q);p.push(new n.Anchor(g,x))}return p},getComponentOnCubicBezier:function(a,c,b,e,f){var l=1-a;return l*l*l*c+3*l*l*a*b+3*l*a*a*e+a*a*a*f},getCurveLength:function(a,c,b,e,f,l,d,q,p){if(a===b&&c===e&&f===d&&l===q)return a=d-a,c=q-c,t(a*a+c*c);var r=9*(b-f)+3*(d-a),g=6*(a+f)-12*b,x=3*(b-a), u=9*(e-l)+3*(q-c),w=6*(c+l)-12*e,k=3*(e-c);return J(function(a){var c=(r*a+g)*a+x;a=(u*a+w)*a+k;return t(c*c+a*a)},0,1,p||n.Utils.Curve.RecursionLimit)},getCurveBoundingBox:function(a,c,b,e,f,l,d,q){for(var t=[],p=[[],[]],r,n,g,x,w=0;2>w;++w)0==w?(n=6*a-12*b+6*f,r=-3*a+9*b-9*f+3*d,g=3*b-3*a):(n=6*c-12*e+6*l,r=-3*c+9*e-9*l+3*q,g=3*e-3*c),1e-12>u(r)?1e-12>u(n)||(r=-g/n,0<r&&1>r&&t.push(r)):(x=n*n-4*g*r,g=Math.sqrt(x),0>x||(x=(-n+g)/(2*r),0<x&&1>x&&t.push(x),r=(-n-g)/(2*r),0<r&&1>r&&t.push(r)));for(n= w=t.length;w--;)r=t[w],g=1-r,p[0][w]=g*g*g*a+3*g*g*r*b+3*g*r*r*f+r*r*r*d,p[1][w]=g*g*g*c+3*g*g*r*e+3*g*r*r*l+r*r*r*q;p[0][n]=a;p[1][n]=c;p[0][n+1]=d;p[1][n+1]=q;p[0].length=p[1].length=n+2;return{min:{x:Math.min.apply(0,p[0]),y:Math.min.apply(0,p[1])},max:{x:Math.max.apply(0,p[0]),y:Math.max.apply(0,p[1])}}},integrate:function(a,c,b,e){var f=n.Utils.Curve.abscissas[e-2],l=n.Utils.Curve.weights[e-2];b=.5*(b-c);c=b+c;var d=0,q=e+1>>1;for(e=e&1?l[d++]*a(c):0;d<q;){var t=b*f[d];e+=l[d++]*(a(c+t)+a(c- t))}return b*e},getCurveFromPoints:function(a,b){for(var e=a.length,f=e-1,l=0;l<e;l++){var d=a[l];c.isObject(d.controls)||n.Anchor.AppendCurveProperties(d);var q=b?G(l-1,e):C(l-1,0),t=b?G(l+1,e):p(l+1,f);E(a[q],d,a[t]);d.command=0===l?n.Commands.move:n.Commands.curve}},getControlPoints:function(a,d,q){var t=n.Vector.angleBetween(a,d),p=n.Vector.angleBetween(q,d);a=n.Vector.distanceBetween(a,d);q=n.Vector.distanceBetween(q,d);var r=(t+p)/2;if(.0001>a||.0001>q)return c.isBoolean(d.relative)&&!d.relative&& (d.controls.left.copy(d),d.controls.right.copy(d)),d;a*=.33;q*=.33;r=p<t?r+l:r-l;d.controls.left.x=f(r)*a;d.controls.left.y=b(r)*a;r-=e;d.controls.right.x=f(r)*q;d.controls.right.y=b(r)*q;c.isBoolean(d.relative)&&!d.relative&&(d.controls.left.x+=d.x,d.controls.left.y+=d.y,d.controls.right.x+=d.x,d.controls.right.y+=d.y);return d},getReflection:function(a,c,b){return new n.Vector(2*a.x-(c.x+a.x)-(b?a.x:0),2*a.y-(c.y+a.y)-(b?a.y:0))},getAnchorsFromArcData:function(a,b,e,f,d,l,q){(new n.Matrix).translate(a.x, a.y).rotate(b);var t=n.Resolution;return c.map(c.range(t),function(a){a=(a+1)/t;q&&(a=1-a);a=a*l+d;a=new n.Anchor(e*Math.cos(a),f*Math.sin(a));n.Anchor.AppendCurveProperties(a);a.command=n.Commands.line;return a})},lerp:function(a,c,b){return b*(c-a)+a},toFixed:function(a){return Math.floor(1E3*a)/1E3},mod:function(a,c){for(;0>a;)a+=c;return a%c},Collection:function(){Array.call(this);1<arguments.length?Array.prototype.push.apply(this,arguments):arguments[0]&&Array.isArray(arguments[0])&&Array.prototype.push.apply(this, arguments[0])},Error:function(a){this.name="two.js";this.message=a},Events:{on:function(a,c){this._events||(this._events={});(this._events[a]||(this._events[a]=[])).push(c);return this},off:function(a,b){if(!this._events)return this;if(!a&&!b)return this._events={},this;for(var e=a?[a]:c.keys(this._events),f=0,d=e.length;f<d;f++){a=e[f];var l=this._events[a];if(l){var q=[];if(b)for(var t=0,p=l.length;t<p;t++){var r=l[t];r=r.handler?r.handler:r;b&&b!==r&&q.push(r)}this._events[a]=q}}return this},trigger:function(a){if(!this._events)return this; var c=B.call(arguments,1),b=this._events[a];b&&D(this,b,c);return this},listen:function(a,c,b){if(a)a.on(c,ev);return this},ignore:function(a,c,b){a.off(c,b);return this}}})});n.Utils.Events.bind=n.Utils.Events.on;n.Utils.Events.unbind=n.Utils.Events.off;var D=function(a,c,b){switch(b.length){case 0:var e=function(e){c[e].call(a,b[0])};break;case 1:e=function(e){c[e].call(a,b[0],b[1])};break;case 2:e=function(e){c[e].call(a,b[0],b[1],b[2])};break;case 3:e=function(e){c[e].call(a,b[0],b[1],b[2],b[3])}; break;default:e=function(e){c[e].apply(a,b)}}for(var f=0;f<c.length;f++)e(f)};n.Utils.Error.prototype=Error();n.Utils.Error.prototype.constructor=n.Utils.Error;n.Utils.Collection.prototype=[];n.Utils.Collection.prototype.constructor=n.Utils.Collection;c.extend(n.Utils.Collection.prototype,n.Utils.Events,{pop:function(){var a=Array.prototype.pop.apply(this,arguments);this.trigger(n.Events.remove,[a]);return a},shift:function(){var a=Array.prototype.shift.apply(this,arguments);this.trigger(n.Events.remove, [a]);return a},push:function(){var a=Array.prototype.push.apply(this,arguments);this.trigger(n.Events.insert,arguments);return a},unshift:function(){var a=Array.prototype.unshift.apply(this,arguments);this.trigger(n.Events.insert,arguments);return a},splice:function(){var a=Array.prototype.splice.apply(this,arguments);this.trigger(n.Events.remove,a);if(2<arguments.length){var c=this.slice(arguments[0],arguments[0]+arguments.length-2);this.trigger(n.Events.insert,c);this.trigger(n.Events.order)}return a}, sort:function(){Array.prototype.sort.apply(this,arguments);this.trigger(n.Events.order);return this},reverse:function(){Array.prototype.reverse.apply(this,arguments);this.trigger(n.Events.order);return this}});var E=n.Utils.getControlPoints,G=n.Utils.mod,I=n.Utils.getBackingStoreRatio,F=n.Utils.getComponentOnCubicBezier,J=n.Utils.integrate,L=n.Utils.getReflection;c.extend(n.prototype,n.Utils.Events,{constructor:n,appendTo:function(a){a.appendChild(this.renderer.domElement);return this},play:function(){n.Utils.setPlaying.call(this, !0);M.init();return this.trigger(n.Events.play)},pause:function(){this.playing=!1;return this.trigger(n.Events.pause)},update:function(){var a=!!this._lastFrame,c=r.now();a&&(this.timeDelta=parseFloat((c-this._lastFrame).toFixed(3)));this._lastFrame=c;a=this.width;c=this.height;var b=this.renderer;a===b.width&&c===b.height||b.setSize(a,c,this.ratio);this.trigger(n.Events.update,this.frameCount,this.timeDelta);return this.render()},render:function(){this.renderer.render();return this.trigger(n.Events.render, this.frameCount++)},add:function(a){var b=a;b instanceof Array||(b=c.toArray(arguments));this.scene.add(b);return this},remove:function(a){var b=a;b instanceof Array||(b=c.toArray(arguments));this.scene.remove(b);return this},clear:function(){this.scene.remove(this.scene.children);return this},makeLine:function(a,b,c,e){a=new n.Line(a,b,c,e);this.scene.add(a);return a},makeRectangle:function(a,b,c,e){a=new n.Rectangle(a,b,c,e);this.scene.add(a);return a},makeRoundedRectangle:function(a,b,c,e,f){a= new n.RoundedRectangle(a,b,c,e,f);this.scene.add(a);return a},makeCircle:function(a,b,c){a=new n.Circle(a,b,c);this.scene.add(a);return a},makeEllipse:function(a,b,c,e){a=new n.Ellipse(a,b,c,e);this.scene.add(a);return a},makeStar:function(a,b,c,e,f){a=new n.Star(a,b,c,e,f);this.scene.add(a);return a},makeCurve:function(a){var b=arguments.length,e=a;if(!c.isArray(a)){e=[];for(var f=0;f<b;f+=2){var d=arguments[f];if(!c.isNumber(d))break;e.push(new n.Anchor(d,arguments[f+1]))}}b=arguments[b-1];e=new n.Path(e, !(c.isBoolean(b)&&b),!0);b=e.getBoundingClientRect();e.center().translation.set(b.left+b.width/2,b.top+b.height/2);this.scene.add(e);return e},makePolygon:function(a,b,c,e){a=new n.Polygon(a,b,c,e);this.scene.add(a);return a},makeArcSegment:function(a,b,c,e,f,d,l){a=new n.ArcSegment(a,b,c,e,f,d,l);this.scene.add(a);return a},makePath:function(a){var b=arguments.length,e=a;if(!c.isArray(a)){e=[];for(var f=0;f<b;f+=2){var d=arguments[f];if(!c.isNumber(d))break;e.push(new n.Anchor(d,arguments[f+1]))}}b= arguments[b-1];e=new n.Path(e,!(c.isBoolean(b)&&b));b=e.getBoundingClientRect();e.center().translation.set(b.left+b.width/2,b.top+b.height/2);this.scene.add(e);return e},makeText:function(a,b,c,e){a=new n.Text(a,b,c,e);this.add(a);return a},makeLinearGradient:function(a,b,c,e){var f=B.call(arguments,4);f=new n.LinearGradient(a,b,c,e,f);this.add(f);return f},makeRadialGradient:function(a,b,c){var e=B.call(arguments,3);e=new n.RadialGradient(a,b,c,e);this.add(e);return e},makeSprite:function(a,b,c, e,f,d,l){a=new n.Sprite(a,b,c,e,f,d);l&&a.play();this.add(a);return a},makeImageSequence:function(a,b,c,e,f){a=new n.ImageSequence(a,b,c,e);f&&a.play();this.add(a);return a},makeTexture:function(a,b){return new n.Texture(a,b)},makeGroup:function(a){var b=a;b instanceof Array||(b=c.toArray(arguments));var e=new n.Group;this.scene.add(e);e.add(b);return e},interpret:function(a,b,c){var e=a.tagName.toLowerCase();c="undefined"!==typeof c?c:!0;if(!(e in n.Utils.read))return null;a=n.Utils.read[e].call(this, a);c&&this.add(b&&a instanceof n.Group?a.children:a);return a},load:function(a,b){var e=new n.Group,f,d,l,q=c.bind(function(a){z.temp.innerHTML=a;for(d=0;d<z.temp.children.length;d++)if(f=z.temp.children[d],/svg/i.test(f.nodeName))for(l=0;l<f.children.length;l++)e.add(this.interpret(f.children[l]));else e.add(this.interpret(f));c.isFunction(b)&&b(e,1>=z.temp.children.length?z.temp.children[0]:z.temp.children)},this);if(/.*\.svg$/ig.test(a))return n.Utils.xhr(a,q),e;q(a);return e}});var M=z.getRequestAnimationFrame(); "function"===typeof define&&define.amd?define("two",[],function(){return n}):"undefined"!=typeof module&&module.exports&&(module.exports=n);return n}(("undefined"!==typeof global?global:this||window).Two); (function(a){var h=a.Utils;a=a.Registry=function(){this.map={}};h.extend(a.prototype,{constructor:a,add:function(a,k){this.map[a]=k;return this},remove:function(a){delete this.map[a];return this},get:function(a){return this.map[a]},contains:function(a){return a in this.map}})})(("undefined"!==typeof global?global:this||window).Two); (function(a){var h=a.Utils,m=a.Vector=function(a,b){this.x=a||0;this.y=b||0};h.extend(m,{zero:new a.Vector,add:function(a,b){return new m(a.x+b.x,a.y+b.y)},sub:function(a,b){return new m(a.x-b.x,a.y-b.y)},subtract:function(a,b){return m.sub(a,b)},ratioBetween:function(a,b){return(a.x*b.x+a.y*b.y)/(a.length()*b.length())},angleBetween:function(a,b){if(4<=arguments.length){var c=arguments[0]-arguments[2];var d=arguments[1]-arguments[3];return Math.atan2(d,c)}c=a.x-b.x;d=a.y-b.y;return Math.atan2(d, c)},distanceBetween:function(a,b){return Math.sqrt(m.distanceBetweenSquared(a,b))},distanceBetweenSquared:function(a,b){var c=a.x-b.x;a=a.y-b.y;return c*c+a*a},MakeObservable:function(c){c.bind=c.on=function(){this._bound||(this._x=this.x,this._y=this.y,Object.defineProperty(this,"x",g),Object.defineProperty(this,"y",d),h.extend(this,k),this._bound=!0);a.Utils.Events.bind.apply(this,arguments);return this}}});h.extend(m.prototype,a.Utils.Events,{constructor:m,set:function(a,b){this.x=a;this.y=b;return this}, copy:function(a){this.x=a.x;this.y=a.y;return this},clear:function(){this.y=this.x=0;return this},clone:function(){return new m(this.x,this.y)},add:function(a,b){0>=arguments.length||(1>=arguments.length?h.isNumber(a)?(this.x+=a,this.y+=a):a&&h.isNumber(a.x)&&h.isNumber(a.y)&&(this.x+=a.x,this.y+=a.y):(this.x+=a,this.y+=b));return this},addSelf:function(a){return this.add.apply(this,arguments)},sub:function(a,b){0>=arguments.length||(1>=arguments.length?h.isNumber(a)?(this.x-=a,this.y-=a):a&&h.isNumber(a.x)&& h.isNumber(a.y)&&(this.x-=a.x,this.y-=a.y):(this.x-=a,this.y-=b));return this},subtract:function(){return this.sub.apply(this,arguments)},subSelf:function(a){return this.sub.apply(this,arguments)},subtractSelf:function(a){return this.sub.apply(this,arguments)},multiply:function(a,b){0>=arguments.length||(1>=arguments.length?h.isNumber(a)?(this.x*=a,this.y*=a):a&&h.isNumber(a.x)&&h.isNumber(a.y)&&(this.x*=a.x,this.y*=a.y):(this.x*=a,this.y*=b));return this},multiplySelf:function(a){return this.multiply.apply(this, arguments)},multiplyScalar:function(a){return this.multiply(a)},divide:function(a,b){if(0>=arguments.length)return this;1>=arguments.length?h.isNumber(a)?(this.x/=a,this.y/=a):a&&h.isNumber(a.x)&&h.isNumber(a.y)&&(this.x/=a.x,this.y/=a.y):(this.x/=a,this.y/=b);h.isNaN(this.x)&&(this.x=0);h.isNaN(this.y)&&(this.y=0);return this},divideSelf:function(a){return this.divide.apply(this,arguments)},divideScalar:function(a){return this.divide(a)},negate:function(){return this.multiply(-1)},dot:function(a){return this.x* a.x+this.y*a.y},length:function(){return Math.sqrt(this.lengthSquared())},lengthSquared:function(){return this.x*this.x+this.y*this.y},normalize:function(){return this.divideScalar(this.length())},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x;a=this.y-a.y;return b*b+a*a},setLength:function(a){return this.normalize().multiplyScalar(a)},equals:function(a,b){b="undefined"===typeof b?.0001:b;return this.distanceTo(a)<b},lerp:function(a, b){return this.set((a.x-this.x)*b+this.x,(a.y-this.y)*b+this.y)},isZero:function(a){a="undefined"===typeof a?.0001:a;return this.length()<a},toString:function(){return this.x+", "+this.y},toObject:function(){return{x:this.x,y:this.y}},rotate:function(a){var b=Math.cos(a);a=Math.sin(a);this.x=this.x*b-this.y*a;this.y=this.x*a+this.y*b;return this}});var k={constructor:m,set:function(c,b){this._x=c;this._y=b;return this.trigger(a.Events.change)},copy:function(c){this._x=c.x;this._y=c.y;return this.trigger(a.Events.change)}, clear:function(){this._y=this._x=0;return this.trigger(a.Events.change)},clone:function(){return new m(this._x,this._y)},add:function(c,b){if(0>=arguments.length)return this;1>=arguments.length?h.isNumber(c)?(this._x+=c,this._y+=c):c&&h.isNumber(c.x)&&h.isNumber(c.y)&&(this._x+=c.x,this._y+=c.y):(this._x+=c,this._y+=b);return this.trigger(a.Events.change)},sub:function(c,b){if(0>=arguments.length)return this;1>=arguments.length?h.isNumber(c)?(this._x-=c,this._y-=c):c&&h.isNumber(c.x)&&h.isNumber(c.y)&& (this._x-=c.x,this._y-=c.y):(this._x-=c,this._y-=b);return this.trigger(a.Events.change)},multiply:function(c,b){if(0>=arguments.length)return this;1>=arguments.length?h.isNumber(c)?(this._x*=c,this._y*=c):c&&h.isNumber(c.x)&&h.isNumber(c.y)&&(this._x*=c.x,this._y*=c.y):(this._x*=c,this._y*=b);return this.trigger(a.Events.change)},divide:function(c,b){if(0>=arguments.length)return this;1>=arguments.length?h.isNumber(c)?(this._x/=c,this._y/=c):c&&h.isNumber(c.x)&&h.isNumber(c.y)&&(this._x/=c.x,this._y/= c.y):(this._x/=c,this._y/=b);h.isNaN(this._x)&&(this._x=0);h.isNaN(this._y)&&(this._y=0);return this.trigger(a.Events.change)},dot:function(a){return this._x*a.x+this._y*a.y},lengthSquared:function(){return this._x*this._x+this._y*this._y},distanceToSquared:function(a){var b=this._x-a.x;a=this._y-a.y;return b*b+a*a},lerp:function(a,b){return this.set((a.x-this._x)*b+this._x,(a.y-this._y)*b+this._y)},toString:function(){return this._x+", "+this._y},toObject:function(){return{x:this._x,y:this._y}}, rotate:function(a){var b=Math.cos(a);a=Math.sin(a);this._x=this._x*b-this._y*a;this._y=this._x*a+this._y*b;return this}},g={enumerable:!0,get:function(){return this._x},set:function(c){this._x=c;this.trigger(a.Events.change,"x")}},d={enumerable:!0,get:function(){return this._y},set:function(c){this._y=c;this.trigger(a.Events.change,"y")}};m.MakeObservable(m.prototype)})(("undefined"!==typeof global?global:this||window).Two); (function(a){var h=a.Commands,m=a.Utils,k=a.Anchor=function(d,c,b,f,t,g,e){a.Vector.call(this,d,c);this._broadcast=m.bind(function(){this.trigger(a.Events.change)},this);this._command=e||h.move;this._relative=!0;d=m.isNumber(b);c=m.isNumber(f);e=m.isNumber(t);var l=m.isNumber(g);(d||c||e||l)&&a.Anchor.AppendCurveProperties(this);d&&(this.controls.left.x=b);c&&(this.controls.left.y=f);e&&(this.controls.right.x=t);l&&(this.controls.right.y=g)};m.extend(a.Anchor,{AppendCurveProperties:function(d){d.relative= !0;d.controls={};d.controls.left=new a.Vector(0,0);d.controls.right=new a.Vector(0,0)},MakeObservable:function(d){Object.defineProperty(d,"command",{enumerable:!0,get:function(){return this._command},set:function(c){this._command=c;this._command!==h.curve||m.isObject(this.controls)||k.AppendCurveProperties(this);return this.trigger(a.Events.change)}});Object.defineProperty(d,"relative",{enumerable:!0,get:function(){return this._relative},set:function(c){if(this._relative==c)return this;this._relative= !!c;return this.trigger(a.Events.change)}});m.extend(d,a.Vector.prototype,g);d.bind=d.on=function(){var c=this._bound;a.Vector.prototype.bind.apply(this,arguments);c||m.extend(this,g)}}});var g={constructor:a.Anchor,listen:function(){m.isObject(this.controls)||a.Anchor.AppendCurveProperties(this);this.controls.left.bind(a.Events.change,this._broadcast);this.controls.right.bind(a.Events.change,this._broadcast);return this},ignore:function(){this.controls.left.unbind(a.Events.change,this._broadcast); this.controls.right.unbind(a.Events.change,this._broadcast);return this},copy:function(d){this.x=d.x;this.y=d.y;m.isString(d.command)&&(this.command=d.command);m.isObject(d.controls)&&(m.isObject(this.controls)||a.Anchor.AppendCurveProperties(this),this.controls.left.copy(d.controls.left),this.controls.right.copy(d.controls.right));m.isBoolean(d.relative)&&(this.relative=d.relative);this.command===a.Commands.arc&&(this.rx=d.rx,this.ry=d.ry,this.xAxisRotation=d.xAxisRotation,this.largeArcFlag=d.largeArcFlag, this.sweepFlag=d.sweepFlag);return this},clone:function(){var d=this.controls;d=new a.Anchor(this.x,this.y,d&&d.left.x,d&&d.left.y,d&&d.right.x,d&&d.right.y,this.command);d.relative=this._relative;return d},toObject:function(){var a={x:this.x,y:this.y};this._command&&(a.command=this._command);this._relative&&(a.relative=this._relative);this.controls&&(a.controls={left:this.controls.left.toObject(),right:this.controls.right.toObject()});return a},toString:function(){return this.controls?[this._x,this._y, this.controls.left.x,this.controls.left.y,this.controls.right.x,this.controls.right.y,this._command,this._relative?1:0].join(", "):[this._x,this._y].join(", ")}};a.Anchor.MakeObservable(a.Anchor.prototype)})(("undefined"!==typeof global?global:this||window).Two); (function(a){var h=Math.cos,m=Math.sin,k=Math.tan,g=a.Utils,d=g.toFixed,c=[],b=a.Matrix=function(b,c,d,e,l,q){this.elements=new a.Array(9);var f=b;g.isArray(f)||(f=g.toArray(arguments));this.identity();0<f.length&&this.set(f)};g.extend(b,{Identity:[1,0,0,0,1,0,0,0,1],Multiply:function(b,c,d){if(3>=c.length){d=c[0]||0;var e=c[1]||0;c=c[2]||0;return{x:b[0]*d+b[1]*e+b[2]*c,y:b[3]*d+b[4]*e+b[5]*c,z:b[6]*d+b[7]*e+b[8]*c}}e=b[0];var f=b[1],q=b[2],t=b[3],g=b[4],u=b[5],k=b[6],r=b[7];b=b[8];var w=c[0],h=c[1], m=c[2],n=c[3],D=c[4],E=c[5],G=c[6],I=c[7];c=c[8];d=d||new a.Array(9);d[0]=e*w+f*n+q*G;d[1]=e*h+f*D+q*I;d[2]=e*m+f*E+q*c;d[3]=t*w+g*n+u*G;d[4]=t*h+g*D+u*I;d[5]=t*m+g*E+u*c;d[6]=k*w+r*n+b*G;d[7]=k*h+r*D+b*I;d[8]=k*m+r*E+b*c;return d}});g.extend(b.prototype,a.Utils.Events,{constructor:b,manual:!1,set:function(b){var c=b;1<arguments.length&&(c=g.toArray(arguments));this.elements[0]=c[0];this.elements[1]=c[1];this.elements[2]=c[2];this.elements[3]=c[3];this.elements[4]=c[4];this.elements[5]=c[5];this.elements[6]= c[6];this.elements[7]=c[7];this.elements[8]=c[8];return this.trigger(a.Events.change)},identity:function(){this.elements[0]=b.Identity[0];this.elements[1]=b.Identity[1];this.elements[2]=b.Identity[2];this.elements[3]=b.Identity[3];this.elements[4]=b.Identity[4];this.elements[5]=b.Identity[5];this.elements[6]=b.Identity[6];this.elements[7]=b.Identity[7];this.elements[8]=b.Identity[8];return this.trigger(a.Events.change)},multiply:function(b,c,d,e,l,q,p,g,k){var f=arguments,r=f.length;if(1>=r)return this.elements[0]*= b,this.elements[1]*=b,this.elements[2]*=b,this.elements[3]*=b,this.elements[4]*=b,this.elements[5]*=b,this.elements[6]*=b,this.elements[7]*=b,this.elements[8]*=b,this.trigger(a.Events.change);if(3>=r)return b=b||0,c=c||0,d=d||0,l=this.elements,{x:l[0]*b+l[1]*c+l[2]*d,y:l[3]*b+l[4]*c+l[5]*d,z:l[6]*b+l[7]*c+l[8]*d};var t=this.elements;r=t[0];var u=t[1],h=t[2],n=t[3],m=t[4],C=t[5],A=t[6],I=t[7];t=t[8];var F=f[0],J=f[1],L=f[2],M=f[3],x=f[4],K=f[5],O=f[6],N=f[7];f=f[8];this.elements[0]=r*F+u*M+h*O;this.elements[1]= r*J+u*x+h*N;this.elements[2]=r*L+u*K+h*f;this.elements[3]=n*F+m*M+C*O;this.elements[4]=n*J+m*x+C*N;this.elements[5]=n*L+m*K+C*f;this.elements[6]=A*F+I*M+t*O;this.elements[7]=A*J+I*x+t*N;this.elements[8]=A*L+I*K+t*f;return this.trigger(a.Events.change)},inverse:function(b){var c=this.elements;b=b||new a.Matrix;var d=c[0],e=c[1],f=c[2],q=c[3],p=c[4],g=c[5],k=c[6],h=c[7];c=c[8];var r=c*p-g*h,w=-c*q+g*k,m=h*q-p*k,z=d*r+e*w+f*m;if(!z)return null;z=1/z;b.elements[0]=r*z;b.elements[1]=(-c*e+f*h)*z;b.elements[2]= (g*e-f*p)*z;b.elements[3]=w*z;b.elements[4]=(c*d-f*k)*z;b.elements[5]=(-g*d+f*q)*z;b.elements[6]=m*z;b.elements[7]=(-h*d+e*k)*z;b.elements[8]=(p*d-e*q)*z;return b},scale:function(a,b){1>=arguments.length&&(b=a);return this.multiply(a,0,0,0,b,0,0,0,1)},rotate:function(a){var b=h(a);a=m(a);return this.multiply(b,-a,0,a,b,0,0,0,1)},translate:function(a,b){return this.multiply(1,0,a,0,1,b,0,0,1)},skewX:function(a){a=k(a);return this.multiply(1,a,0,0,1,0,0,0,1)},skewY:function(a){a=k(a);return this.multiply(1, 0,0,a,1,0,0,0,1)},toString:function(a){c.length=0;this.toArray(a,c);return c.join(" ")},toArray:function(a,b){var c=this.elements,e=!!b,f=d(c[0]),q=d(c[1]),p=d(c[2]),g=d(c[3]),t=d(c[4]),k=d(c[5]);if(a){a=d(c[6]);var r=d(c[7]);c=d(c[8]);if(e){b[0]=f;b[1]=g;b[2]=a;b[3]=q;b[4]=t;b[5]=r;b[6]=p;b[7]=k;b[8]=c;return}return[f,g,a,q,t,r,p,k,c]}if(e)b[0]=f,b[1]=g,b[2]=q,b[3]=t,b[4]=p,b[5]=k;else return[f,g,q,t,p,k]},clone:function(){var b=this.elements[0];var c=this.elements[1];var d=this.elements[2];var e= this.elements[3];var l=this.elements[4];b=new a.Matrix(b,c,d,e,l,this.elements[5],this.elements[6],this.elements[7],this.elements[8]);b.manual=this.manual;return b}})})(("undefined"!==typeof global?global:this||window).Two); (function(a){var h=a.Utils.mod,m=a.Utils.toFixed,k=a.Utils,g={version:1.1,ns:"http://www.w3.org/2000/svg",xlink:"http://www.w3.org/1999/xlink",alignments:{left:"start",center:"middle",right:"end"},createElement:function(a,b){var c=document.createElementNS(g.ns,a);"svg"===a&&(b=k.defaults(b||{},{version:g.version}));k.isEmpty(b)||g.setAttributes(c,b);return c},setAttributes:function(a,b){for(var c=Object.keys(b),d=0;d<c.length;d++)/href/.test(c[d])?a.setAttributeNS(g.xlink,c[d],b[c[d]]):a.setAttribute(c[d], b[c[d]]);return this},removeAttributes:function(a,b){for(var c in b)a.removeAttribute(c);return this},toString:function(c,b){for(var d=c.length,g=d-1,k,e="",l=0;l<d;l++){var q=c[l],p=b?h(l-1,d):Math.max(l-1,0);b&&h(l+1,d);var C=c[p];p=m(q.x);var A=m(q.y);switch(q.command){case a.Commands.close:var B=a.Commands.close;break;case a.Commands.arc:var r=q.rx;B=q.ry;C=q.xAxisRotation;var w=q.largeArcFlag;var y=q.sweepFlag;B=a.Commands.arc+" "+r+" "+B+" "+C+" "+w+" "+y+" "+p+" "+A;break;case a.Commands.curve:w= C.controls&&C.controls.right||a.Vector.zero;B=q.controls&&q.controls.left||a.Vector.zero;C.relative?(r=m(w.x+C.x),C=m(w.y+C.y)):(r=m(w.x),C=m(w.y));q.relative?(w=m(B.x+q.x),y=m(B.y+q.y)):(w=m(B.x),y=m(B.y));B=(0===l?a.Commands.move:a.Commands.curve)+" "+r+" "+C+" "+w+" "+y+" "+p+" "+A;break;case a.Commands.move:k=q;B=a.Commands.move+" "+p+" "+A;break;default:B=q.command+" "+p+" "+A}l>=g&&b&&(q.command===a.Commands.curve&&(A=k,C=q.controls&&q.controls.right||q,p=A.controls&&A.controls.left||A,q.relative? (r=m(C.x+q.x),C=m(C.y+q.y)):(r=m(C.x),C=m(C.y)),A.relative?(w=m(p.x+A.x),y=m(p.y+A.y)):(w=m(p.x),y=m(p.y)),p=m(A.x),A=m(A.y),B+=" C "+r+" "+C+" "+w+" "+y+" "+p+" "+A),q.command!==a.Commands.close&&(B+=" Z"));e+=B+" "}return e},getClip:function(a){var b=a._renderer.clip;if(!b){for(var c=a;c.parent;)c=c.parent;b=a._renderer.clip=g.createElement("clipPath");c.defs.appendChild(b)}return b},group:{appendChild:function(a){var b=a._renderer.elem;if(b){var c=b.nodeName;!c||/(radial|linear)gradient/i.test(c)|| a._clip||this.elem.appendChild(b)}},removeChild:function(a){var b=a._renderer.elem;b&&b.parentNode==this.elem&&b.nodeName&&(a._clip||this.elem.removeChild(b))},orderChild:function(a){this.elem.appendChild(a._renderer.elem)},renderChild:function(a){g[a._renderer.type].render.call(a,this)},render:function(a){this._update();if(0===this._opacity&&!this._flagOpacity)return this;this._renderer.elem||(this._renderer.elem=g.createElement("g",{id:this.id}),a.appendChild(this._renderer.elem));var b={domElement:a, elem:this._renderer.elem};(this._matrix.manual||this._flagMatrix)&&this._renderer.elem.setAttribute("transform","matrix("+this._matrix.toString()+")");for(var c=0;c<this.children.length;c++){var d=this.children[c];g[d._renderer.type].render.call(d,a)}this._flagOpacity&&this._renderer.elem.setAttribute("opacity",this._opacity);this._flagClassName&&this._renderer.elem.setAttribute("class",this._className);this._flagAdditions&&this.additions.forEach(g.group.appendChild,b);this._flagSubtractions&&this.subtractions.forEach(g.group.removeChild, b);this._flagOrder&&this.children.forEach(g.group.orderChild,b);this._flagMask&&(this._mask?this._renderer.elem.setAttribute("clip-path","url(#"+this._mask.id+")"):this._renderer.elem.removeAttribute("clip-path"));return this.flagReset()}},path:{render:function(a){this._update();if(0===this._opacity&&!this._flagOpacity)return this;var b={};if(this._matrix.manual||this._flagMatrix)b.transform="matrix("+this._matrix.toString()+")";if(this._flagVertices){var c=g.toString(this._renderer.vertices,this._closed); b.d=c}this._fill&&this._fill._renderer&&(this._fill._update(),g[this._fill._renderer.type].render.call(this._fill,a,!0));this._flagFill&&(b.fill=this._fill&&this._fill.id?"url(#"+this._fill.id+")":this._fill);this._stroke&&this._stroke._renderer&&(this._stroke._update(),g[this._stroke._renderer.type].render.call(this._stroke,a,!0));this._flagStroke&&(b.stroke=this._stroke&&this._stroke.id?"url(#"+this._stroke.id+")":this._stroke);this._flagLinewidth&&(b["stroke-width"]=this._linewidth);this._flagOpacity&& (b["stroke-opacity"]=this._opacity,b["fill-opacity"]=this._opacity);this._flagClassName&&(b["class"]=this._className);this._flagVisible&&(b.visibility=this._visible?"visible":"hidden");this._flagCap&&(b["stroke-linecap"]=this._cap);this._flagJoin&&(b["stroke-linejoin"]=this._join);this._flagMiter&&(b["stroke-miterlimit"]=this._miter);this.dashes&&0<this.dashes.length&&(b["stroke-dasharray"]=this.dashes.join(" "));this._renderer.elem?g.setAttributes(this._renderer.elem,b):(b.id=this.id,this._renderer.elem= g.createElement("path",b),a.appendChild(this._renderer.elem));this._flagClip&&(a=g.getClip(this),b=this._renderer.elem,this._clip?(b.removeAttribute("id"),a.setAttribute("id",this.id),a.appendChild(b)):(a.removeAttribute("id"),b.setAttribute("id",this.id),this.parent._renderer.elem.appendChild(b)));return this.flagReset()}},text:{render:function(a){this._update();var b={};if(this._matrix.manual||this._flagMatrix)b.transform="matrix("+this._matrix.toString()+")";this._flagFamily&&(b["font-family"]= this._family);this._flagSize&&(b["font-size"]=this._size);this._flagLeading&&(b["line-height"]=this._leading);this._flagAlignment&&(b["text-anchor"]=g.alignments[this._alignment]||this._alignment);this._flagBaseline&&(b["alignment-baseline"]=b["dominant-baseline"]=this._baseline);this._flagStyle&&(b["font-style"]=this._style);this._flagWeight&&(b["font-weight"]=this._weight);this._flagDecoration&&(b["text-decoration"]=this._decoration);this._fill&&this._fill._renderer&&(this._fill._update(),g[this._fill._renderer.type].render.call(this._fill, a,!0));this._flagFill&&(b.fill=this._fill&&this._fill.id?"url(#"+this._fill.id+")":this._fill);this._stroke&&this._stroke._renderer&&(this._stroke._update(),g[this._stroke._renderer.type].render.call(this._stroke,a,!0));this._flagStroke&&(b.stroke=this._stroke&&this._stroke.id?"url(#"+this._stroke.id+")":this._stroke);this._flagLinewidth&&(b["stroke-width"]=t