From 26bdd0de695ac9a52aacc8319de87f12ef41f530 Mon Sep 17 00:00:00 2001 From: kangax Date: Thu, 14 Nov 2013 18:47:10 +0100 Subject: [PATCH] Remove `setCoords` in fabric.Group#render. Build distribution. Version 1.3.11. Closes #979 --- HEADER.js | 2 +- component.json | 2 +- dist/all.js | 11 ++++++++--- dist/all.min.js | 12 ++++++------ dist/all.min.js.gz | Bin 59323 -> 59336 bytes dist/all.require.js | 11 ++++++++--- package.json | 2 +- src/shapes/group.class.js | 1 - 8 files changed, 25 insertions(+), 16 deletions(-) diff --git a/HEADER.js b/HEADER.js index efd7be8e..d6786761 100644 --- a/HEADER.js +++ b/HEADER.js @@ -1,6 +1,6 @@ /*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.3.10" }; +var fabric = fabric || { version: "1.3.11" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } diff --git a/component.json b/component.json index 9586979c..28aff326 100644 --- a/component.json +++ b/component.json @@ -2,7 +2,7 @@ "name": "fabric.js", "repo": "kangax/fabric.js", "description": "Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.", - "version": "1.3.10", + "version": "1.3.11", "keywords": ["canvas", "graphic", "graphics", "SVG", "node-canvas", "parser", "HTML5", "object model"], "dependencies": {}, "development": {}, diff --git a/dist/all.js b/dist/all.js index 18efc8d7..225544ed 100644 --- a/dist/all.js +++ b/dist/all.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=gestures minifier=uglifyjs` */ /*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.3.10" }; +var fabric = fabric || { version: "1.3.11" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } @@ -9167,7 +9167,8 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab * @param {fabric.Object} target */ _shouldClearSelection: function (e, target) { - var activeGroup = this.getActiveGroup(); + var activeGroup = this.getActiveGroup(), + activeObject = this.getActiveObject(); return ( !target @@ -9179,6 +9180,11 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab !e.shiftKey) || (target && !target.evented) + || + (target && + !target.selectable && + activeObject && + activeObject !== target) ); }, @@ -16757,7 +16763,6 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot this.drawControls(ctx); } ctx.restore(); - this.setCoords(); }, /** diff --git a/dist/all.min.js b/dist/all.min.js index acc6165f..773f5328 100644 --- a/dist/all.min.js +++ b/dist/all.min.js @@ -1,7 +1,7 @@ -/* build: `node build.js modules=ALL exclude=gestures minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.3.10"};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",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"];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;_-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){function r(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e}function i(e,t){return Math.floor(Math.random()*(t-e+1))+e}function o(e){return e*s}function u(e){return e/s}function a(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)}function f(e,t){return parseFloat(Number(e).toFixed(t))}function l(){return!1}function c(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),h(t)[e]}function h(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r}function m(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()}function y(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e}function b(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")}function w(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}}function E(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()}function S(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]}function x(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]}function T(e,t,n,r){var i=r[0],s=r[1],o=r[2],u=r[3],a=r[4],f=r[5],l=r[6],c=A(f,l,i,s,u,a,o,t,n);for(var h=0;h0&&s===0&&(g-=2*Math.PI);var y=Math.ceil(Math.abs(g/(Math.PI*.5+.001))),b=[];for(var w=0;w1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sin_th:a,cos_th:f}}function M(e,t,n,r,i,s,o,u){L=k.call(arguments);if(C[L])return C[L];var a=u*i,f=-o*s,l=o*i,c=u*s,h=.5*(r-n),p=8/3*Math.sin(h*.5)*Math.sin(h*.5)/Math.sin(h),d=e+Math.cos(n)-p*Math.sin(n),v=t+Math.sin(n)+p*Math.cos(n),m=e+Math.cos(r),g=t+Math.sin(r),y=m+p*Math.sin(r),b=g-p*Math.cos(r);return C[L]=[a*d+f*v,l*d+c*v,a*y+f*b,l*y+c*b,a*m+f*g,l*m+c*g],C[L]}function _(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(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?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r"),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"];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;_-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){function r(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e}function i(e,t){return Math.floor(Math.random()*(t-e+1))+e}function o(e){return e*s}function u(e){return e/s}function a(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)}function f(e,t){return parseFloat(Number(e).toFixed(t))}function l(){return!1}function c(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),h(t)[e]}function h(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r}function m(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()}function y(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e}function b(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")}function w(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}}function E(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()}function S(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]}function x(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]}function T(e,t,n,r){var i=r[0],s=r[1],o=r[2],u=r[3],a=r[4],f=r[5],l=r[6],c=A(f,l,i,s,u,a,o,t,n);for(var h=0;h0&&s===0&&(g-=2*Math.PI);var y=Math.ceil(Math.abs(g/(Math.PI*.5+.001))),b=[];for(var w=0;w1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sin_th:a,cos_th:f}}function M(e,t,n,r,i,s,o,u){L=k.call(arguments);if(C[L])return C[L];var a=u*i,f=-o*s,l=o*i,c=u*s,h=.5*(r-n),p=8/3*Math.sin(h*.5)*Math.sin(h*.5)/Math.sin(h),d=e+Math.cos(n)-p*Math.sin(n),v=t+Math.sin(n)+p*Math.cos(n),m=e+Math.cos(r),g=t+Math.sin(r),y=m+p*Math.sin(r),b=g-p*Math.cos(r);return C[L]=[a*d+f*v,l*d+c*v,a*y+f*b,l*y+c*b,a*m+f*g,l*m+c*g],C[L]}function _(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(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?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-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,n,r={left:0,top:0},i=e&&e.ownerDocument,s={left:0,top:0},o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!i)return{left:0,top:0};for(var u in o)s[o[u]]+=parseInt(f(e,u),10)||0;return t=i.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),i!=null&&i===i.window?n=i:n=i.nodeType===9&&(i.defaultView||i.parentWindow),{left:r.left+(n.pageXOffset||t.scrollLeft)-(t.clientLeft||0)+s.left,top:r.top+(n.pageYOffset||t.scrollTop)-(t.clientTop||0)+s.top}}function f(e,t){e.style||(e.style={});if(fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle)return fabric.document.defaultView.getComputedStyle(e,null)[t];var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n}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}),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.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.getElementStyle=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}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},n=function(){return t.apply(fabric.window,arguments)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e-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){S.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),S.has(e,function(r){r?S.get(e,function(e){var t=T(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})}function T(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 N(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 C(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t}function k(e){var t=[];return L(t,e,"backgroundColor"),L(t,e,"overlayColor"),t.join("")}function L(e,t,n){t[n]&&t[n].toSVG&&e.push('','')}function A(e){var t=e.getElementsByTagName("linearGradient"),n=e.getElementsByTagName("radialGradient"),r,i,s={};i=t.length;for(;i--;)r=t[i],s[r.getAttribute("id")]=r;i=n.length;for(;i--;)r=n[i],s[r.getAttribute("id")]=r;return s}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={"fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight",cx:"left",x:"left",r:"radius","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration",cy:"top",y:"top",transform:"transformMatrix"},a={stroke:"strokeOpacity",fill:"fillOpacity"};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 n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),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,h=f.length;ce.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){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={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}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,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,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;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])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}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;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=parseInt(this.lowerCanvasEl.width,10)||0,this.height=parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){for(var n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;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}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();return n&&!t&&this.containsPoint(e,n)?n:this._searchPossibleTargets(e)},_searchPossibleTargets:function(e){var t=[],n,r=this.getPointer(e);for(var i=this._objects.length;i--;)if(this._objects[i]&&this._objects[i].visible&&this._objects[i].evented&&this.containsPoint(e,this._objects[i])){if(!this.perPixelTargetFind&&!this._objects[i].perPixelTargetFind){n=this._objects[i],this.relatedTarget=n;break}t[t.length]=this._objects[i]}for(var s=0,o=t.length;s1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;e.length===0&&t&&t();var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=this.getAngle(),n=this.getCenterPoint(),i=t.Object.NUM_FRACTION_DIGITS,s="translate("+r(n.x,i)+" "+r(n.y,i)+")",o=e!==0?" rotate("+r(e,i)+")":"",u=this.scaleX===1&&this.scaleY===1?"":" scale("+r(this.scaleX,i)+" "+r(this.scaleY,i)+")",a=this.flipX?"matrix(-1 0 0 1 0 0) ":"",f=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[s,o,u,a,f].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},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.group?t.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?t.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?t.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?t.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?t.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y;return n==="left"?i=t.x+(this.getWidth()+this.strokeWidth*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+this.strokeWidth*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+this.strokeWidth*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+this.strokeWidth*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y;return n==="left"?i=t.x-(this.getWidth()+this.strokeWidth*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+this.strokeWidth*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+this.strokeWidth*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+this.strokeWidth*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s,o;return n!==undefined&&r!==undefined?(n==="left"?s=i.x-(this.getWidth()+this.strokeWidth*this.scaleX)/2:n==="right"?s=i.x+(this.getWidth()+this.strokeWidth*this.scaleX)/2:s=i.x,r==="top"?o=i.y-(this.getHeight()+this.strokeWidth*this.scaleY)/2:r==="bottom"?o=i.y+(this.getHeight()+this.strokeWidth*this.scaleY)/2:o=i.y):(s=this.left,o=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(s,o))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState= -{},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=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,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("tr",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".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)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_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._renderFill(e),this._renderStroke(e)},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=t.SHARED_ATTRIBUTES.concat("cx cy r".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");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},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._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),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",rx:0,ry:0,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(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.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._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".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 i(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}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_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,u=this.group&&this.group.type!=="group";e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y);var a=t!==0||n!==0;e.moveTo(r+t,i),e.lineTo(r+s-t,i),a&&e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),a&&e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),a&&e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),a&&e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},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,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.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'),e?e(n.join("")):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;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path,pathOffset:this.pathOffset});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(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/(-?\.\d+)|(-?\d+(\.\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.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)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(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;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!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},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length -;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},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._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-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),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_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){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),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.set("active",!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||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;s=0&&N=0&&C-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type!=="group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=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,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var 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;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),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},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Text.prototype,{_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.shadow&&this.shadow.toString(),textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,stroke:this.stroke,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,n=null,this.setCoords()},_initDummyElementForCufon:function(){var e=fabric.document.createElement("pre"),t=fabric.document.createElement("div");return t.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}}),function(){var e=fabric.util.object.clone,t=fabric.util.toFixed;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t.styles||{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this)},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(){var e=this.get2DCursorLocation();return this.styles[e.lineIndex]?this.styles[e.lineIndex][e.charIndex]||{}:{}},setSelectionStyles:function(e){if(this.selectionStart===this.selectionEnd)this._extendStyles(this.selectionStart,e);else for(var t=this.selectionStart;t-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0),o.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,s/this._fontSizeFraction),o.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction)},_renderCharDecorationAtOffset:function(e,t,n,r,i){e.fillRect(t,n-i,r,1)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(! -this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r',fabric.util.string.escapeXml(a[d]),"");var y=this._getWidthOfChar(this.ctx,a[d],n,d);m.textBackgroundColor&&o.push(''),f+=y}}}),fabric.IText.fromObject=function(t){return new fabric.IText(t.text,e(t))},fabric.IText.instances=[]}(),function(){var e=fabric.util.object.clone;fabric.util.object.extend(fabric.IText.prototype,{initBehavior:function(){this.initKeyHandlers(),this.initCursorSelectionHandlers(),this.initDblClickSimulation(),this.initHiddenTextarea()},initKeyHandlers:function(){fabric.util.addListener(document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},initDblClickSimulation:function(){var e=+(new Date),t,n={},r;this.on("mousedown",function(i){var s=i.e;t=+(new Date),r=this.canvas.getPointer(s);var o=t-e<500&&n.x===r.x&&n.y===r.y;o&&(this.fire("dblclick",i),s.preventDefault&&s.preventDefault(),s.stopPropagation&&s.stopPropagation()),e=t,n=r})},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.isEditing&&this.setCursorByClick(e.e)})},initMousemoveHandler:function(){this.on("mousemove",function(){this.__isMousedown&&this.isEditing&&console.log("mousemove: need to select text")})},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;var t=this.canvas.getPointer(e.e),n=this.__mousedownX!==t.x||this.__mousedownY!==t.y;if(n)return;this.selected&&this.enterEditing()})},initSelectedHandler:function(){this.on("selected",function(){var e=this;setTimeout(function(){e.selected=!0},100),this._hasClearSelectionListener||(this.canvas.on("selection:cleared",function(t){if(t.e&&e.canvas.containsPoint(t.e,e))return;e.exitEditing()}),this._hasClearSelectionListener=!0)})},_tick:function(){var e=this;if(this._abortCursorAnimation)return;this.animate("_currentCursorOpacity",1,{duration:this.cursorDuration,onComplete:function(){e._onTickComplete()},onChange:function(){e.canvas&&e.canvas.renderAll()},abort:function(){return e._abortCursorAnimation}})},_onTickComplete:function(){if(this._abortCursorAnimation)return;var e=this;this._cursorTimeout1&&clearTimeout(this._cursorTimeout1),this._cursorTimeout1=setTimeout(function(){e.animate("_currentCursorOpacity",0,{duration:this.cursorDuration/2,onComplete:function(){e._tick()},onChange:function(){e.canvas&&e.canvas.renderAll()},abort:function(){return e._abortCursorAnimation}})},100)},initDelayedCursor:function(){var e=this;this._cursorTimeout2&&clearTimeout(this._cursorTimeout2),this._cursorTimeout2=setTimeout(function(){e._abortCursorAnimation=!1,e._tick()},this.cursorDelay)},abortCursorAnimation:function(){this._abortCursorAnimation=!0,clearTimeout(this._cursorTimeout1),clearTimeout(this._cursorTimeout2),this._currentCursorOpacity=0,this.canvas&&this.canvas.renderAll();var e=this;setTimeout(function(){e._abortCursorAnimation=!1},10)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing||e.ctrlKey)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},selectAll:function(){this.selectionStart=0,this.selectionEnd=this.text.length},getSelectedText:function(){return this.text.slice(this.selectionStart,this.selectionEnd)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o,u=this.text.slice(0,n),a=this.text.slice(n),f=u.slice(u.lastIndexOf("\n")+1),l=a.match(/(.*)\n?/)[1],c=(a.match(/.*\n(.*)\n?/)||{})[1]||"",h=this.get2DCursorLocation(n);if(h.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var p=this._getWidthOfLine(this.ctx,h.lineIndex,r);s=this._getLineLeftOffset(p);var d=s,v=h.lineIndex;for(var m=0,g=f.length;md){o=!0;var T=b-x,N=b,C=Math.abs(T-d),k=Math.abs(N-d);w=kthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l,c=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(c);var h=f,p=r.lineIndex;for(var d=0,v=s.length;dh){l=!0;var S=g-E,x=g,T=Math.abs(S-h),N=Math.abs(x-h);y=N-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},getNumNewLinesInSelectedText:function(){var e=this.getSelectedText(),t=0;for(var n=0,r=e.split(""),i=r.length;n0&&nu&&l>o){var E=o-f,S=l-o;return S>E?p=h+d:p=h+d+1,this.flipX&&(p=b-p),p>this.text.length&&(p=this.text.length),p}h++}}if(typeof p=="undefined")return this.text.length},enterEditing:function(){if(this.isEditing||!this.editable)return;return fabric.IText.instances.forEach(function(e){if(e===this)return;e.exitEditing()},this),this.isEditing=!0,this._updateTextarea(),this._saveEditingProps(),this._setEditingProps(),this._tick(),this.canvas.renderAll(),this},_setEditingProps:function(){this.hoverCursor=this.canvas.defaultCursor=this.canvas.moveCursor="text",this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},_updateTextarea:function(){if(!this.hiddenTextarea)return;this.hiddenTextarea.value=this.text,this.hiddenTextarea.selectionStart=this.selectionStart,this.hiddenTextarea.focus()},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,defaultCursor:this.canvas.defaultCursor,moveCursor:this.canvas.moveCursor}},_restoreEditingProps:function(){if(!this._savedProps)return;this.hoverCursor=this._savedProps.overCursor,this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY},exitEditing:function(){return this.selected=!1,this.isEditing=!1,this.selectable=!0,this.hiddenTextarea&&this.hiddenTextarea.blur(),this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},_removeExtraneousStyles:function(){var e=this.text.split(this._reNewline);for(var t in this.styles)e[t]||delete this.styles[t]},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}},_removeCharsFromTo:function(e,t){var n=t;while(n!==e)n--,this.removeStyleObject(!1,n);this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObject(e,t):this.selectionEnd-this.selectionStart>1,this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n){var r=this.styles[t],i=e(r);n===0&&(n=1);for(var s in i){var o=parseInt(s,10);o>=n&&(r[o+1]=i[o])}this.styles[t][n]=e(r[n-1])},insertStyleObject:function(e,t){if(this.isEmptyStyles())return;var n=this.get2DCursorLocation(),r=n.lineIndex,i=n.charIndex;this.styles[r]||(this.styles[r]={}),e==="\n"?this.insertNewlineStyleObject(r,i,t):this.insertCharStyleObject(r,i)},shiftLineStyles:function(t,n){var r=e(this.styles);for(var i in this.styles){var s=parseInt(i,10);s>t&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u.length;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e&&request(e,"binary",r)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},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,function(e){r.filters=e||[],t&&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.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),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,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +t.width+'" height="'+t.height+'" xlink:href="'+i+'">'+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=parseInt(this.lowerCanvasEl.width,10)||0,this.height=parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){for(var n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;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}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();return n&&!t&&this.containsPoint(e,n)?n:this._searchPossibleTargets(e)},_searchPossibleTargets:function(e){var t=[],n,r=this.getPointer(e);for(var i=this._objects.length;i--;)if(this._objects[i]&&this._objects[i].visible&&this._objects[i].evented&&this.containsPoint(e,this._objects[i])){if(!this.perPixelTargetFind&&!this._objects[i].perPixelTargetFind){n=this._objects[i],this.relatedTarget=n;break}t[t.length]=this._objects[i]}for(var s=0,o=t.length;s1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;e.length===0&&t&&t();var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=this.getAngle(),n=this.getCenterPoint(),i=t.Object.NUM_FRACTION_DIGITS,s="translate("+r(n.x,i)+" "+r(n.y,i)+")",o=e!==0?" rotate("+r(e,i)+")":"",u=this.scaleX===1&&this.scaleY===1?"":" scale("+r(this.scaleX,i)+" "+r(this.scaleY,i)+")",a=this.flipX?"matrix(-1 0 0 1 0 0) ":"",f=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[s,o,u,a,f].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},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.group?t.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?t.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?t.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?t.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?t.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y;return n==="left"?i=t.x+(this.getWidth()+this.strokeWidth*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+this.strokeWidth*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+this.strokeWidth*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+this.strokeWidth*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y;return n==="left"?i=t.x-(this.getWidth()+this.strokeWidth*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+this.strokeWidth*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+this.strokeWidth*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+this.strokeWidth*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s,o;return n!==undefined&&r!==undefined?(n==="left"?s=i.x-(this.getWidth()+this.strokeWidth*this.scaleX)/2:n==="right"?s=i.x+(this.getWidth()+this.strokeWidth*this.scaleX)/2:s=i.x,r==="top"?o=i.y-(this.getHeight()+this.strokeWidth*this.scaleY)/2:r==="bottom"?o=i.y+(this.getHeight()+this.strokeWidth*this.scaleY)/2:o=i.y):(s=this.left,o=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(s,o))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get( +e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=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,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("tr",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".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)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_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._renderFill(e),this._renderStroke(e)},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=t.SHARED_ATTRIBUTES.concat("cx cy r".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");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},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._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),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",rx:0,ry:0,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(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.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._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".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 i(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}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_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,u=this.group&&this.group.type!=="group";e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y);var a=t!==0||n!==0;e.moveTo(r+t,i),e.lineTo(r+s-t,i),a&&e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),a&&e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),a&&e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),a&&e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},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,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.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'),e?e(n.join("")):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;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path,pathOffset:this.pathOffset});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(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/(-?\.\d+)|(-?\d+(\.\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.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)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(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;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!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},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},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._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-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),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_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){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),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.set("active",!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||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;s=0&&N=0&&C-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type!=="group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=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,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var 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;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),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},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Text.prototype,{_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.shadow&&this.shadow.toString(),textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,stroke:this.stroke,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,n=null,this.setCoords()},_initDummyElementForCufon:function(){var e=fabric.document.createElement("pre"),t=fabric.document.createElement("div");return t.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}}),function(){var e=fabric.util.object.clone,t=fabric.util.toFixed;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t.styles||{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this)},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(){var e=this.get2DCursorLocation();return this.styles[e.lineIndex]?this.styles[e.lineIndex][e.charIndex]||{}:{}},setSelectionStyles:function(e){if(this.selectionStart===this.selectionEnd)this._extendStyles(this.selectionStart,e);else for(var t=this.selectionStart;t-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0),o.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,s/this._fontSizeFraction),o.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction)},_renderCharDecorationAtOffset:function(e,t,n,r,i){e.fillRect(t,n-i,r,1)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground +:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r',fabric.util.string.escapeXml(a[d]),"");var y=this._getWidthOfChar(this.ctx,a[d],n,d);m.textBackgroundColor&&o.push(''),f+=y}}}),fabric.IText.fromObject=function(t){return new fabric.IText(t.text,e(t))},fabric.IText.instances=[]}(),function(){var e=fabric.util.object.clone;fabric.util.object.extend(fabric.IText.prototype,{initBehavior:function(){this.initKeyHandlers(),this.initCursorSelectionHandlers(),this.initDblClickSimulation(),this.initHiddenTextarea()},initKeyHandlers:function(){fabric.util.addListener(document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},initDblClickSimulation:function(){var e=+(new Date),t,n={},r;this.on("mousedown",function(i){var s=i.e;t=+(new Date),r=this.canvas.getPointer(s);var o=t-e<500&&n.x===r.x&&n.y===r.y;o&&(this.fire("dblclick",i),s.preventDefault&&s.preventDefault(),s.stopPropagation&&s.stopPropagation()),e=t,n=r})},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.isEditing&&this.setCursorByClick(e.e)})},initMousemoveHandler:function(){this.on("mousemove",function(){this.__isMousedown&&this.isEditing&&console.log("mousemove: need to select text")})},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;var t=this.canvas.getPointer(e.e),n=this.__mousedownX!==t.x||this.__mousedownY!==t.y;if(n)return;this.selected&&this.enterEditing()})},initSelectedHandler:function(){this.on("selected",function(){var e=this;setTimeout(function(){e.selected=!0},100),this._hasClearSelectionListener||(this.canvas.on("selection:cleared",function(t){if(t.e&&e.canvas.containsPoint(t.e,e))return;e.exitEditing()}),this._hasClearSelectionListener=!0)})},_tick:function(){var e=this;if(this._abortCursorAnimation)return;this.animate("_currentCursorOpacity",1,{duration:this.cursorDuration,onComplete:function(){e._onTickComplete()},onChange:function(){e.canvas&&e.canvas.renderAll()},abort:function(){return e._abortCursorAnimation}})},_onTickComplete:function(){if(this._abortCursorAnimation)return;var e=this;this._cursorTimeout1&&clearTimeout(this._cursorTimeout1),this._cursorTimeout1=setTimeout(function(){e.animate("_currentCursorOpacity",0,{duration:this.cursorDuration/2,onComplete:function(){e._tick()},onChange:function(){e.canvas&&e.canvas.renderAll()},abort:function(){return e._abortCursorAnimation}})},100)},initDelayedCursor:function(){var e=this;this._cursorTimeout2&&clearTimeout(this._cursorTimeout2),this._cursorTimeout2=setTimeout(function(){e._abortCursorAnimation=!1,e._tick()},this.cursorDelay)},abortCursorAnimation:function(){this._abortCursorAnimation=!0,clearTimeout(this._cursorTimeout1),clearTimeout(this._cursorTimeout2),this._currentCursorOpacity=0,this.canvas&&this.canvas.renderAll();var e=this;setTimeout(function(){e._abortCursorAnimation=!1},10)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing||e.ctrlKey)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},selectAll:function(){this.selectionStart=0,this.selectionEnd=this.text.length},getSelectedText:function(){return this.text.slice(this.selectionStart,this.selectionEnd)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o,u=this.text.slice(0,n),a=this.text.slice(n),f=u.slice(u.lastIndexOf("\n")+1),l=a.match(/(.*)\n?/)[1],c=(a.match(/.*\n(.*)\n?/)||{})[1]||"",h=this.get2DCursorLocation(n);if(h.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var p=this._getWidthOfLine(this.ctx,h.lineIndex,r);s=this._getLineLeftOffset(p);var d=s,v=h.lineIndex;for(var m=0,g=f.length;md){o=!0;var T=b-x,N=b,C=Math.abs(T-d),k=Math.abs(N-d);w=kthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l,c=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(c);var h=f,p=r.lineIndex;for(var d=0,v=s.length;dh){l=!0;var S=g-E,x=g,T=Math.abs(S-h),N=Math.abs(x-h);y=N-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},getNumNewLinesInSelectedText:function(){var e=this.getSelectedText(),t=0;for(var n=0,r=e.split(""),i=r.length;n0&&nu&&l>o){var E=o-f,S=l-o;return S>E?p=h+d:p=h+d+1,this.flipX&&(p=b-p),p>this.text.length&&(p=this.text.length),p}h++}}if(typeof p=="undefined")return this.text.length},enterEditing:function(){if(this.isEditing||!this.editable)return;return fabric.IText.instances.forEach(function(e){if(e===this)return;e.exitEditing()},this),this.isEditing=!0,this._updateTextarea(),this._saveEditingProps(),this._setEditingProps(),this._tick(),this.canvas.renderAll(),this},_setEditingProps:function(){this.hoverCursor=this.canvas.defaultCursor=this.canvas.moveCursor="text",this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},_updateTextarea:function(){if(!this.hiddenTextarea)return;this.hiddenTextarea.value=this.text,this.hiddenTextarea.selectionStart=this.selectionStart,this.hiddenTextarea.focus()},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,defaultCursor:this.canvas.defaultCursor,moveCursor:this.canvas.moveCursor}},_restoreEditingProps:function(){if(!this._savedProps)return;this.hoverCursor=this._savedProps.overCursor,this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY},exitEditing:function(){return this.selected=!1,this.isEditing=!1,this.selectable=!0,this.hiddenTextarea&&this.hiddenTextarea.blur(),this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},_removeExtraneousStyles:function(){var e=this.text.split(this._reNewline);for(var t in this.styles)e[t]||delete this.styles[t]},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}},_removeCharsFromTo:function(e,t){var n=t;while(n!==e)n--,this.removeStyleObject(!1,n);this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObject(e,t):this.selectionEnd-this.selectionStart>1,this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n){var r=this.styles[t],i=e(r);n===0&&(n=1);for(var s in i){var o=parseInt(s,10);o>=n&&(r[o+1]=i[o])}this.styles[t][n]=e(r[n-1])},insertStyleObject:function(e,t){if(this.isEmptyStyles())return;var n=this.get2DCursorLocation(),r=n.lineIndex,i=n.charIndex;this.styles[r]||(this.styles[r]={}),e==="\n"?this.insertNewlineStyleObject(r,i,t):this.insertCharStyleObject(r,i)},shiftLineStyles:function(t,n){var r=e(this.styles);for(var i in this.styles){var s=parseInt(i,10);s>t&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u.length;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e&&request(e,"binary",r)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},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,function(e){r.filters=e||[],t&&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.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),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,e),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 965527e842fe80d89e429ba7cd873f2b12dac1f2..8563215b61a986453b6b125b92113c3040d2967a 100644 GIT binary patch delta 33941 zcmV(=K-s^$&jZNM0|y_A2nd1s70Ryq{m|%a{PR4pQTpx&pBupqk0YFO+QxJ0Y}K zyJUX}S;7zNwMGvXhr_!wNbz0%fnJBd#>522+LAls&5ahGB#LB|?9z1m;n1tLgIhq8 zbr{FAHEb-~!FXCcOGneeK*7f58j`g^hRbw$q6Ce_j9?jxMoL;1n6xOn6T3m3d3k&r zY-+*ilDD_~WK~mprA?MtEHA4XXYgJVXvcp`oRZ+I5_;e7KdZXhyUc2TENy39>2tsT z|HeG`&3VSBvo}?TqktV}q1|y7(2KxT)pP=mk|Z4-75ak zAD&7>Pu9@wDGOpWZn-YnbuaG2jQ~Vkbh9UgE7H!`k}~il1HE_qEJEGpJftM7^|yZ| zvGx5a(tH_kCOc<=n@Gq+cg`Y=puQyiW_-pA=1XqA{Pu@8$L~nU_UJ}EEll=KX33sG zLqkYJz;w~=qXaoD(wg>P>bB`g3HY&(A0M=azDjJo?N8;~ysOSKHJ#;gQh}wL3)hX1 zg9tF}do;1t`iR<7v6d3JaL1SvCN?y><@NI#k%6qrR2t|Q??7|$ zmV?&Ne{+=IL@;zp7-*XP6p`3BHx|PLE8z50D7xrgnpl3DnoWscXd@90P_5_B&y{U| zh=?W|78(1!X$&F~NWQ{Oa~w!>OiymXF5RK+QDisPZJXPUk!4KiD45zX-;T+Jf(Dm5 zwm;VEsOt8C=r)?M1R-x_e^}B@pl~V*Gjf{CHl4MkDtm0z%CAU6Vj+`ebH6Z zB@wmh8^2BTwyBT;ww-%_d{1el2okml(Y`RNHV8Hu=8 z|M2zxVWJ<~Ih$Hda23LSK;qzr)No+Nsw)JBtqZv9-cBOcONm6lu?o1gNe8%E@iZwc z?d*FKOUB)wbPTl>&iY7KxGK17s1!|~#jS%}^rEPtDR-q`1-sUbQ{fY`1|5sKS6@_Z zVCPawMV92Tykq@;Ra}~yck~-*1cM@hFPwULjkiODZdx_&DnPHndN(9oszH~AY3(54 zcK3<(rd13K5se$E@j${KJ5}_|wPM&ZPdCP<55~$}MhLCVrm#XtZGtQ+ox6}1T(@ls>#S{*pld2bNY)s9`g-TZL?$tng<;vV-q~K zVN5S{M951|ENFqlE)PAlOp(W=GOfA;&*0cOC<$@)-t>yqLKjMRYy4o53hmQ!+RDw~ z?KVz-OP1~YUQ$aSR~Mr-AD%C((`-rCMXHj;rU69_w^t3ML@joa_#5Bm+K`FvLwy2m zIy!%lBrG2t$ni^wlYq8%+}Sd%##aQN03LvkzSzi#GJ4YP7aOlza==W!j0;INI@b-l z-Pn3rkL|pJU`b8|{cxg*m_`{fWzy>AdeSC;Yha=He5(a8zI79#a6nF7ccYCv-@W^O zFmCoLzV!}o4espbi47t^=m70R1{f0mdnyN>tZ?3cRO4T|c1&Z4z9$ zmFmQ3He$e?vXp28Y|EBmP^i6RM7Z@e4D(i`YvDYHEpqgn*Sx6+I=pOL1TqeNQ+>hd zV0qKB%i63wgrk!`P8;A5hfm~-+7^(ppvuA~y@AJc=+|16M7_C4bp-{eV8~52fRwGu zf)Kvmz){!0jc|$dJ`#6~Qvw$O^7UK|znoD~^S_BhuU=CDpl)#4hp}5YMZ^-ulWl=70I9v7grdq)0vl*e&a=DoGcwg3RWp#=wanBZn7>80FHy+?5OY`upM@Kt^4vca|{zboR

f{~xqN>Zh)`s-7E^%49#qMraK)@~6NSc4+18!QPzBaNGI2p86 zBebG7jOrC*gx*;O^hyb9u)tqr*$R|w4U}wgdz%yuH=9-->LHXJ#)0VHMnlOI1e~n0 zaHpH8nI@QmfMsZ4$e>>kOl)F}*Al8!T7@7}7AU3=%%OR!LRWOcK+(wHP-x%~b&xVT zF+;GRI3e9C-nM_3Qkiq#ZAz_hX-_BGA+Q_}nZuab7U2?5%@~4F2dFq}|98Holn>fr zj%RGXke__pp%Ui9hc)~^=F{!AkDE;}Lq;#W!!oHgF|W@kItbB?nH%;t6nKn|j(Cu5 zk^(oDOJ$V)QAi$$to)MxFbj}jF!Dz*cG(g~ZX$mO@dkgLANY*S%PcsZuy=BG46W7g z<6HHpc)67R=UVmabQ#6v@LC?Yw!^y1T4hkbPHT~YjNet+y2Q)Y$OK8(>IAk6Kh-%- z?ZP1kTED9qD`15$xV`?XLi)09J_I_e=CQBxZf$v=~})Bqv|SVRA8}6S0Db zUwcRJP~CsmIjJe&f~{?bzjfeHF6~1Z&QdhZtR>fDL6pVP(@tnmdNn%WT^W)>XX#La zX$Pex@to>}7xSb_1esAg)I}|c3JFr#46g?@ALkOKvO!G)lAuWmv&`F42Ft@B<_QYDw_x74RjefGQCvYf>ChKJ+R0 zz?ixpnRh2gNk=`i5&7`?peLU*8&gpT7VO854X;gcf*UP;8$)H}pmal3#2o0p<-;}B zB`k%V%4)l^W3#g3m^gvmTD^0Po4dEIL1HbPEsHB@wd8D0F*Tip^tzuDJ>OH#aV&pD zt$4q5xypV|I@j5f@-3WMdbGUQ{raFtN@JY7nkYqUk4|ZhPHPX1Q5cSb9u?c^moDMy zh!G|<6H3SEkq#0>(j@meRVyoJLar?3b}L(}%8pfKYqPRr ztFmKJS%K}0pOwR_Y=MfiN7O|8x1XxO2|oJRpZExfwc1(Nlyz-qUE5jL=?JAcL=$%2 z;6>M!*H~8`-dlwf?5GnT3kVcMnF%kAYp%NrOMqT zSz7j1gQ^dSkid$k8I5$7KK|pVpP@pXXcJLgX~v692n@Zay8wpna87B{TnfH;q{4Eq zT$}>wI1xXO`6p1gSbuL63*6ZNOWT2yrWDC7p&_|_GT1x};s&l_+pxewp(3p}C_7(ZBVkQv$yt*1EBLpg0o(KUSA#K^LBH-@ z4wrS`{QU~*K9hepm1Ak|n#Kjh#L92A5Ujy=hnkiG0?#+!WKH{uR04nU#Wtk2Zfwt` zR|=XjzW5XwhVP4}AkmC!gqA4^+2QV`#doiN2Z^Ol5rF%o`Lv!LTv+PhG@v6l3qpJ6 z7Ed=w)07AU1z#OQTE<7^L~;RHJ-+~ApQeC&(6D7wFe>nNa56(OKOjXmt>$?+ZF~6w zy~3&?(pK#*Zfh}fmWY2DBP4yB7LRE|ZA7Bjw|b$QA9vy-D^*pSt9gf*p7NdZN}gY?Yz~(FI}AhU#Q#! z_ChfBa^c-vPs*Xt`4{_#FTXW}ukCPr`caM_jOVhBi`ItWpW}aPA$mYoItT}UZ}v@B z4Dfk?-Up|CYbB)=^byhR_rWS7iRe>QwiorKN{zsq!-WSt>03Sn9_Trv+ph>nyjfw`AQwgg9Xp zJ$+-z_F)`1eHt8rJh{=0&rX|a3G*%y1zM}?C4Z4zbwqz6)e*S}5bkLb<$0#uspoV9 zIvdl+9%QbgY2KjgpWObYQ}nea<#+KT0DIHUw#Dm)wS}2q3cKA<_RHDaa~NQSIlyOQ zb<7xP(mV+Oq$S;zdrrNaq&}vU?Ic1tf#B(}yg(%Rq%}N27%4b{m3Fp!Bk?H#q=r)xe^r>vB7~M7 zUKLEr;`6uddF0;fz*`7i?qkrAN_ibgR;B8l6DEJ3v&5%6ws*rKcAANt&=&;|xb3`C zxzZhetsEItE7+6Ubyu%8aEEBmHdgDf%~oMsr@-)wv1@mx0vVZPQWT~NqsP~Jm$xu#% z1qzKG1jDy`gGZP)U%1sQbcH4#A+N+0YCfq-QLJrgv7S`35YiI_EC0X1LXtOIhWSEP z+AhLCh0+39eBLKT#?&}KG*v0+meeYUOp|}zS!i) z!1uC>EIQPwEsB=clyLRjHN449KtI%{IM7!urNOhgl!bkO(CPzf!1FMOwOqcUZ%ls} z;$Z1n1M-zRgR(T-n1^+NtvvXgzcJ5;i#%UCnf``hUAbCZmkk`h?H!s&nL3*%Opj>% z9J3>IlNP})qd3?E^p{N2Le-qZE?w0|C4c3BIN6+!w1rfrFW_rij;byonjdFW#_x6D zi;Jv0-&${T0i2G`{~AB(K~FCyf2n^N!<~8|hSOw!q*E`XGx?8Ksq-C5%Ii3_KSK${ zJfzNdC@GG9YJP+g(MYA%S16e`A!%n!=Sa|INc|uq1Df|)D3}%zyX#?4-{UaYkf(FE zZOF6XFbL<`au{sLbg#pJhuJ?5IQ(8m!iKEfr^1FzcRLt16x4Y(s4fJ_MTmb^Z>u7m zjIAyVq49#uY}`1>MGGoXcX+l>GEj|yUL_Uqa6Bn zy4isQXhsu=irn(j{7`JK)m7x4vcbf(L2^Xd+$Ht4t3O=)eU67a=Gj<}9@HO0QVktR zmJfFs&_Lo11KL&ehQ8i$KtF#S!M5XodbkhF!~wfgePFI)4vfu`&;)Xzbm_HDI5hG@ zlw80pUi#4GyDMbJX&OASO8+az1b&+d!WL1%g9kkpb`=e@h}7}X;G~3n4fgHrtH z@E&UTqQnjt&^5s%_})hm)<~hJJE@1)sK&qUj9$~B-Lcq-Iae>zMI(QV&AzP`>L@B2 zp**}?i&%#c{PF7R(#WUHYuGs3(>yv7Z@UuG%+pQQ*oz%%$MHlY&@b>Xn-4~@Ws70X zx_q6qo=l}S>}9q-)zK_lGy@M+o+HaXQMH`siyE_!iL5`0-LinGEJ(vjy>**Oub^i+jt zg*BSr9!qdkE700BN;^SrHId5Q&fg1lXd%GMyOh9lUkN-|elUOZ7!|0LAz(0@*4PXd zfVyG%SxY8#i1B?zW^}=#OjB2<6n?I-Nfql{2wbxM(Lz9o7#9)(=Wzf4Zzng&l+yD} z?HJb%O)4sITKM~j*&?+|jQgp(=Z5x=f3Dh+UPHNKV}t2JYy}p^1{FxR5I!;dZt)H8 zcFQ^Dcbv|#JxzbkOt|i)yL$Me^O|8CW3rWAm@e-lISB%)A0oO?p528 zz1*1n62NWUAp><4xUB0kARXzt7S$4PkI8^Vp?Sl_VTG#TwV&1|-lcsPqD9!$47ZIm zSr<&S(2Ie*6Em-PmcuMP^D?Ax0wqW5kq#0oo|I^rYg&I|ibDA1#WeR;p00!TZj>NS zimodKtXT4E$~Hn-ED5E(i3E-ZWqpc@OCffj(c72`$EII60a20zYxk8 z!6!5GK~I0sV78fVXN!f!k!9*1hRnCFvyD`ywxti=ce~_0p31A=z2S{ZTUq%VmK8dv z^J?~Lrj)rb0_$iTltASOHF`F37Q{&4)cpSg$&$S5n%ck3GmzG-@B?T~4G z1jj-l4*^F(k1avdpyuSD9_FaaiG2^LP-6Vr)ck*d+ZNB;4wj6A)!U>ZxF)>-rxho{ z`rb04KiY}>uz_MWGCqNmTTmujSQm$Wae5V4=3NueW&JuWhh$2EyqU&hKGLE~;SZ^+)XDt5Z zhVEa|^m4AmS-D(>#zl&mYpz|(S8-@q{A$$CttDM*ZZ*eMTpIL;12g5D9RyG&ys)>S zz~jia_}+@TLyquFxEure2Fv#WaZoabGL(Oym0!plFIEhCz=EChCd4)zG2T^ARfH&ESV|9SSRu6u=Yn+YcA|e- zDsL4U^@$UT%~_!Rw{GvyfHV{9!3aUOYKdEf1E*oIRvqIc&{&0$JK^4uGiIRVpED0=nFO?R9cicfB?<(o(?JOA&Uv^&#B%s)p zrYn)G@b^W4@s+8n=JCy1-*m zFh1h+VwAy1e+RyLXxqWCmcydWFMFd{k=twmjPvW zf3i9Z104nNTs_{H;SK@|6)lyZr}j_?wc$=R@(xYlj=tT76#2~tY|u{C3c@JvkPd(Y zoqO6E?tu{o_vpk=mE^O@NgjXb)l6A5xtMrv;O9p_vcM3}4wo4J@hb{~35 zH1Jel*fvv(jA;{&SfiDDKNLk$i&feLBhfrQ3;3#li@idxwoS5%(X@ZuOVM(QR-{;_ zh|5wveAvLBl~SXfhc%PuXo-5`__RKm&*-dYN=0+O^eGHdwQe$cy>^^Flcjc+oWT`U z`<|MuSlezj3xu7)Ib3_270xC?!LI3aUB;dzr~l#^Ktb2Cy}*%=su zGq}+U)_iUab66G?qh5dTI^kG@7_PQIq;9gM!@2T}a>#2#M|}L)%Mo~3iTtp_3}}Mr z3b{tKmH34n{C@m6P7vkh5_(cxEsMOykV4>plU%R6nv`h6~B_FW5 z;4k&#qWJ((K!*xidW?+e^*=<1(do(nKFCSHGD5T+@ssUh#fLC>#V^GO5#ZofN8Ca5 z`9#9b3qU0?mBN2oQyNT4U?#~w(MM8~id!K>U#)OS*JnTSUjC&9Jo1RfHEeq#_SSq6sS~hEZc+ zLDx8t*nOM|`mvuF{ov>I|*#c)7 z*UK_*n*a6s`|ma`Etvrmiul{a4D@m%>6)8r25@<^zI%=$Npk5C9bwktRfaqXFfh`y z7Vegw=|Lgzh6FiTox+;s-F0?D^x7%h zOhTeC36lMawJ4YDY_))f!p<#4iyRu z3jP^(F;Mg_jg?Tg;1NZKCr^5Dw(bcUfR5-^svJ{pEV^2?c638EZ6(d`klC%G_Z@0m=%|^_J(-nj<7p|>{RBx(zj^yRyYQ$-Qq<4w z&|WC%u&L+Pez6Wj8kRC9v89}lZb|MCy|Xga}E&e{J=$xXu^!UKTz}=xsmjnF*izJNRXUYXxQo zQ3i#t@1c;&3d%r!%fd~6OgBg{OvK}Lq|nC&*0+*ZGG@1-@g?LKBPqccNnrD_L^OxP z2iD44ys7cWF?&sA2dd+Q06-zvoSx-gquIy!F!5bqpyMRdXAvDP5;S#`oO-U1f5xN3 zWc=iDf{u_z!#_QVBT+|pB1+?UUI_Yk8nG`R%%maCi!=2ME>ZK2s?CJUEd2AEE~ zOl)}PTcy{!1Qqo?OX$ymIz<5ckAn?zu$auz^by zZk@d-?s9u<=y;+p)v6RwC7ArL=v^)^UEFMJ1X_*ZU-m8d8pg5#D!s>ndxh}U23$@% zl%?o*VQ3L1ixRxdbOMn(T9(y&ehU5Cc|Uj6EDGqXSi1C+^(wGeET4Z_HHaDBS_h}| zYvFL!zZWoh&U3in7sVC+@uOrFMZg2aF*=It3iaZpDC+ZSvF^!iv2^uXx-MP~dVwel znH>m|?}jW9zqFKDY!W#fLaYVj@eOS7H@#gFAzkBz^*MI%`&1-zLAaa1IT$Ex+dVmK)sPjsyzz7t6;KaKQ zJ$axU0KJ|_n)wPtgqxL~DTIzC4IzSs^cljn=WE`W>gQ1Q@W>C66M=#9&gB6U+t2uL z%71YJWl0=t-Pxk4Mi6<`aPDyr51T$ylPZhW{iVF#+2pkPH`P?-3T zcfN7zJbY++wH3#eN0~WX0gL`DVOWUD09xW-K7g^}j1}7}$X@{+oLAM=3O7HpcA7+B zQ?>#h`U@$EMk(PIOh7dtIlJ3^{r=o{erwon;wG^6$T!9N{3u%0%ibSe|Mb_dzjzn* zb#$@lM{%UL&m<~=ldOm;e-sJQ+ePYZ9oSq)evl%q-Q>8_-1HXJU70!braKCTPNL5u zbfLwUrMWw-d-KSQnMC7AK7NU1eiTKMh-tEd-Wm2Tip3%?r;&UNvo@FXn~3iq(Ge0T zXiBpem@eLMG+k4uLV7zp5d_C%FG8@m=^lb|QOJPLatJ8x@C8gqe@5pY1lD#Ox-9^H z7h?)P2B#0B8as-Hdr5-`p_PcF1qwfM@h!&;ey<=XLO}kRSP_xhE!&Kp%>z$`*rqYX z=1a6e7j^Q&kNP!T`bFG_Wl0}v`iOD);M9zcqCG(iV0-YWLFlb zAwa8vNe0Yq9`UM5fAf47Rf{#nG(~htJVtLY-W$RH=-+scT5zV*9jkPlj8n(vQfbJ$ zRF<5X!!9(2?h;rqSAWl1W15MMlt#3~TOunbE0 z^YEd3#zIg-Y8SMVu0J0GHTuI-A?AzvMNb_Rur{7Wv{Ab5pObt>GAIiYLWRc_2bYS!l#Mlo8+9hVx&nP0^FLiXMO9PGCn1@kb90Q_TV% zJ}jS(jtn9_ePB>XC3+`{CuSXPhGQecv6X=pLqrROVhE3hC5%byp48;-4adp&Kq_;a zWVS(CLkA9JlW0jt?0S{d+zs~gHATiW6wGdN2n~T)4rwV~``YUKd?Qx4;i%V`^V6zY z=2;mTEN-4WXytz!BEp0dlZ+lyI;o;YB}sFUvG(9$O0BTV(s4L@EqxabcwpYPk`q=S zpu8g54nyYG+Tl*qGtG)#O7A~Pola0Sj+|#IRq@VQ3A|@Aj{_aUJvcZ_%rNf7!C@?Y z2vZAdR9vl3#`w=6{_`0B`3(PgGKMRj~HuGlQvYyaokEAw-U###BnQe+)5m` zM5;;|OF`J=n2R8wh$-%-p6|lR;3YW{h|>TGDZEOpGTpj;Gk4+Pq6H!zCq7P$>@Dph&8p3@5`Zbf?kS_R{1L!1;BN_(If ztuB9<`shd?oAJD1RiFUr%{ioIfu=+FZo>z9eycWK=S%TC&sB?P)D}?m&UU@=(s^<9 z^mQd|^f^kNfK-3QhH+A7w|4b(YbhLUeZMp%yP=V)BHV8Aj9-!qLef_>)v{%f(9TZm zG&ve+E`9i?dXVvrcdH``YAWb~~-PMJ4^gw8MIgUc2kVqXJ z?UBKdq91u0i}dDtjJPo4WQ~8<`^V zoMUM`14;{Af3dhRyl2Lv`?qOr1Tgo0!`IZLNGN84Blhb26t&ES(1-;;_~t|ETJGGV z<+dDD+#|+Gl+@xKOT0OGce7ho_?1u;5+EA9{DNmoES5|bz%uO}>d)mt#(U(ePPav@ zZo;X!-(MNP)-wN3cgX)!Ab)3eZe1@Hzkcc|eC#bXe;Q!OG&JSnO@+EiUD=2YIBGle zd55|H;p#!l#fHU>uJuoy`(IxnjlEh7?w#7eNuAoyg%fVi zNh51ef2NWF6=nF|BTcr~hkTNEur1maYG3RMTzh+Lht~s?Vz1%X8h))2Q6RBso9FX+ z-ZT|(>`MDAQDSmEDlF+v12NJmGlCU+u~bx(*Y8o;$S61<@wjq%G(Z>;C1B2m=9y@e+?g;mLBwwjBkf)Wgx8`$Wv@zO{DY{ z=*klIIe@*{AHa=ld6%a`26rt4NmuD=o|>ndq1+N~DB>8~QQLm#shGi?i?Qu9cy$TV z(6t^e55kapy_(=Hu=I8Jv&1PwTIr5Bp5=Uy6LIaLle@ zfAU}uY}!4%;Uwscg$gKiSz_%SS8^R2u{CUcpN_iC!?#Qr&bh7h5#P1qg6DLTRB8o2 zNKNQ0R@JAb z!z$4SlGXU29^D7N$cV4??!GRE?UFP+;m?``L4g!Cr$AQ@NfSzO%4M8V8C5U^mvKsE ztmM#qEjt0N)-WYMRLk{wMNlNPe=B<@h@w~}%`7or%vYp&utF%6$Sf$jbp|J(peBFs zwVFq|X_pfp;)Ta27vs~`!6Y>&q0XHKOF89Ic!W-arJQmpG(@+zV)}aK1k&*YDb;7O z(?E(py%U^enn;=nny^`NQe$Y1p*4oq7^)HNHVm?h9n%SKn)?FdqzsTne}X3BTP?6y zIYGab`T=x~NDDEWj0pqVAe9nm_~zZ?3%eBnAvWh(KDH-6z zf*WWlN=zp=72>}vlLh{%e{T~yoQ;^8Voo832^<}DDx#LRBv3aZL}|<0TXyPUHoFUi zBoRtl=_olJ%>Eg&RH@GR9S=(kRS@z*d&7i4rTJEp^(XQU+9Rd_Z5<^mUCpGe^0@eopKce$u4tm9) zfh^^q#?!Fqm-`hQoKzd!cv(MXV7d&Nb12}G#C&E%>6;6Z^-jBFbME5h1?m;T#OUs& z2=E`b7|#)sSgV52Fz)K9(4sR_@mXt!)NaVB9|F11sjB5Dl^#7&y$GF2g`%=+#(g8o zEIWn0H6WVQYth}&ksAWJW=Yf0q5|*8aEl5>J7SBPL8U}m{4zz4QH``okX8t* zTbhWC3*m#y=1`W+(=K3N40eQY*-YKCkgQR)KaZbMUQ6}sD1SOS8u;OpKu~_mI{%?s z^02NOKKBxsDaHEQZR)43!WHeQM%7(hLLh&-$$`=}!b~Y+A7}sZGUmsri-4+(G2s~zT zT*4lmane|~$k2G}x3Rfq;ha27%naO<)U?8}vmAR_s1ChCteW*%;6}yrk(wE~U+R_> z7_X`ieq!Jme-Gn+F#ap?O6$w+2E=Jtx_C0cytq11kBj&?~k8R0>rIMJqG$NPmm zUyv6SAqIDf08ctctzfA<9%!E4Tu12J%) zU17cp>14p_)P4pTFPw}b>g+aIh#I?cx>f3&@4Isz5gcyF3z3lfva_cc-_=(v7*3O{ zl^TBlwRXR_xl&|;=E&w;AeVB5+{^;qk-twa+sP$5D?dj+usTxup$6!1Kr6Zm0hia!* zADl#zL{1&1y0NG)5hk}*iGiT|RPsM`E#iLyLw80_-|Vhgg{3!Q)=l3+VqQ1PK=gy3 zL#%nw5v4Rb`s=&*mrH)A{5C6rYpJc5u=_|+kYFI4+@G{X5=m4%ly^(MZRqM500C0@ zn$>`W`kn%x&!yK#@#5)t_bAeuUMY#|ZQuhRD$(i`*d4{_WW?y0Y@cpOA=~j2>wbUt zve@EykbNMScB!=JA+?*SABa+e&Idkz%oy_>%Hm(O`gN*)EhD1=tF0XDNj4iY(nTzV zs2(p1M^*s`7Oc}1u|yT~vla8RvAIm&z2m~tEXi)=R9H~@K{_V4g=9+Tq9ww;&z=m- zAd?C>+;{GIg${yOJY4imTI`!QY9)Wa#eKUnWyA6=X36oC#7?49crwFaut18gT^33W zP_wVrQT;|oRkwJ6>s&gjk5OhWU0@$}GE1|(nrmHi?bKZBnrl(B8Krae8>3ORZd6T; zx@94mTl1;z^Qq|bsTtL%D6?ayx?`u@G1cBvJyNGUQnxI7Q#H$kx?`ucJ*0o9y7i~E zQ?u^#spxZS=F(9E9_>rN&zHK-m(Dz2>egR6^L(j?Ym$k0>)UWwe*L>>K ze5z|cb!tA^)pX!=VjnRJ&bei{7f5m)D08U1X9F52z>r7@&6OGnxMOGV&JhfW6 zTao=OMOv-gt>gWT9fz?sOmM;~_8Q2?yfsXuaLJ;=6#z_Qo&NKm9%jP9VZ47hHH;EG z>R|XJq4-rO{#eFW{jy(M8T(@lUpe8&5FRVvcrI-t zm=KRfB7!JZmQ<41k!VVhgsw5DJf;(})C4YB*-h!gikS>n11oRKGj~Sl?&X_uFKd_R2vUTVZoA>^Kp| zZNh9p*t7AA)56eLurS|_BE1Eo3F#}-Ps3r5JTS~{Xj{FCHkp45{L>vUo>7|tF(`wbhz&wi>=d*zr9 z{fmZ6*q)g~HrhBoudxWPmzLS&?Z#o0HQs3`l_gbf59BVs5qyEM7!R|50+g-R=Y(k8 zoQ!60KeM>n3^ZV66k-tSz0$EuN3NMVmZ&}YSgz9%sgVe8VD-~tTKD^Lo91v60iBI{ z)5SpgsgkqSCT6j4avR@>3=y+)LMxMD7p_ygC%!if0Ra4@nIdGfgz-T&uOnOeLX0_s zo|o|ijXRTn=E@acG(-k}tcM;o1XwEsNM5u#QUo83*$H-OrtNt1cp9NuHo77r%TY4Y zPOCWir*`%irBQs;rd6N(OT1iGSxYYPu9n$6$Jiu_(BeEb2|ktwnKt$jrg@7?`rLnOwj_IqBCT z{n|?})UKsVviyiW)lC$Vl&B{W^$N=hC27zl(d8_E{h47os8(ecvlhjyWid)T;iGif zbUKsch>N^e8!zGJ;3@{l!+av&KU!F1`7t!S>@s|kgi2&rzv$QSf#zv6ZV)~kZ^UHc z4ib$RLTBP=vQl#JN)!Z$)bF!HA3iKBP1@`6Q}N@FfPba6#af21IeeO%2Br%8YJ4=B zl>6p?oLcU_IDrtrnaEN?z!oTLFy3CAOrz(26AqGqn6P9o(}1X#13rE<#4;8*l@Ei$ znf0PE;ZnK)M0Oo;X^OL9q?>f>SUYk~=@$Zcd~Pcqn}`+(JoKPQ22BU%j3vYDK!%nV zV$VG)WokkTz&k>Vh~Th{@vhJzYYc%a#7J|0h-u6aI3~&02|*}!yXW;0BTdW}BJHB5 zxNP>Kzj^cO>(76D^X0qmo`3u0YrK5Fdj9ImFW#w$*NB-js z&_C!3wAuvXS7jmjB!FR3<7_nyS&1Nf-olY~x@vP$a}PEHWy&W7EPlj+Dqykm-|Iv1 zjejlw&0I{cNy=Wq;21`mgd-Avhn?hj*W`FpKl1j>IrOLz7P8RJ%}0b4uAk zE5V(Z=0qv!8(j1{ksU@juZ?t5zV+TVb7IPftc@5rQ&guRA74>GPoX|;I;H9@rxX`% zoH?SlPj>F`=;FyUzfPl3v^QVVpGV1~S{)Ny=?=$-_VnST(MW_loiaZ0!`=*k?6)%S z`GY|$tO&k_BruNo0R?3ByeHthgdZUB#lC^ezK?*PMIa~p70tYs5h|zW;7F>gnl$Qp zVZ7a7NulR=Uk3?fRdk?r~ZVQdrT7_!@Kz&rg;_rd%c zmf>FQ-UXthj@!V4glanOg>Zv^n1C&MO&qrub@hRc=`ZWLf<5^jne{z5q5rG?uf0r` zhDThT|FSCTe6g36i@kXUhkMoTo#v4FJY(FjsbWeR6kZ5xRR#4$hm&MCI0c!oY6LJ$ zA%q+PD2m$OtMO8b)sC))uz?M^1c~KT&v8s)5b>6SgzJq7*D~R)J?4Rb+s?YtM7uuK zjkfWU;v48qU9j4ndk4vgEzG)1w#zltinP03M4dNHU~frR*5lF0-DJvix>SBY0u&XUHpz$`Yu<6 z+>bjQH!|_>bKvYu6@R&07FUgbB#H2Cbg@Xb%ZZe8(kQ8~fmo^6@Xx0@n(AvJpRYCP z%)x64UOU0!ATtOMxNG(gL-IT$&6?8uO7i%6V%LhpVAt`f2xT#U+PH!0Yn!*GieabJ zYbSiY6VLsrc36;RmMU=dwSf>14TTRWukYYd}EQ{NfR_>Ca zbTkXaD1}5DLZsP$D^2DW1hcz|%;gkaWbR6kxuR;Ia|@HsT_K%|Jbki4Lbjq`w@#P0 z-5s**-%|Rr$4?L`|G{R`TS7|z(&tt=O!qB=`bY5%D)m-yU0N3nMs1{f1qf3Bw9v62 z6YC5yX!#JtYk@9-2!G(|#x2==TesM<@%3dR;0?q`>yAhTFzJ$w3Oz1%t)YtMIr4~NBYT>f11 z@s1a()sBx=P95FPHCJxMQ&#D2AJC0SC@K2csqVK)Vemlw}Twp2*id3QAS?U8anRUZkh0%+8 z&VWp!CIbg->n7T39;aS@wt8B)WN5nH6YGTAP&lq-?8QzZ*oCaILA zPb?OtX%cgbV%9r|pMO!n0%{6$A77G3Nh>U9Dlil9zg>wvW$QwEp|jA{9_o|dEqY-TQJ zhD=|8{7yeL&6d=5$97);Wopl_-L;dVKc1mVdM9nfF6a{kep66uE`_w^=Fs<_*v_$N zB;P3V7`e->V&#A9mcjVfhU?TuTp$d1p&#koH#^yIcIO+qbGmxrdXG{!h``vW@fk=u zDdHj!emSHik7AnS!H863tj>3;$>d_1ZOs@}4+4v0dB5ikslNq4`x#Nn9#CU=%;Gf(xPIYNK0O^C8?_$QK?6_7h3bj3d* zbgBu?6gbq6AIFy74_?uwfz@>2mm;Z0yzzVKFDgXyBvu@$bzuBd2kKeDm!KaRlWBYw>HC$ihNcP_2 z9>;8V;r?p4UuyqxW%p~mi*@Yi!?s%-RacE$91*|aw(g<3H}l4p-Q30+$};5r{VVU2 z9H$?D$D)k;=q=6jVilyE%&+9q+9mE|F-;@qX0f8Io3C<@AG>M7QB_=X_%HL|2 zBw66^uUeuC*nI3k?(5F|7nb;6%AnCynv0}=YcJtgERS*aPI!p+Xy?x&aV1mpkI>rm zGHd4-D5$0%y@Qj>|6X3apEtj>+3e*17$5rw=Y?UGf<-9vHfdu{^TCLR zfx^iNnD)-DWt`fnd(TV|i>D-AMBpM9+7nVoo4y{f&&@KGdK018I@PjUSaM4A3X7_L zww|GGkfcsjP@nroNPFplI=9~%gy0un zrd#{f;dTQ>f&L13LXgtJt8)Z%FiNt2HT`+$b#?1K!MmOpKP%r0%CJ8vPdd_i$#uBwZkENIWHI z`6;FU2GWbo7O3FAXZmC?h0hw}Hg z(NVu#lLw6qJ%pH*z2F`^;T}*$qMBeOq6(*iP%j$Ui^sAT zpJCz6(cykQKy`pBt>AYts3wJfSB);%?UU*Y56D;!$l)y1yVuwV(FD-|sva^?)twdF z{d5PA25HQLbT~6B{3YCLx2b{m)?Fs+Ki%#G%DHdLTiNolY&o%^ z&G@~BK8q$Rr2BcLCnr<|RY3DWvq9SkH&MT)8Tiwz4{2vmUZ3|C9X)@t+WY)Y<%&|N zOi`p);(tdI`uqPy6Ptem{_VC~Uy#YA_l)r)DJH4gC*_hCzGlX>R*D(Kr`O2#)!2)g zHYN6=#$MFW3%K%4lqJf4poGv!Qfb51#)^0;ZDQ?UrG9W5dp(g$wy2Q4%3MHf9bHLFb zo|=q7FA}KlifQh}{YUX+?`DsP#>w6zWyalqlWg732u_9z8t|$>vC{H;RnMm738L952-;8_F>Iyiq8 zZ5ANzAY#&k4BUZYAAJmQnn8RsMf>*jpf@=B`|$6Je*6)CE&4tFI*Jd@ZFqO|Y9+mF zm@}F^T~0HY(VN;J^s^Z-diAhb7W2F}j$wHhmju7UnbOgJ^utB5%zIVZ4D;)J-dn}7 znA!?CgXvj%QV-`BS^d22jpCVV#vGb~q61O+{3-kgl^3QBS$Q&t6TN7@%f9Os@yCy6 zTyVk5>MA`$>H+=3en61>22aNYTvu1ZJC_vFJX^%F*7xZ+xlCo$^!?Mz>HB`VkXT43 zSmI2I>CQxdx8Eo4f&YQUOgKg&>6u12mD3b@x-gNLc*bsSwd}!v41mcLN}&vRhj2G9 z>+14Fb$OYU3(}h7#~1NTAa)qtE)~9m@WV%r!0rXX2;ut%%y$N~$vhQaozw{ow8#z%uSIec%}vh2$ss}RtqCFvAB-$`VQl@|V`ycQkOM55zpqPR z`-j)b7}D~hTfw3et9j)lTVt|BC#z*L9-6nu-eZ{{agNI2b)Wid2o@o1f?;^l!pFLQ zW+wPg3KPJAq3?y8YhZBJlY)HAvluQcVkPOC5TEkJks@#`B9=m#u*(*3=Hm?h`0AS; zr_e%Fg@iyf7h;TH{8ZdDB6Uat*(>mJE*v2i`u{+a{;fbDd$^?NML8e_<{^}q zhm06{%qu^}e?G&1p3GdjbQiXz?POcJs6Fdhx8JYL;RQlZGB)^5Grc3n@=3Ur0KNu3 z*W;myYYgEt6e|1c>@p|t>0WGE3S0eTY6e!4vyk3NJiA+yRtw^HY*8;Re=Kb{=3tsh ztvo+-R$Pr1tMe=Pm*0c|X*w#}ppR^I4oKGsXn!E9x6$m6l1IC}-Xk6UESkA%+2vTo zg^uXTLuxNBD^KTOJ1M^_r_ASQkX??5T}Ik#FVf6%lt=dF#pt5;VG$S>BUrj8yyEXC`t zL2C#{5MQ6+!PN7Jf2s${rXR>3SrlB{fhs(^NWmS8JIQaF@SjF&*D2C1(e@0Fb_{d} z(bt>mihat!Np~Yh@Ei7iEI%R5q)eE39;j29*yeH|PwrbXRyXL$eE9AimhhE!Xo3&h z`YW-%Qgj}-%e6wQbJBIE;60Ho$kY6fG$h@Q0t6`~ror^Bf2bEAU5F&v)~hY)oS#OX z*3XHwKL!K{-bNV>V=0Bg4gq6vi2cu4U zUwNzywBDli-BT3<2|d>({M8`~w7(+#6^=P&`E?4qqWppl|jddn8QJq4{!U9eLIQf6dQ?K_E-ndMT@$-c)`}gweqymR_EtSZXm+_=Ta3m zSH6Bfe_wx3r4iJa;SI~IxK%ZZJG~H96{;#23cD^J*bqG*y@f@KVl_+&Y!ZewqC|sq ze;xZ=_jwV!HiJLVF3zPtBs^6fJj(+%PXp-jjlJADdWy^W_zWmrU{ zt<>0M!g|9i?5UxA+d+pv~KeUV;(WN*)LNyqn4A-7`Mg%6>+$S+u1q zd>uygq78~9LX5jrM*Ba6;>Ijw@#GG^vUxJpOH7*F6Wq4G;I<3!;XJpA8p%Oae+t(Q z=zG)gD12(yb*aKp@|cOI<+Mc|hBK$V?MxT=Kn_3f`f_=1VqcEzqR91=6CykjO+-^! z5V}nW+97?EY)DZ4C?iW01hEj(6F~lE!pBZOTGI_+zVdtc^<{RBHbMMly>(L5W&lky zrPUBqGHAK;k`loJvqZ_fu9}AFf6~qGo@mXWecS-w4die`=T^5MPmAL)P>7qUJR=wg zu(RTvjZH+c^7xdss0i^khc3Eaa!4=ceIp9*ytZ${f}$)(M(y3W3I!i^5t zBO|sRVrfZM(rmQ?%g58&n1U|q*O(?%w`gM^j-Mu^#MPQi_ZF0s65D65f3SX$C$O}6 z`Bhr9;kRXZ&TfTltM3Mbwgdhd+4kJ!T|1<~YYR3uym4E*GoYVq$}CjohRTuuX-hl42MVi^v^GWasA3}`FtjMT$5SNI9d}5vIm)TX251?~I>L?&PV&1Fn z3BDQUVA^g}Kn|-MKYB{{`QG)iD1V+@)cKjKw@}Y}cf}(x6p{OTf7UJ_{PjJ1BlLwT z@?F8yu3)C~`hEVqxx&W*6uGBSS(SN&S`$wXsAJEf9pM5@nL0iWOw}(oTKx6ka-SG1 zj*uOUM&90wZGh?Bfb^p-d1KLA!MNZzJ@7qJ4}3&vqHYLoti9-wl0wk}>pwzmkVm%( zLAJRhByEGLgehC0e=ynL0i+SF{E7*V%cPiGz9>Lz5ytn8O}_>AcY@osXW;{Pr7S~4 zHM!GNg9jIYpN5917mNEq>+ta6X~nXUXwVQK)=N1Q-o%kIhz=J~OeZN9*D|!XyyVmk zXN^S=#RZQi8qGHq0@^^EotD&IOGKZF=9}W@e7XLvTI5H)e;OB1TEa|yz5*ho?kS!r zG1tfNsys)pr?9h8>l_ts)r{0)^y3MXR+XsOV)|?P|(0oJCfUHbzOxf$-&1bQ_nL>u$f>tP7OPg^U9!drSUf6-3Qf!d@Ocj;0czipyun>TqmNWF;t zk;R5%`K=w%&gCiX%eU{o`0>^AH(!7MUBF>HQkHs@;DV|*IDogEzH`FY*lI78t;Zyv zs&02!UY7fIW0C2(?q-ZhaH7Y7y3gd$b2uwQ6TGP`GhOdS4V_);@U(!o)7J5OY2Bk~ ze<+X?P(u+zv;gL#zEj36q}n=V6c8IIOdLwgJO})uH>Cgd`up#?c8-+p3UWZ?Fl zzScO(B^*~_CEu=*k#c>Ve>cy4r@Fq}_#hX2f(3h1b*b7|oC@_20;z>amiLfdk&qcMwsCD)e^4u`z=P5eYdq(U1h(la=b0* zhX6Ze41-+!08(z0@c+i*?`S697dEiz%yYGuS1;P@)MvBteO`0!xPmr34{<3&ekW)HPi^T}~JMzG2xun!bN}Hhqs4 z{1|YVE|T-~eX>q_i~Y0y`*{Def8-Q4{0I2&OZe|~stde^-`7uz>9tYd8wh&?VQ*xC z-=&xR>p_#eNYDFk284_I-7|c5`|fG>@Zk&k`Qqt{6aSp{zT02*Utq1@r0vP|e$jt3 zo1XU5>g4Cy{x``7`US@e{Qi=EAL8%V{QEKdzP-ITS3**nRPjOc$uCjWf3k_)(D3pM&A>fYYN(jsXVHdM=bAJI@4X~Bd-PkcBO#jJ zmm+C69f=4N<_FEwBCgUN(O-i2V#+H%c#JgIEUg4lCVm{^52V>TmQ;B5xwFA3-!|i% z^-%s5vq;!xOCMh+K%Y4k}}<|)gd&kgdAPD zdz8{~^~73jdNON>e?d^*^JMF(_scYp)$6&J7l`B~^_;d+23siu>NdlzRGegZrOx5c zYBqJ~zWUeRr8vS9J=R(%k;wTs2Q+-c;&R-odudAJsVYk(Pm*<7tj5+wMN3{@rVgfG zcTcHf2HN#6Hw^do{dZN-<(qul#;2^i?fjBz$@%Z^NH$V^e@U~IQf$)R@CjRI07bQ^ zE_-pjkD`}q)=wM!OTrlbg~FImPe)QyC%V<))lFl54}y{M{d=)BKNQzFs@~jh@yXmf ziU1L4pn)VP0hGT#e*Ek=Uxkv`BzFPgd{0&yNSs#Y3QpJ+5G$*GYPUAl=Wm1OuM>My zrK|nV_M3hN6SOScEwEaXWy*^c&Tw9<$wkV1lY71ze~jDL2U_`x>V6M(W6kNA*e2;x z?2>ez2oCJx_LGY)WqT%e^TNAEE|z<29GUgsYwxgu`QI*z`)(hjfL|p5cq|_D7e&)% zp4)EwGD*{7eWS`WY8~(Kvzs|(39%h2|KaPJlu|p#JKCwn3yf2JZaF4BFr4Vg$k)dAE+fIdFVeGDd7W( zwRY!Jsl#_?R4LoPY;F&K#pE9TuCt4mdT548f8?-Ag`^=%&8h8G`@_e7dE8&^5C8PX zzrZa%9RK+*@xgfb_{mt#IHmdQFPP?!fBqw-`Qx84&Ee>=TnU)w@K1-B=E>vFD9z(> zd~i4%-$6FTV|LF4a`fbI7d_zXej;t_%Zs!i2g59k9=$sE78tG ze}FS4GI%0*Nd`#N<;TRUKVM#5WW5cqZl6fRQOLz?(Wl8(vY0N?jV)x1PLg*lPDZnR za|~d`FHXiz*cpT!I$>Aocwh$5UIKOvc(jIjv}IZ#fjh@PxR);I2ka#b26A?}f0b|) z5Uq3Z0lVX@f3bh{$wd{^|A`(7h0kMlefCue7q*3&Ioss_@hyhL;!&#$>eC|0KYZ3l1TKq4WI;}F#6wRtR%%Q*>GWCe?K=n zgnhS=$mY+5y;MXBgWa*dEN z!pNkKE?jGLc*$j8M*L&df3(HfIts&f%VPDR80ej!u@P`3SzR#5zJ~B>v*kDH)J#We zvauG=>ST-Ew~>_{DrwjQ9V1P%%{beT+csDZ4z+K4a@W!Asot2I&d!0*Wf^SdCSu6!xLoyPfiG;JvLY~yR zMy7ObOmiA}Ei=)r?@i%nq+t9R()P3aH)CZAoN@i*VeO^#KjQHIRSX%3{JV3qK4 zQnO5ClTO1HfAmSPLBCOthnNd@V02kb0)>GMFY~Nf)j92a^u`IS;KxW9I~h1f;}90Q zaL(cuQqN@m<{6?am1(1Z?@P5^UtDC4m6&w-(w^kA9{;vBH!hn%hNJ;nVUSvba`2h5 zL=NsIxekn`SOvO7y4k@}^iDpGb626d)w7C+Bm>r!e=n7Tzc>8@^rGVw0q4clG6R;A z5}YS!E-Xr2rmMjj@Q9i6Km>f^@?Z}9<;d~2DwB|x)rAA8sXLXOEM`gFzoMQcSAC~3 z7%eLAUucxl?!n=Or8jU$Bj2`39Zf8|O|deotFHWxpWDParn`Vm&^TMcaKN_YEsp#7 z#YH|>e_9ox<4qiG+tB~TidP$$ciQ)70zaXK=D=~7Hr^dV2?z-P4KW#bD%Jv*#~w{} zTbV-y#3tHx-C9H8fnivK(Fo{~t-~R^ZeNy;%|2}7@xxGr7@>#ZNIb^bsJR!4?|_*g zBT<9V4(5#=V2+)puG%_vRmaqE?Z0aBHi4Wte+}w}+6!NT*1FIHVDMfy5?0qHvFKAi z*p$YiCtLeSwn_-=GdV!a9@a34hxjH=Lm5PZR~jF9ml5B9G~;8-1iIR_s{#!A_8tW? zZKJ2~_5!jA@2u$85?9*>u-|kn+WpOhSCMRt#|7^!al37uKw3d^)^Jxo$YV*;T1m-1 zf5#+z2RW+SSwptTV#F*d(Qo$a&v{tsgc(j+?+G^NA*p>r7sMOf zXOl0+A%FLPb%e=*#c4>F?ISF4TpNc3%UySqA!Mc`>eKNeR+RJQYLS1DpJl5h8-h0y zt&1fjRusvLcX27aK`3X!a6>Ty(V7pqrdP&EVZ{?)UM@aAhtm-AL)xUK@-Zh0l^QEO zOLQ6|wFZIbd=Ms-*xun3K5y`PI&uRJp17yMM1P3S-+idFE30LAk2XLaZbXj?_P0x3 ztmf;;TDV@525z&x0KXpyt!LcCcxKicYaNUy7Be@76D||w`2WGd}4`QA0#eX--);L*=NtuBm5pL zR6uIJfar9pj63@3GhJ*KJ!9L#nnNesG7PsV1U-sz!nBJ$F?X-8pcHfF4lq>v+g5u^ z?0v^o3Nw^&Hj#o%I-Y9&n$my#_`nq>NPq0-S}M~3g;%;19u!joEoad8S?U%fVMBEY zI1LsAGLL z`;H88((G5etv6(#Hm|eXT4dgUZMu9Eq~*pYgoF&qBe|c;zBiVw8cT(W38&+J>)_*Y zw8F*=ObQglG80a!@iN0{g=GLGe)jYL`}XXS9+A%jZf_jvj=x+`_IHP|a(~53dYo*i zKx=4r8kda&(b;panIUaA=(SLQG99WL3Tk-_7p8>zFJZ@*rkWbMmDhT8us_Cdk0UTC zT);W;YmcM?AB31`@h+Ar$qNOCkKCwy68+C{)NlLI|9mU~A;Vsg6Yb@oOPxrzV!PJK zHXpQOR(Zqy>|wdJTVUJ_`fpDYWP1jcwWmnCJ%@g>vED=jx=`Mj#g=^a9%}hag#*w4 z;9Iyi@ieR^*DH?#YI49{A*Nd`oo4ZRWt9OsvPdzZG#zI#wAPJql7FQ<_4MgC%d}8d z#J;nn%bx-L6w)M!hRG;y&EeRlbZ9gwsmYizvDAc~&*yp5REY4;x_h4#ZjPF1g3a0L zDFLR9!l}7Jv+Co=o);!G%$Le>5Ic}U^&IJa`zk>n$feZc5-PsxQnO@sv`JQ%mus=M zURE`0&-i*Tal(xe`+r%gSCz>PP(1inAz&$^q{**Pu$5038hV>Jq(g|Zqtt`x^@%|v z$~Pz`7^P|#9spfJlKTi{go+(kMZYaYLnE95JV%tFTkB5ZnOpO5LxBSux01#O4l>m# zE*dK&aru69=Ak|k_lAa8{Q>kDV|F`-tW@m_tT7*BQEZ(>HGf|Tm|5JXa-~IAHTfIf zmTXbHH@uYNvm@-h7Z=5n-?n&*|MlJb%Oxucew&rqd0wZEPJ2<7dHvO!Z@+(ERN~XC5V&{yLufc3P zxDjg13dob1y?@2=%o~z;O2kYAd(Tc`BS=Ry1J;dga^bU@Q4~iy;LCDhehSsq`ur5A zi$5jf@n4d|Cr^^m@No>Bd-LU@XvtmnILYBBR)q?!IR~@A*D7Lkn2eu17G)ehfkNi1 z8qRRubcf^m}{&9o~w11=@#OkvC3pq9kj&GbCR26PM zqN?yaIgc;vjJi7cEO`fI!!h5!pelrKGZ>C{YCOIuYW~5My~|GFPT}Ow2~U$0o5xVn zMaG?KUS#u&oKRFdm3R59!9KvA?XAkdP~|A?3JWQ^T-oZD^a)Ib3aMoXzHmyfSCS?kkyoDA z_HqoMZJY5@wfUl0EbWWsU6$zjU6v?dl-*ew9&1;VnQnz#VNHnD+1s zUPs?lbD>3MN$GjmPjb4$zQ(sKAwvp8oDfV&&3_-bl3@9{1MO+lDVGoShzW;+X4iy% z64OgU@E6F6SkEN2(O%O6siy5yuL5$Q7ODh`GzJAOCo?{%8rM0zQZ-nNUuldV`rqn^ zGH}=ZNcb?vy|WN29hKNkj_y>3sn6lBXOk7BlvI%Lez?qeSS3IBVXWL^gMX^B`H`KWG7$T$uQyN`hvpgT%>|>n4lU zN?GlOH^Pz1>S&9M;(@Ub+$A7hP-*cbwLWlS1Bdi79ZfHv2A1;l66NQl0d+aUwtxH` z_RgpND3M>KXD0;~kAJ)@qVyuEVpPwWbJDq$)YH~cO3`QOGMzIU#j=tM5{X=qO1sdN zTJ(F_$B!fOl`MkZ-`eMChw;O7%YS{wrnY*z5b{M$*wj;I3+%EUs%isAbH1!jvn7cX zB}Q$4E}j}Xv|Xzwan#mG+R^7f+>?%k7#-Lvf60-JUbdKxaE8!Nc*mgy)q)j+vdeY11@C3miGbTK(gy88&1qM1EC z!(DzG(hlu1R3N(pLHk;a5ge_SpHickms!&qrVfH`F)c{Y(6SylmLr?ZdN%7oPWaf| zY1IWMq^0M+B=j z8Hz?bW)6ouY-aL*dwbUAwvima->*nmS1EBsDN-^!mz7MrvWYU2+Zk^vb}o}rbW@Z> zS**yUj-+C%Z2k8G`bBiJTck6Y-Kx!4&3>TKXaJ1{&=%Ye1AfmT{eSd@_~(HI4xN~d z!p_yAXWj>K7}uQR+xMf*!%BeYlOVhYf)#mt52;YsTvE_vI+B&hB8=4G%{O6Wd$Ny( zp%5j9Kh`I?q+D|5-;XeI^8ZEIY91t-PxCNNd=;{%(SpOt zxME9U!=IIg;at9r+h}2D4hWe%d1Y>wUH3d+%Kgt=26P{$r<4c&v2d5;AU>ZwrpaXT$v8Y+4Ce`cF1b-46jgdRu$Pswb&EZH3N}wUq zV4BK0yaJ4YW`7AqDwqDrX1o$Au+~PGgvo5WvK3j^^Ny<}C9hIH3^jGo0tH>00$sc; z*$SK$4V57Sayyh8sD z=~xX_6IF#$I~YE5V}bG+pm>~}WntXO{81LlI}Se78-EEz0bj=k(W{wuQb5Pp!IC6X zH?Ci%yP2-b*T0X2nJyFauRMBSo2WwaprA+_AV2vW;wa2&nwGlCtf(%6R6JStXU4j#R05{py4KOLk!V#(rcG>LeQ(b)>rZ$lt#tD%3~u#_iFdcK+_8((66oO_jDR^Q18D$$Mh2AWps+_ULHnjj=4M0h&5?R%hU>~+ak%3tz+1lJVJAl z(f#mr{fWyS9IoPetqy9o@WM)KYPgKG#vKCdzY}gKG1Xhy3k(ge_(YAOoVAoeB6{n3 zB9BpRBh|+<3{sXZ&ESB9h6glw??+)w?tgKGPS0R(iYSm<#t~7VUdgMOE7_FGTMYhN z6RO1QD%+DVWeMchE?QKrxBhr7thDm>tSLE*cvsJmflKCR5nQR;1Qip-iPTL~cOtZw z}u7548 zjeIhyI|AD1N7AB2D4SWy632GMqXg+1)uKgMdL0@t!dUy>es7}ai{YG~qcIbEJxXGsg+&CbZn!_t zcZQw5+@Gc^_K$E^_w5o^7Yyyu$+84~JBTzlJ*9C4a8T*S8e) zq?1j}p{`W%4;?Ssl^JZuq!ccYUbb4f8ZxKcMNu%HS#O&a3A1ZHisl7-SabXcujU^O z#*f%d{iELB;eY7RYXUsamV3w8}(RY{FQ}C_)bvIQ_z0 z^MgQ?V-H!kA+HrLMJ2kEev{a8eZ$-Zu5Y`o@dfc;VZh-O`Z3D|1%F(bZmVyA4NCmS zeew2|4b0j!T`RAr1E{Yujv^vO|4{9J2bKIbFiSr{>0Xv5g#tJrLgCVmTIzq%R1D1SkMf+lzXaDH?vfky34 z+sX!QjRMftBVwh%Vy&K3UN8*qmOFZls|Ps*=&*#5j-{4S4o<^adI|8!kEl#Q)pe9! z85QMDR>q0>YJaK}c3{+=3&z@Pn&~+X*!A;Can`%WGAumt(IFz%2dDdE|< zTd0cABH<+%$HA7fw%@8cQio#n$A>j)AP_rC%oak{aX_u8t2VL``=K7IAaPZd$z8-R z1jbBVNmofUg=MVzNWLI$b`EYq-GZzLq2r%|gn!_~^+NwSe6Fbo6vaH^nHg5NbM_LS z2fkS+i#1D=*M<%mT5w+qhE{h#QV~*TwW*J62+EsXPlYd|C3+=QJ}RU*MO*Ps{Mhw3 zK#XstuNJyJcZcY68ufu$F4imoh5tD{d+JZwtD+tCq5s3@RDDD{EY`Tc_q<^3_U=xZ z6Mw3dTwmaK^bB!)2W3T8Ay!PPS|UGjw|}#~ z%uoYa0329&OIL>3>cyw#mXr1>Lrj>}e3#hJ+u5d6pN~4t*jItR_@Q_I*cLi#6LV_z zR;;lBOIi@a>Fj4>7cN-{ zUxW|=;lX7{|A+rHq{yyW@`-l}8-MsJjV9XpV|TE{f^*e%xC*v32FbXbEX>QvC@k>C zY273XB79Dfk8#}|=HBo))Iz#|j0*O64;yN273_0>{U*#L?DLZwVCoE!Bk?cZ&rEVu}-dXwNbyb3NW-ha^pws2nkzJ=f8eRzIyd4Dz^%>g=H z7HmKk>=leXq!s!1zFR2Olb*Q#3X!01wm&TpK5UPP1OD})!hrPor}7Et^?G5f&UY>5 zTu+e8;5V`GI?mkUvl(Z0FaT;(_O%1MNmM>$axBAdD@quc zauY{~V%>K7@J$rBcK`xc?SFx|wg=>QwF}~7yI_^1OS}>i@!|X0)cI}(VHC!_VP!BD z$!I{L6lIkwk_DH(L@!w1hr`|`Ze6?Vc7wFn8}n9AKVLj`SAOy&Jq3Oyn^b;N_36Af z+`zQ?{Kd2BcH7S8q^76H4k|BrJ~x)uv)xkhu^)q0@a?Fi!yQLu+kes8P4y3Ut5uJR zjy7sXOiLcoKK0Bs_qyq{vuoz0zMOs2JqOB$cYr zPE@&iZcSbfJLnSX5*F+_aU3HsdYpCi!icnqz)%w$x(E!9$KCICI<_PEyV*$WiI7^L zxgGzJtD)NtPgcMV5f7O?p?)vp!48~&`5t{)bd5yA;i+keZDpd?PiJkpc8Fel0s zJWfv%_LNsXO=lGyRU)^<`-~`Gtf>^WztX9h(3N0^!JbYZeNI33gYo0fXPeGbT;n6rf@_i_? zW0?L@>U?SBSjZT{rWLJrvJsqlZ5Iwv4axI4&-;_t7$m(n91$kJ76RKCM*c=|KzI zMnQ?5epy%mSQuQg*Y9ZTmM-qykDmFMd$6aZWNsg+r3iTNn5 zj+vr1;gxtNWs_`w$GjQSqo3y-$JAUn)Zm4jr=ie1h zo>3tmT%&>&mjyj_I0woWUw(se(E0iIuvYYmdGr~Ww5E_Xyg{j^Y&dIw#dpOj;&ga| zA5ja4iOOiU$`(7G#oAotx|0#sSh8>79l_MdL|s7eJu(*{(C{~^qg1Q#sb1kzKLCgY#U1(8DNl>G&qe;P}VxIurK;5*JJ_`r&*IHHI9E46Q z)1|cUA6k2EZX(MDq4o8}w(OsyEj|HftvH&?lcn;m9oBf=kgCyqXCHI%HulSWvr`W7 zN6)hs(m8(C9SF8ae1X2j?tLbQSG}Br)_*BeyNW|H{fye%W!BQ;=RwABKFH)21F_<4 zSEwh@2-P}0z-j`6Cfye@odsneM;tAfTj|o{`EzW;I?g@ELX))&-W&uTvWm&N@9&q) zHBHL~P|no&2I^awSRSKcpSk?WD_p8U+sw08ThZ9L!nX6H<4}2!84;yXRLd4^vw!M8 z43@M#EGdJ9rjb4Fr`8)<`xYlt4iN{45e5&;>*UtKrELvIwA`TE#_6^Iu{#tm+#6`I z`wED&ZVL1f`>6z}J_X=xDamDIfj725$NZ#~XPxW(_8`|lIY$lU4?$tvfJ6%?YT$=_ ziWFOj;Zd!2&(iCum7uzzeBkpTJb&@8VtShYGnuB5ibzTkw72~#Yhv1X87m<9Sa)cq zXU8J;HV<(pQCx4D_J)|4;qJhkQv6~%n1yjCsrMQd{MK5fZ7_H%UXQS6o!-J3K10{< z(-4zS6jQylm(ENWvRPnd$?!qXWY6I^P{MbiOiN#_dJGbnT#m0wu`Ak68h;KeX;I*e z5}EKxL0ur!|R;NQX;b(VJ+F+F+0*O%zvf{?yD%=N&5c@RriLY!C36!6|Bo^u~t9Szx;X)fM(-K)*d7CqDIE*XOBkq6YpO5nR z|8}v=cPvTd!~0+P`*dh!&HMPY8Y~w7189N;+Ap$Am3wntmT%=e(RDn^`|{5Kn~ivD{!n_(Ur7fAbDb?m-p`Xu z?@)`U%|j1_HpXM2g(h8OOEiBTvD{r4b_gO$i*`(b6&~crWmHCb7$UmfN9C>%Uj5H7 z*t(NVL$Rd^E}J-@X)vqg=q#&09W{sU4QcGU+3rVCvQGnOkSS}yBLd9r5{F* z7Fn9ca%EN+35ubsUbn(a*BjwaM2kNn9iir36wwvN+XfgFy6pG|bD4ktSQS(~!%`-a zSA_=>0oEg0zCnF0CbJRG7{)&4cvWU?HY6Z!jF%CBjLOI;gX*>B)kIf_Ik6-u07xHs~Q1NX*GjgzVZA3DXS_&suYD6dMQjd;O~o7 z<>G-nKX`i$Sge=#S-F3fjAD~TOJ3XlaD*xax{A0IT#h8!Zn+K7yV**5ggI($e+-~Nb&*J@kX z^O5(QX~dGViWQrXK*I->-~;h+@jpM~K>!z}=A077RnnRN{hWV(E`E3#aQnP`o9zt! za#>lKC)X_Kr4cf^;p%{hhXpwZ2Y*Cn;61FVZJNA_W7&BU2T7+sXQi}bUs4hK0$siq zdj@!{+&&YYMZ?&LxQ6Vn1N%QEM!ecuF?P5$)dt1Mk5jLV1uU`=J5 zn@gW#IwdR*I7u*mLA*5Z?gOx*}3h!+K|vhu?P+~@2>;H;yZOE`wy~F zo_gpGmPow+n2QwQseJq~7k>yDDTd|!-QUX`q#$~d1uuUDafu@))?#TUO(k zEjoU?A^!W_q&7y}Fi6z~gAaLPlsvh*5chQ9@o@`LZQQP!4JA;@Y8zIBz0*VX5?69xVH zVaurW`7h;OtCC$ll3ki^KOB11cH9=w zWF5vaZ4DdCb}*h6&(hI!Fi^0uxrStI@WN%fJW+ziVn(nGMI$9G3rt#+-HF|x&b&On z4K}r4bjjOWezK~mz0xL2ES8s5jWc+!3ABIXB~D3jRtdfD_n%c=?OkTIKbE$$uJpOz z|9@ki`{q33)7k5)!%@JFv(WB13+P4Qs%km`M@f_@-yi(f1b*lHrfAx{gt1jpsBRVi z=nqe&p(ktT_LK!N8n;{*?YbBD;Y0u?F1p#1!WC&}Y)Kh-l7Zj5eHNi^a~@I>*7|?j zlG*zH6nVZ3ZYDctfs;tcM0d_2jG(?G{bqc|3+791zWnxw*T-*3$oA+)JuOW3PG-rT z!9znxM8I^>?V|*5Sfn-WztnBhlM?V_A3i*24Ski^c-x=Kw|Q5cWokOh#hHy5rO zAqO#F*!O5+tMw7Lr(!K7aN&+ICrmYLbj$1KH6jC9mC2c#(Xd9_lnpoPf3C76Ipjr; zQ_9p$8?!}Z33l+0tNc7lMlo=p+WV9slel9de+$s9ByJf@?cx8&QNkSIIBD4Kh^|GJ z$79Gqi_Qo|FUL9<7-ZjO$pSuQ8!m(CSGH2}Wf3(lvGMev({w#~@G$6?kEt}!G2VgZ z;w=ZQq5tM6zlmVzlrYdV`za!^Z*DAxiK~FqQ=#ahdud|%ZE7|pexZ#-I6$?YKR;Kt ze<328Y*=LM_ogw3NFeVOcADcrnqzu$3wG%aZI2?mv2NSkc8n}zLPx>WhWU0(E)+Dl z)Uo{`FXzQ_^OAS>M$&~PWOP;n2fx*RPLitpwpum$7uEaH&-V5TZb4a{13UIboxMkc zVRaPGvnyB*xd?{~kLJ+DgC`!mqWEvCe|I4a?+sG2gG+r)mIb0K5)%5_8nM?G;HhhBmT+UP&VxqAW6WJ9^>!$@thZIVp z=~fC~TJqtqt87uzA-Af{;*&;t=x};hd%dgs+nTqJ4N##eTIZN;svxHT&bJ8jU-R&SML z=L`QdX^Hb*!JjeuZfVr)WH38t3h{lKJw2Oda!QtIV^2wiu3TvQtk7?d_`Ss6g$!S- z-%I?BHD_FN)~C9chSwKN))?7oMsIK|CONQ6=o4%Wzls>0dRA8J|re?p14+#~wCroU(6`;5QiaKBcv#VgUTRe$_cHUM^Uu$z!ZW$TNs znl6c`P2c!!qPIj2@lsS{jh!m~@;8+FR+N=W{tw>D@ zOFR4C%#v~TCmlm=g|j}=6|M^I8Y)H8XL0Kw7riKIXv$srS8-kI#;NcbS%Z&7-K#IE zHn4LkrD99+Se~)|e=06b%{%%HJc7ZIz!y%vJjUB0LN~1%cNL)5V7(g>F4f>m!@PEo zal8A(debTfhM2~U+;|}2Pn{}y=2|gqnWr0L(+6YaE+d52W^-5}q&C48mCjkn3$Ay= z^D!yp#L#vtaJpc_6)9@TX>B^FXCi!ce>Cweqo{drfNgTK!)Bkl zo4wj~2UfSg86hyIFYh80gtqG6T(;a89B2VJDSph#MRkd$gUYL^sdqX!lo+!71P-4> z)O}z*ef*jTd!4n75_C<42+10QPap5Rn8@UYPWsv;KH_ziz}>X~>3f06{f%;Clf>iC6$vZE*>7lV5bNt_ULFE(Eo~hQGL2mA~vD z9WWAqda?xz>Xj*~tBE>y^FA^+% zWPMZNaw+>{R5sg{%4Yv^D(jC&fZigmkE7?3yHX4E;Z@H_d%GW@uQt+cf%^umID}PU zOfPgq$V*QwXo15ni5^;}NHVERtL|`TaO@nEggAR=dc|s?3#Gd?ey~`D_Gvk7c19e|CN^sU?uBi_w}7&zIF{wxr`CRmo!0fTD)es|Hr07Q0CNjc;>p$VBI%ra+rW z=MR#FWzvB+ekpMh(AJJSTjtgHh+qof0r=>HjhrZ>C+&W*@wg=i%;d|skZhxK+@RZy zt%vp4&N~Q}IxW<$VnP?z7%**fx3P|3ECvM zax2w|(QL$kJ7p=+2H2J@!=O-m$%t_4YZ&IONY}!74qN2tIj?zL5p;OjxCmq%`nvjp z)4}qlWtX*Cc?hJFKTaFCAr7C&7qu-QV?mXLCVK;q>CmsWDv5e?k?INxP{EL!Yyc@+ zl?5Suy#`X(z=?2){5~_2g==2=JAOpoGaH6mZ#G93j zo7YtX3}*o(p%&v1h?+}#LRth9K`;j@I7(o{{7_uy%hzQ4|FS3-IGnBedR;AHVDT~r z1NlpFWv6qOfd5!GU)8`gwQ5d<5SdwD({Ry@z*7GvQ8sLN8D3jIX_OCt3wY+scaYZA zVj3F5XB}0>k@WDPNfmUs(At(1#=tFOhWCZjy)NqHjl;AZ@*uO+l>FHeI23X7*>cDs z3H>?tB94W*qYhq@u_c;D>M;0JTe!JE=t4FEZPwtwX`iO_Ao>!djjVeiTL+a z=Ict>E~;FUo~#c6FXbJ7gq|QpFcn7#G*H7OUP|A*D$dJvFrHZ7V?vwb%S^baV=U^l zYTN2km38ctb?lb)MwO(CS3zd;Q)A#nkdecSM2vE2VD8F=eEofK4&X&ys&|$!{zQ9a z9BN1E!^$eVSEGg^D|PY?d{Nb9UTZ^oT9>#i-C}n)DP zRU@>bH;n4l#R$E#4Cs{-)?k6Z$g&kU*%~<6;`TNv8g4eNJk&!dJB$O-zm0~HDF`@O zW#LXYQ!`C41p&*@z>q<|V3^p%8jmGZsk92gOIe_pLR=2bQx&?R69$UL3l4<_h^T{< z(TN#?1;q*JR`Irf#gxjN`wo^OLZ6Kx8xVlQn7|fM5m1{Lf>G6{IBWlRzNVB9+F_2Q zG+*c@*py=vVvx}wkM1S4=F2s?A)1CB$=t9vp}=GGS;XUIa|gIbT!x|asTw&Gvhqt- z!Yn|B!M-?x@yV7rIurRrNGgaF;EOP?nBdI7Hpmr4S*zcF$G7Tz@Ny|#$+ha&=`xDT z;kBflw(q&iT4hkbPHT~Y?ATS=y2Q)Y$OK8(ikRAkpXwZ^cHxi%4cXNU@*q5?9&Z_h z2sYxmc0B-704v1q`z5*#60<&WS_~~Yl9MmvFu9n~iC95&^?FN4Pu(XoX&m5!t!>}E zb%4H>Hhl$uvWQlewYNx-|NI*BC9vL6dw^JtT5}kjx4p>Q z40S$+S$U2s*g{?*eLBj9=_4N4V0}hU#e?AZ|!=xSGT65(p?_Ck_^}J z6D{_Gu5LEbH9_sCB!}ol%WD1$3ht42eS;wVrHL_-54w6TQNaVn92>@X^&2 zW0ERaA$9}3mHtpQ1zio-+=*Tmtc8h^QIMwtl@wafPAsK%2z{c|Z=kbct?R&J8F&nn z1q3nwb(Jlb=qC699`v>3-SrCil2bsHh4JV&RM?JF<`SALn zCtoHTQ|AX3?1v8xuT4S0jh4QNp)&F{x}hrK^L5|y;Tr1_M!!yFwO!eeoy+z*^=@N&@4TF zT3+maeNZH&F-~4hl%lmqr!+^WwTH$i3`aqaitWEkm+*ANU=jL0No4d$2MH!=lKYoV zD=TM2Gzr}Xt8}_zB6U5|A(Bg)l4WPjc(TmTMtIH$B}E@fCeQehERE~r2{PQ=e+{s|l|*54b& z0zx)$JMDlxQ##?6{Es}f(0N^x@3AXX1puxLJu>#{*ndm4#kv*%9FBaid^S27O$G?< zhf~w5`5V=TlU3{+8Tn${Bw(R`6cPq2h+JQOES_(l3FF)>#kTbu*}4iD8EhT~aRXPe zZ6ja-N|6E^l$|fIk+7z-iiQ#z*Bu z-U70EegVurO#%0yVI!qrRNxulWQJ^hKp<=y!1Hk0rtbwhcvVBB4b)u-)?(%?5i>?e z^ENFW(;VKgjPxIf6pXKbQNEulz9~~TnN(84YoAysX(?>z+mlxGc;@B1wKc?APeUv? zuBp^HvMLbae(2q4N0G3n9|Wg?Dp3DThLRU+f<~ z{MHb@w!`riNBM9tUcNdGS{qS+jt_t6%vh-t9Q?i6H@zyr=K(r@5}f+2m7G%0-9xtv z2dj)EqEAuTUeuS`F&ai6|CWmv7sYZBC_ugZRaaX)JcPzu+A0S9LxhrQJ|zusP`+mf z|Ft`y4`H|#*f^$sa^keKYiZ#Jf(KCCVYlUx{vRlziNbC@H>81b0=@O0X1(sJiM5_h zFtpnvND?iIcTsYG6VZB&CaQV*_1bX*j@pKLCRLqM$ym|@0R+qLBur!@13Z=^uY@QE zy-mZ$M|3Ku%FFB*seANO$*c*2PdF_gD_3W^bv+B~1|nJsYuo7)OSTW=xarg22;|9) zZhUsyR7;q52@cR&T`&2I?PAJKGiq8rBx(`%>70hB8IY<{tLH73N@=jTMxt4@=0qrbudzJ1nb{ycP!#}5-)$gQv_cPvC~Yv34Kw20E64kJM|>p;n#YOcKIeMydJgf z4r<^G(N1ct)?u5i!nRI<;o@S~?o0*9G0CJTOgYJregh~<%$pG@e&)Cc+triifOPsp__xS_I79f2a+&tiEyj0 z&=p#5gd7Z4sKlfyMX|P}ka|+hLZD3$tX%oR6_Om&GGZ5ArR^e&E@^=*KJSxGVrmc& z%~cA%CAA77D`S`3oJ8dSdR+WBkdCO#^>5>UXJh_0e!kbgji06Z4cFcD=92iq8lULv z$zgI@PaY?ir<2c;)8*tza=D!RF=>~RKixX2%5d?M>Xu0zaHFguiw@0bi=*W=CA>Cw z4R3N2Q1$dV4s<(9X^=LTvat6MTD?bQb{+M zRvvuL-F6On<|$u3Rmy%Ld4Adxz#xrq1RGD{$ASnwo<*?BC=NCO{Us~2 zP&MbUOINi~$zM4jPB!NwZ6THE3;5cWqpAyt=EoV8@p~Qk;vy^0x7OQSz)eTze}$j) zpr@CUztoK3PQ4Jr|FJ*PsTb0j{HLpb)cFo2<#n9epP__e9#ZE!loUrlH9ta$Xrxl> zE0oNekhC+Vb0lapq<)Z*0WI|`Kue2>-IW;B_aFuv@^tRD4S6;YgK(}b#9%|Fdl3U3 zW}hB#_`OKNhOFIGVMC_75rz!~bX^9GAYt1hrXR|c7Xbs(S(O0x4g6@6x(Zc z6}eP4n3y(5j)0lFq~3P)hl{@tdAMVqjrHh3{V62X(2-=saF+oMB;GKfT}5x`>m3L5 z(=lv24yXs=z?V39tPyCh|j+T)-?|y2ItOD`b*s+Agt5 z|BsF}`!;KWEuw-44|*)@DjH}JspF&VND28KK*WOwrTEd|2-I*Zi5)JWYvPjNI}$~N zA_au*q#ju%`8sJmnM!Tg%WQqhlP<+u zImvEd)aBf!gaYLQk&C4XbbhfE){V~v=PXHgC@y#g_}6HPHTpD#B(IChyjmGfM&g^Y zGw*HkWMqi}Y1dDXYXn8GJxc|tqd$dp|5O)47olC2Kf@>%Jn3xL{GH z)v8kpKUdhSibWR!hpbOp2-6VbLPFp?4q(~sI^I>+`jIWysUitg&+ zPtI$GLB?b&J6U9Z9#eEeFu%Z?8~Qq;k2Fok6S#M;+Lr9)#_VDMPU{XCsH?zb9hU*= zNY}BbmViqp0~Uqm2^WVIs)EOUTAR?7_F0G)VN)~Qwzp(mFwsIU2J%kKyy967v-Hfv zkirRH9IZz>Sgd$bqLHnBVwVK{Ex){&mfOl{b&;oF~R-x2Xtjf=+LQ>i%HSC-)=_H%yjwEFBq9nsA2i1F? zVlLB8jV}_U=Fn|}i;o;Whw5{<=}k_0UualY;*o;-7eW~$_+(~2=m{RIwH8Nbi-pCJ zWwjqhzqgKmvyEJ)Hj59Qce~_0p30-&J>iW*TN&&dmK8dv^Jw;Jrj)rb0_$iTltASO zHF`F37R*S1YX1L$Wl7$4-dhEL*G>fAJM|5MZ<-!jJ7iiP0a+*{5pWdr*b+1iYEBO7 zVUD_-*!PeMCC0B!%?~(jk=}M($v9X&PAZ0L(hJ;wwBkfq*gr6L=h05=hmHBN@!}Jp z+=4UNa&>X|7pGT&W!^ObUDmJDa!95m$ljE4$Lp)2^wDstDR}T8gSs$C#XZ-DY`_IO zI<*L9=&+(I$%3vVaEn%3vr5>LX=MVR2=Z;(60r%lysG2iGV)G&9wq3&E1pyu%Rm-T zm25bFiY@W-i<_RG{f)|R*a%|%Npv0USjKU88SBku^o+&7+|d0?nqJP8I4hUS&=5y4 z-LKG>%JQGb8AVL`nH^38Ci0De zVuR)T*fuB`Lm5iY$}eP&7pn_;z=E9=C&V^?9P!07Y-=3f^ens&+UPF$R!r2)wSRMs zg9RbreJ4ja@s}Oe3JdFjXdw2^&Z?$I$_zUCsE0cV*Dfq+I~tKFGihn2=@8m(X=s3u zPfgg9y|SCGCjvLO4)dynx#Mxdu#_IuutI7RvIY6t?M$;&-YPVJ6DJg#vq1ZA-QJ;p zflemYgAsxr(h|1_2TsGdT6K(*09F-7?gU{+KFE4C4F?$$#{cp7kE4Unp2X9Jj2@eQ z`sX--e_O&s|Bv*~NukUaPnsE-eBmxf7#l(aq2ap7njZyaCSFWVP_cP}>}VTR?N-A7 zyW%|t1|^4A5+n3pDlNv{aR-6CtE8uYx3j!>__F&_p#8+IG+l{g<|f_g?B<^171THdjdjA8gtzSixbOrb+y3zj}e1c8p*1W<%An)=?hb^t!7L?bp4dl zROq%>&mEAJaMhV$SSWSo$78&-{X`|3?!tUSTQqKUb%DpCV0^^s#VCW3t_ysB_0YEC z!decCHoxqRV#RK=X=I67FL!9%)Hs<9RZWE$ZHNm{o?Hf$-TlexFbs4Q#B=p{V}?5j zEL5~qf}Yw#A=HLD)yO+Efjjzk8&c#q8?Zq;RVxUixI_B#4Rr2lYk2xaMBAeiKUI>? zCMS8IS2JbN=wgP~J7I<+l#{-Hh)EsLPPN;&b9SVvdN-9udAMee!eR;ZafRDh8ATHe zx({+b#OKbsK^f65O%G~}3q4YE!|yof(jdaTYOtA$*<<&ir$hr!g==kJYVl&)gd^5y z<=ziPkbC*WYO&_QjJtYS1R_foW+q7^BYDdMtJ4<9yv@MopeXy;+g zUUTg?JtXF!K* zZ?ghzB0%e!sOvKJEIIub&j6sgmhAgQCHWUa;nKYxss`aWU!z zuM=4{2*+x>HtJ?uI{YMm-zeX@Hgv>?54{{Qgq6q-E6ji=h_3L~h_({Hvaj9`AI1ry z++0FWimPRj*BDX={I6W&f01ZQ7`ElM*9U32cB>q4KTwqD?OV%3@VBZO#N31nv6A5H zbR0wPD535dS659YJ^V1xx*Z5usGYJqrgFX{@?F9fJox2?PA4;FnGl;brB-K!L2^EgFy0$M35JNN@6O7wWc(f zl)y~#{zM;1O{NQf34Iwoy~rERWaytpA1IU^EHSV1w28UqWu#(~7{<5bX({glF5 zTt+?mD?(^!DU7iMIh2Q#g83(fpGi?|etE_2MTFgmv=_mDt37w>ES_Xy!CJ2@p)lV{ zQ0{JdI2yEq$$_;+c*PW^(RJFW(HI}p3H+y77aqLA9K1&NO*{%a9s9oYy5+E39q&WR z9n42=7jPv@osTYQOZ_Dcnp#tv8a0?_OzZG*F$f zaFz4clO%&EHGd%F(>LWwJ_AxF=Y;r5cThfjpkS-JM`C}{*YFJXkkT+P0dEQ{9xCTr z5}YpdkU~8530#wbgDQXEn>yUyh5X%F)XUk@d14buK|p)D7)NrKYXq z`5iX9Rs6ogZ3`VW(@!T~<=S{!3UxohQqynV{?0Bu>X8)nb33#bN;+)nxwT&`f=I(s z#w3^I2T2wre7o&_-NJSdpQ5|Hqx>H8Y2`Dh@a$b z2t}kmn?Q(=6x@GSFN^DZLGNW@T0(F8VJA!Y)ZcMmMz~hE%pl63aN9i;Qdz+n$ZuJ= z>00Rq8HR~?yp9z5xWM{W@=C_+HZ;D39AhLU7$XU6K9-2)Kzv}Wyup(ie;l&|RQ82B zP6z-La?R;k?iHGSj1Lpviv{{XGTjdmagm^@qvX`{YBYZy9VX)^j}!E1G#dWtNgRnf zx)V_v$MZtaRnv&wYGN5Z$wL!x=L-4~vFoh?Ha1FJmL`f4#&+Z$7@)>DV)Ui`HW^8T zr};^Qimg#%yOy6smj%g{Irv-r_@;m`bW_V7J-I9%Cb2>Oc9EAXn41hg6H)Yh{xU;} z8?;C1*nEGR!4kdZGA;{#k>?7Aqj93;r8qPKr4N4!$tlg9zK@7caUT$0)>|ir)n))& z{Y*X^b+~#e%K37&$c1gu&)IU7Q^8E7xZM_-J!Z0S>1BZFkITe{cfM76txJF*q$T=8 zT|q0`0-AvPWe+#X9&M97-XwdxMflJ09&Hc$_jrF#>^t%Ic+Z)EJ)Yn_W7+IEi)PPS zFMIYv*>e}j9__z9u^;zv5%0;ByvHkNj|Xv2Oy-`;6b>6WMB&ugi{dU1#)gh3x<#!@ z0ab#@|B8;{^3ui4#zvsk82)89fv;dJ8{pD=9Jp5q$7^uQX@{~D{VohG!emi`hnY?w za>rV-de7ycUpw#Tu9`&wofS*(e6n5z_KM~6FRKPI!&~d%bbc)yuKM=^CeL{e7xzVR zgn#%TuZkkzfx0m|it7sX;-x6+^J=l~$!xLo+FH8aS`B`II18B_7?b~oED;y8lv!*N zIUGW)1>^AzZ1C5UJclTMsm0M?JdyBX0>56z9&;>quIf;Z#Mu;>W#9eu?c0|>K7aB0 z>+ipN`^DFP{rdGQe6%2TfVo_hVn}{~2STXxO0K{N6fWJwyAC~hpd0|bo=Beg3PXgO zm7XbtjwKHvf`#-M!nG4?-k9p=Q1vaU+cibk21ni3oDfcqavh`RBdW9vx1N5)Nm~HKoFjt?*+EXU?qFnmDZ8MDsxm zonDTDvC}J1F?b?-C0X)VvLjrX@Ir2UxHDk~s+pi*#a~dE_>gD5L3JKJG#%6ma^-Pm z&aHq&f0i&T#AN_l^DiI3SaHUR?G@y&fC%SRb+y9Hk5@a*BCsi2fe-zKltiPHa0@1& z8jzel=e~M(?)$MdY&UTeSbOA~;$40et?Fg(53hdy>(^hrjruyeSoEVf(%WYem2i{1 zh$?>^3G&-T>TDg@Tt|M8Vy)fexYOM97S~;wIrOGG3WiRi&mwf8#fPQ2JFIi_$c&jp z<48V!iDiBiMU#kmvVz_j_AZLWA}^a3E zJ3A2!$7C-;u(;_Sf^t#FfN41dly>+6rXznN`Uiov9fxiU;J%A7g&%{{hf$3kMZ>+M zL4?psMA8Ce$u}IUgq?qi=0yP9^H89J7xlIzUsx*J; zyQo^MDds7nOS)t92IIXE{Ez;P_oxMDI^D5K$H_Q#Y%Z0Cyh~-tnK|r2)9mxC$zj2L zo7KOBz%@^17RB|Cdn7Z2CZT-0iwG!`Y3YNp)F25T^nM8{DpZEpMOJ!wD9QB5u+c-8 zcK`%AFUd#$Z<4&Qf6~}^GQ#(J=O$#S^g(>_EHbOW48t-g;m^Z|@)-+34XItwPCEX4 z4AkfkPlcE->K8plC}3?oi)f>Coj)h}jCl5dBBXwI60)RNGV!Is#H0AXR{|Gb0vAt; zosu9zMp`L+ziJ?hGQ!OD~5;`3dIl}4NDl4);+1o-5ZXR@qtw4HrZ^0wT2EH$|lj0j@Z2_ zsks~1&sP)~(@^krlS60-#BxYW@!Ho`=jR)-!VRCh#+;v4)iTe@$hhL>$%9sZz9Aw^ zI9-y_V@fAi)TktBE;800JWQz-c3Cl(74HGACGc8$&Sr%GH?S znT*@KE`OpEb`Wig@OlsDrRVelid&K1zgEFG+7Ktjh0-1 zZ}|LH!f$1}5VJ@*ScappyvHJ88AKokw@L>$;6fwhq*y$Bu-|0G2$cr=qs(oT<*{&d z$;*z0WLhW~W$A3Iu#``%`;!@tA%BLe+Pu2FTISa%zVIDZjBv3z`hOdwg3!po+Zt}n z5*BBv7H6H_==ZhB$?SGobBjv)gK3BL7`=Aaher{Xm@VP9kGw|)LyCUnX)My4>oMZO zjFUC~U5}INL;OBW*7$dQc*|CSvaDEUgpd@26CH4f0f*YD9NrvD;~7v|;D3t6jp02r z9^Jo9Ya@Vf?>Br*O^SqKCOBe0o}Z$Yxeyw$;0ND)NL|aFd$in^gNl2^phQV6-m%1+ zlXo_|Wrbe}MIiyE!OJi1Y>9OxlLfF$dx!dSNyvDQeAVf;h}BIv75Doq1K3*T|M?F2 ze-7mD%+9Ur#p2h`J%x|GrGG{P44HoQdT?3BV4t?ICE%>-9Pf;B6x_Vhx-Tt1oG{Y=nhlZHRt)^fLv3>6|*m#}mWrs0Qg#=rpET4^mQ8}!O zq!^u-RgH1?ZIM~VP7N|MIPJmZ^SZikOE~vVZQ!I%?dQS?x96mhHGe2mc>xt=_}(MU zYp)OaB+p=5v@O)W*cG_;_Sg=u2Pnl}!>={`S|g%BV(~W5=kvU2D!8#L?XyIQ$@QqP zq&p47NT!-U+?$ki@|slU><1SSIN{ylNv18& zzm8VkcCZAmBR9r;7=L4L_~5kkpoe69J6tORY3)FsV*6?$rLRC&maxwO?9KiFPGrlw zJQXsyYaz(GN>}sLJlzcCmT*H6$JmbA_Crs_4DMWvZJ)ubOR$En^>C3O@k??`;X){a zc>CkN^Ks{)49&-#C)JyeyANb=KJGrPA3q;9P4Zuge5-KGu76?jU=VEHJ-p#0=!}I5 zD0Eq3?HyO%IyPc!*!n&lb(_SuOc>6&tu%@6T5&---6WM-fe+GDQL~2+Yx5J~=+ydb z;DYmU>ywMPJISGJ#uBaI`(u|V7jh4}L;2!KPdxY2!l_cVbar3ANDErjJ(;v-V&Ts<9}y`>64cR=XSfnE@Z<(M$vn*@wl%ytajr9&c{E@mcD=YSoa$T?Ka64 z|5!Du(Z-TB97pScFa#W8slY|OV5p&ag;I(AIuUS64c_eWyYj3SR#uKG$*dgJ)a;oJ zLZ%kK;FXL-lH#^Tjw4M=2GaT!!534>R2%uJSUbC4iGSS^v59mgeWQ~8wn_rIS4Qs4 z&uw*46lL~sW%Mx96K+d56tE{^tT-xNAxfC9u(_ks5TnY`*?X8%;o;iU;o*BNEqTPl;cClkR;Z1X2V4RczwtqZy(QA~T8b~^wz)w&+ zN%HXprg2t-RQEtIxEFQRa8Zq=SAxve2paGohp2tUBvBU_5Ea}&OHpDvxv3EUWtlAS zPk()z5OFqQYKl397-n#E)TxMC-jYDwh!CYMZ*SSDhuQ2d5RybFX{Dp&Ovzc70^aZ} zZBLejh;%lrhU=#^+GoQB|FnRRD8aK-r=Z_D3C3T;AYt4!CV@{(a(&dRQu+eIl@ljc zLR;#zN2Ls?-1vaLuIcL=qhy9$cUw@QjQ15doRXXSug9fscgBqz}(J%KaAe>Yi zoOoG3Wnj7tnsX@Nlf-;x#Oa$0lJ!ozWOMG~H zsnDV`Q!%ZzLuxnV)DMAN=v38mluD1Ds9uE5q(V{IHRHY!XO^A9-Wm{3>a}R?wSQ>s zwa5*DT(hL!Wg%IkYJVO-rM#Bv*HQj-bTsh8CxM{+mUaF^wd7%4H+=3TFjI>4wcFHB zTZb(t9X7*E<&DtGlB%nDnA;Q$e1BazgYW5*c{>)a7S6T7e!t`19O%hA!27qT&7HT6 z)ya#ds!!QacUCA~CR_PJb;*B?thGjaX%RU zm3Z=n1hKqGX29n5ismI+eC46kert|)Ni`WEp;0%{reDYVg`_Wd7ZoAK?Gyo?bdFlV zQh9fvd3tj_0lGV=k~REY4_3Fy1%}Os*L|-g`)819K3oT4;5@s+d>7KmfYqt}3^HCg z8Aa6DZL$zGcI9-d)H&aE=Mp?P+>jR{A@^lxPcgo$uUIfplf0E0e*v|2zc{&4yadhh znsb4-lqe5CPr$$691NE2icOUA=PmVMk**B>2yC-JGJ`YB$6d^>M+%fMSY1d zxwT3R1btj3;`~Bye@0H%?4DU=rT^nb%)04YNX+YI8Hj%HbC@*`I--hYuNJzC&63t5&~G)vsk_G+?#$278jthKzI(OChRvmj#kl0KtNVx}qyl z#rN5Y@3XPFPT#)e!qP0sZsk;1Q2IeWCbxxTO6Z~`!oAO)49p;t3pm_&&Uu9nf=4_Y z^i5jqn*Lqob-@B;Y!i zj_PBSnM)Vghn>vQEU)HT*IYX_*Sh9f)NDrST>ZvqRIM9TQ=@KKNaogjs{4E@`h03e zH7d&N*s1Q=DR)e@_f(J6DUZ}G%idJYGNJC+X>AYbf2nT$Y3fyL_hT~EX$EBX<%hs>C)it+H&8@Dvb!u*P&8<^&t7~p` z&Hf6z)Pr;BtguTx5tq(HTN7ebry_y(IuABSwx!WRP_xGpC70Yquh+jYXbXt=z51{+1%GR_@mE{>F~O z*cv7{VHJA~Xk9Qy7(PiTeie#8mhn};?AKPt{uskoPWUl|$I3UJ%iD-ch{q!lLli4ZD#`3f zG^I#F*BD$L^9fmM0++1pru1ROOa`lg6*z!EU;$u&PIG)y%xDCqqFry4WU(-f;;+70 ze?iw;pA5QU$ev}steRZaBn=~^^w>3O;ccVfuDbS(8iROSNzbOgpTYBM0_#4X-f3caXBh3jOI6oa!t z4F@BTU--L(~7qQ_GV37yUWp3a38RW%rj{wv)c&zS0X62G60<+z%ptRM}96w2iy;lchnKN1vz&OmtDF`;DOMny*xv2f=M-gL; zK1^%;_muyokW2oTKo>75{PL7T@I(3$3KaRV9#>wzdHcmrKR%P}nm&IE>W2zRu*1p) z2TQuht?b1tVp^8bj*kTMZ+a*&&(kkZ5*FhScKP0%WU#?<1oq^?=+Ok zk}9_cau?qSzQ93v<_vmX#uGH|O#YcGSA5YBFJON?^r#`gS|LE*MVlkV z@X?r^V3%gvjyI2|5t?PADBspEnnA3HVXAN@Y<&b~qO;Zl#&m;q0zJ&n#`|zQEn2IR2 z&?>riPIFY8;P67sczDuwQb>zXx-HidWuR090TtBb@9u47<}EC0RT{)blqJ4s_x%dcN&cwgb&9XF`2l7#3P2#nK+uPlpMSg1py-U`|Qw%4+~3^_ImtO z{5T}wUukWzmf>p-pXR24slvV*AB`sEzJEEVmb))bAOvtGvXl_81TrUP@vl3{irL(2oP=aNd9n$QC9jL;$?AeJ$n6*^>%A#j8kX@3qe zjTr)Dl6;*IgkraQULP^i#B3qfE_#Z~W-m$}U60e~QR1}hQM9*q!q+1F`p`*#DAGIO zYY|RP;LRw7x!c3|gJ+Lml#hT{RG^pWC0GMsZp8K&vmrH3=J5IJ*FS#!`A@IEeEZ$= zZ@+wnhwoR<>VG8k54r-aHi7t6S;#&KV3^dPt%e~hF=WqMAZe$o zHYYXrU^7srd{V&TM;xdE7CZmFJ`~^h*Ye-Y#q^q_>=g`-VYEp&BJp?FNsebtjweNq z*dg%iFjQ;_OY!zz2Hh^Jq^wp7y$1;9WYy3?Mxa&n`D}E%jjy8P?uW1Gp?@pHV=;^L zqNwLfpGo520Gl*4`6N!Y3#T-vlpVYhoQY{poRU7lMXwXtVTAMA$T#I%&uud&ri{qi zh=DUjbsF;VM+)dE)W=O!s@_7SxNw8!h}u3G-Qm$i$}_)CqfxXsU(=sQ$)j4439fVp z@}WI_IB7Hz;Z9V>XMWh5fq(s0<~@Hfh=mow$B+cZF+ZSyte*D-e3$S8B)-@;klFVU z+-DKU$$mvMk7b0)={Y!(>Zm4-dR`cBHds>V`Q6t+0-4n;`>97n9P&1Lu)hn&w) zXIE@{zJD0oj5&tvb{gK#@F1a@j&mX0Ab)0Hi(V7Q?L}R^ zCo=tIU01Lt-{EC_4=D71)&I4Z$7hE3I_ zq(R|@uvS%2Uqqbbb%Rro39Ci`!xTcuA%LQ&{k<9wrC9CgY6u(HkV}wQPW2qe6b2Db zIY_wPm~br<-r8dxIDhS|6HT=1Q=MoV4=Fx@Ue^Vy-MMFwjM#Enm&tZHhFXz!w}Ytj zqzUXT>B@RM8o8THIkLvM@SV^g`3gPGp3G>y|L9@ zH--V)0YcO3jvGT)KFWf5@0Ja747#&<_mevx(8=aeK_j$5$$wDzNi>2#d)N;SkU;fG zux^-g#0Pqo8>JhN1RtFH}&cxWhmNO^t7J%@{n z1h~&`9C^3ufPYv>`;Ay?@edZb2}+o7h}V(Z%Mj1e+_W z20phi`P>!qxp=2fR>;U!^y}8?^0u=>mi=2wU-tM3BIQ5WOnOU5>0kQXDu?MlWl;Yp zzCoql3XV(bpuwn(e6Iju3V;?m7Gz?bAqFiIK|B`d5Qy*xQa5hN=F`e`Cko6HonJMP zaea8<4}bjY`kfP)HXnVmk=w){uYX)iR`wb(6>uh4-i@#f@FiSMVnPqHpuPZHK%>8w z?6VwD z({q8TBsfxqdS|H*$YjNx{4iJ}zjgjLpBBvaRm4ZdI7blU@;cQ+tf>Rt~p z&`gM|yqSh>5IgvP&y*|PcbZ3NGAy>x}V0;==0=!}CL(weIRXy3pBmXE|F#IlmvK7(6wt87y=Yq#YY`SGg z4NFFBk?zW5yU0?mMA}Z3EW9#Fr7TUcSd^w&%q@ypZy|pEMF9(_DbRgsyD8K)*7zX7GH4N6sSe7_V!*CmTLJ2{$3 zj#vk*^_ViiTwqMgr}eZXEnqWqIWuJX0_1o4sd=`fwmY`_0w_~^e(kQE6#elGRnj|o zBX&WbAn==lT5~z1EhmRQ|HO8VMI-q{k!0j9r;3$-uUiJ=9~-Vy8*zXz;DvsqbKmS_ z!`Yp0=*;Qrh3h>^oge~ZqsC_->7w5nOJ3W&BNGPvFuxfy@85PhbUCAQgavhgrAq<=^bk zw#V<|PVlKC1Ec=FHlfTKY9lzm;b%IcsFl;ZL`_Q|1m!H56%n2 zECq{D=55l(oXTY)$~%+@jQL>1!$9HW1WbEp*D_A+)V*gWh{aQqE+TM{3+)N1qfK8A z*ym=MO1+6tY@KS^Ei5@DdWA(*e_K!5z+M@T+S3OxgAd9hao{IL=M63ohd@4GF*_zI z2QnhV1yd%K)ZhT_6>?nhq0{2AV57)5dKEP}GdbQk8H^v1I^R;hihSn^UwwX1Q9Z<5 z5G<(^71Zax5z=0Ipw8{L1|j&xm+97ib-3NYQJ}v9o)F};@aP=D9E_4Ie>qE*$vnAm zaBccd=MWSA%0;^I5*hr*0t$bphe)2zi>L3V{r-YBsf;^W%%;uz0yj#F#(+0-U=yQd zG^zV(i$=c%{ym(TFG&{&8xl_mT7F9Dzk&23`3|Wsbm<$@eWgm>nCx9NDRwFDXGph0 zvdcibUyL8upv?8Rf*i_fs|=IC(09-ulvl~(Y(7*vzOf2&3p?Dk3Zg$HCT z2jp-T>fI}BglK|j096l}sOrv&?S8rgNP{%yK{}k775*CTwcFIdd+RQf^`CBc0_EJd z<*jV_ShgJ6iHldAxc~X<>vnd4r!^8jI7(8S!~$+$f&)X>PCUR%F~D;j`73+mvxXnh z#G7QER(BZ?e>lx8) zgO%fGA=FwHSFbC?8(@wXJ`s}$*ly*R)=?HPF4C?ve6y;bRi6uFC7*btr$_u~Gec(Ql1M@-{n?~yX&?mtTQ zn5|TyqyrG`f89QdHa^EU+vHrx{wlsC(VWf1;dGqmc9Y+>xa-u3jyu$kAd?doT)pCz z{)?>5U~M&>{S+gmT-0xB>{YOtiyYA}_RPL)(h#_pq|aar9XX$74VAsXo`g|Bse=k~ zgnN&ko`+;}q}CfnN@K#4)IEEYL{G6k6bddd<6R92f3>RDqr~Rdp_z%J9Tde87mwR> zfZWwQyGo-PeV(9IV|4H=f(9L&KZ`aC5O)wU=|P6ufx15W7~(X8_-2as?dd^paP;@# z-xvM(1O8g{d;E12ADr9p?&#G@df6~%G<&+7W-y~SwZZ6TGq~v0!)95`^WHdyT538sSt?8t#N%_C=Rq|k ze*%u9Ngs@-xwxr(MNXWDKrqo>;0VQYlgywX?O;5^V@V|cnUk+Yaum%?&cewdLGG;y zVhbOPEO=pT{hMQGWs{HtESkTsOStwAuahyPZ;rjk zGQr{;mBZ^k_1O?CLf8bukkZ1(x_@RSQ1}WH0Kw4b!p${YaMqK8e9W^LE-Ydt>6#Fq z^1+cJa4aI0LYc737C`fH27mhTn;xgoLR5u>Ks*;>j9~m!oHQbJNCMd_@Nh01Ar?9S zL6Z-zKp;Cfr07LCAO_|j@s=Q#1x8O^Z1A0CddC~fC%LTz@HOzc9*HKdF@(=hsO+z@%bdWcd$DCHZ1t158CXfq zLV7Fl>~2k7Er{Q-MZJHxu(aX$2GdMx<@uSj;%c<6Iv;U=`Ase$O-Dr=^pUO30qYt8 z?+y{T}Iw( zFVdIgDA^+}O@^6QWn&q4coi~78F?X6L8HxJ Sin7_;GwdQ|94VW4;KeAW1J6~cD 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 SHXT%X$NvxL7Z=~1Tmt|)CP#e$ diff --git a/dist/all.require.js b/dist/all.require.js index b575e433..c5da03bc 100644 --- a/dist/all.require.js +++ b/dist/all.require.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=gestures minifier=uglifyjs` */ /*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.3.10" }; +var fabric = fabric || { version: "1.3.11" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } @@ -9167,7 +9167,8 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab * @param {fabric.Object} target */ _shouldClearSelection: function (e, target) { - var activeGroup = this.getActiveGroup(); + var activeGroup = this.getActiveGroup(), + activeObject = this.getActiveObject(); return ( !target @@ -9179,6 +9180,11 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab !e.shiftKey) || (target && !target.evented) + || + (target && + !target.selectable && + activeObject && + activeObject !== target) ); }, @@ -16757,7 +16763,6 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot this.drawControls(ctx); } ctx.restore(); - this.setCoords(); }, /** diff --git a/package.json b/package.json index d6fc1aea..002a35a4 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "fabric", "description": "Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.", - "version": "1.3.10", + "version": "1.3.11", "author": "Juriy Zaytsev ", "keywords": ["canvas", "graphic", "graphics", "SVG", "node-canvas", "parser", "HTML5", "object model"], "repository": "git://github.com/kangax/fabric.js", diff --git a/src/shapes/group.class.js b/src/shapes/group.class.js index ee7c2067..6e66bba5 100644 --- a/src/shapes/group.class.js +++ b/src/shapes/group.class.js @@ -236,7 +236,6 @@ this.drawControls(ctx); } ctx.restore(); - this.setCoords(); }, /**