From f0d223505317d0cdd9626d2f4341715ab9d5b57c Mon Sep 17 00:00:00 2001 From: kangax Date: Thu, 20 Dec 2012 16:23:12 +0100 Subject: [PATCH] Fix group loading in dateless json. Closes #322 --- dist/all.js | 2 +- dist/all.min.js | 12 +++++------- dist/all.min.js.gz | Bin 45132 -> 41441 bytes src/canvas.serialization.js | 2 +- test/unit/canvas.js | 25 +++++++++++++++++++++++++ 5 files changed, 32 insertions(+), 9 deletions(-) diff --git a/dist/all.js b/dist/all.js index e8af0efa..e925508b 100644 --- a/dist/all.js +++ b/dist/all.js @@ -8219,7 +8219,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { delete obj[pathProp]; if (typeof path !== 'string') { - if (obj.type === 'image') { + if (obj.type === 'image' || obj.type === 'group') { fabric[fabric.util.string.capitalize(obj.type)].fromObject(obj, function (o) { onObjectLoaded(o, index); }); diff --git a/dist/all.min.js b/dist/all.min.js index 3d39726d..e8dd7db7 100644 --- a/dist/all.min.js +++ b/dist/all.min.js @@ -1,7 +1,5 @@ -/* Fabric.js Copyright 2008-2012, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric=fabric||{version:"0.9.33"};if(typeof exports!=="undefined"){exports.fabric=fabric}if(typeof document!=="undefined"&&typeof window!=="undefined"){fabric.document=document;fabric.window=window}else{fabric.document=require("jsdom").jsdom("");fabric.window=fabric.document.createWindow()}fabric.isTouchSupported="ontouchstart" in fabric.document.documentElement;fabric.isLikelyNode=typeof Buffer!=="undefined"&&typeof window==="undefined"; -/* - * Copyright (c) 2009 Simo Kinnunen. - * Licensed under the MIT license. - */ -var Cufon=(function(){var k=function(){return k.replace.apply(null,arguments)};var u=k.DOM={ready:(function(){var z=false,B={loaded:1,complete:1};var y=[],A=function(){if(z){return}z=true;for(var C;C=y.shift();C()){}};if(fabric.document.addEventListener){fabric.document.addEventListener("DOMContentLoaded",A,false);fabric.window.addEventListener("pageshow",A,false)}if(!fabric.window.opera&&fabric.document.readyState){(function(){B[fabric.document.readyState]?A():setTimeout(arguments.callee,10)})()}if(fabric.document.readyState&&fabric.document.createStyleSheet){(function(){try{fabric.document.body.doScroll("left");A()}catch(C){setTimeout(arguments.callee,1)}})()}o(fabric.window,"load",A);return function(C){if(!arguments.length){A()}else{z?C():y.push(C)}}})()};var l=k.CSS={Size:function(z,y){this.value=parseFloat(z);this.unit=String(z).match(/[a-z%]*$/)[0]||"px";this.convert=function(A){return A/y*this.value};this.convertFrom=function(A){return A/this.value*y};this.toString=function(){return this.value+this.unit}},getStyle:function(y){return new a(y.style)},quotedList:i(function(B){var A=[],z=/\s*((["'])([\s\S]*?[^\\])\2|[^,]+)\s*/g,y;while(y=z.exec(B)){A.push(y[3]||y[1])}return A}),ready:(function(){var A=false;var z=[],B=function(){A=true;for(var D;D=z.shift();D()){}};var y=Object.prototype.propertyIsEnumerable?f("style"):{length:0};var C=f("link");u.ready(function(){var G=0,F;for(var E=0,D=C.length;F=C[E],E=y.length+G){B()}else{setTimeout(arguments.callee,10)}});return function(D){if(A){D()}else{z.push(D)}}})(),supports:function(A,z){var y=fabric.document.createElement("span").style;if(y[A]===undefined){return false}y[A]=z;return y[A]===z},textAlign:function(B,A,y,z){if(A.get("textAlign")=="right"){if(y>0){B=" "+B}}else{if(y400}if(F==500){F=400}for(var G in D){G=parseInt(G,10);if(!C||GA){A=G}H.push(G)}if(FA){F=A}H.sort(function(J,I){return(B?(J>F&&I>F)?JI:(JI:Jz){z=e}L.push(e);e=0;continue}var B=ab.glyphs[ag[aa]]||ab.missingGlyph;if(!B){continue}e+=D=Number(B.w||ab.w)+U}L.push(e);e=Math.max(z,e);var m=[];for(var aa=L.length;aa--;){m[aa]=e-L[aa]}if(D===null){return null}V+=(H.width-D);C+=H.minX;var v,p;if(n){v=J;p=J.firstChild}else{v=fabric.document.createElement("span");v.className="cufon cufon-canvas";v.alt=E;p=fabric.document.createElement("canvas");v.appendChild(p);if(A.printable){var Y=fabric.document.createElement("span");Y.className="cufon-alt";Y.appendChild(fabric.document.createTextNode(E));v.appendChild(Y)}}var ah=v.style;var O=p.style||{};var k=o.convert(H.height-I+T);var af=Math.ceil(k);var S=af/k;p.width=Math.ceil(o.convert(e+V-C)*S);p.height=af;I+=H.minY;O.top=Math.round(o.convert(I-ab.ascent))+"px";O.left=Math.round(o.convert(C))+"px";var j=Math.ceil(o.convert(e*S));var t=j+"px";var s=o.convert(ab.height);var F=(A.lineHeight-1)*o.convert(-ab.ascent/5)*(M-1);Cufon.textOptions.width=j;Cufon.textOptions.height=(s*M)+F;Cufon.textOptions.lines=M;Cufon.textOptions.totalLineHeight=F;if(a){ah.width=t;ah.height=s+"px"}else{ah.paddingLeft=t;ah.paddingBottom=(s-1)+"px"}var ad=Cufon.textOptions.context||p.getContext("2d"),K=af/H.height;Cufon.textOptions.fontAscent=ab.ascent*K;Cufon.textOptions.boundaries=null;for(var w=Cufon.textOptions.shadowOffsets,aa=R.length;aa--;){w[aa]=[R[aa][0]*K,R[aa][1]*K]}ad.save();ad.scale(K,K);ad.translate(-C-((1/K*p.width)/2)+(Cufon.fonts[ab.family].offsetLeft||0),-I-((Cufon.textOptions.height/K)/2)+(Cufon.fonts[ab.family].offsetTop||0));ad.lineWidth=ab.face["underline-thickness"];ad.save();function q(l,i){ad.strokeStyle=i;ad.beginPath();ad.moveTo(0,l);ad.lineTo(e,l);ad.stroke()}var r=Cufon.getTextDecoration(A),u=A.fontStyle==="italic";function ae(){ad.save();var aj=0,an=0,y=[{left:0}];if(A.backgroundColor){ad.save();ad.fillStyle=A.backgroundColor;ad.translate(0,ab.ascent);ad.fillRect(0,0,e+10,(-ab.ascent+ab.descent)*M);ad.restore()}if(A.textAlign==="right"){ad.translate(m[an],0);y[0].left=m[an]*K}else{if(A.textAlign==="center"){ad.translate(m[an]/2,0);y[0].left=m[an]/2*K}}for(var al=0,ak=ag.length;al.cufon-vml-canvas{text-indent:0}@media screen{cvml\\:shape,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute}.cufon-vml-canvas{position:absolute;text-align:left}.cufon-vml{display:inline-block;position:relative;vertical-align:middle}.cufon-vml .cufon-alt{position:absolute;left:-10000in;font-size:1px}a .cufon-vml{cursor:pointer}}@media print{.cufon-vml *{display:none}.cufon-vml .cufon-alt{display:inline}}');function c(e,f){return a(e,/(?:em|ex|%)$/i.test(f)?"1em":f)}function a(h,i){if(/px$/i.test(i)){return parseFloat(i)}var g=h.style.left,f=h.runtimeStyle.left;h.runtimeStyle.left=h.currentStyle.left;h.style.left=i;var e=h.style.pixelLeft;h.style.left=g;h.runtimeStyle.left=f;return e}return function(T,z,O,w,D,U,M){var h=(z===null);if(h){z=D.alt}var B=T.viewBox;var j=O.computedFontSize||(O.computedFontSize=new Cufon.CSS.Size(c(U,O.get("fontSize"))+"px",T.baseSize));var L=O.computedLSpacing;if(L==undefined){L=O.get("letterSpacing");O.computedLSpacing=L=(L=="normal")?0:~~j.convertFrom(a(U,L))}var t,m;if(h){t=D;m=D.firstChild}else{t=fabric.document.createElement("span");t.className="cufon cufon-vml";t.alt=z;m=fabric.document.createElement("span");m.className="cufon-vml-canvas";t.appendChild(m);if(w.printable){var R=fabric.document.createElement("span");R.className="cufon-alt";R.appendChild(fabric.document.createTextNode(z));t.appendChild(R)}if(!M){t.appendChild(fabric.document.createElement("cvml:shape"))}}var Z=t.style;var G=m.style;var f=j.convert(B.height),W=Math.ceil(f);var K=W/f;var J=B.minX,I=B.minY;G.height=W;G.top=Math.round(j.convert(I-T.ascent));G.left=Math.round(j.convert(J));Z.height=j.convert(T.height)+"px";var p=Cufon.getTextDecoration(w);var y=O.get("color");var X=Cufon.CSS.textTransform(z,O).split("");var e=0,H=0,q=null;var x,r,A=w.textShadow;for(var S=0,Q=0,P=X.length;Sx?r:(q-p);u(v(A,o,y,r));if(q>x||s()){z.onComplete&&z.onComplete();return}l(t)})()}var f=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(o){fabric.window.setTimeout(o,1000/60)};var l=function(){return f.apply(fabric.window,arguments)};function b(p,r,q){if(p){var o=new Image();o.onload=function(){r&&r.call(q,o);o=o.onload=null};o.src=p}else{r&&r.call(q,p)}}function j(r,u){function q(v){return fabric[fabric.util.string.camelize(fabric.util.string.capitalize(v))]}function p(){if(++t===o){if(u){u(s)}}}var s=[],t=0,o=r.length;r.forEach(function(x,w){if(!x.type){return}var v=q(x.type);if(v.async){v.fromObject(x,function(y){s[w]=y;p()})}else{s[w]=v.fromObject(x);p()}})}function a(q,p,r){var o=q.length>1?new fabric.PathGroup(q,p):q[0];if(typeof r!=="undefined"){o.setSourcePath(r)}return o}function i(s,p,r){if(r&&Object.prototype.toString.call(r)==="[object Array]"){for(var q=0,o=r.length;q>>0;if(e===0){return -1}var i=0;if(arguments.length>0){i=Number(arguments[1]);if(i!==i){i=0}else{if(i!==0&&i!==(1/0)&&i!==-(1/0)){i=(i>0||-1)*Math.floor(Math.abs(i))}}}if(i>=e){return -1}var f=i>=0?i:Math.max(e-Math.abs(i),0);for(;f>>0;f>>0;g>>0;f>>0;f>>0;g>>0,f=0,h;if(arguments.length>1){h=arguments[1]}else{do{if(f in this){h=this[f++];break}if(++f>=e){throw new TypeError()}}while(true)}for(;f=e){e=h[f][g]}}}else{while(f--){if(h[f]>=e){e=h[f]}}}return e}function c(h,g){if(!h||h.length===0){return undefined}var f=h.length-1,e=g?h[f][g]:h[f];if(g){while(f--){if(h[f][g]/g,">")}fabric.util.string={camelize:b,capitalize:c,escapeXml:a}}());(function(){var c=Array.prototype.slice,a=Function.prototype.apply,b=function(){};if(!Function.prototype.bind){Function.prototype.bind=function(d){var g=this,e=c.call(arguments,1),f;if(e.length){f=function(){return a.call(g,this instanceof b?this:d,e.concat(c.call(arguments)))}}else{f=function(){return a.call(g,this instanceof b?this:d,arguments)}}b.prototype=this.prototype;f.prototype=new b();return f}}})();(function(){var g=Array.prototype.slice,f=function(){};var d=(function(){for(var h in {toString:1}){if(h==="toString"){return false}}return true})();var c=function(h,k,i){for(var j in k){if(j in h.prototype&&typeof h.prototype[j]==="function"){h.prototype[j]=(function(l){return function(){var n=this.constructor.superclass;this.constructor.superclass=i;var m=k[l].apply(this,arguments);this.constructor.superclass=n;if(l!=="initialize"){return m}}})(j)}else{h.prototype[j]=k[j]}if(d){if(k.toString!==Object.prototype.toString){h.prototype.toString=k.toString}if(k.valueOf!==Object.prototype.valueOf){h.prototype.valueOf=k.valueOf}}}};function b(){}function a(h){var i=this.constructor.superclass.prototype[h];return(arguments.length>1)?i.apply(this,g.call(arguments,1)):i.call(this)}function e(){var l=null,k=g.call(arguments,0);if(typeof k[0]==="function"){l=k.shift()}function h(){this.initialize.apply(this,arguments)}h.superclass=l;h.subclasses=[];if(l){b.prototype=l.prototype;h.prototype=new b();l.subclasses.push(h)}for(var j=0,m=k.length;j-1?b(g,i.match(/opacity:\s*(\d?\.?\d*)/)[1]):g}for(var j in i){if(j==="opacity"){b(g,i[j])}else{var h=(j==="float"||j==="cssFloat")?(typeof k.styleFloat==="undefined"?"cssFloat":"styleFloat"):j;k[h]=i[j]}}return g}var f=fabric.document.createElement("div"),e=typeof f.style.opacity==="string",a=typeof f.style.filter==="string",c=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,b=function(g){return g};if(e){b=function(g,h){g.style.opacity=h;return g}}else{if(a){b=function(g,h){var i=g.style;if(g.currentStyle&&!g.currentStyle.hasLayout){i.zoom=1}if(c.test(i.filter)){h=h>=0.9999?"":("alpha(opacity="+(h*100)+")");i.filter=i.filter.replace(c,h)}else{i.filter+=" alpha(opacity="+(h*100)+")"}return g}}}fabric.util.setStyle=d})();(function(){var i=Array.prototype.slice;function h(k){return typeof k==="string"?fabric.document.getElementById(k):k}var c=function(k){return i.call(k,0)};var j;try{j=c(fabric.document.childNodes) instanceof Array}catch(b){}if(!j){c=function(l){var k=new Array(l.length),m=l.length;while(m--){k[m]=l[m]}return k}}function d(l,k){var m=fabric.document.createElement(l);for(var n in k){if(n==="class"){m.className=k[n]}else{if(n==="for"){m.htmlFor=k[n]}else{m.setAttribute(n,k[n])}}}return m}function g(k,l){if((" "+k.className+" ").indexOf(" "+l+" ")===-1){k.className+=(k.className?" ":"")+l}}function f(l,m,k){if(typeof m==="string"){m=d(m,k)}if(l.parentNode){l.parentNode.replaceChild(m,l)}m.appendChild(l);return m}function e(l){var k=0,m=0;do{k+=l.offsetTop||0;m+=l.offsetLeft||0;l=l.offsetParent}while(l);return({left:m,top:k})}var a;if(fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle){a=function(k){return fabric.document.defaultView.getComputedStyle(k,null).position}}else{a=function(k){var l=k.style.position;if(!l&&k.currentStyle){l=k.currentStyle.position}return l}}(function(){var l=fabric.document.documentElement.style;var m="userSelect" in l?"userSelect":"MozUserSelect" in l?"MozUserSelect":"WebkitUserSelect" in l?"WebkitUserSelect":"KhtmlUserSelect" in l?"KhtmlUserSelect":"";function n(o){if(typeof o.onselectstart!=="undefined"){o.onselectstart=fabric.util.falseFunction}if(m){o.style[m]="none"}else{if(typeof o.unselectable==="string"){o.unselectable="on"}}return o}function k(o){if(typeof o.onselectstart!=="undefined"){o.onselectstart=null}if(m){o.style[m]=""}else{if(typeof o.unselectable==="string"){o.unselectable=""}}return o}fabric.util.makeElementUnselectable=n;fabric.util.makeElementSelectable=k})();(function(){function k(l,p){var n=fabric.document.getElementsByTagName("head")[0],m=fabric.document.createElement("script"),o=true;m.type="text/javascript";m.setAttribute("runat","server");m.onload=m.onreadystatechange=function(q){if(o){if(typeof this.readyState==="string"&&this.readyState!=="loaded"&&this.readyState!=="complete"){return}o=false;p(q||fabric.window.event);m=m.onload=m.onreadystatechange=null}};m.src=l;n.appendChild(m)}fabric.util.getScript=k})();fabric.util.getById=h;fabric.util.toArray=c;fabric.util.makeElement=d;fabric.util.addClass=g;fabric.util.wrapElement=f;fabric.util.getElementOffset=e;fabric.util.getElementPosition=a})();(function(){function d(e,f){return e+(/\?/.test(e)?"&":"?")+f}var c=(function(){var h=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest()}];for(var e=h.length;e--;){try{var g=h[e]();if(g){return h[e]}}catch(f){}}})();function a(){}function b(g,f){f||(f={});var j=f.method?f.method.toUpperCase():"GET",h=f.onComplete||function(){},i=c(),e;i.onreadystatechange=function(){if(i.readyState===4){h(i);i.onreadystatechange=a}};if(j==="GET"){e=null;if(typeof f.parameters==="string"){g=d(g,f.parameters)}}i.open(j,g,true);if(j==="POST"||j==="PUT"){i.setRequestHeader("Content-Type","application/x-www-form-urlencoded")}i.send(e);return i}fabric.util.request=b})();(function(){function d(F,E,H,G){return H*(F/=G)*F+E}function l(F,E,H,G){return -H*(F/=G)*(F-2)+E}function r(F,E,H,G){F/=(G/2);if(F<1){return H/2*F*F+E}return -H/2*((--F)*(F-2)-1)+E}function B(F,E,H,G){return H*(F/=G)*F*F+E}function q(F,E,H,G){return H*((F=F/G-1)*F*F+1)+E}function u(F,E,H,G){F/=G/2;if(F<1){return H/2*F*F*F+E}return H/2*((F-=2)*F*F+2)+E}function t(F,E,H,G){return H*(F/=G)*F*F*F+E}function g(F,E,H,G){return -H*((F=F/G-1)*F*F*F-1)+E}function k(F,E,H,G){F/=G/2;if(F<1){return H/2*F*F*F*F+E}return -H/2*((F-=2)*F*F*F-2)+E}function y(F,E,H,G){return H*(F/=G)*F*F*F*F+E}function j(F,E,H,G){return H*((F=F/G-1)*F*F*F*F+1)+E}function n(F,E,H,G){F/=G/2;if(F<1){return H/2*F*F*F*F*F+E}return H/2*((F-=2)*F*F*F*F+2)+E}function f(F,E,H,G){return -H*Math.cos(F/G*(Math.PI/2))+H+E}function o(F,E,H,G){return H*Math.sin(F/G*(Math.PI/2))+E}function v(F,E,H,G){return -H/2*(Math.cos(Math.PI*F/G)-1)+E}function D(F,E,H,G){return(F===0)?E:H*Math.pow(2,10*(F/G-1))+E}function c(F,E,H,G){return(F===G)?E+H:H*(-Math.pow(2,-10*F/G)+1)+E}function i(F,E,H,G){if(F===0){return E}if(F===G){return E+H}F/=G/2;if(F<1){return H/2*Math.pow(2,10*(F-1))+E}return H/2*(-Math.pow(2,-10*--F)+2)+E}function h(F,E,H,G){return -H*(Math.sqrt(1-(F/=G)*F)-1)+E}function p(F,E,H,G){return H*Math.sqrt(1-(F=F/G-1)*F)+E}function x(F,E,H,G){F/=G/2;if(F<1){return -H/2*(Math.sqrt(1-F*F)-1)+E}return H/2*(Math.sqrt(1-(F-=2)*F)+1)+E}function s(G,E,K,J){var H=1.70158;var I=0;var F=K;if(G===0){return E}G/=J;if(G===1){return E+K}if(!I){I=J*0.3}if(F-1;w=w.split(/\s+/);var u=[],v,t;if(y){v=0;t=w.length;for(;v/i,""))}if(!x.documentElement){return}h.parseSVGDocument(x.documentElement,function(A,z){k.set(u,{objects:h.util.array.invoke(A,"toObject"),options:z});w(A,z)},t)}}function b(v){var u=v.objects,t=v.options;u=u.map(function(w){return h[f(w.type)].fromObject(w)});return({objects:u,options:t})}function n(u,x,t){u=u.trim();var v;if(typeof DOMParser!=="undefined"){var w=new DOMParser();if(w&&w.parseFromString){v=w.parseFromString(u,"text/xml")}}else{if(h.window.ActiveXObject){v=new ActiveXObject("Microsoft.XMLDOM");v.async="false";v.loadXML(u.replace(//i,""))}}h.parseSVGDocument(v.documentElement,function(z,y){x(z,y)},t)}function m(w){var u="";for(var v=0,t=w.length;v",'",""].join("")}return u}p(h,{parseAttributes:e,parseElements:g,parseStyleAttribute:i,parsePointsAttribute:s,getCSSRules:d,loadSVGFromURL:c,loadSVGFromString:n,createSVGFontFacesMarkup:m})})(typeof exports!=="undefined"?exports:this);(function(){function c(h){var g=h.getAttribute("style");if(g){var k=g.split(/\s*;\s*/);if(k[k.length-1]===""){k.pop()}for(var f=k.length;f--;){var e=k[f].split(/\s*:\s*/),d=e[0].trim(),j=e[1].trim();if(d==="stop-color"){return j}}}}fabric.Gradient=fabric.util.createClass({initialize:function(d){d||(d={});this.x1=d.x1||0;this.y1=d.y1||0;this.x2=d.x2||0;this.y2=d.y2||0;this.colorStops=d.colorStops},toObject:function(){return{x1:this.x1,x2:this.x2,y1:this.y1,y2:this.y2,colorStops:this.colorStops}},toLiveGradient:function(e){var g=e.createLinearGradient(this.x1,this.y1,this.x2||e.canvas.width,this.y2);for(var d in this.colorStops){var f=this.colorStops[d];g.addColorStop(parseFloat(d),f)}return g}});fabric.util.object.extend(fabric.Gradient,{fromElement:function(g,d){var k=g.getElementsByTagName("stop"),j,e={},h={x1:g.getAttribute("x1")||0,y1:g.getAttribute("y1")||0,x2:g.getAttribute("x2")||"100%",y2:g.getAttribute("y2")||0};for(var f=k.length;f--;){g=k[f];j=g.getAttribute("offset");j=parseFloat(j)/(/%$/.test(j)?100:1);e[j]=c(g)||g.getAttribute("stop-color")}a(d,h);return new fabric.Gradient({x1:h.x1,y1:h.y1,x2:h.x2,y2:h.y2,colorStops:e})},forObject:function(e,d){d||(d={});a(e,d);return new fabric.Gradient(d)}});function a(f,e){for(var g in e){if(typeof e[g]==="string"&&/^\d+%$/.test(e[g])){var d=parseFloat(e[g],10);if(g==="x1"||g==="x2"){e[g]=f.width*d/100}else{if(g==="y1"||g==="y2"){e[g]=f.height*d/100}}}if(g==="x1"||g==="x2"){e[g]-=f.width/2}else{if(g==="y1"||g==="y2"){e[g]-=f.height/2}}}}function b(j){var f=j.getElementsByTagName("linearGradient"),d=j.getElementsByTagName("radialGradient"),g,e,h={};e=f.length;for(;e--;){g=f[e];h[g.getAttribute("id")]=g}e=d.length;for(;e--;){g=d[e];h[g.getAttribute("id")]=g}return h}fabric.getGradientDefs=b})();(function(b){var c=b.fabric||(b.fabric={});if(c.Point){c.warn("fabric.Point is already defined");return}c.Point=a;function a(d,e){if(arguments.length>0){this.init(d,e)}}a.prototype={constructor:a,init:function(d,e){this.x=d;this.y=e},add:function(d){return new a(this.x+d.x,this.y+d.y)},addEquals:function(d){this.x+=d.x;this.y+=d.y;return this},scalarAdd:function(d){return new a(this.x+d,this.y+d)},scalarAddEquals:function(d){this.x+=d;this.y+=d;return this},subtract:function(d){return new a(this.x-d.x,this.y-d.y)},subtractEquals:function(d){this.x-=d.x;this.y-=d.y;return this},scalarSubtract:function(d){return new a(this.x-d,this.y-d)},scalarSubtractEquals:function(d){this.x-=d;this.y-=d;return this},multiply:function(d){return new a(this.x*d,this.y*d)},multiplyEquals:function(d){this.x*=d;this.y*=d;return this},divide:function(d){return new a(this.x/d,this.y/d)},divideEquals:function(d){this.x/=d;this.y/=d;return this},eq:function(d){return(this.x===d.x&&this.y===d.y)},lt:function(d){return(this.xd.x&&this.y>d.y)},gte:function(d){return(this.x>=d.x&&this.y>=d.y)},lerp:function(e,d){return new a(this.x+(e.x-this.x)*d,this.y+(e.y-this.y)*d)},distanceFrom:function(f){var e=this.x-f.x,d=this.y-f.y;return Math.sqrt(e*e+d*d)},midPointFrom:function(d){return new a(this.x+(d.x-this.x)/2,this.y+(d.y-this.y)/2)},min:function(d){return new a(Math.min(this.x,d.x),Math.min(this.y,d.y))},max:function(d){return new a(Math.max(this.x,d.x),Math.max(this.y,d.y))},toString:function(){return this.x+","+this.y},setXY:function(d,e){this.x=d;this.y=e},setFromPoint:function(d){this.x=d.x;this.y=d.y},swap:function(e){var d=this.x,f=this.y;this.x=e.x;this.y=e.y;e.x=d;e.y=f}}})(typeof exports!=="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={});if(b.Intersection){b.warn("fabric.Intersection is already defined");return}function c(d){if(arguments.length>0){this.init(d)}}b.Intersection=c;b.Intersection.prototype={init:function(d){this.status=d;this.points=[]},appendPoint:function(d){this.points.push(d)},appendPoints:function(d){this.points=this.points.concat(d)}};b.Intersection.intersectLineLine=function(h,f,l,k){var m,i=(k.x-l.x)*(h.y-l.y)-(k.y-l.y)*(h.x-l.x),j=(f.x-h.x)*(h.y-l.y)-(f.y-h.y)*(h.x-l.x),g=(k.y-l.y)*(f.x-h.x)-(k.x-l.x)*(f.y-h.y);if(g!==0){var e=i/g,d=j/g;if(0<=e&&e<=1&&0<=d&&d<=1){m=new c("Intersection");m.points.push(new b.Point(h.x+e*(f.x-h.x),h.y+e*(f.y-h.y)))}else{m=new c("No Intersection")}}else{if(i===0||j===0){m=new c("Coincident")}else{m=new c("Parallel")}}return m};b.Intersection.intersectLinePolygon=function(e,d,l){var m=new c("No Intersection"),f=l.length;for(var h=0;h0){m.status="Intersection"}return m};b.Intersection.intersectPolygonPolygon=function(j,h){var f=new c("No Intersection"),l=j.length;for(var k=0;k0){f.status="Intersection"}return f};b.Intersection.intersectPolygonRectangle=function(n,e,d){var g=e.min(d),m=e.max(d),f=new b.Point(m.x,g.y),l=new b.Point(g.x,m.y),k=c.intersectLinePolygon(g,f,n),j=c.intersectLinePolygon(f,m,n),i=c.intersectLinePolygon(m,l,n),h=c.intersectLinePolygon(l,g,n),o=new c("No Intersection");o.appendPoints(k.points);o.appendPoints(j.points);o.appendPoints(i.points);o.appendPoints(h.points);if(o.points.length>0){o.status="Intersection"}return o}})(typeof exports!=="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={});if(b.Color){b.warn("fabric.Color is already defined.");return}function c(d){if(!d){this.setSource([0,0,0,1])}else{this._tryParsingColor(d)}}b.Color=c;b.Color.prototype={_tryParsingColor:function(d){var e=c.sourceFromHex(d);if(!e){e=c.sourceFromRgb(d)}if(e){this.setSource(e)}},getSource:function(){return this._source},setSource:function(d){this._source=d},toRgb:function(){var d=this.getSource();return"rgb("+d[0]+","+d[1]+","+d[2]+")"},toRgba:function(){var d=this.getSource();return"rgba("+d[0]+","+d[1]+","+d[2]+","+d[3]+")"},toHex:function(){var h=this.getSource();var f=h[0].toString(16);f=(f.length===1)?("0"+f):f;var e=h[1].toString(16);e=(e.length===1)?("0"+e):e;var d=h[2].toString(16);d=(d.length===1)?("0"+d):d;return f.toUpperCase()+e.toUpperCase()+d.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(e){var d=this.getSource();d[3]=e;this.setSource(d);return this},toGrayscale:function(){var f=this.getSource(),e=parseInt((f[0]*0.3+f[1]*0.59+f[2]*0.11).toFixed(0),10),d=f[3];this.setSource([e,e,e,d]);return this},toBlackWhite:function(d){var g=this.getSource(),f=(g[0]*0.3+g[1]*0.59+g[2]*0.11).toFixed(0),e=g[3];d=d||127;f=(Number(f)','',"',"Created with Fabric.js ",fabric.version,"",fabric.createSVGFontFacesMarkup(this.getObjects())];if(this.backgroundImage){g.push('')}if(this.overlayImage){g.push('')}for(var h=0,j=this.getObjects(),f=j.length;h");return g.join("")},isEmpty:function(){return this._objects.length===0},remove:function(f){d(this._objects,f);if(this.getActiveObject()===f){this.fire("before:selection:cleared",{target:f});this.discardActiveObject();this.fire("selection:cleared")}this.renderAll();return f},sendToBack:function(f){d(this._objects,f);this._objects.unshift(f);return this.renderAll()},bringToFront:function(f){d(this._objects,f);this._objects.push(f);return this.renderAll()},sendBackwards:function(j){var g=this._objects.indexOf(j),f=g;if(g!==0){for(var k=g-1;k>=0;--k){var h=j.intersectsWithObject(this._objects[k])||j.isContainedWithinObject(this._objects[k])||this._objects[k].isContainedWithinObject(j);if(h){f=k;break}}d(this._objects,j);this._objects.splice(f,0,j)}return this.renderAll()},bringForward:function(k){var n=this.getObjects(),g=n.indexOf(k),f=g;if(g!==n.length-1){for(var m=g+1,j=this._objects.length;m"};e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(k){var h=k.getContext("2d"),f=h.getImageData(0,0,k.width,k.height),o=f.data,l=f.width,q=f.height,p,g,n,m;for(n=0;n0){if(B>this.targetFindTolerance){B-=this.targetFindTolerance}else{B=0}if(A>this.targetFindTolerance){A-=this.targetFindTolerance}else{A=0}}var v=true;var r=w.getImageData(B,A,(this.targetFindTolerance*2)||1,(this.targetFindTolerance*2)||1);for(var u=3;u0)?0:-y),r.ey-((x>0)?0:-x),w,u);s.lineWidth=this.selectionLineWidth;s.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var v=r.ex+a-((y>0)?0:w);var t=r.ey+a-((x>0)?0:u);s.beginPath();this.drawDashedLine(s,v,t,v+w,t,this.selectionDashArray);this.drawDashedLine(s,v,t+u-1,v+w,t+u-1,this.selectionDashArray);this.drawDashedLine(s,v,t,v,t+u,this.selectionDashArray);this.drawDashedLine(s,v+w-1,t,v+w-1,t+u,this.selectionDashArray);s.closePath();s.stroke()}else{s.strokeRect(r.ex+a-((y>0)?0:w),r.ey+a-((x>0)?0:u),w,u)}},drawDashedLine:function(C,A,v,r,w,E){var F=r-A,D=w-v,t=Math.sqrt(F*F+D*D),s=Math.atan2(D,F),B=E.length,u=0,z=true;C.save();C.translate(A,v);C.moveTo(0,0);C.rotate(s);A=0;while(t>A){A+=E[u++%B];if(A>t){A=t}C[z?"lineTo":"moveTo"](A,0);z=!z}C.restore()},_findSelectedObjects:function(v){var B=[],s=this._groupSelector.ex,A=this._groupSelector.ey,r=s+this._groupSelector.left,y=A+this._groupSelector.top,x,w=new fabric.Point(f(s,r),f(A,y)),z=new fabric.Point(k(s,r),k(A,y));for(var t=0,u=this._objects.length;t1){B=new fabric.Group(B);this.setActiveGroup(B);B.saveCoords();this.fire("selection:created",{target:B})}}this.renderAll()},findTarget:function(z,u){var A,r=this.getPointer(z);if(this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.containsPoint(z,this.lastRenderedObjectWithControlsAboveOverlay)){A=this.lastRenderedObjectWithControlsAboveOverlay;return A}var t=this.getActiveGroup();if(t&&!u&&this.containsPoint(z,t)){A=t;return A}var s=[];for(var w=this._objects.length;w--;){if(this._objects[w]&&this.containsPoint(z,this._objects[w])){if(this.perPixelTargetFind||this._objects[w].perPixelTargetFind){s[s.length]=this._objects[w]}else{A=this._objects[w];this.relatedTarget=A;break}}}for(var v=0,y=s.length;v"},set:function(i,o){if(typeof i==="object"){for(var p in i){this._set(p,i[p])}}else{if(typeof o==="function"){this._set(i,o(this.get(i)))}else{this._set(i,o)}}return this},_set:function(i,o){var p=(i==="scaleX"||i==="scaleY")&&o1?this.strokeWidth:0,u=this.padding,s=b(this.angle);this.currentWidth=(this.width+w)*this.scaleX+u*2;this.currentHeight=(this.height+w)*this.scaleY+u*2;if(this.currentWidth<0){this.currentWidth=Math.abs(this.currentWidth)}var v=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2));var t=Math.atan(this.currentHeight/this.currentWidth);var D=Math.cos(t+s)*v,C=Math.sin(t+s)*v,B=Math.sin(s),x=Math.cos(s);var q={x:this.left-D,y:this.top-C};var o={x:q.x+(this.currentWidth*x),y:q.y+(this.currentWidth*B)};var E={x:o.x-(this.currentHeight*B),y:o.y+(this.currentHeight*x)};var p={x:q.x-(this.currentHeight*B),y:q.y+(this.currentHeight*x)};var A={x:q.x-(this.currentHeight/2*B),y:q.y+(this.currentHeight/2*x)};var y={x:q.x+(this.currentWidth/2*x),y:q.y+(this.currentWidth/2*B)};var z={x:o.x-(this.currentHeight/2*B),y:o.y+(this.currentHeight/2*x)};var i={x:p.x+(this.currentWidth/2*x),y:p.y+(this.currentWidth/2*B)};var r={x:q.x+(this.currentWidth/2*x),y:q.y+(this.currentWidth/2*B)};this.oCoords={tl:q,tr:o,br:E,bl:p,ml:A,mt:y,mr:z,mb:i,mtr:r};this._setCornerCoords();return this},getBoundingRectWidth:function(){this.oCoords||this.setCoords();var o=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x];var i=d.util.array.min(o);var p=d.util.array.max(o);return Math.abs(i-p)},getBoundingRectHeight:function(){this.oCoords||this.setCoords();var i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y];var p=d.util.array.min(i);var o=d.util.array.max(i);return Math.abs(p-o)},drawBorders:function(x){if(!this.hasBorders){return}var q=d.Object.MIN_SCALE_LIMIT,s=this.padding,i=s*2,r=this.strokeWidth>1?this.strokeWidth:0;x.save();x.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1;x.strokeStyle=this.borderColor;var v=1/(this.scaleXi){y=w-i}if(A){o+=(z*A)-(y*A||0)}else{v+=(z*x)-(y*x||0)}p[1&r?"moveTo":"lineTo"](o,v);if(r>=s){r=0}}}q(1,0);q(0,1);q(-1,0);q(0,-1);p.stroke();p.closePath();p.restore()},drawCorners:function(z){if(!this.hasControls){return}var v=this.cornersize,p=v/2,i=this.strokeWidth/2,o=-(this.width/2),t=-(this.height/2),F,A,x=v/this.scaleX,u=v/this.scaleY,C=this.padding/this.scaleX,B=this.padding/this.scaleY,D=p/this.scaleY,E=p/this.scaleX,r=(p-v)/this.scaleX,q=(p-v)/this.scaleY,w=this.height,y=this.width,s=this.transparentCorners?"strokeRect":"fillRect";z.save();z.lineWidth=1/Math.max(this.scaleX,this.scaleY);z.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1;z.strokeStyle=z.fillStyle=this.cornerColor;F=o-E-i-C;A=t-D-i-B;z.clearRect(F,A,x,u);z[s](F,A,x,u);F=o+y-E+i+C;A=t-D-i-B;z.clearRect(F,A,x,u);z[s](F,A,x,u);F=o-E-i-C;A=t+w+q+i+B;z.clearRect(F,A,x,u);z[s](F,A,x,u);F=o+y+r+i+C;A=t+w+q+i+B;z.clearRect(F,A,x,u);z[s](F,A,x,u);if(!this.get("lockUniScaling")){F=o+y/2-E;A=t-D-i-B;z.clearRect(F,A,x,u);z[s](F,A,x,u);F=o+y/2-E;A=t+w+q+i+B;z.clearRect(F,A,x,u);z[s](F,A,x,u);F=o+y+r+i+C;A=t+w/2-D;z.clearRect(F,A,x,u);z[s](F,A,x,u);F=o-E-i-C;A=t+w/2-D;z.clearRect(F,A,x,u);z[s](F,A,x,u)}if(this.hasRotatingPoint){F=o+y/2-E;A=this.flipY?(t+w+(this.rotatingPointOffset/this.scaleY)-u/2+i+B):(t-(this.rotatingPointOffset/this.scaleY)-u/2-i-B);z.clearRect(F,A,x,u);z[s](F,A,x,u)}z.restore();return this},clone:function(o,i){if(this.constructor.fromObject){return this.constructor.fromObject(this.toObject(i),o)}return new d.Object(this.toObject(i))},cloneAsImage:function(q){if(d.Image){var o=new Image();o.onload=function(){if(q){q(new d.Image(o),p)}o=o.onload=null};var p={angle:this.get("angle"),flipX:this.get("flipX"),flipY:this.get("flipY")};this.set("angle",0).set("flipX",false).set("flipY",false);this.toDataURL(function(i){o.src=i})}return this},toDataURL:function(q){var o=d.document.createElement("canvas");if(!o.getContext&&typeof G_vmlCanvasManager!=="undefined"){G_vmlCanvasManager.initElement(o)}o.width=this.getBoundingRectWidth();o.height=this.getBoundingRectHeight();d.util.wrapElement(o,"div");var i=new d.Canvas(o);i.backgroundColor="transparent";i.renderAll();if(this.constructor.async){this.clone(p)}else{p(this.clone())}function p(s){s.left=o.width/2;s.top=o.height/2;s.setActive(false);i.add(s);var r=i.toDataURL("png");i.dispose();i=s=null;q&&q(r)}},hasStateChanged:function(){return this.stateProperties.some(function(i){return this[i]!==this.originalState[i]},this)},saveState:function(){this.stateProperties.forEach(function(i){this.originalState[i]=this.get(i)},this);return this},setupState:function(){this.originalState={};this.saveState()},intersectsWithRect:function(p,r){var u=this.oCoords,i=new d.Point(u.tl.x,u.tl.y),q=new d.Point(u.tr.x,u.tr.y),t=new d.Point(u.bl.x,u.bl.y),o=new d.Point(u.br.x,u.br.y);var s=d.Intersection.intersectPolygonRectangle([i,q,o,t],p,r);return(s.status==="Intersection")},intersectsWithObject:function(i){function o(s){return{tl:new d.Point(s.tl.x,s.tl.y),tr:new d.Point(s.tr.x,s.tr.y),bl:new d.Point(s.bl.x,s.bl.y),br:new d.Point(s.br.x,s.br.y)}}var p=o(this.oCoords),r=o(i.oCoords);var q=d.Intersection.intersectPolygonPolygon([p.tl,p.tr,p.br,p.bl],[r.tl,r.tr,r.br,r.bl]);return(q.status==="Intersection")},isContainedWithinObject:function(i){return this.isContainedWithinRect(i.oCoords.tl,i.oCoords.br)},isContainedWithinRect:function(o,q){var s=this.oCoords,i=new d.Point(s.tl.x,s.tl.y),p=new d.Point(s.tr.x,s.tr.y),r=new d.Point(s.bl.x,s.bl.y);return i.x>o.x&&p.xo.y&&r.y=t)&&(q.d.y>=t)){continue}if((q.o.x===q.d.x)&&(q.o.x>=u)){v=q.o.x;s=t}else{x=0;w=(q.d.y-q.o.y)/(q.d.x-q.o.x);p=t-x*u;o=q.o.y-w*q.o.x;v=-(p-o)/(x-w);s=p+x*v}if(v>=u){r+=1}if(r===2){break}}return r},_getImageLines:function(i){return{topline:{o:i.tl,d:i.tr},rightline:{o:i.tr,d:i.br},bottomline:{o:i.br,d:i.bl},leftline:{o:i.bl,d:i.tl}}},_setCornerCoords:function(){var t=this.oCoords,o=b(this.angle),q=b(45-this.angle),r=Math.sqrt(2*Math.pow(this.cornersize,2))/2,i=r*Math.cos(q),p=r*Math.sin(q),u=Math.sin(o),s=Math.cos(o);t.tl.corner={tl:{x:t.tl.x-p,y:t.tl.y-i},tr:{x:t.tl.x+i,y:t.tl.y-p},bl:{x:t.tl.x-i,y:t.tl.y+p},br:{x:t.tl.x+p,y:t.tl.y+i}};t.tr.corner={tl:{x:t.tr.x-p,y:t.tr.y-i},tr:{x:t.tr.x+i,y:t.tr.y-p},br:{x:t.tr.x+p,y:t.tr.y+i},bl:{x:t.tr.x-i,y:t.tr.y+p}};t.bl.corner={tl:{x:t.bl.x-p,y:t.bl.y-i},bl:{x:t.bl.x-i,y:t.bl.y+p},br:{x:t.bl.x+p,y:t.bl.y+i},tr:{x:t.bl.x+i,y:t.bl.y-p}};t.br.corner={tr:{x:t.br.x+i,y:t.br.y-p},bl:{x:t.br.x-i,y:t.br.y+p},br:{x:t.br.x+p,y:t.br.y+i},tl:{x:t.br.x-p,y:t.br.y-i}};t.ml.corner={tl:{x:t.ml.x-p,y:t.ml.y-i},tr:{x:t.ml.x+i,y:t.ml.y-p},bl:{x:t.ml.x-i,y:t.ml.y+p},br:{x:t.ml.x+p,y:t.ml.y+i}};t.mt.corner={tl:{x:t.mt.x-p,y:t.mt.y-i},tr:{x:t.mt.x+i,y:t.mt.y-p},bl:{x:t.mt.x-i,y:t.mt.y+p},br:{x:t.mt.x+p,y:t.mt.y+i}};t.mr.corner={tl:{x:t.mr.x-p,y:t.mr.y-i},tr:{x:t.mr.x+i,y:t.mr.y-p},bl:{x:t.mr.x-i,y:t.mr.y+p},br:{x:t.mr.x+p,y:t.mr.y+i}};t.mb.corner={tl:{x:t.mb.x-p,y:t.mb.y-i},tr:{x:t.mb.x+i,y:t.mb.y-p},bl:{x:t.mb.x-i,y:t.mb.y+p},br:{x:t.mb.x+p,y:t.mb.y+i}};t.mtr.corner={tl:{x:t.mtr.x-p+(u*this.rotatingPointOffset),y:t.mtr.y-i-(s*this.rotatingPointOffset)},tr:{x:t.mtr.x+i+(u*this.rotatingPointOffset),y:t.mtr.y-p-(s*this.rotatingPointOffset)},bl:{x:t.mtr.x-i+(u*this.rotatingPointOffset),y:t.mtr.y+p-(s*this.rotatingPointOffset)},br:{x:t.mtr.x+p+(u*this.rotatingPointOffset),y:t.mtr.y+i-(s*this.rotatingPointOffset)}}},toGrayscale:function(){var i=this.get("fill");if(i){this.set("overlayFill",new d.Color(i).toGrayscale().toRgb())}return this},complexity:function(){return 0},toJSON:function(i){return this.toObject(i)},setGradientFill:function(i){this.set("fill",d.Gradient.forObject(this,i))},animate:function(){if(arguments[0]&&typeof arguments[0]==="object"){for(var i in arguments[0]){this._animate(i,arguments[0][i],arguments[1])}}else{this._animate.apply(this,arguments)}return this},_animate:function(o,q,i){var p=this;q=q.toString();i||(i={});if(!("from" in i)){i.from=this.get(o)}if(~q.indexOf("=")){q=this.get(o)+parseFloat(q.replace("=",""))}else{q=parseFloat(q)}d.util.animate({startValue:i.from,endValue:q,byValue:i.by,easing:i.easing,duration:i.duration,onChange:function(r){p.set(o,r);i.onChange&&i.onChange()},onComplete:function(){p.setCoords();i.onComplete&&i.onComplete()}})},centerH:function(){this.canvas.centerObjectH(this);return this},centerV:function(){this.canvas.centerObjectV(this);return this},center:function(){return this.centerH().centerV()},remove:function(){return this.canvas.remove(this)},sendToBack:function(){this.canvas.sendToBack(this);return this},bringToFront:function(){this.canvas.bringToFront(this);return this},sendBackwards:function(){this.canvas.sendBackwards(this);return this},bringForward:function(){this.canvas.bringForward(this);return this}});var j=d.Object.prototype;for(var g=j.stateProperties.length;g--;){var h=j.stateProperties[g],e=h.charAt(0).toUpperCase()+h.slice(1),f="set"+e,m="get"+e;if(!j[m]){j[m]=(function(i){return new Function('return this.get("'+i+'")')})(h)}if(!j[f]){j[f]=(function(i){return new Function("value",'return this.set("'+i+'", value)')})(h)}}d.Object.prototype.rotate=d.Object.prototype.setAngle;l(d.Object.prototype,d.Observable);l(d.Object,{NUM_FRACTION_DIGITS:2,MIN_SCALE_LIMIT:0.1})})(typeof exports!=="undefined"?exports:this);(function(b){var c=b.fabric||(b.fabric={}),d=c.util.object.extend,a={x1:1,x2:1,y1:1,y2:1};if(c.Line){c.warn("fabric.Line is already defined");return}c.Line=c.util.createClass(c.Object,{type:"line",initialize:function(f,e){e=e||{};if(!f){f=[0,0,0,0]}this.callSuper("initialize",e);this.set("x1",f[0]);this.set("y1",f[1]);this.set("x2",f[2]);this.set("y2",f[3]);this._setWidthHeight(e)},_setWidthHeight:function(e){e||(e={});this.set("width",(this.x2-this.x1)||1);this.set("height",(this.y2-this.y1)||1);this.set("left","left" in e?e.left:(this.x1+this.width/2));this.set("top","top" in e?e.top:(this.y1+this.height/2))},_set:function(e,f){this[e]=f;if(e in a){this._setWidthHeight()}return this},_render:function(e){e.beginPath();if(this.group){e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top)}e.moveTo(this.width===1?0:(-this.width/2),this.height===1?0:(-this.height/2));e.lineTo(this.width===1?0:(this.width/2),this.height===1?0:(this.height/2));e.lineWidth=this.strokeWidth;var f=e.strokeStyle;e.strokeStyle=e.fillStyle;e.stroke();e.strokeStyle=f},complexity:function(){return 1},toObject:function(e){return d(this.callSuper("toObject",e),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})},toSVG:function(){return[""].join("")}});c.Line.ATTRIBUTE_NAMES="x1 y1 x2 y2 stroke stroke-width transform".split(" ");c.Line.fromElement=function(f,e){var h=c.parseAttributes(f,c.Line.ATTRIBUTE_NAMES);var g=[h.x1||0,h.y1||0,h.x2||0,h.y2||0];return new c.Line(g,d(h,e))};c.Line.fromObject=function(e){var f=[e.x1,e.y1,e.x2,e.y2];return new c.Line(f,e)}})(typeof exports!=="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={}),d=Math.PI*2,e=b.util.object.extend;if(b.Circle){b.warn("fabric.Circle is already defined.");return}b.Circle=b.util.createClass(b.Object,{type:"circle",initialize:function(f){f=f||{};this.set("radius",f.radius||0);this.callSuper("initialize",f);var g=this.get("radius")*2;this.set("width",g).set("height",g)},toObject:function(f){return e(this.callSuper("toObject",f),{radius:this.get("radius")})},toSVG:function(){return('')},_render:function(f,g){f.beginPath();f.globalAlpha=this.group?(f.globalAlpha*this.opacity):this.opacity;f.arc(g?this.left:0,g?this.top:0,this.radius,0,d,false);f.closePath();if(this.fill){f.fill()}if(this.stroke){f.stroke()}},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(f){this.radius=f;this.set("width",f*2).set("height",f*2)},complexity:function(){return 1}});b.Circle.ATTRIBUTE_NAMES="cx cy r fill fill-opacity opacity stroke stroke-width transform".split(" ");b.Circle.fromElement=function(g,f){f||(f={});var h=b.parseAttributes(g,b.Circle.ATTRIBUTE_NAMES);if(!c(h)){throw new Error("value of `r` attribute is required and can not be negative")}if("left" in h){h.left-=(f.width/2)||0}if("top" in h){h.top-=(f.height/2)||0}return new b.Circle(e(h,f))};function c(f){return(("radius" in f)&&(f.radius>0))}b.Circle.fromObject=function(f){return new b.Circle(f)}})(typeof exports!=="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={});if(b.Triangle){b.warn("fabric.Triangle is already defined");return}b.Triangle=b.util.createClass(b.Object,{type:"triangle",initialize:function(c){c=c||{};this.callSuper("initialize",c);this.set("width",c.width||100).set("height",c.height||100)},_render:function(c){var d=this.width/2,e=this.height/2;c.beginPath();c.moveTo(-d,e);c.lineTo(0,-e);c.lineTo(d,e);c.closePath();if(this.fill){c.fill()}if(this.stroke){c.stroke()}},complexity:function(){return 1},toSVG:function(){var c=this.width/2,d=this.height/2;var e=[-c+" "+d,"0 "+-d,c+" "+d].join(",");return''}});b.Triangle.fromObject=function(c){return new b.Triangle(c)}})(typeof exports!=="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={}),c=Math.PI*2,d=b.util.object.extend;if(b.Ellipse){b.warn("fabric.Ellipse is already defined.");return}b.Ellipse=b.util.createClass(b.Object,{type:"ellipse",initialize:function(e){e=e||{};this.callSuper("initialize",e);this.set("rx",e.rx||0);this.set("ry",e.ry||0);this.set("width",this.get("rx")*2);this.set("height",this.get("ry")*2)},toObject:function(e){return d(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(){return[""].join("")},render:function(e,f){if(this.rx===0||this.ry===0){return}return this.callSuper("render",e,f)},_render:function(e,f){e.beginPath();e.save();e.globalAlpha=this.group?(e.globalAlpha*this.opacity):this.opacity;if(this.transformMatrix&&this.group){e.translate(this.cx,this.cy)}e.transform(1,0,0,this.ry/this.rx,0,0);e.arc(f?this.left:0,f?this.top:0,this.rx,0,c,false);if(this.stroke){e.stroke()}if(this.fill){e.fill()}e.restore()},complexity:function(){return 1}});b.Ellipse.ATTRIBUTE_NAMES="cx cy rx ry fill fill-opacity opacity stroke stroke-width transform".split(" ");b.Ellipse.fromElement=function(g,f){f||(f={});var i=b.parseAttributes(g,b.Ellipse.ATTRIBUTE_NAMES);var e=i.left;var j=i.top;if("left" in i){i.left-=(f.width/2)||0}if("top" in i){i.top-=(f.height/2)||0}var h=new b.Ellipse(d(i,f));h.cx=e||0;h.cy=j||0;return h};b.Ellipse.fromObject=function(e){return new b.Ellipse(e)}})(typeof exports!=="undefined"?exports:this);(function(b){var c=b.fabric||(b.fabric={}),d=c.util.object.extend;if(c.Rect){console.warn("fabric.Rect is already defined");return}c.Rect=c.util.createClass(c.Object,{type:"rect",rx:0,ry:0,initialize:function(e){e=e||{};this._initStateProperties();this.callSuper("initialize",e);this._initRxRy();this.x=0;this.y=0},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_initRxRy:function(){if(this.rx&&!this.ry){this.ry=this.rx}else{if(this.ry&&!this.rx){this.rx=this.ry}}},_render:function(g){var k=this.rx||0,j=this.ry||0,e=-this.width/2,l=-this.height/2,f=this.width,i=this.height;g.beginPath();g.globalAlpha=this.group?(g.globalAlpha*this.opacity):this.opacity;if(this.transformMatrix&&this.group){g.translate(this.width/2+this.x,this.height/2+this.y)}if(!this.transformMatrix&&this.group){g.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y)}g.moveTo(e+k,l);g.lineTo(e+f-k,l);g.quadraticCurveTo(e+f,l,e+f,l+j,e+f,l+j);g.lineTo(e+f,l+i-j);g.quadraticCurveTo(e+f,l+i,e+f-k,l+i,e+f-k,l+i);g.lineTo(e+k,l+i);g.quadraticCurveTo(e,l+i,e,l+i-j,e,l+i-j);g.lineTo(e,l+j);g.quadraticCurveTo(e,l,e+k,l,e+k,l);g.closePath();if(this.fill){g.fill()}if(this.strokeDashArray){this._renderDashedStroke(g)}else{if(this.stroke){g.stroke()}}},_normalizeLeftTopProperties:function(e){if(e.left){this.set("left",e.left+this.getWidth()/2)}this.set("x",e.left||0);if(e.top){this.set("top",e.top+this.getHeight()/2)}this.set("y",e.top||0);return this},complexity:function(){return 1},toObject:function(e){return d(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0})},toSVG:function(){return''}});c.Rect.ATTRIBUTE_NAMES="x y width height rx ry fill fill-opacity opacity stroke stroke-width transform".split(" ");function a(e){e.left=e.left||0;e.top=e.top||0;return e}c.Rect.fromElement=function(f,e){if(!f){return null}var h=c.parseAttributes(f,c.Rect.ATTRIBUTE_NAMES);h=a(h);var g=new c.Rect(d((e?c.util.object.clone(e):{}),h));g._normalizeLeftTopProperties(h);return g};c.Rect.fromObject=function(e){return new c.Rect(e)}})(typeof exports!=="undefined"?exports:this);(function(b){var c=b.fabric||(b.fabric={}),a=c.util.toFixed;if(c.Polyline){c.warn("fabric.Polyline is already defined");return}c.Polyline=c.util.createClass(c.Object,{type:"polyline",initialize:function(e,d){d=d||{};this.set("points",e);this.callSuper("initialize",d);this._calcDimensions()},_calcDimensions:function(){return c.Polygon.prototype._calcDimensions.call(this)},toObject:function(d){return c.Polygon.prototype.toObject.call(this,d)},toSVG:function(){var f=[];for(var e=0,d=this.points.length;e"].join("")},_render:function(f){var e;f.beginPath();f.moveTo(this.points[0].x,this.points[0].y);for(var g=0,d=this.points.length;g"].join("")},_render:function(j){var h;j.beginPath();j.moveTo(this.points[0].x,this.points[0].y);for(var k=0,g=this.points.length;k1){E=Math.sqrt(E);O*=E;N*=E}var R=aa/O;var Q=W/O;var D=(-W)/N;var C=(aa)/N;var H=R*M+Q*L;var q=D*M+C*L;var F=R*T+Q*S;var ab=D*T+C*S;var Z=(F-H)*(F-H)+(ab-q)*(ab-q);var U=1/Z-0.25;if(U<0){U=0}var w=Math.sqrt(U);if(P===J){w=-w}var V=0.5*(H+F)-w*(ab-q);var K=0.5*(q+ab)+w*(F-H);var v=Math.atan2(q-K,H-V);var u=Math.atan2(ab-K,F-V);var Y=u-v;if(Y<0&&P===1){Y+=2*Math.PI}else{if(Y>0&&P===0){Y-=2*Math.PI}}var B=Math.ceil(Math.abs(Y/(Math.PI*0.5+0.001)));var I=[];for(var X=0;X"},toObject:function(r){var q=g(this.callSuper("toObject",r),{path:this.path});if(this.sourcePath){q.sourcePath=this.sourcePath}if(this.transformMatrix){q.transformMatrix=this.transformMatrix}return q},toDatalessObject:function(r){var q=this.toObject(r);if(this.sourcePath){q.path=this.sourcePath}delete q.sourcePath;return q},toSVG:function(){var t=[];for(var r=0,q=this.path.length;r',"',""].join("")},complexity:function(){return this.path.length},_parsePath:function(){var C=[],z,v,y;for(var u=0,q,w=this.path.length;uB){for(var r=1,x=q.length;r"];for(var l=0,j=m.length;l");return k.join("")},toString:function(){return"#"},isSameColor:function(){var i=this.getObjects()[0].get("fill");return this.getObjects().every(function(j){return j.get("fill")===i})},complexity:function(){return this.paths.reduce(function(i,j){return i+((j&&j.complexity)?j.complexity():0)},0)},toGrayscale:function(){var j=this.paths.length;while(j--){this.paths[j].toGrayscale()}return this},getObjects:function(){return this.paths}});function d(m){for(var l=0,j=m.length;l"},getObjects:function(){return this.objects},addWithUpdate:function(i){this._restoreObjectsState();this.objects.push(i);this._calcBounds();this._updateObjectsCoords();return this},removeWithUpdate:function(i){this._restoreObjectsState();g(this.objects,i);i.setActive(false);this._calcBounds();this._updateObjectsCoords();return this},add:function(i){this.objects.push(i);return this},remove:function(i){g(this.objects,i);return this},size:function(){return this.getObjects().length},delegatedProperties:{fill:true,opacity:true,fontFamily:true,fontWeight:true,lineHeight:true,textDecoration:true,textShadow:true,backgroundColor:true},_set:function(k,l){if(k in this.delegatedProperties){var j=this.objects.length;this[k]=l;while(j--){this.objects[j].set(k,l)}}else{this[k]=l}},contains:function(i){return this.objects.indexOf(i)>-1},toObject:function(i){return h(this.callSuper("toObject",i),{objects:b(this.objects,"toObject",i)})},render:function(k,p){k.save();this.transform(k);var o=Math.max(this.scaleX,this.scaleY);for(var m=this.objects.length;m>0;m--){var l=this.objects[m-1],n=l.borderScaleFactor,j=l.hasRotatingPoint;l.borderScaleFactor=o;l.hasRotatingPoint=false;l.render(k);l.borderScaleFactor=n;l.hasRotatingPoint=j}if(!p&&this.active){this.drawBorders(k);this.hideCorners||this.drawCorners(k)}k.restore();this.setCoords()},item:function(i){return this.getObjects()[i]},complexity:function(){return this.getObjects().reduce(function(j,i){j+=(typeof i.complexity==="function")?i.complexity():0;return j},0)},_restoreObjectsState:function(){this.objects.forEach(this._restoreObjectState,this);return this},_restoreObjectState:function(k){var l=this.get("left"),m=this.get("top"),i=this.getAngle()*(Math.PI/180),j=Math.cos(i)*k.get("top")+Math.sin(i)*k.get("left"),n=-Math.sin(i)*k.get("top")+Math.cos(i)*k.get("left");k.setAngle(k.getAngle()+this.getAngle());k.set("left",l+n*this.get("scaleX"));k.set("top",m+j*this.get("scaleY"));k.set("scaleX",k.get("scaleX")*this.get("scaleX"));k.set("scaleY",k.get("scaleY")*this.get("scaleY"));k.setCoords();k.hideCorners=false;k.setActive(false);k.setCoords();return this},destroy:function(){return this._restoreObjectsState()},saveCoords:function(){this._originalLeft=this.get("left");this._originalTop=this.get("top");return this},hasMoved:function(){return this._originalLeft!==this.get("left")||this._originalTop!==this.get("top")},setObjectsCoords:function(){this.forEachObject(function(i){i.setCoords()});return this},activateAllObjects:function(){this.forEachObject(function(i){i.setActive()});return this},forEachObject:e.StaticCanvas.prototype.forEachObject,_setOpacityIfSame:function(){var k=this.getObjects(),j=k[0]?k[0].get("opacity"):1;var i=k.every(function(l){return l.get("opacity")===j});if(i){this.opacity=j}},_calcBounds:function(){var t=[],r=[],q,p,l,j,n,m,v,s=0,u=this.objects.length;for(;sj.x&&k-ij.y},toGrayscale:function(){var j=this.objects.length;while(j--){this.objects[j].toGrayscale()}return this},toSVG:function(){var l=[];for(var k=0,j=this.objects.length;k'+l.join("")+"")},get:function(l){if(l in f){if(this[l]){return this[l]}else{for(var k=0,j=this.objects.length;k'},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(d,c){this.constructor.fromObject(this.toObject(c),d)},applyFilters:function(i){if(this.filters.length===0){this.setElement(this._originalImage);i&&i();return}var c=typeof Buffer!=="undefined"&&typeof window==="undefined",g=this._originalImage,e=fabric.document.createElement("canvas"),f=c?new (require("canvas").Image)():fabric.document.createElement("img"),h=this;if(!e.getContext&&typeof G_vmlCanvasManager!=="undefined"){G_vmlCanvasManager.initElement(e)}e.width=g.width;e.height=g.height;e.getContext("2d").drawImage(g,0,0,g.width,g.height);this.filters.forEach(function(j){j&&j.applyTo(e)});f.onload=function(){h._element=f;i&&i();f.onload=e=g=null};f.width=g.width;f.height=g.height;if(c){var d=e.toDataURL("image/png").replace(/data:image\/png;base64,/,"");f.src=new Buffer(d,"base64");h._element=f;i&&i()}else{f.src=e.toDataURL("image/png")}return this},_render:function(c){c.drawImage(this.getElement(),-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var c=this.getElement();this.set("width",c.width);this.set("height",c.height)},_initElement:function(c){this.setElement(fabric.util.getById(c));fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(c){c||(c={});this.setOptions(c);this._setWidthHeight(c)},_initFilters:function(c){if(c.filters&&c.filters.length){this.filters=c.filters.map(function(d){return d&&fabric.Image.filters[d.type].fromObject(d)})}},_setWidthHeight:function(c){this.width="width" in c?c.width:(this.getElement().width||0);this.height="height" in c?c.height:(this.getElement().height||0)},complexity:function(){return 1}});fabric.Image.CSS_CANVAS="canvas-img";fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc;fabric.Image.fromObject=function(d,f){var c=fabric.document.createElement("img"),e=d.src;if(d.width){c.width=d.width}if(d.height){c.height=d.height}c.onload=function(){fabric.Image.prototype._initFilters.call(d,d);var g=new fabric.Image(c,d);f&&f(g);c=c.onload=null};c.src=e};fabric.Image.fromURL=function(d,f,e){var c=fabric.document.createElement("img");c.onload=function(){if(f){f(new fabric.Image(c,e))}c=c.onload=null};c.src=d};fabric.Image.ATTRIBUTE_NAMES="x y width height fill fill-opacity opacity stroke stroke-width transform xlink:href".split(" ");fabric.Image.fromElement=function(d,f,c){c||(c={});var e=fabric.parseAttributes(d,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(e["xlink:href"],f,b(e,c))};fabric.Image.async=true})(typeof exports!=="undefined"?exports:this);fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var a=this.get("angle");if(a>-225&&a<=-135){return -180}else{if(a>-135&&a<=-45){return -90}else{if(a>-45&&a<=45){return 0}else{if(a>45&&a<=135){return 90}else{if(a>135&&a<=225){return 180}else{if(a>225&&a<=315){return 270}else{if(a>315){return 360}}}}}}}return 0},straighten:function(){var a=this._getAngleValueForStraighten();this.setAngle(a);return this},fxStraighten:function(b){b=b||{};var c=function(){},d=b.onComplete||c,a=b.onChange||c,e=this;fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(f){e.setAngle(f);a()},onComplete:function(){e.setCoords();d()},onStart:function(){e.setActive(false)}});return this}});fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(a){a.straighten();this.renderAll();return this},fxStraightenObject:function(a){a.fxStraighten({onChange:this.renderAll.bind(this)});return this}});fabric.Image.filters={};fabric.Image.filters.Grayscale=fabric.util.createClass({type:"Grayscale",applyTo:function(d){var c=d.getContext("2d"),a=c.getImageData(0,0,d.width,d.height),h=a.data,e=a.width,l=a.height,k,b,g,f;for(g=0;gh&&m>h&&o>h&&p(a-m)0){h[j]=k;h[j+1]=c;h[j+2]=g}}d.putImageData(b,0,0)},toJSON:function(){return{type:this.type,color:this.color}}});fabric.Image.filters.Tint.fromObject=function(a){return new fabric.Image.filters.Tint(a)};fabric.Image.filters.Convolute=fabric.util.createClass({type:"Convolute",initialize:function(a){a||(a={});this.opaque=a.opaque;this.matrix=a.matrix||[0,0,0,0,1,0,0,0,0];this.tmpCtx=fabric.document.createElement("canvas").getContext("2d")},_createImageData:function(a,b){return this.tmpCtx.createImageData(a,b)},applyTo:function(k){var G=this.matrix;var f=k.getContext("2d");var z=f.getImageData(0,0,k.width,k.height);var d=Math.round(Math.sqrt(G.length));var j=Math.floor(d/2);var l=z.data;var A=z.width;var J=z.height;var q=A;var E=J;var m=this._createImageData(q,E);var K=m.data;var s=this.opaque?1:0;for(var n=0;n=0&&C=0&&D'},_render:function(f){if(typeof Cufon==="undefined"||this.useNative===true){this._renderViaNative(f)}else{this._renderViaCufon(f)}},_renderViaCufon:function(f){var h=Cufon.textOptions||(Cufon.textOptions={});h.left=this.left;h.top=this.top;h.context=f;h.color=this.fill;var g=this._initDummyElementForCufon();this.transform(f);Cufon.replaceElement(g,{engine:"canvas",separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor});this.width=h.width;this.height=h.height;this._totalLineHeight=h.totalLineHeight;this._fontAscent=h.fontAscent;this._boundaries=h.boundaries;this._shadowOffsets=h.shadowOffsets;this._shadows=h.shadows||[];g=null;this.setCoords()},_renderViaNative:function(f){this.transform(f);this._setTextStyles(f);var g=this.text.split(/\r?\n/);this.width=this._getTextWidth(f,g);this.height=this._getTextHeight(f,g);this._renderTextBackground(f,g);if(this.textAlign!=="left"&&this.textAlign!=="justify"){f.save();f.translate(this.textAlign==="center"?(this.width/2):this.width,0)}this._setTextShadow(f);this._renderTextFill(f,g);this.textShadow&&f.restore();this._renderTextStroke(f,g);if(this.textAlign!=="left"&&this.textAlign!=="justify"){f.restore()}this._renderTextDecoration(f,g);this._setBoundaries(f,g);this._totalLineHeight=0;this.setCoords()},_setBoundaries:function(h,k){this._boundaries=[];for(var j=0,g=k.length;jk){k=l}}return k},_setTextShadow:function(f){if(this.textShadow){var j=/\s+(-?\d+)(?:px)?\s+(-?\d+)(?:px)?\s+(\d+)(?:px)?\s*/;var g=this.textShadow;var i=j.exec(this.textShadow);var h=g.replace(j,"");f.save();f.shadowColor=h;f.shadowOffsetX=parseInt(i[1],10);f.shadowOffsetY=parseInt(i[2],10);f.shadowBlur=parseInt(i[3],10);this._shadows=[{blur:f.shadowBlur,color:f.shadowColor,offX:f.shadowOffsetX,offY:f.shadowOffsetY}];this._shadowOffsets=[[parseInt(f.shadowOffsetX,10),parseInt(f.shadowOffsetY,10)]]}},_drawTextLine:function(f,s,u,h,q){if(this.textAlign!=="justify"){s[f](u,h,q);return}var n=s.measureText(u).width;var m=this.width;if(m>n){var p=u.split(/\s+/);var t=s.measureText(u.replace(/\s+/g,"")).width;var l=m-t;var k=p.length-1;var r=l/k;var g=0;for(var j=0,o=p.length;j-1){f(this.fontSize)}if(this.textDecoration.indexOf("line-through")>-1){f(this.fontSize/2)}if(this.textDecoration.indexOf("overline")>-1){f(0)}},_getFontDeclaration:function(){return[this.fontStyle,this.fontWeight,this.fontSize+"px",(c.isLikelyNode?('"'+this.fontFamily+'"'):this.fontFamily)].join(" ")},_initDummyElementForCufon:function(){var g=c.document.createElement("pre"),f=c.document.createElement("div");f.appendChild(g);if(typeof G_vmlCanvasManager==="undefined"){g.innerHTML=this.text}else{g.innerText=this.text.replace(/\r?\n/gi,"\r")}g.style.fontSize=this.fontSize+"px";g.style.letterSpacing="normal";return g},render:function(f,g){f.save();this._render(f);if(!g&&this.active){this.drawBorders(f);this.hideCorners||this.drawCorners(f)}f.restore()},toObject:function(f){return e(this.callSuper("toObject",f),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative})},toSVG:function(){var i=this.text.split(/\r?\n/),j=this.useNative?this.fontSize*this.lineHeight:(-this._fontAscent-((this._fontAscent/5)*this.lineHeight)),g=-(this.width/2),f=this.useNative?this.fontSize-1:(this.height/2)-(i.length*this.fontSize)-this._totalLineHeight,h=this._getSVGTextAndBg(j,g,i),k=this._getSVGShadows(j,i);f+=(this._fontAscent?((this._fontAscent/5)*this.lineHeight):0);return['',h.textBgRects.join(""),"',k.join(""),h.textSpans.join(""),"",""].join("")},_getSVGShadows:function(h,n){var o=[],k,l,p,g,f=1;if(!this._shadows||!this._boundaries){return o}for(k=0,p=this._shadows.length;k",c.util.string.escapeXml(n[l]),"");f=1}else{f++}}}return o},_getSVGTextAndBg:function(j,h,n){var g=[],k=[],l,m,o,f=1;if(this.backgroundColor&&this._boundaries){k.push("')}for(l=0,o=n.length;l",c.util.string.escapeXml(n[l]),"");f=1}else{f++}if(!this.textBackgroundColor||!this._boundaries){continue}k.push("')}return{textSpans:g,textBgRects:k}},_getFillAttributes:function(f){var g=f?new c.Color(f):"";if(!g||!g.getSource()||g.getAlpha()===1){return'fill="'+f+'"'}return'opacity="'+g.getAlpha()+'" fill="'+g.setAlpha(1).toRgb()+'"'},setColor:function(f){this.set("fill",f);return this},setFontsize:function(f){this.set("fontSize",f);this._initDimensions();this.setCoords();return this},getText:function(){return this.text},setText:function(f){this.set("text",f);this._initDimensions();this.setCoords();return this},_set:function(f,g){if(f==="fontFamily"&&this.path){this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+g+"$3")}this.callSuper("_set",f,g)}});c.Text.ATTRIBUTE_NAMES=("x y fill fill-opacity opacity stroke stroke-width transform font-family font-style font-weight font-size text-decoration").split(" ");c.Text.fromObject=function(f){return new c.Text(f.text,d(f))};c.Text.fromElement=function(g,f){if(!g){return null}var h=c.parseAttributes(g,c.Text.ATTRIBUTE_NAMES);f=c.util.object.extend((f?c.util.object.clone(f):{}),h);var i=new c.Text(g.textContent,f);i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2});return i}})(typeof exports!=="undefined"?exports:this);(function(){if(typeof document!=="undefined"&&typeof window!=="undefined"){return}var DOMParser=new require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),Canvas=require("canvas"),Image=require("canvas").Image;function request(url,encoding,callback){var oURL=URL.parse(url),client=HTTP.createClient(oURL.port,oURL.hostname),req=client.request("GET",oURL.pathname,{host:oURL.hostname});client.addListener("error",function(err){if(err.errno===process.ECONNREFUSED){fabric.log("ECONNREFUSED: connection refused to "+client.host+":"+client.port)}else{fabric.log(err.message)}});req.end();req.on("response",function(response){var body="";if(encoding){response.setEncoding(encoding)}response.on("end",function(){callback(body)});response.on("data",function(chunk){if(response.statusCode===200){body+=chunk}})})}fabric.util.loadImage=function(url,callback){var img=new Image();if(url&&url.indexOf("data")===0){img.src=img._src=url;callback(img)}else{if(url){request(url,"binary",function(body){img.src=new Buffer(body,"binary");img._src=url;callback(img)})}}};fabric.loadSVGFromURL=function(url,callback){url=url.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim();request(url,"",function(body){fabric.loadSVGFromString(body,callback)})};fabric.loadSVGFromString=function(string,callback){var doc=new DOMParser().parseFromString(string);fabric.parseSVGDocument(doc.documentElement,function(results,options){callback(results,options)})};fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body);callback&&callback()})};fabric.Image.fromObject=function(object,callback){fabric.util.loadImage(object.src,function(img){var oImg=new fabric.Image(img);oImg._initConfig(object);oImg._initFilters(object);callback(oImg)})};fabric.createCanvasForNode=function(width,height){var canvasEl=fabric.document.createElement("canvas"),nodeCanvas=new Canvas(width||600,height||600);canvasEl.style={};canvasEl.width=nodeCanvas.width;canvasEl.height=nodeCanvas.height;var FabricCanvas=fabric.Canvas||fabric.StaticCanvas;var fabricCanvas=new FabricCanvas(canvasEl);fabricCanvas.contextContainer=nodeCanvas.getContext("2d");fabricCanvas.nodeCanvas=nodeCanvas;return fabricCanvas};fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(width){origSetWidth.call(this);this.nodeCanvas.width=width;return this};if(fabric.Canvas){fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth}var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(height){origSetHeight.call(this);this.nodeCanvas.height=height;return this};if(fabric.Canvas){fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight}})(); \ No newline at end of file +/* build: `node build.js modules=ALL` *//*! Fabric.js Copyright 2008-2012, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"0.9.33"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined";var Cufon=function(){function r(e){var t=this.face=e.face;this.glyphs=e.glyphs,this.w=e.w,this.baseSize=parseInt(t["units-per-em"],10),this.family=t["font-family"].toLowerCase(),this.weight=t["font-weight"],this.style=t["font-style"]||"normal",this.viewBox=function(){var e=t.bbox.split(/\s+/),n={minX:parseInt(e[0],10),minY:parseInt(e[1],10),maxX:parseInt(e[2],10),maxY:parseInt(e[3],10)};return n.width=n.maxX-n.minX,n.height=n.maxY-n.minY,n.toString=function(){return[this.minX,this.minY,this.width,this.height].join(" ")},n}(),this.ascent=-parseInt(t.ascent,10),this.descent=-parseInt(t.descent,10),this.height=-this.ascent+this.descent}function i(){var e={},t={oblique:"italic",italic:"oblique"};this.add=function(t){(e[t.style]||(e[t.style]={}))[t.weight]=t},this.get=function(n,r){var i=e[n]||e[t[n]]||e.normal||e.italic||e.oblique;if(!i)return null;r={normal:400,bold:700}[r]||parseInt(r,10);if(i[r])return i[r];var s={1:1,99:0}[r%100],o=[],u,a;s===undefined&&(s=r>400),r==500&&(r=400);for(var f in i){f=parseInt(f,10);if(!u||fa)a=f;o.push(f)}return ra&&(r=a),o.sort(function(e,t){return(s?e>r&&t>r?et:et:e=i.length+e?r():setTimeout(arguments.callee,10)}),function(t){e?t():n.push(t)}}(),supports:function(e,t){var n=fabric.document.createElement("span").style;return n[e]===undefined?!1:(n[e]=t,n[e]===t)},textAlign:function(e,t,n,r){return t.get("textAlign")=="right"?n>0&&(e=" "+e):nk&&(k=N),A.push(N),N=0;continue}var O=t.glyphs[T[b]]||t.missingGlyph;if(!O)continue;N+=C=Number(O.w||t.w)+h}A.push(N),N=Math.max(k,N);var M=[];for(var b=A.length;b--;)M[b]=N-A[b];if(C===null)return null;d+=l.width-C,m+=l.minX;var _,D;if(f)_=u,D=u.firstChild;else{_=fabric.document.createElement("span"),_.className="cufon cufon-canvas",_.alt=n,D=fabric.document.createElement("canvas"),_.appendChild(D);if(i.printable){var P=fabric.document.createElement("span");P.className="cufon-alt",P.appendChild(fabric.document.createTextNode(n)),_.appendChild(P)}}var H=_.style,B=D.style||{},j=c.convert(l.height-p+v),F=Math.ceil(j),I=F/j;D.width=Math.ceil(c.convert(N+d-m)*I),D.height=F,p+=l.minY,B.top=Math.round(c.convert(p-t.ascent))+"px",B.left=Math.round(c.convert(m))+"px";var q=Math.ceil(c.convert(N*I)),R=q+"px",U=c.convert(t.height),z=(i.lineHeight-1)*c.convert(-t.ascent/5)*(L-1);Cufon.textOptions.width=q,Cufon.textOptions.height=U*L+z,Cufon.textOptions.lines=L,Cufon.textOptions.totalLineHeight=z,e?(H.width=R,H.height=U+"px"):(H.paddingLeft=R,H.paddingBottom=U-1+"px");var W=Cufon.textOptions.context||D.getContext("2d"),X=F/l.height;Cufon.textOptions.fontAscent=t.ascent*X,Cufon.textOptions.boundaries=null;for(var V=Cufon.textOptions.shadowOffsets,b=y.length;b--;)V[b]=[y[b][0]*X,y[b][1]*X];W.save(),W.scale(X,X),W.translate(-m-1/X*D.width/2+(Cufon.fonts[t.family].offsetLeft||0),-p-Cufon.textOptions.height/X/2+(Cufon.fonts[t.family].offsetTop||0)),W.lineWidth=t.face["underline-thickness"],W.save();var J=Cufon.getTextDecoration(i),K=i.fontStyle==="italic";W.save(),Q();if(g)for(var b=0,w=g.length;b.cufon-vml-canvas{text-indent:0}@media screen{cvml\\:shape,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute}.cufon-vml-canvas{position:absolute;text-align:left}.cufon-vml{display:inline-block;position:relative;vertical-align:middle}.cufon-vml .cufon-alt{position:absolute;left:-10000in;font-size:1px}a .cufon-vml{cursor:pointer}}@media print{.cufon-vml *{display:none}.cufon-vml .cufon-alt{display:inline}}'),function(e,t,i,s,o,u,a){var f=t===null;f&&(t=o.alt);var l=e.viewBox,c=i.computedFontSize||(i.computedFontSize=new Cufon.CSS.Size(n(u,i.get("fontSize"))+"px",e.baseSize)),h=i.computedLSpacing;h==undefined&&(h=i.get("letterSpacing"),i.computedLSpacing=h=h=="normal"?0:~~c.convertFrom(r(u,h)));var p,d;if(f)p=o,d=o.firstChild;else{p=fabric.document.createElement("span"),p.className="cufon cufon-vml",p.alt=t,d=fabric.document.createElement("span"),d.className="cufon-vml-canvas",p.appendChild(d);if(s.printable){var v=fabric.document.createElement("span");v.className="cufon-alt",v.appendChild(fabric.document.createTextNode(t)),p.appendChild(v)}a||p.appendChild(fabric.document.createElement("cvml:shape"))}var m=p.style,g=d.style,y=c.convert(l.height),b=Math.ceil(y),w=b/y,E=l.minX,S=l.minY;g.height=b,g.top=Math.round(c.convert(S-e.ascent)),g.left=Math.round(c.convert(E)),m.height=c.convert(e.height)+"px";var x=Cufon.getTextDecoration(s),T=i.get("color"),N=Cufon.CSS.textTransform(t,i).split(""),C=0,k=0,L=null,A,O,M=s.textShadow;for(var _=0,D=0,P=N.length;_r?n:i-t;s(u(l,a,c,n));if(i>r||o()){e.onComplete&&e.onComplete();return}f(h)}()}function l(e,t,n){if(e){var r=new Image;r.onload=function(){t&&t.call(n,r),r=r.onload=null},r.src=e}else t&&t.call(n,e)}function c(e,t){function n(e){return fabric[fabric.util.string.camelize(fabric.util.string.capitalize(e))]}function r(){++s===o&&t&&t(i)}var i=[],s=0,o=e.length;e.forEach(function(e,t){if(!e.type)return;var s=n(e.type);s.async?s.fromObject(e,function(e){i[t]=e,r()}):(i[t]=s.fromObject(e),r())})}function h(e,t,n){var r=e.length>1?new fabric.PathGroup(e,t):e[0];return typeof n!="undefined"&&r.setSourcePath(n),r}function p(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;r=r&&(r=e[n][t]);else while(n--)e[n]>=r&&(r=e[n]);return r}function r(e,t){if(!e||e.length===0)return undefined;var n=e.length-1,r=t?e[n][t]:e[n];if(t)while(n--)e[n][t]>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==1/0&&r!==-1/0&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e){var t=0,n=0;do t+=e.offsetTop||0,n+=e.offsetLeft||0,e=e.offsetParent;while(e);return{left:n,top:t}}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var f;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?f=function(e){return fabric.document.defaultView.getComputedStyle(e,null).position}:f=function(e){var t=e.style.position;return!t&&e.currentStyle&&(t=e.currentStyle.position),t},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.type="text/javascript",r.setAttribute("runat","server"),r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return; +i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getElementOffset=a,fabric.util.getElementPosition=f}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),function(){function e(e,t,n,r){return n*(e/=r)*e+t}function t(e,t,n,r){return-n*(e/=r)*(e-2)+t}function n(e,t,n,r){return e/=r/2,e<1?n/2*e*e+t:-n/2*(--e*(e-2)-1)+t}function r(e,t,n,r){return n*(e/=r)*e*e+t}function i(e,t,n,r){return n*((e=e/r-1)*e*e+1)+t}function s(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e+t:n/2*((e-=2)*e*e+2)+t}function o(e,t,n,r){return n*(e/=r)*e*e*e+t}function u(e,t,n,r){return-n*((e=e/r-1)*e*e*e-1)+t}function a(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e+t:-n/2*((e-=2)*e*e*e-2)+t}function f(e,t,n,r){return n*(e/=r)*e*e*e*e+t}function l(e,t,n,r){return n*((e=e/r-1)*e*e*e*e+1)+t}function c(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e*e+t:n/2*((e-=2)*e*e*e*e+2)+t}function h(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t}function p(e,t,n,r){return n*Math.sin(e/r*(Math.PI/2))+t}function d(e,t,n,r){return-n/2*(Math.cos(Math.PI*e/r)-1)+t}function v(e,t,n,r){return e===0?t:n*Math.pow(2,10*(e/r-1))+t}function m(e,t,n,r){return e===r?t+n:n*(-Math.pow(2,-10*e/r)+1)+t}function g(e,t,n,r){return e===0?t:e===r?t+n:(e/=r/2,e<1?n/2*Math.pow(2,10*(e-1))+t:n/2*(-Math.pow(2,-10*--e)+2)+t)}function y(e,t,n,r){return-n*(Math.sqrt(1-(e/=r)*e)-1)+t}function b(e,t,n,r){return n*Math.sqrt(1-(e=e/r-1)*e)+t}function w(e,t,n,r){return e/=r/2,e<1?-n/2*(Math.sqrt(1-e*e)-1)+t:n/2*(Math.sqrt(1-(e-=2)*e)+1)+t}function E(e,t,n,r){var i=1.70158,s=0,o=n;return e===0?t:(e/=r,e===1?t+n:(s||(s=r*.3),o-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){d.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),d.has(e,function(r){r?d.get(e,function(e){var t=m(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})}function m(e){var n=e.objects,i=e.options;return n=n.map(function(e){return t[r(e.type)].fromObject(e)}),{objects:n,options:i}}function g(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)}function y(e){var t="";for(var n=0,r=e.length;n",'",""].join("")),t}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s={cx:"left",x:"left",cy:"top",y:"top",r:"radius","fill-opacity":"opacity","fill-rule":"fillRule","stroke-width":"strokeWidth",transform:"transformMatrix","text-decoration":"textDecoration","font-size":"fontSize","font-weight":"fontWeight","font-style":"fontStyle","font-family":"fontFamily"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function t(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function n(e,t){e[2]=t[0]}function r(e,t){e[1]=t[0]}function i(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var s=[1,0,0,1,0,0],o="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",u="(?:\\s+,?\\s*|,\\s*)",a="(?:(skewX)\\s*\\(\\s*("+o+")\\s*\\))",f="(?:(skewY)\\s*\\(\\s*("+o+")\\s*\\))",l="(?:(rotate)\\s*\\(\\s*("+o+")(?:"+u+"("+o+")"+u+"("+o+"))?\\s*\\))",c="(?:(scale)\\s*\\(\\s*("+o+")(?:"+u+"("+o+"))?\\s*\\))",h="(?:(translate)\\s*\\(\\s*("+o+")(?:"+u+"("+o+"))?\\s*\\))",p="(?:(matrix)\\s*\\(\\s*("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+"\\s*\\))",d="(?:"+p+"|"+h+"|"+c+"|"+l+"|"+a+"|"+f+")",v="(?:"+d+"(?:"+u+d+")*"+")",m="^\\s*(?:"+v+"?)\\s*$",g=new RegExp(m),y=new RegExp(d);return function(o){var u=s.concat();return!o||o&&!g.test(o)?u:(o.replace(y,function(s){var o=(new RegExp(d)).exec(s).filter(function(e){return e!==""&&e!=null}),a=o[1],f=o.slice(2).map(parseFloat);switch(a){case"translate":i(u,f);break;case"rotate":e(u,f);break;case"scale":t(u,f);break;case"skewX":n(u,f);break;case"skewY":r(u,f);break;case"matrix":u=f}}),u)}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,p=f.length;c0&&this.init(e,t)}var t=e.fabric||(e.fabric={});if(t.Point){t.warn("fabric.Point is already defined");return}t.Point=n,n.prototype={constructor:n,init:function(e,t){this.x=e,this.y=t},add:function(e){return new n(this.x+e.x,this.y+e.y)},addEquals:function(e){return this.x+=e.x,this.y+=e.y,this},scalarAdd:function(e){return new n(this.x+e,this.y+e)},scalarAddEquals:function(e){return this.x+=e,this.y+=e,this},subtract:function(e){return new n(this.x-e.x,this.y-e.y)},subtractEquals:function(e){return this.x-=e.x,this.y-=e.y,this},scalarSubtract:function(e){return new n(this.x-e,this.y-e)},scalarSubtractEquals:function(e){return this.x-=e,this.y-=e,this},multiply:function(e){return new n(this.x*e,this.y*e)},multiplyEquals:function(e){return this.x*=e,this.y*=e,this},divide:function(e){return new n(this.x/e,this.y/e)},divideEquals:function(e){return this.x/=e,this.y/=e,this},eq:function(e){return this.x===e.x&&this.y===e.y},lt:function(e){return this.xe.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){arguments.length>0&&this.init(e)}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={init:function(e){this.status=e,this.points=[]},appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n("No Intersection")}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n("No Intersection"),s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n("No Intersection"),i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n("No Intersection");return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t=n.sourceFromHex(e);t||(t=n.sourceFromRgb(e)),t&&this.setSource(t)},getSource:function(){return this._source},setSource:function(e){this._source=e},toRgb:function(){var e=this.getSource();return"rgb("+e[0]+","+e[1]+","+e[2]+")"},toRgba:function(){var e=this.getSource();return"rgba("+e[0]+","+e[1]+","+e[2]+","+e[3]+")"},toHex:function(){var e=this.getSource(),t=e[0].toString(16);t=t.length===1?"0"+t:t;var n=e[1].toString(16);n=n.length===1?"0"+n:n;var r=e[2].toString(16);return r=r.length===1?"0"+r:r,t.toUpperCase()+n.toUpperCase()+r.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(e){var t=this.getSource();return t[3]=e,this.setSource(t),this},toGrayscale:function(){var e=this.getSource(),t=parseInt((e[0]*.3+e[1]*.59+e[2]*.11).toFixed(0),10),n=e[3];return this.setSource([t,t,t,n]),this},toBlackWhite:function(e){var t=this.getSource(),n=(t[0]*.3+t[1]*.59+t[2]*.11).toFixed(0),r=t[3];return e=e||127,n=Number(n)','',"',"Created with Fabric.js ",fabric.version,"",fabric.createSVGFontFacesMarkup(this.getObjects())];this.backgroundImage&&e.push(''),this.overlayImage&&e.push('');for(var t=0,n=this.getObjects(),r=n.length;t"),e.join("")},isEmpty:function(){return this._objects.length===0},remove:function(e){return n(this._objects,e),this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this.discardActiveObject(),this.fire("selection:cleared")),this.renderAll(),e},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll()},sendBackwards:function(e){var t=this._objects.indexOf(e),r=t;if(t!==0){for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}n(this._objects,e),this._objects.splice(r,0,e)}return this.renderAll()},bringForward:function(e){var t=this.getObjects(),r=t.indexOf(e),i=r;if(r!==t.length-1){for(var s=r+1,o=this._objects.length;s"},e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;a0&&(t>this.targetFindTolerance?t-=this.targetFindTolerance:t=0,n>this.targetFindTolerance?n-=this.targetFindTolerance:n=0);var o=!0,u=r.getImageData(t,n,this.targetFindTolerance*2||1,this.targetFindTolerance*2||1);for(var a=3;a0?0:-n),t.ey-(r>0?0:-r),i,s),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var o=t.ex+p-(n>0?0:i),u=t.ey+p-(r>0?0:s);e.beginPath(),this.drawDashedLine(e,o,u,o+i,u,this.selectionDashArray),this.drawDashedLine(e,o,u+s-1,o+i,u+s-1,this.selectionDashArray),this.drawDashedLine(e,o,u,o,u+s,this.selectionDashArray),this.drawDashedLine(e,o+i-1,u,o+i-1,u+s,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+p-(n>0?0:i),t.ey+p-(r>0?0:s),i,s)},drawDashedLine:function(e,t,n,r,i,s){var o=r-t,u=i-n,a=Math.sqrt(o*o+u*u),f=Math.atan2(u,o),l=s.length,c=0,h=!0;e.save(),e.translate(t,n),e.moveTo(0,0),e.rotate(f),t=0;while(a>t)t+=s[c++%l],t>a&&(t=a),e[h?"lineTo":"moveTo"](t,0),h=!h;e.restore()},_findSelectedObjects:function(e){var t=[],n=this._groupSelector.ex,r=this._groupSelector.ey,i=n+this._groupSelector.left,s=r+this._groupSelector.top,o,u=new fabric.Point(c(n,i),c(r,s)),a=new fabric.Point(h(n,i),h(r,s));for(var f=0,l=this._objects.length;f1&&(t=new fabric.Group(t),this.setActiveGroup(t),t.saveCoords(),this.fire("selection:created",{target:t})),this.renderAll()},findTarget:function(e,t){var n,r=this.getPointer(e);if(this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay))return n=this.lastRenderedObjectWithControlsAboveOverlay,n;var i=this.getActiveGroup();if(i&&!t&&this.containsPoint(e,i))return n=i,n;var s=[];for(var o=this._objects.length;o--;)if(this._objects[o]&&this.containsPoint(e,this._objects[o])){if(!this.perPixelTargetFind&&!this._objects[o].perPixelTargetFind){n=this._objects[o],this.relatedTarget=n;break}s[s.length]=this._objects[o]}for(var u=0,a=s.length;u"},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var r=(e==="scaleX"||e==="scaleY")&&n1?this.strokeWidth:0,t=this.padding,n=o(this.angle);this.currentWidth=(this.width+e)*this.scaleX+t*2,this.currentHeight=(this.height+e)*this.scaleY+t*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var r=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),i=Math.atan(this.currentHeight/this.currentWidth),s=Math.cos(i+n)*r,u=Math.sin(i+n)*r,a=Math.sin(n),f=Math.cos(n),l={x:this.left-s,y:this.top-u},c={x:l.x+this.currentWidth*f,y:l.y+this.currentWidth*a},h={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},p={x:l.x-this.currentHeight*a,y:l.y+this.currentHeight*f},d={x:l.x-this.currentHeight/2*a,y:l.y+this.currentHeight/2*f},v={x:l.x+this.currentWidth/2*f,y:l.y+this.currentWidth/2*a},m={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},g={x:p.x+this.currentWidth/2*f,y:p.y+this.currentWidth/2*a},y={x:l.x+this.currentWidth/2*f,y:l.y+this.currentWidth/2*a};return this.oCoords={tl:l,tr:c,br:h,bl:p,ml:d,mt:v,mr:m,mb:g,mtr:y},this._setCornerCoords(),this},getBoundingRectWidth:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],n=t.util.array.min(e),r=t.util.array.max(e);return Math.abs(n-r)},getBoundingRectHeight:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],n=t.util.array.min(e),r=t.util.array.max(e);return Math.abs(n-r)},drawBorders:function(e){if(!this.hasBorders)return;var n=t.Object.MIN_SCALE_LIMIT,r=this.padding,i=r*2,s=this.strokeWidth>1?this.strokeWidth:0;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var o=1/(this.scaleXc&&(l=f-c),u?n+=h*u-(l*u||0):r+=h*a-(l*a||0),e[1&t?"moveTo":"lineTo"](n,r),t>=o&&(t=0)}}1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray);var t=0,n=-this.width/2,r=-this.height/2,i=this,s=this.padding,o=this.strokeDashArray.length;e.save(),e.beginPath(),u(1,0),u(0,1),u(-1,0),u(0,-1),e.stroke(),e.closePath(),e.restore()},drawCorners:function(e){if(!this.hasControls)return;var t=this.cornersize,n=t/2,r=this.strokeWidth/2,i=-(this.width/2),s=-(this.height/2),o,u,a=t/this.scaleX,f=t/this.scaleY,l=this.padding/this.scaleX,c=this.padding/this.scaleY,h=n/this.scaleY,p=n/this.scaleX,d=(n-t)/this.scaleX,v=(n-t)/this.scaleY,m=this.height,g=this.width,y=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,o=i-p-r-l,u=s-h-r-c,e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g-p+r+l,u=s-h-r-c,e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m+v+r+c,e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m+v+r+c,e.clearRect(o,u,a,f),e[y](o,u,a,f),this.get("lockUniScaling")||(o=i+g/2-p,u=s-h-r-c,e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g/2-p,u=s+m+v+r+c,e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m/2-h,e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m/2-h,e.clearRect(o,u,a,f),e[y](o,u,a,f)),this.hasRotatingPoint&&(o=i+g/2-p,u=this.flipY?s+m+this.rotatingPointOffset/this.scaleY-f/2+r+c:s-this.rotatingPointOffset/this.scaleY-f/2-r-c,e.clearRect(o,u,a,f),e[y](o,u,a,f)),e.restore(),this},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){if(t.Image){var n=new Image;n.onload=function(){e&&e(new t.Image(n),r),n=n.onload=null};var r={angle:this.get("angle"),flipX:this.get("flipX"),flipY:this.get("flipY")};this.set("angle",0).set("flipX",!1).set("flipY",!1),this.toDataURL(function(e){n.src=e})}return this},toDataURL:function(e){function i(t){t.left=n.width/2,t.top=n.height/2,t.setActive(!1),r.add(t);var i=r.toDataURL("png");r.dispose(),r=t=null,e&&e(i)}var n=t.document.createElement("canvas");!n.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(n),n.width=this.getBoundingRectWidth(),n.height=this.getBoundingRectHeight(),t.util.wrapElement(n,"div");var r=new t.Canvas(n);r.backgroundColor="transparent",r.renderAll(),this.constructor.async?this.clone(i):i(this.clone())},hasStateChanged:function(){return this.stateProperties.some(function(e){return this[e]!==this.originalState[e]},this)},saveState:function(){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){this.originalState={},this.saveState()},intersectsWithRect:function(e,n){var r=this.oCoords,i=new t.Point(r.tl.x,r.tl.y),s=new t.Point(r.tr.x,r.tr.y),o=new t.Point(r.bl.x,r.bl.y),u=new t.Point(r.br.x,r.br.y),a=t.Intersection.intersectPolygonRectangle([i,s,u,o],e,n);return a.status==="Intersection"},intersectsWithObject:function(e){function n(e){return{tl:new t.Point(e.tl.x,e.tl.y),tr:new t.Point(e.tr.x,e.tr.y),bl:new t.Point(e.bl.x,e.bl.y),br:new t.Point(e.br.x,e.br.y)}}var r=n(this.oCoords),i=n(e.oCoords),s=t.Intersection.intersectPolygonPolygon([r.tl,r.tr,r.br,r.bl],[i.tl,i.tr,i.br,i.bl]);return s.status==="Intersection"},isContainedWithinObject:function(e){return this.isContainedWithinRect(e.oCoords.tl,e.oCoords.br)},isContainedWithinRect:function(e,n){var r=this.oCoords,i=new t.Point(r.tl.x,r.tl.y),s=new t.Point(r.tr.x,r.tr.y),o=new t.Point(r.bl.x,r.bl.y);return i.x>e.x&&s.xe.y&&o.y=t&&l.d.y>=t)continue;l.o.x===l.d.x&&l.o.x>=e?(u=l.o.x,a=t):(r=0,i=(l.d.y-l.o.y)/(l.d.x-l.o.x),s=t-r*e,o=l.o.y-i*l.o.x,u=-(s-o)/(r-i),a=s+r*u),u>=e&&(f+=1);if(f===2)break}return f},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_setCornerCoords:function(){var e=this.oCoords,t=o(this.angle),n=o(45-this.angle),r=Math.sqrt(2*Math.pow(this.cornersize,2))/2,i=r*Math.cos(n),s=r*Math.sin(n),u=Math.sin(t),a=Math.cos(t);e.tl.corner={tl:{x:e.tl.x-s,y:e.tl.y-i},tr:{x:e.tl.x+i,y:e.tl.y-s},bl:{x:e.tl.x-i,y:e.tl.y+s},br:{x:e.tl.x+s,y:e.tl.y+i}},e.tr.corner={tl:{x:e.tr.x-s,y:e.tr.y-i},tr:{x:e.tr.x+i,y:e.tr.y-s},br:{x:e.tr.x+s,y:e.tr.y+i},bl:{x:e.tr.x-i,y:e.tr.y+s}},e.bl.corner={tl:{x:e.bl.x-s,y:e.bl.y-i},bl:{x:e.bl.x-i,y:e.bl.y+s},br:{x:e.bl.x+s,y:e.bl.y+i},tr:{x:e.bl.x+i,y:e.bl.y-s}},e.br.corner={tr:{x:e.br.x+i,y:e.br.y-s},bl:{x:e.br.x-i,y:e.br.y+s},br:{x:e.br.x+s,y:e.br.y+i},tl:{x:e.br.x-s,y:e.br.y-i}},e.ml.corner={tl:{x:e.ml.x-s,y:e.ml.y-i},tr:{x:e.ml.x+i,y:e.ml.y-s},bl:{x:e.ml.x-i,y:e.ml.y+s},br:{x:e.ml.x+s,y:e.ml.y+i}},e.mt.corner={tl:{x:e.mt.x-s,y:e.mt.y-i},tr:{x:e.mt.x+i,y:e.mt.y-s},bl:{x:e.mt.x-i,y:e.mt.y+s},br:{x:e.mt.x+s,y:e.mt.y+i}},e.mr.corner={tl:{x:e.mr.x-s,y:e.mr.y-i},tr:{x:e.mr.x+i,y:e.mr.y-s},bl:{x:e.mr.x-i,y:e.mr.y+s},br:{x:e.mr.x+s,y:e.mr.y+i}},e.mb.corner={tl:{x:e.mb.x-s,y:e.mb.y-i},tr:{x:e.mb.x+i,y:e.mb.y-s},bl:{x:e.mb.x-i,y:e.mb.y+s},br:{x:e.mb.x+s,y:e.mb.y+i}},e.mtr.corner={tl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y-i-a*this.rotatingPointOffset},tr:{x:e.mtr.x+i+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},bl:{x:e.mtr.x-i+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset},br:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y+i-a*this.rotatingPointOffset}}},toGrayscale:function(){var e=this.get("fill");return e&&this.set("overlayFill",(new t.Color(e)).toGrayscale().toRgb()),this},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradientFill:function(e){this.set("fill",t.Gradient.forObject(this,e))},animate:function(){if(arguments[0]&&typeof arguments[0]=="object")for(var e in arguments[0])this._animate(e, +arguments[0][e],arguments[1]);else this._animate.apply(this,arguments);return this},_animate:function(e,n,r){var i=this;n=n.toString(),r||(r={}),"from"in r||(r.from=this.get(e)),~n.indexOf("=")?n=this.get(e)+parseFloat(n.replace("=","")):n=parseFloat(n),t.util.animate({startValue:r.from,endValue:n,byValue:r.by,easing:r.easing,duration:r.duration,onChange:function(t){i.set(e,t),r.onChange&&r.onChange()},onComplete:function(){i.setCoords(),r.onComplete&&r.onComplete()}})},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.centerH().centerV()},remove:function(){return this.canvas.remove(this)},sendToBack:function(){return this.canvas.sendToBack(this),this},bringToFront:function(){return this.canvas.bringToFront(this),this},sendBackwards:function(){return this.canvas.sendBackwards(this),this},bringForward:function(){return this.canvas.bringForward(this),this}});var u=t.Object.prototype;for(var a=u.stateProperties.length;a--;){var f=u.stateProperties[a],l=f.charAt(0).toUpperCase()+f.slice(1),c="set"+l,h="get"+l;u[h]||(u[h]=function(e){return new Function('return this.get("'+e+'")')}(f)),u[c]||(u[c]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(f))}t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),n(t.Object,{NUM_FRACTION_DIGITS:2,MIN_SCALE_LIMIT:.1})}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r={x1:1,x2:1,y1:1,y2:1};if(t.Line){t.warn("fabric.Line is already defined");return}t.Line=t.util.createClass(t.Object,{type:"line",initialize:function(e,t){t=t||{},e||(e=[0,0,0,0]),this.callSuper("initialize",t),this.set("x1",e[0]),this.set("y1",e[1]),this.set("x2",e[2]),this.set("y2",e[3]),this._setWidthHeight(t)},_setWidthHeight:function(e){e||(e={}),this.set("width",this.x2-this.x1||1),this.set("height",this.y2-this.y1||1),this.set("left","left"in e?e.left:this.x1+this.width/2),this.set("top","top"in e?e.top:this.y1+this.height/2)},_set:function(e,t){return this[e]=t,e in r&&this._setWidthHeight(),this},_render:function(e){e.beginPath(),this.group&&e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top),e.moveTo(this.width===1?0:-this.width/2,this.height===1?0:-this.height/2),e.lineTo(this.width===1?0:this.width/2,this.height===1?0:this.height/2),e.lineWidth=this.strokeWidth;var t=e.strokeStyle;e.strokeStyle=e.fillStyle,e.stroke(),e.strokeStyle=t},complexity:function(){return 1},toObject:function(e){return n(this.callSuper("toObject",e),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})},toSVG:function(){return[""].join("")}}),t.Line.ATTRIBUTE_NAMES="x1 y1 x2 y2 stroke stroke-width transform".split(" "),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e);var t=this.get("radius")*2;this.set("width",t).set("height",t)},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(){return'"},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this.fill&&e.fill(),this.stroke&&e.stroke()},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES="cx cy r fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");return"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0),new t.Circle(r(s,n))},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this.fill&&e.fill(),this.stroke&&e.stroke()},complexity:function(){return 1},toSVG:function(){var e=this.width/2,t=this.height/2,n=[-e+" "+t,"0 "+ -t,e+" "+t].join(",");return'"}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(){return[""].join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this.stroke&&e.stroke(),this.fill&&e.fill(),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES="cx cy rx ry fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function r(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}t.Rect=t.util.createClass(t.Object,{type:"rect",rx:0,ry:0,initialize:function(e){e=e||{},this._initStateProperties(),this.callSuper("initialize",e),this._initRxRy(),this.x=0,this.y=0},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height;e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&this.group&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(r+t,i),e.lineTo(r+s-t,i),e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this.fill&&e.fill(),this.strokeDashArray?this._renderDashedStroke(e):this.stroke&&e.stroke()},_normalizeLeftTopProperties:function(e){return e.left&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),e.top&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},complexity:function(){return 1},toObject:function(e){return n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0})},toSVG:function(){return'"}}),t.Rect.ATTRIBUTE_NAMES="x y width height rx ry fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Rect.fromElement=function(e,i){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=r(s);var o=new t.Rect(n(i?t.util.object.clone(i):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions()},_calcDimensions:function(){return t.Polygon.prototype._calcDimensions.call(this)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(){var e=[];for(var t=0,r=this.points.length;t"].join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"].join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n1&&(g=Math.sqrt(g),n*=g,i*=g);var y=d/n,b=p/n,w=-p/i,E=d/i,S=y*l+b*c,x=w*l+E*c,T=y*e+b*t,N=w*e+E*t,C=(T-S)*(T-S)+(N-x)*(N-x),k=1/C-.25;k<0&&(k=0);var L=Math.sqrt(k);a===u&&(L=-L);var A=.5*(S+T)-L*(N-x),O=.5*(x+N)+L*(T-S),M=Math.atan2(x-O,S-A),_=Math.atan2(N-O,T-A),D=_-M;D<0&&a===1?D+=2*Math.PI:D>0&&a===0&&(D-=2*Math.PI);var P=Math.ceil(Math.abs(D/(Math.PI*.5+.001))),H=[];for(var B=0;B"},toObject:function(e){var t=h(this.callSuper("toObject",e),{path:this.path});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(){var e=[];for(var t=0,n=this.path.length;t',"',""].join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n,r,i;for(var s=0,o,u=this.path.length;sc)for(var h=1,p=o.length;h"];for(var n=0,r=e.length;n"),t.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},toGrayscale:function(){var e=this.paths.length;while(e--)this.paths[e].toGrayscale();return this},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e){var n=u(e.paths);return new t.PathGroup(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke,o=t.util.removeFromArray;if(t.Group)return;var u={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,{type:"group",initialize:function(e,t){t=t||{},this.objects=e||[],this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){var e=this.left,t=this.top;this.forEachObject(function(n){var r=n.get("left"),i=n.get("top");n.set("originalLeft",r),n.set("originalTop",i),n.set("left",r-e),n.set("top",i-t),n.setCoords(),n.hideCorners=!0},this)},toString:function(){return"#"},getObjects:function(){return this.objects},addWithUpdate:function(e){return this._restoreObjectsState(),this.objects.push(e),this._calcBounds(),this._updateObjectsCoords(),this},removeWithUpdate:function(e){return this._restoreObjectsState(),o(this.objects,e),e.setActive(!1),this._calcBounds(),this._updateObjectsCoords(),this},add:function(e){return this.objects.push(e),this},remove:function(e){return o(this.objects,e),this},size:function(){return this.getObjects().length},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,lineHeight:!0,textDecoration:!0,textShadow:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this.objects.length;this[e]=t;while(n--)this.objects[n].set(e,t)}else this[e]=t},contains:function(e){return this.objects.indexOf(e)>-1},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this.objects,"toObject",e)})},render:function(e,t){e.save(),this.transform(e);var n=Math.max(this.scaleX,this.scaleY);for(var r=this.objects.length;r>0;r--){var i=this.objects[r-1],s=i.borderScaleFactor,o=i.hasRotatingPoint;i.borderScaleFactor=n,i.hasRotatingPoint=!1,i.render(e),i.borderScaleFactor=s,i.hasRotatingPoint=o}!t&&this.active&&(this.drawBorders(e),this.hideCorners||this.drawCorners(e)),e.restore(),this.setCoords()},item:function(e){return this.getObjects()[e]},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=typeof t.complexity=="function"?t.complexity():0,e},0)},_restoreObjectsState:function(){return this.objects.forEach(this._restoreObjectState,this),this},_restoreObjectState:function(e){var t=this.get("left"),n=this.get("top"),r=this.getAngle()*(Math.PI/180),i=Math.cos(r)*e.get("top")+Math.sin(r)*e.get("left"),s=-Math.sin(r)*e.get("top")+Math.cos(r)*e.get("left");return e.setAngle(e.getAngle()+this.getAngle()),e.set("left",t+s*this.get("scaleX")),e.set("top",n+i*this.get("scaleY")),e.set("scaleX",e.get("scaleX")*this.get("scaleX")),e.set("scaleY",e.get("scaleY")*this.get("scaleY")),e.setCoords(),e.hideCorners=!1,e.setActive(!1),e.setCoords(),this},destroy:function(){return this._restoreObjectsState()},saveCoords:function(){return this._originalLeft=this.get("left"),this._originalTop=this.get("top"),this},hasMoved:function(){return this._originalLeft!==this.get("left")||this._originalTop!==this.get("top")},setObjectsCoords:function(){return this.forEachObject(function(e){e.setCoords()}),this},activateAllObjects:function(){return this.forEachObject(function(e){e.setActive()}),this},forEachObject:t.StaticCanvas.prototype.forEachObject,_setOpacityIfSame:function(){var e=this.getObjects(),t=e[0]?e[0].get("opacity"):1,n=e.every(function(e){return e.get("opacity")===t});n&&(this.opacity=t)},_calcBounds:function(){var e=[],t=[],n,s,o,u,a,f,l,c=0,h=this.objects.length;for(;ce.x&&i-ne.y},toGrayscale:function(){var e=this.objects.length;while(e--)this.objects[e].toGrayscale();return this},toSVG:function(){var e=[];for(var t=0,n=this.objects.length;t'+e.join("")+""},get:function(e){if(e in u){if(this[e])return this[e];for(var t=0,n=this.objects.length;t'+'"+""},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this.setElement(this._originalImage),e&&e();return}var t=typeof Buffer!="undefined"&&typeof window=="undefined",n=this._originalImage,r=fabric.document.createElement("canvas"),i=t?new(require("canvas").Image):fabric.document.createElement("img"),s=this;!r.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(r),r.width=n.width,r.height=n.height,r.getContext("2d").drawImage(n,0,0,n.width,n.height),this.filters.forEach(function(e){e&&e.applyTo(r)}),i.onload=function(){s._element=i,e&&e(),i.onload=r=n=null},i.width=n.width,i.height=n.height;if(t){var o=r.toDataURL("image/png").replace(/data:image\/png;base64,/,"");i.src=new Buffer(o,"base64"),s._element=i,e&&e()}else i.src=r.toDataURL("image/png");return this},_render:function(e){e.drawImage(this.getElement(),-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e)},_initFilters:function(e){e.filters&&e.filters.length&&(this.filters=e.filters.map(function(e){return e&&fabric.Image.filters[e.type].fromObject(e)}))},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){var n=fabric.document.createElement("img"),r=e.src;e.width&&(n.width=e.width),e.height&&(n.height=e.height),n.onload=function(){fabric.Image.prototype._initFilters.call(e,e);var r=new fabric.Image(n,e);t&&t(r),n=n.onload=null},n.src=r},fabric.Image.fromURL=function(e,t,n){var r=fabric.document.createElement("img");r.onload=function(){t&&t(new fabric.Image(r,n)),r=r.onload=null},r.src=e},fabric.Image.ATTRIBUTE_NAMES="x y width height fill fill-opacity opacity stroke stroke-width transform xlink:href".split(" "),fabric.Image.fromElement=function(e,n,r){r||(r={});var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(i,r))},fabric.Image.async=!0}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.get("angle");return e>-225&&e<=-135?-180:e>-135&&e<=-45?-90:e>-45&&e<=45?0:e>45&&e<=135?90:e>135&&e<=225?180:e>225&&e<=315?270:e>315?360:0},straighten:function(){var e=this._getAngleValueForStraighten();return this.setAngle(e),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.setActive(!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters={},fabric.Image.filters.Grayscale=fabric.util.createClass({type:"Grayscale",applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;ao&&f>o&&l>o&&u(a-f)0&&(r[s]=a,r[s+1]=f,r[s+2]=l);t.putImageData(n,0,0)},toJSON:function(){return{type:this.type,color:this.color}}}),fabric.Image.filters.Tint.fromObject=function(e){return new fabric.Image.filters.Tint(e)},fabric.Image.filters.Convolute=fabric.util.createClass({type:"Convolute",initialize:function(e){e||(e={}),this.opaque=e.opaque,this.matrix=e.matrix||[0,0,0,0,1,0,0,0,0],this.tmpCtx=fabric.document.createElement("canvas").getContext("2d")},_createImageData:function(e,t){return this.tmpCtx.createImageData(e,t)},applyTo:function(e){var t=this.matrix,n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=Math.round(Math.sqrt(t.length)),s=Math.floor(i/2),o=r.data,u=r.width,a=r.height,f=u,l=a,c=this._createImageData(f,l),h=c.data,p=this.opaque?1:0;for(var d=0;d=0&&N=0&&C'},_render:function(e){typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaCufon:function(e){var t=Cufon.textOptions||(Cufon.textOptions={});t.left=this.left,t.top=this.top,t.context=e,t.color=this.fill;var n=this._initDummyElementForCufon();this.transform(e),Cufon.replaceElement(n,{engine:"canvas",separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor}),this.width=t.width,this.height=t.height,this._totalLineHeight=t.totalLineHeight,this._fontAscent=t.fontAscent,this._boundaries=t.boundaries,this._shadowOffsets=t.shadowOffsets,this._shadows=t.shadows||[],n=null,this.setCoords()},_renderViaNative:function(e){this.transform(e),this._setTextStyles(e);var t=this.text.split(/\r?\n/);this.width=this._getTextWidth(e,t),this.height=this._getTextHeight(e,t),this._renderTextBackground(e,t),this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0)),this._setTextShadow(e),this._renderTextFill(e,t),this.textShadow&&e.restore(),this._renderTextStroke(e,t),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,t),this._setBoundaries(e,t),this._totalLineHeight=0,this.setCoords()},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_setTextShadow:function(e){if(this.textShadow){var t=/\s+(-?\d+)(?:px)?\s+(-?\d+)(?:px)?\s+(\d+)(?:px)?\s*/,n=this.textShadow,r=t.exec(this.textShadow),i=n.replace(t,"");e.save(),e.shadowColor=i,e.shadowOffsetX=parseInt(r[1],10),e.shadowOffsetY=parseInt(r[2],10),e.shadowBlur=parseInt(r[3],10),this._shadows=[{blur:e.shadowBlur,color:e.shadowColor,offX:e.shadowOffsetX,offY:e.shadowOffsetY}],this._shadowOffsets=[[parseInt(e.shadowOffsetX,10),parseInt(e.shadowOffsetY,10)]]}},_drawTextLine:function(e,t,n,r,i){if(this.textAlign!=="justify"){t[e](n,r,i);return}var s=t.measureText(n).width,o=this.width;if(o>s){var u=n.split(/\s+/),a=t.measureText(n.replace(/\s+/g,"")).width,f=o-a,l=u.length-1,c=f/l,h=0;for(var p=0,d=u.length;p-1&&i(this.fontSize),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(0)},_getFontDeclaration:function(){return[this.fontStyle,this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},_initDummyElementForCufon:function(){var e=t.document.createElement("pre"),n=t.document.createElement("div");return n.appendChild(e),typeof G_vmlCanvasManager=="undefined"?e.innerHTML=this.text:e.innerText=this.text.replace(/\r?\n/gi,"\r"),e.style.fontSize=this.fontSize+"px",e.style.letterSpacing="normal",e},render:function(e,t){e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.hideCorners||this.drawCorners(e)),e.restore()},toObject:function(e){return n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative})},toSVG:function(){var e=this.text.split(/\r?\n/),t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight,s=this._getSVGTextAndBg(t,n,e),o=this._getSVGShadows(t,e);return r+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,['',s.textBgRects.join(""),"',o.join(""),s.textSpans.join(""),"",""].join("")},_getSVGShadows:function(e,n){var r=[],s,o,u,a,f=1;if(!this._shadows||!this._boundaries)return r;for(s=0,u=this._shadows.length;s",t.util.string.escapeXml(n[o]),""),f=1}else f++;return r},_getSVGTextAndBg:function(e,n,r){var s=[],o=[],u,a,f,l=1;this.backgroundColor&&this._boundaries&&o.push("');for(u=0,f=r.length;u",t.util.string.escapeXml(r[u]),""),l=1):l++;if(!this.textBackgroundColor||!this._boundaries)continue;o.push("')}return{textSpans:s,textBgRects:o}},_getFillAttributes:function(e){var n=e?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},setColor:function(e){return this.set("fill",e),this},setFontsize:function(e){return this.set("fontSize",e),this._initDimensions(),this.setCoords(),this},getText:function(){return this.text},setText:function(e){return this.set("text",e),this._initDimensions(),this.setCoords(),this},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t)}}),t.Text.ATTRIBUTE_NAMES="x y fill fill-opacity opacity stroke stroke-width transform font-family font-style font-weight font-size text-decoration".split(" "),t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i}}(typeof exports!="undefined"?exports:this),function(){function request(e,t,n){var r=URL.parse(e),i=HTTP.createClient(r.port,r.hostname),s=i.request("GET",r.pathname,{host:r.hostname});i.addListener("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+i.host+":"+i.port):fabric.log(e.message)}),s.end(),s.on("response",function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t){var n=new Image;e&&e.indexOf("data")===0?(n.src=n._src=e,t(n)):e&&request(e,"binary",function(r){n.src=new Buffer(r,"binary"),n._src=e,t(n)})},fabric.loadSVGFromURL=function(e,t){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),request(e,"",function(e){fabric.loadSVGFromString(e,t)})},fabric.loadSVGFromString=function(e,t){var n=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(n.documentElement,function(e,n){t(e,n)})},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e),t(r)})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/all.min.js.gz b/dist/all.min.js.gz index e4efff00bf987a3952cd2871cd0357f65efebdc9..c81b9d8d3f87d71d2771836325dd16e96ede5ee8 100644 GIT binary patch literal 41441 zcmV(=K-s?^iwFo#EYnZ`17U1zE^TRUE^2cCj9YtS)3}!ZDyf&-u^Pomm^-^WaYYsi z%wtR8PCFOaG{bcgr7<{mu;o5TazFe2j^u}&robOGdh6)uoZorKbdOq-Jd9?8*1zIp zCQZfrn6;M4ERSR+o}Qlmt98`v9v!q^29q?LQs+ssx=X{Wg=#(S_5Qo_xYvKoTW``Z zR$dAmwdl^qBtk7sfo#&YHy9=b)d*I0+~V$v*`=1Uo?omoZiO&HIT zn?~QzH7j`KOi>ni(P1VD^TP)B#;5Xg9;VWDK4!CI=`c_Ky3X;z^VcUA@87&=Ez~l4 za$NkC!R*O#*ZfS9*&Qmyj~?K#oqcz<^QNf`lzgi@T~>__vx_93F3$56u}98?lf;Tz zG8LrC3FFr8LS^AaB<R*MWxroeUM4eB?hI0-U&9)6Kx6{MN`Emp1? zVf#>Jos~>Ga_NkDzsGp7`ZA2}1V(@!)iG6P?5X55xsmA!)^dxXHt(AbRBrb&Yj+us#d;aW?*`Q= zJ!xD`W^W@;f~kLGvqgH3ttEzD_k^Lx|$ z9?dE_S5W9H`wV8Kkv^iHU6$S#jH3-q(X2Z5J|a2G(1y#5$Qo;pbcqoKOW(ICZ%B9XLe?!H-^aHmez+ z*cxnAMg(x@Rt3v4hMJL;u~1t>;gwYN{FtYPicrW=j0G?szf|yy_)y7ELZyNhKb*S< zAuF#jk0L)6YcpZ+_g;@r65#iL^?KV;inS_+rNk(j9HPCPPGzl^nOOG+eg5;$1Df}@ zeh)I2h|!qmJn%CiM5V_7+f1ZSuoL5{5I^;LXh{Xt{dtnQ8qHfkmJrHa>*BoJ{vh9M z=Eph9#avedRG$PaKsE7JdA4xpY+I0*9_M=T99umJbTME&@iKs!TQO2{RSKh<4ds&* zDD)&9%40Q-1aFjr`#@kvhG8>STy>Lr7YN_fnQ>+wU~z_v}0 zyw@6%EM`(&giD#^7H8O+c3MTiP*?FQl0OXfk`?u4`~Y~MLBR;OQo(dl%crE-NxV$* zOyXEFwWVO_24Ih)I};dd2UK&bDOc12yI8mBH5>@NH7=6DwWKy?-9lpDf~KRsgM1#& zNYzY9wA+epEluwE_w`H}uBU>ECHzUP94`HkvRb?6wH?BeP_6BrHRFmVQrQEGFH|3p zKG!O*jnY18ZKWd(9P}e%c>_?Uv2HmLlwdF`R+6_$#EvzDY)VYb+^GN%O3u z5#JTA1@{UhdvT2$ISn(cDxn-nn6k(TuC&+_jl1gmowf!2AWt8noFIf(cyG5uxQwo&`(UwBF;x!@Gi1 zVq~?FP+VHuNA`V}+wQw)ZxLj#Z{jy;0(U~)p$k`MSndU@RfHCRF^5KL7|7s-QLn}S zsX3{ld9bh~8e}d&0P_nG^*-kbaDnas$0c59&*G)=PgwJWfUpX3GtmQJr(PuEE4A>m zbGk}FiN7Pe~F3c6bn{BB*S6_cHBXapy923?TtbGp@fPhIWX=3?u~g{?Rb^ z$WMtC1##tC<{~4Wv%yaH5)f;8bJ$0ts`p{OT4=v^kWrT2^VhEgCIqv)!Mzyhpidrn zlms(5g9l2^R3w#zhlWrH4rpp`inGenIl|OlC0WWRL^UeHeEeg64dy$lxohaa+;0tW z9US2V?4>qMDx4NFjyu-v{=60LGFv1!#dyXKnls3lz_Z;YKr`!H0YcDMpI?n09ylJR zE*n^G;I7DPSI@0T-oMvg7}MHtzK~KisY&nFyAvpDf!g^rOD)Lilq8(iWJ$%pnGZMSaMN(|)?H$R9C9>O=LZLu6llJri_&&8Vjt3lHjGa-5q z;(V;aI#?k8W4gZ@0Vzw85S&$nS*DYa&;$s&+sIk!z1PJ`yxC z7BE0Zt~+vm7&CWtnO&ZbkA|baE-%OI^6_T$7azA7MgXEx{{{#mUGi+?t(=mpqs;ZB zqaVS!bkrYLMnoYfdl)6|qro>3fQRDsvDg zur{)UIGASw?XX6loSHw)A(kEUOf<+~o-z8B=P@?*f9RD(z^FR>I6=4YM76F(=#)6otzNZmt3t zCqrlD%Tt(R$B+m8fvX!4X_!7m2BY*x8vAmcE~#!oyQtMjhnS`_(9SS^LJ0{eoR-s; zIMQ+2=~F|SS{RpRgXeOZz~`eB^9~wl=e!Et8vc1K)?k&pvz=qL)QYa}bOqZVnB zUo9NnwylIB6<~yAVGj@On(gKIWm?FR?u>liSR23?{(NofEmqWL0_TC7^7i%I&Dep^ z44`SE7(Gp*By}i$fMRVaC&VVWzfb<|$x~qyS%(3JiRX&|;JgD9WTJPSXq~09@Ph(t z?A?Qgb>05}n9h5hpU3SD!Roku>3T=QOIFm_#_bG8mosnNE>M?kcsIPNkR_{-B?TB` zYwir)0%T%lcEet<2EZElyZZ2gDuZ}5a+3M{9j4&tJ$@!po;u@E*lv%<81uLerK<%A zrSuwm@v)8}Rk2f@g6aO1UQL2am(IsHVW>G5yJTH%iD6UJlT|Pc)tzmeUqfT_BRcO<(B*N5b#)Z^kDi2{&{%FX#_Uv+Tc2=YDIFS$e_C7KMqX*O`2N~#H|ZuWT|g<;ePOCmo{VZnBvJd~Jd0f92~_@odIwiEoT-JpMO zj6u1TI-O_sydt+deW3-(N&xaYixUss8%h?$7@v_?8>w?B&o*eR@)8JpFNqjy=}l1u zbj8Ihl3yiNGRo%Bj~*5>PGt%T2serit#l6m!TF(`wegpko%JDY!hw*qdhfKp}GclNFjebsA|%c9FI50=%d4{IzvY!ysuLrO;61l>1<1y z&kIq;AUJHkeq7yA0~mXqRdDPSt@Yqxxpbs^bSVI4vdg1odVMR&!~cs6@ezYRpZJI& zs$@>jPipIn>&wkbfkW}$%-$e99 zHGxv@0;Tnw=wtQ9(zI@o#W8Y%c-SjleAhup0&M{%Ibp2b*h!R3KT$eZ9LPNx68-3< zUeV_O!g&@iv)R&ZfL zH6Myc9k-;QOqFiAl9l>ck1&_5Sw?@6m+7;|2KzGn<9fV7g&LCFX z-BGQbdmtC){-8Y!GK`?1AjhW+R@_Kwr)8oFhBqeUeX3vsCLkX!Fr*C%Qi&TqD%Fv= zhbEFSgiMs#-9F%VmnBuuz-j3Aa4QqBZCWXK}VW=GKo5b({H^A ztUyc{1dr^kXK)NYm!z6OL-)+o%uLsMn)!#TR}8Mv>X+#a139BLW%QsYV?XpJQ2Q$c zyC9b$9iT)x3(L;KC^F>S8;D*F4fF&Kn##{T%2|Ivz!uI$c?o_{e8nS= z-tnOP0A@eO-hB^`I%hm*d>_~5-@~$<#bgJ=K{432XH~<@`3@%s%@t^3T7DM7A&1Rp z6naWCpM#Bvy>P#kw+yok`0)!hYnM4{K8#GoS-zae)Q!9w8h^vu7^lzk?0W@z&*1MB z>M05Jz8h)^w7uGt7$w_c3cpMwI-Apw2ulc>?OzuNwzYQT#wnnK6%MI4p|b^P2&Xlz z!QmH*K5cFw4!A#8r#?2Dw2^P}OV@>5$NkdS6q1}o??Lt49jgVZ(!>D!%xg^yj_1(C zpwPsi*2KKf#OT|a_yEnj8Wioyx<1Bt>P!rs$&JqJSw|mnM@M2B81HJv)YgpP0nL~; zHDgt3#?;b`-w8=g6u0JEa5RjN9H% zmfc!?doXQO=4PAwRGP4}q}`6$qh>C5e2>^djrLGx_1NaMsowwFfofE#K3VkZA*Z#nt)3iDJAaed(*q^odGRoxo!}qdsXh;2;rOWqtAbHk3I^?9R8;HG11qf_L%Kb^`=N@{3G3$gx1Ve_nKPjMs@jt|8 zv)Z55Ayq*e<6nepJ1(6*JF16S?hQL~Ptmyt)(kH`??JQT{C^&uw!iG@j&zpubWe{; zR1lq3M2Rn44&7gio&MmzRx9h1u>tyuT)-(Yj7AjoXNgkDQvBKJo1vOrZ^b@0G^Xli z^PG&tiK)5HW5nA09d5l8i#-e=bMw^vuY;0b@UOq>C2NH*!Q!8L$Z6OLJ`r~fIQgdr zVS-`=nAl5~`Y4Tk+X0&fk#yhjcTI!ZS$6u}cSnT~cOSQ1v%O9=k5utgF($yr=ETs= z|MPaO?QPpi`t$CuaCpwTqzT=8dfHRUv^LG9$!=0-V<&Z1QvJ{pWiydT9gy@TlKR_s zW&n@?N!e<^ho!fk}~C zV`i8Y{zG;V49%Ibe{Dw~JizK(xTWIyAY(JizW6WO5v%F$3ueD6b79{}8|g39;ST!= zmPJxn3~5H0bAB>~oUPXv=t7~is;Wu;W-)KJ$5-6L;jUv3yl}A&@7Dk3{8brIGiPA+ z!iD8!W^4dH3q8_V-f2bEa-^;MnNr21+YfOhGAQ#Lmdk~Z>nOF~kmjTNJx8yAGL7j~ z`B`6DqGjSTx(nwx>B?wa@uG2H&MCN$(0)aa#?>u?dItwl89Nt(>E)+AYYnD0m* ziN{(3Wj$aeOSFMYUm(yCu7jH>;Xb@$ZvSN(&VqcN{pI7^H;zT35Sr|9cNe8**|uU2 zjO4cJTW@&;eC3-Xs(-IyX+M^xRUl;tJNgPq9*qRith@ncxKf0BHM$GqwXj+TFhPI= z1gV#Ckmu^=jgx-%p0SR<8^HqS!R}Z-PCI8u-9c z=#*s=p_O2>F>L1A+YU?^*qq> zjL0-B)1(cu`lEhTLHzAEQ%~YR*tMf{LpBw%`qEE8Nla?8`f^8EeYs6mCkC-3K|O;v z>{i>fE?Jk;pQ_X3?pTcMg0F`^4=+Tds;+Xgr|=0rbNx5|Z@<}3QO6ER$EJDr zrb#;%>RaoD`^>eKn*7EAJ+ADdR|mHasB&7j{)h_PD;JhiSB)!s&Hm|I+;U&KR-DE& zi<$#XDQI6kMm#N&PfL5jY+#?jT$Caw4s2Q{S3da91qfpnA%?ghwDy`mg;LtuNFcr;xLRp7NplrvtPE!mn%Hg_dXG z?kgm`cK=Dun9qfK;u#IXd;df_>%Nx?*=P2?_y(|V-U@Eqqb$=CBG0c>%m%pg1_4<5&|Gd2GL09VI_R-mVaVxW*x$bkN zJuGw^0~(r|H2h}==s5(+*;3abY7C(vUO;nC4%?0vcxIyMw zqfu_TwuN#Z5ZFfF%4fh-o@RE}DFQm|-ggc#ZE}xned}x-bPe=~61>vl)HAL*ZmBRm z|0-Cb@aAVoPEcTR1URG=22tX31n^SoW?(L|RuyC>GSHt|jV1I#tsJC@0AJAjKwd0- zyj1gR=Tv=6g(IJP{X3ob^n({5Z{ifT>(sj1467ECDq!4!xBlLjZR_6EMt1M& z@$N-`rd6eTH)Z#3WFI|8!;wB;@S}NRekF}%n!>z_nP0|loy>ss4^%Y9hqGrdVg7sy z18xI7Ez6zRTHad_TCO3Z*N}%q*r-sQRWe>Bpkh*vSFH{NAmD?Id8feq7%yjZIm1g%mz-SAy>Flm z-$3Gs65(gV;OkcY);JJt@#ROe`^uCyGYy|=CjC!2a#-K8B(-owZsVfz7*%e;_Q`C^ zf&K8KxX+ROhzBT8i^CD#b+?$3NiMFoSE9F3W`+Kf_+)-B(! zh0>4gfj7kOpmRBkc{X0>!*1(`pf!8idO2QwyFtHq>)$P>e8d|5isj=GA0Jq2v_`IH z0nFDma>I3NFq*nh=cqlJ9ykN6J$x}9x}(+@bDROzH`eQeBEPP^HFNN(^k6h}Tr6Wb zh3)>c9|8-sE!%RDdJOu~q%#^3eclgfU~&F_-e5i6XKfOn-p5&Rr%z>?mpF~J=zbFtb=2`xtmTcxvkg$CIdwFhjOqQee26|#u#EpNuG z>Z_~Gth~E?r19lNFP>bcA-|!eW0lZ#WAypOMW~|&q!@$Rl#WUf;XPCW-+jc!sDc4u z1q3q|()TMEYE!KOglJn9NXRl2z9F-S7iMXeEJbV4cl%GaaqIhVLJef!=2jc_YvA|>tVDBu6v3M4I`NQ??F`)+ zFv7AntI%Z9kSJzaQ}NlXp}aA6jr)?J9w!tQ!Nnz>7JOS2W*n;UzL@ne3~LLT8ks$2 z^8^|%40}P0=$OudowY&`V;wg%Ha1K3{UFwH&vc{&Eh9Bvrfqym|DO=ojhE3~NWd;8 z@|bw&Nw0zkh8r4TF}j)W+Q>^$xONC#Vwww+$a?+vE(I~VF>2*L4$-sgAilzIRGn=m z2pe^o@XSar-VUm1*bW0UPih4!f$**PKp2n`XmN)hh|YZXx^oCU7`xeq1t>WMJo|_O zG~#`R0~~La;&s{Fx59X8GLHbICu5^Ik6dJUZ~5a*sr2pCbny0g_>+sy21T&WBQFCl&s zJd8qngV(=a1Xmb!pTvkCqVw|%L;6UD!R}-j=PnBgjfS^V4lNhjt6o@#u#$LQjaYT! zD;w&(N=S@Q(ITAV&R1jJlH44=66nBK{|20u>mm?i0>r?7wv@YMxL%j$lVlzkV8~w} z?wQHSknx0M64iIkQy;QLY9Dbk@8iiJZO?$E3SrVVjb0JP9EODG;&?XQnWYKs#Xxww zHq?WH&g0$y2T67Vx}yHXlYB|EdWd>jF{xG8Zwvv=PC<*E2tQU7V|9G7a#F4ccAouWhqYWtH00?fWKFQucx~zZ+lkwmP5)2aQ(>PiX^LUAobJd{n z+wk&Bl)c}j=py;LQ@Lcf+R|;sbO=J@5e;-CWWDfjo$qK-ZIGk_DL$DvKbjELe_)yS zi?xk%r{NV3!}Kh9A55blPJM11;fI9l+u`|G@^nL6rM~f>;)I!K`1}~35k=;4~~Ef ziCZm4<{kT-lwf%)C1kUhUZzxmn|!YR@8~>woXn#}Dur7VeJ~o|BNe${O_dTI2svAF z4AWdBOoGtPn!_0akjVyck`9-&CbEI!eXF*G5;g2c|zOD8?;I zqIG{?f{yWr$C-!IeA3jHBEw)$+9?7hWg>vN$$E0!b2P+RU?YOXPLq}1-H5{?`q_2I z0?`5Y+FUn2_Om9Qw-G%0iDC)yQC9s3?P94VuN+<*$dZ{mrkFue&?<^=k}si`;n4sd zN63FK-fUap!^%V>GHCe_a4U7ZTyzvJ^lKYUeU2{UwuQ9puLMS_7qZDbiGiGlNT>sc z+MSkbx5+Hp4AC;k+8R=o?I0YHV^|h+gz)QtE6cF!sGZ-ql-f7N6xFvAO0i>g9mLal$YI^P<>=x$ zeI*mb=7Mo*j4rO|OOmo0lToy4UXv$b)G)ppj-Y@B&T01x|Dq8<+G*r%MI;CW5vvF7g;pUwZuNpoIr|u=ORiUbQL5O%6-J4@C)Lb2PRNP9`vqTDX zeXEa$XJv&$g(V|PEa$k@8<1e3j+~G==pbf~rh`#?fbL}-2hHAISlV2rOg*zXg>tC+ zs4hJDPlPK1M!~V){sI0Gb|^L0RwTisI_Pz~=qAY2Grqbg%s~->UaMquyWL((ShW?& z69W8j`-Wnj|7bBW+hH+(ynl@{n;yhtz!X0`i9)CPDTsNET8f3}|3wTdPEb#L0SU(} zJZbkODAANr!T#j(<0&lERjJ*k^CrsbT|8}~{H`H0qam*$9Bk- z=(07)h~l$T5*$&i&?WJ3>#?aT`W0oaLv=={Qn`oAp)kXsP7jVLH#RDE|bEAmfbTq3Qy{CkE-QX^W z8BQmfjAkC;R;YGug|C+s1Ij(v`oW9RPi$7hkB|TdAEWTLjvAq53P1`GvQA&xVAg2m z_#HK%0E7ZsTfq`+yjer53(O8#N*Qy=-^*lPb`1(dJ%qDp8^TFlEJfcQz3nfa!b&>yRlBwG()cq04h^}U|lZyT& zW8gC%<0iQ{5JI^3=?R|oHu?IYTEI;6tY63hsaC9(>{5v|-x?DuU@j|kGvE!poZZpm*FtgC~D2~@_&QmAuDJix8uMr)} zXV)CUgq=utmTV-OJSYnnN>;xuSLc!p)dlU8=fmui7-VeOV4&_!zO{bgXenS2_MX+ir<}_o`J$5 zu0NciK`F;CO}Z<-0*dhHMR{Ih>rBA5qv<}HkRM~`u628R+d`m>R?cBLN9a_bfAX>R-`d^n zk7A)LTgvX*ly;7+6mBv^q(iYvYB8{83AnXV*F~eH5TZEDDLjCr!RPT24sD!u6(87P z$LG#LsDBe#gV(z(XNRrB%J);P6AN|@S$NbN#GS)~5bO3@cxks40D-Dz%<02|cKe z$m|hPO=9Pdc4$MVPX4F8cW-aoNYY3D|9uJyvugn)NRhOinE?g!IKCv=<2YH{$;3z2 zcp(y$u%Q4B0LtP@+|Pchs_%^kNju5xp659`8;j`swYs{x>a7Et>l#?c;9h;Um4&Ty zZZw|~S6SZ7s%4xv>%?}-YI(LUlwq&dn`ZCH=pDMs>RuI}{BbxM;;`c=8o95XxyxzY z%OStt*GlL^5m>)9`j@TstCD7UyPp6;@#5=+{=15Zoi}(xF+CxYJ`~=C6pzP`1J!ct2x%n3mY65XuT84cf903`G#pZ>p7xcUmJQ$O z=wv+j^W$mW{qx}QSL4V0G)qs%BHZT@G_Qll6pXFGKP)8=w9<|TV=eJtAF||jny-vR ze|f}`sb)WI639~+&M9=gJLcWQ#Z*VHFr;5jZU6@#BYe zO<#4$qQrO3zn`ryvRPD$wCpoeiCI7u%7RPS7+T5jxi*T1fJCOw@;X|m)cCp7Q)9r4 z2fRgWtt*k3zE&zNeb4##i`!KZ-H4?0b*+-p_oe7xR?ec0>>hqyXuZSlPoh*rUVzTN zkOlLAw_4de=#~eeN1N!K$UtAORciWvCXyB~^J(;}Ow7JtX~|j0Q&UwmZA0=Z^w$>@ z+*eaHmeyYZkdrOBv5juPh~QUi)U7bZ-Y0**lqkrl?P?h%K8QiFW-2OGDy1})kvJ?l z0B91IT-98ub?D0-v5qf|7Xx$=s+k^Vgkj{fXE}u56Hjgo>*Tdx z1=B1-L!E7i!Uv%Y8s~lz=KhMF3RsaO`&GrIcymWw*Ca4573SPA1W0@+K&5717*;Fm za>QPG(jQS0-K+3K86$)lGn%?%rY5PbGo}>Agd#y{IHlxv2Y0uTHcR-%9E2M)XmpO| ztYizkqarvCoJC^2R*?|YV}**L;N|`67_FAV+_*m}*V6R*V5~Cf3(#7jbEv0ul&&6@&8wqsMWcLUq98-qHKJ+=gBr#S$RT3ZJ~%-|x=5 zAMRwL?a3t*(_bem=Q@$Q6Bc*drpG?=@_kWqfcg}7{@LHR=iLCRf$@jNkIuQRW{rM- zS_#+hwke8;uv(5<#AE26T(Bwpj=%>w>Fi?B%a z^S0P(WY(eKiljnt1mpt2q_0eIAP5`hyO*KB7y)0Dniwe@pmxt2IIJttTGS1}?e`|V z1a8jv{{G>^!0Q2}VI-#r?(Z`@$)7yLGgJx8Sg)6>NZfpDsqvSXZ8$5=g9?Yi2!a4H zB$X*iB9=yzZ)W23%+R;R3ZFH9`To`9sIng%QT>-c6B&|e;A&*fcjRjUF2wr;=Ffll z9>>*unxWo++37(_uP%PzplxBnysbpp7AZBB zvPJLZ$n7Xgt`9k`ZQ470U(HcPNXO(r9&|dVW6cRqi%J(c96!8ea6a*xQBxCVqBaEf z*a`Nm6nRjl7pg}jY^rW~cdhRsQ9N!GUV+q>0k)%s65&C@!AH(b6cHE|IheUNSf=EW z)~m%sW*YYcE9pm^%hGtF7mJ!8YD5Y;EZEE=(1f(D$l^vQRLmZGZ_#T9KPuYRKNN7- zde5x&p2_u|e#sJdtm3SF71Jr4b8q#fDQgu=$@35VyuiT`Rv& zpzXKZBX)l-VZkAgM_91c*JH@lmZ)1`07`8mT?WFaJ zYZ$aSbwrQ{n;_~?EMHx6R4^a$020Mw!1z4wn;{R4JPph0LqO-^6#I&)iK^32or%~o_^c=V@48D=;4EylG$3H${Ec1{6 z5-wE2_d63VS;DeFRRc##i1d2vp2t7+-@#NBGvoE47q$JR=sB-gPU$x6^K!3P?rYjI zj;w8MKkT=sDw{X3(7m-KH!|1LTRC2|rW;MTW_D)HL*7a0xB@j-!bKtw z>r&1D?FDKfDwXn42aX8SfjRlRk7w@vEGuWr^nO(=Hn^fIIrc|4DPz{&twrVx7?1Xu`6^1YKDa@g*dPcQQSgyv@p4lEx$)@ z2j(l_Mq2ax`#B_=3jvZgE;n&*U5~kQFyL#i8*z-o2#}IkG0fwPM??j+#xB^OPvMKn z4J_N6_=d|Q;Q9>TpJM6A`3AT2Xc&Yq^sq4t+vs5rS=fah_K3nT;q_D#)LsYC1`=NC zVV6O4L4AH3-%&>(32SzAv9$z*G3lCqqlF;Hpzh-F75k>*#nSQT#x+jq_ToJSctu3m zlgqH5gg`-2A?PhI?wS8qkOpo`b_cgb8_?D#yGUqQq|u6PSXlvEyf%h+*7HcT4vp4E zv(WJd5G`0J8Dmu{IKgV4y?sl)kFG+z;Q;Z%tJP0$UPU*007n|Q44LvRh7zwgORMjb z^4Ik$+93GF4u>;S9vCsiu@)ZC5b3!^>xzqWiLi1hASOrF9$^|4D_=83(ZD06JUSy$ zc2ka3#hDVWqZCYu)5(Dwdo(ImeeMN}@9098B-c)`A6v zy5mp;CxVS4(AvD)5!~+Bud&DNAefJ%Zh0~q4w>{{q~6HX8v9hQ9CUT$9$d@|lw zXkV6kGTs`@^gih=o>fUH_Ny0&2Ny?DLX})a28#5rOBQ zX!xRfu6%bcCBYJA4TUew7#Unqqp%8%Slt$R7PcX=(}q>FKD^UjKO&8hk?Kor{0Y($6t@DYA=Pl42>V=y{TSfnZkkaW9tCsO z$Th|&4>tC{dN_NHtQ0@oYM?n%;Seg=oiAn!*Z z>Lg1t3g}32t3dANIpf^GxVqDjbD})Nmbf7JZ{w8jycmJa=kv&M*&|RazL9%Cp?D7X zxd|xKi+`+>W#!7sGsRjiq-pdUm?OB!CFRpYYL#^cTDAk~Rkeyb*B5Z_oYniP?5igC zSw}_AeYN(r-u4^4eS2{Ivi88vdq4|R{k-<;^|H=Z%gw%eyCQ2B>lL~7)!3Cac4dw8 z>?WJ1`|3Lp8Bef2mSugSRsZrv-R-TMqtvnf1nR$Cr3_Lg!Wrk2> z5SoFT5O*>bl-%wsD7keMBm!kY61uHv6vVrR&QDn$x(xpEem@z8WH@Rxd`2@xT1j5m zQm8&9tJX=A6E<?0(|9g*ZGo*->&0v@8NjR(fA!=k5nm@+BhNg$UO(8o)peY zGeAE)t>co9JR0P!D=}5%MII3j;RqyK%$E6L>6j85k~l4K)s{Nea|&QgbXH?EITIhq zbmMuzP!R7}9#ki) zkWR9Jz7G8bA69u!%EUNp@bH<~0rsS1?LFtcc6DBND&y?Br4q_jm?qU}ru3GII7J@_ zYxv_=*!2v@!9DaoY=aQpE17*y?7o+dzL#x%FZcHS4cgV`mrHwd3WbT14yX*JQY9TR z8EO&gOS=G)jfY^E7{N&03k+_|wdimK9ZrLA*%rSJ33P4NK41yPU$w<2aKVN6RqGsz zy|HRpZlM*iY>Sw+MOE>4%)%Oa}{*4=QRevLoN7x2W}0BUYmk@#gY^IRH06 z$iKGc2fONJ%_QRNtBpna$Vwu%$4)6uMV=;3k>i5;^s?CN86}f-$;VKygvNP2)C3?- z44?M-kMTLa$npY{&nhw5Q6&9%D9eUX+h24D^H0)g&F|)<*3}wDK*S8bE5bruGP=GsbcvaQW= z@6@Qq!FexziSheiU3^m}8+sc)Xu#z=m5)Q;9XzCo><%9Pl_s(~7>$%eyJ0}DTR83y z6&{hbrQvpk=33{fMPDzI*{^@Q%B;JcyPr_HU-PEaqA9hjDJb?<&468Te?J=k8S-=Q zEqQP%eez9*(fILWd(_VI5dT-owxW&8GTESGBU6HH0IQQYo00l75Vj>}=fby!SOlb~ zJa{Y|S?GN%nCM^5tvJ`$aIUXUA5PZj0gUl>%!gqCG}*7t*5_S+gqDH@{?xpZ)2b-j zR>fA*y)u3C&DTkM@^{?6(+|G?VSYCXA8t|kI%M#F?r-KkmInzJwD^b~Oh4eWyQ%=T zI+XvXsn1>Ap5J}7y_dhCsDC-hWby?goG$pOoFaKo9E4VN%7}8JPO*30oOho;yRmxC z2rF`&K+m3?V?aoQtL8A z2O0nuvvyFHP=E5!w$xM~dx$Fb(^`4F=xM*B8o}w=>z+SE|6P@yc%&sBnTf~YBVzAV z;<1)^Y$kpbO8TtkC<}pVtLdoB&w@T-63kg(quBz&CQYqtZQ~G9-4{Op8jKO%_!ygl z05{p}8NKx=*LFH1qo>%-&loUW4h2y2iOxnH3iH?mQ!)JCDS#>mjBLnmXxzc`vtqrR zck-g{sE5DKf3WAQ|LCNwPESI&=>4;9K#ZGG-g&V+mYm{4M+t+3l%BuibUEhYPuFm3 zo)(&btb4QEUBKyeNfemzhm7?Zh8_O@ffuSIXB;*J3U6iF=ht^jZ$DqwiW_$Rv8e&u1h#-jE>5_Ta)seyKhY?9|89!HM-zV0zGj@ z1g>)V9^X|iPtq)xN4N)y?4F+yEpxk5b7y+LY5g!KW$l~ zZrsf&Ckri&!U+-Jl!PLhqvmF8qFnM6-+a8eUb1q&PjVQH(n7;*CLnpbv>V$U&tcm4 zHAnQF_lwggqel|tjNHuxI6CCY7#(QPP?2(nx@7)ZFg2r{nOG8@i)PA^ zh^A87pS8sE7OKYfyw$B2wkGF|(;7+{W{iuT zx*!`J2}6%Q`(itU{CTEMOU7#O6XPTK>0!AT_H7#x$0rM6d7EU2!tWSPwdj0rJolIo zfed5XP7j(MO7<;N4Q)xsriG}fRbFa~p3?ex2IE&@B-fw~>Ak&K$L_pb$5v#PF?+X* zRZtzKzIQJ_q z-VYFY8y3xaMF^}uJ{VR=l3;8q`eO8uIX|SFi>yQ~IaV$V3>=Z+9dqOqA(ns2Q?Mx1 z9M9plRX?rUn7Dju3>%%CkvYU1V4)6&p?P5tCcWY34GpxFyFPE{(OEq3^UE|TIgNJF zK?K-`6!^a7<7N2@g_@@eXl1@BEFPXD13bb0g`mM~+xL=~Z!CeQO(YX9L;3|Z&^O`*UC|>p0iJFbAU$MT zON2m$dc896kMjF_u}S3iE6*Q1ILc`_VG1hWjz#Mj)i&-T+DO2#eEGZX8J|Ip1;Tf% zzDl&Z&{jw(iNIxw_yR#~Dle?W?&o#qN~PJDK16Y-VO+#vXbBSrn4OQN9o@`;m)&Nl z+77PcijNW2^NdGZ6PGMt6Ucd!H#)iG%om73mE17$e34#e`Hx9`CHlrXO?NN)jkiR{ zx@jx#a#>s?OM0@fm$iPg4R>5yr>Q-lwg_d%euxgqj184jD##5=z}$~qiWUe$V9^z^ z+coka4iRQKr%sQL*pwA>3{aH%+J7rjN`x^tWl>-O1`pC)myMD5ZR>K!I@8zXj#oLe zAM|V@SB_LAhe*SXG&hhJZd8cfqUFf=EvSWW3*xufx|MTlVtQ#V>un;2xDdTw&N)bf z1fiq6Mi3VmE074gBTXl$R!^(~6(^!qa&SNSl_aU^H#9TpoYjwSkIx+RB(|#}W0dDf zouF}BQ=y2Ta>gBn?*)U&pI8Sv`jltKhf6G8F}H1%@5#Ec!T-KamgEX-icjP`!uQBB z_rycBb#w;higB^FjISuQ{$U;8Gac+KEgO8KW(^}Q&-C~zLf9SFr-!O;jb?A~@7h}A z{9r=uBIoKyqukFRE#lUV2ITS@jmT+>0lm)Sxe0X%Rhjg9^@g5W_~PM<2A^eE{Yen5 z#hH@QQU-P%M#>c?Ru_}$l!iDdvpG01;Y-#%HA$)FM_M#`bW(@#pQMz$kEPznOm&N| zcC$}E$#mHG-KSa;uol=o%g@Mtev^!8YzPt*U=}`@`$jl2kGUhvl%Gw8eZP#rFi? zSIhlEMoD{Y_UhQQ6+g_%enbfOQ zlgahXSHQTDgtxKr0_o;|8*hrubi@(s&j71pwMN7h67E|SmLR5s+-Hsk3W6=>bqwh zuYYp#w};P8PM*Je-hmoA% z=~EeDiNaEoEO2pTR;`Mv)i{P|k04BjN`_xL-snT`x>#4~y!e!RVpZqgW6*O5f+n`- zL2_*6`5uBWkKwR1^x$wOoKcbX4Sfevkk8`zLHIIrW5v(`h-;H+1k!C*JE+9%ww~1F zvX?9AbPd!Fx8AC>bBP;c>iy|d*iJEJW1rh*>x-c01yRTAd3POg&+710#wueo-Saxz zCti#CZFu+M`yb!E|47%;<2(756Lrqc!;Ypa2O-`kG!yZ*$8JLw6J*KIn;|e<2&4hW zJ0(d<1dEZ%$2VM_bBIP&W*&(UFr3Li)5s)T5Z{mh5l>FDNdim(elOsAaaxhff+9}3 zkGfTF(S3wA#b|fhgMWG>_Gf$^oIDIMG+u`+oc|cZ4}_9kYYojwpo7R7Ot|Xk@1ZJu zzmMV^-f2myj$(9eqz&&XLL0-L2-95%CFOvZDF?jNXUU7iKIbkwj5#z~&9Ew^eA3QY zE79eyY`VBQBH!*p{l6ie{?Ao<>EYAU(NJ?nD)1^N+#hlm4w#0ql6t3%u*bdu? zzjGiqG=qu1&T@qd&4ZF#W>@*LOw;FO0)*|dVO^=k?LigLQi^&G0S9A*hv}H`C$5hg zrohK!-i9df(S{U2l4~km8|j38#6*85WFxO+`lJMl*worHKTot!9TYNA#B}?cQk-li zd?ga_#Ltpd%zphFG%EHO-GipXT@f);fsx`l+XiXy5m=FRiSVk+jTrAEq4dF$IJtVA z_28S=!VMrakBOArD@`&v34|!=9Jc`;obL)hN2m?L3HmroRtTb zEw;Yxxz{m`+B3QSILlW9f>-Be$mkq$@ov>%-?NI1H z*2%o2jlM4R;=@W1 zwK+`C*9Av)`6w*O#p@Pav1?{#{;uE^7%4+hE>f9W?JK#xHR3i#+=hw&tu{CgKVTCw z{HG%GU^JdYOT9HP+zQ)m6fP7@LUOvGQ=7wVROXZvTQ@(w>X{mjNlAVX=EV8jwk3NFj|o}3}@{GRxLB=`|%-kV0@Qup1oWWJji zZt&V1;zSky?@%I)GnEYEihuu4IO72`7GMKCpf@Pq+6C{R#_9zN397%4`XD8;ul+y=`t-pINU9fs({Q z{k}7V|NT4ti~oCt|9WP-blR>N36^4*ux`9_k%Ah-JuW%v*nP%{R0p1NdIF%|z%cQr z5`#qae1k^xjYxdrtBmv;GyTR$kC<4KmNO|SXFhsxdqcUhD4YDKQK2 zp|RTXP^tRbGQLJQ6OtiddBm6<6tdALzHa_@2;n)J*?qRTC+&)~v?F;`U1)kUkENL@z;R(36I2ZEHHP+b&`*PfC(ST;Vc%QXyH{XV9ml+Ja{}Y zF2|o~sj5Q1Q(_9qM+svVss69Dk9JwL&NaM}gX~-Fa3TY9j;4O62~fyVREl`@58c*v zG#rK<`UgQ2I>W)kz*8xoC)E|14o7%Ki%{*IpO->;)jw7#l7>WZlv`AY3h;{`OgL6wx*dZMA*&fPBs@IEp!V7BI}1 z2h>kR|I9VlBSDp7GlX=yKk5Y#0F^1G)`h~UwPo`ICEaa3p8B~{zD}KnbFHkMLirt; z+Jy2!)Kb-M@&ArItu+B9Q|qyLN0pXqS;a}~_v9#?6UoMc+WYywNmbCuq{ojwrYTe?&<;b4sW_q^eVk3buORG2hF|bDfcf+jdsL zD6#^%=BTtjBhx#wJ$rVQ(`g2K0HH%lX0#IK+$cF?i{Qd92jCTSRV~`L_Dpxp7M=rh$;^6 z-E_|Ce5k6-=<20dYnq(FU3+=k@bR#1F^cI3Q>IsdbE+j$3s&1hxDlJX z2%R^EL2r*9BgPN9={+!Gog~0%Tj08ha9Uo)Uktdy>=)Ft%eu zBCE`I^khvbr)B2DMv4)mLpQGG{fKWpT%C-&WRK>~1sPToSLftFe5|ezvgaATrYhSN zpl+^JcbDEqC}&JJ5sE5nLYtur^N^n=hR!*@t31!D6}^*i-`UnyFUjCS*qQnW`T0@x zi)kYJ;tha3h)P>C2NaDEE+Cj1DUbZ$=>|6>f4y%g$^=raocDZEO!>F~<(V(pD84E# z=`L3WI-Z+8%5dtCwt_2emo~nw&R<pl#Ik>Y23+s1*&hf!4Lf_hHHRVTl8-CDT`+ zwiCa%^^fSx2+P*p({iHWQ~Y5Y%dummE$V*LQ==$uOl7BZj1fE7&Hbm5c604x-!qtE zB)sTdhqfH)hsUKrXy*%*Li^buy@eF8N8(a|wTlGk1O(zYIt7169-M@$p`%^Lcjd6- zVPF80+(8=n>#NkCY0;c1l+C#~v4>3HWnu=O~S-jL!1X; zG6Fo$<)OE$apFMS*#TC8Rx)MUmkW5NH#`gNHQ5bPnAqJ5&fNX}olpg{J_Kzgs~KTV zET{hq8-HNie`#xc=t&Ha|J5CM-`;`E|8NI*yQF{A-7Djov)Z5EEQ=*qGQ-2#Ei2Y{ zuCC|Tb{O%7=DaaE`u5Y3=||R92q7z58KS9*ryaiH-j+k7>24|F&}&|kth8Ps=LW9q9HDlGDp;VMZj^oQpA@%sy4<4-lb&Tve@L&7+y6Mp{IvN2V zVmEDP*Gz5~^;vGorTGSRxKL+Z_=czBoSY?U&;rt<9r7xDQd3;iVTQlRKSE9cE|VkqusHArUmeD zlANwdy-%tF^x{WsrWP@aIZMtbMZ7qT2{5fdSdvk|Gs4jxA9S77!39e4CTX;IQcTU%twi zJc3>?z59FitMsPg;EPyDE#odk+_xq4_;g_gDwE(u$S< zRZ}`MTf%h&zfmN#IiGm04#0U zN)xuV*}^Tc2Pi-hQbshBHCdzfv$KtbnUKD%?=6ejuP6z?H<4dF@@1)+N~is{waqpe z4rim7_gXQ`DtdP*@3BJ~54!8PZIq#qju^x>GBupjE8Gkw}jJgGE^JDjpp=A76= zx9O^hKjj&3r58*Kpt)>lIWb1v75dekoh*Zh`7GX10x$v#vyAt$jQ3OqY{EUYg!@WB zwN33>{Ta(sfxggu5&7_vjLiDq~lS@f4*lwfhb^O{GrhR zDNs2O3Wkf2bo9ke-Y&!mxsqFpNEEi;(UF7ehgEh|-rpaU`cZ;H(*3*#H7yIwHfb6j zQhJslh-je_7H8SHBb^IrlN>22N-h5EeAu`0!$@!ehtwh>FpC? zz}pQj$}C>uQCh*D5|xQ93_4R`CrlLt9qNbm{rt&rI*j^s7{jLUOZJVx0|=(p&|z;X zIOB>lD2V z9h$jo-jT6a^+zl-{rda@SRtRCv6n$@Yw>qi0fy$NuIo)}Uwq5SHU`ulPMU6p`=y#= zow25taoIM|vVR!|H*+j#clgtW}K1f}A zf$qj0brz@$Kjcr#$&)&$dvSF(>-GM1c^=kJ61>6231m3CntDtf-ebC5@Z%g2LeWv% z(bdGji*vp1x;4#n*RDkIe(8?bpdne$6-B!k?N?oqxU&nc_N@E3_Gf+`!t~AHzK{L| zl4go4mg0(~&=j+!3ZD!9vIJDFG@NZR)OC?&pyNzqM^p`9|t2j5yZMKvx_yH zu>#_sjRF2XAdi6dXNAC&)fTm-StD<5)mOR>MKovc!%IoA;VY&TN zuC|-i0vsiKx$VH$;0;75fln5QfM_4av8GR)Banu7s`1H1RV-oNJudF7jjreHi)jNf z)gS_X=lBHD+&<0^>Uqi?q^hgTApq&Hx6EvNd>a^Bkon%!Sd1P1By4eDBg~R=HWS1t zzqxDdkHuBEURpW7s^Rv8DXBfC2J1p8SOgYwh}(u{6A6REwi-St=a-F$d}7gNq6u5+ zsFV`nfD$5x?w!CI;>KvSIj3lpZjD7FpXp82iS^9DoKw7^Z5j$-EG=mlK~=i0SbHrB zV1;2>89u=$^=Zz)s}QxyRL#*l=@Pc@1A?+zsO$M1I3{fhdD>WMi~n=bt1LA;vmgg_ z73SA_{0xFjm$ZHf%$t)g0pdOfiZ6fp`243gPv3p_!|Ukra2PIbpS2*hl7(Gd z-{0SDxuLA#ZV*Lccsd|TO`YD~=k)jwA*4Bu-(0=f;Tr$W!EZ(>mnGvP z2dtia&Vt2iHIQM$`MM;zAB)!d6p99@j*!8Ojx`&ECb7@(8mYRXZzR+I3RJ(9bln`d zpZ~`P4xe>)jT;I%zHHdogVFCbYHw_mz5kiv;>e8pkPUZ^&s!{_(Mv_!w>!sBRQFlq zSn*e0(jL-Aar+zgKRRYaqSJy;EWALa`YR5wuiS7N71fB^dQ;3eAb)t!yokMCFb^h2 zId4*BIJz@%!z?^q!_^|^P||z}Lz|nB#FZ}#CrgNyR926q2{+fo$Ogg<65%-<4Q)?L zy&mdJpzjjq=us9>D%ldEYom2}H6@#KxZ%)W4^@uN%JYdp+Q#3?vtf25hcF=D&}0$} z<4Q0`9^MN?2-gu{6MAM`6Q}^-w^mtA`dYl4;GBFc3phLju80lAmcOnuG0(1|uTv`c zplSmqx~%T+k1DMN()I(nLl}lQLwm2vXk&nl63<8WXasJTqM7PgDHO9c=_5;2;#02l zB28lZY}dXa)Wu3Y>7_!&1X`>H&TJ*#eE2l3tMoP9Fav3__YPtkePzSXR!*F8O|13| zYn>Q!cD~8`FhD=UQgDDk$_XlWcxSAmogXmd+?%@XjdH)>wnf7r;vdG{6mNI4GFzeJ z?=_z@9*BLrhCpNvsah1r1v{4=8`*>b-RW|nMMW5u_Cwlrt5RpY?e%GT_g2ZdVS zW?8v@Xx4aWZdL2ZO@P}04quN&o*KRYYF~FkgI2vpA$z>cxC$+ih?RquBB(J`31xGL z?`V^;9hWVb`$*}CuEK_-+vd_}eWKo>%SXE-DZzj1r;7B9VQW^&9P#5I^+f}B zW;7g!qsI?JM4cH9{`@%bc#-XiFb(R_2;dp!%7-*-*3c%eA_lLIgwzW;Iem%gNvg@z zGW6d9p@w}az#K}#TFe*P->%Y}S+qriM?8vbUSB4tHvnZwuVmjRFx9ub8YxW2(I98G z+_xM1}Z4Av4*xICacpJ!;UqA9W{6!L3RVxLu9xX zz|vHCr{b>Q8TcqB{|3>pY&G&m*6O>8xly5M?RN3TPK5^FjvdCKB-6 z0du*1pnG~MPI%eougO{mm{*_{#l(igNIqqzjt@P~Ne6{wU?Y`$3KlJR;#9aqqlPgB zQw{-v%VXLfMdA^GtCy`FG!Z_wFr_PDaF7 zJ5gdm^sCgmfZB6F*?15slnOfl9>yQt0zvF}Fo%_fa3UvMIxW4n;ZF(nJ8cH}fy!dg z88+-HK+qgEM)cbtJz6-^>9Z-3mOusydR^)hgMH!TTMvJa;f!LJ(%}lb`vlZ|BJ^rb zIl))cC<#B$F4h!Qr-&P0y5ifQbZo#?fKK;BoUqAi5J8c^2z4DcYy~vJU9^&tHp5Lv zPA&eTgg!fy#u>4GhEH4j9T{bKLCrqHIhR~@;yw1}l3s=#KC;g|zTi4us4bnT_B&#} zY(j4WX?XHJ+cRb+T98vaAo7M*-Z`vGLaw&*%k?^S1#&!1Am|Y*jW(hv0YB8fGn*_H zq)5xZr}{_ajWD@)uK9ssBj?cSZak8S?XizOd5WxhJ(Di=pl3aUF7-Tw)r-*#aya!m zoZ@1ll*dM%Cp>C!9dl)l!!^xO5zm8!?3h-yN*bWoD+vHq&HZXJ%I#g#5$pFy1YJu1 z1|4caqSC#W=~yzBni|UY${87(A~?T3(yraHi~1`mR>4k5u@i->UyFrl-bzurj{fQ6 z82tl1cpwF?_4$_E;A9mO&o{Ts5z{YY&&=ARck6a!DdVG~l;69B=&f0{^6238GG88K zFd^ubp=#(UD%r5+aXgStcQrPF+;1bSZhp?CkpgZXGKxaIsY(mwOZtyjY+;Aa<1D`) zAFZ}YGaoyK}rJ$?1!E1Kax0l6PL-ZQTXORMVk4l-nUwqo z$_@ErJHL~ob0U6=6PnmM0CN>u|ZCFP%cqYbt`Hh5}?RrI83ycSzwnd;k zRK}6rzCLEY&IR{X44a~paj1u}X*wB8{rCgMSy@6dPvR2pOJKF2;w?uPGrUnNg9PQ0 z+VZO|xI|?WZllZjdVSUsxz2AmSzb?k+V5d^5v;6YQLTKh?y(_GCH#W1t zn14fh&D^h!Da)EP8sVoWs^2I0R>5ntyS%eH>AbcfB5SRXFN~U9>R69kI0&SWja8wqs^_-^fCBoDRhrHEI^{ z%+07kJS-?v6oK*FObokh9Q2&=-|`(tR+^czVR0pDHUbzc$}uZ|4e#Yax0JZkz?ATi zM1|ziP6l)2Xd`oX8%YMPUxobYg+_?$Z8*c|<>0p0sJgp=q|3p^5tD4gE6g_&s@Fy@ zx(Q^QSs8iMVjHe_jcqyYDpk&Td(M;bj=T^Fxo=u~it%lI#e%otb$f4l&F=oPnlCZ; zYDdkh_L?_e-fCm7b7YnHu3kn~VGNiOaE}9{b>)hdjh-1=NUWha{OYZ-? zUj~g1HP4wZ>(QpsqfMhnb_nG9J$j^_$j0FzEmM?`!g`@?;b?`mk)ZBbTy~`cg?&eZ zZl2eW>IrBymak1pJ#z79nh>6=8;nl$3*>1&6z{DR@6jAo@ra`ntr|_V zD=&ihnQSlU~-VjEoq% zutMJliaWL?Pm&LB+PZUYQxkLvKR3EibYWK2gGCYb7kwkJ4}s`C!!)$j>@t_aKA3&= z^a|*w>)oK=78C3+XqEnTB`+%8ni-eNOjh4A!IB}`7FtqkGDEymmXJd@O#Nh(E>34G$5ou!capQZ*E^pqdhu1bcrpWKWf?E}Ggzq89KyQmzQ63Q@9&2} zRN{An-wA%Bi=7AcRG6ej!btTTuF;4n_5^jj{2DH1+wJIqwkK_C=?Csew3-}{Wr**J zcS^>D2P{+^?`sV07^p{I=QqcpR7o+YN)hj9s7^)nm9+LpXpOsuwKKv$efilR>9gNh z7TSeGyREd+OSum;f>{f5d+~^bw43^CQ$gx;-`7V4*}T4Qj7z|zPcdf-xg2a^e7_g= zw|vx$q_eiD_rSd6#`ntj{skB#3(mAFNdY z9^gscd^NQ?`4tXR45^?_+J3(SrEyi)9&ce?X8jcq;w8ER>tDgI8Lg%?DT$bKf1bE0 zH|OdLvh^A|mM#r^d2|Lqv0O^~h4<|VGIjUOED?9mtV`~sFeu~-ZKPcz4EZShn zuL&7IDPvA|#0iN%|3W;4AY$*rEeV7+(9?=^RBUQm54akd(%PYbNj@lY)HX6)Mvz_$ z)y6f|f{>uBWMcA$%5Us<>|Ic;WBT@tM?ngwZyx^M3V-hfTM3~hih%Qkzl&2&gxOc$ z?={$crS)a#C!@+xjPRO^TV-ZN_XNQC4*+^NSFdl8@Q4jqSeBqfTlF& zdn??{lXAe_U^8q>W+F#Jodp7}ZNHw@QLY)>O09$6>Jb>-W>^Yf4uM*j+sa@rF_?I~ z)NOflX1XhcJZx=oeKB%eXX}M}+F9n=`iu6yNvcgg zzY$f%b?Udv?FDw6fB~c`NS=?uDBcs8_=i^5RFxF>V5HD|jxAX%_2$CPd%^Oufw-{qUa-705?kR6(%0t%#h>V#NPbrP#*6>)&v4>s zf@rL1HqOJd3_~*v%`h~>PzAcXV=Qe{nLT<6ZWNkSlkkM8CdvsMHT+L5S}`Ko;Py#6 zxJ5gG+tVC>WP=TaY!EtU10fr1IAV9UYiuy1kdy-)>3C`moqzkjgqUa;#NLep>DZhd zH5C(W5uOJ}N{$J{Ltqyv++BPxHdYo^mk0z{AuSw7$Y@BZiJWM_}VK{D37W-Ao zUl;P%(hF3PYk}5eLRxE$JWI~`RRZzE1>}qka*c>sYX%C*(5+!|j?}9vH*NUH3W}33 zk^bTNoM?r)5iLWh+7Oc9LJsQ;hZRyS&nIy@_17`|MpB7xO`!fP_9=g#$_q~D>z2N5iA40vZVJOi(fzE;@~`2( zT=fe`UNYyyRj)*lur<_zM#;T+M1#11MvP6gz z+pt8ALW?OW<^p0ain=bYRn!HKT5d_bPmAECEw@_^sHln7Tb|qmfvC-=G2yLhYA#jHrB!pOYA$)rdX&lq#j8e@s!=61 zYRgVPyXFhk=L_EF3q2~6QF_NNRL3q@$7Fji)JR>hk=nA8Rn{yLs*YWh=8#^f)?buX z&8p8AywA0sOGWkBXkRz`e69L?ZO!wwYW=k}&(~@=uC3v?R>N_v=J~pA)?BNaYpdp3 z)m&RO*Q(~)s<~D**Q(~`3cFT=b8W4#Yc&zq)m4|h_x3lA0yy1USCL2o$#a7Sc+V%~Y5@uYl6pOr&i$dsPiaIp|t$cz(cyoE- zOFWtxncd%__Gt6QhrZPc%Vu+jmM*kKXeE)3Q{zskSq&(Q0lY$LQlgOjTXNt6y-mo) zm6s%LsLqDxQkb9zI`juqWL)$#T$NBjBc$Q~(PQDJ8mjM+)HBrcXb&DLt*uMg=m8qq zb8BGstTD;S*9TLhL@CStJup3JXXT-24c!h>5DD7!>vItPH(rP4>Fo~--;2Fqn(NU$ zvXgzeERvdV@>k1bmSVcl1Ew^}V?AEVKU`1|tZD@ik%t!>5p%H#)1*Qfc{yM|6naEC z5I^0R5ZOQ|V4_JVPk|od#P4=Uh|Gl6(2y~Be*Q&h5wN@o{o~s= zUV@&~C!x*^FDK3WjhQ~GGJ z62UbsT*iyR>?$dr*8UL5DMyP$L1}L>sFoRQwh?0Pd$3Zy-ZH$3y-WHvS)W~u+OfUb-iu^|RkX?a5+o?4Rd&S72)CTZERX3~BL{2S#iS z{NARmcekTx6yA>EpAG)nz^^ScOvMW#3g2M`!Vq(vcMR-gRVP`(y>h{#(y=(#QbG|Zqd#lFO6WEdI_&n0^1a`|=*OVjsM30|mS68qlm$P3dmnT5hO z6gD!#ZpRolHq%kqLlK5|Rg$}Nxq8hV0%&2T;T|>mZmSom1A*R-*~RsCgkF`jLqmR^Zv+1LP_mwNC!Rk~R-Nk-;U?(T8EZKWyKsL>!>n_*H}duZZ@Hs;v9mU>pXw`S@b&kX1jTN;~QMY3&*I4DU zqBbgue01os(jw32NxYLMy6qWxL`PaTc>3<$oA18<>D`Nuub+PZ;%yA=>}*Dz+i_gGTtKz^6mQLdVkBBH;(NFof-Y_r*i~#EB3RDvan@pg1=;1Ey$&K7|Y-FB9?msJ;vcBReam%~TududHFoy~j z9ZXXrf(c55J*)l!1tjIn=Xxjt?0G6qvxs|KW<3Q)C?|ajQ<;xaFrzDWR7fyfB0gkd zCX_%?-TMs{_DkDE#9SLHh#Ly(WxW5QGEmI~r7En9raXn^(~Obis!Y3MYh7Z<-jk0= zHrtF%qCLBXh1Dq;00#ck7w8z`@8^(mUP}uxM_3`CL^+Zm?vlYx*4>Te4x9Wc2%u0A5!A*8DHIoM3Wm0>uvcL|>(7U$;7wbMZ`wz;nC+OEXj z=e~xd7JFa+# zR2;h^l^ZK+^BK1%WBG^fYE?Tvyv=x~0i@pXQ!qi@7|7X9R*9u>uu5E>&xkm$8aSp5 zIVQ1)*RT#^yxfKGYZDjrYio6R-vJ@Y{@t(PrB)S_M8@n7Hj{*mG5t%QdoSeeM+s^Y z26w1zT)>%VoF*8xhdF!G0;^~rBPG#Qps7P7qr-zv69RO5YrdxV`!3>I);G6rr0bH~ znD5X{Jmgq+R>=)TV(T3zb_Jr6_AIIWGdk9gc%KU>J*>S^W_c@=2}_Q{RC3EEaom&} znc`L;3;;dmar@azI#>mBNyn))k^7{q#Y~Q^(k-nDotnfaf#qU#h`)MX(H>XMkV+0^e?Q|AVj-S6Y-A-wjqBF(F^4&(9gir{ z?~0Xc7u(cRSAOAM;VE3+8U&__!Cc;oWXv)a39eocz5P(AEJk9b80BnuGRfZlu`db@ z=9TDx&A&q6P6;6r?GCc8aD^LnjST`!<;IAR8-m@-h~w>ojBA#iE_lM5L#DV=inJlWZg~Q5B!21qbRqd2-x!NC0s<`y4fTI~O z-i6E#azC4z+<~+(f`hnH>{2n%u^h5zsxBiOM}kiZbKlvz>9^A zm<`2r|vC1S#pr2 z`I;3S48peSa9eNH**rL}6f#)tg(?!;P{2yEt_?oGP(Pd$@NpFYCUBdF)gPIuAKk>kon?6#&1JjI_S_b z+NDk#WL5sa!v>3QS3GK-HBy=1l%pPg*0fy+TKcM{uz)FClNgry?>b#i3YfU;te~T& z)Q=hp++g6&qXx~aGjbMIs$)fr$iBOQC_o%CzvVE|?by+3RVjUyh*AsJBE+eMgBFo$ z7x3pH>T8#XRy%_~kI%y^`193yxQf^QEW9Ff*G0Gt3$lTgV>pk8llkdNjNu%{kLtOJ z6W#b@bv8!>5!iMAm8B&Yr|<;mb$6@$Ca!sdGiF;0RnCIDBIXRaW<>%^sf1Y(iwS>E z7%JGJ>+=W2lhI#>0rWxIUtR^_T-je<1(RHXm*xst^aA1fC#)m$uD|T3L3i-Dx9a+{ zevLoFYYgWf{gq4-UdA`wn-f3p=0Weedwt?(T`1}D$q07yrDjxm2}evfz6>+?ht;%+ z=O=l15wGCiPjP>Bl7%lIC=1`lo9?oA(Vd02@hAB80)D-NuoS}T@HK>`5LSoJV*g$L zZP2BEd;aVGE&RrR!(Zdk$+P}o{CM&!A-Mh;^S6RmT8n-SCTRS9#)a#oWU7$M2%&Pk1;s^Lbyzu;%>8=Pu2bzMQG&Ct|vBjt0ZwC;+nXt$yNt4a@ZF z(;p{ai}m@R@%O#2yU$O43}3=8|Lfi;z^}=-XJ4PkXHUZ)!v73k(kfhq^Yg8?#^P_) zT1~{}5^J?}rDobn&BRKb#mnv*Hd=qtO<<8O;A0L!Nq9p;T%uI+I{wSaLuE~T16>TP z&lB|-!1_yjnk{nw+OS04#C1>m?p+&p%NKgyGJsX6rH1bp@kLK74?^C?pZZ!Er9w%- zkvf}oFMC(rO}K);bND;!zJTwy@cjb5-@^9=e1C%P3;6zYu10pQOESq`E%v?zf(KM9 zO3#GP#r{~!a^uMIb2H26oIe}gT}R_^3ICysryKZh7JU^~(WCGm@Lvt#N%UuQDh!-x zhW}JCNAi=`eB?C3V$xvT7p;stn#5Qf`pgOf4*g05ne6>4ZguNPM*8Fd6G*?sz(e3p z?w#cmRqCw!!e-r>)7nF2Il|9U&6Ld2riR&nV2S@BjSh9yGEX4huh@1<4F{z(6Xzb| zpvXaLK1GMk*XUmpxheYLpPXI)*YfISR{f(+&d>g?eRNMQGuA9wgm~=7%daYz-76SN zLR^^s*2ac`!tn~Cxd%|QR0 z@ydWfWbz1P6o-NxL5l5orBmHQ$c>c^McGKSF}Nt8`7(jzrcQ4rz22O5mWTsJYEpg5 zaCO&ckaRaos?=M0QPzuVJJzlnS?>x0SHXnvJ0_I=6{P3M4@iBbO5d68TUqMP zWH(+^9a7xSknVtF*N(oQ9l>%$PM08Nyax}&@9#Yq#H*{=?;At(I}|$eq9o3GH8R+X zxPl*Fof9}?jSTpjLLQxm7NhKA{OFv@!>06BVF4d&_?y7r1yllSHGzgM^va&G9z13} zpo(}k&PsR{Rt2tJRH7FTMK2y<;l*^^&H6Y0GQT z@{wpcv=bMvJSPABAMfh(6Fg#(@J$h>6MGayC1<2+4+C+4mwbR{D)Jv5A$uCbkGxI+ z%+3092BbNhdNR4S7f*(mY9yomn(KVD==hPGu~Z(GzG4|E`OxFZ{fS(m)V(?mEP6MxA46BHKF-JB%Ndp`>Nv zb+%~s)av82j<5C!yA$CD6Mt-L|u(6Tp#46 z&^0k670S$KO@Vo>Pf&HbrU%YDZSu~lbAoUb5E-x>GZOQ=Opc7=G&T<96ajqeH3{l`KQ9Mo;lLV#SI@nElmf$f|y-r^HS#W<} zu+_swqHwSy?*N3j_#^;55Gem_NpOdSl(amVNpPX7cm!7>5jD9wT}`ff@l34CGc563 zJYyBS=U3rXZx#d`S%@bsl-mh02fLp4U?yrg9r4i!Q5%)mpoz*$?kLurvH#X1w}d2* zoX-7q5Y4qMl=MgE1TVr8|BQ)Cp7;h6-?$T_khL*@sL~xD4e7OUn)j%(wUT1x5r!at zG%b5KdgQm>w2Ux>i=JpizJrso3P;0W!X|M6lgP(!fxc8^q5>0zDp4&GapYmHQI7JL zFo8cc=APl#75u63p1T0f>pH&bC+MOHtpXCniD%xJf%Sr)4Ae2g^!;lF{up5y{grgD zbjigKtMF0?9R6usfK$%H>eEV)Qu1^`?MoOI=6lV9rBupwNI+o9`il!9jqt;IV&_I(3k@4Oi}OC2-~EB zak?&9+aOF@?JL=>!++yv$~m2wE!w4|c3(OieWuJNv_Rg2a^WR()J^&Z-J5 zwHJ~7|6|&Z2J0Ys00tNN5(a{v7#Rn^PJhi!**d;Mu>0>JDRO(iL`TC=4|p#Eg#SPB z&9U)+vA$(`1)mQg+X=7w5VcCqGaSY%uz};;0uORJ5OM2U>e`m%DMlJ7eq68Ske@F; z#W6g1kn`tA4F!)o5&Ld|6u@sV8b{J39#{oY6r7%pDq6M?+1JX`V#W3C*o}{$9WtYI zC6RMy1}MxTUmNTjC0@ZK=P<&2uwIcx6}nI|!{4ESR3?L&;Z@mBWe8bNW&N55$brgr zUIMOz(%sAUR^YR%L27k>#k2P28|2P-mSGNTKZT5}G{M z38vOv5yOzTSINBigkP3- zC!|>|+-)kIjW}9qFtK9zgaGr314P;kEl-C$j^t=10yX8pbDiABIPD{i$^=Gq8a(O$ zMk7RCWK@~cYNXn>VNpnYh~{;M4bff?j*>Slox@o^8BR(VLJeJ8j%3-V$L`GGpcg?3 zY)3E?N5UA++(tr_x@80Py5h=Lx$+g;Kk6Bzaj6AHv`(*E*NMS{q8G4(On%fB-OV`0 zoMqDaMZ630)Lw&;3{%EQx`^H$$}T0I4ysA{*@>g@R_*w<>zICOYAEaM;1n0|OOAl- z2bPL%7Hdj`-Bin}YaogUUQHGE9g$itvpAMZbCD_Tuak-B zT+e%%1D{T&;hDnJEMr%(ybL4DdnXDW&mxbj)MO||jpNTu&Srg{qR_K-WxJ1B<`S>T zj~O|2#;Lh%%rx(Wj+wTMSo?rbAgA4mdu~)CJo#xAar&UwWTc|H2v4w;%haoD;V7Ay zOCvFodBD+!F?+gP?%~Gvl+345m29Ms>H$toHe>!6HJPZ9ENrmihlxZ`#dey?3pwX6 zydWBdXeVb~z;#>#GduoTRYKJ@`u7wsLW6O5E>_|sksGS!N!z<^}hX>g!c%2U^I#-35g zMhtzPult0@qhw0)!Z0RVhVnWS=e-59ND;T1xaut_M6o+`dhVptOs_OhfP9x4rdXgH zZktyjYljF*TK4Nx@`zXVYUUa*>*uHB5ijfI=o;@3nTIu7mefPc({8!PXFZeKjHctI zT+~`O5_U^R zqpev1lLzgP1%+fEO0tMFUjpsP1w}|DqbpOF!5!CTP?0$b0+`&0$&5*zt;<^oy7M~Dge!j1Ix zyxYe53r>aOQ`+L4+hvyj8eNs?!p8I|XA;oo^Duujg($?K)m8@q(soRhs2-|BwL=j> zOdA@}anE~ldP3cJ;^}7_G=0atSne)u8jN6^gk3VvV=42bNy9fMoal}|K4S2;PmX~z zLU13OfHEPeayPCiDRAaWd|1?DcNr!$m~RBcY`$#Aa`0v20Qei3>s0Zv!5!AzFQaTd`&iIpy;gH4hICSwA$c(7Ns9R7|iVvjDXp z9)d{RGHWrXnSG>%W+Eknkw<*IBLT7^#z;CZWlF*D5YmkLBCx3^d;n3w)iwbY<3n+_ z87Pp;CdF&%gTCCj8L#jfQxYxG^O61lYJCxfN0*sb#6vvi(qsUx>M)F^r}bsy!|)v@gT~u@P5zMu&3hj{XD_ z*F5;ynWr@mg>$uV0A-~AqHBKJJ>I-PYc3VkN z9se0a@Ylnyh7nMpYF}e_bkDbx;^bS0loj8)#zLV{3*m{XcuRs^+>? zQV%IxA%x!^uu$D{dAP00?zP`|$x2KO0`;A7UQeZ+nmN0>%F@&McXHg!QU@1s(coB^ zjb0jOJSq;k!Us}h+bRU(VlSD{3ptw1(1UBxpJimly{$FziMOzqV~-ug2KPCz!SpJM*{9;Txul zbCuP5XHiSq?nA}oU~4!rs;go-M}U9v`~LnR=i}xXvpaxT@$>$EJly`#tHf-Z0F4(- zKojK0kNapWE#QdQJCu~wv-c=zZiVkpvtIltNa7M7oe+9!2J3^sw`QB71RDU=v5%U{XH1QSCiVA2)g)@yPrL;;)vg9~z%8oF2-%YjVa1&Cd9rIz4#Yx~7PB$~xv7B#HI8@r&-@ z;a?y2*4@FMzxr!0=?+GJ`D<`88a#YF5>rNL9{m;5eD#;FD9u-Y!8GIHLot<@X8h+d zrg{AE5v6%J3Qop@(W5_hg2%sQhQ}>a{54rs=4n;!n`V{r(3AN>m7QuI+WVNb&#?@$l>0zi!Xg>>I7g@EJC!<7%&UsEHrtI%O zai*!hu(B{({q{a_Nir&YGnJI z(?EaebW`T`nHIPw^qROz;EFce9B`#-;B2nwx0wFY4e zB>JU4`U=qrWHN7f>-E-yYJE}FCDb+!LQJt}OEDHHmTf5>@f0o03aqxUK;&AVSd>KY zAq&B5EPwO;jCviZ0cc-$II~~6&Ma{mG7fq4kKw zsEu91EzkDt60RsuMmN3!Z?5@{Av|;nUMve(s~KwhAfH4#Yb`*{k*5|yuSL9ug`XgT z3&~vVo*}F;qJ6L;xK1{kr|BpfT2SCi!T=XxHxPDnx|rMu+~wKcB>Wm4#M6+*gH|+>-f5N+pofB@n!E_zrrW;*G~{V z`t@n@;K4Kc`RsJf68{?eue9`vvt-;4_z|QsBM+F&3t^&OC-{Dbrlf}%uJ3Y=i-ij1Uk8E>Wz`|D9X5bg8po^aUglzQ zq|>F}P3NtlaN8h$!5`q@SE62;u?#^(twJyK)C%PvZ%O@}L&oz7_sq4)1K85!AG9(> z5xDH&w_20%p{+>y^*5%{7UdZSUdx3P{{J|BSgE`TU9*0W>Y40KX|*=j37aDGhn ztZr(0LKtVr*bLW2oh)C;zQnjxj1Zm<2jXcpL&c|hpgwr)1vVfliSP~7htQa$F=zPv zn85fp(x}*qFjSaMuj@#$_EuB3(P32qB_Q?S3jV1HlLiqI?z5bJ$WIJkbW(2y3t-Nj zQ)vYxMpjQFv_qAt5Nq)}W6rdAxdajPl2{0Cqi;m~=enx1#l~Y;$qdw>;pJTBK)5rU zrL^>>x>9hYX#o!ddw6L4?V}N65HihbF-wfvtriG?mQ6U}{^G9gDqL-MeXOA?U&~df zN7&1K=vrGwZkKt3zTVGl+_2il4bwp(aCy8EK-O3y!Zr%^2N8+()xvKFUxiwYj8C|` zvdAKG23?ynF=gJ2p@vr5V9R=^c0p5H`FDW~4_kq}8ByGW=FJFOm6AtfFIldxl8dy? zW*(1Yi`$~yDGh@f$(Qg2t7Dn)<$*J6Y|b6hC^evbGVPI7WiiU`(i=_(*J)C%%M_C_ zw<2uMX<#BFx&R3j5x5MOV!>36{H4raJ;@0{w~}asxi+!v#B*8Fs2wYqijxmj&+kt^ z%zJ@9jaIk8)EQuWc27cW@cDs?>ps0rXN`(T8X$}*YBHM8C>JC4babJOgmEy4r-mUQzN2dyBknt` zae8@oC;jdjv1S+8soI2uvS}@nbR-^TfQ$e)%)%_(86RwQb7*#;o6Tu8igz;Dn(wlH8VDxaNJ=^vssb&>SQnrccwm2ZR!K{#8FT>Cb&8e=o!p0 zyK8fHr6=HC5@x-sTdJulwR!62;W|W109`QAyk$vrm5D3PRj;yN z)8*!MF;Az*PN~=M!K5$t`gnC%ae_?fPd z{x=Epw5J?OB0rs28JYo`LzpE1du18Zorh!8x5a*qfRo3K6F0X!cuIi6mRkFx$T-sb zsd3$w$(*tqosEE@!0r7spMQPn-QUY-7=E7rCO)^9 zZwOLKU{;0RDF%1E(ApbQdZ_3x=p+8%9eWL$?Hzvr;!H1t`Z!IGDJMPn>y(}d7ebDh zIdDabECvpWjBRFOJDcbFWa5{ocr%~5N2ka5-Ji>VSbwQe>0}wd!E03pcRyH!=&maB zOZ<5p;EWV%7C4PqK_-1_PB8R|=Wu6bt|y(sOZ(`vbA_E3kCZ#)k5aUKWZyOgCRr&| z;e=Bwk;isyg~?D+GlBcKRMbo+1>?r^vqI;_m$6+RKX0@U$T4+<(F0O6oRm!Lczjw{ zFjk#goR7?3_7**dyaSj(ggzo2sW=|mZ)CuSbT-Ek{5#*k*!`Az&<%Od zr+TLCNrnNf5|gr+N-w3;QW^q1=;jWb&=I4bD*0VbS@ z9u~cxq%(5WNFrsd8?+v0%=Q_2--Lg-sthb1_vN!WorQ2fQKBPnZ+9=P@?c=ZgqrtL zHe?$;N?ul3ob=q0X@sB0Dc>EL?z5T2J~=(XmOeQSgf5WoK5c!vn5^-hQJ$^YLZ14` zA&Yo@KIN5}q3j)Wj3B?2VA)!P86oo~F>mAW>ECQ7@@!&V#fuDNT0VgJnq z28$wymaw=aS#fX=&AbjG3q-?J;G ziGT0RC-qFygOz*~5+IVeHjpwLd1{E6$khm@+Va^AaKPj<2T)4)gHw%FqA+-r(@^qW zs2oBLy3@cv`}>EJ^KRgOAP(ol;6JP21bsvTU)J;f<)J4YP~Fa+2>cWK>xM4*QnV6{ zN9-sTuA}i~9mx!KERM^-H{p%juP?|F`s@WR#63XxqB6G&7lnk7N2%a$@G+mm)YJ}O z6!$m<6SqR4pHCeMg?=7HcX0m}C@hVZlXh2*Xg1<_Cddi@ju@Q`HzSIyV5`w@CfGvh z61rcapm)W}5Bl^|z)GHs5wq;ey!2?IH$;bnySs_D^V6GGY^(_6KmPXJyC0=)BR#wV zYX;>aSX)umd2&sd$mkh>73O{O;++SvxU?}gyu);nN{+~^h@$l>t6*es`KD!w8eQhw zFa+kvX06I%hK6@9p8fFp^_v$je|r1k`IIYXEsIOv(<7n|96Na`y0?I1bKa?ojt8TQ z_4nXtg`d~~iGhcOpd_=Z5E*ZaJUUJ{{)M)9Wm>I(2Bc>D*jNEkCjWK_A(qdIIa;xh z039=?=nYyM_MAb@u}D;0)?%5orcUa0^{kj92^kN`5T%C*+W0?|d9%qDBCTC$f<~O~ z^XT~x-~Wh{TgC*8B=G@nub1=U8lTQ&iVzW*WP)|Mgx!m)L4{q_HNv?w30d608VngA zZ3_nBL{~mX943yg>v-A5ma;sA+$Uw5G>8GQ;yweG$_aE5^~_*n1`#AzYuvlY@}%5& z2DWi-1L~DB9b#l@rEQfqJ+>CO>z5AHDgxe76#efXa(ck_bcDYT(?R!NSQv8&9BPd; zmsztyZYxE!-q|9Sz&VaI<#K)lw$1fIB^(sRK!MNsT0_63{3oZop-FdZ`lGc-VCcP_ zmDx(8(y)#~Jh|{rfb^bq97FZ4Ulj8V4CPI-WItt=2M@$AU$1Qsu$ptJ`GlaR>Qug? z8jxlPFQy|ABl3^|i$?NN+TXHCoMzIRe_50$5dRXmH@TTuyI6UCdVl}baEOq;@P`~) zk>FcFf_Z^BZ@gbQQk-QPPPjnJ9`YRr6fbX7u=^BKdaPZ33}VZVW>31tKlu5h@OhmH Rwtg`Ae*t=&-^=bq0su1(6X^f| literal 45132 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�` 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 Q=NvWuKiyg%C!|;c0B^R{X8-^I diff --git a/src/canvas.serialization.js b/src/canvas.serialization.js index f7c53afd..077295b8 100644 --- a/src/canvas.serialization.js +++ b/src/canvas.serialization.js @@ -56,7 +56,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { delete obj[pathProp]; if (typeof path !== 'string') { - if (obj.type === 'image') { + if (obj.type === 'image' || obj.type === 'group') { fabric[fabric.util.string.capitalize(obj.type)].fromObject(obj, function (o) { onObjectLoaded(o, index); }); diff --git a/test/unit/canvas.js b/test/unit/canvas.js index f553eaaa..0fac6cdf 100644 --- a/test/unit/canvas.js +++ b/test/unit/canvas.js @@ -878,4 +878,29 @@ }); }); + asyncTest('loadFromDatalessJSON with async content', function() { + + var circ1 = new fabric.Circle({ radius: 30, fill: '#55f', top: 0, left: 0 }); + var circ2 = new fabric.Circle({ radius: 30, fill: '#f55', top: 50, left: 50 }); + var circ3 = new fabric.Circle({ radius: 30, fill: '#5f5', top: 50, left: 50 }); + + var arr = [circ1, circ2]; + var group = new fabric.Group(arr, { top: 150, left: 150 }); + + canvas.add(circ3); + canvas.add(group); + canvas.renderAll(); + + canvas.deactivateAll(); + var json = JSON.stringify( canvas.toDatalessJSON() ); + canvas.clear(); + canvas.loadFromDatalessJSON(json, function() { + + equal(2, canvas.getObjects().length); + equal('group', canvas.getObjects()[1].type); + + start(); + }); + }); + })(); \ No newline at end of file