@hprint/print 0.0.1-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js ADDED
@@ -0,0 +1,441 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Ce=require("@hprint/core"),Gt=require("@hprint/plugins"),zt=class{static getDeviceDPI(){if(!this._deviceDPI)try{const u=document.createElement("div");u.style.width="1in",u.style.height="0",u.style.position="absolute",u.style.visibility="hidden",document.body.appendChild(u);const k=u.offsetWidth;document.body.removeChild(u),this._deviceDPI=k*window.devicePixelRatio||this.CONSTANTS.DEFAULT_DPI}catch{console.warn("无法获取设备DPI,使用默认值:",this.CONSTANTS.DEFAULT_DPI),this._deviceDPI=this.CONSTANTS.DEFAULT_DPI}return this._deviceDPI}static mmToPx(u,k,B){const V=this.normalizeNumber(u,"毫米值"),U=this.getValidDpi(k),st=V*U/this.CONSTANTS.INCH_TO_MM;return B?.direct?st:Math.ceil(st)}static pxToMm(u,k,B){const V=this.normalizeNumber(u,"像素值"),U=this.getValidDpi(k);return V*this.CONSTANTS.INCH_TO_MM/U}static mmToPxBatch(u,k){return u.map(B=>this.mmToPx(B,k,void 0))}static pxToMmBatch(u,k){return u.map(B=>this.pxToMm(B,k,void 0))}static getValidDpi(u){if(u!=null){const B=this.normalizeNumber(u,"DPI值");if(B<=0)throw new Error("DPI值必须大于0");return B}const k=this.getDeviceDPI();if(k<=0)throw new Error("DPI值必须大于0");return k}static normalizeNumber(u,k){if(typeof u=="string"){const B=u.trim();if(B==="")throw new Error(`${k}不能为空字符串`);const V=Number(B);if(isNaN(V))throw new Error(`${k}必须是有效数字,无法转换: "${u}"`);return V}if(typeof u!="number"||isNaN(u))throw new Error(`${k}必须是有效数字`);return u}static validateNumber(u,k){this.normalizeNumber(u,k)}static resetCache(){this._deviceDPI=null}static ptToPx(u,k){const B=this.normalizeNumber(u,"磅值"),V=this.getValidDpi(void 0),U=B*V/72;return k?.direct?U:Math.ceil(U)}static pxToPt(u){const k=this.normalizeNumber(u,"像素值"),B=this.getValidDpi(void 0);return k*72/B}static ptToPxBatch(u,k){return u.map(B=>this.ptToPx(B,k))}static pxToPtBatch(u){return u.map(k=>this.pxToPt(k))}static mmToPt(u){return this.normalizeNumber(u,"毫米值")*72/25.4}};zt.devicePixelRatio=window.devicePixelRatio,zt.CONSTANTS={INCH_TO_MM:25.4,DEFAULT_DPI:96,STANDARD_DPI:{SCREEN:96,PRINT:300,HIGH_RES:600}};let Se=zt;var Te=[];for(var It=0;It<256;++It)Te.push((It+256).toString(16).substr(1));const Yt=process.env.NODE_ENV!=="production"?Object.freeze({}):{};process.env.NODE_ENV!=="production"&&Object.freeze([]);const we=()=>{},Oe=m=>m.charCodeAt(0)===111&&m.charCodeAt(1)===110&&(m.charCodeAt(2)>122||m.charCodeAt(2)<97),Mt=Object.assign,gt=Array.isArray,Ct=m=>typeof m=="function",vt=m=>typeof m=="string",ke=m=>typeof m=="symbol",yt=m=>m!==null&&typeof m=="object";let Jt;const Ft=()=>Jt||(Jt=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Ut(m){if(gt(m)){const u={};for(let k=0;k<m.length;k++){const B=m[k],V=vt(B)?je(B):Ut(B);if(V)for(const U in V)u[U]=V[U]}return u}else if(vt(m)||yt(m))return m}const Pe=/;(?![^(]*\))/g,Ee=/:([^]+)/,De=/\/\*[^]*?\*\//g;function je(m){const u={};return m.replace(De,"").split(Pe).forEach(k=>{if(k){const B=k.split(Ee);B.length>1&&(u[B[0].trim()]=B[1].trim())}}),u}function qt(m){let u="";if(vt(m))u=m;else if(gt(m))for(let k=0;k<m.length;k++){const B=qt(m[k]);B&&(u+=B+" ")}else if(yt(m))for(const k in m)m[k]&&(u+=k+" ");return u.trim()}Symbol(process.env.NODE_ENV!=="production"?"Object iterate":"");Symbol(process.env.NODE_ENV!=="production"?"Map keys iterate":"");Symbol(process.env.NODE_ENV!=="production"?"Array iterate":"");new Set(Object.getOwnPropertyNames(Symbol).filter(m=>m!=="arguments"&&m!=="caller").map(m=>Symbol[m]).filter(ke));function re(m){return Ht(m)?re(m.__v_raw):!!(m&&m.__v_isReactive)}function Ht(m){return!!(m&&m.__v_isReadonly)}function Lt(m){return!!(m&&m.__v_isShallow)}function Wt(m){return m?!!m.__v_raw:!1}function xt(m){const u=m&&m.__v_raw;return u?xt(u):m}function Kt(m){return m?m.__v_isRef===!0:!1}const bt=[];function Ae(m){bt.push(m)}function Me(){bt.pop()}let Rt=!1;function Ot(m,...u){if(Rt)return;Rt=!0;const k=bt.length?bt[bt.length-1].component:null,B=k&&k.appContext.config.warnHandler,V=Fe();if(B)$t(B,k,11,[m+u.map(U=>{var st,c;return(c=(st=U.toString)==null?void 0:st.call(U))!=null?c:JSON.stringify(U)}).join(""),k&&k.proxy,V.map(({vnode:U})=>`at <${ve(k,U.type)}>`).join(`
2
+ `),V]);else{const U=[`[Vue warn]: ${m}`,...u];V.length&&U.push(`
3
+ `,...Ie(V)),console.warn(...U)}Rt=!1}function Fe(){let m=bt[bt.length-1];if(!m)return[];const u=[];for(;m;){const k=u[0];k&&k.vnode===m?k.recurseCount++:u.push({vnode:m,recurseCount:0});const B=m.component&&m.component.parent;m=B&&B.vnode}return u}function Ie(m){const u=[];return m.forEach((k,B)=>{u.push(...B===0?[]:[`
4
+ `],...Le(k))}),u}function Le({vnode:m,recurseCount:u}){const k=u>0?`... (${u} recursive calls)`:"",B=m.component?m.component.parent==null:!1,V=` at <${ve(m.component,m.type,B)}`,U=">"+k;return m.props?[V,...Re(m.props),U]:[V+U]}function Re(m){const u=[],k=Object.keys(m);return k.slice(0,3).forEach(B=>{u.push(...ne(B,m[B]))}),k.length>3&&u.push(" ..."),u}function ne(m,u,k){return vt(u)?(u=JSON.stringify(u),k?u:[`${m}=${u}`]):typeof u=="number"||typeof u=="boolean"||u==null?k?u:[`${m}=${u}`]:Kt(u)?(u=ne(m,xt(u.value),!0),k?u:[`${m}=Ref<`,u,">"]):Ct(u)?[`${m}=fn${u.name?`<${u.name}>`:""}`]:(u=xt(u),k?u:[`${m}=`,u])}const se={sp:"serverPrefetch hook",bc:"beforeCreate hook",c:"created hook",bm:"beforeMount hook",m:"mounted hook",bu:"beforeUpdate hook",u:"updated",bum:"beforeUnmount hook",um:"unmounted hook",a:"activated hook",da:"deactivated hook",ec:"errorCaptured hook",rtc:"renderTracked hook",rtg:"renderTriggered hook",0:"setup function",1:"render function",2:"watcher getter",3:"watcher callback",4:"watcher cleanup function",5:"native event handler",6:"component event handler",7:"vnode hook",8:"directive hook",9:"transition hook",10:"app errorHandler",11:"app warnHandler",12:"ref function",13:"async component loader",14:"scheduler flush",15:"component update",16:"app unmount cleanup function"};function $t(m,u,k,B){try{return B?m(...B):m()}catch(V){oe(V,u,k)}}function oe(m,u,k,B=!0){const V=u?u.vnode:null,{errorHandler:U,throwUnhandledErrorInProduction:st}=u&&u.appContext.config||Yt;if(u){let c=u.parent;const s=u.proxy,h=process.env.NODE_ENV!=="production"?se[k]:`https://vuejs.org/error-reference/#runtime-${k}`;for(;c;){const o=c.ec;if(o){for(let t=0;t<o.length;t++)if(o[t](m,s,h)===!1)return}c=c.parent}if(U){$t(U,null,10,[m,s,h]);return}}Be(m,k,V,B,st)}function Be(m,u,k,B=!0,V=!1){if(process.env.NODE_ENV!=="production"){const U=se[u];if(k&&Ae(k),Ot(`Unhandled error${U?` during execution of ${U}`:""}`),k&&Me(),B)throw m;console.error(m)}else{if(V)throw m;console.error(m)}}const ft=[];let pt=-1;const Tt=[];let mt=null,St=0;const Ne=Promise.resolve();let Vt=null;const Xe=100;function ze(m){let u=pt+1,k=ft.length;for(;u<k;){const B=u+k>>>1,V=ft[B],U=kt(V);U<m||U===m&&V.flags&2?u=B+1:k=B}return u}function Ye(m){if(!(m.flags&1)){const u=kt(m),k=ft[ft.length-1];!k||!(m.flags&2)&&u>=kt(k)?ft.push(m):ft.splice(ze(u),0,m),m.flags|=1,ae()}}function ae(){Vt||(Vt=Ne.then(he))}function He(m){gt(m)?Tt.push(...m):mt&&m.id===-1?mt.splice(St+1,0,m):m.flags&1||(Tt.push(m),m.flags|=1),ae()}function We(m){if(Tt.length){const u=[...new Set(Tt)].sort((k,B)=>kt(k)-kt(B));if(Tt.length=0,mt){mt.push(...u);return}for(mt=u,process.env.NODE_ENV!=="production"&&(m=m||new Map),St=0;St<mt.length;St++){const k=mt[St];process.env.NODE_ENV!=="production"&&le(m,k)||(k.flags&4&&(k.flags&=-2),k.flags&8||k(),k.flags&=-2)}mt=null,St=0}}const kt=m=>m.id==null?m.flags&2?-1:1/0:m.id;function he(m){process.env.NODE_ENV!=="production"&&(m=m||new Map);const u=process.env.NODE_ENV!=="production"?k=>le(m,k):we;try{for(pt=0;pt<ft.length;pt++){const k=ft[pt];if(k&&!(k.flags&8)){if(process.env.NODE_ENV!=="production"&&u(k))continue;k.flags&4&&(k.flags&=-2),$t(k,k.i,k.i?15:14),k.flags&4||(k.flags&=-2)}}}finally{for(;pt<ft.length;pt++){const k=ft[pt];k&&(k.flags&=-2)}pt=-1,ft.length=0,We(m),Vt=null,(ft.length||Tt.length)&&he(m)}}function le(m,u){const k=m.get(u)||0;if(k>Xe){const B=u.i,V=B&&me(B.type);return oe(`Maximum recursive updates exceeded${V?` in component <${V}>`:""}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`,null,10),!0}return m.set(u,k+1),!1}const Bt=new Map;process.env.NODE_ENV!=="production"&&(Ft().__VUE_HMR_RUNTIME__={createRecord:Nt(Ve),rerender:Nt(Ge),reload:Nt(Ue)});const Et=new Map;function Ve(m,u){return Et.has(m)?!1:(Et.set(m,{initialDef:Dt(u),instances:new Set}),!0)}function Dt(m){return _e(m)?m.__vccOpts:m}function Ge(m,u){const k=Et.get(m);k&&(k.initialDef.render=u,[...k.instances].forEach(B=>{u&&(B.render=u,Dt(B.type).render=u),B.renderCache=[],B.job.flags&8||B.update()}))}function Ue(m,u){const k=Et.get(m);if(!k)return;u=Dt(u),te(k.initialDef,u);const B=[...k.instances];for(let V=0;V<B.length;V++){const U=B[V],st=Dt(U.type);let c=Bt.get(st);c||(st!==k.initialDef&&te(st,u),Bt.set(st,c=new Set)),c.add(U),U.appContext.propsCache.delete(U.type),U.appContext.emitsCache.delete(U.type),U.appContext.optionsCache.delete(U.type),U.ceReload?(c.add(U),U.ceReload(u.styles),c.delete(U)):U.parent?Ye(()=>{U.job.flags&8||(U.parent.update(),c.delete(U))}):U.appContext.reload?U.appContext.reload():typeof window<"u"?window.location.reload():console.warn("[HMR] Root or manually mounted instance modified. Full reload required."),U.root.ce&&U!==U.root&&U.root.ce._removeChildStyle(st)}He(()=>{Bt.clear()})}function te(m,u){Mt(m,u);for(const k in m)k!=="__file"&&!(k in u)&&delete m[k]}function Nt(m){return(u,k)=>{try{return m(u,k)}catch(B){console.error(B),console.warn("[HMR] Something went wrong during Vue component hot-reload. Full reload required.")}}}let jt=null,qe=null;const Ke=m=>m.__isTeleport;function ce(m,u){m.shapeFlag&6&&m.component?(m.transition=u,ce(m.component.subTree,u)):m.shapeFlag&128?(m.ssContent.transition=u.clone(m.ssContent),m.ssFallback.transition=u.clone(m.ssFallback)):m.transition=u}Ft().requestIdleCallback;Ft().cancelIdleCallback;const $e=Symbol.for("v-ndc");process.env.NODE_ENV;const Ze={},ue=m=>Object.getPrototypeOf(m)===Ze,Qe=m=>m.__isSuspense,fe=Symbol.for("v-fgt"),Je=Symbol.for("v-txt"),ti=Symbol.for("v-cmt");function ei(m){return m?m.__v_isVNode===!0:!1}const ii=(...m)=>ge(...m),de=({key:m})=>m??null,Pt=({ref:m,ref_key:u,ref_for:k})=>(typeof m=="number"&&(m=""+m),m!=null?vt(m)||Kt(m)||Ct(m)?{i:jt,r:m,k:u,f:!!k}:m:null);function ri(m,u=null,k=null,B=0,V=null,U=m===fe?0:1,st=!1,c=!1){const s={__v_isVNode:!0,__v_skip:!0,type:m,props:u,key:u&&de(u),ref:u&&Pt(u),scopeId:qe,slotScopeIds:null,children:k,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:U,patchFlag:B,dynamicProps:V,dynamicChildren:null,appContext:null,ctx:jt};return c?(Zt(s,k),U&128&&m.normalize(s)):k&&(s.shapeFlag|=vt(k)?8:16),process.env.NODE_ENV!=="production"&&s.key!==s.key&&Ot("VNode created with invalid key (NaN). VNode type:",s.type),s}const ni=process.env.NODE_ENV!=="production"?ii:ge;function ge(m,u=null,k=null,B=0,V=null,U=!1){if((!m||m===$e)&&(process.env.NODE_ENV!=="production"&&!m&&Ot(`Invalid vnode type when creating vnode: ${m}.`),m=ti),ei(m)){const c=At(m,u,!0);return k&&Zt(c,k),c.patchFlag=-2,c}if(_e(m)&&(m=m.__vccOpts),u){u=si(u);let{class:c,style:s}=u;c&&!vt(c)&&(u.class=qt(c)),yt(s)&&(Wt(s)&&!gt(s)&&(s=Mt({},s)),u.style=Ut(s))}const st=vt(m)?1:Qe(m)?128:Ke(m)?64:yt(m)?4:Ct(m)?2:0;return process.env.NODE_ENV!=="production"&&st&4&&Wt(m)&&(m=xt(m),Ot("Vue received a Component that was made a reactive object. This can lead to unnecessary performance overhead and should be avoided by marking the component with `markRaw` or using `shallowRef` instead of `ref`.",`
5
+ Component that was made reactive: `,m)),ri(m,u,k,B,V,st,U,!0)}function si(m){return m?Wt(m)||ue(m)?Mt({},m):m:null}function At(m,u,k=!1,B=!1){const{props:V,ref:U,patchFlag:st,children:c,transition:s}=m,h=u?ai(V||{},u):V,o={__v_isVNode:!0,__v_skip:!0,type:m.type,props:h,key:h&&de(h),ref:u&&u.ref?k&&U?gt(U)?U.concat(Pt(u)):[U,Pt(u)]:Pt(u):U,scopeId:m.scopeId,slotScopeIds:m.slotScopeIds,children:process.env.NODE_ENV!=="production"&&st===-1&&gt(c)?c.map(pe):c,target:m.target,targetStart:m.targetStart,targetAnchor:m.targetAnchor,staticCount:m.staticCount,shapeFlag:m.shapeFlag,patchFlag:u&&m.type!==fe?st===-1?16:st|16:st,dynamicProps:m.dynamicProps,dynamicChildren:m.dynamicChildren,appContext:m.appContext,dirs:m.dirs,transition:s,component:m.component,suspense:m.suspense,ssContent:m.ssContent&&At(m.ssContent),ssFallback:m.ssFallback&&At(m.ssFallback),placeholder:m.placeholder,el:m.el,anchor:m.anchor,ctx:m.ctx,ce:m.ce};return s&&B&&ce(o,s.clone(o)),o}function pe(m){const u=At(m);return gt(m.children)&&(u.children=m.children.map(pe)),u}function oi(m=" ",u=0){return ni(Je,null,m,u)}function Zt(m,u){let k=0;const{shapeFlag:B}=m;if(u==null)u=null;else if(gt(u))k=16;else if(typeof u=="object")if(B&65){const V=u.default;V&&(V._c&&(V._d=!1),Zt(m,V()),V._c&&(V._d=!0));return}else k=32,!u._&&!ue(u)&&(u._ctx=jt);else Ct(u)?(u={default:u,_ctx:jt},k=32):(u=String(u),B&64?(k=16,u=[oi(u)]):k=8);m.children=u,m.shapeFlag|=k}function ai(...m){const u={};for(let k=0;k<m.length;k++){const B=m[k];for(const V in B)if(V==="class")u.class!==B.class&&(u.class=qt([u.class,B.class]));else if(V==="style")u.style=Ut([u.style,B.style]);else if(Oe(V)){const U=u[V],st=B[V];st&&U!==st&&!(gt(U)&&U.includes(st))&&(u[V]=U?[].concat(U,st):st)}else V!==""&&(u[V]=B[V])}return u}{const m=Ft(),u=(k,B)=>{let V;return(V=m[k])||(V=m[k]=[]),V.push(B),U=>{V.length>1?V.forEach(st=>st(U)):V[0](U)}};u("__VUE_INSTANCE_SETTERS__",k=>k),u("__VUE_SSR_SETTERS__",k=>k)}process.env.NODE_ENV;const hi=/(?:^|[-_])\w/g,li=m=>m.replace(hi,u=>u.toUpperCase()).replace(/[-_]/g,"");function me(m,u=!0){return Ct(m)?m.displayName||m.name:m.name||u&&m.__name}function ve(m,u,k=!1){let B=me(u);if(!B&&u.__file){const V=u.__file.match(/([^/\\]+)\.\w+$/);V&&(B=V[1])}if(!B&&m){const V=U=>{for(const st in U)if(U[st]===u)return st};B=V(m.components)||m.parent&&V(m.parent.type.components)||V(m.appContext.components)}return B?li(B):k?"App":"Anonymous"}function _e(m){return Ct(m)&&"__vccOpts"in m}function ci(){if(process.env.NODE_ENV==="production"||typeof window>"u")return;const m={style:"color:#3ba776"},u={style:"color:#1677ff"},k={style:"color:#f5222d"},B={style:"color:#eb2f96"},V={__vue_custom_formatter:!0,header(t){if(!yt(t))return null;if(t.__isVue)return["div",m,"VueInstance"];if(Kt(t)){const i=t.value;return["div",{},["span",m,o(t)],"<",c(i),">"]}else{if(re(t))return["div",{},["span",m,Lt(t)?"ShallowReactive":"Reactive"],"<",c(t),`>${Ht(t)?" (readonly)":""}`];if(Ht(t))return["div",{},["span",m,Lt(t)?"ShallowReadonly":"Readonly"],"<",c(t),">"]}return null},hasBody(t){return t&&t.__isVue},body(t){if(t&&t.__isVue)return["div",{},...U(t.$)]}};function U(t){const i=[];t.type.props&&t.props&&i.push(st("props",xt(t.props))),t.setupState!==Yt&&i.push(st("setup",t.setupState)),t.data!==Yt&&i.push(st("data",xt(t.data)));const e=s(t,"computed");e&&i.push(st("computed",e));const n=s(t,"inject");return n&&i.push(st("injected",n)),i.push(["div",{},["span",{style:B.style+";opacity:0.66"},"$ (internal): "],["object",{object:t}]]),i}function st(t,i){return i=Mt({},i),Object.keys(i).length?["div",{style:"line-height:1.25em;margin-bottom:0.6em"},["div",{style:"color:#476582"},t],["div",{style:"padding-left:1.25em"},...Object.keys(i).map(e=>["div",{},["span",B,e+": "],c(i[e],!1)])]]:["span",{}]}function c(t,i=!0){return typeof t=="number"?["span",u,t]:typeof t=="string"?["span",k,JSON.stringify(t)]:typeof t=="boolean"?["span",B,t]:yt(t)?["object",{object:i?xt(t):t}]:["span",k,String(t)]}function s(t,i){const e=t.type;if(Ct(e))return;const n={};for(const a in t.ctx)h(e,a,i)&&(n[a]=t.ctx[a]);return n}function h(t,i,e){const n=t[e];if(gt(n)&&n.includes(i)||yt(n)&&i in n||t.extends&&h(t.extends,i,e)||t.mixins&&t.mixins.some(a=>h(a,i,e)))return!0}function o(t){return Lt(t)?"ShallowRef":t.effect?"ComputedRef":"Ref"}window.devtoolsFormatters?window.devtoolsFormatters.push(V):window.devtoolsFormatters=[V]}process.env.NODE_ENV;process.env.NODE_ENV;process.env.NODE_ENV;function ui(){ci()}process.env.NODE_ENV!=="production"&&ui();typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;function fi(m){if(Object.prototype.hasOwnProperty.call(m,"__esModule"))return m;var u=m.default;if(typeof u=="function"){var k=function B(){var V=!1;try{V=this instanceof B}catch{}return V?Reflect.construct(u,arguments,this.constructor):u.apply(this,arguments)};k.prototype=u.prototype}else k={};return Object.defineProperty(k,"__esModule",{value:!0}),Object.keys(m).forEach(function(B){var V=Object.getOwnPropertyDescriptor(m,B);Object.defineProperty(k,B,V.get?V:{enumerable:!0,get:function(){return m[B]}})}),k}var ee={};const di={},gi=Object.freeze(Object.defineProperty({__proto__:null,default:di},Symbol.toStringTag,{value:"Module"})),Xt=fi(gi);var ie;function pi(){return ie||(ie=1,(function(m){var u=u||{version:"5.3.0"};if(m.fabric=u,typeof document<"u"&&typeof window<"u")document instanceof(typeof HTMLDocument<"u"?HTMLDocument:Document)?u.document=document:u.document=document.implementation.createHTMLDocument(""),u.window=window;else{var k=Xt,B=new k.JSDOM(decodeURIComponent("%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E"),{features:{FetchExternalResources:["img"]},resources:"usable"}).window;u.document=B.document,u.jsdomImplForWrapper=Xt.implForWrapper,u.nodeCanvas=Xt.Canvas,u.window=B,DOMParser=u.window.DOMParser}u.isTouchSupported="ontouchstart"in u.window||"ontouchstart"in u.document||u.window&&u.window.navigator&&u.window.navigator.maxTouchPoints>0,u.isLikelyNode=typeof Buffer<"u"&&typeof window>"u",u.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-dashoffset","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","id","paint-order","vector-effect","instantiated_by_use","clip-path"],u.DPI=96,u.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:[eE][-+]?\\d+)?)",u.commaWsp="(?:\\s+,?\\s*|,\\s*)",u.rePathCommand=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:[eE][-+]?\d+)?)/ig,u.reNonWord=/[ \n\.,;!\?\-]/,u.fontPaths={},u.iMatrix=[1,0,0,1,0,0],u.svgNS="http://www.w3.org/2000/svg",u.perfLimitSizeTotal=2097152,u.maxCacheSideLimit=4096,u.minCacheSideLimit=256,u.charWidthsCache={},u.textureSize=2048,u.disableStyleCopyPaste=!1,u.enableGLFiltering=!0,u.devicePixelRatio=u.window.devicePixelRatio||u.window.webkitDevicePixelRatio||u.window.mozDevicePixelRatio||1,u.browserShadowBlurConstant=1,u.arcToSegmentsCache={},u.boundsOfCurveCache={},u.cachesBoundsOfCurve=!0,u.forceGLPutImageData=!1,u.initFilterBackend=function(){if(u.enableGLFiltering&&u.isWebglSupported&&u.isWebglSupported(u.textureSize))return console.log("max texture size: "+u.maxTextureSize),new u.WebglFilterBackend({tileSize:u.textureSize});if(u.Canvas2dFilterBackend)return new u.Canvas2dFilterBackend},typeof document<"u"&&typeof window<"u"&&(window.fabric=u),(function(){function c(e,n){if(this.__eventListeners[e]){var a=this.__eventListeners[e];n?a[a.indexOf(n)]=!1:u.util.array.fill(a,!1)}}function s(e,n){if(this.__eventListeners||(this.__eventListeners={}),arguments.length===1)for(var a in e)this.on(a,e[a]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(n);return this}function h(e,n){var a=(function(){n.apply(this,arguments),this.off(e,a)}).bind(this);this.on(e,a)}function o(e,n){if(arguments.length===1)for(var a in e)h.call(this,a,e[a]);else h.call(this,e,n);return this}function t(e,n){if(!this.__eventListeners)return this;if(arguments.length===0)for(e in this.__eventListeners)c.call(this,e);else if(arguments.length===1&&typeof arguments[0]=="object")for(var a in e)c.call(this,a,e[a]);else c.call(this,e,n);return this}function i(e,n){if(!this.__eventListeners)return this;var a=this.__eventListeners[e];if(!a)return this;for(var r=0,l=a.length;r<l;r++)a[r]&&a[r].call(this,n||{});return this.__eventListeners[e]=a.filter(function(f){return f!==!1}),this}u.Observable={fire:i,on:s,once:o,off:t}})(),u.Collection={_objects:[],add:function(){if(this._objects.push.apply(this._objects,arguments),this._onObjectAdded)for(var c=0,s=arguments.length;c<s;c++)this._onObjectAdded(arguments[c]);return this.renderOnAddRemove&&this.requestRenderAll(),this},insertAt:function(c,s,h){var o=this._objects;return h?o[s]=c:o.splice(s,0,c),this._onObjectAdded&&this._onObjectAdded(c),this.renderOnAddRemove&&this.requestRenderAll(),this},remove:function(){for(var c=this._objects,s,h=!1,o=0,t=arguments.length;o<t;o++)s=c.indexOf(arguments[o]),s!==-1&&(h=!0,c.splice(s,1),this._onObjectRemoved&&this._onObjectRemoved(arguments[o]));return this.renderOnAddRemove&&h&&this.requestRenderAll(),this},forEachObject:function(c,s){for(var h=this.getObjects(),o=0,t=h.length;o<t;o++)c.call(s,h[o],o,h);return this},getObjects:function(c){return typeof c>"u"?this._objects.concat():this._objects.filter(function(s){return s.type===c})},item:function(c){return this._objects[c]},isEmpty:function(){return this._objects.length===0},size:function(){return this._objects.length},contains:function(c,s){return this._objects.indexOf(c)>-1?!0:s?this._objects.some(function(h){return typeof h.contains=="function"&&h.contains(c,!0)}):!1},complexity:function(){return this._objects.reduce(function(c,s){return c+=s.complexity?s.complexity():0,c},0)}},u.CommonMethods={_setOptions:function(c){for(var s in c)this.set(s,c[s])},_initGradient:function(c,s){c&&c.colorStops&&!(c instanceof u.Gradient)&&this.set(s,new u.Gradient(c))},_initPattern:function(c,s,h){c&&c.source&&!(c instanceof u.Pattern)?this.set(s,new u.Pattern(c,h)):h&&h()},_setObject:function(c){for(var s in c)this._set(s,c[s])},set:function(c,s){return typeof c=="object"?this._setObject(c):this._set(c,s),this},_set:function(c,s){this[c]=s},toggle:function(c){var s=this.get(c);return typeof s=="boolean"&&this.set(c,!s),this},get:function(c){return this[c]}},(function(c){var s=Math.sqrt,h=Math.atan2,o=Math.pow,t=Math.PI/180,i=Math.PI/2;u.util={cos:function(e){if(e===0)return 1;e<0&&(e=-e);var n=e/i;switch(n){case 1:case 3:return 0;case 2:return-1}return Math.cos(e)},sin:function(e){if(e===0)return 0;var n=e/i,a=1;switch(e<0&&(a=-1),n){case 1:return a;case 2:return 0;case 3:return-a}return Math.sin(e)},removeFromArray:function(e,n){var a=e.indexOf(n);return a!==-1&&e.splice(a,1),e},getRandomInt:function(e,n){return Math.floor(Math.random()*(n-e+1))+e},degreesToRadians:function(e){return e*t},radiansToDegrees:function(e){return e/t},rotatePoint:function(e,n,a){var r=new u.Point(e.x-n.x,e.y-n.y),l=u.util.rotateVector(r,a);return new u.Point(l.x,l.y).addEquals(n)},rotateVector:function(e,n){var a=u.util.sin(n),r=u.util.cos(n),l=e.x*r-e.y*a,f=e.x*a+e.y*r;return{x:l,y:f}},createVector:function(e,n){return new u.Point(n.x-e.x,n.y-e.y)},calcAngleBetweenVectors:function(e,n){return Math.acos((e.x*n.x+e.y*n.y)/(Math.hypot(e.x,e.y)*Math.hypot(n.x,n.y)))},getHatVector:function(e){return new u.Point(e.x,e.y).multiply(1/Math.hypot(e.x,e.y))},getBisector:function(e,n,a){var r=u.util.createVector(e,n),l=u.util.createVector(e,a),f=u.util.calcAngleBetweenVectors(r,l),d=u.util.calcAngleBetweenVectors(u.util.rotateVector(r,f),l),g=f*(d===0?1:-1)/2;return{vector:u.util.getHatVector(u.util.rotateVector(r,g)),angle:f}},projectStrokeOnPoints:function(e,n,a){var r=[],l=n.strokeWidth/2,f=n.strokeUniform?new u.Point(1/n.scaleX,1/n.scaleY):new u.Point(1,1),d=function(g){var p=l/Math.hypot(g.x,g.y);return new u.Point(g.x*p*f.x,g.y*p*f.y)};return e.length<=1||e.forEach(function(g,p){var v=new u.Point(g.x,g.y),x,w;p===0?(w=e[p+1],x=a?d(u.util.createVector(w,v)).addEquals(v):e[e.length-1]):p===e.length-1?(x=e[p-1],w=a?d(u.util.createVector(x,v)).addEquals(v):e[0]):(x=e[p-1],w=e[p+1]);var F=u.util.getBisector(v,x,w),Y=F.vector,W=F.angle,Z,Q;if(n.strokeLineJoin==="miter"&&(Z=-l/Math.sin(W/2),Q=new u.Point(Y.x*Z*f.x,Y.y*Z*f.y),Math.hypot(Q.x,Q.y)/l<=n.strokeMiterLimit)){r.push(v.add(Q)),r.push(v.subtract(Q));return}Z=-l*Math.SQRT2,Q=new u.Point(Y.x*Z*f.x,Y.y*Z*f.y),r.push(v.add(Q)),r.push(v.subtract(Q))}),r},transformPoint:function(e,n,a){return a?new u.Point(n[0]*e.x+n[2]*e.y,n[1]*e.x+n[3]*e.y):new u.Point(n[0]*e.x+n[2]*e.y+n[4],n[1]*e.x+n[3]*e.y+n[5])},makeBoundingBoxFromPoints:function(e,n){if(n)for(var a=0;a<e.length;a++)e[a]=u.util.transformPoint(e[a],n);var r=[e[0].x,e[1].x,e[2].x,e[3].x],l=u.util.array.min(r),f=u.util.array.max(r),d=f-l,g=[e[0].y,e[1].y,e[2].y,e[3].y],p=u.util.array.min(g),v=u.util.array.max(g),x=v-p;return{left:l,top:p,width:d,height:x}},invertTransform:function(e){var n=1/(e[0]*e[3]-e[1]*e[2]),a=[n*e[3],-n*e[1],-n*e[2],n*e[0]],r=u.util.transformPoint({x:e[4],y:e[5]},a,!0);return a[4]=-r.x,a[5]=-r.y,a},toFixed:function(e,n){return parseFloat(Number(e).toFixed(n))},parseUnit:function(e,n){var a=/\D{0,2}$/.exec(e),r=parseFloat(e);switch(n||(n=u.Text.DEFAULT_SVG_FONT_SIZE),a[0]){case"mm":return r*u.DPI/25.4;case"cm":return r*u.DPI/2.54;case"in":return r*u.DPI;case"pt":return r*u.DPI/72;case"pc":return r*u.DPI/72*12;case"em":return r*n;default:return r}},falseFunction:function(){return!1},getKlass:function(e,n){return e=u.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),u.util.resolveNamespace(n)[e]},getSvgAttributes:function(e){var n=["instantiated_by_use","style","id","class"];switch(e){case"linearGradient":n=n.concat(["x1","y1","x2","y2","gradientUnits","gradientTransform"]);break;case"radialGradient":n=n.concat(["gradientUnits","gradientTransform","cx","cy","r","fx","fy","fr"]);break;case"stop":n=n.concat(["offset","stop-color","stop-opacity"]);break}return n},resolveNamespace:function(e){if(!e)return u;var n=e.split("."),a=n.length,r,l=c||u.window;for(r=0;r<a;++r)l=l[n[r]];return l},loadImage:function(e,n,a,r){if(!e){n&&n.call(a,e);return}var l=u.util.createImage(),f=function(){n&&n.call(a,l,!1),l=l.onload=l.onerror=null};l.onload=f,l.onerror=function(){u.log("Error loading "+l.src),n&&n.call(a,null,!0),l=l.onload=l.onerror=null},e.indexOf("data")!==0&&r!==void 0&&r!==null&&(l.crossOrigin=r),e.substring(0,14)==="data:image/svg"&&(l.onload=null,u.util.loadImageInDom(l,f)),l.src=e},loadImageInDom:function(e,n){var a=u.document.createElement("div");a.style.width=a.style.height="1px",a.style.left=a.style.top="-100%",a.style.position="absolute",a.appendChild(e),u.document.querySelector("body").appendChild(a),e.onload=function(){n(),a.parentNode.removeChild(a),a=null}},enlivenObjects:function(e,n,a,r){e=e||[];var l=[],f=0,d=e.length;function g(){++f===d&&n&&n(l.filter(function(p){return p}))}if(!d){n&&n(l);return}e.forEach(function(p,v){if(!p||!p.type){g();return}var x=u.util.getKlass(p.type,a);x.fromObject(p,function(w,F){F||(l[v]=w),r&&r(p,w,F),g()})})},enlivenObjectEnlivables:function(e,n,a){var r=u.Object.ENLIVEN_PROPS.filter(function(l){return!!e[l]});u.util.enlivenObjects(r.map(function(l){return e[l]}),function(l){var f={};r.forEach(function(d,g){f[d]=l[g],n&&(n[d]=l[g])}),a&&a(f)})},enlivenPatterns:function(e,n){e=e||[];function a(){++l===f&&n&&n(r)}var r=[],l=0,f=e.length;if(!f){n&&n(r);return}e.forEach(function(d,g){d&&d.source?new u.Pattern(d,function(p){r[g]=p,a()}):(r[g]=d,a())})},groupSVGElements:function(e,n,a){var r;return e&&e.length===1?(typeof a<"u"&&(e[0].sourcePath=a),e[0]):(n&&(n.width&&n.height?n.centerPoint={x:n.width/2,y:n.height/2}:(delete n.width,delete n.height)),r=new u.Group(e,n),typeof a<"u"&&(r.sourcePath=a),r)},populateWithProperties:function(e,n,a){if(a&&Array.isArray(a))for(var r=0,l=a.length;r<l;r++)a[r]in e&&(n[a[r]]=e[a[r]])},createCanvasElement:function(){return u.document.createElement("canvas")},copyCanvasElement:function(e){var n=u.util.createCanvasElement();return n.width=e.width,n.height=e.height,n.getContext("2d").drawImage(e,0,0),n},toDataURL:function(e,n,a){return e.toDataURL("image/"+n,a)},createImage:function(){return u.document.createElement("img")},multiplyTransformMatrices:function(e,n,a){return[e[0]*n[0]+e[2]*n[1],e[1]*n[0]+e[3]*n[1],e[0]*n[2]+e[2]*n[3],e[1]*n[2]+e[3]*n[3],a?0:e[0]*n[4]+e[2]*n[5]+e[4],a?0:e[1]*n[4]+e[3]*n[5]+e[5]]},qrDecompose:function(e){var n=h(e[1],e[0]),a=o(e[0],2)+o(e[1],2),r=s(a),l=(e[0]*e[3]-e[2]*e[1])/r,f=h(e[0]*e[2]+e[1]*e[3],a);return{angle:n/t,scaleX:r,scaleY:l,skewX:f/t,skewY:0,translateX:e[4],translateY:e[5]}},calcRotateMatrix:function(e){if(!e.angle)return u.iMatrix.concat();var n=u.util.degreesToRadians(e.angle),a=u.util.cos(n),r=u.util.sin(n);return[a,r,-r,a,0,0]},calcDimensionsMatrix:function(e){var n=typeof e.scaleX>"u"?1:e.scaleX,a=typeof e.scaleY>"u"?1:e.scaleY,r=[e.flipX?-n:n,0,0,e.flipY?-a:a,0,0],l=u.util.multiplyTransformMatrices,f=u.util.degreesToRadians;return e.skewX&&(r=l(r,[1,0,Math.tan(f(e.skewX)),1],!0)),e.skewY&&(r=l(r,[1,Math.tan(f(e.skewY)),0,1],!0)),r},composeMatrix:function(e){var n=[1,0,0,1,e.translateX||0,e.translateY||0],a=u.util.multiplyTransformMatrices;return e.angle&&(n=a(n,u.util.calcRotateMatrix(e))),(e.scaleX!==1||e.scaleY!==1||e.skewX||e.skewY||e.flipX||e.flipY)&&(n=a(n,u.util.calcDimensionsMatrix(e))),n},resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.skewX=0,e.skewY=0,e.flipX=!1,e.flipY=!1,e.rotate(0)},saveObjectTransform:function(e){return{scaleX:e.scaleX,scaleY:e.scaleY,skewX:e.skewX,skewY:e.skewY,angle:e.angle,left:e.left,flipX:e.flipX,flipY:e.flipY,top:e.top}},isTransparent:function(e,n,a,r){r>0&&(n>r?n-=r:n=0,a>r?a-=r:a=0);var l=!0,f,d,g=e.getImageData(n,a,r*2||1,r*2||1),p=g.data.length;for(f=3;f<p&&(d=g.data[f],l=d<=0,l!==!1);f+=4);return g=null,l},parsePreserveAspectRatioAttribute:function(e){var n="meet",a="Mid",r="Mid",l=e.split(" "),f;return l&&l.length&&(n=l.pop(),n!=="meet"&&n!=="slice"?(f=n,n="meet"):l.length&&(f=l.pop())),a=f!=="none"?f.slice(1,4):"none",r=f!=="none"?f.slice(5,8):"none",{meetOrSlice:n,alignX:a,alignY:r}},clearFabricFontCache:function(e){e=(e||"").toLowerCase(),e?u.charWidthsCache[e]&&delete u.charWidthsCache[e]:u.charWidthsCache={}},limitDimsByArea:function(e,n){var a=Math.sqrt(n*e),r=Math.floor(n/a);return{x:Math.floor(a),y:r}},capValue:function(e,n,a){return Math.max(e,Math.min(n,a))},findScaleToFit:function(e,n){return Math.min(n.width/e.width,n.height/e.height)},findScaleToCover:function(e,n){return Math.max(n.width/e.width,n.height/e.height)},matrixToSVG:function(e){return"matrix("+e.map(function(n){return u.util.toFixed(n,u.Object.NUM_FRACTION_DIGITS)}).join(" ")+")"},removeTransformFromObject:function(e,n){var a=u.util.invertTransform(n),r=u.util.multiplyTransformMatrices(a,e.calcOwnMatrix());u.util.applyTransformToObject(e,r)},addTransformToObject:function(e,n){u.util.applyTransformToObject(e,u.util.multiplyTransformMatrices(n,e.calcOwnMatrix()))},applyTransformToObject:function(e,n){var a=u.util.qrDecompose(n),r=new u.Point(a.translateX,a.translateY);e.flipX=!1,e.flipY=!1,e.set("scaleX",a.scaleX),e.set("scaleY",a.scaleY),e.skewX=a.skewX,e.skewY=a.skewY,e.angle=a.angle,e.setPositionByOrigin(r,"center","center")},sizeAfterTransform:function(e,n,a){var r=e/2,l=n/2,f=[{x:-r,y:-l},{x:r,y:-l},{x:-r,y:l},{x:r,y:l}],d=u.util.calcDimensionsMatrix(a),g=u.util.makeBoundingBoxFromPoints(f,d);return{x:g.width,y:g.height}},mergeClipPaths:function(e,n){var a=e,r=n;a.inverted&&!r.inverted&&(a=n,r=e),u.util.applyTransformToObject(r,u.util.multiplyTransformMatrices(u.util.invertTransform(a.calcTransformMatrix()),r.calcTransformMatrix()));var l=a.inverted&&r.inverted;return l&&(a.inverted=r.inverted=!1),new u.Group([a],{clipPath:r,inverted:l})},hasStyleChanged:function(e,n,a){return a=a||!1,e.fill!==n.fill||e.stroke!==n.stroke||e.strokeWidth!==n.strokeWidth||e.fontSize!==n.fontSize||e.fontFamily!==n.fontFamily||e.fontWeight!==n.fontWeight||e.fontStyle!==n.fontStyle||e.textBackgroundColor!==n.textBackgroundColor||e.deltaY!==n.deltaY||a&&(e.overline!==n.overline||e.underline!==n.underline||e.linethrough!==n.linethrough)},stylesToArray:function(e,n){for(var e=u.util.object.clone(e,!0),a=n.split(`
6
+ `),r=-1,l={},f=[],d=0;d<a.length;d++){if(!e[d]){r+=a[d].length;continue}for(var g=0;g<a[d].length;g++){r++;var p=e[d][g];if(p&&Object.keys(p).length>0){var v=u.util.hasStyleChanged(l,p,!0);v?f.push({start:r,end:r+1,style:p}):f[f.length-1].end++}l=p||{}}}return f},stylesFromArray:function(e,n){if(!Array.isArray(e))return e;for(var a=n.split(`
7
+ `),r=-1,l=0,f={},d=0;d<a.length;d++)for(var g=0;g<a[d].length;g++)r++,e[l]&&e[l].start<=r&&r<e[l].end&&(f[d]=f[d]||{},f[d][g]=Object.assign({},e[l].style),r===e[l].end-1&&l++);return f}}})(m),(function(){var c=Array.prototype.join,s={m:2,l:2,h:1,v:1,c:6,s:4,q:4,t:2,a:7},h={m:"l",M:"L"};function o(_,S,T,C,D,b,y,O,E,I,j){var X=u.util.cos(_),H=u.util.sin(_),K=u.util.cos(S),A=u.util.sin(S),P=T*D*K-C*b*A+y,R=C*D*K+T*b*A+O,N=I+E*(-T*D*H-C*b*X),M=j+E*(-C*D*H+T*b*X),z=P+E*(T*D*A+C*b*K),$=R+E*(C*D*A-T*b*K);return["C",N,M,z,$,P,R]}function t(_,S,T,C,D,b,y){var O=Math.PI,E=y*O/180,I=u.util.sin(E),j=u.util.cos(E),X=0,H=0;T=Math.abs(T),C=Math.abs(C);var K=-j*_*.5-I*S*.5,A=-j*S*.5+I*_*.5,P=T*T,R=C*C,N=A*A,M=K*K,z=P*R-P*N-R*M,$=0;if(z<0){var nt=Math.sqrt(1-z/(P*R));T*=nt,C*=nt}else $=(D===b?-1:1)*Math.sqrt(z/(P*N+R*M));var it=$*T*A/C,L=-$*C*K/T,rt=j*it-I*L+_*.5,ot=I*it+j*L+S*.5,at=i(1,0,(K-it)/T,(A-L)/C),lt=i((K-it)/T,(A-L)/C,(-K-it)/T,(-A-L)/C);b===0&&lt>0?lt-=2*O:b===1&&lt<0&&(lt+=2*O);for(var ht=Math.ceil(Math.abs(lt/O*2)),ut=[],ct=lt/ht,_t=8/3*Math.sin(ct/4)*Math.sin(ct/4)/Math.sin(ct/2),wt=at+ct,dt=0;dt<ht;dt++)ut[dt]=o(at,wt,j,I,T,C,rt,ot,_t,X,H),X=ut[dt][5],H=ut[dt][6],at=wt,wt+=ct;return ut}function i(_,S,T,C){var D=Math.atan2(S,_),b=Math.atan2(C,T);return b>=D?b-D:2*Math.PI-(D-b)}function e(_,S,T,C,D,b,y,O){var E;if(u.cachesBoundsOfCurve&&(E=c.call(arguments),u.boundsOfCurveCache[E]))return u.boundsOfCurveCache[E];var I=Math.sqrt,j=Math.min,X=Math.max,H=Math.abs,K=[],A=[[],[]],P,R,N,M,z,$,nt,it;R=6*_-12*T+6*D,P=-3*_+9*T-9*D+3*y,N=3*T-3*_;for(var L=0;L<2;++L){if(L>0&&(R=6*S-12*C+6*b,P=-3*S+9*C-9*b+3*O,N=3*C-3*S),H(P)<1e-12){if(H(R)<1e-12)continue;M=-N/R,0<M&&M<1&&K.push(M);continue}nt=R*R-4*N*P,!(nt<0)&&(it=I(nt),z=(-R+it)/(2*P),0<z&&z<1&&K.push(z),$=(-R-it)/(2*P),0<$&&$<1&&K.push($))}for(var rt,ot,at=K.length,lt=at,ht;at--;)M=K[at],ht=1-M,rt=ht*ht*ht*_+3*ht*ht*M*T+3*ht*M*M*D+M*M*M*y,A[0][at]=rt,ot=ht*ht*ht*S+3*ht*ht*M*C+3*ht*M*M*b+M*M*M*O,A[1][at]=ot;A[0][lt]=_,A[1][lt]=S,A[0][lt+1]=y,A[1][lt+1]=O;var ut=[{x:j.apply(null,A[0]),y:j.apply(null,A[1])},{x:X.apply(null,A[0]),y:X.apply(null,A[1])}];return u.cachesBoundsOfCurve&&(u.boundsOfCurveCache[E]=ut),ut}function n(_,S,T){for(var C=T[1],D=T[2],b=T[3],y=T[4],O=T[5],E=T[6],I=T[7],j=t(E-_,I-S,C,D,y,O,b),X=0,H=j.length;X<H;X++)j[X][1]+=_,j[X][2]+=S,j[X][3]+=_,j[X][4]+=S,j[X][5]+=_,j[X][6]+=S;return j}function a(_){var S=0,T=0,C=_.length,D=0,b=0,y,O,E,I=[],j,X,H;for(O=0;O<C;++O){switch(E=!1,y=_[O].slice(0),y[0]){case"l":y[0]="L",y[1]+=S,y[2]+=T;case"L":S=y[1],T=y[2];break;case"h":y[1]+=S;case"H":y[0]="L",y[2]=T,S=y[1];break;case"v":y[1]+=T;case"V":y[0]="L",T=y[1],y[1]=S,y[2]=T;break;case"m":y[0]="M",y[1]+=S,y[2]+=T;case"M":S=y[1],T=y[2],D=y[1],b=y[2];break;case"c":y[0]="C",y[1]+=S,y[2]+=T,y[3]+=S,y[4]+=T,y[5]+=S,y[6]+=T;case"C":X=y[3],H=y[4],S=y[5],T=y[6];break;case"s":y[0]="S",y[1]+=S,y[2]+=T,y[3]+=S,y[4]+=T;case"S":j==="C"?(X=2*S-X,H=2*T-H):(X=S,H=T),S=y[3],T=y[4],y[0]="C",y[5]=y[3],y[6]=y[4],y[3]=y[1],y[4]=y[2],y[1]=X,y[2]=H,X=y[3],H=y[4];break;case"q":y[0]="Q",y[1]+=S,y[2]+=T,y[3]+=S,y[4]+=T;case"Q":X=y[1],H=y[2],S=y[3],T=y[4];break;case"t":y[0]="T",y[1]+=S,y[2]+=T;case"T":j==="Q"?(X=2*S-X,H=2*T-H):(X=S,H=T),y[0]="Q",S=y[1],T=y[2],y[1]=X,y[2]=H,y[3]=S,y[4]=T;break;case"a":y[0]="A",y[6]+=S,y[7]+=T;case"A":E=!0,I=I.concat(n(S,T,y)),S=y[6],T=y[7];break;case"z":case"Z":S=D,T=b;break}E||I.push(y),j=y[0]}return I}function r(_,S,T,C){return Math.sqrt((T-_)*(T-_)+(C-S)*(C-S))}function l(_){return _*_*_}function f(_){return 3*_*_*(1-_)}function d(_){return 3*_*(1-_)*(1-_)}function g(_){return(1-_)*(1-_)*(1-_)}function p(_,S,T,C,D,b,y,O){return function(E){var I=l(E),j=f(E),X=d(E),H=g(E);return{x:y*I+D*j+T*X+_*H,y:O*I+b*j+C*X+S*H}}}function v(_,S,T,C,D,b,y,O){return function(E){var I=1-E,j=3*I*I*(T-_)+6*I*E*(D-T)+3*E*E*(y-D),X=3*I*I*(C-S)+6*I*E*(b-C)+3*E*E*(O-b);return Math.atan2(X,j)}}function x(_){return _*_}function w(_){return 2*_*(1-_)}function F(_){return(1-_)*(1-_)}function Y(_,S,T,C,D,b){return function(y){var O=x(y),E=w(y),I=F(y);return{x:D*O+T*E+_*I,y:b*O+C*E+S*I}}}function W(_,S,T,C,D,b){return function(y){var O=1-y,E=2*O*(T-_)+2*y*(D-T),I=2*O*(C-S)+2*y*(b-C);return Math.atan2(I,E)}}function Z(_,S,T){var C={x:S,y:T},D,b=0,y;for(y=1;y<=100;y+=1)D=_(y/100),b+=r(C.x,C.y,D.x,D.y),C=D;return b}function Q(_,S){for(var T=0,C=0,D=_.iterator,b={x:_.x,y:_.y},y,O,E=.01,I=_.angleFinder,j;C<S&&E>1e-4;)y=D(T),j=T,O=r(b.x,b.y,y.x,y.y),O+C>S?(T-=E,E/=2):(b=y,T+=E,C+=O);return y.angle=I(j),y}function G(_){for(var S=0,T=_.length,C,D=0,b=0,y=0,O=0,E=[],I,j,X,H=0;H<T;H++){switch(C=_[H],j={x:D,y:b,command:C[0]},C[0]){case"M":j.length=0,y=D=C[1],O=b=C[2];break;case"L":j.length=r(D,b,C[1],C[2]),D=C[1],b=C[2];break;case"C":I=p(D,b,C[1],C[2],C[3],C[4],C[5],C[6]),X=v(D,b,C[1],C[2],C[3],C[4],C[5],C[6]),j.iterator=I,j.angleFinder=X,j.length=Z(I,D,b),D=C[5],b=C[6];break;case"Q":I=Y(D,b,C[1],C[2],C[3],C[4]),X=W(D,b,C[1],C[2],C[3],C[4]),j.iterator=I,j.angleFinder=X,j.length=Z(I,D,b),D=C[3],b=C[4];break;case"Z":case"z":j.destX=y,j.destY=O,j.length=r(D,b,y,O),D=y,b=O;break}S+=j.length,E.push(j)}return E.push({length:S,x:D,y:b}),E}function q(_,S,T){T||(T=G(_));for(var C=0;S-T[C].length>0&&C<T.length-2;)S-=T[C].length,C++;var D=T[C],b=S/D.length,y=D.command,O=_[C],E;switch(y){case"M":return{x:D.x,y:D.y,angle:0};case"Z":case"z":return E=new u.Point(D.x,D.y).lerp(new u.Point(D.destX,D.destY),b),E.angle=Math.atan2(D.destY-D.y,D.destX-D.x),E;case"L":return E=new u.Point(D.x,D.y).lerp(new u.Point(O[1],O[2]),b),E.angle=Math.atan2(O[2]-D.y,O[1]-D.x),E;case"C":return Q(D,S);case"Q":return Q(D,S)}}function J(_){var S=[],T=[],C,D,b=u.rePathCommand,y="[-+]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][-+]?\\d+)?\\s*",O="("+y+")"+u.commaWsp,E="([01])"+u.commaWsp+"?",I=O+"?"+O+"?"+O+E+E+O+"?("+y+")",j=new RegExp(I,"g"),X,H,K;if(!_||!_.match)return S;K=_.match(/[mzlhvcsqta][^mzlhvcsqta]*/gi);for(var A=0,P,R=K.length;A<R;A++){C=K[A],H=C.slice(1).trim(),T.length=0;var N=C.charAt(0);if(P=[N],N.toLowerCase()==="a")for(var M;M=j.exec(H);)for(var z=1;z<M.length;z++)T.push(M[z]);else for(;X=b.exec(H);)T.push(X[0]);for(var z=0,$=T.length;z<$;z++)D=parseFloat(T[z]),isNaN(D)||P.push(D);var nt=s[N.toLowerCase()],it=h[N]||N;if(P.length-1>nt)for(var L=1,rt=P.length;L<rt;L+=nt)S.push([N].concat(P.slice(L,L+nt))),N=it;else S.push(P)}return S}function et(_,S){var T=[],C,D=new u.Point(_[0].x,_[0].y),b=new u.Point(_[1].x,_[1].y),y=_.length,O=1,E=0,I=y>2;for(S=S||0,I&&(O=_[2].x<b.x?-1:_[2].x===b.x?0:1,E=_[2].y<b.y?-1:_[2].y===b.y?0:1),T.push(["M",D.x-O*S,D.y-E*S]),C=1;C<y;C++){if(!D.eq(b)){var j=D.midPointFrom(b);T.push(["Q",D.x,D.y,j.x,j.y])}D=_[C],C+1<_.length&&(b=_[C+1])}return I&&(O=D.x>_[C-2].x?1:D.x===_[C-2].x?0:-1,E=D.y>_[C-2].y?1:D.y===_[C-2].y?0:-1),T.push(["L",D.x+O*S,D.y+E*S]),T}function tt(_,S,T){return T&&(S=u.util.multiplyTransformMatrices(S,[1,0,0,1,-T.x,-T.y])),_.map(function(C){for(var D=C.slice(0),b={},y=1;y<C.length-1;y+=2)b.x=C[y],b.y=C[y+1],b=u.util.transformPoint(b,S),D[y]=b.x,D[y+1]=b.y;return D})}u.util.joinPath=function(_){return _.map(function(S){return S.join(" ")}).join(" ")},u.util.parsePath=J,u.util.makePathSimpler=a,u.util.getSmoothPathFromPoints=et,u.util.getPathSegmentsInfo=G,u.util.getBoundsOfCurve=e,u.util.getPointOnPath=q,u.util.transformPath=tt})(),(function(){var c=Array.prototype.slice;function s(e,n){for(var a=c.call(arguments,2),r=[],l=0,f=e.length;l<f;l++)r[l]=a.length?e[l][n].apply(e[l],a):e[l][n].call(e[l]);return r}function h(e,n){return i(e,n,function(a,r){return a>=r})}function o(e,n){return i(e,n,function(a,r){return a<r})}function t(e,n){for(var a=e.length;a--;)e[a]=n;return e}function i(e,n,a){if(!(!e||e.length===0)){var r=e.length-1,l=n?e[r][n]:e[r];if(n)for(;r--;)a(e[r][n],l)&&(l=e[r][n]);else for(;r--;)a(e[r],l)&&(l=e[r]);return l}}u.util.array={fill:t,invoke:s,min:o,max:h}})(),(function(){function c(h,o,t){if(t)if(!u.isLikelyNode&&o instanceof Element)h=o;else if(o instanceof Array){h=[];for(var i=0,e=o.length;i<e;i++)h[i]=c({},o[i],t)}else if(o&&typeof o=="object")for(var n in o)n==="canvas"||n==="group"?h[n]=null:o.hasOwnProperty(n)&&(h[n]=c({},o[n],t));else h=o;else for(var n in o)h[n]=o[n];return h}function s(h,o){return c({},h,o)}u.util.object={extend:c,clone:s},u.util.object.extend(u.util,u.Observable)})(),(function(){function c(i){return i.replace(/-+(.)?/g,function(e,n){return n?n.toUpperCase():""})}function s(i,e){return i.charAt(0).toUpperCase()+(e?i.slice(1):i.slice(1).toLowerCase())}function h(i){return i.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&apos;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function o(i){var e=0,n,a=[];for(e=0,n;e<i.length;e++)(n=t(i,e))!==!1&&a.push(n);return a}function t(i,e){var n=i.charCodeAt(e);if(isNaN(n))return"";if(n<55296||n>57343)return i.charAt(e);if(55296<=n&&n<=56319){if(i.length<=e+1)throw"High surrogate without following low surrogate";var a=i.charCodeAt(e+1);if(56320>a||a>57343)throw"High surrogate without following low surrogate";return i.charAt(e)+i.charAt(e+1)}if(e===0)throw"Low surrogate without preceding high surrogate";var r=i.charCodeAt(e-1);if(55296>r||r>56319)throw"Low surrogate without preceding high surrogate";return!1}u.util.string={camelize:c,capitalize:s,escapeXml:h,graphemeSplit:o}})(),(function(){var c=Array.prototype.slice,s=function(){},h=(function(){for(var n in{toString:1})if(n==="toString")return!1;return!0})(),o=function(n,a,r){for(var l in a)l in n.prototype&&typeof n.prototype[l]=="function"&&(a[l]+"").indexOf("callSuper")>-1?n.prototype[l]=(function(f){return function(){var d=this.constructor.superclass;this.constructor.superclass=r;var g=a[f].apply(this,arguments);if(this.constructor.superclass=d,f!=="initialize")return g}})(l):n.prototype[l]=a[l],h&&(a.toString!==Object.prototype.toString&&(n.prototype.toString=a.toString),a.valueOf!==Object.prototype.valueOf&&(n.prototype.valueOf=a.valueOf))};function t(){}function i(n){for(var a=null,r=this;r.constructor.superclass;){var l=r.constructor.superclass.prototype[n];if(r[n]!==l){a=l;break}r=r.constructor.superclass.prototype}return a?arguments.length>1?a.apply(this,c.call(arguments,1)):a.call(this):console.log("tried to callSuper "+n+", method not found in prototype chain",this)}function e(){var n=null,a=c.call(arguments,0);typeof a[0]=="function"&&(n=a.shift());function r(){this.initialize.apply(this,arguments)}r.superclass=n,r.subclasses=[],n&&(t.prototype=n.prototype,r.prototype=new t,n.subclasses.push(r));for(var l=0,f=a.length;l<f;l++)o(r,a[l],n);return r.prototype.initialize||(r.prototype.initialize=s),r.prototype.constructor=r,r.prototype.callSuper=i,r}u.util.createClass=e})(),(function(){var c=!!u.document.createElement("div").attachEvent,s=["touchstart","touchmove","touchend"];u.util.addListener=function(o,t,i,e){o&&o.addEventListener(t,i,c?!1:e)},u.util.removeListener=function(o,t,i,e){o&&o.removeEventListener(t,i,c?!1:e)};function h(o){var t=o.changedTouches;return t&&t[0]?t[0]:o}u.util.getPointer=function(o){var t=o.target,i=u.util.getScrollLeftTop(t),e=h(o);return{x:e.clientX+i.left,y:e.clientY+i.top}},u.util.isTouchEvent=function(o){return s.indexOf(o.type)>-1||o.pointerType==="touch"}})(),(function(){function c(e,n){var a=e.style;if(!a)return e;if(typeof n=="string")return e.style.cssText+=";"+n,n.indexOf("opacity")>-1?i(e,n.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in n)if(r==="opacity")i(e,n[r]);else{var l=r==="float"||r==="cssFloat"?typeof a.styleFloat>"u"?"cssFloat":"styleFloat":r;a.setProperty(l,n[r])}return e}var s=u.document.createElement("div"),h=typeof s.style.opacity=="string",o=typeof s.style.filter=="string",t=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,i=function(e){return e};h?i=function(e,n){return e.style.opacity=n,e}:o&&(i=function(e,n){var a=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(a.zoom=1),t.test(a.filter)?(n=n>=.9999?"":"alpha(opacity="+n*100+")",a.filter=a.filter.replace(t,n)):a.filter+=" alpha(opacity="+n*100+")",e}),u.util.setStyle=c})(),(function(){var c=Array.prototype.slice;function s(g){return typeof g=="string"?u.document.getElementById(g):g}var h,o=function(g){return c.call(g,0)};try{h=o(u.document.childNodes)instanceof Array}catch{}h||(o=function(g){for(var p=new Array(g.length),v=g.length;v--;)p[v]=g[v];return p});function t(g,p){var v=u.document.createElement(g);for(var x in p)x==="class"?v.className=p[x]:x==="for"?v.htmlFor=p[x]:v.setAttribute(x,p[x]);return v}function i(g,p){g&&(" "+g.className+" ").indexOf(" "+p+" ")===-1&&(g.className+=(g.className?" ":"")+p)}function e(g,p,v){return typeof p=="string"&&(p=t(p,v)),g.parentNode&&g.parentNode.replaceChild(p,g),p.appendChild(g),p}function n(g){for(var p=0,v=0,x=u.document.documentElement,w=u.document.body||{scrollLeft:0,scrollTop:0};g&&(g.parentNode||g.host)&&(g=g.parentNode||g.host,g===u.document?(p=w.scrollLeft||x.scrollLeft||0,v=w.scrollTop||x.scrollTop||0):(p+=g.scrollLeft||0,v+=g.scrollTop||0),!(g.nodeType===1&&g.style.position==="fixed")););return{left:p,top:v}}function a(g){var p,v=g&&g.ownerDocument,x={left:0,top:0},w={left:0,top:0},F,Y={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!v)return w;for(var W in Y)w[Y[W]]+=parseInt(r(g,W),10)||0;return p=v.documentElement,typeof g.getBoundingClientRect<"u"&&(x=g.getBoundingClientRect()),F=n(g),{left:x.left+F.left-(p.clientLeft||0)+w.left,top:x.top+F.top-(p.clientTop||0)+w.top}}var r;u.document.defaultView&&u.document.defaultView.getComputedStyle?r=function(g,p){var v=u.document.defaultView.getComputedStyle(g,null);return v?v[p]:void 0}:r=function(g,p){var v=g.style[p];return!v&&g.currentStyle&&(v=g.currentStyle[p]),v},(function(){var g=u.document.documentElement.style,p="userSelect"in g?"userSelect":"MozUserSelect"in g?"MozUserSelect":"WebkitUserSelect"in g?"WebkitUserSelect":"KhtmlUserSelect"in g?"KhtmlUserSelect":"";function v(w){return typeof w.onselectstart<"u"&&(w.onselectstart=u.util.falseFunction),p?w.style[p]="none":typeof w.unselectable=="string"&&(w.unselectable="on"),w}function x(w){return typeof w.onselectstart<"u"&&(w.onselectstart=null),p?w.style[p]="":typeof w.unselectable=="string"&&(w.unselectable=""),w}u.util.makeElementUnselectable=v,u.util.makeElementSelectable=x})();function l(g){var p=u.jsdomImplForWrapper(g);return p._canvas||p._image}function f(g){if(u.isLikelyNode){var p=u.jsdomImplForWrapper(g);p&&(p._image=null,p._canvas=null,p._currentSrc=null,p._attributes=null,p._classList=null)}}function d(g,p){g.imageSmoothingEnabled=g.imageSmoothingEnabled||g.webkitImageSmoothingEnabled||g.mozImageSmoothingEnabled||g.msImageSmoothingEnabled||g.oImageSmoothingEnabled,g.imageSmoothingEnabled=p}u.util.setImageSmoothing=d,u.util.getById=s,u.util.toArray=o,u.util.addClass=i,u.util.makeElement=t,u.util.wrapElement=e,u.util.getScrollLeftTop=n,u.util.getElementOffset=a,u.util.getNodeCanvas=l,u.util.cleanUpJsdomNode=f})(),(function(){function c(o,t){return o+(/\?/.test(o)?"&":"?")+t}function s(){}function h(o,t){t||(t={});var i=t.method?t.method.toUpperCase():"GET",e=t.onComplete||function(){},n=new u.window.XMLHttpRequest,a=t.body||t.parameters;return n.onreadystatechange=function(){n.readyState===4&&(e(n),n.onreadystatechange=s)},i==="GET"&&(a=null,typeof t.parameters=="string"&&(o=c(o,t.parameters))),n.open(i,o,!0),(i==="POST"||i==="PUT")&&n.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),n.send(a),n}u.util.request=h})(),u.log=console.log,u.warn=console.warn,(function(){var c=u.util.object.extend,s=u.util.object.clone,h=[];u.util.object.extend(h,{cancelAll:function(){var l=this.splice(0);return l.forEach(function(f){f.cancel()}),l},cancelByCanvas:function(l){if(!l)return[];var f=this.filter(function(d){return typeof d.target=="object"&&d.target.canvas===l});return f.forEach(function(d){d.cancel()}),f},cancelByTarget:function(l){var f=this.findAnimationsByTarget(l);return f.forEach(function(d){d.cancel()}),f},findAnimationIndex:function(l){return this.indexOf(this.findAnimation(l))},findAnimation:function(l){return this.find(function(f){return f.cancel===l})},findAnimationsByTarget:function(l){return l?this.filter(function(f){return f.target===l}):[]}});function o(){return!1}function t(l,f,d,g){return-d*Math.cos(l/g*(Math.PI/2))+d+f}function i(l){l||(l={});var f=!1,d,g=function(){var p=u.runningAnimations.indexOf(d);return p>-1&&u.runningAnimations.splice(p,1)[0]};return d=c(s(l),{cancel:function(){return f=!0,g()},currentValue:"startValue"in l?l.startValue:0,completionRate:0,durationRate:0}),u.runningAnimations.push(d),a(function(p){var v=p||+new Date,x=l.duration||500,w=v+x,F,Y=l.onChange||o,W=l.abort||o,Z=l.onComplete||o,Q=l.easing||t,G="startValue"in l?l.startValue.length>0:!1,q="startValue"in l?l.startValue:0,J="endValue"in l?l.endValue:100,et=l.byValue||(G?q.map(function(tt,_){return J[_]-q[_]}):J-q);l.onStart&&l.onStart(),(function tt(_){F=_||+new Date;var S=F>w?x:F-v,T=S/x,C=G?q.map(function(b,y){return Q(S,q[y],et[y],x)}):Q(S,q,et,x),D=Math.abs(G?(C[0]-q[0])/et[0]:(C-q)/et);if(d.currentValue=G?C.slice():C,d.completionRate=D,d.durationRate=T,!f){if(W(C,D,T)){g();return}if(F>w){d.currentValue=G?J.slice():J,d.completionRate=1,d.durationRate=1,Y(G?J.slice():J,1,1),Z(J,1,1),g();return}else Y(C,D,T),a(tt)}})(v)}),d.cancel}var e=u.window.requestAnimationFrame||u.window.webkitRequestAnimationFrame||u.window.mozRequestAnimationFrame||u.window.oRequestAnimationFrame||u.window.msRequestAnimationFrame||function(l){return u.window.setTimeout(l,1e3/60)},n=u.window.cancelAnimationFrame||u.window.clearTimeout;function a(){return e.apply(u.window,arguments)}function r(){return n.apply(u.window,arguments)}u.util.animate=i,u.util.requestAnimFrame=a,u.util.cancelAnimFrame=r,u.runningAnimations=h})(),(function(){function c(h,o,t){var i="rgba("+parseInt(h[0]+t*(o[0]-h[0]),10)+","+parseInt(h[1]+t*(o[1]-h[1]),10)+","+parseInt(h[2]+t*(o[2]-h[2]),10);return i+=","+(h&&o?parseFloat(h[3]+t*(o[3]-h[3])):1),i+=")",i}function s(h,o,t,i){var e=new u.Color(h).getSource(),n=new u.Color(o).getSource(),a=i.onComplete,r=i.onChange;return i=i||{},u.util.animate(u.util.object.extend(i,{duration:t||500,startValue:e,endValue:n,byValue:n,easing:function(l,f,d,g){var p=i.colorEasing?i.colorEasing(l,g):1-Math.cos(l/g*(Math.PI/2));return c(f,d,p)},onComplete:function(l,f,d){if(a)return a(c(n,n,0),f,d)},onChange:function(l,f,d){if(r){if(Array.isArray(l))return r(c(l,l,0),f,d);r(l,f,d)}}}))}u.util.animateColor=s})(),(function(){function c(_,S,T,C){return _<Math.abs(S)?(_=S,C=T/4):S===0&&_===0?C=T/(2*Math.PI)*Math.asin(1):C=T/(2*Math.PI)*Math.asin(S/_),{a:_,c:S,p:T,s:C}}function s(_,S,T){return _.a*Math.pow(2,10*(S-=1))*Math.sin((S*T-_.s)*(2*Math.PI)/_.p)}function h(_,S,T,C){return T*((_=_/C-1)*_*_+1)+S}function o(_,S,T,C){return _/=C/2,_<1?T/2*_*_*_+S:T/2*((_-=2)*_*_+2)+S}function t(_,S,T,C){return T*(_/=C)*_*_*_+S}function i(_,S,T,C){return-T*((_=_/C-1)*_*_*_-1)+S}function e(_,S,T,C){return _/=C/2,_<1?T/2*_*_*_*_+S:-T/2*((_-=2)*_*_*_-2)+S}function n(_,S,T,C){return T*(_/=C)*_*_*_*_+S}function a(_,S,T,C){return T*((_=_/C-1)*_*_*_*_+1)+S}function r(_,S,T,C){return _/=C/2,_<1?T/2*_*_*_*_*_+S:T/2*((_-=2)*_*_*_*_+2)+S}function l(_,S,T,C){return-T*Math.cos(_/C*(Math.PI/2))+T+S}function f(_,S,T,C){return T*Math.sin(_/C*(Math.PI/2))+S}function d(_,S,T,C){return-T/2*(Math.cos(Math.PI*_/C)-1)+S}function g(_,S,T,C){return _===0?S:T*Math.pow(2,10*(_/C-1))+S}function p(_,S,T,C){return _===C?S+T:T*(-Math.pow(2,-10*_/C)+1)+S}function v(_,S,T,C){return _===0?S:_===C?S+T:(_/=C/2,_<1?T/2*Math.pow(2,10*(_-1))+S:T/2*(-Math.pow(2,-10*--_)+2)+S)}function x(_,S,T,C){return-T*(Math.sqrt(1-(_/=C)*_)-1)+S}function w(_,S,T,C){return T*Math.sqrt(1-(_=_/C-1)*_)+S}function F(_,S,T,C){return _/=C/2,_<1?-T/2*(Math.sqrt(1-_*_)-1)+S:T/2*(Math.sqrt(1-(_-=2)*_)+1)+S}function Y(_,S,T,C){var D=1.70158,b=0,y=T;if(_===0)return S;if(_/=C,_===1)return S+T;b||(b=C*.3);var O=c(y,T,b,D);return-s(O,_,C)+S}function W(_,S,T,C){var D=1.70158,b=0,y=T;if(_===0)return S;if(_/=C,_===1)return S+T;b||(b=C*.3);var O=c(y,T,b,D);return O.a*Math.pow(2,-10*_)*Math.sin((_*C-O.s)*(2*Math.PI)/O.p)+O.c+S}function Z(_,S,T,C){var D=1.70158,b=0,y=T;if(_===0)return S;if(_/=C/2,_===2)return S+T;b||(b=C*(.3*1.5));var O=c(y,T,b,D);return _<1?-.5*s(O,_,C)+S:O.a*Math.pow(2,-10*(_-=1))*Math.sin((_*C-O.s)*(2*Math.PI)/O.p)*.5+O.c+S}function Q(_,S,T,C,D){return D===void 0&&(D=1.70158),T*(_/=C)*_*((D+1)*_-D)+S}function G(_,S,T,C,D){return D===void 0&&(D=1.70158),T*((_=_/C-1)*_*((D+1)*_+D)+1)+S}function q(_,S,T,C,D){return D===void 0&&(D=1.70158),_/=C/2,_<1?T/2*(_*_*(((D*=1.525)+1)*_-D))+S:T/2*((_-=2)*_*(((D*=1.525)+1)*_+D)+2)+S}function J(_,S,T,C){return T-et(C-_,0,T,C)+S}function et(_,S,T,C){return(_/=C)<1/2.75?T*(7.5625*_*_)+S:_<2/2.75?T*(7.5625*(_-=1.5/2.75)*_+.75)+S:_<2.5/2.75?T*(7.5625*(_-=2.25/2.75)*_+.9375)+S:T*(7.5625*(_-=2.625/2.75)*_+.984375)+S}function tt(_,S,T,C){return _<C/2?J(_*2,0,T,C)*.5+S:et(_*2-C,0,T,C)*.5+T*.5+S}u.util.ease={easeInQuad:function(_,S,T,C){return T*(_/=C)*_+S},easeOutQuad:function(_,S,T,C){return-T*(_/=C)*(_-2)+S},easeInOutQuad:function(_,S,T,C){return _/=C/2,_<1?T/2*_*_+S:-T/2*(--_*(_-2)-1)+S},easeInCubic:function(_,S,T,C){return T*(_/=C)*_*_+S},easeOutCubic:h,easeInOutCubic:o,easeInQuart:t,easeOutQuart:i,easeInOutQuart:e,easeInQuint:n,easeOutQuint:a,easeInOutQuint:r,easeInSine:l,easeOutSine:f,easeInOutSine:d,easeInExpo:g,easeOutExpo:p,easeInOutExpo:v,easeInCirc:x,easeOutCirc:w,easeInOutCirc:F,easeInElastic:Y,easeOutElastic:W,easeInOutElastic:Z,easeInBack:Q,easeOutBack:G,easeInOutBack:q,easeInBounce:J,easeOutBounce:et,easeInOutBounce:tt}})(),(function(c){var s=c.fabric||(c.fabric={}),h=s.util.object.extend,o=s.util.object.clone,t=s.util.toFixed,i=s.util.parseUnit,e=s.util.multiplyTransformMatrices,n=["path","circle","polygon","polyline","ellipse","rect","line","image","text"],a=["symbol","image","marker","pattern","view","svg"],r=["pattern","defs","symbol","metadata","clipPath","mask","desc"],l=["symbol","g","a","svg","clipPath","defs"],f={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","letter-spacing":"charSpacing","paint-order":"paintFirst","stroke-dasharray":"strokeDashArray","stroke-dashoffset":"strokeDashOffset","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"textAnchor",opacity:"opacity","clip-path":"clipPath","clip-rule":"clipRule","vector-effect":"strokeUniform","image-rendering":"imageSmoothing"},d={stroke:"strokeOpacity",fill:"fillOpacity"},g="font-size",p="clip-path";s.svgValidTagNamesRegEx=w(n),s.svgViewBoxElementsRegEx=w(a),s.svgInvalidAncestorsRegEx=w(r),s.svgValidParentsRegEx=w(l),s.cssRules={},s.gradientDefs={},s.clipPaths={};function v(b){return b in f?f[b]:b}function x(b,y,O,E){var I=Array.isArray(y),j;if((b==="fill"||b==="stroke")&&y==="none")y="";else{if(b==="strokeUniform")return y==="non-scaling-stroke";if(b==="strokeDashArray")y==="none"?y=null:y=y.replace(/,/g," ").split(/\s+/).map(parseFloat);else if(b==="transformMatrix")O&&O.transformMatrix?y=e(O.transformMatrix,s.parseTransformAttribute(y)):y=s.parseTransformAttribute(y);else if(b==="visible")y=y!=="none"&&y!=="hidden",O&&O.visible===!1&&(y=!1);else if(b==="opacity")y=parseFloat(y),O&&typeof O.opacity<"u"&&(y*=O.opacity);else if(b==="textAnchor")y=y==="start"?"left":y==="end"?"right":"center";else if(b==="charSpacing")j=i(y,E)/E*1e3;else if(b==="paintFirst"){var X=y.indexOf("fill"),H=y.indexOf("stroke"),y="fill";(X>-1&&H>-1&&H<X||X===-1&&H>-1)&&(y="stroke")}else{if(b==="href"||b==="xlink:href"||b==="font")return y;if(b==="imageSmoothing")return y==="optimizeQuality";j=I?y.map(i):i(y,E)}}return!I&&isNaN(j)?y:j}function w(b){return new RegExp("^("+b.join("|")+")\\b","i")}function F(b){for(var y in d)if(!(typeof b[d[y]]>"u"||b[y]==="")){if(typeof b[y]>"u"){if(!s.Object.prototype[y])continue;b[y]=s.Object.prototype[y]}if(b[y].indexOf("url(")!==0){var O=new s.Color(b[y]);b[y]=O.setAlpha(t(O.getAlpha()*b[d[y]],2)).toRgba()}}return b}function Y(b,y){var O,E=[],I,j,X;for(j=0,X=y.length;j<X;j++)O=y[j],I=b.getElementsByTagName(O),E=E.concat(Array.prototype.slice.call(I));return E}s.parseTransformAttribute=(function(){function b(L,rt){var ot=s.util.cos(rt[0]),at=s.util.sin(rt[0]),lt=0,ht=0;rt.length===3&&(lt=rt[1],ht=rt[2]),L[0]=ot,L[1]=at,L[2]=-at,L[3]=ot,L[4]=lt-(ot*lt-at*ht),L[5]=ht-(at*lt+ot*ht)}function y(L,rt){var ot=rt[0],at=rt.length===2?rt[1]:rt[0];L[0]=ot,L[3]=at}function O(L,rt,ot){L[ot]=Math.tan(s.util.degreesToRadians(rt[0]))}function E(L,rt){L[4]=rt[0],rt.length===2&&(L[5]=rt[1])}var I=s.iMatrix,j=s.reNum,X=s.commaWsp,H="(?:(skewX)\\s*\\(\\s*("+j+")\\s*\\))",K="(?:(skewY)\\s*\\(\\s*("+j+")\\s*\\))",A="(?:(rotate)\\s*\\(\\s*("+j+")(?:"+X+"("+j+")"+X+"("+j+"))?\\s*\\))",P="(?:(scale)\\s*\\(\\s*("+j+")(?:"+X+"("+j+"))?\\s*\\))",R="(?:(translate)\\s*\\(\\s*("+j+")(?:"+X+"("+j+"))?\\s*\\))",N="(?:(matrix)\\s*\\(\\s*("+j+")"+X+"("+j+")"+X+"("+j+")"+X+"("+j+")"+X+"("+j+")"+X+"("+j+")\\s*\\))",M="(?:"+N+"|"+R+"|"+P+"|"+A+"|"+H+"|"+K+")",z="(?:"+M+"(?:"+X+"*"+M+")*)",$="^\\s*(?:"+z+"?)\\s*$",nt=new RegExp($),it=new RegExp(M,"g");return function(L){var rt=I.concat(),ot=[];if(!L||L&&!nt.test(L))return rt;L.replace(it,function(lt){var ht=new RegExp(M).exec(lt).filter(function(_t){return!!_t}),ut=ht[1],ct=ht.slice(2).map(parseFloat);switch(ut){case"translate":E(rt,ct);break;case"rotate":ct[0]=s.util.degreesToRadians(ct[0]),b(rt,ct);break;case"scale":y(rt,ct);break;case"skewX":O(rt,ct,2);break;case"skewY":O(rt,ct,1);break;case"matrix":rt=ct;break}ot.push(rt.concat()),rt=I.concat()});for(var at=ot[0];ot.length>1;)ot.shift(),at=s.util.multiplyTransformMatrices(at,ot[0]);return at}})();function W(b,y){var O,E;b.replace(/;\s*$/,"").split(";").forEach(function(I){var j=I.split(":");O=j[0].trim().toLowerCase(),E=j[1].trim(),y[O]=E})}function Z(b,y){var O,E;for(var I in b)typeof b[I]>"u"||(O=I.toLowerCase(),E=b[I],y[O]=E)}function Q(b,y){var O={};for(var E in s.cssRules[y])if(G(b,E.split(" ")))for(var I in s.cssRules[y][E])O[I]=s.cssRules[y][E][I];return O}function G(b,y){var O,E=!0;return O=J(b,y.pop()),O&&y.length&&(E=q(b,y)),O&&E&&y.length===0}function q(b,y){for(var O,E=!0;b.parentNode&&b.parentNode.nodeType===1&&y.length;)E&&(O=y.pop()),b=b.parentNode,E=J(b,O);return y.length===0}function J(b,y){var O=b.nodeName,E=b.getAttribute("class"),I=b.getAttribute("id"),j,X;if(j=new RegExp("^"+O,"i"),y=y.replace(j,""),I&&y.length&&(j=new RegExp("#"+I+"(?![a-zA-Z\\-]+)","i"),y=y.replace(j,"")),E&&y.length)for(E=E.split(" "),X=E.length;X--;)j=new RegExp("\\."+E[X]+"(?![a-zA-Z\\-]+)","i"),y=y.replace(j,"");return y.length===0}function et(b,y){var O;if(b.getElementById&&(O=b.getElementById(y)),O)return O;var E,I,j,X=b.getElementsByTagName("*");for(I=0,j=X.length;I<j;I++)if(E=X[I],y===E.getAttribute("id"))return E}function tt(b){for(var y=Y(b,["use","svg:use"]),O=0;y.length&&O<y.length;){var E=y[O],I=E.getAttribute("xlink:href")||E.getAttribute("href");if(I===null)return;var j=I.slice(1),X=E.getAttribute("x")||0,H=E.getAttribute("y")||0,K=et(b,j).cloneNode(!0),A=(K.getAttribute("transform")||"")+" translate("+X+", "+H+")",P,R=y.length,N,M,z,$,nt=s.svgNS;if(S(K),/^svg$/i.test(K.nodeName)){var it=K.ownerDocument.createElementNS(nt,"g");for(M=0,z=K.attributes,$=z.length;M<$;M++)N=z.item(M),it.setAttributeNS(nt,N.nodeName,N.nodeValue);for(;K.firstChild;)it.appendChild(K.firstChild);K=it}for(M=0,z=E.attributes,$=z.length;M<$;M++)N=z.item(M),!(N.nodeName==="x"||N.nodeName==="y"||N.nodeName==="xlink:href"||N.nodeName==="href")&&(N.nodeName==="transform"?A=N.nodeValue+" "+A:K.setAttribute(N.nodeName,N.nodeValue));K.setAttribute("transform",A),K.setAttribute("instantiated_by_use","1"),K.removeAttribute("id"),P=E.parentNode,P.replaceChild(K,E),y.length===R&&O++}}var _=new RegExp("^\\s*("+s.reNum+"+)\\s*,?\\s*("+s.reNum+"+)\\s*,?\\s*("+s.reNum+"+)\\s*,?\\s*("+s.reNum+"+)\\s*$");function S(b){if(!s.svgViewBoxElementsRegEx.test(b.nodeName))return{};var y=b.getAttribute("viewBox"),O=1,E=1,I=0,j=0,X,H,K,A,P=b.getAttribute("width"),R=b.getAttribute("height"),N=b.getAttribute("x")||0,M=b.getAttribute("y")||0,z=b.getAttribute("preserveAspectRatio")||"",$=!y||!(y=y.match(_)),nt=!P||!R||P==="100%"||R==="100%",it=$&&nt,L={},rt="",ot=0,at=0;if(L.width=0,L.height=0,L.toBeParsed=it,$&&(N||M)&&b.parentNode&&b.parentNode.nodeName!=="#document"&&(rt=" translate("+i(N)+" "+i(M)+") ",K=(b.getAttribute("transform")||"")+rt,b.setAttribute("transform",K),b.removeAttribute("x"),b.removeAttribute("y")),it)return L;if($)return L.width=i(P),L.height=i(R),L;if(I=-parseFloat(y[1]),j=-parseFloat(y[2]),X=parseFloat(y[3]),H=parseFloat(y[4]),L.minX=I,L.minY=j,L.viewBoxWidth=X,L.viewBoxHeight=H,nt?(L.width=X,L.height=H):(L.width=i(P),L.height=i(R),O=L.width/X,E=L.height/H),z=s.util.parsePreserveAspectRatioAttribute(z),z.alignX!=="none"&&(z.meetOrSlice==="meet"&&(E=O=O>E?E:O),z.meetOrSlice==="slice"&&(E=O=O>E?O:E),ot=L.width-X*O,at=L.height-H*O,z.alignX==="Mid"&&(ot/=2),z.alignY==="Mid"&&(at/=2),z.alignX==="Min"&&(ot=0),z.alignY==="Min"&&(at=0)),O===1&&E===1&&I===0&&j===0&&N===0&&M===0)return L;if((N||M)&&b.parentNode.nodeName!=="#document"&&(rt=" translate("+i(N)+" "+i(M)+") "),K=rt+" matrix("+O+" 0 0 "+E+" "+(I*O+ot)+" "+(j*E+at)+") ",b.nodeName==="svg"){for(A=b.ownerDocument.createElementNS(s.svgNS,"g");b.firstChild;)A.appendChild(b.firstChild);b.appendChild(A)}else A=b,A.removeAttribute("x"),A.removeAttribute("y"),K=A.getAttribute("transform")+K;return A.setAttribute("transform",K),L}function T(b,y){for(;b&&(b=b.parentNode);)if(b.nodeName&&y.test(b.nodeName.replace("svg:",""))&&!b.getAttribute("instantiated_by_use"))return!0;return!1}s.parseSVGDocument=function(b,y,O,E){if(b){tt(b);var I=s.Object.__uid++,j,X,H=S(b),K=s.util.toArray(b.getElementsByTagName("*"));if(H.crossOrigin=E&&E.crossOrigin,H.svgUid=I,K.length===0&&s.isLikelyNode){K=b.selectNodes('//*[name(.)!="svg"]');var A=[];for(j=0,X=K.length;j<X;j++)A[j]=K[j];K=A}var P=K.filter(function(N){return S(N),s.svgValidTagNamesRegEx.test(N.nodeName.replace("svg:",""))&&!T(N,s.svgInvalidAncestorsRegEx)});if(!P||P&&!P.length){y&&y([],{});return}var R={};K.filter(function(N){return N.nodeName.replace("svg:","")==="clipPath"}).forEach(function(N){var M=N.getAttribute("id");R[M]=s.util.toArray(N.getElementsByTagName("*")).filter(function(z){return s.svgValidTagNamesRegEx.test(z.nodeName.replace("svg:",""))})}),s.gradientDefs[I]=s.getGradientDefs(b),s.cssRules[I]=s.getCSSRules(b),s.clipPaths[I]=R,s.parseElements(P,function(N,M){y&&(y(N,H,M,K),delete s.gradientDefs[I],delete s.cssRules[I],delete s.clipPaths[I])},o(H),O,E)}};function C(b,y){var O=["gradientTransform","x1","x2","y1","y2","gradientUnits","cx","cy","r","fx","fy"],E="xlink:href",I=y.getAttribute(E).slice(1),j=et(b,I);if(j&&j.getAttribute(E)&&C(b,j),O.forEach(function(H){j&&!y.hasAttribute(H)&&j.hasAttribute(H)&&y.setAttribute(H,j.getAttribute(H))}),!y.children.length)for(var X=j.cloneNode(!0);X.firstChild;)y.appendChild(X.firstChild);y.removeAttribute(E)}var D=new RegExp("(normal|italic)?\\s*(normal|small-caps)?\\s*(normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900)?\\s*("+s.reNum+"(?:px|cm|mm|em|pt|pc|in)*)(?:\\/(normal|"+s.reNum+"))?\\s+(.*)");h(s,{parseFontDeclaration:function(b,y){var O=b.match(D);if(O){var E=O[1],I=O[3],j=O[4],X=O[5],H=O[6];E&&(y.fontStyle=E),I&&(y.fontWeight=isNaN(parseFloat(I))?I:parseFloat(I)),j&&(y.fontSize=i(j)),H&&(y.fontFamily=H),X&&(y.lineHeight=X==="normal"?1:X)}},getGradientDefs:function(b){var y=["linearGradient","radialGradient","svg:linearGradient","svg:radialGradient"],O=Y(b,y),E,I=0,j={};for(I=O.length;I--;)E=O[I],E.getAttribute("xlink:href")&&C(b,E),j[E.getAttribute("id")]=E;return j},parseAttributes:function(b,y,O){if(b){var E,I={},j,X;typeof O>"u"&&(O=b.getAttribute("svgUid")),b.parentNode&&s.svgValidParentsRegEx.test(b.parentNode.nodeName)&&(I=s.parseAttributes(b.parentNode,y,O));var H=y.reduce(function(z,$){return E=b.getAttribute($),E&&(z[$]=E),z},{}),K=h(Q(b,O),s.parseStyleAttribute(b));H=h(H,K),K[p]&&b.setAttribute(p,K[p]),j=X=I.fontSize||s.Text.DEFAULT_SVG_FONT_SIZE,H[g]&&(H[g]=j=i(H[g],X));var A,P,R={};for(var N in H)A=v(N),P=x(A,H[N],I,j),R[A]=P;R&&R.font&&s.parseFontDeclaration(R.font,R);var M=h(I,R);return s.svgValidParentsRegEx.test(b.nodeName)?M:F(M)}},parseElements:function(b,y,O,E,I){new s.ElementsParser(b,y,O,E,I).parse()},parseStyleAttribute:function(b){var y={},O=b.getAttribute("style");return O&&(typeof O=="string"?W(O,y):Z(O,y)),y},parsePointsAttribute:function(b){if(!b)return null;b=b.replace(/,/g," ").trim(),b=b.split(/\s+/);var y=[],O,E;for(O=0,E=b.length;O<E;O+=2)y.push({x:parseFloat(b[O]),y:parseFloat(b[O+1])});return y},getCSSRules:function(b){var y=b.getElementsByTagName("style"),O,E,I={},j;for(O=0,E=y.length;O<E;O++){var X=y[O].textContent;X=X.replace(/\/\*[\s\S]*?\*\//g,""),X.trim()!==""&&(j=X.split("}"),j=j.filter(function(H){return H.trim()}),j.forEach(function(H){var K=H.split("{"),A={},P=K[1].trim(),R=P.split(";").filter(function($){return $.trim()});for(O=0,E=R.length;O<E;O++){var N=R[O].split(":"),M=N[0].trim(),z=N[1].trim();A[M]=z}H=K[0].trim(),H.split(",").forEach(function($){$=$.replace(/^svg/i,"").trim(),$!==""&&(I[$]?s.util.object.extend(I[$],A):I[$]=s.util.object.clone(A))})}))}return I},loadSVGFromURL:function(b,y,O,E){b=b.replace(/^\n\s*/,"").trim(),new s.util.request(b,{method:"get",onComplete:I});function I(j){var X=j.responseXML;if(!X||!X.documentElement)return y&&y(null),!1;s.parseSVGDocument(X.documentElement,function(H,K,A,P){y&&y(H,K,A,P)},O,E)}},loadSVGFromString:function(b,y,O,E){var I=new s.window.DOMParser,j=I.parseFromString(b.trim(),"text/xml");s.parseSVGDocument(j.documentElement,function(X,H,K,A){y(X,H,K,A)},O,E)}})})(m),u.ElementsParser=function(c,s,h,o,t,i){this.elements=c,this.callback=s,this.options=h,this.reviver=o,this.svgUid=h&&h.svgUid||0,this.parsingOptions=t,this.regexUrl=/^url\(['"]?#([^'"]+)['"]?\)/g,this.doc=i},(function(c){c.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},c.createObjects=function(){var s=this;this.elements.forEach(function(h,o){h.setAttribute("svgUid",s.svgUid),s.createObject(h,o)})},c.findTag=function(s){return u[u.util.string.capitalize(s.tagName.replace("svg:",""))]},c.createObject=function(s,h){var o=this.findTag(s);if(o&&o.fromElement)try{o.fromElement(s,this.createCallback(h,s),this.options)}catch(t){u.log(t)}else this.checkIfDone()},c.createCallback=function(s,h){var o=this;return function(t){var i;o.resolveGradient(t,h,"fill"),o.resolveGradient(t,h,"stroke"),t instanceof u.Image&&t._originalElement&&(i=t.parsePreserveAspectRatioAttribute(h)),t._removeTransformMatrix(i),o.resolveClipPath(t,h),o.reviver&&o.reviver(h,t),o.instances[s]=t,o.checkIfDone()}},c.extractPropertyDefinition=function(s,h,o){var t=s[h],i=this.regexUrl;if(i.test(t)){i.lastIndex=0;var e=i.exec(t)[1];return i.lastIndex=0,u[o][this.svgUid][e]}},c.resolveGradient=function(s,h,o){var t=this.extractPropertyDefinition(s,o,"gradientDefs");if(t){var i=h.getAttribute(o+"-opacity"),e=u.Gradient.fromElement(t,s,i,this.options);s.set(o,e)}},c.createClipPathCallback=function(s,h){return function(o){o._removeTransformMatrix(),o.fillRule=o.clipRule,h.push(o)}},c.resolveClipPath=function(s,h){var o=this.extractPropertyDefinition(s,"clipPath","clipPaths"),t,i,e,n,a,r;if(o){n=[],e=u.util.invertTransform(s.calcTransformMatrix());for(var l=o[0].parentNode,f=h;f.parentNode&&f.getAttribute("clip-path")!==s.clipPath;)f=f.parentNode;f.parentNode.appendChild(l);for(var d=0;d<o.length;d++)t=o[d],i=this.findTag(t),i.fromElement(t,this.createClipPathCallback(s,n),this.options);n.length===1?o=n[0]:o=new u.Group(n),a=u.util.multiplyTransformMatrices(e,o.calcTransformMatrix()),o.clipPath&&this.resolveClipPath(o,f);var r=u.util.qrDecompose(a);o.flipX=!1,o.flipY=!1,o.set("scaleX",r.scaleX),o.set("scaleY",r.scaleY),o.angle=r.angle,o.skewX=r.skewX,o.skewY=0,o.setPositionByOrigin({x:r.translateX,y:r.translateY},"center","center"),s.clipPath=o}else delete s.clipPath},c.checkIfDone=function(){--this.numElements===0&&(this.instances=this.instances.filter(function(s){return s!=null}),this.callback(this.instances,this.elements))}})(u.ElementsParser.prototype),(function(c){var s=c.fabric||(c.fabric={});if(s.Point){s.warn("fabric.Point is already defined");return}s.Point=h;function h(o,t){this.x=o,this.y=t}h.prototype={type:"point",constructor:h,add:function(o){return new h(this.x+o.x,this.y+o.y)},addEquals:function(o){return this.x+=o.x,this.y+=o.y,this},scalarAdd:function(o){return new h(this.x+o,this.y+o)},scalarAddEquals:function(o){return this.x+=o,this.y+=o,this},subtract:function(o){return new h(this.x-o.x,this.y-o.y)},subtractEquals:function(o){return this.x-=o.x,this.y-=o.y,this},scalarSubtract:function(o){return new h(this.x-o,this.y-o)},scalarSubtractEquals:function(o){return this.x-=o,this.y-=o,this},multiply:function(o){return new h(this.x*o,this.y*o)},multiplyEquals:function(o){return this.x*=o,this.y*=o,this},divide:function(o){return new h(this.x/o,this.y/o)},divideEquals:function(o){return this.x/=o,this.y/=o,this},eq:function(o){return this.x===o.x&&this.y===o.y},lt:function(o){return this.x<o.x&&this.y<o.y},lte:function(o){return this.x<=o.x&&this.y<=o.y},gt:function(o){return this.x>o.x&&this.y>o.y},gte:function(o){return this.x>=o.x&&this.y>=o.y},lerp:function(o,t){return typeof t>"u"&&(t=.5),t=Math.max(Math.min(1,t),0),new h(this.x+(o.x-this.x)*t,this.y+(o.y-this.y)*t)},distanceFrom:function(o){var t=this.x-o.x,i=this.y-o.y;return Math.sqrt(t*t+i*i)},midPointFrom:function(o){return this.lerp(o)},min:function(o){return new h(Math.min(this.x,o.x),Math.min(this.y,o.y))},max:function(o){return new h(Math.max(this.x,o.x),Math.max(this.y,o.y))},toString:function(){return this.x+","+this.y},setXY:function(o,t){return this.x=o,this.y=t,this},setX:function(o){return this.x=o,this},setY:function(o){return this.y=o,this},setFromPoint:function(o){return this.x=o.x,this.y=o.y,this},swap:function(o){var t=this.x,i=this.y;this.x=o.x,this.y=o.y,o.x=t,o.y=i},clone:function(){return new h(this.x,this.y)}}})(m),(function(c){var s=c.fabric||(c.fabric={});if(s.Intersection){s.warn("fabric.Intersection is already defined");return}function h(o){this.status=o,this.points=[]}s.Intersection=h,s.Intersection.prototype={constructor:h,appendPoint:function(o){return this.points.push(o),this},appendPoints:function(o){return this.points=this.points.concat(o),this}},s.Intersection.intersectLineLine=function(o,t,i,e){var n,a=(e.x-i.x)*(o.y-i.y)-(e.y-i.y)*(o.x-i.x),r=(t.x-o.x)*(o.y-i.y)-(t.y-o.y)*(o.x-i.x),l=(e.y-i.y)*(t.x-o.x)-(e.x-i.x)*(t.y-o.y);if(l!==0){var f=a/l,d=r/l;0<=f&&f<=1&&0<=d&&d<=1?(n=new h("Intersection"),n.appendPoint(new s.Point(o.x+f*(t.x-o.x),o.y+f*(t.y-o.y)))):n=new h}else a===0||r===0?n=new h("Coincident"):n=new h("Parallel");return n},s.Intersection.intersectLinePolygon=function(o,t,i){var e=new h,n=i.length,a,r,l,f;for(f=0;f<n;f++)a=i[f],r=i[(f+1)%n],l=h.intersectLineLine(o,t,a,r),e.appendPoints(l.points);return e.points.length>0&&(e.status="Intersection"),e},s.Intersection.intersectPolygonPolygon=function(o,t){var i=new h,e=o.length,n;for(n=0;n<e;n++){var a=o[n],r=o[(n+1)%e],l=h.intersectLinePolygon(a,r,t);i.appendPoints(l.points)}return i.points.length>0&&(i.status="Intersection"),i},s.Intersection.intersectPolygonRectangle=function(o,t,i){var e=t.min(i),n=t.max(i),a=new s.Point(n.x,e.y),r=new s.Point(e.x,n.y),l=h.intersectLinePolygon(e,a,o),f=h.intersectLinePolygon(a,n,o),d=h.intersectLinePolygon(n,r,o),g=h.intersectLinePolygon(r,e,o),p=new h;return p.appendPoints(l.points),p.appendPoints(f.points),p.appendPoints(d.points),p.appendPoints(g.points),p.points.length>0&&(p.status="Intersection"),p}})(m),(function(c){var s=c.fabric||(c.fabric={});if(s.Color){s.warn("fabric.Color is already defined.");return}function h(t){t?this._tryParsingColor(t):this.setSource([0,0,0,1])}s.Color=h,s.Color.prototype={_tryParsingColor:function(t){var i;t in h.colorNameMap&&(t=h.colorNameMap[t]),t==="transparent"&&(i=[255,255,255,0]),i||(i=h.sourceFromHex(t)),i||(i=h.sourceFromRgb(t)),i||(i=h.sourceFromHsl(t)),i||(i=[0,0,0,1]),i&&this.setSource(i)},_rgbToHsl:function(t,i,e){t/=255,i/=255,e/=255;var n,a,r,l=s.util.array.max([t,i,e]),f=s.util.array.min([t,i,e]);if(r=(l+f)/2,l===f)n=a=0;else{var d=l-f;switch(a=r>.5?d/(2-l-f):d/(l+f),l){case t:n=(i-e)/d+(i<e?6:0);break;case i:n=(e-t)/d+2;break;case e:n=(t-i)/d+4;break}n/=6}return[Math.round(n*360),Math.round(a*100),Math.round(r*100)]},getSource:function(){return this._source},setSource:function(t){this._source=t},toRgb:function(){var t=this.getSource();return"rgb("+t[0]+","+t[1]+","+t[2]+")"},toRgba:function(){var t=this.getSource();return"rgba("+t[0]+","+t[1]+","+t[2]+","+t[3]+")"},toHsl:function(){var t=this.getSource(),i=this._rgbToHsl(t[0],t[1],t[2]);return"hsl("+i[0]+","+i[1]+"%,"+i[2]+"%)"},toHsla:function(){var t=this.getSource(),i=this._rgbToHsl(t[0],t[1],t[2]);return"hsla("+i[0]+","+i[1]+"%,"+i[2]+"%,"+t[3]+")"},toHex:function(){var t=this.getSource(),i,e,n;return i=t[0].toString(16),i=i.length===1?"0"+i:i,e=t[1].toString(16),e=e.length===1?"0"+e:e,n=t[2].toString(16),n=n.length===1?"0"+n:n,i.toUpperCase()+e.toUpperCase()+n.toUpperCase()},toHexa:function(){var t=this.getSource(),i;return i=Math.round(t[3]*255),i=i.toString(16),i=i.length===1?"0"+i:i,this.toHex()+i.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(t){var i=this.getSource();return i[3]=t,this.setSource(i),this},toGrayscale:function(){var t=this.getSource(),i=parseInt((t[0]*.3+t[1]*.59+t[2]*.11).toFixed(0),10),e=t[3];return this.setSource([i,i,i,e]),this},toBlackWhite:function(t){var i=this.getSource(),e=(i[0]*.3+i[1]*.59+i[2]*.11).toFixed(0),n=i[3];return t=t||127,e=Number(e)<Number(t)?0:255,this.setSource([e,e,e,n]),this},overlayWith:function(t){t instanceof h||(t=new h(t));var i=[],e=this.getAlpha(),n=.5,a=this.getSource(),r=t.getSource(),l;for(l=0;l<3;l++)i.push(Math.round(a[l]*(1-n)+r[l]*n));return i[3]=e,this.setSource(i),this}},s.Color.reRGBa=/^rgba?\(\s*(\d{1,3}(?:\.\d+)?\%?)\s*,\s*(\d{1,3}(?:\.\d+)?\%?)\s*,\s*(\d{1,3}(?:\.\d+)?\%?)\s*(?:\s*,\s*((?:\d*\.?\d+)?)\s*)?\)$/i,s.Color.reHSLa=/^hsla?\(\s*(\d{1,3})\s*,\s*(\d{1,3}\%)\s*,\s*(\d{1,3}\%)\s*(?:\s*,\s*(\d+(?:\.\d+)?)\s*)?\)$/i,s.Color.reHex=/^#?([0-9a-f]{8}|[0-9a-f]{6}|[0-9a-f]{4}|[0-9a-f]{3})$/i,s.Color.colorNameMap={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aqua:"#00FFFF",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blue:"#0000FF",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgrey:"#A9A9A9",darkgreen:"#006400",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",fuchsia:"#FF00FF",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",gray:"#808080",grey:"#808080",green:"#008000",greenyellow:"#ADFF2F",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgray:"#D3D3D3",lightgrey:"#D3D3D3",lightgreen:"#90EE90",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",lime:"#00FF00",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",maroon:"#800000",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",navy:"#000080",oldlace:"#FDF5E6",olive:"#808000",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",purple:"#800080",rebeccapurple:"#663399",red:"#FF0000",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",silver:"#C0C0C0",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",teal:"#008080",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",white:"#FFFFFF",whitesmoke:"#F5F5F5",yellow:"#FFFF00",yellowgreen:"#9ACD32"};function o(t,i,e){return e<0&&(e+=1),e>1&&(e-=1),e<1/6?t+(i-t)*6*e:e<1/2?i:e<2/3?t+(i-t)*(2/3-e)*6:t}s.Color.fromRgb=function(t){return h.fromSource(h.sourceFromRgb(t))},s.Color.sourceFromRgb=function(t){var i=t.match(h.reRGBa);if(i){var e=parseInt(i[1],10)/(/%$/.test(i[1])?100:1)*(/%$/.test(i[1])?255:1),n=parseInt(i[2],10)/(/%$/.test(i[2])?100:1)*(/%$/.test(i[2])?255:1),a=parseInt(i[3],10)/(/%$/.test(i[3])?100:1)*(/%$/.test(i[3])?255:1);return[parseInt(e,10),parseInt(n,10),parseInt(a,10),i[4]?parseFloat(i[4]):1]}},s.Color.fromRgba=h.fromRgb,s.Color.fromHsl=function(t){return h.fromSource(h.sourceFromHsl(t))},s.Color.sourceFromHsl=function(t){var i=t.match(h.reHSLa);if(i){var e=(parseFloat(i[1])%360+360)%360/360,n=parseFloat(i[2])/(/%$/.test(i[2])?100:1),a=parseFloat(i[3])/(/%$/.test(i[3])?100:1),r,l,f;if(n===0)r=l=f=a;else{var d=a<=.5?a*(n+1):a+n-a*n,g=a*2-d;r=o(g,d,e+1/3),l=o(g,d,e),f=o(g,d,e-1/3)}return[Math.round(r*255),Math.round(l*255),Math.round(f*255),i[4]?parseFloat(i[4]):1]}},s.Color.fromHsla=h.fromHsl,s.Color.fromHex=function(t){return h.fromSource(h.sourceFromHex(t))},s.Color.sourceFromHex=function(t){if(t.match(h.reHex)){var i=t.slice(t.indexOf("#")+1),e=i.length===3||i.length===4,n=i.length===8||i.length===4,a=e?i.charAt(0)+i.charAt(0):i.substring(0,2),r=e?i.charAt(1)+i.charAt(1):i.substring(2,4),l=e?i.charAt(2)+i.charAt(2):i.substring(4,6),f=n?e?i.charAt(3)+i.charAt(3):i.substring(6,8):"FF";return[parseInt(a,16),parseInt(r,16),parseInt(l,16),parseFloat((parseInt(f,16)/255).toFixed(2))]}},s.Color.fromSource=function(t){var i=new h;return i.setSource(t),i}})(m),(function(c){var s=c.fabric||(c.fabric={}),h=["e","se","s","sw","w","nw","n","ne","e"],o=["ns","nesw","ew","nwse"],t={},i="left",e="top",n="right",a="bottom",r="center",l={top:a,bottom:e,left:n,right:i,center:r},f=s.util.radiansToDegrees,d=Math.sign||function(A){return(A>0)-(A<0)||+A};function g(A,P){var R=A.angle+f(Math.atan2(P.y,P.x))+360;return Math.round(R%360/45)}function p(A,P){var R=P.transform.target,N=R.canvas,M=s.util.object.clone(P);M.target=R,N&&N.fire("object:"+A,M),R.fire(A,P)}function v(A,P){var R=P.canvas,N=R.uniScaleKey,M=A[N];return R.uniformScaling&&!M||!R.uniformScaling&&M}function x(A){return A.originX===r&&A.originY===r}function w(A,P,R){var N=A.lockScalingX,M=A.lockScalingY;return!!(N&&M||!P&&(N||M)&&R||N&&P==="x"||M&&P==="y")}function F(A,P,R){var N="not-allowed",M=v(A,R),z="";if(P.x!==0&&P.y===0?z="x":P.x===0&&P.y!==0&&(z="y"),w(R,z,M))return N;var $=g(R,P);return h[$]+"-resize"}function Y(A,P,R){var N="not-allowed";if(P.x!==0&&R.lockSkewingY||P.y!==0&&R.lockSkewingX)return N;var M=g(R,P)%4;return o[M]+"-resize"}function W(A,P,R){return A[R.canvas.altActionKey]?t.skewCursorStyleHandler(A,P,R):t.scaleCursorStyleHandler(A,P,R)}function Z(A,P,R){var N=A[R.canvas.altActionKey];if(P.x===0)return N?"skewX":"scaleY";if(P.y===0)return N?"skewY":"scaleX"}function Q(A,P,R){return R.lockRotation?"not-allowed":P.cursorStyle}function G(A,P,R,N){return{e:A,transform:P,pointer:{x:R,y:N}}}function q(A){return function(P,R,N,M){var z=R.target,$=z.getCenterPoint(),nt=z.translateToOriginPoint($,R.originX,R.originY),it=A(P,R,N,M);return z.setPositionByOrigin(nt,R.originX,R.originY),it}}function J(A,P){return function(R,N,M,z){var $=P(R,N,M,z);return $&&p(A,G(R,N,M,z)),$}}function et(A,P,R,N,M){var z=A.target,$=z.controls[A.corner],nt=z.canvas.getZoom(),it=z.padding/nt,L=z.toLocalPoint(new s.Point(N,M),P,R);return L.x>=it&&(L.x-=it),L.x<=-it&&(L.x+=it),L.y>=it&&(L.y-=it),L.y<=it&&(L.y+=it),L.x-=$.offsetX,L.y-=$.offsetY,L}function tt(A){return A.flipX!==A.flipY}function _(A,P,R,N,M){if(A[P]!==0){var z=A._getTransformedDimensions()[N],$=M/z*A[R];A.set(R,$)}}function S(A,P,R,N){var M=P.target,z=M._getTransformedDimensions(0,M.skewY),$=et(P,P.originX,P.originY,R,N),nt=Math.abs($.x*2)-z.x,it=M.skewX,L;nt<2?L=0:(L=f(Math.atan2(nt/M.scaleX,z.y/M.scaleY)),P.originX===i&&P.originY===a&&(L=-L),P.originX===n&&P.originY===e&&(L=-L),tt(M)&&(L=-L));var rt=it!==L;if(rt){var ot=M._getTransformedDimensions().y;M.set("skewX",L),_(M,"skewY","scaleY","y",ot)}return rt}function T(A,P,R,N){var M=P.target,z=M._getTransformedDimensions(M.skewX,0),$=et(P,P.originX,P.originY,R,N),nt=Math.abs($.y*2)-z.y,it=M.skewY,L;nt<2?L=0:(L=f(Math.atan2(nt/M.scaleY,z.x/M.scaleX)),P.originX===i&&P.originY===a&&(L=-L),P.originX===n&&P.originY===e&&(L=-L),tt(M)&&(L=-L));var rt=it!==L;if(rt){var ot=M._getTransformedDimensions().x;M.set("skewY",L),_(M,"skewX","scaleX","x",ot)}return rt}function C(A,P,R,N){var M=P.target,z=M.skewX,$,nt=P.originY;if(M.lockSkewingX)return!1;if(z===0){var it=et(P,r,r,R,N);it.x>0?$=i:$=n}else z>0&&($=nt===e?i:n),z<0&&($=nt===e?n:i),tt(M)&&($=$===i?n:i);P.originX=$;var L=J("skewing",q(S));return L(A,P,R,N)}function D(A,P,R,N){var M=P.target,z=M.skewY,$,nt=P.originX;if(M.lockSkewingY)return!1;if(z===0){var it=et(P,r,r,R,N);it.y>0?$=e:$=a}else z>0&&($=nt===i?e:a),z<0&&($=nt===i?a:e),tt(M)&&($=$===e?a:e);P.originY=$;var L=J("skewing",q(T));return L(A,P,R,N)}function b(A,P,R,N){var M=P,z=M.target,$=z.translateToOriginPoint(z.getCenterPoint(),M.originX,M.originY);if(z.lockRotation)return!1;var nt=Math.atan2(M.ey-$.y,M.ex-$.x),it=Math.atan2(N-$.y,R-$.x),L=f(it-nt+M.theta),rt=!0;if(z.snapAngle>0){var ot=z.snapAngle,at=z.snapThreshold||ot,lt=Math.ceil(L/ot)*ot,ht=Math.floor(L/ot)*ot;Math.abs(L-ht)<at?L=ht:Math.abs(L-lt)<at&&(L=lt)}return L<0&&(L=360+L),L%=360,rt=z.angle!==L,z.angle=L,rt}function y(A,P,R,N,M){M=M||{};var z=P.target,$=z.lockScalingX,nt=z.lockScalingY,it=M.by,L,rt,ot,at,lt=v(A,z),ht=w(z,it,lt),ut,ct,_t=P.gestureScale;if(ht)return!1;if(_t)rt=P.scaleX*_t,ot=P.scaleY*_t;else{if(L=et(P,P.originX,P.originY,R,N),ut=it!=="y"?d(L.x):1,ct=it!=="x"?d(L.y):1,P.signX||(P.signX=ut),P.signY||(P.signY=ct),z.lockScalingFlip&&(P.signX!==ut||P.signY!==ct))return!1;if(at=z._getTransformedDimensions(),lt&&!it){var wt=Math.abs(L.x)+Math.abs(L.y),dt=P.original,ye=Math.abs(at.x*dt.scaleX/z.scaleX)+Math.abs(at.y*dt.scaleY/z.scaleY),Qt=wt/ye;rt=dt.scaleX*Qt,ot=dt.scaleY*Qt}else rt=Math.abs(L.x*z.scaleX/at.x),ot=Math.abs(L.y*z.scaleY/at.y);x(P)&&(rt*=2,ot*=2),P.signX!==ut&&it!=="y"&&(P.originX=l[P.originX],rt*=-1,P.signX=ut),P.signY!==ct&&it!=="x"&&(P.originY=l[P.originY],ot*=-1,P.signY=ct)}var xe=z.scaleX,be=z.scaleY;return it?(it==="x"&&z.set("scaleX",rt),it==="y"&&z.set("scaleY",ot)):(!$&&z.set("scaleX",rt),!nt&&z.set("scaleY",ot)),xe!==z.scaleX||be!==z.scaleY}function O(A,P,R,N){return y(A,P,R,N)}function E(A,P,R,N){return y(A,P,R,N,{by:"x"})}function I(A,P,R,N){return y(A,P,R,N,{by:"y"})}function j(A,P,R,N){return A[P.target.canvas.altActionKey]?t.skewHandlerX(A,P,R,N):t.scalingY(A,P,R,N)}function X(A,P,R,N){return A[P.target.canvas.altActionKey]?t.skewHandlerY(A,P,R,N):t.scalingX(A,P,R,N)}function H(A,P,R,N){var M=P.target,z=et(P,P.originX,P.originY,R,N),$=M.strokeWidth/(M.strokeUniform?M.scaleX:1),nt=x(P)?2:1,it=M.width,L=Math.abs(z.x*nt/M.scaleX)-$;return M.set("width",Math.max(L,0)),it!==L}function K(A,P,R,N){var M=P.target,z=R-P.offsetX,$=N-P.offsetY,nt=!M.get("lockMovementX")&&M.left!==z,it=!M.get("lockMovementY")&&M.top!==$;return nt&&M.set("left",z),it&&M.set("top",$),(nt||it)&&p("moving",G(A,P,R,N)),nt||it}t.scaleCursorStyleHandler=F,t.skewCursorStyleHandler=Y,t.scaleSkewCursorStyleHandler=W,t.rotationWithSnapping=J("rotating",q(b)),t.scalingEqually=J("scaling",q(O)),t.scalingX=J("scaling",q(E)),t.scalingY=J("scaling",q(I)),t.scalingYOrSkewingX=j,t.scalingXOrSkewingY=X,t.changeWidth=J("resizing",q(H)),t.skewHandlerX=C,t.skewHandlerY=D,t.dragHandler=K,t.scaleOrSkewActionName=Z,t.rotationStyleHandler=Q,t.fireEvent=p,t.wrapWithFixedAnchor=q,t.wrapWithFireEvent=J,t.getLocalPoint=et,s.controlsUtils=t})(m),(function(c){var s=c.fabric||(c.fabric={}),h=s.util.degreesToRadians,o=s.controlsUtils;function t(e,n,a,r,l){r=r||{};var f=this.sizeX||r.cornerSize||l.cornerSize,d=this.sizeY||r.cornerSize||l.cornerSize,g=typeof r.transparentCorners<"u"?r.transparentCorners:l.transparentCorners,p=g?"stroke":"fill",v=!g&&(r.cornerStrokeColor||l.cornerStrokeColor),x=n,w=a,F;e.save(),e.fillStyle=r.cornerColor||l.cornerColor,e.strokeStyle=r.cornerStrokeColor||l.cornerStrokeColor,f>d?(F=f,e.scale(1,d/f),w=a*f/d):d>f?(F=d,e.scale(f/d,1),x=n*d/f):F=f,e.lineWidth=1,e.beginPath(),e.arc(x,w,F/2,0,2*Math.PI,!1),e[p](),v&&e.stroke(),e.restore()}function i(e,n,a,r,l){r=r||{};var f=this.sizeX||r.cornerSize||l.cornerSize,d=this.sizeY||r.cornerSize||l.cornerSize,g=typeof r.transparentCorners<"u"?r.transparentCorners:l.transparentCorners,p=g?"stroke":"fill",v=!g&&(r.cornerStrokeColor||l.cornerStrokeColor),x=f/2,w=d/2;e.save(),e.fillStyle=r.cornerColor||l.cornerColor,e.strokeStyle=r.cornerStrokeColor||l.cornerStrokeColor,e.lineWidth=1,e.translate(n,a),e.rotate(h(l.angle)),e[p+"Rect"](-x,-w,f,d),v&&e.strokeRect(-x,-w,f,d),e.restore()}o.renderCircleControl=t,o.renderSquareControl=i})(m),(function(c){var s=c.fabric||(c.fabric={});function h(o){for(var t in o)this[t]=o[t]}s.Control=h,s.Control.prototype={visible:!0,actionName:"scale",angle:0,x:0,y:0,offsetX:0,offsetY:0,sizeX:null,sizeY:null,touchSizeX:null,touchSizeY:null,cursorStyle:"crosshair",withConnection:!1,actionHandler:function(){},mouseDownHandler:function(){},mouseUpHandler:function(){},getActionHandler:function(){return this.actionHandler},getMouseDownHandler:function(){return this.mouseDownHandler},getMouseUpHandler:function(){return this.mouseUpHandler},cursorStyleHandler:function(o,t){return t.cursorStyle},getActionName:function(o,t){return t.actionName},getVisibility:function(o,t){var i=o._controlsVisibility;return i&&typeof i[t]<"u"?i[t]:this.visible},setVisibility:function(o){this.visible=o},positionHandler:function(o,t){var i=s.util.transformPoint({x:this.x*o.x+this.offsetX,y:this.y*o.y+this.offsetY},t);return i},calcCornerCoords:function(o,t,i,e,n){var a,r,l,f,d=n?this.touchSizeX:this.sizeX,g=n?this.touchSizeY:this.sizeY;if(d&&g&&d!==g){var p=Math.atan2(g,d),v=Math.sqrt(d*d+g*g)/2,x=p-s.util.degreesToRadians(o),w=Math.PI/2-p-s.util.degreesToRadians(o);a=v*s.util.cos(x),r=v*s.util.sin(x),l=v*s.util.cos(w),f=v*s.util.sin(w)}else{var F=d&&g?d:t;v=F*.7071067812;var x=s.util.degreesToRadians(45-o);a=l=v*s.util.cos(x),r=f=v*s.util.sin(x)}return{tl:{x:i-f,y:e-l},tr:{x:i+a,y:e-r},bl:{x:i-a,y:e+r},br:{x:i+f,y:e+l}}},render:function(o,t,i,e,n){switch(e=e||{},e.cornerStyle||n.cornerStyle){case"circle":s.controlsUtils.renderCircleControl.call(this,o,t,i,e,n);break;default:s.controlsUtils.renderSquareControl.call(this,o,t,i,e,n)}}}})(m),(function(){function c(i,e){var n=i.getAttribute("style"),a=i.getAttribute("offset")||0,r,l,f,d;if(a=parseFloat(a)/(/%$/.test(a)?100:1),a=a<0?0:a>1?1:a,n){var g=n.split(/\s*;\s*/);for(g[g.length-1]===""&&g.pop(),d=g.length;d--;){var p=g[d].split(/\s*:\s*/),v=p[0].trim(),x=p[1].trim();v==="stop-color"?r=x:v==="stop-opacity"&&(f=x)}}return r||(r=i.getAttribute("stop-color")||"rgb(0,0,0)"),f||(f=i.getAttribute("stop-opacity")),r=new u.Color(r),l=r.getAlpha(),f=isNaN(parseFloat(f))?1:parseFloat(f),f*=l*e,{offset:a,color:r.toRgb(),opacity:f}}function s(i){return{x1:i.getAttribute("x1")||0,y1:i.getAttribute("y1")||0,x2:i.getAttribute("x2")||"100%",y2:i.getAttribute("y2")||0}}function h(i){return{x1:i.getAttribute("fx")||i.getAttribute("cx")||"50%",y1:i.getAttribute("fy")||i.getAttribute("cy")||"50%",r1:0,x2:i.getAttribute("cx")||"50%",y2:i.getAttribute("cy")||"50%",r2:i.getAttribute("r")||"50%"}}var o=u.util.object.clone;u.Gradient=u.util.createClass({offsetX:0,offsetY:0,gradientTransform:null,gradientUnits:"pixels",type:"linear",initialize:function(i){i||(i={}),i.coords||(i.coords={});var e,n=this;Object.keys(i).forEach(function(a){n[a]=i[a]}),this.id?this.id+="_"+u.Object.__uid++:this.id=u.Object.__uid++,e={x1:i.coords.x1||0,y1:i.coords.y1||0,x2:i.coords.x2||0,y2:i.coords.y2||0},this.type==="radial"&&(e.r1=i.coords.r1||0,e.r2=i.coords.r2||0),this.coords=e,this.colorStops=i.colorStops.slice()},addColorStop:function(i){for(var e in i){var n=new u.Color(i[e]);this.colorStops.push({offset:parseFloat(e),color:n.toRgb(),opacity:n.getAlpha()})}return this},toObject:function(i){var e={type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY,gradientUnits:this.gradientUnits,gradientTransform:this.gradientTransform?this.gradientTransform.concat():this.gradientTransform};return u.util.populateWithProperties(this,e,i),e},toSVG:function(i,l){var n=o(this.coords,!0),a,r,l=l||{},f,d,g=o(this.colorStops,!0),p=n.r1>n.r2,v=this.gradientTransform?this.gradientTransform.concat():u.iMatrix.concat(),x=-this.offsetX,w=-this.offsetY,F=!!l.additionalTransform,Y=this.gradientUnits==="pixels"?"userSpaceOnUse":"objectBoundingBox";if(g.sort(function(q,J){return q.offset-J.offset}),Y==="objectBoundingBox"?(x/=i.width,w/=i.height):(x+=i.width/2,w+=i.height/2),i.type==="path"&&this.gradientUnits!=="percentage"&&(x-=i.pathOffset.x,w-=i.pathOffset.y),v[4]-=x,v[5]-=w,d='id="SVGID_'+this.id+'" gradientUnits="'+Y+'"',d+=' gradientTransform="'+(F?l.additionalTransform+" ":"")+u.util.matrixToSVG(v)+'" ',this.type==="linear"?f=["<linearGradient ",d,' x1="',n.x1,'" y1="',n.y1,'" x2="',n.x2,'" y2="',n.y2,`">
8
+ `]:this.type==="radial"&&(f=["<radialGradient ",d,' cx="',p?n.x1:n.x2,'" cy="',p?n.y1:n.y2,'" r="',p?n.r1:n.r2,'" fx="',p?n.x2:n.x1,'" fy="',p?n.y2:n.y1,`">
9
+ `]),this.type==="radial"){if(p)for(g=g.concat(),g.reverse(),a=0,r=g.length;a<r;a++)g[a].offset=1-g[a].offset;var W=Math.min(n.r1,n.r2);if(W>0){var Z=Math.max(n.r1,n.r2),Q=W/Z;for(a=0,r=g.length;a<r;a++)g[a].offset+=Q*(1-g[a].offset)}}for(a=0,r=g.length;a<r;a++){var G=g[a];f.push("<stop ",'offset="',G.offset*100+"%",'" style="stop-color:',G.color,typeof G.opacity<"u"?";stop-opacity: "+G.opacity:";",`"/>
10
+ `)}return f.push(this.type==="linear"?`</linearGradient>
11
+ `:`</radialGradient>
12
+ `),f.join("")},toLive:function(i){var e,n=u.util.object.clone(this.coords),a,r;if(this.type){for(this.type==="linear"?e=i.createLinearGradient(n.x1,n.y1,n.x2,n.y2):this.type==="radial"&&(e=i.createRadialGradient(n.x1,n.y1,n.r1,n.x2,n.y2,n.r2)),a=0,r=this.colorStops.length;a<r;a++){var l=this.colorStops[a].color,f=this.colorStops[a].opacity,d=this.colorStops[a].offset;typeof f<"u"&&(l=new u.Color(l).setAlpha(f).toRgba()),e.addColorStop(d,l)}return e}}}),u.util.object.extend(u.Gradient,{fromElement:function(i,e,n,a){var r=parseFloat(n)/(/%$/.test(n)?100:1);r=r<0?0:r>1?1:r,isNaN(r)&&(r=1);var l=i.getElementsByTagName("stop"),f,d=i.getAttribute("gradientUnits")==="userSpaceOnUse"?"pixels":"percentage",g=i.getAttribute("gradientTransform")||"",p=[],v,x,w=0,F=0,Y;for(i.nodeName==="linearGradient"||i.nodeName==="LINEARGRADIENT"?(f="linear",v=s(i)):(f="radial",v=h(i)),x=l.length;x--;)p.push(c(l[x],r));Y=u.parseTransformAttribute(g),t(e,v,a,d),d==="pixels"&&(w=-e.left,F=-e.top);var W=new u.Gradient({id:i.getAttribute("id"),type:f,coords:v,colorStops:p,gradientUnits:d,gradientTransform:Y,offsetX:w,offsetY:F});return W}});function t(i,e,n,a){var r,l;Object.keys(e).forEach(function(f){r=e[f],r==="Infinity"?l=1:r==="-Infinity"?l=0:(l=parseFloat(e[f],10),typeof r=="string"&&/^(\d+\.\d+)%|(\d+)%$/.test(r)&&(l*=.01,a==="pixels"&&((f==="x1"||f==="x2"||f==="r2")&&(l*=n.viewBoxWidth||n.width),(f==="y1"||f==="y2")&&(l*=n.viewBoxHeight||n.height)))),e[f]=l})}})(),(function(){var c=u.util.toFixed;u.Pattern=u.util.createClass({repeat:"repeat",offsetX:0,offsetY:0,crossOrigin:"",patternTransform:null,initialize:function(s,h){if(s||(s={}),this.id=u.Object.__uid++,this.setOptions(s),!s.source||s.source&&typeof s.source!="string"){h&&h(this);return}else{var o=this;this.source=u.util.createImage(),u.util.loadImage(s.source,function(t,i){o.source=t,h&&h(o,i)},null,this.crossOrigin)}},toObject:function(s){var h=u.Object.NUM_FRACTION_DIGITS,o,t;return typeof this.source.src=="string"?o=this.source.src:typeof this.source=="object"&&this.source.toDataURL&&(o=this.source.toDataURL()),t={type:"pattern",source:o,repeat:this.repeat,crossOrigin:this.crossOrigin,offsetX:c(this.offsetX,h),offsetY:c(this.offsetY,h),patternTransform:this.patternTransform?this.patternTransform.concat():null},u.util.populateWithProperties(this,t,s),t},toSVG:function(s){var h=typeof this.source=="function"?this.source():this.source,o=h.width/s.width,t=h.height/s.height,i=this.offsetX/s.width,e=this.offsetY/s.height,n="";return(this.repeat==="repeat-x"||this.repeat==="no-repeat")&&(t=1,e&&(t+=Math.abs(e))),(this.repeat==="repeat-y"||this.repeat==="no-repeat")&&(o=1,i&&(o+=Math.abs(i))),h.src?n=h.src:h.toDataURL&&(n=h.toDataURL()),'<pattern id="SVGID_'+this.id+'" x="'+i+'" y="'+e+'" width="'+o+'" height="'+t+`">
13
+ <image x="0" y="0" width="`+h.width+'" height="'+h.height+'" xlink:href="'+n+`"></image>
14
+ </pattern>
15
+ `},setOptions:function(s){for(var h in s)this[h]=s[h]},toLive:function(s){var h=this.source;return!h||typeof h.src<"u"&&(!h.complete||h.naturalWidth===0||h.naturalHeight===0)?"":s.createPattern(h,this.repeat)}})})(),(function(c){var s=c.fabric||(c.fabric={}),h=s.util.toFixed;if(s.Shadow){s.warn("fabric.Shadow is already defined.");return}s.Shadow=s.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,nonScaling:!1,initialize:function(o){typeof o=="string"&&(o=this._parseShadow(o));for(var t in o)this[t]=o[t];this.id=s.Object.__uid++},_parseShadow:function(o){var t=o.trim(),i=s.Shadow.reOffsetsAndBlur.exec(t)||[],e=t.replace(s.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:e.trim(),offsetX:parseFloat(i[1],10)||0,offsetY:parseFloat(i[2],10)||0,blur:parseFloat(i[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(o){var t=40,i=40,e=s.Object.NUM_FRACTION_DIGITS,n=s.util.rotateVector({x:this.offsetX,y:this.offsetY},s.util.degreesToRadians(-o.angle)),a=20,r=new s.Color(this.color);return o.width&&o.height&&(t=h((Math.abs(n.x)+this.blur)/o.width,e)*100+a,i=h((Math.abs(n.y)+this.blur)/o.height,e)*100+a),o.flipX&&(n.x*=-1),o.flipY&&(n.y*=-1),'<filter id="SVGID_'+this.id+'" y="-'+i+'%" height="'+(100+2*i)+'%" x="-'+t+'%" width="'+(100+2*t)+`%" >
16
+ <feGaussianBlur in="SourceAlpha" stdDeviation="`+h(this.blur?this.blur/2:0,e)+`"></feGaussianBlur>
17
+ <feOffset dx="`+h(n.x,e)+'" dy="'+h(n.y,e)+`" result="oBlur" ></feOffset>
18
+ <feFlood flood-color="`+r.toRgb()+'" flood-opacity="'+r.getAlpha()+`"/>
19
+ <feComposite in2="oBlur" operator="in" />
20
+ <feMerge>
21
+ <feMergeNode></feMergeNode>
22
+ <feMergeNode in="SourceGraphic"></feMergeNode>
23
+ </feMerge>
24
+ </filter>
25
+ `},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY,affectStroke:this.affectStroke,nonScaling:this.nonScaling};var o={},t=s.Shadow.prototype;return["color","blur","offsetX","offsetY","affectStroke","nonScaling"].forEach(function(i){this[i]!==t[i]&&(o[i]=this[i])},this),o}}),s.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:\.\d*)?(?:px)?(?:\s?|$))?(-?\d+(?:\.\d*)?(?:px)?(?:\s?|$))?(\d+(?:\.\d*)?(?:px)?)?(?:\s?|$)(?:$|\s)/})(m),(function(){if(u.StaticCanvas){u.warn("fabric.StaticCanvas is already defined.");return}var c=u.util.object.extend,s=u.util.getElementOffset,h=u.util.removeFromArray,o=u.util.toFixed,t=u.util.transformPoint,i=u.util.invertTransform,e=u.util.getNodeCanvas,n=u.util.createCanvasElement,a=new Error("Could not initialize `canvas` element");u.StaticCanvas=u.util.createClass(u.CommonMethods,{initialize:function(r,l){l||(l={}),this.renderAndResetBound=this.renderAndReset.bind(this),this.requestRenderAllBound=this.requestRenderAll.bind(this),this._initStatic(r,l)},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!1,renderOnAddRemove:!0,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:u.iMatrix.concat(),backgroundVpt:!0,overlayVpt:!0,enableRetinaScaling:!0,vptCoords:{},skipOffscreen:!0,clipPath:void 0,_initStatic:function(r,l){var f=this.requestRenderAllBound;this._objects=[],this._createLowerCanvas(r),this._initOptions(l),this.interactive||this._initRetinaScaling(),l.overlayImage&&this.setOverlayImage(l.overlayImage,f),l.backgroundImage&&this.setBackgroundImage(l.backgroundImage,f),l.backgroundColor&&this.setBackgroundColor(l.backgroundColor,f),l.overlayColor&&this.setOverlayColor(l.overlayColor,f),this.calcOffset()},_isRetinaScaling:function(){return u.devicePixelRatio>1&&this.enableRetinaScaling},getRetinaScaling:function(){return this._isRetinaScaling()?Math.max(1,u.devicePixelRatio):1},_initRetinaScaling:function(){if(this._isRetinaScaling()){var r=u.devicePixelRatio;this.__initRetinaScaling(r,this.lowerCanvasEl,this.contextContainer),this.upperCanvasEl&&this.__initRetinaScaling(r,this.upperCanvasEl,this.contextTop)}},__initRetinaScaling:function(r,l,f){l.setAttribute("width",this.width*r),l.setAttribute("height",this.height*r),f.scale(r,r)},calcOffset:function(){return this._offset=s(this.lowerCanvasEl),this},setOverlayImage:function(r,l,f){return this.__setBgOverlayImage("overlayImage",r,l,f)},setBackgroundImage:function(r,l,f){return this.__setBgOverlayImage("backgroundImage",r,l,f)},setOverlayColor:function(r,l){return this.__setBgOverlayColor("overlayColor",r,l)},setBackgroundColor:function(r,l){return this.__setBgOverlayColor("backgroundColor",r,l)},__setBgOverlayImage:function(r,l,f,d){return typeof l=="string"?u.util.loadImage(l,function(g,p){if(g){var v=new u.Image(g,d);this[r]=v,v.canvas=this}f&&f(g,p)},this,d&&d.crossOrigin):(d&&l.setOptions(d),this[r]=l,l&&(l.canvas=this),f&&f(l,!1)),this},__setBgOverlayColor:function(r,l,f){return this[r]=l,this._initGradient(l,r),this._initPattern(l,r,f),this},_createCanvasElement:function(){var r=n();if(!r||(r.style||(r.style={}),typeof r.getContext>"u"))throw a;return r},_initOptions:function(r){var l=this.lowerCanvasEl;this._setOptions(r),this.width=this.width||parseInt(l.width,10)||0,this.height=this.height||parseInt(l.height,10)||0,this.lowerCanvasEl.style&&(l.width=this.width,l.height=this.height,l.style.width=this.width+"px",l.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice())},_createLowerCanvas:function(r){r&&r.getContext?this.lowerCanvasEl=r:this.lowerCanvasEl=u.util.getById(r)||this._createCanvasElement(),u.util.addClass(this.lowerCanvasEl,"lower-canvas"),this._originalCanvasStyle=this.lowerCanvasEl.style,this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(r,l){return this.setDimensions({width:r},l)},setHeight:function(r,l){return this.setDimensions({height:r},l)},setDimensions:function(r,l){var f;l=l||{};for(var d in r)f=r[d],l.cssOnly||(this._setBackstoreDimension(d,r[d]),f+="px",this.hasLostContext=!0),l.backstoreOnly||this._setCssDimension(d,f);return this._isCurrentlyDrawing&&this.freeDrawingBrush&&this.freeDrawingBrush._setBrushStyles(this.contextTop),this._initRetinaScaling(),this.calcOffset(),l.cssOnly||this.requestRenderAll(),this},_setBackstoreDimension:function(r,l){return this.lowerCanvasEl[r]=l,this.upperCanvasEl&&(this.upperCanvasEl[r]=l),this.cacheCanvasEl&&(this.cacheCanvasEl[r]=l),this[r]=l,this},_setCssDimension:function(r,l){return this.lowerCanvasEl.style[r]=l,this.upperCanvasEl&&(this.upperCanvasEl.style[r]=l),this.wrapperEl&&(this.wrapperEl.style[r]=l),this},getZoom:function(){return this.viewportTransform[0]},setViewportTransform:function(r){var l=this._activeObject,f=this.backgroundImage,d=this.overlayImage,g,p,v;for(this.viewportTransform=r,p=0,v=this._objects.length;p<v;p++)g=this._objects[p],g.group||g.setCoords(!0);return l&&l.setCoords(),f&&f.setCoords(!0),d&&d.setCoords(!0),this.calcViewportBoundaries(),this.renderOnAddRemove&&this.requestRenderAll(),this},zoomToPoint:function(r,l){var f=r,d=this.viewportTransform.slice(0);r=t(r,i(this.viewportTransform)),d[0]=l,d[3]=l;var g=t(r,d);return d[4]+=f.x-g.x,d[5]+=f.y-g.y,this.setViewportTransform(d)},setZoom:function(r){return this.zoomToPoint(new u.Point(0,0),r),this},absolutePan:function(r){var l=this.viewportTransform.slice(0);return l[4]=-r.x,l[5]=-r.y,this.setViewportTransform(l)},relativePan:function(r){return this.absolutePan(new u.Point(-r.x-this.viewportTransform[4],-r.y-this.viewportTransform[5]))},getElement:function(){return this.lowerCanvasEl},_onObjectAdded:function(r){this.stateful&&r.setupState(),r._set("canvas",this),r.setCoords(),this.fire("object:added",{target:r}),r.fire("added")},_onObjectRemoved:function(r){this.fire("object:removed",{target:r}),r.fire("removed"),delete r.canvas},clearContext:function(r){return r.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this.remove.apply(this,this.getObjects()),this.backgroundImage=null,this.overlayImage=null,this.backgroundColor="",this.overlayColor="",this._hasITextHandlers&&(this.off("mouse:up",this._mouseUpITextHandler),this._iTextInstances=null,this._hasITextHandlers=!1),this.clearContext(this.contextContainer),this.fire("canvas:cleared"),this.renderOnAddRemove&&this.requestRenderAll(),this},renderAll:function(){var r=this.contextContainer;return this.renderCanvas(r,this._objects),this},renderAndReset:function(){this.isRendering=0,this.renderAll()},requestRenderAll:function(){return this.isRendering||(this.isRendering=u.util.requestAnimFrame(this.renderAndResetBound)),this},calcViewportBoundaries:function(){var r={},l=this.width,f=this.height,d=i(this.viewportTransform);return r.tl=t({x:0,y:0},d),r.br=t({x:l,y:f},d),r.tr=new u.Point(r.br.x,r.tl.y),r.bl=new u.Point(r.tl.x,r.br.y),this.vptCoords=r,r},cancelRequestedRender:function(){this.isRendering&&(u.util.cancelAnimFrame(this.isRendering),this.isRendering=0)},renderCanvas:function(r,l){var f=this.viewportTransform,d=this.clipPath;this.cancelRequestedRender(),this.calcViewportBoundaries(),this.clearContext(r),u.util.setImageSmoothing(r,this.imageSmoothingEnabled),this.fire("before:render",{ctx:r}),this._renderBackground(r),r.save(),r.transform(f[0],f[1],f[2],f[3],f[4],f[5]),this._renderObjects(r,l),r.restore(),!this.controlsAboveOverlay&&this.interactive&&this.drawControls(r),d&&(d.canvas=this,d.shouldCache(),d._transformDone=!0,d.renderCache({forClipping:!0}),this.drawClipPathOnCanvas(r)),this._renderOverlay(r),this.controlsAboveOverlay&&this.interactive&&this.drawControls(r),this.fire("after:render",{ctx:r})},drawClipPathOnCanvas:function(r){var l=this.viewportTransform,f=this.clipPath;r.save(),r.transform(l[0],l[1],l[2],l[3],l[4],l[5]),r.globalCompositeOperation="destination-in",f.transform(r),r.scale(1/f.zoomX,1/f.zoomY),r.drawImage(f._cacheCanvas,-f.cacheTranslationX,-f.cacheTranslationY),r.restore()},_renderObjects:function(r,l){var f,d;for(f=0,d=l.length;f<d;++f)l[f]&&l[f].render(r)},_renderBackgroundOrOverlay:function(r,l){var f=this[l+"Color"],d=this[l+"Image"],g=this.viewportTransform,p=this[l+"Vpt"];if(!(!f&&!d)){if(f){r.save(),r.beginPath(),r.moveTo(0,0),r.lineTo(this.width,0),r.lineTo(this.width,this.height),r.lineTo(0,this.height),r.closePath(),r.fillStyle=f.toLive?f.toLive(r,this):f,p&&r.transform(g[0],g[1],g[2],g[3],g[4],g[5]),r.transform(1,0,0,1,f.offsetX||0,f.offsetY||0);var v=f.gradientTransform||f.patternTransform;v&&r.transform(v[0],v[1],v[2],v[3],v[4],v[5]),r.fill(),r.restore()}d&&(r.save(),p&&r.transform(g[0],g[1],g[2],g[3],g[4],g[5]),d.render(r),r.restore())}},_renderBackground:function(r){this._renderBackgroundOrOverlay(r,"background")},_renderOverlay:function(r){this._renderBackgroundOrOverlay(r,"overlay")},getCenter:function(){return{top:this.height/2,left:this.width/2}},getCenterPoint:function(){return new u.Point(this.width/2,this.height/2)},centerObjectH:function(r){return this._centerObject(r,new u.Point(this.getCenterPoint().x,r.getCenterPoint().y))},centerObjectV:function(r){return this._centerObject(r,new u.Point(r.getCenterPoint().x,this.getCenterPoint().y))},centerObject:function(r){var l=this.getCenterPoint();return this._centerObject(r,l)},viewportCenterObject:function(r){var l=this.getVpCenter();return this._centerObject(r,l)},viewportCenterObjectH:function(r){var l=this.getVpCenter();return this._centerObject(r,new u.Point(l.x,r.getCenterPoint().y)),this},viewportCenterObjectV:function(r){var l=this.getVpCenter();return this._centerObject(r,new u.Point(r.getCenterPoint().x,l.y))},getVpCenter:function(){var r=this.getCenterPoint(),l=i(this.viewportTransform);return t(r,l)},_centerObject:function(r,l){return r.setPositionByOrigin(l,"center","center"),r.setCoords(),this.renderOnAddRemove&&this.requestRenderAll(),this},toDatalessJSON:function(r){return this.toDatalessObject(r)},toObject:function(r){return this._toObjectMethod("toObject",r)},toDatalessObject:function(r){return this._toObjectMethod("toDatalessObject",r)},_toObjectMethod:function(r,l){var f=this.clipPath,d={version:u.version,objects:this._toObjects(r,l)};return f&&!f.excludeFromExport&&(d.clipPath=this._toObject(this.clipPath,r,l)),c(d,this.__serializeBgOverlay(r,l)),u.util.populateWithProperties(this,d,l),d},_toObjects:function(r,l){return this._objects.filter(function(f){return!f.excludeFromExport}).map(function(f){return this._toObject(f,r,l)},this)},_toObject:function(r,l,f){var d;this.includeDefaultValues||(d=r.includeDefaultValues,r.includeDefaultValues=!1);var g=r[l](f);return this.includeDefaultValues||(r.includeDefaultValues=d),g},__serializeBgOverlay:function(r,l){var f={},d=this.backgroundImage,g=this.overlayImage,p=this.backgroundColor,v=this.overlayColor;return p&&p.toObject?p.excludeFromExport||(f.background=p.toObject(l)):p&&(f.background=p),v&&v.toObject?v.excludeFromExport||(f.overlay=v.toObject(l)):v&&(f.overlay=v),d&&!d.excludeFromExport&&(f.backgroundImage=this._toObject(d,r,l)),g&&!g.excludeFromExport&&(f.overlayImage=this._toObject(g,r,l)),f},svgViewportTransformation:!0,toSVG:function(r,l){r||(r={}),r.reviver=l;var f=[];return this._setSVGPreamble(f,r),this._setSVGHeader(f,r),this.clipPath&&f.push('<g clip-path="url(#'+this.clipPath.clipPathId+`)" >
26
+ `),this._setSVGBgOverlayColor(f,"background"),this._setSVGBgOverlayImage(f,"backgroundImage",l),this._setSVGObjects(f,l),this.clipPath&&f.push(`</g>
27
+ `),this._setSVGBgOverlayColor(f,"overlay"),this._setSVGBgOverlayImage(f,"overlayImage",l),f.push("</svg>"),f.join("")},_setSVGPreamble:function(r,l){l.suppressPreamble||r.push('<?xml version="1.0" encoding="',l.encoding||"UTF-8",`" standalone="no" ?>
28
+ `,'<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" ',`"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
29
+ `)},_setSVGHeader:function(r,l){var f=l.width||this.width,d=l.height||this.height,g,p='viewBox="0 0 '+this.width+" "+this.height+'" ',v=u.Object.NUM_FRACTION_DIGITS;l.viewBox?p='viewBox="'+l.viewBox.x+" "+l.viewBox.y+" "+l.viewBox.width+" "+l.viewBox.height+'" ':this.svgViewportTransformation&&(g=this.viewportTransform,p='viewBox="'+o(-g[4]/g[0],v)+" "+o(-g[5]/g[3],v)+" "+o(this.width/g[0],v)+" "+o(this.height/g[3],v)+'" '),r.push("<svg ",'xmlns="http://www.w3.org/2000/svg" ','xmlns:xlink="http://www.w3.org/1999/xlink" ','version="1.1" ','width="',f,'" ','height="',d,'" ',p,`xml:space="preserve">
30
+ `,"<desc>Created with Fabric.js ",u.version,`</desc>
31
+ `,`<defs>
32
+ `,this.createSVGFontFacesMarkup(),this.createSVGRefElementsMarkup(),this.createSVGClipPathMarkup(l),`</defs>
33
+ `)},createSVGClipPathMarkup:function(r){var l=this.clipPath;return l?(l.clipPathId="CLIPPATH_"+u.Object.__uid++,'<clipPath id="'+l.clipPathId+`" >
34
+ `+this.clipPath.toClipPathSVG(r.reviver)+`</clipPath>
35
+ `):""},createSVGRefElementsMarkup:function(){var r=this,l=["background","overlay"].map(function(f){var d=r[f+"Color"];if(d&&d.toLive){var g=r[f+"Vpt"],p=r.viewportTransform,v={width:r.width/(g?p[0]:1),height:r.height/(g?p[3]:1)};return d.toSVG(v,{additionalTransform:g?u.util.matrixToSVG(p):""})}});return l.join("")},createSVGFontFacesMarkup:function(){var r="",l={},f,d,g,p,v,x,w,F,Y,W=u.fontPaths,Z=[];for(this._objects.forEach(function G(q){Z.push(q),q._objects&&q._objects.forEach(G)}),F=0,Y=Z.length;F<Y;F++)if(f=Z[F],d=f.fontFamily,!(f.type.indexOf("text")===-1||l[d]||!W[d])&&(l[d]=!0,!!f.styles)){g=f.styles;for(v in g){p=g[v];for(w in p)x=p[w],d=x.fontFamily,!l[d]&&W[d]&&(l[d]=!0)}}for(var Q in l)r+=[` @font-face {
36
+ `," font-family: '",Q,`';
37
+ `," src: url('",W[Q],`');
38
+ `,` }
39
+ `].join("");return r&&(r=[' <style type="text/css">',`<![CDATA[
40
+ `,r,"]]>",`</style>
41
+ `].join("")),r},_setSVGObjects:function(r,l){var f,d,g,p=this._objects;for(d=0,g=p.length;d<g;d++)f=p[d],!f.excludeFromExport&&this._setSVGObject(r,f,l)},_setSVGObject:function(r,l,f){r.push(l.toSVG(f))},_setSVGBgOverlayImage:function(r,l,f){this[l]&&!this[l].excludeFromExport&&this[l].toSVG&&r.push(this[l].toSVG(f))},_setSVGBgOverlayColor:function(r,l){var f=this[l+"Color"],d=this.viewportTransform,g=this.width,p=this.height;if(f)if(f.toLive){var v=f.repeat,x=u.util.invertTransform(d),w=this[l+"Vpt"],F=w?u.util.matrixToSVG(x):"";r.push('<rect transform="'+F+" translate(",g/2,",",p/2,')"',' x="',f.offsetX-g/2,'" y="',f.offsetY-p/2,'" ','width="',v==="repeat-y"||v==="no-repeat"?f.source.width:g,'" height="',v==="repeat-x"||v==="no-repeat"?f.source.height:p,'" fill="url(#SVGID_'+f.id+')"',`></rect>
42
+ `)}else r.push('<rect x="0" y="0" width="100%" height="100%" ','fill="',f,'"',`></rect>
43
+ `)},sendToBack:function(r){if(!r)return this;var l=this._activeObject,f,d,g;if(r===l&&r.type==="activeSelection")for(g=l._objects,f=g.length;f--;)d=g[f],h(this._objects,d),this._objects.unshift(d);else h(this._objects,r),this._objects.unshift(r);return this.renderOnAddRemove&&this.requestRenderAll(),this},bringToFront:function(r){if(!r)return this;var l=this._activeObject,f,d,g;if(r===l&&r.type==="activeSelection")for(g=l._objects,f=0;f<g.length;f++)d=g[f],h(this._objects,d),this._objects.push(d);else h(this._objects,r),this._objects.push(r);return this.renderOnAddRemove&&this.requestRenderAll(),this},sendBackwards:function(r,l){if(!r)return this;var f=this._activeObject,d,g,p,v,x,w=0;if(r===f&&r.type==="activeSelection")for(x=f._objects,d=0;d<x.length;d++)g=x[d],p=this._objects.indexOf(g),p>0+w&&(v=p-1,h(this._objects,g),this._objects.splice(v,0,g)),w++;else p=this._objects.indexOf(r),p!==0&&(v=this._findNewLowerIndex(r,p,l),h(this._objects,r),this._objects.splice(v,0,r));return this.renderOnAddRemove&&this.requestRenderAll(),this},_findNewLowerIndex:function(r,l,f){var d,g;if(f)for(d=l,g=l-1;g>=0;--g){var p=r.intersectsWithObject(this._objects[g])||r.isContainedWithinObject(this._objects[g])||this._objects[g].isContainedWithinObject(r);if(p){d=g;break}}else d=l-1;return d},bringForward:function(r,l){if(!r)return this;var f=this._activeObject,d,g,p,v,x,w=0;if(r===f&&r.type==="activeSelection")for(x=f._objects,d=x.length;d--;)g=x[d],p=this._objects.indexOf(g),p<this._objects.length-1-w&&(v=p+1,h(this._objects,g),this._objects.splice(v,0,g)),w++;else p=this._objects.indexOf(r),p!==this._objects.length-1&&(v=this._findNewUpperIndex(r,p,l),h(this._objects,r),this._objects.splice(v,0,r));return this.renderOnAddRemove&&this.requestRenderAll(),this},_findNewUpperIndex:function(r,l,f){var d,g,p;if(f)for(d=l,g=l+1,p=this._objects.length;g<p;++g){var v=r.intersectsWithObject(this._objects[g])||r.isContainedWithinObject(this._objects[g])||this._objects[g].isContainedWithinObject(r);if(v){d=g;break}}else d=l+1;return d},moveTo:function(r,l){return h(this._objects,r),this._objects.splice(l,0,r),this.renderOnAddRemove&&this.requestRenderAll()},dispose:function(){return this.isRendering&&(u.util.cancelAnimFrame(this.isRendering),this.isRendering=0),this.forEachObject(function(r){r.dispose&&r.dispose()}),this._objects=[],this.backgroundImage&&this.backgroundImage.dispose&&this.backgroundImage.dispose(),this.backgroundImage=null,this.overlayImage&&this.overlayImage.dispose&&this.overlayImage.dispose(),this.overlayImage=null,this._iTextInstances=null,this.contextContainer=null,this.lowerCanvasEl.classList.remove("lower-canvas"),u.util.setStyle(this.lowerCanvasEl,this._originalCanvasStyle),delete this._originalCanvasStyle,this.lowerCanvasEl.setAttribute("width",this.width),this.lowerCanvasEl.setAttribute("height",this.height),u.util.cleanUpJsdomNode(this.lowerCanvasEl),this.lowerCanvasEl=void 0,this},toString:function(){return"#<fabric.Canvas ("+this.complexity()+"): { objects: "+this._objects.length+" }>"}}),c(u.StaticCanvas.prototype,u.Observable),c(u.StaticCanvas.prototype,u.Collection),c(u.StaticCanvas.prototype,u.DataURLExporter),c(u.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(r){var l=n();if(!l||!l.getContext)return null;var f=l.getContext("2d");if(!f)return null;switch(r){case"setLineDash":return typeof f.setLineDash<"u";default:return null}}}),u.StaticCanvas.prototype.toJSON=u.StaticCanvas.prototype.toObject,u.isLikelyNode&&(u.StaticCanvas.prototype.createPNGStream=function(){var r=e(this.lowerCanvasEl);return r&&r.createPNGStream()},u.StaticCanvas.prototype.createJPEGStream=function(r){var l=e(this.lowerCanvasEl);return l&&l.createJPEGStream(r)})})(),u.BaseBrush=u.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",strokeMiterLimit:10,strokeDashArray:null,limitedToCanvasSize:!1,_setBrushStyles:function(c){c.strokeStyle=this.color,c.lineWidth=this.width,c.lineCap=this.strokeLineCap,c.miterLimit=this.strokeMiterLimit,c.lineJoin=this.strokeLineJoin,c.setLineDash(this.strokeDashArray||[])},_saveAndTransform:function(c){var s=this.canvas.viewportTransform;c.save(),c.transform(s[0],s[1],s[2],s[3],s[4],s[5])},_setShadow:function(){if(this.shadow){var c=this.canvas,s=this.shadow,h=c.contextTop,o=c.getZoom();c&&c._isRetinaScaling()&&(o*=u.devicePixelRatio),h.shadowColor=s.color,h.shadowBlur=s.blur*o,h.shadowOffsetX=s.offsetX*o,h.shadowOffsetY=s.offsetY*o}},needsFullRender:function(){var c=new u.Color(this.color);return c.getAlpha()<1||!!this.shadow},_resetShadow:function(){var c=this.canvas.contextTop;c.shadowColor="",c.shadowBlur=c.shadowOffsetX=c.shadowOffsetY=0},_isOutSideCanvas:function(c){return c.x<0||c.x>this.canvas.getWidth()||c.y<0||c.y>this.canvas.getHeight()}}),(function(){u.PencilBrush=u.util.createClass(u.BaseBrush,{decimate:.4,drawStraightLine:!1,straightLineKey:"shiftKey",initialize:function(c){this.canvas=c,this._points=[]},needsFullRender:function(){return this.callSuper("needsFullRender")||this._hasStraightLine},_drawSegment:function(c,s,h){var o=s.midPointFrom(h);return c.quadraticCurveTo(s.x,s.y,o.x,o.y),o},onMouseDown:function(c,s){this.canvas._isMainEvent(s.e)&&(this.drawStraightLine=s.e[this.straightLineKey],this._prepareForDrawing(c),this._captureDrawingPath(c),this._render())},onMouseMove:function(c,s){if(this.canvas._isMainEvent(s.e)&&(this.drawStraightLine=s.e[this.straightLineKey],!(this.limitedToCanvasSize===!0&&this._isOutSideCanvas(c))&&this._captureDrawingPath(c)&&this._points.length>1))if(this.needsFullRender())this.canvas.clearContext(this.canvas.contextTop),this._render();else{var h=this._points,o=h.length,t=this.canvas.contextTop;this._saveAndTransform(t),this.oldEnd&&(t.beginPath(),t.moveTo(this.oldEnd.x,this.oldEnd.y)),this.oldEnd=this._drawSegment(t,h[o-2],h[o-1],!0),t.stroke(),t.restore()}},onMouseUp:function(c){return this.canvas._isMainEvent(c.e)?(this.drawStraightLine=!1,this.oldEnd=void 0,this._finalizeAndAddPath(),!1):!0},_prepareForDrawing:function(c){var s=new u.Point(c.x,c.y);this._reset(),this._addPoint(s),this.canvas.contextTop.moveTo(s.x,s.y)},_addPoint:function(c){return this._points.length>1&&c.eq(this._points[this._points.length-1])?!1:(this.drawStraightLine&&this._points.length>1&&(this._hasStraightLine=!0,this._points.pop()),this._points.push(c),!0)},_reset:function(){this._points=[],this._setBrushStyles(this.canvas.contextTop),this._setShadow(),this._hasStraightLine=!1},_captureDrawingPath:function(c){var s=new u.Point(c.x,c.y);return this._addPoint(s)},_render:function(c){var s,h,o=this._points[0],t=this._points[1];if(c=c||this.canvas.contextTop,this._saveAndTransform(c),c.beginPath(),this._points.length===2&&o.x===t.x&&o.y===t.y){var i=this.width/1e3;o=new u.Point(o.x,o.y),t=new u.Point(t.x,t.y),o.x-=i,t.x+=i}for(c.moveTo(o.x,o.y),s=1,h=this._points.length;s<h;s++)this._drawSegment(c,o,t),o=this._points[s],t=this._points[s+1];c.lineTo(o.x,o.y),c.stroke(),c.restore()},convertPointsToSVGPath:function(c){var s=this.width/1e3;return u.util.getSmoothPathFromPoints(c,s)},_isEmptySVGPath:function(c){var s=u.util.joinPath(c);return s==="M 0 0 Q 0 0 0 0 L 0 0"},createPath:function(c){var s=new u.Path(c,{fill:null,stroke:this.color,strokeWidth:this.width,strokeLineCap:this.strokeLineCap,strokeMiterLimit:this.strokeMiterLimit,strokeLineJoin:this.strokeLineJoin,strokeDashArray:this.strokeDashArray});return this.shadow&&(this.shadow.affectStroke=!0,s.shadow=new u.Shadow(this.shadow)),s},decimatePoints:function(c,s){if(c.length<=2)return c;var h=this.canvas.getZoom(),o=Math.pow(s/h,2),t,i=c.length-1,e=c[0],n=[e],a;for(t=1;t<i-1;t++)a=Math.pow(e.x-c[t].x,2)+Math.pow(e.y-c[t].y,2),a>=o&&(e=c[t],n.push(e));return n.push(c[i]),n},_finalizeAndAddPath:function(){var c=this.canvas.contextTop;c.closePath(),this.decimate&&(this._points=this.decimatePoints(this._points,this.decimate));var s=this.convertPointsToSVGPath(this._points);if(this._isEmptySVGPath(s)){this.canvas.requestRenderAll();return}var h=this.createPath(s);this.canvas.clearContext(this.canvas.contextTop),this.canvas.fire("before:path:created",{path:h}),this.canvas.add(h),this.canvas.requestRenderAll(),h.setCoords(),this._resetShadow(),this.canvas.fire("path:created",{path:h})}})})(),u.CircleBrush=u.util.createClass(u.BaseBrush,{width:10,initialize:function(c){this.canvas=c,this.points=[]},drawDot:function(c){var s=this.addPoint(c),h=this.canvas.contextTop;this._saveAndTransform(h),this.dot(h,s),h.restore()},dot:function(c,s){c.fillStyle=s.fill,c.beginPath(),c.arc(s.x,s.y,s.radius,0,Math.PI*2,!1),c.closePath(),c.fill()},onMouseDown:function(c){this.points.length=0,this.canvas.clearContext(this.canvas.contextTop),this._setShadow(),this.drawDot(c)},_render:function(){var c=this.canvas.contextTop,s,h,o=this.points;for(this._saveAndTransform(c),s=0,h=o.length;s<h;s++)this.dot(c,o[s]);c.restore()},onMouseMove:function(c){this.limitedToCanvasSize===!0&&this._isOutSideCanvas(c)||(this.needsFullRender()?(this.canvas.clearContext(this.canvas.contextTop),this.addPoint(c),this._render()):this.drawDot(c))},onMouseUp:function(){var c=this.canvas.renderOnAddRemove,s,h;this.canvas.renderOnAddRemove=!1;var o=[];for(s=0,h=this.points.length;s<h;s++){var t=this.points[s],i=new u.Circle({radius:t.radius,left:t.x,top:t.y,originX:"center",originY:"center",fill:t.fill});this.shadow&&(i.shadow=new u.Shadow(this.shadow)),o.push(i)}var e=new u.Group(o);e.canvas=this.canvas,this.canvas.fire("before:path:created",{path:e}),this.canvas.add(e),this.canvas.fire("path:created",{path:e}),this.canvas.clearContext(this.canvas.contextTop),this._resetShadow(),this.canvas.renderOnAddRemove=c,this.canvas.requestRenderAll()},addPoint:function(c){var s=new u.Point(c.x,c.y),h=u.util.getRandomInt(Math.max(0,this.width-20),this.width+20)/2,o=new u.Color(this.color).setAlpha(u.util.getRandomInt(0,100)/100).toRgba();return s.radius=h,s.fill=o,this.points.push(s),s}}),u.SprayBrush=u.util.createClass(u.BaseBrush,{width:10,density:20,dotWidth:1,dotWidthVariance:1,randomOpacity:!1,optimizeOverlapping:!0,initialize:function(c){this.canvas=c,this.sprayChunks=[]},onMouseDown:function(c){this.sprayChunks.length=0,this.canvas.clearContext(this.canvas.contextTop),this._setShadow(),this.addSprayChunk(c),this.render(this.sprayChunkPoints)},onMouseMove:function(c){this.limitedToCanvasSize===!0&&this._isOutSideCanvas(c)||(this.addSprayChunk(c),this.render(this.sprayChunkPoints))},onMouseUp:function(){var c=this.canvas.renderOnAddRemove;this.canvas.renderOnAddRemove=!1;for(var s=[],h=0,o=this.sprayChunks.length;h<o;h++)for(var t=this.sprayChunks[h],i=0,e=t.length;i<e;i++){var n=new u.Rect({width:t[i].width,height:t[i].width,left:t[i].x+1,top:t[i].y+1,originX:"center",originY:"center",fill:this.color});s.push(n)}this.optimizeOverlapping&&(s=this._getOptimizedRects(s));var a=new u.Group(s);this.shadow&&a.set("shadow",new u.Shadow(this.shadow)),this.canvas.fire("before:path:created",{path:a}),this.canvas.add(a),this.canvas.fire("path:created",{path:a}),this.canvas.clearContext(this.canvas.contextTop),this._resetShadow(),this.canvas.renderOnAddRemove=c,this.canvas.requestRenderAll()},_getOptimizedRects:function(c){var s={},h,o,t;for(o=0,t=c.length;o<t;o++)h=c[o].left+""+c[o].top,s[h]||(s[h]=c[o]);var i=[];for(h in s)i.push(s[h]);return i},render:function(c){var s=this.canvas.contextTop,h,o;for(s.fillStyle=this.color,this._saveAndTransform(s),h=0,o=c.length;h<o;h++){var t=c[h];typeof t.opacity<"u"&&(s.globalAlpha=t.opacity),s.fillRect(t.x,t.y,t.width,t.width)}s.restore()},_render:function(){var c=this.canvas.contextTop,s,h;for(c.fillStyle=this.color,this._saveAndTransform(c),s=0,h=this.sprayChunks.length;s<h;s++)this.render(this.sprayChunks[s]);c.restore()},addSprayChunk:function(c){this.sprayChunkPoints=[];var s,h,o,t=this.width/2,i;for(i=0;i<this.density;i++){s=u.util.getRandomInt(c.x-t,c.x+t),h=u.util.getRandomInt(c.y-t,c.y+t),this.dotWidthVariance?o=u.util.getRandomInt(Math.max(1,this.dotWidth-this.dotWidthVariance),this.dotWidth+this.dotWidthVariance):o=this.dotWidth;var e=new u.Point(s,h);e.width=o,this.randomOpacity&&(e.opacity=u.util.getRandomInt(0,100)/100),this.sprayChunkPoints.push(e)}this.sprayChunks.push(this.sprayChunkPoints)}}),u.PatternBrush=u.util.createClass(u.PencilBrush,{getPatternSrc:function(){var c=20,s=5,h=u.util.createCanvasElement(),o=h.getContext("2d");return h.width=h.height=c+s,o.fillStyle=this.color,o.beginPath(),o.arc(c/2,c/2,c/2,0,Math.PI*2,!1),o.closePath(),o.fill(),h},getPatternSrcFunction:function(){return String(this.getPatternSrc).replace("this.color",'"'+this.color+'"')},getPattern:function(c){return c.createPattern(this.source||this.getPatternSrc(),"repeat")},_setBrushStyles:function(c){this.callSuper("_setBrushStyles",c),c.strokeStyle=this.getPattern(c)},createPath:function(c){var s=this.callSuper("createPath",c),h=s._getLeftTopCoords().scalarAdd(s.strokeWidth/2);return s.stroke=new u.Pattern({source:this.source||this.getPatternSrcFunction(),offsetX:-h.x,offsetY:-h.y}),s}}),(function(){var c=u.util.getPointer,s=u.util.degreesToRadians,h=u.util.isTouchEvent;u.Canvas=u.util.createClass(u.StaticCanvas,{initialize:function(t,i){i||(i={}),this.renderAndResetBound=this.renderAndReset.bind(this),this.requestRenderAllBound=this.requestRenderAll.bind(this),this._initStatic(t,i),this._initInteractive(),this._createCacheCanvas()},uniformScaling:!0,uniScaleKey:"shiftKey",centeredScaling:!1,centeredRotation:!1,centeredKey:"altKey",altActionKey:"shiftKey",interactive:!0,selection:!0,selectionKey:"shiftKey",altSelectionKey:null,selectionColor:"rgba(100, 100, 255, 0.3)",selectionDashArray:[],selectionBorderColor:"rgba(255, 255, 255, 0.3)",selectionLineWidth:1,selectionFullyContained:!1,hoverCursor:"move",moveCursor:"move",defaultCursor:"default",freeDrawingCursor:"crosshair",notAllowedCursor:"not-allowed",containerClass:"canvas-container",perPixelTargetFind:!1,targetFindTolerance:0,skipTargetFind:!1,isDrawingMode:!1,preserveObjectStacking:!1,snapAngle:0,snapThreshold:null,stopContextMenu:!1,fireRightClick:!1,fireMiddleClick:!1,targets:[],enablePointerEvents:!1,_hoveredTarget:null,_hoveredTargets:[],_initInteractive:function(){this._currentTransform=null,this._groupSelector=null,this._initWrapperElement(),this._createUpperCanvas(),this._initEventListeners(),this._initRetinaScaling(),this.freeDrawingBrush=u.PencilBrush&&new u.PencilBrush(this),this.calcOffset()},_chooseObjectsToRender:function(){var t=this.getActiveObjects(),i,e,n;if(t.length>0&&!this.preserveObjectStacking){e=[],n=[];for(var a=0,r=this._objects.length;a<r;a++)i=this._objects[a],t.indexOf(i)===-1?e.push(i):n.push(i);t.length>1&&(this._activeObject._objects=n),e.push.apply(e,n)}else e=this._objects;return e},renderAll:function(){this.contextTopDirty&&!this._groupSelector&&!this.isDrawingMode&&(this.clearContext(this.contextTop),this.contextTopDirty=!1),this.hasLostContext&&(this.renderTopLayer(this.contextTop),this.hasLostContext=!1);var t=this.contextContainer;return this.renderCanvas(t,this._chooseObjectsToRender()),this},renderTopLayer:function(t){t.save(),this.isDrawingMode&&this._isCurrentlyDrawing&&(this.freeDrawingBrush&&this.freeDrawingBrush._render(),this.contextTopDirty=!0),this.selection&&this._groupSelector&&(this._drawSelection(t),this.contextTopDirty=!0),t.restore()},renderTop:function(){var t=this.contextTop;return this.clearContext(t),this.renderTopLayer(t),this.fire("after:render"),this},_normalizePointer:function(t,i){var e=t.calcTransformMatrix(),n=u.util.invertTransform(e),a=this.restorePointerVpt(i);return u.util.transformPoint(a,n)},isTargetTransparent:function(t,i,e){if(t.shouldCache()&&t._cacheCanvas&&t!==this._activeObject){var n=this._normalizePointer(t,{x:i,y:e}),a=Math.max(t.cacheTranslationX+n.x*t.zoomX,0),r=Math.max(t.cacheTranslationY+n.y*t.zoomY,0),g=u.util.isTransparent(t._cacheContext,Math.round(a),Math.round(r),this.targetFindTolerance);return g}var l=this.contextCache,f=t.selectionBackgroundColor,d=this.viewportTransform;t.selectionBackgroundColor="",this.clearContext(l),l.save(),l.transform(d[0],d[1],d[2],d[3],d[4],d[5]),t.render(l),l.restore(),t.selectionBackgroundColor=f;var g=u.util.isTransparent(l,i,e,this.targetFindTolerance);return g},_isSelectionKeyPressed:function(t){var i=!1;return Array.isArray(this.selectionKey)?i=!!this.selectionKey.find(function(e){return t[e]===!0}):i=t[this.selectionKey],i},_shouldClearSelection:function(t,i){var e=this.getActiveObjects(),n=this._activeObject;return!i||i&&n&&e.length>1&&e.indexOf(i)===-1&&n!==i&&!this._isSelectionKeyPressed(t)||i&&!i.evented||i&&!i.selectable&&n&&n!==i},_shouldCenterTransform:function(t,i,e){if(t){var n;return i==="scale"||i==="scaleX"||i==="scaleY"||i==="resizing"?n=this.centeredScaling||t.centeredScaling:i==="rotate"&&(n=this.centeredRotation||t.centeredRotation),n?!e:e}},_getOriginFromCorner:function(t,i){var e={x:t.originX,y:t.originY};return i==="ml"||i==="tl"||i==="bl"?e.x="right":(i==="mr"||i==="tr"||i==="br")&&(e.x="left"),i==="tl"||i==="mt"||i==="tr"?e.y="bottom":(i==="bl"||i==="mb"||i==="br")&&(e.y="top"),e},_getActionFromCorner:function(t,i,e,n){if(!i||!t)return"drag";var a=n.controls[i];return a.getActionName(e,a,n)},_setupCurrentTransform:function(t,i,e){if(i){var n=this.getPointer(t),a=i.__corner,r=i.controls[a],l=e&&a?r.getActionHandler(t,i,r):u.controlsUtils.dragHandler,f=this._getActionFromCorner(e,a,t,i),d=this._getOriginFromCorner(i,a),g=t[this.centeredKey],p={target:i,action:f,actionHandler:l,corner:a,scaleX:i.scaleX,scaleY:i.scaleY,skewX:i.skewX,skewY:i.skewY,offsetX:n.x-i.left,offsetY:n.y-i.top,originX:d.x,originY:d.y,ex:n.x,ey:n.y,lastX:n.x,lastY:n.y,theta:s(i.angle),width:i.width*i.scaleX,shiftKey:t.shiftKey,altKey:g,original:u.util.saveObjectTransform(i)};this._shouldCenterTransform(i,f,g)&&(p.originX="center",p.originY="center"),p.original.originX=d.x,p.original.originY=d.y,this._currentTransform=p,this._beforeTransform(t)}},setCursor:function(t){this.upperCanvasEl.style.cursor=t},_drawSelection:function(t){var i=this._groupSelector,e=new u.Point(i.ex,i.ey),n=u.util.transformPoint(e,this.viewportTransform),a=new u.Point(i.ex+i.left,i.ey+i.top),r=u.util.transformPoint(a,this.viewportTransform),l=Math.min(n.x,r.x),f=Math.min(n.y,r.y),d=Math.max(n.x,r.x),g=Math.max(n.y,r.y),p=this.selectionLineWidth/2;this.selectionColor&&(t.fillStyle=this.selectionColor,t.fillRect(l,f,d-l,g-f)),!(!this.selectionLineWidth||!this.selectionBorderColor)&&(t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,l+=p,f+=p,d-=p,g-=p,u.Object.prototype._setLineDash.call(this,t,this.selectionDashArray),t.strokeRect(l,f,d-l,g-f))},findTarget:function(t,i){if(!this.skipTargetFind){var e=!0,n=this.getPointer(t,e),a=this._activeObject,r=this.getActiveObjects(),l,f,d=h(t),g=r.length>1&&!i||r.length===1;if(this.targets=[],g&&a._findTargetCorner(n,d)||r.length>1&&!i&&a===this._searchPossibleTargets([a],n))return a;if(r.length===1&&a===this._searchPossibleTargets([a],n))if(this.preserveObjectStacking)l=a,f=this.targets,this.targets=[];else return a;var p=this._searchPossibleTargets(this._objects,n);return t[this.altSelectionKey]&&p&&l&&p!==l&&(p=l,this.targets=f),p}},_checkTarget:function(t,i,e){if(i&&i.visible&&i.evented&&i.containsPoint(t))if((this.perPixelTargetFind||i.perPixelTargetFind)&&!i.isEditing){var n=this.isTargetTransparent(i,e.x,e.y);if(!n)return!0}else return!0},_searchPossibleTargets:function(t,i){for(var e,n=t.length,a;n--;){var r=t[n],l=r.group?this._normalizePointer(r.group,i):i;if(this._checkTarget(l,r,i)){e=t[n],e.subTargetCheck&&e instanceof u.Group&&(a=this._searchPossibleTargets(e._objects,i),a&&this.targets.push(a));break}}return e},restorePointerVpt:function(t){return u.util.transformPoint(t,u.util.invertTransform(this.viewportTransform))},getPointer:function(t,i){if(this._absolutePointer&&!i)return this._absolutePointer;if(this._pointer&&i)return this._pointer;var e=c(t),n=this.upperCanvasEl,a=n.getBoundingClientRect(),r=a.width||0,l=a.height||0,f;(!r||!l)&&("top"in a&&"bottom"in a&&(l=Math.abs(a.top-a.bottom)),"right"in a&&"left"in a&&(r=Math.abs(a.right-a.left))),this.calcOffset(),e.x=e.x-this._offset.left,e.y=e.y-this._offset.top,i||(e=this.restorePointerVpt(e));var d=this.getRetinaScaling();return d!==1&&(e.x/=d,e.y/=d),r===0||l===0?f={width:1,height:1}:f={width:n.width/r,height:n.height/l},{x:e.x*f.width,y:e.y*f.height}},_createUpperCanvas:function(){var t=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,""),i=this.lowerCanvasEl,e=this.upperCanvasEl;e?e.className="":(e=this._createCanvasElement(),this.upperCanvasEl=e),u.util.addClass(e,"upper-canvas "+t),this.wrapperEl.appendChild(e),this._copyCanvasStyle(i,e),this._applyCanvasStyle(e),this.contextTop=e.getContext("2d")},getTopContext:function(){return this.contextTop},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=u.util.wrapElement(this.lowerCanvasEl,"div",{class:this.containerClass}),u.util.setStyle(this.wrapperEl,{width:this.width+"px",height:this.height+"px",position:"relative"}),u.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(t){var i=this.width||t.width,e=this.height||t.height;u.util.setStyle(t,{position:"absolute",width:i+"px",height:e+"px",left:0,top:0,"touch-action":this.allowTouchScrolling?"manipulation":"none","-ms-touch-action":this.allowTouchScrolling?"manipulation":"none"}),t.width=i,t.height=e,u.util.makeElementUnselectable(t)},_copyCanvasStyle:function(t,i){i.style.cssText=t.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},getActiveObject:function(){return this._activeObject},getActiveObjects:function(){var t=this._activeObject;return t?t.type==="activeSelection"&&t._objects?t._objects.slice(0):[t]:[]},_onObjectRemoved:function(t){t===this._activeObject&&(this.fire("before:selection:cleared",{target:t}),this._discardActiveObject(),this.fire("selection:cleared",{target:t}),t.fire("deselected")),t===this._hoveredTarget&&(this._hoveredTarget=null,this._hoveredTargets=[]),this.callSuper("_onObjectRemoved",t)},_fireSelectionEvents:function(t,i){var e=!1,n=this.getActiveObjects(),a=[],r=[];t.forEach(function(l){n.indexOf(l)===-1&&(e=!0,l.fire("deselected",{e:i,target:l}),r.push(l))}),n.forEach(function(l){t.indexOf(l)===-1&&(e=!0,l.fire("selected",{e:i,target:l}),a.push(l))}),t.length>0&&n.length>0?e&&this.fire("selection:updated",{e:i,selected:a,deselected:r}):n.length>0?this.fire("selection:created",{e:i,selected:a}):t.length>0&&this.fire("selection:cleared",{e:i,deselected:r})},setActiveObject:function(t,i){var e=this.getActiveObjects();return this._setActiveObject(t,i),this._fireSelectionEvents(e,i),this},_setActiveObject:function(t,i){return this._activeObject===t||!this._discardActiveObject(i,t)||t.onSelect({e:i})?!1:(this._activeObject=t,!0)},_discardActiveObject:function(t,i){var e=this._activeObject;if(e){if(e.onDeselect({e:t,object:i}))return!1;this._activeObject=null}return!0},discardActiveObject:function(t){var i=this.getActiveObjects(),e=this.getActiveObject();return i.length&&this.fire("before:selection:cleared",{target:e,e:t}),this._discardActiveObject(t),this._fireSelectionEvents(i,t),this},dispose:function(){var t=this.wrapperEl;return this.removeListeners(),t.removeChild(this.upperCanvasEl),t.removeChild(this.lowerCanvasEl),this.contextCache=null,this.contextTop=null,["upperCanvasEl","cacheCanvasEl"].forEach((function(i){u.util.cleanUpJsdomNode(this[i]),this[i]=void 0}).bind(this)),t.parentNode&&t.parentNode.replaceChild(this.lowerCanvasEl,this.wrapperEl),delete this.wrapperEl,u.StaticCanvas.prototype.dispose.call(this),this},clear:function(){return this.discardActiveObject(),this.clearContext(this.contextTop),this.callSuper("clear")},drawControls:function(t){var i=this._activeObject;i&&i._renderControls(t)},_toObject:function(t,i,e){var n=this._realizeGroupTransformOnObject(t),a=this.callSuper("_toObject",t,i,e);return this._unwindGroupTransformOnObject(t,n),a},_realizeGroupTransformOnObject:function(t){if(t.group&&t.group.type==="activeSelection"&&this._activeObject===t.group){var i=["angle","flipX","flipY","left","scaleX","scaleY","skewX","skewY","top"],e={};return i.forEach(function(n){e[n]=t[n]}),u.util.addTransformToObject(t,this._activeObject.calcOwnMatrix()),e}else return null},_unwindGroupTransformOnObject:function(t,i){i&&t.set(i)},_setSVGObject:function(t,i,e){var n=this._realizeGroupTransformOnObject(i);this.callSuper("_setSVGObject",t,i,e),this._unwindGroupTransformOnObject(i,n)},setViewportTransform:function(t){this.renderOnAddRemove&&this._activeObject&&this._activeObject.isEditing&&this._activeObject.clearContextTop(),u.StaticCanvas.prototype.setViewportTransform.call(this,t)}});for(var o in u.StaticCanvas)o!=="prototype"&&(u.Canvas[o]=u.StaticCanvas[o])})(),(function(){var c=u.util.addListener,s=u.util.removeListener,h=3,o=2,t=1,i={passive:!1};function e(n,a){return n.button&&n.button===a-1}u.util.object.extend(u.Canvas.prototype,{mainTouchId:null,_initEventListeners:function(){this.removeListeners(),this._bindEvents(),this.addOrRemove(c,"add")},_getEventPrefix:function(){return this.enablePointerEvents?"pointer":"mouse"},addOrRemove:function(n,a){var r=this.upperCanvasEl,l=this._getEventPrefix();n(u.window,"resize",this._onResize),n(r,l+"down",this._onMouseDown),n(r,l+"move",this._onMouseMove,i),n(r,l+"out",this._onMouseOut),n(r,l+"enter",this._onMouseEnter),n(r,"wheel",this._onMouseWheel),n(r,"contextmenu",this._onContextMenu),n(r,"dblclick",this._onDoubleClick),n(r,"dragover",this._onDragOver),n(r,"dragenter",this._onDragEnter),n(r,"dragleave",this._onDragLeave),n(r,"drop",this._onDrop),this.enablePointerEvents||n(r,"touchstart",this._onTouchStart,i),typeof eventjs<"u"&&a in eventjs&&(eventjs[a](r,"gesture",this._onGesture),eventjs[a](r,"drag",this._onDrag),eventjs[a](r,"orientation",this._onOrientationChange),eventjs[a](r,"shake",this._onShake),eventjs[a](r,"longpress",this._onLongPress))},removeListeners:function(){this.addOrRemove(s,"remove");var n=this._getEventPrefix();s(u.document,n+"up",this._onMouseUp),s(u.document,"touchend",this._onTouchEnd,i),s(u.document,n+"move",this._onMouseMove,i),s(u.document,"touchmove",this._onMouseMove,i)},_bindEvents:function(){this.eventsBound||(this._onMouseDown=this._onMouseDown.bind(this),this._onTouchStart=this._onTouchStart.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this._onMouseUp=this._onMouseUp.bind(this),this._onTouchEnd=this._onTouchEnd.bind(this),this._onResize=this._onResize.bind(this),this._onGesture=this._onGesture.bind(this),this._onDrag=this._onDrag.bind(this),this._onShake=this._onShake.bind(this),this._onLongPress=this._onLongPress.bind(this),this._onOrientationChange=this._onOrientationChange.bind(this),this._onMouseWheel=this._onMouseWheel.bind(this),this._onMouseOut=this._onMouseOut.bind(this),this._onMouseEnter=this._onMouseEnter.bind(this),this._onContextMenu=this._onContextMenu.bind(this),this._onDoubleClick=this._onDoubleClick.bind(this),this._onDragOver=this._onDragOver.bind(this),this._onDragEnter=this._simpleEventHandler.bind(this,"dragenter"),this._onDragLeave=this._simpleEventHandler.bind(this,"dragleave"),this._onDrop=this._onDrop.bind(this),this.eventsBound=!0)},_onGesture:function(n,a){this.__onTransformGesture&&this.__onTransformGesture(n,a)},_onDrag:function(n,a){this.__onDrag&&this.__onDrag(n,a)},_onMouseWheel:function(n){this.__onMouseWheel(n)},_onMouseOut:function(n){var a=this._hoveredTarget;this.fire("mouse:out",{target:a,e:n}),this._hoveredTarget=null,a&&a.fire("mouseout",{e:n});var r=this;this._hoveredTargets.forEach(function(l){r.fire("mouse:out",{target:a,e:n}),l&&a.fire("mouseout",{e:n})}),this._hoveredTargets=[]},_onMouseEnter:function(n){!this._currentTransform&&!this.findTarget(n)&&(this.fire("mouse:over",{target:null,e:n}),this._hoveredTarget=null,this._hoveredTargets=[])},_onOrientationChange:function(n,a){this.__onOrientationChange&&this.__onOrientationChange(n,a)},_onShake:function(n,a){this.__onShake&&this.__onShake(n,a)},_onLongPress:function(n,a){this.__onLongPress&&this.__onLongPress(n,a)},_onDragOver:function(n){n.preventDefault();var a=this._simpleEventHandler("dragover",n);this._fireEnterLeaveEvents(a,n)},_onDrop:function(n){return this._simpleEventHandler("drop:before",n),this._simpleEventHandler("drop",n)},_onContextMenu:function(n){return this.stopContextMenu&&(n.stopPropagation(),n.preventDefault()),!1},_onDoubleClick:function(n){this._cacheTransformEventData(n),this._handleEvent(n,"dblclick"),this._resetTransformEventData(n)},getPointerId:function(n){var a=n.changedTouches;return a?a[0]&&a[0].identifier:this.enablePointerEvents?n.pointerId:-1},_isMainEvent:function(n){return n.isPrimary===!0?!0:n.isPrimary===!1?!1:n.type==="touchend"&&n.touches.length===0?!0:n.changedTouches?n.changedTouches[0].identifier===this.mainTouchId:!0},_onTouchStart:function(n){n.preventDefault(),this.mainTouchId===null&&(this.mainTouchId=this.getPointerId(n)),this.__onMouseDown(n),this._resetTransformEventData();var a=this.upperCanvasEl,r=this._getEventPrefix();c(u.document,"touchend",this._onTouchEnd,i),c(u.document,"touchmove",this._onMouseMove,i),s(a,r+"down",this._onMouseDown)},_onMouseDown:function(n){this.__onMouseDown(n),this._resetTransformEventData();var a=this.upperCanvasEl,r=this._getEventPrefix();s(a,r+"move",this._onMouseMove,i),c(u.document,r+"up",this._onMouseUp),c(u.document,r+"move",this._onMouseMove,i)},_onTouchEnd:function(n){if(!(n.touches.length>0)){this.__onMouseUp(n),this._resetTransformEventData(),this.mainTouchId=null;var a=this._getEventPrefix();s(u.document,"touchend",this._onTouchEnd,i),s(u.document,"touchmove",this._onMouseMove,i);var r=this;this._willAddMouseDown&&clearTimeout(this._willAddMouseDown),this._willAddMouseDown=setTimeout(function(){c(r.upperCanvasEl,a+"down",r._onMouseDown),r._willAddMouseDown=0},400)}},_onMouseUp:function(n){this.__onMouseUp(n),this._resetTransformEventData();var a=this.upperCanvasEl,r=this._getEventPrefix();this._isMainEvent(n)&&(s(u.document,r+"up",this._onMouseUp),s(u.document,r+"move",this._onMouseMove,i),c(a,r+"move",this._onMouseMove,i))},_onMouseMove:function(n){!this.allowTouchScrolling&&n.preventDefault&&n.preventDefault(),this.__onMouseMove(n)},_onResize:function(){this.calcOffset()},_shouldRender:function(n){var a=this._activeObject;return!!a!=!!n||a&&n&&a!==n?!0:(a&&a.isEditing,!1)},__onMouseUp:function(n){var a,r=this._currentTransform,l=this._groupSelector,f=!1,d=!l||l.left===0&&l.top===0;if(this._cacheTransformEventData(n),a=this._target,this._handleEvent(n,"up:before"),e(n,h)){this.fireRightClick&&this._handleEvent(n,"up",h,d);return}if(e(n,o)){this.fireMiddleClick&&this._handleEvent(n,"up",o,d),this._resetTransformEventData();return}if(this.isDrawingMode&&this._isCurrentlyDrawing){this._onMouseUpInDrawingMode(n);return}if(this._isMainEvent(n)){if(r&&(this._finalizeCurrentTransform(n),f=r.actionPerformed),!d){var g=a===this._activeObject;this._maybeGroupObjects(n),f||(f=this._shouldRender(a)||!g&&a===this._activeObject)}var p,v;if(a){if(p=a._findTargetCorner(this.getPointer(n,!0),u.util.isTouchEvent(n)),a.selectable&&a!==this._activeObject&&a.activeOn==="up")this.setActiveObject(a,n),f=!0;else{var x=a.controls[p],w=x&&x.getMouseUpHandler(n,a,x);w&&(v=this.getPointer(n),w(n,r,v.x,v.y))}a.isMoving=!1}if(r&&(r.target!==a||r.corner!==p)){var F=r.target&&r.target.controls[r.corner],Y=F&&F.getMouseUpHandler(n,a,x);v=v||this.getPointer(n),Y&&Y(n,r,v.x,v.y)}this._setCursorFromEvent(n,a),this._handleEvent(n,"up",t,d),this._groupSelector=null,this._currentTransform=null,a&&(a.__corner=0),f?this.requestRenderAll():d||this.renderTop()}},_simpleEventHandler:function(n,a){var r=this.findTarget(a),l=this.targets,f={e:a,target:r,subTargets:l};if(this.fire(n,f),r&&r.fire(n,f),!l)return r;for(var d=0;d<l.length;d++)l[d].fire(n,f);return r},_handleEvent:function(n,a,r,l){var f=this._target,d=this.targets||[],g={e:n,target:f,subTargets:d,button:r||t,isClick:l||!1,pointer:this._pointer,absolutePointer:this._absolutePointer,transform:this._currentTransform};a==="up"&&(g.currentTarget=this.findTarget(n),g.currentSubTargets=this.targets),this.fire("mouse:"+a,g),f&&f.fire("mouse"+a,g);for(var p=0;p<d.length;p++)d[p].fire("mouse"+a,g)},_finalizeCurrentTransform:function(n){var a=this._currentTransform,r=a.target,l={e:n,target:r,transform:a,action:a.action};r._scaling&&(r._scaling=!1),r.setCoords(),(a.actionPerformed||this.stateful&&r.hasStateChanged())&&this._fire("modified",l)},_onMouseDownInDrawingMode:function(n){this._isCurrentlyDrawing=!0,this.getActiveObject()&&this.discardActiveObject(n).requestRenderAll();var a=this.getPointer(n);this.freeDrawingBrush.onMouseDown(a,{e:n,pointer:a}),this._handleEvent(n,"down")},_onMouseMoveInDrawingMode:function(n){if(this._isCurrentlyDrawing){var a=this.getPointer(n);this.freeDrawingBrush.onMouseMove(a,{e:n,pointer:a})}this.setCursor(this.freeDrawingCursor),this._handleEvent(n,"move")},_onMouseUpInDrawingMode:function(n){var a=this.getPointer(n);this._isCurrentlyDrawing=this.freeDrawingBrush.onMouseUp({e:n,pointer:a}),this._handleEvent(n,"up")},__onMouseDown:function(n){this._cacheTransformEventData(n),this._handleEvent(n,"down:before");var a=this._target;if(e(n,h)){this.fireRightClick&&this._handleEvent(n,"down",h);return}if(e(n,o)){this.fireMiddleClick&&this._handleEvent(n,"down",o);return}if(this.isDrawingMode){this._onMouseDownInDrawingMode(n);return}if(this._isMainEvent(n)&&!this._currentTransform){var r=this._pointer;this._previousPointer=r;var l=this._shouldRender(a),f=this._shouldGroup(n,a);if(this._shouldClearSelection(n,a)?this.discardActiveObject(n):f&&(this._handleGrouping(n,a),a=this._activeObject),this.selection&&(!a||!a.selectable&&!a.isEditing&&a!==this._activeObject)&&(this._groupSelector={ex:this._absolutePointer.x,ey:this._absolutePointer.y,top:0,left:0}),a){var d=a===this._activeObject;a.selectable&&a.activeOn==="down"&&this.setActiveObject(a,n);var g=a._findTargetCorner(this.getPointer(n,!0),u.util.isTouchEvent(n));if(a.__corner=g,a===this._activeObject&&(g||!f)){this._setupCurrentTransform(n,a,d);var p=a.controls[g],r=this.getPointer(n),v=p&&p.getMouseDownHandler(n,a,p);v&&v(n,this._currentTransform,r.x,r.y)}}this._handleEvent(n,"down"),(l||f)&&this.requestRenderAll()}},_resetTransformEventData:function(){this._target=null,this._pointer=null,this._absolutePointer=null},_cacheTransformEventData:function(n){this._resetTransformEventData(),this._pointer=this.getPointer(n,!0),this._absolutePointer=this.restorePointerVpt(this._pointer),this._target=this._currentTransform?this._currentTransform.target:this.findTarget(n)||null},_beforeTransform:function(n){var a=this._currentTransform;this.stateful&&a.target.saveState(),this.fire("before:transform",{e:n,transform:a})},__onMouseMove:function(n){this._handleEvent(n,"move:before"),this._cacheTransformEventData(n);var a,r;if(this.isDrawingMode){this._onMouseMoveInDrawingMode(n);return}if(this._isMainEvent(n)){var l=this._groupSelector;l?(r=this._absolutePointer,l.left=r.x-l.ex,l.top=r.y-l.ey,this.renderTop()):this._currentTransform?this._transformObject(n):(a=this.findTarget(n)||null,this._setCursorFromEvent(n,a),this._fireOverOutEvents(a,n)),this._handleEvent(n,"move"),this._resetTransformEventData()}},_fireOverOutEvents:function(n,a){var r=this._hoveredTarget,l=this._hoveredTargets,f=this.targets,d=Math.max(l.length,f.length);this.fireSyntheticInOutEvents(n,a,{oldTarget:r,evtOut:"mouseout",canvasEvtOut:"mouse:out",evtIn:"mouseover",canvasEvtIn:"mouse:over"});for(var g=0;g<d;g++)this.fireSyntheticInOutEvents(f[g],a,{oldTarget:l[g],evtOut:"mouseout",evtIn:"mouseover"});this._hoveredTarget=n,this._hoveredTargets=this.targets.concat()},_fireEnterLeaveEvents:function(n,a){var r=this._draggedoverTarget,l=this._hoveredTargets,f=this.targets,d=Math.max(l.length,f.length);this.fireSyntheticInOutEvents(n,a,{oldTarget:r,evtOut:"dragleave",evtIn:"dragenter"});for(var g=0;g<d;g++)this.fireSyntheticInOutEvents(f[g],a,{oldTarget:l[g],evtOut:"dragleave",evtIn:"dragenter"});this._draggedoverTarget=n},fireSyntheticInOutEvents:function(n,a,r){var l,f,d=r.oldTarget,g,p,v=d!==n,x=r.canvasEvtIn,w=r.canvasEvtOut;v&&(l={e:a,target:n,previousTarget:d},f={e:a,target:d,nextTarget:n}),p=n&&v,g=d&&v,g&&(w&&this.fire(w,f),d.fire(r.evtOut,f)),p&&(x&&this.fire(x,l),n.fire(r.evtIn,l))},__onMouseWheel:function(n){this._cacheTransformEventData(n),this._handleEvent(n,"wheel"),this._resetTransformEventData()},_transformObject:function(n){var a=this.getPointer(n),r=this._currentTransform;r.reset=!1,r.shiftKey=n.shiftKey,r.altKey=n[this.centeredKey],this._performTransformAction(n,r,a),r.actionPerformed&&this.requestRenderAll()},_performTransformAction:function(n,a,r){var l=r.x,f=r.y,d=a.action,g=!1,p=a.actionHandler;p&&(g=p(n,a,l,f)),d==="drag"&&g&&(a.target.isMoving=!0,this.setCursor(a.target.moveCursor||this.moveCursor)),a.actionPerformed=a.actionPerformed||g},_fire:u.controlsUtils.fireEvent,_setCursorFromEvent:function(n,a){if(!a)return this.setCursor(this.defaultCursor),!1;var r=a.hoverCursor||this.hoverCursor,l=this._activeObject&&this._activeObject.type==="activeSelection"?this._activeObject:null,f=(!l||!l.contains(a))&&a._findTargetCorner(this.getPointer(n,!0));f?this.setCursor(this.getCornerCursor(f,a,n)):(a.subTargetCheck&&this.targets.concat().reverse().map(function(d){r=d.hoverCursor||r}),this.setCursor(r))},getCornerCursor:function(n,a,r){var l=a.controls[n];return l.cursorStyleHandler(r,l,a)}})})(),(function(){var c=Math.min,s=Math.max;u.util.object.extend(u.Canvas.prototype,{_shouldGroup:function(h,o){var t=this._activeObject;return t&&this._isSelectionKeyPressed(h)&&o&&o.selectable&&this.selection&&(t!==o||t.type==="activeSelection")&&!o.onSelect({e:h})},_handleGrouping:function(h,o){var t=this._activeObject;t.__corner||o===t&&(o=this.findTarget(h,!0),!o||!o.selectable)||(t&&t.type==="activeSelection"?this._updateActiveSelection(o,h):this._createActiveSelection(o,h))},_updateActiveSelection:function(h,o){var t=this._activeObject,i=t._objects.slice(0);t.contains(h)?(t.removeWithUpdate(h),this._hoveredTarget=h,this._hoveredTargets=this.targets.concat(),t.size()===1&&this._setActiveObject(t.item(0),o)):(t.addWithUpdate(h),this._hoveredTarget=t,this._hoveredTargets=this.targets.concat()),this._fireSelectionEvents(i,o)},_createActiveSelection:function(h,o){var t=this.getActiveObjects(),i=this._createGroup(h);this._hoveredTarget=i,this._setActiveObject(i,o),this._fireSelectionEvents(t,o)},_createGroup:function(h){var o=this._objects,t=o.indexOf(this._activeObject)<o.indexOf(h),i=t?[this._activeObject,h]:[h,this._activeObject];return this._activeObject.isEditing&&this._activeObject.exitEditing(),new u.ActiveSelection(i,{canvas:this})},_groupSelectedObjects:function(h){var o=this._collectObjects(h),t;o.length===1?this.setActiveObject(o[0],h):o.length>1&&(t=new u.ActiveSelection(o.reverse(),{canvas:this}),this.setActiveObject(t,h))},_collectObjects:function(h){for(var o=[],t,i=this._groupSelector.ex,e=this._groupSelector.ey,n=i+this._groupSelector.left,a=e+this._groupSelector.top,r=new u.Point(c(i,n),c(e,a)),l=new u.Point(s(i,n),s(e,a)),f=!this.selectionFullyContained,d=i===n&&e===a,g=this._objects.length;g--&&(t=this._objects[g],!(!(!t||!t.selectable||!t.visible)&&(f&&t.intersectsWithRect(r,l,!0)||t.isContainedWithinRect(r,l,!0)||f&&t.containsPoint(r,null,!0)||f&&t.containsPoint(l,null,!0))&&(o.push(t),d))););return o.length>1&&(o=o.filter(function(p){return!p.onSelect({e:h})})),o},_maybeGroupObjects:function(h){this.selection&&this._groupSelector&&this._groupSelectedObjects(h),this.setCursor(this.defaultCursor),this._groupSelector=null}})})(),(function(){u.util.object.extend(u.StaticCanvas.prototype,{toDataURL:function(c){c||(c={});var s=c.format||"png",h=c.quality||1,o=(c.multiplier||1)*(c.enableRetinaScaling?this.getRetinaScaling():1),t=this.toCanvasElement(o,c);return u.util.toDataURL(t,s,h)},toCanvasElement:function(c,s){c=c||1,s=s||{};var h=(s.width||this.width)*c,o=(s.height||this.height)*c,t=this.getZoom(),i=this.width,e=this.height,n=t*c,a=this.viewportTransform,r=(a[4]-(s.left||0))*c,l=(a[5]-(s.top||0))*c,f=this.interactive,d=[n,0,0,n,r,l],g=this.enableRetinaScaling,p=u.util.createCanvasElement(),v=this.contextTop;return p.width=h,p.height=o,this.contextTop=null,this.enableRetinaScaling=!1,this.interactive=!1,this.viewportTransform=d,this.width=h,this.height=o,this.calcViewportBoundaries(),this.renderCanvas(p.getContext("2d"),this._objects),this.viewportTransform=a,this.width=i,this.height=e,this.calcViewportBoundaries(),this.interactive=f,this.enableRetinaScaling=g,this.contextTop=v,p}})})(),u.util.object.extend(u.StaticCanvas.prototype,{loadFromJSON:function(c,s,h){if(c){var o=typeof c=="string"?JSON.parse(c):u.util.object.clone(c),t=this,i=o.clipPath,e=this.renderOnAddRemove;return this.renderOnAddRemove=!1,delete o.clipPath,this._enlivenObjects(o.objects,function(n){t.clear(),t._setBgOverlay(o,function(){i?t._enlivenObjects([i],function(a){t.clipPath=a[0],t.__setupCanvas.call(t,o,n,e,s)}):t.__setupCanvas.call(t,o,n,e,s)})},h),this}},__setupCanvas:function(c,s,h,o){var t=this;s.forEach(function(i,e){t.insertAt(i,e)}),this.renderOnAddRemove=h,delete c.objects,delete c.backgroundImage,delete c.overlayImage,delete c.background,delete c.overlay,this._setOptions(c),this.renderAll(),o&&o()},_setBgOverlay:function(c,s){var h={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!c.backgroundImage&&!c.overlayImage&&!c.background&&!c.overlay){s&&s();return}var o=function(){h.backgroundImage&&h.overlayImage&&h.backgroundColor&&h.overlayColor&&s&&s()};this.__setBgOverlay("backgroundImage",c.backgroundImage,h,o),this.__setBgOverlay("overlayImage",c.overlayImage,h,o),this.__setBgOverlay("backgroundColor",c.background,h,o),this.__setBgOverlay("overlayColor",c.overlay,h,o)},__setBgOverlay:function(c,s,h,o){var t=this;if(!s){h[c]=!0,o&&o();return}c==="backgroundImage"||c==="overlayImage"?u.util.enlivenObjects([s],function(i){t[c]=i[0],h[c]=!0,o&&o()}):this["set"+u.util.string.capitalize(c,!0)](s,function(){h[c]=!0,o&&o()})},_enlivenObjects:function(c,s,h){if(!c||c.length===0){s&&s([]);return}u.util.enlivenObjects(c,function(o){s&&s(o)},null,h)},_toDataURL:function(c,s){this.clone(function(h){s(h.toDataURL(c))})},_toDataURLWithMultiplier:function(c,s,h){this.clone(function(o){h(o.toDataURLWithMultiplier(c,s))})},clone:function(c,s){var h=JSON.stringify(this.toJSON(s));this.cloneWithoutData(function(o){o.loadFromJSON(h,function(){c&&c(o)})})},cloneWithoutData:function(c){var s=u.util.createCanvasElement();s.width=this.width,s.height=this.height;var h=new u.Canvas(s);this.backgroundImage?(h.setBackgroundImage(this.backgroundImage.src,function(){h.renderAll(),c&&c(h)}),h.backgroundImageOpacity=this.backgroundImageOpacity,h.backgroundImageStretch=this.backgroundImageStretch):c&&c(h)}}),(function(c){var s=c.fabric||(c.fabric={}),h=s.util.object.extend,o=s.util.object.clone,t=s.util.toFixed,i=s.util.string.capitalize,e=s.util.degreesToRadians,n=!s.isLikelyNode,a=2;s.Object||(s.Object=s.util.createClass(s.CommonMethods,{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,skewX:0,skewY:0,cornerSize:13,touchCornerSize:24,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgb(178,204,255)",borderDashArray:null,cornerColor:"rgb(178,204,255)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeDashOffset:0,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:4,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,minScaleLimit:0,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,perPixelTargetFind:!1,includeDefaultValues:!0,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!1,objectCaching:n,statefullCache:!1,noScaleCache:!0,strokeUniform:!1,dirty:!0,__corner:0,paintFirst:"fill",activeOn:"down",stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit angle opacity fill globalCompositeOperation shadow visible backgroundColor skewX skewY fillRule paintFirst clipPath strokeUniform".split(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height paintFirst strokeUniform strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit backgroundColor clipPath".split(" "),colorProperties:"fill stroke backgroundColor".split(" "),clipPath:void 0,inverted:!1,absolutePositioned:!1,initialize:function(r){r&&this.setOptions(r)},_createCacheCanvas:function(){this._cacheProperties={},this._cacheCanvas=s.util.createCanvasElement(),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas(),this.dirty=!0},_limitCacheSize:function(r){var l=s.perfLimitSizeTotal,f=r.width,d=r.height,g=s.maxCacheSideLimit,p=s.minCacheSideLimit;if(f<=g&&d<=g&&f*d<=l)return f<p&&(r.width=p),d<p&&(r.height=p),r;var v=f/d,x=s.util.limitDimsByArea(v,l),w=s.util.capValue,F=w(p,x.x,g),Y=w(p,x.y,g);return f>F&&(r.zoomX/=f/F,r.width=F,r.capped=!0),d>Y&&(r.zoomY/=d/Y,r.height=Y,r.capped=!0),r},_getCacheCanvasDimensions:function(){var r=this.getTotalObjectScaling(),l=this._getTransformedDimensions(0,0),f=l.x*r.scaleX/this.scaleX,d=l.y*r.scaleY/this.scaleY;return{width:f+a,height:d+a,zoomX:r.scaleX,zoomY:r.scaleY,x:f,y:d}},_updateCacheCanvas:function(){var r=this.canvas;if(this.noScaleCache&&r&&r._currentTransform){var l=r._currentTransform.target,f=r._currentTransform.action;if(this===l&&f.slice&&f.slice(0,5)==="scale")return!1}var d=this._cacheCanvas,g=this._limitCacheSize(this._getCacheCanvasDimensions()),p=s.minCacheSideLimit,v=g.width,x=g.height,w,F,Y=g.zoomX,W=g.zoomY,Z=v!==this.cacheWidth||x!==this.cacheHeight,Q=this.zoomX!==Y||this.zoomY!==W,G=Z||Q,q=0,J=0,et=!1;if(Z){var tt=this._cacheCanvas.width,_=this._cacheCanvas.height,S=v>tt||x>_,T=(v<tt*.9||x<_*.9)&&tt>p&&_>p;et=S||T,S&&!g.capped&&(v>p||x>p)&&(q=v*.1,J=x*.1)}return this instanceof s.Text&&this.path&&(G=!0,et=!0,q+=this.getHeightOfLine(0)*this.zoomX,J+=this.getHeightOfLine(0)*this.zoomY),G?(et?(d.width=Math.ceil(v+q),d.height=Math.ceil(x+J)):(this._cacheContext.setTransform(1,0,0,1,0,0),this._cacheContext.clearRect(0,0,d.width,d.height)),w=g.x/2,F=g.y/2,this.cacheTranslationX=Math.round(d.width/2-w)+w,this.cacheTranslationY=Math.round(d.height/2-F)+F,this.cacheWidth=v,this.cacheHeight=x,this._cacheContext.translate(this.cacheTranslationX,this.cacheTranslationY),this._cacheContext.scale(Y,W),this.zoomX=Y,this.zoomY=W,!0):!1},setOptions:function(r){this._setOptions(r),this._initGradient(r.fill,"fill"),this._initGradient(r.stroke,"stroke"),this._initPattern(r.fill,"fill"),this._initPattern(r.stroke,"stroke")},transform:function(r){var l=this.group&&!this.group._transformDone||this.group&&this.canvas&&r===this.canvas.contextTop,f=this.calcTransformMatrix(!l);r.transform(f[0],f[1],f[2],f[3],f[4],f[5])},toObject:function(r){var l=s.Object.NUM_FRACTION_DIGITS,f={type:this.type,version:s.version,originX:this.originX,originY:this.originY,left:t(this.left,l),top:t(this.top,l),width:t(this.width,l),height:t(this.height,l),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:t(this.strokeWidth,l),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeDashOffset:this.strokeDashOffset,strokeLineJoin:this.strokeLineJoin,strokeUniform:this.strokeUniform,strokeMiterLimit:t(this.strokeMiterLimit,l),scaleX:t(this.scaleX,l),scaleY:t(this.scaleY,l),angle:t(this.angle,l),flipX:this.flipX,flipY:this.flipY,opacity:t(this.opacity,l),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,backgroundColor:this.backgroundColor,fillRule:this.fillRule,paintFirst:this.paintFirst,globalCompositeOperation:this.globalCompositeOperation,skewX:t(this.skewX,l),skewY:t(this.skewY,l)};return this.clipPath&&!this.clipPath.excludeFromExport&&(f.clipPath=this.clipPath.toObject(r),f.clipPath.inverted=this.clipPath.inverted,f.clipPath.absolutePositioned=this.clipPath.absolutePositioned),s.util.populateWithProperties(this,f,r),this.includeDefaultValues||(f=this._removeDefaultValues(f)),f},toDatalessObject:function(r){return this.toObject(r)},_removeDefaultValues:function(r){var l=s.util.getKlass(r.type).prototype,f=l.stateProperties;return f.forEach(function(d){d==="left"||d==="top"||(r[d]===l[d]&&delete r[d],Array.isArray(r[d])&&Array.isArray(l[d])&&r[d].length===0&&l[d].length===0&&delete r[d])}),r},toString:function(){return"#<fabric."+i(this.type)+">"},getObjectScaling:function(){if(!this.group)return{scaleX:this.scaleX,scaleY:this.scaleY};var r=s.util.qrDecompose(this.calcTransformMatrix());return{scaleX:Math.abs(r.scaleX),scaleY:Math.abs(r.scaleY)}},getTotalObjectScaling:function(){var r=this.getObjectScaling(),l=r.scaleX,f=r.scaleY;if(this.canvas){var d=this.canvas.getZoom(),g=this.canvas.getRetinaScaling();l*=d*g,f*=d*g}return{scaleX:l,scaleY:f}},getObjectOpacity:function(){var r=this.opacity;return this.group&&(r*=this.group.getObjectOpacity()),r},_set:function(r,l){var f=r==="scaleX"||r==="scaleY",d=this[r]!==l,g=!1;return f&&(l=this._constrainScale(l)),r==="scaleX"&&l<0?(this.flipX=!this.flipX,l*=-1):r==="scaleY"&&l<0?(this.flipY=!this.flipY,l*=-1):r==="shadow"&&l&&!(l instanceof s.Shadow)?l=new s.Shadow(l):r==="dirty"&&this.group&&this.group.set("dirty",l),this[r]=l,d&&(g=this.group&&this.group.isOnACache(),this.cacheProperties.indexOf(r)>-1?(this.dirty=!0,g&&this.group.set("dirty",!0)):g&&this.stateProperties.indexOf(r)>-1&&this.group.set("dirty",!0)),this},setOnGroup:function(){},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:s.iMatrix.concat()},isNotVisible:function(){return this.opacity===0||!this.width&&!this.height&&this.strokeWidth===0||!this.visible},render:function(r){this.isNotVisible()||this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(r.save(),this._setupCompositeOperation(r),this.drawSelectionBackground(r),this.transform(r),this._setOpacity(r),this._setShadow(r,this),this.shouldCache()?(this.renderCache(),this.drawCacheOnCanvas(r)):(this._removeCacheCanvas(),this.dirty=!1,this.drawObject(r),this.objectCaching&&this.statefullCache&&this.saveState({propertySet:"cacheProperties"})),r.restore())},renderCache:function(r){r=r||{},(!this._cacheCanvas||!this._cacheContext)&&this._createCacheCanvas(),this.isCacheDirty()&&(this.statefullCache&&this.saveState({propertySet:"cacheProperties"}),this.drawObject(this._cacheContext,r.forClipping),this.dirty=!1)},_removeCacheCanvas:function(){this._cacheCanvas=null,this._cacheContext=null,this.cacheWidth=0,this.cacheHeight=0},hasStroke:function(){return this.stroke&&this.stroke!=="transparent"&&this.strokeWidth!==0},hasFill:function(){return this.fill&&this.fill!=="transparent"},needsItsOwnCache:function(){return!!(this.paintFirst==="stroke"&&this.hasFill()&&this.hasStroke()&&typeof this.shadow=="object"||this.clipPath)},shouldCache:function(){return this.ownCaching=this.needsItsOwnCache()||this.objectCaching&&(!this.group||!this.group.isOnACache()),this.ownCaching},willDrawShadow:function(){return!!this.shadow&&(this.shadow.offsetX!==0||this.shadow.offsetY!==0)},drawClipPathOnCache:function(r,l){if(r.save(),l.inverted?r.globalCompositeOperation="destination-out":r.globalCompositeOperation="destination-in",l.absolutePositioned){var f=s.util.invertTransform(this.calcTransformMatrix());r.transform(f[0],f[1],f[2],f[3],f[4],f[5])}l.transform(r),r.scale(1/l.zoomX,1/l.zoomY),r.drawImage(l._cacheCanvas,-l.cacheTranslationX,-l.cacheTranslationY),r.restore()},drawObject:function(r,l){var f=this.fill,d=this.stroke;l?(this.fill="black",this.stroke="",this._setClippingProperties(r)):this._renderBackground(r),this._render(r),this._drawClipPath(r,this.clipPath),this.fill=f,this.stroke=d},_drawClipPath:function(r,l){l&&(l.canvas=this.canvas,l.shouldCache(),l._transformDone=!0,l.renderCache({forClipping:!0}),this.drawClipPathOnCache(r,l))},drawCacheOnCanvas:function(r){r.scale(1/this.zoomX,1/this.zoomY),r.drawImage(this._cacheCanvas,-this.cacheTranslationX,-this.cacheTranslationY)},isCacheDirty:function(r){if(this.isNotVisible())return!1;if(this._cacheCanvas&&this._cacheContext&&!r&&this._updateCacheCanvas())return!0;if(this.dirty||this.clipPath&&this.clipPath.absolutePositioned||this.statefullCache&&this.hasStateChanged("cacheProperties")){if(this._cacheCanvas&&this._cacheContext&&!r){var l=this.cacheWidth/this.zoomX,f=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-l/2,-f/2,l,f)}return!0}return!1},_renderBackground:function(r){if(this.backgroundColor){var l=this._getNonTransformedDimensions();r.fillStyle=this.backgroundColor,r.fillRect(-l.x/2,-l.y/2,l.x,l.y),this._removeShadow(r)}},_setOpacity:function(r){this.group&&!this.group._transformDone?r.globalAlpha=this.getObjectOpacity():r.globalAlpha*=this.opacity},_setStrokeStyles:function(r,l){var f=l.stroke;f&&(r.lineWidth=l.strokeWidth,r.lineCap=l.strokeLineCap,r.lineDashOffset=l.strokeDashOffset,r.lineJoin=l.strokeLineJoin,r.miterLimit=l.strokeMiterLimit,f.toLive?f.gradientUnits==="percentage"||f.gradientTransform||f.patternTransform?this._applyPatternForTransformedGradient(r,f):(r.strokeStyle=f.toLive(r,this),this._applyPatternGradientTransform(r,f)):r.strokeStyle=l.stroke)},_setFillStyles:function(r,l){var f=l.fill;f&&(f.toLive?(r.fillStyle=f.toLive(r,this),this._applyPatternGradientTransform(r,l.fill)):r.fillStyle=f)},_setClippingProperties:function(r){r.globalAlpha=1,r.strokeStyle="transparent",r.fillStyle="#000000"},_setLineDash:function(r,l){!l||l.length===0||(1&l.length&&l.push.apply(l,l),r.setLineDash(l))},_renderControls:function(r,l){var f=this.getViewportTransform(),d=this.calcTransformMatrix(),g,p,v;l=l||{},p=typeof l.hasBorders<"u"?l.hasBorders:this.hasBorders,v=typeof l.hasControls<"u"?l.hasControls:this.hasControls,d=s.util.multiplyTransformMatrices(f,d),g=s.util.qrDecompose(d),r.save(),r.translate(g.translateX,g.translateY),r.lineWidth=1*this.borderScaleFactor,this.group||(r.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),this.flipX&&(g.angle-=180),r.rotate(e(this.group?g.angle:this.angle)),l.forActiveSelection||this.group?p&&this.drawBordersInGroup(r,g,l):p&&this.drawBorders(r,l),v&&this.drawControls(r,l),r.restore()},_setShadow:function(r){if(this.shadow){var l=this.shadow,f=this.canvas,d,g=f&&f.viewportTransform[0]||1,p=f&&f.viewportTransform[3]||1;l.nonScaling?d={scaleX:1,scaleY:1}:d=this.getObjectScaling(),f&&f._isRetinaScaling()&&(g*=s.devicePixelRatio,p*=s.devicePixelRatio),r.shadowColor=l.color,r.shadowBlur=l.blur*s.browserShadowBlurConstant*(g+p)*(d.scaleX+d.scaleY)/4,r.shadowOffsetX=l.offsetX*g*d.scaleX,r.shadowOffsetY=l.offsetY*p*d.scaleY}},_removeShadow:function(r){this.shadow&&(r.shadowColor="",r.shadowBlur=r.shadowOffsetX=r.shadowOffsetY=0)},_applyPatternGradientTransform:function(r,l){if(!l||!l.toLive)return{offsetX:0,offsetY:0};var f=l.gradientTransform||l.patternTransform,d=-this.width/2+l.offsetX||0,g=-this.height/2+l.offsetY||0;return l.gradientUnits==="percentage"?r.transform(this.width,0,0,this.height,d,g):r.transform(1,0,0,1,d,g),f&&r.transform(f[0],f[1],f[2],f[3],f[4],f[5]),{offsetX:d,offsetY:g}},_renderPaintInOrder:function(r){this.paintFirst==="stroke"?(this._renderStroke(r),this._renderFill(r)):(this._renderFill(r),this._renderStroke(r))},_render:function(){},_renderFill:function(r){this.fill&&(r.save(),this._setFillStyles(r,this),this.fillRule==="evenodd"?r.fill("evenodd"):r.fill(),r.restore())},_renderStroke:function(r){if(!(!this.stroke||this.strokeWidth===0)){if(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(r),r.save(),this.strokeUniform&&this.group){var l=this.getObjectScaling();r.scale(1/l.scaleX,1/l.scaleY)}else this.strokeUniform&&r.scale(1/this.scaleX,1/this.scaleY);this._setLineDash(r,this.strokeDashArray),this._setStrokeStyles(r,this),r.stroke(),r.restore()}},_applyPatternForTransformedGradient:function(r,l){var f=this._limitCacheSize(this._getCacheCanvasDimensions()),d=s.util.createCanvasElement(),g,p=this.canvas.getRetinaScaling(),v=f.x/this.scaleX/p,x=f.y/this.scaleY/p;d.width=v,d.height=x,g=d.getContext("2d"),g.beginPath(),g.moveTo(0,0),g.lineTo(v,0),g.lineTo(v,x),g.lineTo(0,x),g.closePath(),g.translate(v/2,x/2),g.scale(f.zoomX/this.scaleX/p,f.zoomY/this.scaleY/p),this._applyPatternGradientTransform(g,l),g.fillStyle=l.toLive(r),g.fill(),r.translate(-this.width/2-this.strokeWidth/2,-this.height/2-this.strokeWidth/2),r.scale(p*this.scaleX/f.zoomX,p*this.scaleY/f.zoomY),r.strokeStyle=g.createPattern(d,"no-repeat")},_findCenterFromElement:function(){return{x:this.left+this.width/2,y:this.top+this.height/2}},_assignTransformMatrixProps:function(){if(this.transformMatrix){var r=s.util.qrDecompose(this.transformMatrix);this.flipX=!1,this.flipY=!1,this.set("scaleX",r.scaleX),this.set("scaleY",r.scaleY),this.angle=r.angle,this.skewX=r.skewX,this.skewY=0}},_removeTransformMatrix:function(r){var l=this._findCenterFromElement();this.transformMatrix&&(this._assignTransformMatrixProps(),l=s.util.transformPoint(l,this.transformMatrix)),this.transformMatrix=null,r&&(this.scaleX*=r.scaleX,this.scaleY*=r.scaleY,this.cropX=r.cropX,this.cropY=r.cropY,l.x+=r.offsetLeft,l.y+=r.offsetTop,this.width=r.width,this.height=r.height),this.setPositionByOrigin(l,"center","center")},clone:function(r,l){var f=this.toObject(l);this.constructor.fromObject?this.constructor.fromObject(f,r):s.Object._fromObject("Object",f,r)},cloneAsImage:function(r,l){var f=this.toCanvasElement(l);return r&&r(new s.Image(f)),this},toCanvasElement:function(r){r||(r={});var l=s.util,f=l.saveObjectTransform(this),d=this.group,g=this.shadow,p=Math.abs,v=(r.multiplier||1)*(r.enableRetinaScaling?s.devicePixelRatio:1);delete this.group,r.withoutTransform&&l.resetObjectTransform(this),r.withoutShadow&&(this.shadow=null);var x=s.util.createCanvasElement(),w=this.getBoundingRect(!0,!0),F=this.shadow,Y,W={x:0,y:0},Z,Q,G;F&&(Z=F.blur,F.nonScaling?Y={scaleX:1,scaleY:1}:Y=this.getObjectScaling(),W.x=2*Math.round(p(F.offsetX)+Z)*p(Y.scaleX),W.y=2*Math.round(p(F.offsetY)+Z)*p(Y.scaleY)),Q=w.width+W.x,G=w.height+W.y,x.width=Math.ceil(Q),x.height=Math.ceil(G);var q=new s.StaticCanvas(x,{enableRetinaScaling:!1,renderOnAddRemove:!1,skipOffscreen:!1});r.format==="jpeg"&&(q.backgroundColor="#fff"),this.setPositionByOrigin(new s.Point(q.width/2,q.height/2),"center","center");var J=this.canvas;q.add(this);var et=q.toCanvasElement(v||1,r);return this.shadow=g,this.set("canvas",J),d&&(this.group=d),this.set(f).setCoords(),q._objects=[],q.dispose(),q=null,et},toDataURL:function(r){return r||(r={}),s.util.toDataURL(this.toCanvasElement(r),r.format||"png",r.quality||1)},isType:function(r){return arguments.length>1?Array.from(arguments).includes(this.type):this.type===r},complexity:function(){return 1},toJSON:function(r){return this.toObject(r)},rotate:function(r){var l=(this.originX!=="center"||this.originY!=="center")&&this.centeredRotation;return l&&this._setOriginToCenter(),this.set("angle",r),l&&this._resetOrigin(),this},centerH:function(){return this.canvas&&this.canvas.centerObjectH(this),this},viewportCenterH:function(){return this.canvas&&this.canvas.viewportCenterObjectH(this),this},centerV:function(){return this.canvas&&this.canvas.centerObjectV(this),this},viewportCenterV:function(){return this.canvas&&this.canvas.viewportCenterObjectV(this),this},center:function(){return this.canvas&&this.canvas.centerObject(this),this},viewportCenter:function(){return this.canvas&&this.canvas.viewportCenterObject(this),this},getLocalPointer:function(r,l){l=l||this.canvas.getPointer(r);var f=new s.Point(l.x,l.y),d=this._getLeftTopCoords();return this.angle&&(f=s.util.rotatePoint(f,d,e(-this.angle))),{x:f.x-d.x,y:f.y-d.y}},_setupCompositeOperation:function(r){this.globalCompositeOperation&&(r.globalCompositeOperation=this.globalCompositeOperation)},dispose:function(){s.runningAnimations&&s.runningAnimations.cancelByTarget(this)}}),s.util.createAccessors&&s.util.createAccessors(s.Object),h(s.Object.prototype,s.Observable),s.Object.NUM_FRACTION_DIGITS=2,s.Object.ENLIVEN_PROPS=["clipPath"],s.Object._fromObject=function(r,l,f,d){var g=s[r];l=o(l,!0),s.util.enlivenPatterns([l.fill,l.stroke],function(p){typeof p[0]<"u"&&(l.fill=p[0]),typeof p[1]<"u"&&(l.stroke=p[1]),s.util.enlivenObjectEnlivables(l,l,function(){var v=d?new g(l[d],l):new g(l);f&&f(v)})})},s.Object.__uid=0)})(m),(function(){var c=u.util.degreesToRadians,s={left:-.5,center:0,right:.5},h={top:-.5,center:0,bottom:.5};u.util.object.extend(u.Object.prototype,{translateToGivenOrigin:function(o,t,i,e,n){var a=o.x,r=o.y,l,f,d;return typeof t=="string"?t=s[t]:t-=.5,typeof e=="string"?e=s[e]:e-=.5,l=e-t,typeof i=="string"?i=h[i]:i-=.5,typeof n=="string"?n=h[n]:n-=.5,f=n-i,(l||f)&&(d=this._getTransformedDimensions(),a=o.x+l*d.x,r=o.y+f*d.y),new u.Point(a,r)},translateToCenterPoint:function(o,t,i){var e=this.translateToGivenOrigin(o,t,i,"center","center");return this.angle?u.util.rotatePoint(e,o,c(this.angle)):e},translateToOriginPoint:function(o,t,i){var e=this.translateToGivenOrigin(o,"center","center",t,i);return this.angle?u.util.rotatePoint(e,o,c(this.angle)):e},getCenterPoint:function(){var o=new u.Point(this.left,this.top);return this.translateToCenterPoint(o,this.originX,this.originY)},getPointByOrigin:function(o,t){var i=this.getCenterPoint();return this.translateToOriginPoint(i,o,t)},toLocalPoint:function(o,t,i){var e=this.getCenterPoint(),n,a;return typeof t<"u"&&typeof i<"u"?n=this.translateToGivenOrigin(e,"center","center",t,i):n=new u.Point(this.left,this.top),a=new u.Point(o.x,o.y),this.angle&&(a=u.util.rotatePoint(a,e,-c(this.angle))),a.subtractEquals(n)},setPositionByOrigin:function(o,t,i){var e=this.translateToCenterPoint(o,t,i),n=this.translateToOriginPoint(e,this.originX,this.originY);this.set("left",n.x),this.set("top",n.y)},adjustPosition:function(o){var t=c(this.angle),i=this.getScaledWidth(),e=u.util.cos(t)*i,n=u.util.sin(t)*i,a,r;typeof this.originX=="string"?a=s[this.originX]:a=this.originX-.5,typeof o=="string"?r=s[o]:r=o-.5,this.left+=e*(r-a),this.top+=n*(r-a),this.setCoords(),this.originX=o},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var o=this.getCenterPoint();this.originX="center",this.originY="center",this.left=o.x,this.top=o.y},_resetOrigin:function(){var o=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=o.x,this.top=o.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")}})})(),(function(){function c(i){return[new u.Point(i.tl.x,i.tl.y),new u.Point(i.tr.x,i.tr.y),new u.Point(i.br.x,i.br.y),new u.Point(i.bl.x,i.bl.y)]}var s=u.util,h=s.degreesToRadians,o=s.multiplyTransformMatrices,t=s.transformPoint;s.object.extend(u.Object.prototype,{oCoords:null,aCoords:null,lineCoords:null,ownMatrixCache:null,matrixCache:null,controls:{},_getCoords:function(i,e){return e?i?this.calcACoords():this.calcLineCoords():((!this.aCoords||!this.lineCoords)&&this.setCoords(!0),i?this.aCoords:this.lineCoords)},getCoords:function(i,e){return c(this._getCoords(i,e))},intersectsWithRect:function(i,e,n,a){var r=this.getCoords(n,a),l=u.Intersection.intersectPolygonRectangle(r,i,e);return l.status==="Intersection"},intersectsWithObject:function(i,e,n){var a=u.Intersection.intersectPolygonPolygon(this.getCoords(e,n),i.getCoords(e,n));return a.status==="Intersection"||i.isContainedWithinObject(this,e,n)||this.isContainedWithinObject(i,e,n)},isContainedWithinObject:function(i,e,n){for(var a=this.getCoords(e,n),r=e?i.aCoords:i.lineCoords,l=0,f=i._getImageLines(r);l<4;l++)if(!i.containsPoint(a[l],f))return!1;return!0},isContainedWithinRect:function(i,e,n,a){var r=this.getBoundingRect(n,a);return r.left>=i.x&&r.left+r.width<=e.x&&r.top>=i.y&&r.top+r.height<=e.y},containsPoint:function(i,l,n,a){var r=this._getCoords(n,a),l=l||this._getImageLines(r),f=this._findCrossPoints(i,l);return f!==0&&f%2===1},isOnScreen:function(i){if(!this.canvas)return!1;var e=this.canvas.vptCoords.tl,n=this.canvas.vptCoords.br,a=this.getCoords(!0,i);return a.some(function(r){return r.x<=n.x&&r.x>=e.x&&r.y<=n.y&&r.y>=e.y})||this.intersectsWithRect(e,n,!0,i)?!0:this._containsCenterOfCanvas(e,n,i)},_containsCenterOfCanvas:function(i,e,n){var a={x:(i.x+e.x)/2,y:(i.y+e.y)/2};return!!this.containsPoint(a,null,!0,n)},isPartiallyOnScreen:function(i){if(!this.canvas)return!1;var e=this.canvas.vptCoords.tl,n=this.canvas.vptCoords.br;if(this.intersectsWithRect(e,n,!0,i))return!0;var a=this.getCoords(!0,i).every(function(r){return(r.x>=n.x||r.x<=e.x)&&(r.y>=n.y||r.y<=e.y)});return a&&this._containsCenterOfCanvas(e,n,i)},_getImageLines:function(i){var e={topline:{o:i.tl,d:i.tr},rightline:{o:i.tr,d:i.br},bottomline:{o:i.br,d:i.bl},leftline:{o:i.bl,d:i.tl}};return e},_findCrossPoints:function(i,e){var n,a,r,l,f,d=0,g;for(var p in e)if(g=e[p],!(g.o.y<i.y&&g.d.y<i.y)&&!(g.o.y>=i.y&&g.d.y>=i.y)&&(g.o.x===g.d.x&&g.o.x>=i.x?f=g.o.x:(n=0,a=(g.d.y-g.o.y)/(g.d.x-g.o.x),r=i.y-n*i.x,l=g.o.y-a*g.o.x,f=-(r-l)/(n-a)),f>=i.x&&(d+=1),d===2))break;return d},getBoundingRect:function(i,e){var n=this.getCoords(i,e);return s.makeBoundingBoxFromPoints(n)},getScaledWidth:function(){return this._getTransformedDimensions().x},getScaledHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(i){return Math.abs(i)<this.minScaleLimit?i<0?-this.minScaleLimit:this.minScaleLimit:i===0?1e-4:i},scale:function(i){return this._set("scaleX",i),this._set("scaleY",i),this.setCoords()},scaleToWidth:function(i,e){var n=this.getBoundingRect(e).width/this.getScaledWidth();return this.scale(i/this.width/n)},scaleToHeight:function(i,e){var n=this.getBoundingRect(e).height/this.getScaledHeight();return this.scale(i/this.height/n)},calcLineCoords:function(){var i=this.getViewportTransform(),e=this.padding,n=h(this.angle),a=s.cos(n),r=s.sin(n),l=a*e,f=r*e,d=l+f,g=l-f,p=this.calcACoords(),v={tl:t(p.tl,i),tr:t(p.tr,i),bl:t(p.bl,i),br:t(p.br,i)};return e&&(v.tl.x-=g,v.tl.y-=d,v.tr.x+=d,v.tr.y-=g,v.bl.x-=d,v.bl.y+=g,v.br.x+=g,v.br.y+=d),v},calcOCoords:function(){var i=this._calcRotateMatrix(),e=this._calcTranslateMatrix(),n=this.getViewportTransform(),a=o(n,e),r=o(a,i),r=o(r,[1/n[0],0,0,1/n[3],0,0]),l=this._calculateCurrentDimensions(),f={};return this.forEachControl(function(d,g,p){f[g]=d.positionHandler(l,r,p)}),f},calcACoords:function(){var i=this._calcRotateMatrix(),e=this._calcTranslateMatrix(),n=o(e,i),a=this._getTransformedDimensions(),r=a.x/2,l=a.y/2;return{tl:t({x:-r,y:-l},n),tr:t({x:r,y:-l},n),bl:t({x:-r,y:l},n),br:t({x:r,y:l},n)}},setCoords:function(i){return this.aCoords=this.calcACoords(),this.lineCoords=this.group?this.aCoords:this.calcLineCoords(),i?this:(this.oCoords=this.calcOCoords(),this._setCornerCoords&&this._setCornerCoords(),this)},_calcRotateMatrix:function(){return s.calcRotateMatrix(this)},_calcTranslateMatrix:function(){var i=this.getCenterPoint();return[1,0,0,1,i.x,i.y]},transformMatrixKey:function(i){var e="_",n="";return!i&&this.group&&(n=this.group.transformMatrixKey(i)+e),n+this.top+e+this.left+e+this.scaleX+e+this.scaleY+e+this.skewX+e+this.skewY+e+this.angle+e+this.originX+e+this.originY+e+this.width+e+this.height+e+this.strokeWidth+this.flipX+this.flipY},calcTransformMatrix:function(i){var e=this.calcOwnMatrix();if(i||!this.group)return e;var n=this.transformMatrixKey(i),a=this.matrixCache||(this.matrixCache={});return a.key===n?a.value:(this.group&&(e=o(this.group.calcTransformMatrix(!1),e)),a.key=n,a.value=e,e)},calcOwnMatrix:function(){var i=this.transformMatrixKey(!0),e=this.ownMatrixCache||(this.ownMatrixCache={});if(e.key===i)return e.value;var n=this._calcTranslateMatrix(),a={angle:this.angle,translateX:n[4],translateY:n[5],scaleX:this.scaleX,scaleY:this.scaleY,skewX:this.skewX,skewY:this.skewY,flipX:this.flipX,flipY:this.flipY};return e.key=i,e.value=s.composeMatrix(a),e.value},_getNonTransformedDimensions:function(){var i=this.strokeWidth,e=this.width+i,n=this.height+i;return{x:e,y:n}},_getTransformedDimensions:function(i,e){typeof i>"u"&&(i=this.skewX),typeof e>"u"&&(e=this.skewY);var n,a,r,l=i===0&&e===0;if(this.strokeUniform?(a=this.width,r=this.height):(n=this._getNonTransformedDimensions(),a=n.x,r=n.y),l)return this._finalizeDimensions(a*this.scaleX,r*this.scaleY);var f=s.sizeAfterTransform(a,r,{scaleX:this.scaleX,scaleY:this.scaleY,skewX:i,skewY:e});return this._finalizeDimensions(f.x,f.y)},_finalizeDimensions:function(i,e){return this.strokeUniform?{x:i+this.strokeWidth,y:e+this.strokeWidth}:{x:i,y:e}},_calculateCurrentDimensions:function(){var i=this.getViewportTransform(),e=this._getTransformedDimensions(),n=t(e,i,!0);return n.scalarAdd(2*this.padding)}})})(),u.util.object.extend(u.Object.prototype,{sendToBack:function(){return this.group?u.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas&&this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?u.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas&&this.canvas.bringToFront(this),this},sendBackwards:function(c){return this.group?u.StaticCanvas.prototype.sendBackwards.call(this.group,this,c):this.canvas&&this.canvas.sendBackwards(this,c),this},bringForward:function(c){return this.group?u.StaticCanvas.prototype.bringForward.call(this.group,this,c):this.canvas&&this.canvas.bringForward(this,c),this},moveTo:function(c){return this.group&&this.group.type!=="activeSelection"?u.StaticCanvas.prototype.moveTo.call(this.group,this,c):this.canvas&&this.canvas.moveTo(this,c),this}}),(function(){function c(h,o){if(o){if(o.toLive)return h+": url(#SVGID_"+o.id+"); ";var t=new u.Color(o),i=h+": "+t.toRgb()+"; ",e=t.getAlpha();return e!==1&&(i+=h+"-opacity: "+e.toString()+"; "),i}else return h+": none; "}var s=u.util.toFixed;u.util.object.extend(u.Object.prototype,{getSvgStyles:function(h){var o=this.fillRule?this.fillRule:"nonzero",t=this.strokeWidth?this.strokeWidth:"0",i=this.strokeDashArray?this.strokeDashArray.join(" "):"none",e=this.strokeDashOffset?this.strokeDashOffset:"0",n=this.strokeLineCap?this.strokeLineCap:"butt",a=this.strokeLineJoin?this.strokeLineJoin:"miter",r=this.strokeMiterLimit?this.strokeMiterLimit:"4",l=typeof this.opacity<"u"?this.opacity:"1",f=this.visible?"":" visibility: hidden;",d=h?"":this.getSvgFilter(),g=c("fill",this.fill),p=c("stroke",this.stroke);return[p,"stroke-width: ",t,"; ","stroke-dasharray: ",i,"; ","stroke-linecap: ",n,"; ","stroke-dashoffset: ",e,"; ","stroke-linejoin: ",a,"; ","stroke-miterlimit: ",r,"; ",g,"fill-rule: ",o,"; ","opacity: ",l,";",d,f].join("")},getSvgSpanStyles:function(h,o){var t="; ",e=h.fontFamily?"font-family: "+(h.fontFamily.indexOf("'")===-1&&h.fontFamily.indexOf('"')===-1?"'"+h.fontFamily+"'":h.fontFamily)+t:"",i=h.strokeWidth?"stroke-width: "+h.strokeWidth+t:"",e=e,n=h.fontSize?"font-size: "+h.fontSize+"px"+t:"",a=h.fontStyle?"font-style: "+h.fontStyle+t:"",r=h.fontWeight?"font-weight: "+h.fontWeight+t:"",l=h.fill?c("fill",h.fill):"",f=h.stroke?c("stroke",h.stroke):"",d=this.getSvgTextDecoration(h),g=h.deltaY?"baseline-shift: "+-h.deltaY+"; ":"";return d&&(d="text-decoration: "+d+t),[f,i,e,n,a,r,d,l,g,o?"white-space: pre; ":""].join("")},getSvgTextDecoration:function(h){return["overline","underline","line-through"].filter(function(o){return h[o.replace("-","")]}).join(" ")},getSvgFilter:function(){return this.shadow?"filter: url(#SVGID_"+this.shadow.id+");":""},getSvgCommons:function(){return[this.id?'id="'+this.id+'" ':"",this.clipPath?'clip-path="url(#'+this.clipPath.clipPathId+')" ':""].join("")},getSvgTransform:function(h,o){var t=h?this.calcTransformMatrix():this.calcOwnMatrix(),i='transform="'+u.util.matrixToSVG(t);return i+(o||"")+'" '},_setSVGBg:function(h){if(this.backgroundColor){var o=u.Object.NUM_FRACTION_DIGITS;h.push(" <rect ",this._getFillAttributes(this.backgroundColor),' x="',s(-this.width/2,o),'" y="',s(-this.height/2,o),'" width="',s(this.width,o),'" height="',s(this.height,o),`"></rect>
44
+ `)}},toSVG:function(h){return this._createBaseSVGMarkup(this._toSVG(h),{reviver:h})},toClipPathSVG:function(h){return" "+this._createBaseClipPathSVGMarkup(this._toSVG(h),{reviver:h})},_createBaseClipPathSVGMarkup:function(h,o){o=o||{};var t=o.reviver,i=o.additionalTransform||"",e=[this.getSvgTransform(!0,i),this.getSvgCommons()].join(""),n=h.indexOf("COMMON_PARTS");return h[n]=e,t?t(h.join("")):h.join("")},_createBaseSVGMarkup:function(h,o){o=o||{};var t=o.noStyle,i=o.reviver,e=t?"":'style="'+this.getSvgStyles()+'" ',n=o.withShadow?'style="'+this.getSvgFilter()+'" ':"",a=this.clipPath,r=this.strokeUniform?'vector-effect="non-scaling-stroke" ':"",l=a&&a.absolutePositioned,f=this.stroke,d=this.fill,g=this.shadow,p,v=[],x,w=h.indexOf("COMMON_PARTS"),F=o.additionalTransform;return a&&(a.clipPathId="CLIPPATH_"+u.Object.__uid++,x='<clipPath id="'+a.clipPathId+`" >
45
+ `+a.toClipPathSVG(i)+`</clipPath>
46
+ `),l&&v.push("<g ",n,this.getSvgCommons(),` >
47
+ `),v.push("<g ",this.getSvgTransform(!1),l?"":n+this.getSvgCommons(),` >
48
+ `),p=[e,r,t?"":this.addPaintOrder()," ",F?'transform="'+F+'" ':""].join(""),h[w]=p,d&&d.toLive&&v.push(d.toSVG(this)),f&&f.toLive&&v.push(f.toSVG(this)),g&&v.push(g.toSVG(this)),a&&v.push(x),v.push(h.join("")),v.push(`</g>
49
+ `),l&&v.push(`</g>
50
+ `),i?i(v.join("")):v.join("")},addPaintOrder:function(){return this.paintFirst!=="fill"?' paint-order="'+this.paintFirst+'" ':""}})})(),(function(){var c=u.util.object.extend,s="stateProperties";function h(t,i,e){var n={},a=!0;e.forEach(function(r){n[r]=t[r]}),c(t[i],n,a)}function o(t,i,e){if(t===i)return!0;if(Array.isArray(t)){if(!Array.isArray(i)||t.length!==i.length)return!1;for(var n=0,a=t.length;n<a;n++)if(!o(t[n],i[n]))return!1;return!0}else if(t&&typeof t=="object"){var r=Object.keys(t),l;if(!i||typeof i!="object"||!e&&r.length!==Object.keys(i).length)return!1;for(var n=0,a=r.length;n<a;n++)if(l=r[n],!(l==="canvas"||l==="group")&&!o(t[l],i[l]))return!1;return!0}}u.util.object.extend(u.Object.prototype,{hasStateChanged:function(t){t=t||s;var i="_"+t;return Object.keys(this[i]).length<this[t].length?!0:!o(this[i],this,!0)},saveState:function(t){var i=t&&t.propertySet||s,e="_"+i;return this[e]?(h(this,e,this[i]),t&&t.stateProperties&&h(this,e,t.stateProperties),this):this.setupState(t)},setupState:function(t){t=t||{};var i=t.propertySet||s;return t.propertySet=i,this["_"+i]={},this.saveState(t),this}})})(),(function(){var c=u.util.degreesToRadians;u.util.object.extend(u.Object.prototype,{_findTargetCorner:function(s,h){if(!this.hasControls||this.group||!this.canvas||this.canvas._activeObject!==this)return!1;var o=s.x,t=s.y,i,e,n=Object.keys(this.oCoords),a=n.length-1,r;for(this.__corner=0;a>=0;a--)if(r=n[a],!!this.isControlVisible(r)&&(e=this._getImageLines(h?this.oCoords[r].touchCorner:this.oCoords[r].corner),i=this._findCrossPoints({x:o,y:t},e),i!==0&&i%2===1))return this.__corner=r,r;return!1},forEachControl:function(s){for(var h in this.controls)s(this.controls[h],h,this)},_setCornerCoords:function(){var s=this.oCoords;for(var h in s){var o=this.controls[h];s[h].corner=o.calcCornerCoords(this.angle,this.cornerSize,s[h].x,s[h].y,!1),s[h].touchCorner=o.calcCornerCoords(this.angle,this.touchCornerSize,s[h].x,s[h].y,!0)}},drawSelectionBackground:function(s){if(!this.selectionBackgroundColor||this.canvas&&!this.canvas.interactive||this.canvas&&this.canvas._activeObject!==this)return this;s.save();var h=this.getCenterPoint(),o=this._calculateCurrentDimensions(),t=this.canvas.viewportTransform;return s.translate(h.x,h.y),s.scale(1/t[0],1/t[3]),s.rotate(c(this.angle)),s.fillStyle=this.selectionBackgroundColor,s.fillRect(-o.x/2,-o.y/2,o.x,o.y),s.restore(),this},drawBorders:function(s,h){h=h||{};var o=this._calculateCurrentDimensions(),t=this.borderScaleFactor,i=o.x+t,e=o.y+t,n=typeof h.hasControls<"u"?h.hasControls:this.hasControls,a=!1;return s.save(),s.strokeStyle=h.borderColor||this.borderColor,this._setLineDash(s,h.borderDashArray||this.borderDashArray),s.strokeRect(-i/2,-e/2,i,e),n&&(s.beginPath(),this.forEachControl(function(r,l,f){r.withConnection&&r.getVisibility(f,l)&&(a=!0,s.moveTo(r.x*i,r.y*e),s.lineTo(r.x*i+r.offsetX,r.y*e+r.offsetY))}),a&&s.stroke()),s.restore(),this},drawBordersInGroup:function(s,h,o){o=o||{};var t=u.util.sizeAfterTransform(this.width,this.height,h),i=this.strokeWidth,e=this.strokeUniform,n=this.borderScaleFactor,a=t.x+i*(e?this.canvas.getZoom():h.scaleX)+n,r=t.y+i*(e?this.canvas.getZoom():h.scaleY)+n;return s.save(),this._setLineDash(s,o.borderDashArray||this.borderDashArray),s.strokeStyle=o.borderColor||this.borderColor,s.strokeRect(-a/2,-r/2,a,r),s.restore(),this},drawControls:function(s,h){h=h||{},s.save();var o=this.canvas.getRetinaScaling(),t,i;return s.setTransform(o,0,0,o,0,0),s.strokeStyle=s.fillStyle=h.cornerColor||this.cornerColor,this.transparentCorners||(s.strokeStyle=h.cornerStrokeColor||this.cornerStrokeColor),this._setLineDash(s,h.cornerDashArray||this.cornerDashArray),this.setCoords(),this.group&&(t=this.group.calcTransformMatrix()),this.forEachControl(function(e,n,a){i=a.oCoords[n],e.getVisibility(a,n)&&(t&&(i=u.util.transformPoint(i,t)),e.render(s,i.x,i.y,h,a))}),s.restore(),this},isControlVisible:function(s){return this.controls[s]&&this.controls[s].getVisibility(this,s)},setControlVisible:function(s,h){return this._controlsVisibility||(this._controlsVisibility={}),this._controlsVisibility[s]=h,this},setControlsVisibility:function(s){s||(s={});for(var h in s)this.setControlVisible(h,s[h]);return this},onDeselect:function(){},onSelect:function(){}})})(),u.util.object.extend(u.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(c,s){s=s||{};var h=function(){},o=s.onComplete||h,t=s.onChange||h,i=this;return u.util.animate({target:this,startValue:c.left,endValue:this.getCenterPoint().x,duration:this.FX_DURATION,onChange:function(e){c.set("left",e),i.requestRenderAll(),t()},onComplete:function(){c.setCoords(),o()}})},fxCenterObjectV:function(c,s){s=s||{};var h=function(){},o=s.onComplete||h,t=s.onChange||h,i=this;return u.util.animate({target:this,startValue:c.top,endValue:this.getCenterPoint().y,duration:this.FX_DURATION,onChange:function(e){c.set("top",e),i.requestRenderAll(),t()},onComplete:function(){c.setCoords(),o()}})},fxRemove:function(c,s){s=s||{};var h=function(){},o=s.onComplete||h,t=s.onChange||h,i=this;return u.util.animate({target:this,startValue:c.opacity,endValue:0,duration:this.FX_DURATION,onChange:function(e){c.set("opacity",e),i.requestRenderAll(),t()},onComplete:function(){i.remove(c),o()}})}}),u.util.object.extend(u.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var c=[],s,h,o=[];for(s in arguments[0])c.push(s);for(var t=0,i=c.length;t<i;t++)s=c[t],h=t!==i-1,o.push(this._animate(s,arguments[0][s],arguments[1],h));return o}else return this._animate.apply(this,arguments)},_animate:function(c,s,h,o){var t=this,i;s=s.toString(),h?h=u.util.object.clone(h):h={},~c.indexOf(".")&&(i=c.split("."));var e=t.colorProperties.indexOf(c)>-1||i&&t.colorProperties.indexOf(i[1])>-1,n=i?this.get(i[0])[i[1]]:this.get(c);"from"in h||(h.from=n),e||(~s.indexOf("=")?s=n+parseFloat(s.replace("=","")):s=parseFloat(s));var a={target:this,startValue:h.from,endValue:s,byValue:h.by,easing:h.easing,duration:h.duration,abort:h.abort&&function(r,l,f){return h.abort.call(t,r,l,f)},onChange:function(r,l,f){i?t[i[0]][i[1]]=r:t.set(c,r),!o&&h.onChange&&h.onChange(r,l,f)},onComplete:function(r,l,f){o||(t.setCoords(),h.onComplete&&h.onComplete(r,l,f))}};return e?u.util.animateColor(a.startValue,a.endValue,a.duration,a):u.util.animate(a)}}),(function(c){var s=c.fabric||(c.fabric={}),h=s.util.object.extend,o=s.util.object.clone,t={x1:1,x2:1,y1:1,y2:1};if(s.Line){s.warn("fabric.Line is already defined");return}s.Line=s.util.createClass(s.Object,{type:"line",x1:0,y1:0,x2:0,y2:0,cacheProperties:s.Object.prototype.cacheProperties.concat("x1","x2","y1","y2"),initialize:function(e,n){e||(e=[0,0,0,0]),this.callSuper("initialize",n),this.set("x1",e[0]),this.set("y1",e[1]),this.set("x2",e[2]),this.set("y2",e[3]),this._setWidthHeight(n)},_setWidthHeight:function(e){e||(e={}),this.width=Math.abs(this.x2-this.x1),this.height=Math.abs(this.y2-this.y1),this.left="left"in e?e.left:this._getLeftToOriginX(),this.top="top"in e?e.top:this._getTopToOriginY()},_set:function(e,n){return this.callSuper("_set",e,n),typeof t[e]<"u"&&this._setWidthHeight(),this},_getLeftToOriginX:i({origin:"originX",axis1:"x1",axis2:"x2",dimension:"width"},{nearest:"left",center:"center",farthest:"right"}),_getTopToOriginY:i({origin:"originY",axis1:"y1",axis2:"y2",dimension:"height"},{nearest:"top",center:"center",farthest:"bottom"}),_render:function(e){e.beginPath();var n=this.calcLinePoints();e.moveTo(n.x1,n.y1),e.lineTo(n.x2,n.y2),e.lineWidth=this.strokeWidth;var a=e.strokeStyle;e.strokeStyle=this.stroke||e.fillStyle,this.stroke&&this._renderStroke(e),e.strokeStyle=a},_findCenterFromElement:function(){return{x:(this.x1+this.x2)/2,y:(this.y1+this.y2)/2}},toObject:function(e){return h(this.callSuper("toObject",e),this.calcLinePoints())},_getNonTransformedDimensions:function(){var e=this.callSuper("_getNonTransformedDimensions");return this.strokeLineCap==="butt"&&(this.width===0&&(e.y-=this.strokeWidth),this.height===0&&(e.x-=this.strokeWidth)),e},calcLinePoints:function(){var e=this.x1<=this.x2?-1:1,n=this.y1<=this.y2?-1:1,a=e*this.width*.5,r=n*this.height*.5,l=e*this.width*-.5,f=n*this.height*-.5;return{x1:a,x2:l,y1:r,y2:f}},_toSVG:function(){var e=this.calcLinePoints();return["<line ","COMMON_PARTS",'x1="',e.x1,'" y1="',e.y1,'" x2="',e.x2,'" y2="',e.y2,`" />
51
+ `]}}),s.Line.ATTRIBUTE_NAMES=s.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),s.Line.fromElement=function(e,n,a){a=a||{};var r=s.parseAttributes(e,s.Line.ATTRIBUTE_NAMES),l=[r.x1||0,r.y1||0,r.x2||0,r.y2||0];n(new s.Line(l,h(r,a)))},s.Line.fromObject=function(e,n){function a(l){delete l.points,n&&n(l)}var r=o(e,!0);r.points=[e.x1,e.y1,e.x2,e.y2],s.Object._fromObject("Line",r,a,"points")};function i(e,n){var a=e.origin,r=e.axis1,l=e.axis2,f=e.dimension,d=n.nearest,g=n.center,p=n.farthest;return function(){switch(this.get(a)){case d:return Math.min(this.get(r),this.get(l));case g:return Math.min(this.get(r),this.get(l))+.5*this.get(f);case p:return Math.max(this.get(r),this.get(l))}}}})(m),(function(c){var s=c.fabric||(c.fabric={}),h=s.util.degreesToRadians;if(s.Circle){s.warn("fabric.Circle is already defined.");return}s.Circle=s.util.createClass(s.Object,{type:"circle",radius:0,startAngle:0,endAngle:360,cacheProperties:s.Object.prototype.cacheProperties.concat("radius","startAngle","endAngle"),_set:function(t,i){return this.callSuper("_set",t,i),t==="radius"&&this.setRadius(i),this},toObject:function(t){return this.callSuper("toObject",["radius","startAngle","endAngle"].concat(t))},_toSVG:function(){var t,i=0,e=0,n=(this.endAngle-this.startAngle)%360;if(n===0)t=["<circle ","COMMON_PARTS",'cx="'+i+'" cy="'+e+'" ','r="',this.radius,`" />
52
+ `];else{var a=h(this.startAngle),r=h(this.endAngle),l=this.radius,f=s.util.cos(a)*l,d=s.util.sin(a)*l,g=s.util.cos(r)*l,p=s.util.sin(r)*l,v=n>180?"1":"0";t=['<path d="M '+f+" "+d," A "+l+" "+l," 0 ",+v+" 1"," "+g+" "+p,'" ',"COMMON_PARTS",` />
53
+ `]}return t},_render:function(t){t.beginPath(),t.arc(0,0,this.radius,h(this.startAngle),h(this.endAngle),!1),this._renderPaintInOrder(t)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(t){return this.radius=t,this.set("width",t*2).set("height",t*2)}}),s.Circle.ATTRIBUTE_NAMES=s.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),s.Circle.fromElement=function(t,i){var e=s.parseAttributes(t,s.Circle.ATTRIBUTE_NAMES);if(!o(e))throw new Error("value of `r` attribute is required and can not be negative");e.left=(e.left||0)-e.radius,e.top=(e.top||0)-e.radius,i(new s.Circle(e))};function o(t){return"radius"in t&&t.radius>=0}s.Circle.fromObject=function(t,i){s.Object._fromObject("Circle",t,i)}})(m),(function(c){var s=c.fabric||(c.fabric={});if(s.Triangle){s.warn("fabric.Triangle is already defined");return}s.Triangle=s.util.createClass(s.Object,{type:"triangle",width:100,height:100,_render:function(h){var o=this.width/2,t=this.height/2;h.beginPath(),h.moveTo(-o,t),h.lineTo(0,-t),h.lineTo(o,t),h.closePath(),this._renderPaintInOrder(h)},_toSVG:function(){var h=this.width/2,o=this.height/2,t=[-h+" "+o,"0 "+-o,h+" "+o].join(",");return["<polygon ","COMMON_PARTS",'points="',t,'" />']}}),s.Triangle.fromObject=function(h,o){return s.Object._fromObject("Triangle",h,o)}})(m),(function(c){var s=c.fabric||(c.fabric={}),h=Math.PI*2;if(s.Ellipse){s.warn("fabric.Ellipse is already defined.");return}s.Ellipse=s.util.createClass(s.Object,{type:"ellipse",rx:0,ry:0,cacheProperties:s.Object.prototype.cacheProperties.concat("rx","ry"),initialize:function(o){this.callSuper("initialize",o),this.set("rx",o&&o.rx||0),this.set("ry",o&&o.ry||0)},_set:function(o,t){switch(this.callSuper("_set",o,t),o){case"rx":this.rx=t,this.set("width",t*2);break;case"ry":this.ry=t,this.set("height",t*2);break}return this},getRx:function(){return this.get("rx")*this.get("scaleX")},getRy:function(){return this.get("ry")*this.get("scaleY")},toObject:function(o){return this.callSuper("toObject",["rx","ry"].concat(o))},_toSVG:function(){return["<ellipse ","COMMON_PARTS",'cx="0" cy="0" ','rx="',this.rx,'" ry="',this.ry,`" />
54
+ `]},_render:function(o){o.beginPath(),o.save(),o.transform(1,0,0,this.ry/this.rx,0,0),o.arc(0,0,this.rx,0,h,!1),o.restore(),this._renderPaintInOrder(o)}}),s.Ellipse.ATTRIBUTE_NAMES=s.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),s.Ellipse.fromElement=function(o,t){var i=s.parseAttributes(o,s.Ellipse.ATTRIBUTE_NAMES);i.left=(i.left||0)-i.rx,i.top=(i.top||0)-i.ry,t(new s.Ellipse(i))},s.Ellipse.fromObject=function(o,t){s.Object._fromObject("Ellipse",o,t)}})(m),(function(c){var s=c.fabric||(c.fabric={}),h=s.util.object.extend;if(s.Rect){s.warn("fabric.Rect is already defined");return}s.Rect=s.util.createClass(s.Object,{stateProperties:s.Object.prototype.stateProperties.concat("rx","ry"),type:"rect",rx:0,ry:0,cacheProperties:s.Object.prototype.cacheProperties.concat("rx","ry"),initialize:function(o){this.callSuper("initialize",o),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(o){var t=this.rx?Math.min(this.rx,this.width/2):0,i=this.ry?Math.min(this.ry,this.height/2):0,e=this.width,n=this.height,a=-this.width/2,r=-this.height/2,l=t!==0||i!==0,f=1-.5522847498;o.beginPath(),o.moveTo(a+t,r),o.lineTo(a+e-t,r),l&&o.bezierCurveTo(a+e-f*t,r,a+e,r+f*i,a+e,r+i),o.lineTo(a+e,r+n-i),l&&o.bezierCurveTo(a+e,r+n-f*i,a+e-f*t,r+n,a+e-t,r+n),o.lineTo(a+t,r+n),l&&o.bezierCurveTo(a+f*t,r+n,a,r+n-f*i,a,r+n-i),o.lineTo(a,r+i),l&&o.bezierCurveTo(a,r+f*i,a+f*t,r,a+t,r),o.closePath(),this._renderPaintInOrder(o)},toObject:function(o){return this.callSuper("toObject",["rx","ry"].concat(o))},_toSVG:function(){var o=-this.width/2,t=-this.height/2;return["<rect ","COMMON_PARTS",'x="',o,'" y="',t,'" rx="',this.rx,'" ry="',this.ry,'" width="',this.width,'" height="',this.height,`" />
55
+ `]}}),s.Rect.ATTRIBUTE_NAMES=s.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),s.Rect.fromElement=function(o,t,i){if(!o)return t(null);i=i||{};var e=s.parseAttributes(o,s.Rect.ATTRIBUTE_NAMES);e.left=e.left||0,e.top=e.top||0,e.height=e.height||0,e.width=e.width||0;var n=new s.Rect(h(i?s.util.object.clone(i):{},e));n.visible=n.visible&&n.width>0&&n.height>0,t(n)},s.Rect.fromObject=function(o,t){return s.Object._fromObject("Rect",o,t)}})(m),(function(c){var s=c.fabric||(c.fabric={}),h=s.util.object.extend,o=s.util.array.min,t=s.util.array.max,i=s.util.toFixed,e=s.util.projectStrokeOnPoints;if(s.Polyline){s.warn("fabric.Polyline is already defined");return}s.Polyline=s.util.createClass(s.Object,{type:"polyline",points:null,exactBoundingBox:!1,cacheProperties:s.Object.prototype.cacheProperties.concat("points"),initialize:function(n,a){a=a||{},this.points=n||[],this.callSuper("initialize",a),this._setPositionDimensions(a)},_projectStrokeOnPoints:function(){return e(this.points,this,!0)},_setPositionDimensions:function(n){var a=this._calcDimensions(n),r,l=this.exactBoundingBox?this.strokeWidth:0;this.width=a.width-l,this.height=a.height-l,n.fromSVG||(r=this.translateToGivenOrigin({x:a.left-this.strokeWidth/2+l/2,y:a.top-this.strokeWidth/2+l/2},"left","top",this.originX,this.originY)),typeof n.left>"u"&&(this.left=n.fromSVG?a.left:r.x),typeof n.top>"u"&&(this.top=n.fromSVG?a.top:r.y),this.pathOffset={x:a.left+this.width/2+l/2,y:a.top+this.height/2+l/2}},_calcDimensions:function(){var n=this.exactBoundingBox?this._projectStrokeOnPoints():this.points,a=o(n,"x")||0,r=o(n,"y")||0,l=t(n,"x")||0,f=t(n,"y")||0,d=l-a,g=f-r;return{left:a,top:r,width:d,height:g}},toObject:function(n){return h(this.callSuper("toObject",n),{points:this.points.concat()})},_toSVG:function(){for(var n=[],a=this.pathOffset.x,r=this.pathOffset.y,l=s.Object.NUM_FRACTION_DIGITS,f=0,d=this.points.length;f<d;f++)n.push(i(this.points[f].x-a,l),",",i(this.points[f].y-r,l)," ");return["<"+this.type+" ","COMMON_PARTS",'points="',n.join(""),`" />
56
+ `]},commonRender:function(n){var a,r=this.points.length,l=this.pathOffset.x,f=this.pathOffset.y;if(!r||isNaN(this.points[r-1].y))return!1;n.beginPath(),n.moveTo(this.points[0].x-l,this.points[0].y-f);for(var d=0;d<r;d++)a=this.points[d],n.lineTo(a.x-l,a.y-f);return!0},_render:function(n){this.commonRender(n)&&this._renderPaintInOrder(n)},complexity:function(){return this.get("points").length}}),s.Polyline.ATTRIBUTE_NAMES=s.SHARED_ATTRIBUTES.concat(),s.Polyline.fromElementGenerator=function(n){return function(a,r,l){if(!a)return r(null);l||(l={});var f=s.parsePointsAttribute(a.getAttribute("points")),d=s.parseAttributes(a,s[n].ATTRIBUTE_NAMES);d.fromSVG=!0,r(new s[n](f,h(d,l)))}},s.Polyline.fromElement=s.Polyline.fromElementGenerator("Polyline"),s.Polyline.fromObject=function(n,a){return s.Object._fromObject("Polyline",n,a,"points")}})(m),(function(c){var s=c.fabric||(c.fabric={}),h=s.util.projectStrokeOnPoints;if(s.Polygon){s.warn("fabric.Polygon is already defined");return}s.Polygon=s.util.createClass(s.Polyline,{type:"polygon",_projectStrokeOnPoints:function(){return h(this.points,this)},_render:function(o){this.commonRender(o)&&(o.closePath(),this._renderPaintInOrder(o))}}),s.Polygon.ATTRIBUTE_NAMES=s.SHARED_ATTRIBUTES.concat(),s.Polygon.fromElement=s.Polyline.fromElementGenerator("Polygon"),s.Polygon.fromObject=function(o,t){s.Object._fromObject("Polygon",o,t,"points")}})(m),(function(c){var s=c.fabric||(c.fabric={}),h=s.util.array.min,o=s.util.array.max,t=s.util.object.extend,i=s.util.object.clone,e=s.util.toFixed;if(s.Path){s.warn("fabric.Path is already defined");return}s.Path=s.util.createClass(s.Object,{type:"path",path:null,cacheProperties:s.Object.prototype.cacheProperties.concat("path","fillRule"),stateProperties:s.Object.prototype.stateProperties.concat("path"),initialize:function(n,a){a=i(a||{}),delete a.path,this.callSuper("initialize",a),this._setPath(n||[],a)},_setPath:function(n,a){this.path=s.util.makePathSimpler(Array.isArray(n)?n:s.util.parsePath(n)),s.Polyline.prototype._setPositionDimensions.call(this,a||{})},_renderPathCommands:function(n){var a,r=0,l=0,f=0,d=0,g=0,p=0,v=-this.pathOffset.x,x=-this.pathOffset.y;n.beginPath();for(var w=0,F=this.path.length;w<F;++w)switch(a=this.path[w],a[0]){case"L":f=a[1],d=a[2],n.lineTo(f+v,d+x);break;case"M":f=a[1],d=a[2],r=f,l=d,n.moveTo(f+v,d+x);break;case"C":f=a[5],d=a[6],g=a[3],p=a[4],n.bezierCurveTo(a[1]+v,a[2]+x,g+v,p+x,f+v,d+x);break;case"Q":n.quadraticCurveTo(a[1]+v,a[2]+x,a[3]+v,a[4]+x),f=a[3],d=a[4],g=a[1],p=a[2];break;case"z":case"Z":f=r,d=l,n.closePath();break}},_render:function(n){this._renderPathCommands(n),this._renderPaintInOrder(n)},toString:function(){return"#<fabric.Path ("+this.complexity()+'): { "top": '+this.top+', "left": '+this.left+" }>"},toObject:function(n){return t(this.callSuper("toObject",n),{path:this.path.map(function(a){return a.slice()})})},toDatalessObject:function(n){var a=this.toObject(["sourcePath"].concat(n));return a.sourcePath&&delete a.path,a},_toSVG:function(){var n=s.util.joinPath(this.path);return["<path ","COMMON_PARTS",'d="',n,'" stroke-linecap="round" ',`/>
57
+ `]},_getOffsetTransform:function(){var n=s.Object.NUM_FRACTION_DIGITS;return" translate("+e(-this.pathOffset.x,n)+", "+e(-this.pathOffset.y,n)+")"},toClipPathSVG:function(n){var a=this._getOffsetTransform();return" "+this._createBaseClipPathSVGMarkup(this._toSVG(),{reviver:n,additionalTransform:a})},toSVG:function(n){var a=this._getOffsetTransform();return this._createBaseSVGMarkup(this._toSVG(),{reviver:n,additionalTransform:a})},complexity:function(){return this.path.length},_calcDimensions:function(){for(var n=[],a=[],r,l=0,f=0,d=0,g=0,p,v=0,x=this.path.length;v<x;++v){switch(r=this.path[v],r[0]){case"L":d=r[1],g=r[2],p=[];break;case"M":d=r[1],g=r[2],l=d,f=g,p=[];break;case"C":p=s.util.getBoundsOfCurve(d,g,r[1],r[2],r[3],r[4],r[5],r[6]),d=r[5],g=r[6];break;case"Q":p=s.util.getBoundsOfCurve(d,g,r[1],r[2],r[1],r[2],r[3],r[4]),d=r[3],g=r[4];break;case"z":case"Z":d=l,g=f;break}p.forEach(function(G){n.push(G.x),a.push(G.y)}),n.push(d),a.push(g)}var w=h(n)||0,F=h(a)||0,Y=o(n)||0,W=o(a)||0,Z=Y-w,Q=W-F;return{left:w,top:F,width:Z,height:Q}}}),s.Path.fromObject=function(n,a){if(typeof n.sourcePath=="string"){var r=n.sourcePath;s.loadSVGFromURL(r,function(l){var f=l[0];f.setOptions(n),n.clipPath?s.util.enlivenObjects([n.clipPath],function(d){f.clipPath=d[0],a&&a(f)}):a&&a(f)})}else s.Object._fromObject("Path",n,a,"path")},s.Path.ATTRIBUTE_NAMES=s.SHARED_ATTRIBUTES.concat(["d"]),s.Path.fromElement=function(n,a,r){var l=s.parseAttributes(n,s.Path.ATTRIBUTE_NAMES);l.fromSVG=!0,a(new s.Path(l.d,t(l,r)))}})(m),(function(c){var s=c.fabric||(c.fabric={}),h=s.util.array.min,o=s.util.array.max;s.Group||(s.Group=s.util.createClass(s.Object,s.Collection,{type:"group",strokeWidth:0,subTargetCheck:!1,cacheProperties:[],useSetOnGroup:!1,initialize:function(t,i,e){i=i||{},this._objects=[],e&&this.callSuper("initialize",i),this._objects=t||[];for(var n=this._objects.length;n--;)this._objects[n].group=this;if(e)this._updateObjectsACoords();else{var a=i&&i.centerPoint;i.originX!==void 0&&(this.originX=i.originX),i.originY!==void 0&&(this.originY=i.originY),a||this._calcBounds(),this._updateObjectsCoords(a),delete i.centerPoint,this.callSuper("initialize",i)}this.setCoords()},_updateObjectsACoords:function(){for(var t=!0,i=this._objects.length;i--;)this._objects[i].setCoords(t)},_updateObjectsCoords:function(t){for(var t=t||this.getCenterPoint(),i=this._objects.length;i--;)this._updateObjectCoords(this._objects[i],t)},_updateObjectCoords:function(t,i){var e=t.left,n=t.top,a=!0;t.set({left:e-i.x,top:n-i.y}),t.group=this,t.setCoords(a)},toString:function(){return"#<fabric.Group: ("+this.complexity()+")>"},addWithUpdate:function(t){var i=!!this.group;return this._restoreObjectsState(),s.util.resetObjectTransform(this),t&&(i&&s.util.removeTransformFromObject(t,this.group.calcTransformMatrix()),this._objects.push(t),t.group=this,t._set("canvas",this.canvas)),this._calcBounds(),this._updateObjectsCoords(),this.dirty=!0,i?this.group.addWithUpdate():this.setCoords(),this},removeWithUpdate:function(t){return this._restoreObjectsState(),s.util.resetObjectTransform(this),this.remove(t),this._calcBounds(),this._updateObjectsCoords(),this.setCoords(),this.dirty=!0,this},_onObjectAdded:function(t){this.dirty=!0,t.group=this,t._set("canvas",this.canvas)},_onObjectRemoved:function(t){this.dirty=!0,delete t.group},_set:function(t,i){var e=this._objects.length;if(this.useSetOnGroup)for(;e--;)this._objects[e].setOnGroup(t,i);if(t==="canvas")for(;e--;)this._objects[e]._set(t,i);s.Object.prototype._set.call(this,t,i)},toObject:function(t){var i=this.includeDefaultValues,e=this._objects.filter(function(a){return!a.excludeFromExport}).map(function(a){var r=a.includeDefaultValues;a.includeDefaultValues=i;var l=a.toObject(t);return a.includeDefaultValues=r,l}),n=s.Object.prototype.toObject.call(this,t);return n.objects=e,n},toDatalessObject:function(t){var i,e=this.sourcePath;if(e)i=e;else{var n=this.includeDefaultValues;i=this._objects.map(function(r){var l=r.includeDefaultValues;r.includeDefaultValues=n;var f=r.toDatalessObject(t);return r.includeDefaultValues=l,f})}var a=s.Object.prototype.toDatalessObject.call(this,t);return a.objects=i,a},render:function(t){this._transformDone=!0,this.callSuper("render",t),this._transformDone=!1},shouldCache:function(){var t=s.Object.prototype.shouldCache.call(this);if(t){for(var i=0,e=this._objects.length;i<e;i++)if(this._objects[i].willDrawShadow())return this.ownCaching=!1,!1}return t},willDrawShadow:function(){if(s.Object.prototype.willDrawShadow.call(this))return!0;for(var t=0,i=this._objects.length;t<i;t++)if(this._objects[t].willDrawShadow())return!0;return!1},isOnACache:function(){return this.ownCaching||this.group&&this.group.isOnACache()},drawObject:function(t){for(var i=0,e=this._objects.length;i<e;i++)this._objects[i].render(t);this._drawClipPath(t,this.clipPath)},isCacheDirty:function(t){if(this.callSuper("isCacheDirty",t))return!0;if(!this.statefullCache)return!1;for(var i=0,e=this._objects.length;i<e;i++)if(this._objects[i].isCacheDirty(!0)){if(this._cacheCanvas){var n=this.cacheWidth/this.zoomX,a=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-n/2,-a/2,n,a)}return!0}return!1},_restoreObjectsState:function(){var t=this.calcOwnMatrix();return this._objects.forEach(function(i){s.util.addTransformToObject(i,t),delete i.group,i.setCoords()}),this},destroy:function(){return this._objects.forEach(function(t){t.set("dirty",!0)}),this._restoreObjectsState()},dispose:function(){this.callSuper("dispose"),this.forEachObject(function(t){t.dispose&&t.dispose()}),this._objects=[]},toActiveSelection:function(){if(this.canvas){var t=this._objects,i=this.canvas;this._objects=[];var e=this.toObject();delete e.objects;var n=new s.ActiveSelection([]);return n.set(e),n.type="activeSelection",i.remove(this),t.forEach(function(a){a.group=n,a.dirty=!0,i.add(a)}),n.canvas=i,n._objects=t,i._activeObject=n,n.setCoords(),n}},ungroupOnCanvas:function(){return this._restoreObjectsState()},setObjectsCoords:function(){var t=!0;return this.forEachObject(function(i){i.setCoords(t)}),this},_calcBounds:function(t){for(var i=[],e=[],n,a,r,l=["tr","br","bl","tl"],f=0,d=this._objects.length,g,p=l.length;f<d;++f){for(n=this._objects[f],r=n.calcACoords(),g=0;g<p;g++)a=l[g],i.push(r[a].x),e.push(r[a].y);n.aCoords=r}this._getBounds(i,e,t)},_getBounds:function(t,i,e){var n=new s.Point(h(t),h(i)),a=new s.Point(o(t),o(i)),r=n.y||0,l=n.x||0,f=a.x-n.x||0,d=a.y-n.y||0;this.width=f,this.height=d,e||this.setPositionByOrigin({x:l,y:r},"left","top")},_toSVG:function(t){for(var i=["<g ","COMMON_PARTS",` >
58
+ `],e=0,n=this._objects.length;e<n;e++)i.push(" ",this._objects[e].toSVG(t));return i.push(`</g>
59
+ `),i},getSvgStyles:function(){var t=typeof this.opacity<"u"&&this.opacity!==1?"opacity: "+this.opacity+";":"",i=this.visible?"":" visibility: hidden;";return[t,this.getSvgFilter(),i].join("")},toClipPathSVG:function(t){for(var i=[],e=0,n=this._objects.length;e<n;e++)i.push(" ",this._objects[e].toClipPathSVG(t));return this._createBaseClipPathSVGMarkup(i,{reviver:t})}}),s.Group.fromObject=function(t,i){var e=t.objects,n=s.util.object.clone(t,!0);if(delete n.objects,typeof e=="string"){s.loadSVGFromURL(e,function(a){var r=s.util.groupSVGElements(a,t,e),l=n.clipPath;delete n.clipPath,r.set(n),l?s.util.enlivenObjects([l],function(f){r.clipPath=f[0],i&&i(r)}):i&&i(r)});return}s.util.enlivenObjects(e,function(a){s.util.enlivenObjectEnlivables(t,n,function(){i&&i(new s.Group(a,n,!0))})})})})(m),(function(c){var s=c.fabric||(c.fabric={});s.ActiveSelection||(s.ActiveSelection=s.util.createClass(s.Group,{type:"activeSelection",initialize:function(h,o){o=o||{},this._objects=h||[];for(var t=this._objects.length;t--;)this._objects[t].group=this;o.originX&&(this.originX=o.originX),o.originY&&(this.originY=o.originY),this._calcBounds(),this._updateObjectsCoords(),s.Object.prototype.initialize.call(this,o),this.setCoords()},toGroup:function(){var h=this._objects.concat();this._objects=[];var o=s.Object.prototype.toObject.call(this),t=new s.Group([]);if(delete o.type,t.set(o),h.forEach(function(e){e.canvas.remove(e),e.group=t}),t._objects=h,!this.canvas)return t;var i=this.canvas;return i.add(t),i._activeObject=t,t.setCoords(),t},onDeselect:function(){return this.destroy(),!1},toString:function(){return"#<fabric.ActiveSelection: ("+this.complexity()+")>"},shouldCache:function(){return!1},isOnACache:function(){return!1},_renderControls:function(h,o,t){h.save(),h.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,this.callSuper("_renderControls",h,o),t=t||{},typeof t.hasControls>"u"&&(t.hasControls=!1),t.forActiveSelection=!0;for(var i=0,e=this._objects.length;i<e;i++)this._objects[i]._renderControls(h,t);h.restore()}}),s.ActiveSelection.fromObject=function(h,o){s.util.enlivenObjects(h.objects,function(t){delete h.objects,o&&o(new s.ActiveSelection(t,h,!0))})})})(m),(function(c){var s=u.util.object.extend;if(c.fabric||(c.fabric={}),c.fabric.Image){u.warn("fabric.Image is already defined.");return}u.Image=u.util.createClass(u.Object,{type:"image",strokeWidth:0,srcFromAttribute:!1,_lastScaleX:1,_lastScaleY:1,_filterScalingX:1,_filterScalingY:1,minimumScaleTrigger:.5,stateProperties:u.Object.prototype.stateProperties.concat("cropX","cropY"),cacheProperties:u.Object.prototype.cacheProperties.concat("cropX","cropY"),cacheKey:"",cropX:0,cropY:0,imageSmoothing:!0,initialize:function(h,o){o||(o={}),this.filters=[],this.cacheKey="texture"+u.Object.__uid++,this.callSuper("initialize",o),this._initElement(h,o)},getElement:function(){return this._element||{}},setElement:function(h,o){return this.removeTexture(this.cacheKey),this.removeTexture(this.cacheKey+"_filtered"),this._element=h,this._originalElement=h,this._initConfig(o),this.filters.length!==0&&this.applyFilters(),this.resizeFilter&&this.applyResizeFilters(),this},removeTexture:function(h){var o=u.filterBackend;o&&o.evictCachesForKey&&o.evictCachesForKey(h)},dispose:function(){this.callSuper("dispose"),this.removeTexture(this.cacheKey),this.removeTexture(this.cacheKey+"_filtered"),this._cacheContext=void 0,["_originalElement","_element","_filteredEl","_cacheCanvas"].forEach((function(h){u.util.cleanUpJsdomNode(this[h]),this[h]=void 0}).bind(this))},getCrossOrigin:function(){return this._originalElement&&(this._originalElement.crossOrigin||null)},getOriginalSize:function(){var h=this.getElement();return{width:h.naturalWidth||h.width,height:h.naturalHeight||h.height}},_stroke:function(h){if(!(!this.stroke||this.strokeWidth===0)){var o=this.width/2,t=this.height/2;h.beginPath(),h.moveTo(-o,-t),h.lineTo(o,-t),h.lineTo(o,t),h.lineTo(-o,t),h.lineTo(-o,-t),h.closePath()}},toObject:function(h){var o=[];this.filters.forEach(function(i){i&&o.push(i.toObject())});var t=s(this.callSuper("toObject",["cropX","cropY"].concat(h)),{src:this.getSrc(),crossOrigin:this.getCrossOrigin(),filters:o});return this.resizeFilter&&(t.resizeFilter=this.resizeFilter.toObject()),t},hasCrop:function(){return this.cropX||this.cropY||this.width<this._element.width||this.height<this._element.height},_toSVG:function(){var h=[],o=[],t,i=this._element,e=-this.width/2,n=-this.height/2,a="",r="";if(!i)return[];if(this.hasCrop()){var l=u.Object.__uid++;h.push('<clipPath id="imageCrop_'+l+`">
60
+ `,' <rect x="'+e+'" y="'+n+'" width="'+this.width+'" height="'+this.height+`" />
61
+ `,`</clipPath>
62
+ `),a=' clip-path="url(#imageCrop_'+l+')" '}if(this.imageSmoothing||(r='" image-rendering="optimizeSpeed'),o.push(" <image ","COMMON_PARTS",'xlink:href="',this.getSvgSrc(!0),'" x="',e-this.cropX,'" y="',n-this.cropY,'" width="',i.width||i.naturalWidth,'" height="',i.height||i.height,r,'"',a,`></image>
63
+ `),this.stroke||this.strokeDashArray){var f=this.fill;this.fill=null,t=[" <rect ",'x="',e,'" y="',n,'" width="',this.width,'" height="',this.height,'" style="',this.getSvgStyles(),`"/>
64
+ `],this.fill=f}return this.paintFirst!=="fill"?h=h.concat(t,o):h=h.concat(o,t),h},getSrc:function(h){var o=h?this._element:this._originalElement;return o?o.toDataURL?o.toDataURL():this.srcFromAttribute?o.getAttribute("src"):o.src:this.src||""},setSrc:function(h,o,t){return u.util.loadImage(h,function(i,e){this.setElement(i,t),this._setWidthHeight(),o&&o(this,e)},this,t&&t.crossOrigin),this},toString:function(){return'#<fabric.Image: { src: "'+this.getSrc()+'" }>'},applyResizeFilters:function(){var h=this.resizeFilter,o=this.minimumScaleTrigger,t=this.getTotalObjectScaling(),i=t.scaleX,e=t.scaleY,n=this._filteredEl||this._originalElement;if(this.group&&this.set("dirty",!0),!h||i>o&&e>o){this._element=n,this._filterScalingX=1,this._filterScalingY=1,this._lastScaleX=i,this._lastScaleY=e;return}u.filterBackend||(u.filterBackend=u.initFilterBackend());var a=u.util.createCanvasElement(),r=this._filteredEl?this.cacheKey+"_filtered":this.cacheKey,l=n.width,f=n.height;a.width=l,a.height=f,this._element=a,this._lastScaleX=h.scaleX=i,this._lastScaleY=h.scaleY=e,u.filterBackend.applyFilters([h],n,l,f,this._element,r),this._filterScalingX=a.width/this._originalElement.width,this._filterScalingY=a.height/this._originalElement.height},applyFilters:function(h){if(h=h||this.filters||[],h=h.filter(function(n){return n&&!n.isNeutralState()}),this.set("dirty",!0),this.removeTexture(this.cacheKey+"_filtered"),h.length===0)return this._element=this._originalElement,this._filteredEl=null,this._filterScalingX=1,this._filterScalingY=1,this;var o=this._originalElement,t=o.naturalWidth||o.width,i=o.naturalHeight||o.height;if(this._element===this._originalElement){var e=u.util.createCanvasElement();e.width=t,e.height=i,this._element=e,this._filteredEl=e}else this._element=this._filteredEl,this._filteredEl.getContext("2d").clearRect(0,0,t,i),this._lastScaleX=1,this._lastScaleY=1;return u.filterBackend||(u.filterBackend=u.initFilterBackend()),u.filterBackend.applyFilters(h,this._originalElement,t,i,this._element,this.cacheKey),(this._originalElement.width!==this._element.width||this._originalElement.height!==this._element.height)&&(this._filterScalingX=this._element.width/this._originalElement.width,this._filterScalingY=this._element.height/this._originalElement.height),this},_render:function(h){u.util.setImageSmoothing(h,this.imageSmoothing),this.isMoving!==!0&&this.resizeFilter&&this._needsResize()&&this.applyResizeFilters(),this._stroke(h),this._renderPaintInOrder(h)},drawCacheOnCanvas:function(h){u.util.setImageSmoothing(h,this.imageSmoothing),u.Object.prototype.drawCacheOnCanvas.call(this,h)},shouldCache:function(){return this.needsItsOwnCache()},_renderFill:function(h){var o=this._element;if(o){var t=this._filterScalingX,i=this._filterScalingY,e=this.width,n=this.height,a=Math.min,r=Math.max,l=r(this.cropX,0),f=r(this.cropY,0),d=o.naturalWidth||o.width,g=o.naturalHeight||o.height,p=l*t,v=f*i,x=a(e*t,d-p),w=a(n*i,g-v),F=-e/2,Y=-n/2,W=a(e,d/t-l),Z=a(n,g/i-f);o&&h.drawImage(o,p,v,x,w,F,Y,W,Z)}},_needsResize:function(){var h=this.getTotalObjectScaling();return h.scaleX!==this._lastScaleX||h.scaleY!==this._lastScaleY},_resetWidthHeight:function(){this.set(this.getOriginalSize())},_initElement:function(h,o){this.setElement(u.util.getById(h),o),u.util.addClass(this.getElement(),u.Image.CSS_CANVAS)},_initConfig:function(h){h||(h={}),this.setOptions(h),this._setWidthHeight(h)},_initFilters:function(h,o){h&&h.length?u.util.enlivenObjects(h,function(t){o&&o(t)},"fabric.Image.filters"):o&&o()},_setWidthHeight:function(h){h||(h={});var o=this.getElement();this.width=h.width||o.naturalWidth||o.width||0,this.height=h.height||o.naturalHeight||o.height||0},parsePreserveAspectRatioAttribute:function(){var h=u.util.parsePreserveAspectRatioAttribute(this.preserveAspectRatio||""),o=this._element.width,t=this._element.height,i=1,e=1,n=0,a=0,r=0,l=0,f,d=this.width,g=this.height,p={width:d,height:g};return h&&(h.alignX!=="none"||h.alignY!=="none")?(h.meetOrSlice==="meet"&&(i=e=u.util.findScaleToFit(this._element,p),f=(d-o*i)/2,h.alignX==="Min"&&(n=-f),h.alignX==="Max"&&(n=f),f=(g-t*e)/2,h.alignY==="Min"&&(a=-f),h.alignY==="Max"&&(a=f)),h.meetOrSlice==="slice"&&(i=e=u.util.findScaleToCover(this._element,p),f=o-d/i,h.alignX==="Mid"&&(r=f/2),h.alignX==="Max"&&(r=f),f=t-g/e,h.alignY==="Mid"&&(l=f/2),h.alignY==="Max"&&(l=f),o=d/i,t=g/e)):(i=d/o,e=g/t),{width:o,height:t,scaleX:i,scaleY:e,offsetLeft:n,offsetTop:a,cropX:r,cropY:l}}}),u.Image.CSS_CANVAS="canvas-img",u.Image.prototype.getSvgSrc=u.Image.prototype.getSrc,u.Image.fromObject=function(h,o){var t=u.util.object.clone(h);u.util.loadImage(t.src,function(i,e){if(e){o&&o(null,!0);return}u.Image.prototype._initFilters.call(t,t.filters,function(n){t.filters=n||[],u.Image.prototype._initFilters.call(t,[t.resizeFilter],function(a){t.resizeFilter=a[0],u.util.enlivenObjectEnlivables(t,t,function(){var r=new u.Image(i,t);o(r,!1)})})})},null,t.crossOrigin)},u.Image.fromURL=function(h,o,t){u.util.loadImage(h,function(i,e){o&&o(new u.Image(i,t),e)},null,t&&t.crossOrigin)},u.Image.ATTRIBUTE_NAMES=u.SHARED_ATTRIBUTES.concat("x y width height preserveAspectRatio xlink:href crossOrigin image-rendering".split(" ")),u.Image.fromElement=function(h,o,t){var i=u.parseAttributes(h,u.Image.ATTRIBUTE_NAMES);u.Image.fromURL(i["xlink:href"],o,s(t?u.util.object.clone(t):{},i))}})(m),u.util.object.extend(u.Object.prototype,{_getAngleValueForStraighten:function(){var c=this.angle%360;return c>0?Math.round((c-1)/90)*90:Math.round(c/90)*90},straighten:function(){return this.rotate(this._getAngleValueForStraighten())},fxStraighten:function(c){c=c||{};var s=function(){},h=c.onComplete||s,o=c.onChange||s,t=this;return u.util.animate({target:this,startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(i){t.rotate(i),o()},onComplete:function(){t.setCoords(),h()}})}}),u.util.object.extend(u.StaticCanvas.prototype,{straightenObject:function(c){return c.straighten(),this.requestRenderAll(),this},fxStraightenObject:function(c){return c.fxStraighten({onChange:this.requestRenderAllBound})}}),(function(){function c(h,o){var t="precision "+o+` float;
65
+ void main(){}`,i=h.createShader(h.FRAGMENT_SHADER);return h.shaderSource(i,t),h.compileShader(i),!!h.getShaderParameter(i,h.COMPILE_STATUS)}u.isWebglSupported=function(h){if(u.isLikelyNode)return!1;h=h||u.WebglFilterBackend.prototype.tileSize;var o=document.createElement("canvas"),t=o.getContext("webgl")||o.getContext("experimental-webgl"),i=!1;if(t){u.maxTextureSize=t.getParameter(t.MAX_TEXTURE_SIZE),i=u.maxTextureSize>=h;for(var e=["highp","mediump","lowp"],n=0;n<3;n++)if(c(t,e[n])){u.webGlPrecision=e[n];break}}return this.isSupported=i,i},u.WebglFilterBackend=s;function s(h){h&&h.tileSize&&(this.tileSize=h.tileSize),this.setupGLContext(this.tileSize,this.tileSize),this.captureGPUInfo()}s.prototype={tileSize:2048,resources:{},setupGLContext:function(h,o){this.dispose(),this.createWebGLCanvas(h,o),this.aPosition=new Float32Array([0,0,0,1,1,0,1,1]),this.chooseFastestCopyGLTo2DMethod(h,o)},chooseFastestCopyGLTo2DMethod:function(h,o){var t=typeof window.performance<"u",i;try{new ImageData(1,1),i=!0}catch{i=!1}var e=typeof ArrayBuffer<"u",n=typeof Uint8ClampedArray<"u";if(t&&i&&e&&n){var a=u.util.createCanvasElement(),r=new ArrayBuffer(h*o*4);if(u.forceGLPutImageData){this.imageBuffer=r,this.copyGLTo2D=st;return}var l={imageBuffer:r,destinationWidth:h,destinationHeight:o,targetCanvas:a},f,d,g;a.width=h,a.height=o,f=window.performance.now(),U.call(l,this.gl,l),d=window.performance.now()-f,f=window.performance.now(),st.call(l,this.gl,l),g=window.performance.now()-f,d>g?(this.imageBuffer=r,this.copyGLTo2D=st):this.copyGLTo2D=U}},createWebGLCanvas:function(h,o){var t=u.util.createCanvasElement();t.width=h,t.height=o;var i={alpha:!0,premultipliedAlpha:!1,depth:!1,stencil:!1,antialias:!1},e=t.getContext("webgl",i);e||(e=t.getContext("experimental-webgl",i)),e&&(e.clearColor(0,0,0,0),this.canvas=t,this.gl=e)},applyFilters:function(h,o,t,i,e,n){var a=this.gl,r;n&&(r=this.getCachedTexture(n,o));var l={originalWidth:o.width||o.originalWidth,originalHeight:o.height||o.originalHeight,sourceWidth:t,sourceHeight:i,destinationWidth:t,destinationHeight:i,context:a,sourceTexture:this.createTexture(a,t,i,!r&&o),targetTexture:this.createTexture(a,t,i),originalTexture:r||this.createTexture(a,t,i,!r&&o),passes:h.length,webgl:!0,aPosition:this.aPosition,programCache:this.programCache,pass:0,filterBackend:this,targetCanvas:e},f=a.createFramebuffer();return a.bindFramebuffer(a.FRAMEBUFFER,f),h.forEach(function(d){d&&d.applyTo(l)}),V(l),this.copyGLTo2D(a,l),a.bindTexture(a.TEXTURE_2D,null),a.deleteTexture(l.sourceTexture),a.deleteTexture(l.targetTexture),a.deleteFramebuffer(f),e.getContext("2d").setTransform(1,0,0,1,0,0),l},dispose:function(){this.canvas&&(this.canvas=null,this.gl=null),this.clearWebGLCaches()},clearWebGLCaches:function(){this.programCache={},this.textureCache={}},createTexture:function(h,o,t,i,e){var n=h.createTexture();return h.bindTexture(h.TEXTURE_2D,n),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MAG_FILTER,e||h.NEAREST),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MIN_FILTER,e||h.NEAREST),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_S,h.CLAMP_TO_EDGE),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_T,h.CLAMP_TO_EDGE),i?h.texImage2D(h.TEXTURE_2D,0,h.RGBA,h.RGBA,h.UNSIGNED_BYTE,i):h.texImage2D(h.TEXTURE_2D,0,h.RGBA,o,t,0,h.RGBA,h.UNSIGNED_BYTE,null),n},getCachedTexture:function(h,o){if(this.textureCache[h])return this.textureCache[h];var t=this.createTexture(this.gl,o.width,o.height,o);return this.textureCache[h]=t,t},evictCachesForKey:function(h){this.textureCache[h]&&(this.gl.deleteTexture(this.textureCache[h]),delete this.textureCache[h])},copyGLTo2D:U,captureGPUInfo:function(){if(this.gpuInfo)return this.gpuInfo;var h=this.gl,o={renderer:"",vendor:""};if(!h)return o;var t=h.getExtension("WEBGL_debug_renderer_info");if(t){var i=h.getParameter(t.UNMASKED_RENDERER_WEBGL),e=h.getParameter(t.UNMASKED_VENDOR_WEBGL);i&&(o.renderer=i.toLowerCase()),e&&(o.vendor=e.toLowerCase())}return this.gpuInfo=o,o}}})();function V(c){var s=c.targetCanvas,h=s.width,o=s.height,t=c.destinationWidth,i=c.destinationHeight;(h!==t||o!==i)&&(s.width=t,s.height=i)}function U(c,s){var h=c.canvas,o=s.targetCanvas,t=o.getContext("2d");t.translate(0,o.height),t.scale(1,-1);var i=h.height-o.height;t.drawImage(h,0,i,o.width,o.height,0,0,o.width,o.height)}function st(c,s){var h=s.targetCanvas,o=h.getContext("2d"),t=s.destinationWidth,i=s.destinationHeight,e=t*i*4,n=new Uint8Array(this.imageBuffer,0,e),a=new Uint8ClampedArray(this.imageBuffer,0,e);c.readPixels(0,0,t,i,c.RGBA,c.UNSIGNED_BYTE,n);var r=new ImageData(a,t,i);o.putImageData(r,0,0)}(function(){var c=function(){};u.Canvas2dFilterBackend=s;function s(){}s.prototype={evictCachesForKey:c,dispose:c,clearWebGLCaches:c,resources:{},applyFilters:function(h,o,t,i,e){var n=e.getContext("2d");n.drawImage(o,0,0,t,i);var a=n.getImageData(0,0,t,i),r=n.getImageData(0,0,t,i),l={sourceWidth:t,sourceHeight:i,imageData:a,originalEl:o,originalImageData:r,canvasEl:e,ctx:n,filterBackend:this};return h.forEach(function(f){f.applyTo(l)}),(l.imageData.width!==t||l.imageData.height!==i)&&(e.width=l.imageData.width,e.height=l.imageData.height),n.putImageData(l.imageData,0,0),l}}})(),u.Image=u.Image||{},u.Image.filters=u.Image.filters||{},u.Image.filters.BaseFilter=u.util.createClass({type:"BaseFilter",vertexSource:`attribute vec2 aPosition;
66
+ varying vec2 vTexCoord;
67
+ void main() {
68
+ vTexCoord = aPosition;
69
+ gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);
70
+ }`,fragmentSource:`precision highp float;
71
+ varying vec2 vTexCoord;
72
+ uniform sampler2D uTexture;
73
+ void main() {
74
+ gl_FragColor = texture2D(uTexture, vTexCoord);
75
+ }`,initialize:function(c){c&&this.setOptions(c)},setOptions:function(c){for(var s in c)this[s]=c[s]},createProgram:function(c,s,h){s=s||this.fragmentSource,h=h||this.vertexSource,u.webGlPrecision!=="highp"&&(s=s.replace(/precision highp float/g,"precision "+u.webGlPrecision+" float"));var o=c.createShader(c.VERTEX_SHADER);if(c.shaderSource(o,h),c.compileShader(o),!c.getShaderParameter(o,c.COMPILE_STATUS))throw new Error("Vertex shader compile error for "+this.type+": "+c.getShaderInfoLog(o));var t=c.createShader(c.FRAGMENT_SHADER);if(c.shaderSource(t,s),c.compileShader(t),!c.getShaderParameter(t,c.COMPILE_STATUS))throw new Error("Fragment shader compile error for "+this.type+": "+c.getShaderInfoLog(t));var i=c.createProgram();if(c.attachShader(i,o),c.attachShader(i,t),c.linkProgram(i),!c.getProgramParameter(i,c.LINK_STATUS))throw new Error('Shader link error for "${this.type}" '+c.getProgramInfoLog(i));var e=this.getAttributeLocations(c,i),n=this.getUniformLocations(c,i)||{};return n.uStepW=c.getUniformLocation(i,"uStepW"),n.uStepH=c.getUniformLocation(i,"uStepH"),{program:i,attributeLocations:e,uniformLocations:n}},getAttributeLocations:function(c,s){return{aPosition:c.getAttribLocation(s,"aPosition")}},getUniformLocations:function(){return{}},sendAttributeData:function(c,s,h){var o=s.aPosition,t=c.createBuffer();c.bindBuffer(c.ARRAY_BUFFER,t),c.enableVertexAttribArray(o),c.vertexAttribPointer(o,2,c.FLOAT,!1,0,0),c.bufferData(c.ARRAY_BUFFER,h,c.STATIC_DRAW)},_setupFrameBuffer:function(c){var s=c.context,h,o;c.passes>1?(h=c.destinationWidth,o=c.destinationHeight,(c.sourceWidth!==h||c.sourceHeight!==o)&&(s.deleteTexture(c.targetTexture),c.targetTexture=c.filterBackend.createTexture(s,h,o)),s.framebufferTexture2D(s.FRAMEBUFFER,s.COLOR_ATTACHMENT0,s.TEXTURE_2D,c.targetTexture,0)):(s.bindFramebuffer(s.FRAMEBUFFER,null),s.finish())},_swapTextures:function(c){c.passes--,c.pass++;var s=c.targetTexture;c.targetTexture=c.sourceTexture,c.sourceTexture=s},isNeutralState:function(){var c=this.mainParameter,s=u.Image.filters[this.type].prototype;if(c)if(Array.isArray(s[c])){for(var h=s[c].length;h--;)if(this[c][h]!==s[c][h])return!1;return!0}else return s[c]===this[c];else return!1},applyTo:function(c){c.webgl?(this._setupFrameBuffer(c),this.applyToWebGL(c),this._swapTextures(c)):this.applyTo2d(c)},retrieveShader:function(c){return c.programCache.hasOwnProperty(this.type)||(c.programCache[this.type]=this.createProgram(c.context)),c.programCache[this.type]},applyToWebGL:function(c){var s=c.context,h=this.retrieveShader(c);c.pass===0&&c.originalTexture?s.bindTexture(s.TEXTURE_2D,c.originalTexture):s.bindTexture(s.TEXTURE_2D,c.sourceTexture),s.useProgram(h.program),this.sendAttributeData(s,h.attributeLocations,c.aPosition),s.uniform1f(h.uniformLocations.uStepW,1/c.sourceWidth),s.uniform1f(h.uniformLocations.uStepH,1/c.sourceHeight),this.sendUniformData(s,h.uniformLocations),s.viewport(0,0,c.destinationWidth,c.destinationHeight),s.drawArrays(s.TRIANGLE_STRIP,0,4)},bindAdditionalTexture:function(c,s,h){c.activeTexture(h),c.bindTexture(c.TEXTURE_2D,s),c.activeTexture(c.TEXTURE0)},unbindAdditionalTexture:function(c,s){c.activeTexture(s),c.bindTexture(c.TEXTURE_2D,null),c.activeTexture(c.TEXTURE0)},getMainParameter:function(){return this[this.mainParameter]},setMainParameter:function(c){this[this.mainParameter]=c},sendUniformData:function(){},createHelpLayer:function(c){if(!c.helpLayer){var s=document.createElement("canvas");s.width=c.sourceWidth,s.height=c.sourceHeight,c.helpLayer=s}},toObject:function(){var c={type:this.type},s=this.mainParameter;return s&&(c[s]=this[s]),c},toJSON:function(){return this.toObject()}}),u.Image.filters.BaseFilter.fromObject=function(c,s){var h=new u.Image.filters[c.type](c);return s&&s(h),h},(function(c){var s=c.fabric||(c.fabric={}),h=s.Image.filters,o=s.util.createClass;h.ColorMatrix=o(h.BaseFilter,{type:"ColorMatrix",fragmentSource:`precision highp float;
76
+ uniform sampler2D uTexture;
77
+ varying vec2 vTexCoord;
78
+ uniform mat4 uColorMatrix;
79
+ uniform vec4 uConstants;
80
+ void main() {
81
+ vec4 color = texture2D(uTexture, vTexCoord);
82
+ color *= uColorMatrix;
83
+ color += uConstants;
84
+ gl_FragColor = color;
85
+ }`,matrix:[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],mainParameter:"matrix",colorsOnly:!0,initialize:function(t){this.callSuper("initialize",t),this.matrix=this.matrix.slice(0)},applyTo2d:function(t){var i=t.imageData,e=i.data,n=e.length,a=this.matrix,r,l,f,d,g,p=this.colorsOnly;for(g=0;g<n;g+=4)r=e[g],l=e[g+1],f=e[g+2],p?(e[g]=r*a[0]+l*a[1]+f*a[2]+a[4]*255,e[g+1]=r*a[5]+l*a[6]+f*a[7]+a[9]*255,e[g+2]=r*a[10]+l*a[11]+f*a[12]+a[14]*255):(d=e[g+3],e[g]=r*a[0]+l*a[1]+f*a[2]+d*a[3]+a[4]*255,e[g+1]=r*a[5]+l*a[6]+f*a[7]+d*a[8]+a[9]*255,e[g+2]=r*a[10]+l*a[11]+f*a[12]+d*a[13]+a[14]*255,e[g+3]=r*a[15]+l*a[16]+f*a[17]+d*a[18]+a[19]*255)},getUniformLocations:function(t,i){return{uColorMatrix:t.getUniformLocation(i,"uColorMatrix"),uConstants:t.getUniformLocation(i,"uConstants")}},sendUniformData:function(t,i){var e=this.matrix,n=[e[0],e[1],e[2],e[3],e[5],e[6],e[7],e[8],e[10],e[11],e[12],e[13],e[15],e[16],e[17],e[18]],a=[e[4],e[9],e[14],e[19]];t.uniformMatrix4fv(i.uColorMatrix,!1,n),t.uniform4fv(i.uConstants,a)}}),s.Image.filters.ColorMatrix.fromObject=s.Image.filters.BaseFilter.fromObject})(m),(function(c){var s=c.fabric||(c.fabric={}),h=s.Image.filters,o=s.util.createClass;h.Brightness=o(h.BaseFilter,{type:"Brightness",fragmentSource:`precision highp float;
86
+ uniform sampler2D uTexture;
87
+ uniform float uBrightness;
88
+ varying vec2 vTexCoord;
89
+ void main() {
90
+ vec4 color = texture2D(uTexture, vTexCoord);
91
+ color.rgb += uBrightness;
92
+ gl_FragColor = color;
93
+ }`,brightness:0,mainParameter:"brightness",applyTo2d:function(t){if(this.brightness!==0){var i=t.imageData,e=i.data,n,a=e.length,r=Math.round(this.brightness*255);for(n=0;n<a;n+=4)e[n]=e[n]+r,e[n+1]=e[n+1]+r,e[n+2]=e[n+2]+r}},getUniformLocations:function(t,i){return{uBrightness:t.getUniformLocation(i,"uBrightness")}},sendUniformData:function(t,i){t.uniform1f(i.uBrightness,this.brightness)}}),s.Image.filters.Brightness.fromObject=s.Image.filters.BaseFilter.fromObject})(m),(function(c){var s=c.fabric||(c.fabric={}),h=s.util.object.extend,o=s.Image.filters,t=s.util.createClass;o.Convolute=t(o.BaseFilter,{type:"Convolute",opaque:!1,matrix:[0,0,0,0,1,0,0,0,0],fragmentSource:{Convolute_3_1:`precision highp float;
94
+ uniform sampler2D uTexture;
95
+ uniform float uMatrix[9];
96
+ uniform float uStepW;
97
+ uniform float uStepH;
98
+ varying vec2 vTexCoord;
99
+ void main() {
100
+ vec4 color = vec4(0, 0, 0, 0);
101
+ for (float h = 0.0; h < 3.0; h+=1.0) {
102
+ for (float w = 0.0; w < 3.0; w+=1.0) {
103
+ vec2 matrixPos = vec2(uStepW * (w - 1), uStepH * (h - 1));
104
+ color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 3.0 + w)];
105
+ }
106
+ }
107
+ gl_FragColor = color;
108
+ }`,Convolute_3_0:`precision highp float;
109
+ uniform sampler2D uTexture;
110
+ uniform float uMatrix[9];
111
+ uniform float uStepW;
112
+ uniform float uStepH;
113
+ varying vec2 vTexCoord;
114
+ void main() {
115
+ vec4 color = vec4(0, 0, 0, 1);
116
+ for (float h = 0.0; h < 3.0; h+=1.0) {
117
+ for (float w = 0.0; w < 3.0; w+=1.0) {
118
+ vec2 matrixPos = vec2(uStepW * (w - 1.0), uStepH * (h - 1.0));
119
+ color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 3.0 + w)];
120
+ }
121
+ }
122
+ float alpha = texture2D(uTexture, vTexCoord).a;
123
+ gl_FragColor = color;
124
+ gl_FragColor.a = alpha;
125
+ }`,Convolute_5_1:`precision highp float;
126
+ uniform sampler2D uTexture;
127
+ uniform float uMatrix[25];
128
+ uniform float uStepW;
129
+ uniform float uStepH;
130
+ varying vec2 vTexCoord;
131
+ void main() {
132
+ vec4 color = vec4(0, 0, 0, 0);
133
+ for (float h = 0.0; h < 5.0; h+=1.0) {
134
+ for (float w = 0.0; w < 5.0; w+=1.0) {
135
+ vec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));
136
+ color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 5.0 + w)];
137
+ }
138
+ }
139
+ gl_FragColor = color;
140
+ }`,Convolute_5_0:`precision highp float;
141
+ uniform sampler2D uTexture;
142
+ uniform float uMatrix[25];
143
+ uniform float uStepW;
144
+ uniform float uStepH;
145
+ varying vec2 vTexCoord;
146
+ void main() {
147
+ vec4 color = vec4(0, 0, 0, 1);
148
+ for (float h = 0.0; h < 5.0; h+=1.0) {
149
+ for (float w = 0.0; w < 5.0; w+=1.0) {
150
+ vec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));
151
+ color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 5.0 + w)];
152
+ }
153
+ }
154
+ float alpha = texture2D(uTexture, vTexCoord).a;
155
+ gl_FragColor = color;
156
+ gl_FragColor.a = alpha;
157
+ }`,Convolute_7_1:`precision highp float;
158
+ uniform sampler2D uTexture;
159
+ uniform float uMatrix[49];
160
+ uniform float uStepW;
161
+ uniform float uStepH;
162
+ varying vec2 vTexCoord;
163
+ void main() {
164
+ vec4 color = vec4(0, 0, 0, 0);
165
+ for (float h = 0.0; h < 7.0; h+=1.0) {
166
+ for (float w = 0.0; w < 7.0; w+=1.0) {
167
+ vec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));
168
+ color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 7.0 + w)];
169
+ }
170
+ }
171
+ gl_FragColor = color;
172
+ }`,Convolute_7_0:`precision highp float;
173
+ uniform sampler2D uTexture;
174
+ uniform float uMatrix[49];
175
+ uniform float uStepW;
176
+ uniform float uStepH;
177
+ varying vec2 vTexCoord;
178
+ void main() {
179
+ vec4 color = vec4(0, 0, 0, 1);
180
+ for (float h = 0.0; h < 7.0; h+=1.0) {
181
+ for (float w = 0.0; w < 7.0; w+=1.0) {
182
+ vec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));
183
+ color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 7.0 + w)];
184
+ }
185
+ }
186
+ float alpha = texture2D(uTexture, vTexCoord).a;
187
+ gl_FragColor = color;
188
+ gl_FragColor.a = alpha;
189
+ }`,Convolute_9_1:`precision highp float;
190
+ uniform sampler2D uTexture;
191
+ uniform float uMatrix[81];
192
+ uniform float uStepW;
193
+ uniform float uStepH;
194
+ varying vec2 vTexCoord;
195
+ void main() {
196
+ vec4 color = vec4(0, 0, 0, 0);
197
+ for (float h = 0.0; h < 9.0; h+=1.0) {
198
+ for (float w = 0.0; w < 9.0; w+=1.0) {
199
+ vec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));
200
+ color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 9.0 + w)];
201
+ }
202
+ }
203
+ gl_FragColor = color;
204
+ }`,Convolute_9_0:`precision highp float;
205
+ uniform sampler2D uTexture;
206
+ uniform float uMatrix[81];
207
+ uniform float uStepW;
208
+ uniform float uStepH;
209
+ varying vec2 vTexCoord;
210
+ void main() {
211
+ vec4 color = vec4(0, 0, 0, 1);
212
+ for (float h = 0.0; h < 9.0; h+=1.0) {
213
+ for (float w = 0.0; w < 9.0; w+=1.0) {
214
+ vec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));
215
+ color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 9.0 + w)];
216
+ }
217
+ }
218
+ float alpha = texture2D(uTexture, vTexCoord).a;
219
+ gl_FragColor = color;
220
+ gl_FragColor.a = alpha;
221
+ }`},retrieveShader:function(i){var e=Math.sqrt(this.matrix.length),n=this.type+"_"+e+"_"+(this.opaque?1:0),a=this.fragmentSource[n];return i.programCache.hasOwnProperty(n)||(i.programCache[n]=this.createProgram(i.context,a)),i.programCache[n]},applyTo2d:function(i){var e=i.imageData,n=e.data,a=this.matrix,r=Math.round(Math.sqrt(a.length)),l=Math.floor(r/2),f=e.width,d=e.height,g=i.ctx.createImageData(f,d),p=g.data,v=this.opaque?1:0,x,w,F,Y,W,Z,Q,G,q,J,et,tt,_;for(et=0;et<d;et++)for(J=0;J<f;J++){for(W=(et*f+J)*4,x=0,w=0,F=0,Y=0,_=0;_<r;_++)for(tt=0;tt<r;tt++)Q=et+_-l,Z=J+tt-l,!(Q<0||Q>=d||Z<0||Z>=f)&&(G=(Q*f+Z)*4,q=a[_*r+tt],x+=n[G]*q,w+=n[G+1]*q,F+=n[G+2]*q,v||(Y+=n[G+3]*q));p[W]=x,p[W+1]=w,p[W+2]=F,v?p[W+3]=n[W+3]:p[W+3]=Y}i.imageData=g},getUniformLocations:function(i,e){return{uMatrix:i.getUniformLocation(e,"uMatrix"),uOpaque:i.getUniformLocation(e,"uOpaque"),uHalfSize:i.getUniformLocation(e,"uHalfSize"),uSize:i.getUniformLocation(e,"uSize")}},sendUniformData:function(i,e){i.uniform1fv(e.uMatrix,this.matrix)},toObject:function(){return h(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),s.Image.filters.Convolute.fromObject=s.Image.filters.BaseFilter.fromObject})(m),(function(c){var s=c.fabric||(c.fabric={}),h=s.Image.filters,o=s.util.createClass;h.Grayscale=o(h.BaseFilter,{type:"Grayscale",fragmentSource:{average:`precision highp float;
222
+ uniform sampler2D uTexture;
223
+ varying vec2 vTexCoord;
224
+ void main() {
225
+ vec4 color = texture2D(uTexture, vTexCoord);
226
+ float average = (color.r + color.b + color.g) / 3.0;
227
+ gl_FragColor = vec4(average, average, average, color.a);
228
+ }`,lightness:`precision highp float;
229
+ uniform sampler2D uTexture;
230
+ uniform int uMode;
231
+ varying vec2 vTexCoord;
232
+ void main() {
233
+ vec4 col = texture2D(uTexture, vTexCoord);
234
+ float average = (max(max(col.r, col.g),col.b) + min(min(col.r, col.g),col.b)) / 2.0;
235
+ gl_FragColor = vec4(average, average, average, col.a);
236
+ }`,luminosity:`precision highp float;
237
+ uniform sampler2D uTexture;
238
+ uniform int uMode;
239
+ varying vec2 vTexCoord;
240
+ void main() {
241
+ vec4 col = texture2D(uTexture, vTexCoord);
242
+ float average = 0.21 * col.r + 0.72 * col.g + 0.07 * col.b;
243
+ gl_FragColor = vec4(average, average, average, col.a);
244
+ }`},mode:"average",mainParameter:"mode",applyTo2d:function(t){var i=t.imageData,e=i.data,n,a=e.length,r,l=this.mode;for(n=0;n<a;n+=4)l==="average"?r=(e[n]+e[n+1]+e[n+2])/3:l==="lightness"?r=(Math.min(e[n],e[n+1],e[n+2])+Math.max(e[n],e[n+1],e[n+2]))/2:l==="luminosity"&&(r=.21*e[n]+.72*e[n+1]+.07*e[n+2]),e[n]=r,e[n+1]=r,e[n+2]=r},retrieveShader:function(t){var i=this.type+"_"+this.mode;if(!t.programCache.hasOwnProperty(i)){var e=this.fragmentSource[this.mode];t.programCache[i]=this.createProgram(t.context,e)}return t.programCache[i]},getUniformLocations:function(t,i){return{uMode:t.getUniformLocation(i,"uMode")}},sendUniformData:function(t,i){var e=1;t.uniform1i(i.uMode,e)},isNeutralState:function(){return!1}}),s.Image.filters.Grayscale.fromObject=s.Image.filters.BaseFilter.fromObject})(m),(function(c){var s=c.fabric||(c.fabric={}),h=s.Image.filters,o=s.util.createClass;h.Invert=o(h.BaseFilter,{type:"Invert",fragmentSource:`precision highp float;
245
+ uniform sampler2D uTexture;
246
+ uniform int uInvert;
247
+ varying vec2 vTexCoord;
248
+ void main() {
249
+ vec4 color = texture2D(uTexture, vTexCoord);
250
+ if (uInvert == 1) {
251
+ gl_FragColor = vec4(1.0 - color.r,1.0 -color.g,1.0 -color.b,color.a);
252
+ } else {
253
+ gl_FragColor = color;
254
+ }
255
+ }`,invert:!0,mainParameter:"invert",applyTo2d:function(t){var i=t.imageData,e=i.data,n,a=e.length;for(n=0;n<a;n+=4)e[n]=255-e[n],e[n+1]=255-e[n+1],e[n+2]=255-e[n+2]},isNeutralState:function(){return!this.invert},getUniformLocations:function(t,i){return{uInvert:t.getUniformLocation(i,"uInvert")}},sendUniformData:function(t,i){t.uniform1i(i.uInvert,this.invert)}}),s.Image.filters.Invert.fromObject=s.Image.filters.BaseFilter.fromObject})(m),(function(c){var s=c.fabric||(c.fabric={}),h=s.util.object.extend,o=s.Image.filters,t=s.util.createClass;o.Noise=t(o.BaseFilter,{type:"Noise",fragmentSource:`precision highp float;
256
+ uniform sampler2D uTexture;
257
+ uniform float uStepH;
258
+ uniform float uNoise;
259
+ uniform float uSeed;
260
+ varying vec2 vTexCoord;
261
+ float rand(vec2 co, float seed, float vScale) {
262
+ return fract(sin(dot(co.xy * vScale ,vec2(12.9898 , 78.233))) * 43758.5453 * (seed + 0.01) / 2.0);
263
+ }
264
+ void main() {
265
+ vec4 color = texture2D(uTexture, vTexCoord);
266
+ color.rgb += (0.5 - rand(vTexCoord, uSeed, 0.1 / uStepH)) * uNoise;
267
+ gl_FragColor = color;
268
+ }`,mainParameter:"noise",noise:0,applyTo2d:function(i){if(this.noise!==0){var e=i.imageData,n=e.data,a,r=n.length,l=this.noise,f;for(a=0,r=n.length;a<r;a+=4)f=(.5-Math.random())*l,n[a]+=f,n[a+1]+=f,n[a+2]+=f}},getUniformLocations:function(i,e){return{uNoise:i.getUniformLocation(e,"uNoise"),uSeed:i.getUniformLocation(e,"uSeed")}},sendUniformData:function(i,e){i.uniform1f(e.uNoise,this.noise/255),i.uniform1f(e.uSeed,Math.random())},toObject:function(){return h(this.callSuper("toObject"),{noise:this.noise})}}),s.Image.filters.Noise.fromObject=s.Image.filters.BaseFilter.fromObject})(m),(function(c){var s=c.fabric||(c.fabric={}),h=s.Image.filters,o=s.util.createClass;h.Pixelate=o(h.BaseFilter,{type:"Pixelate",blocksize:4,mainParameter:"blocksize",fragmentSource:`precision highp float;
269
+ uniform sampler2D uTexture;
270
+ uniform float uBlocksize;
271
+ uniform float uStepW;
272
+ uniform float uStepH;
273
+ varying vec2 vTexCoord;
274
+ void main() {
275
+ float blockW = uBlocksize * uStepW;
276
+ float blockH = uBlocksize * uStepW;
277
+ int posX = int(vTexCoord.x / blockW);
278
+ int posY = int(vTexCoord.y / blockH);
279
+ float fposX = float(posX);
280
+ float fposY = float(posY);
281
+ vec2 squareCoords = vec2(fposX * blockW, fposY * blockH);
282
+ vec4 color = texture2D(uTexture, squareCoords);
283
+ gl_FragColor = color;
284
+ }`,applyTo2d:function(t){var i=t.imageData,e=i.data,n=i.height,a=i.width,r,l,f,d,g,p,v,x,w,F,Y;for(l=0;l<n;l+=this.blocksize)for(f=0;f<a;f+=this.blocksize)for(r=l*4*a+f*4,d=e[r],g=e[r+1],p=e[r+2],v=e[r+3],F=Math.min(l+this.blocksize,n),Y=Math.min(f+this.blocksize,a),x=l;x<F;x++)for(w=f;w<Y;w++)r=x*4*a+w*4,e[r]=d,e[r+1]=g,e[r+2]=p,e[r+3]=v},isNeutralState:function(){return this.blocksize===1},getUniformLocations:function(t,i){return{uBlocksize:t.getUniformLocation(i,"uBlocksize"),uStepW:t.getUniformLocation(i,"uStepW"),uStepH:t.getUniformLocation(i,"uStepH")}},sendUniformData:function(t,i){t.uniform1f(i.uBlocksize,this.blocksize)}}),s.Image.filters.Pixelate.fromObject=s.Image.filters.BaseFilter.fromObject})(m),(function(c){var s=c.fabric||(c.fabric={}),h=s.util.object.extend,o=s.Image.filters,t=s.util.createClass;o.RemoveColor=t(o.BaseFilter,{type:"RemoveColor",color:"#FFFFFF",fragmentSource:`precision highp float;
285
+ uniform sampler2D uTexture;
286
+ uniform vec4 uLow;
287
+ uniform vec4 uHigh;
288
+ varying vec2 vTexCoord;
289
+ void main() {
290
+ gl_FragColor = texture2D(uTexture, vTexCoord);
291
+ if(all(greaterThan(gl_FragColor.rgb,uLow.rgb)) && all(greaterThan(uHigh.rgb,gl_FragColor.rgb))) {
292
+ gl_FragColor.a = 0.0;
293
+ }
294
+ }`,distance:.02,useAlpha:!1,applyTo2d:function(i){var e=i.imageData,n=e.data,a,r=this.distance*255,l,f,d,g=new s.Color(this.color).getSource(),p=[g[0]-r,g[1]-r,g[2]-r],v=[g[0]+r,g[1]+r,g[2]+r];for(a=0;a<n.length;a+=4)l=n[a],f=n[a+1],d=n[a+2],l>p[0]&&f>p[1]&&d>p[2]&&l<v[0]&&f<v[1]&&d<v[2]&&(n[a+3]=0)},getUniformLocations:function(i,e){return{uLow:i.getUniformLocation(e,"uLow"),uHigh:i.getUniformLocation(e,"uHigh")}},sendUniformData:function(i,e){var n=new s.Color(this.color).getSource(),a=parseFloat(this.distance),r=[0+n[0]/255-a,0+n[1]/255-a,0+n[2]/255-a,1],l=[n[0]/255+a,n[1]/255+a,n[2]/255+a,1];i.uniform4fv(e.uLow,r),i.uniform4fv(e.uHigh,l)},toObject:function(){return h(this.callSuper("toObject"),{color:this.color,distance:this.distance})}}),s.Image.filters.RemoveColor.fromObject=s.Image.filters.BaseFilter.fromObject})(m),(function(c){var s=c.fabric||(c.fabric={}),h=s.Image.filters,o=s.util.createClass,t={Brownie:[.5997,.34553,-.27082,0,.186,-.0377,.86095,.15059,0,-.1449,.24113,-.07441,.44972,0,-.02965,0,0,0,1,0],Vintage:[.62793,.32021,-.03965,0,.03784,.02578,.64411,.03259,0,.02926,.0466,-.08512,.52416,0,.02023,0,0,0,1,0],Kodachrome:[1.12855,-.39673,-.03992,0,.24991,-.16404,1.08352,-.05498,0,.09698,-.16786,-.56034,1.60148,0,.13972,0,0,0,1,0],Technicolor:[1.91252,-.85453,-.09155,0,.04624,-.30878,1.76589,-.10601,0,-.27589,-.2311,-.75018,1.84759,0,.12137,0,0,0,1,0],Polaroid:[1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0],Sepia:[.393,.769,.189,0,0,.349,.686,.168,0,0,.272,.534,.131,0,0,0,0,0,1,0],BlackWhite:[1.5,1.5,1.5,0,-1,1.5,1.5,1.5,0,-1,1.5,1.5,1.5,0,-1,0,0,0,1,0]};for(var i in t)h[i]=o(h.ColorMatrix,{type:i,matrix:t[i],mainParameter:!1,colorsOnly:!0}),s.Image.filters[i].fromObject=s.Image.filters.BaseFilter.fromObject})(m),(function(c){var s=c.fabric,h=s.Image.filters,o=s.util.createClass;h.BlendColor=o(h.BaseFilter,{type:"BlendColor",color:"#F95C63",mode:"multiply",alpha:1,fragmentSource:{multiply:`gl_FragColor.rgb *= uColor.rgb;
295
+ `,screen:`gl_FragColor.rgb = 1.0 - (1.0 - gl_FragColor.rgb) * (1.0 - uColor.rgb);
296
+ `,add:`gl_FragColor.rgb += uColor.rgb;
297
+ `,diff:`gl_FragColor.rgb = abs(gl_FragColor.rgb - uColor.rgb);
298
+ `,subtract:`gl_FragColor.rgb -= uColor.rgb;
299
+ `,lighten:`gl_FragColor.rgb = max(gl_FragColor.rgb, uColor.rgb);
300
+ `,darken:`gl_FragColor.rgb = min(gl_FragColor.rgb, uColor.rgb);
301
+ `,exclusion:`gl_FragColor.rgb += uColor.rgb - 2.0 * (uColor.rgb * gl_FragColor.rgb);
302
+ `,overlay:`if (uColor.r < 0.5) {
303
+ gl_FragColor.r *= 2.0 * uColor.r;
304
+ } else {
305
+ gl_FragColor.r = 1.0 - 2.0 * (1.0 - gl_FragColor.r) * (1.0 - uColor.r);
306
+ }
307
+ if (uColor.g < 0.5) {
308
+ gl_FragColor.g *= 2.0 * uColor.g;
309
+ } else {
310
+ gl_FragColor.g = 1.0 - 2.0 * (1.0 - gl_FragColor.g) * (1.0 - uColor.g);
311
+ }
312
+ if (uColor.b < 0.5) {
313
+ gl_FragColor.b *= 2.0 * uColor.b;
314
+ } else {
315
+ gl_FragColor.b = 1.0 - 2.0 * (1.0 - gl_FragColor.b) * (1.0 - uColor.b);
316
+ }
317
+ `,tint:`gl_FragColor.rgb *= (1.0 - uColor.a);
318
+ gl_FragColor.rgb += uColor.rgb;
319
+ `},buildSource:function(t){return`precision highp float;
320
+ uniform sampler2D uTexture;
321
+ uniform vec4 uColor;
322
+ varying vec2 vTexCoord;
323
+ void main() {
324
+ vec4 color = texture2D(uTexture, vTexCoord);
325
+ gl_FragColor = color;
326
+ if (color.a > 0.0) {
327
+ `+this.fragmentSource[t]+`}
328
+ }`},retrieveShader:function(t){var i=this.type+"_"+this.mode,e;return t.programCache.hasOwnProperty(i)||(e=this.buildSource(this.mode),t.programCache[i]=this.createProgram(t.context,e)),t.programCache[i]},applyTo2d:function(t){var i=t.imageData,e=i.data,n=e.length,a,r,l,f,d,g,p,v=1-this.alpha;p=new s.Color(this.color).getSource(),a=p[0]*this.alpha,r=p[1]*this.alpha,l=p[2]*this.alpha;for(var x=0;x<n;x+=4)switch(f=e[x],d=e[x+1],g=e[x+2],this.mode){case"multiply":e[x]=f*a/255,e[x+1]=d*r/255,e[x+2]=g*l/255;break;case"screen":e[x]=255-(255-f)*(255-a)/255,e[x+1]=255-(255-d)*(255-r)/255,e[x+2]=255-(255-g)*(255-l)/255;break;case"add":e[x]=f+a,e[x+1]=d+r,e[x+2]=g+l;break;case"diff":case"difference":e[x]=Math.abs(f-a),e[x+1]=Math.abs(d-r),e[x+2]=Math.abs(g-l);break;case"subtract":e[x]=f-a,e[x+1]=d-r,e[x+2]=g-l;break;case"darken":e[x]=Math.min(f,a),e[x+1]=Math.min(d,r),e[x+2]=Math.min(g,l);break;case"lighten":e[x]=Math.max(f,a),e[x+1]=Math.max(d,r),e[x+2]=Math.max(g,l);break;case"overlay":e[x]=a<128?2*f*a/255:255-2*(255-f)*(255-a)/255,e[x+1]=r<128?2*d*r/255:255-2*(255-d)*(255-r)/255,e[x+2]=l<128?2*g*l/255:255-2*(255-g)*(255-l)/255;break;case"exclusion":e[x]=a+f-2*a*f/255,e[x+1]=r+d-2*r*d/255,e[x+2]=l+g-2*l*g/255;break;case"tint":e[x]=a+f*v,e[x+1]=r+d*v,e[x+2]=l+g*v}},getUniformLocations:function(t,i){return{uColor:t.getUniformLocation(i,"uColor")}},sendUniformData:function(t,i){var e=new s.Color(this.color).getSource();e[0]=this.alpha*e[0]/255,e[1]=this.alpha*e[1]/255,e[2]=this.alpha*e[2]/255,e[3]=this.alpha,t.uniform4fv(i.uColor,e)},toObject:function(){return{type:this.type,color:this.color,mode:this.mode,alpha:this.alpha}}}),s.Image.filters.BlendColor.fromObject=s.Image.filters.BaseFilter.fromObject})(m),(function(c){var s=c.fabric,h=s.Image.filters,o=s.util.createClass;h.BlendImage=o(h.BaseFilter,{type:"BlendImage",image:null,mode:"multiply",alpha:1,vertexSource:`attribute vec2 aPosition;
329
+ varying vec2 vTexCoord;
330
+ varying vec2 vTexCoord2;
331
+ uniform mat3 uTransformMatrix;
332
+ void main() {
333
+ vTexCoord = aPosition;
334
+ vTexCoord2 = (uTransformMatrix * vec3(aPosition, 1.0)).xy;
335
+ gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);
336
+ }`,fragmentSource:{multiply:`precision highp float;
337
+ uniform sampler2D uTexture;
338
+ uniform sampler2D uImage;
339
+ uniform vec4 uColor;
340
+ varying vec2 vTexCoord;
341
+ varying vec2 vTexCoord2;
342
+ void main() {
343
+ vec4 color = texture2D(uTexture, vTexCoord);
344
+ vec4 color2 = texture2D(uImage, vTexCoord2);
345
+ color.rgba *= color2.rgba;
346
+ gl_FragColor = color;
347
+ }`,mask:`precision highp float;
348
+ uniform sampler2D uTexture;
349
+ uniform sampler2D uImage;
350
+ uniform vec4 uColor;
351
+ varying vec2 vTexCoord;
352
+ varying vec2 vTexCoord2;
353
+ void main() {
354
+ vec4 color = texture2D(uTexture, vTexCoord);
355
+ vec4 color2 = texture2D(uImage, vTexCoord2);
356
+ color.a = color2.a;
357
+ gl_FragColor = color;
358
+ }`},retrieveShader:function(t){var i=this.type+"_"+this.mode,e=this.fragmentSource[this.mode];return t.programCache.hasOwnProperty(i)||(t.programCache[i]=this.createProgram(t.context,e)),t.programCache[i]},applyToWebGL:function(t){var i=t.context,e=this.createTexture(t.filterBackend,this.image);this.bindAdditionalTexture(i,e,i.TEXTURE1),this.callSuper("applyToWebGL",t),this.unbindAdditionalTexture(i,i.TEXTURE1)},createTexture:function(t,i){return t.getCachedTexture(i.cacheKey,i._element)},calculateMatrix:function(){var t=this.image,i=t._element.width,e=t._element.height;return[1/t.scaleX,0,0,0,1/t.scaleY,0,-t.left/i,-t.top/e,1]},applyTo2d:function(t){var i=t.imageData,e=t.filterBackend.resources,n=i.data,a=n.length,r=i.width,l=i.height,f,d,g,p,v,x,w,F,Y,W,Z=this.image,Q;e.blendImage||(e.blendImage=s.util.createCanvasElement()),Y=e.blendImage,W=Y.getContext("2d"),Y.width!==r||Y.height!==l?(Y.width=r,Y.height=l):W.clearRect(0,0,r,l),W.setTransform(Z.scaleX,0,0,Z.scaleY,Z.left,Z.top),W.drawImage(Z._element,0,0,r,l),Q=W.getImageData(0,0,r,l).data;for(var G=0;G<a;G+=4)switch(v=n[G],x=n[G+1],w=n[G+2],F=n[G+3],f=Q[G],d=Q[G+1],g=Q[G+2],p=Q[G+3],this.mode){case"multiply":n[G]=v*f/255,n[G+1]=x*d/255,n[G+2]=w*g/255,n[G+3]=F*p/255;break;case"mask":n[G+3]=p;break}},getUniformLocations:function(t,i){return{uTransformMatrix:t.getUniformLocation(i,"uTransformMatrix"),uImage:t.getUniformLocation(i,"uImage")}},sendUniformData:function(t,i){var e=this.calculateMatrix();t.uniform1i(i.uImage,1),t.uniformMatrix3fv(i.uTransformMatrix,!1,e)},toObject:function(){return{type:this.type,image:this.image&&this.image.toObject(),mode:this.mode,alpha:this.alpha}}}),s.Image.filters.BlendImage.fromObject=function(t,i){s.Image.fromObject(t.image,function(e){var n=s.util.object.clone(t);n.image=e,i(new s.Image.filters.BlendImage(n))})}})(m),(function(c){var s=c.fabric||(c.fabric={}),h=Math.pow,o=Math.floor,t=Math.sqrt,i=Math.abs,e=Math.round,n=Math.sin,a=Math.ceil,r=s.Image.filters,l=s.util.createClass;r.Resize=l(r.BaseFilter,{type:"Resize",resizeType:"hermite",scaleX:1,scaleY:1,lanczosLobes:3,getUniformLocations:function(f,d){return{uDelta:f.getUniformLocation(d,"uDelta"),uTaps:f.getUniformLocation(d,"uTaps")}},sendUniformData:function(f,d){f.uniform2fv(d.uDelta,this.horizontal?[1/this.width,0]:[0,1/this.height]),f.uniform1fv(d.uTaps,this.taps)},retrieveShader:function(f){var d=this.getFilterWindow(),g=this.type+"_"+d;if(!f.programCache.hasOwnProperty(g)){var p=this.generateShader(d);f.programCache[g]=this.createProgram(f.context,p)}return f.programCache[g]},getFilterWindow:function(){var f=this.tempScale;return Math.ceil(this.lanczosLobes/f)},getTaps:function(){for(var f=this.lanczosCreate(this.lanczosLobes),d=this.tempScale,g=this.getFilterWindow(),p=new Array(g),v=1;v<=g;v++)p[v-1]=f(v*d);return p},generateShader:function(f){for(var d=new Array(f),g=this.fragmentSourceTOP,f,p=1;p<=f;p++)d[p-1]=p+".0 * uDelta";return g+="uniform float uTaps["+f+`];
359
+ `,g+=`void main() {
360
+ `,g+=` vec4 color = texture2D(uTexture, vTexCoord);
361
+ `,g+=` float sum = 1.0;
362
+ `,d.forEach(function(v,x){g+=" color += texture2D(uTexture, vTexCoord + "+v+") * uTaps["+x+`];
363
+ `,g+=" color += texture2D(uTexture, vTexCoord - "+v+") * uTaps["+x+`];
364
+ `,g+=" sum += 2.0 * uTaps["+x+`];
365
+ `}),g+=` gl_FragColor = color / sum;
366
+ `,g+="}",g},fragmentSourceTOP:`precision highp float;
367
+ uniform sampler2D uTexture;
368
+ uniform vec2 uDelta;
369
+ varying vec2 vTexCoord;
370
+ `,applyTo:function(f){f.webgl?(f.passes++,this.width=f.sourceWidth,this.horizontal=!0,this.dW=Math.round(this.width*this.scaleX),this.dH=f.sourceHeight,this.tempScale=this.dW/this.width,this.taps=this.getTaps(),f.destinationWidth=this.dW,this._setupFrameBuffer(f),this.applyToWebGL(f),this._swapTextures(f),f.sourceWidth=f.destinationWidth,this.height=f.sourceHeight,this.horizontal=!1,this.dH=Math.round(this.height*this.scaleY),this.tempScale=this.dH/this.height,this.taps=this.getTaps(),f.destinationHeight=this.dH,this._setupFrameBuffer(f),this.applyToWebGL(f),this._swapTextures(f),f.sourceHeight=f.destinationHeight):this.applyTo2d(f)},isNeutralState:function(){return this.scaleX===1&&this.scaleY===1},lanczosCreate:function(f){return function(d){if(d>=f||d<=-f)return 0;if(d<11920929e-14&&d>-11920929e-14)return 1;d*=Math.PI;var g=d/f;return n(d)/d*n(g)/g}},applyTo2d:function(f){var d=f.imageData,g=this.scaleX,p=this.scaleY;this.rcpScaleX=1/g,this.rcpScaleY=1/p;var v=d.width,x=d.height,w=e(v*g),F=e(x*p),Y;this.resizeType==="sliceHack"?Y=this.sliceByTwo(f,v,x,w,F):this.resizeType==="hermite"?Y=this.hermiteFastResize(f,v,x,w,F):this.resizeType==="bilinear"?Y=this.bilinearFiltering(f,v,x,w,F):this.resizeType==="lanczos"&&(Y=this.lanczosResize(f,v,x,w,F)),f.imageData=Y},sliceByTwo:function(f,d,g,p,v){var x=f.imageData,w=.5,F=!1,Y=!1,W=d*w,Z=g*w,Q=s.filterBackend.resources,G,q,J=0,et=0,tt=d,_=0;for(Q.sliceByTwo||(Q.sliceByTwo=document.createElement("canvas")),G=Q.sliceByTwo,(G.width<d*1.5||G.height<g)&&(G.width=d*1.5,G.height=g),q=G.getContext("2d"),q.clearRect(0,0,d*1.5,g),q.putImageData(x,0,0),p=o(p),v=o(v);!F||!Y;)d=W,g=Z,p<o(W*w)?W=o(W*w):(W=p,F=!0),v<o(Z*w)?Z=o(Z*w):(Z=v,Y=!0),q.drawImage(G,J,et,d,g,tt,_,W,Z),J=tt,et=_,_+=Z;return q.getImageData(J,et,p,v)},lanczosResize:function(f,d,g,p,v){function x(T){var C,D,b,y,O,E,I,j,X,H,K;for(_.x=(T+.5)*Z,S.x=o(_.x),C=0;C<v;C++){for(_.y=(C+.5)*Q,S.y=o(_.y),O=0,E=0,I=0,j=0,X=0,D=S.x-J;D<=S.x+J;D++)if(!(D<0||D>=d)){H=o(1e3*i(D-_.x)),tt[H]||(tt[H]={});for(var A=S.y-et;A<=S.y+et;A++)A<0||A>=g||(K=o(1e3*i(A-_.y)),tt[H][K]||(tt[H][K]=W(t(h(H*G,2)+h(K*q,2))/1e3)),b=tt[H][K],b>0&&(y=(A*d+D)*4,O+=b,E+=b*w[y],I+=b*w[y+1],j+=b*w[y+2],X+=b*w[y+3]))}y=(C*p+T)*4,Y[y]=E/O,Y[y+1]=I/O,Y[y+2]=j/O,Y[y+3]=X/O}return++T<p?x(T):F}var w=f.imageData.data,F=f.ctx.createImageData(p,v),Y=F.data,W=this.lanczosCreate(this.lanczosLobes),Z=this.rcpScaleX,Q=this.rcpScaleY,G=2/this.rcpScaleX,q=2/this.rcpScaleY,J=a(Z*this.lanczosLobes/2),et=a(Q*this.lanczosLobes/2),tt={},_={},S={};return x(0)},bilinearFiltering:function(f,d,g,p,v){var x,w,F,Y,W,Z,Q,G,q,J,et,tt,_=0,S,T=this.rcpScaleX,C=this.rcpScaleY,D=4*(d-1),b=f.imageData,y=b.data,O=f.ctx.createImageData(p,v),E=O.data;for(Q=0;Q<v;Q++)for(G=0;G<p;G++)for(W=o(T*G),Z=o(C*Q),q=T*G-W,J=C*Q-Z,S=4*(Z*d+W),et=0;et<4;et++)x=y[S+et],w=y[S+4+et],F=y[S+D+et],Y=y[S+D+4+et],tt=x*(1-q)*(1-J)+w*q*(1-J)+F*J*(1-q)+Y*q*J,E[_++]=tt;return O},hermiteFastResize:function(f,d,g,p,v){for(var x=this.rcpScaleX,w=this.rcpScaleY,F=a(x/2),Y=a(w/2),W=f.imageData,Z=W.data,Q=f.ctx.createImageData(p,v),G=Q.data,q=0;q<v;q++)for(var J=0;J<p;J++){for(var et=(J+q*p)*4,tt=0,_=0,S=0,T=0,C=0,D=0,b=0,y=(q+.5)*w,O=o(q*w);O<(q+1)*w;O++)for(var E=i(y-(O+.5))/Y,I=(J+.5)*x,j=E*E,X=o(J*x);X<(J+1)*x;X++){var H=i(I-(X+.5))/F,K=t(j+H*H);K>1&&K<-1||(tt=2*K*K*K-3*K*K+1,tt>0&&(H=4*(X+O*d),b+=tt*Z[H+3],S+=tt,Z[H+3]<255&&(tt=tt*Z[H+3]/250),T+=tt*Z[H],C+=tt*Z[H+1],D+=tt*Z[H+2],_+=tt))}G[et]=T/_,G[et+1]=C/_,G[et+2]=D/_,G[et+3]=b/S}return Q},toObject:function(){return{type:this.type,scaleX:this.scaleX,scaleY:this.scaleY,resizeType:this.resizeType,lanczosLobes:this.lanczosLobes}}}),s.Image.filters.Resize.fromObject=s.Image.filters.BaseFilter.fromObject})(m),(function(c){var s=c.fabric||(c.fabric={}),h=s.Image.filters,o=s.util.createClass;h.Contrast=o(h.BaseFilter,{type:"Contrast",fragmentSource:`precision highp float;
371
+ uniform sampler2D uTexture;
372
+ uniform float uContrast;
373
+ varying vec2 vTexCoord;
374
+ void main() {
375
+ vec4 color = texture2D(uTexture, vTexCoord);
376
+ float contrastF = 1.015 * (uContrast + 1.0) / (1.0 * (1.015 - uContrast));
377
+ color.rgb = contrastF * (color.rgb - 0.5) + 0.5;
378
+ gl_FragColor = color;
379
+ }`,contrast:0,mainParameter:"contrast",applyTo2d:function(t){if(this.contrast!==0){var i=t.imageData,e,a,n=i.data,a=n.length,r=Math.floor(this.contrast*255),l=259*(r+255)/(255*(259-r));for(e=0;e<a;e+=4)n[e]=l*(n[e]-128)+128,n[e+1]=l*(n[e+1]-128)+128,n[e+2]=l*(n[e+2]-128)+128}},getUniformLocations:function(t,i){return{uContrast:t.getUniformLocation(i,"uContrast")}},sendUniformData:function(t,i){t.uniform1f(i.uContrast,this.contrast)}}),s.Image.filters.Contrast.fromObject=s.Image.filters.BaseFilter.fromObject})(m),(function(c){var s=c.fabric||(c.fabric={}),h=s.Image.filters,o=s.util.createClass;h.Saturation=o(h.BaseFilter,{type:"Saturation",fragmentSource:`precision highp float;
380
+ uniform sampler2D uTexture;
381
+ uniform float uSaturation;
382
+ varying vec2 vTexCoord;
383
+ void main() {
384
+ vec4 color = texture2D(uTexture, vTexCoord);
385
+ float rgMax = max(color.r, color.g);
386
+ float rgbMax = max(rgMax, color.b);
387
+ color.r += rgbMax != color.r ? (rgbMax - color.r) * uSaturation : 0.00;
388
+ color.g += rgbMax != color.g ? (rgbMax - color.g) * uSaturation : 0.00;
389
+ color.b += rgbMax != color.b ? (rgbMax - color.b) * uSaturation : 0.00;
390
+ gl_FragColor = color;
391
+ }`,saturation:0,mainParameter:"saturation",applyTo2d:function(t){if(this.saturation!==0){var i=t.imageData,e=i.data,n=e.length,a=-this.saturation,r,l;for(r=0;r<n;r+=4)l=Math.max(e[r],e[r+1],e[r+2]),e[r]+=l!==e[r]?(l-e[r])*a:0,e[r+1]+=l!==e[r+1]?(l-e[r+1])*a:0,e[r+2]+=l!==e[r+2]?(l-e[r+2])*a:0}},getUniformLocations:function(t,i){return{uSaturation:t.getUniformLocation(i,"uSaturation")}},sendUniformData:function(t,i){t.uniform1f(i.uSaturation,-this.saturation)}}),s.Image.filters.Saturation.fromObject=s.Image.filters.BaseFilter.fromObject})(m),(function(c){var s=c.fabric||(c.fabric={}),h=s.Image.filters,o=s.util.createClass;h.Vibrance=o(h.BaseFilter,{type:"Vibrance",fragmentSource:`precision highp float;
392
+ uniform sampler2D uTexture;
393
+ uniform float uVibrance;
394
+ varying vec2 vTexCoord;
395
+ void main() {
396
+ vec4 color = texture2D(uTexture, vTexCoord);
397
+ float max = max(color.r, max(color.g, color.b));
398
+ float avg = (color.r + color.g + color.b) / 3.0;
399
+ float amt = (abs(max - avg) * 2.0) * uVibrance;
400
+ color.r += max != color.r ? (max - color.r) * amt : 0.00;
401
+ color.g += max != color.g ? (max - color.g) * amt : 0.00;
402
+ color.b += max != color.b ? (max - color.b) * amt : 0.00;
403
+ gl_FragColor = color;
404
+ }`,vibrance:0,mainParameter:"vibrance",applyTo2d:function(t){if(this.vibrance!==0){var i=t.imageData,e=i.data,n=e.length,a=-this.vibrance,r,l,f,d;for(r=0;r<n;r+=4)l=Math.max(e[r],e[r+1],e[r+2]),f=(e[r]+e[r+1]+e[r+2])/3,d=Math.abs(l-f)*2/255*a,e[r]+=l!==e[r]?(l-e[r])*d:0,e[r+1]+=l!==e[r+1]?(l-e[r+1])*d:0,e[r+2]+=l!==e[r+2]?(l-e[r+2])*d:0}},getUniformLocations:function(t,i){return{uVibrance:t.getUniformLocation(i,"uVibrance")}},sendUniformData:function(t,i){t.uniform1f(i.uVibrance,-this.vibrance)}}),s.Image.filters.Vibrance.fromObject=s.Image.filters.BaseFilter.fromObject})(m),(function(c){var s=c.fabric||(c.fabric={}),h=s.Image.filters,o=s.util.createClass;h.Blur=o(h.BaseFilter,{type:"Blur",fragmentSource:`precision highp float;
405
+ uniform sampler2D uTexture;
406
+ uniform vec2 uDelta;
407
+ varying vec2 vTexCoord;
408
+ const float nSamples = 15.0;
409
+ vec3 v3offset = vec3(12.9898, 78.233, 151.7182);
410
+ float random(vec3 scale) {
411
+ return fract(sin(dot(gl_FragCoord.xyz, scale)) * 43758.5453);
412
+ }
413
+ void main() {
414
+ vec4 color = vec4(0.0);
415
+ float total = 0.0;
416
+ float offset = random(v3offset);
417
+ for (float t = -nSamples; t <= nSamples; t++) {
418
+ float percent = (t + offset - 0.5) / nSamples;
419
+ float weight = 1.0 - abs(percent);
420
+ color += texture2D(uTexture, vTexCoord + uDelta * percent) * weight;
421
+ total += weight;
422
+ }
423
+ gl_FragColor = color / total;
424
+ }`,blur:0,mainParameter:"blur",applyTo:function(t){t.webgl?(this.aspectRatio=t.sourceWidth/t.sourceHeight,t.passes++,this._setupFrameBuffer(t),this.horizontal=!0,this.applyToWebGL(t),this._swapTextures(t),this._setupFrameBuffer(t),this.horizontal=!1,this.applyToWebGL(t),this._swapTextures(t)):this.applyTo2d(t)},applyTo2d:function(t){t.imageData=this.simpleBlur(t)},simpleBlur:function(t){var i=t.filterBackend.resources,e,n,a=t.imageData.width,r=t.imageData.height;i.blurLayer1||(i.blurLayer1=s.util.createCanvasElement(),i.blurLayer2=s.util.createCanvasElement()),e=i.blurLayer1,n=i.blurLayer2,(e.width!==a||e.height!==r)&&(n.width=e.width=a,n.height=e.height=r);var l=e.getContext("2d"),f=n.getContext("2d"),d=15,g,p,v,x,w=this.blur*.06*.5;for(l.putImageData(t.imageData,0,0),f.clearRect(0,0,a,r),x=-d;x<=d;x++)g=(Math.random()-.5)/4,p=x/d,v=w*p*a+g,f.globalAlpha=1-Math.abs(p),f.drawImage(e,v,g),l.drawImage(n,0,0),f.globalAlpha=1,f.clearRect(0,0,n.width,n.height);for(x=-d;x<=d;x++)g=(Math.random()-.5)/4,p=x/d,v=w*p*r+g,f.globalAlpha=1-Math.abs(p),f.drawImage(e,g,v),l.drawImage(n,0,0),f.globalAlpha=1,f.clearRect(0,0,n.width,n.height);t.ctx.drawImage(e,0,0);var F=t.ctx.getImageData(0,0,e.width,e.height);return l.globalAlpha=1,l.clearRect(0,0,e.width,e.height),F},getUniformLocations:function(t,i){return{delta:t.getUniformLocation(i,"uDelta")}},sendUniformData:function(t,i){var e=this.chooseRightDelta();t.uniform2fv(i.delta,e)},chooseRightDelta:function(){var t=1,i=[0,0],e;return this.horizontal?this.aspectRatio>1&&(t=1/this.aspectRatio):this.aspectRatio<1&&(t=this.aspectRatio),e=t*this.blur*.12,this.horizontal?i[0]=e:i[1]=e,i}}),h.Blur.fromObject=s.Image.filters.BaseFilter.fromObject})(m),(function(c){var s=c.fabric||(c.fabric={}),h=s.Image.filters,o=s.util.createClass;h.Gamma=o(h.BaseFilter,{type:"Gamma",fragmentSource:`precision highp float;
425
+ uniform sampler2D uTexture;
426
+ uniform vec3 uGamma;
427
+ varying vec2 vTexCoord;
428
+ void main() {
429
+ vec4 color = texture2D(uTexture, vTexCoord);
430
+ vec3 correction = (1.0 / uGamma);
431
+ color.r = pow(color.r, correction.r);
432
+ color.g = pow(color.g, correction.g);
433
+ color.b = pow(color.b, correction.b);
434
+ gl_FragColor = color;
435
+ gl_FragColor.rgb *= color.a;
436
+ }`,gamma:[1,1,1],mainParameter:"gamma",initialize:function(t){this.gamma=[1,1,1],h.BaseFilter.prototype.initialize.call(this,t)},applyTo2d:function(t){var i=t.imageData,e=i.data,n=this.gamma,a=e.length,r=1/n[0],l=1/n[1],f=1/n[2],d;for(this.rVals||(this.rVals=new Uint8Array(256),this.gVals=new Uint8Array(256),this.bVals=new Uint8Array(256)),d=0,a=256;d<a;d++)this.rVals[d]=Math.pow(d/255,r)*255,this.gVals[d]=Math.pow(d/255,l)*255,this.bVals[d]=Math.pow(d/255,f)*255;for(d=0,a=e.length;d<a;d+=4)e[d]=this.rVals[e[d]],e[d+1]=this.gVals[e[d+1]],e[d+2]=this.bVals[e[d+2]]},getUniformLocations:function(t,i){return{uGamma:t.getUniformLocation(i,"uGamma")}},sendUniformData:function(t,i){t.uniform3fv(i.uGamma,this.gamma)}}),s.Image.filters.Gamma.fromObject=s.Image.filters.BaseFilter.fromObject})(m),(function(c){var s=c.fabric||(c.fabric={}),h=s.Image.filters,o=s.util.createClass;h.Composed=o(h.BaseFilter,{type:"Composed",subFilters:[],initialize:function(t){this.callSuper("initialize",t),this.subFilters=this.subFilters.slice(0)},applyTo:function(t){t.passes+=this.subFilters.length-1,this.subFilters.forEach(function(i){i.applyTo(t)})},toObject:function(){return s.util.object.extend(this.callSuper("toObject"),{subFilters:this.subFilters.map(function(t){return t.toObject()})})},isNeutralState:function(){return!this.subFilters.some(function(t){return!t.isNeutralState()})}}),s.Image.filters.Composed.fromObject=function(t,i){var e=t.subFilters||[],n=e.map(function(r){return new s.Image.filters[r.type](r)}),a=new s.Image.filters.Composed({subFilters:n});return i&&i(a),a}})(m),(function(c){var s=c.fabric||(c.fabric={}),h=s.Image.filters,o=s.util.createClass;h.HueRotation=o(h.ColorMatrix,{type:"HueRotation",rotation:0,mainParameter:"rotation",calculateMatrix:function(){var t=this.rotation*Math.PI,i=s.util.cos(t),e=s.util.sin(t),n=1/3,a=Math.sqrt(n)*e,r=1-i;this.matrix=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],this.matrix[0]=i+r/3,this.matrix[1]=n*r-a,this.matrix[2]=n*r+a,this.matrix[5]=n*r+a,this.matrix[6]=i+n*r,this.matrix[7]=n*r-a,this.matrix[10]=n*r-a,this.matrix[11]=n*r+a,this.matrix[12]=i+n*r},isNeutralState:function(t){return this.calculateMatrix(),h.BaseFilter.prototype.isNeutralState.call(this,t)},applyTo:function(t){this.calculateMatrix(),h.BaseFilter.prototype.applyTo.call(this,t)}}),s.Image.filters.HueRotation.fromObject=s.Image.filters.BaseFilter.fromObject})(m),(function(c){var s=c.fabric||(c.fabric={}),h=s.util.object.clone;if(s.Text){s.warn("fabric.Text is already defined");return}var o="fontFamily fontWeight fontSize text underline overline linethrough textAlign fontStyle lineHeight textBackgroundColor charSpacing styles direction path pathStartOffset pathSide pathAlign".split(" ");s.Text=s.util.createClass(s.Object,{_dimensionAffectingProps:["fontSize","fontWeight","fontFamily","fontStyle","lineHeight","text","charSpacing","textAlign","styles","path","pathStartOffset","pathSide","pathAlign"],_reNewline:/\r?\n/,_reSpacesAndTabs:/[ \t\r]/g,_reSpaceAndTab:/[ \t\r]/,_reWords:/\S+/g,type:"text",fontSize:40,fontWeight:"normal",fontFamily:"Times New Roman",underline:!1,overline:!1,linethrough:!1,textAlign:"left",fontStyle:"normal",lineHeight:1.16,superscript:{size:.6,baseline:-.35},subscript:{size:.6,baseline:.11},textBackgroundColor:"",stateProperties:s.Object.prototype.stateProperties.concat(o),cacheProperties:s.Object.prototype.cacheProperties.concat(o),stroke:null,shadow:null,path:null,pathStartOffset:0,pathSide:"left",pathAlign:"baseline",_fontSizeFraction:.222,offsets:{underline:.1,linethrough:-.315,overline:-.88},_fontSizeMult:1.13,charSpacing:0,styles:null,_measuringContext:null,deltaY:0,direction:"ltr",_styleProperties:["stroke","strokeWidth","fill","fontFamily","fontSize","fontWeight","fontStyle","underline","overline","linethrough","deltaY","textBackgroundColor"],__charBounds:[],CACHE_FONT_SIZE:400,MIN_TEXT_WIDTH:2,initialize:function(t,i){this.styles=i?i.styles||{}:{},this.text=t,this.__skipDimension=!0,this.callSuper("initialize",i),this.path&&this.setPathInfo(),this.__skipDimension=!1,this.initDimensions(),this.setCoords(),this.setupState({propertySet:"_dimensionAffectingProps"})},setPathInfo:function(){var t=this.path;t&&(t.segmentsInfo=s.util.getPathSegmentsInfo(t.path))},getMeasuringContext:function(){return s._measuringContext||(s._measuringContext=this.canvas&&this.canvas.contextCache||s.util.createCanvasElement().getContext("2d")),s._measuringContext},_splitText:function(){var t=this._splitTextIntoLines(this.text);return this.textLines=t.lines,this._textLines=t.graphemeLines,this._unwrappedTextLines=t._unwrappedLines,this._text=t.graphemeText,t},initDimensions:function(){this.__skipDimension||(this._splitText(),this._clearCache(),this.path?(this.width=this.path.width,this.height=this.path.height):(this.width=this.calcTextWidth()||this.cursorWidth||this.MIN_TEXT_WIDTH,this.height=this.calcTextHeight()),this.textAlign.indexOf("justify")!==-1&&this.enlargeSpaces(),this.saveState({propertySet:"_dimensionAffectingProps"}))},enlargeSpaces:function(){for(var t,i,e,n,a,r,l,f=0,d=this._textLines.length;f<d;f++)if(!(this.textAlign!=="justify"&&(f===d-1||this.isEndOfWrapping(f)))&&(n=0,a=this._textLines[f],i=this.getLineWidth(f),i<this.width&&(l=this.textLines[f].match(this._reSpacesAndTabs)))){e=l.length,t=(this.width-i)/e;for(var g=0,p=a.length;g<=p;g++)r=this.__charBounds[f][g],this._reSpaceAndTab.test(a[g])?(r.width+=t,r.kernedWidth+=t,r.left+=n,n+=t):r.left+=n}},isEndOfWrapping:function(t){return t===this._textLines.length-1},missingNewlineOffset:function(){return 1},toString:function(){return"#<fabric.Text ("+this.complexity()+'): { "text": "'+this.text+'", "fontFamily": "'+this.fontFamily+'" }>'},_getCacheCanvasDimensions:function(){var t=this.callSuper("_getCacheCanvasDimensions"),i=this.fontSize;return t.width+=i*t.zoomX,t.height+=i*t.zoomY,t},_render:function(t){var i=this.path;i&&!i.isNotVisible()&&i._render(t),this._setTextStyles(t),this._renderTextLinesBackground(t),this._renderTextDecoration(t,"underline"),this._renderText(t),this._renderTextDecoration(t,"overline"),this._renderTextDecoration(t,"linethrough")},_renderText:function(t){this.paintFirst==="stroke"?(this._renderTextStroke(t),this._renderTextFill(t)):(this._renderTextFill(t),this._renderTextStroke(t))},_setTextStyles:function(t,i,e){if(t.textBaseline="alphabetical",this.path)switch(this.pathAlign){case"center":t.textBaseline="middle";break;case"ascender":t.textBaseline="top";break;case"descender":t.textBaseline="bottom";break}t.font=this._getFontDeclaration(i,e)},calcTextWidth:function(){for(var t=this.getLineWidth(0),i=1,e=this._textLines.length;i<e;i++){var n=this.getLineWidth(i);n>t&&(t=n)}return t},_renderTextLine:function(t,i,e,n,a,r){this._renderChars(t,i,e,n,a,r)},_renderTextLinesBackground:function(t){if(!(!this.textBackgroundColor&&!this.styleHas("textBackgroundColor"))){for(var i,e,n=t.fillStyle,a,r,l=this._getLeftOffset(),f=this._getTopOffset(),d=0,g=0,p,v,x=this.path,w,F=0,Y=this._textLines.length;F<Y;F++){if(i=this.getHeightOfLine(F),!this.textBackgroundColor&&!this.styleHas("textBackgroundColor",F)){f+=i;continue}a=this._textLines[F],e=this._getLineLeftOffset(F),g=0,d=0,r=this.getValueOfPropertyAt(F,0,"textBackgroundColor");for(var W=0,Z=a.length;W<Z;W++)p=this.__charBounds[F][W],v=this.getValueOfPropertyAt(F,W,"textBackgroundColor"),x?(t.save(),t.translate(p.renderLeft,p.renderTop),t.rotate(p.angle),t.fillStyle=v,v&&t.fillRect(-p.width/2,-i/this.lineHeight*(1-this._fontSizeFraction),p.width,i/this.lineHeight),t.restore()):v!==r?(w=l+e+d,this.direction==="rtl"&&(w=this.width-w-g),t.fillStyle=r,r&&t.fillRect(w,f,g,i/this.lineHeight),d=p.left,g=p.width,r=v):g+=p.kernedWidth;v&&!x&&(w=l+e+d,this.direction==="rtl"&&(w=this.width-w-g),t.fillStyle=v,t.fillRect(w,f,g,i/this.lineHeight)),f+=i}t.fillStyle=n,this._removeShadow(t)}},getFontCache:function(t){var i=t.fontFamily.toLowerCase();s.charWidthsCache[i]||(s.charWidthsCache[i]={});var e=s.charWidthsCache[i],n=t.fontStyle.toLowerCase()+"_"+(t.fontWeight+"").toLowerCase();return e[n]||(e[n]={}),e[n]},_measureChar:function(t,i,e,n){var a=this.getFontCache(i),r=this._getFontDeclaration(i),l=this._getFontDeclaration(n),f=e+t,d=r===l,g,p,v,x=i.fontSize/this.CACHE_FONT_SIZE,w;if(e&&a[e]!==void 0&&(v=a[e]),a[t]!==void 0&&(w=g=a[t]),d&&a[f]!==void 0&&(p=a[f],w=p-v),g===void 0||v===void 0||p===void 0){var F=this.getMeasuringContext();this._setTextStyles(F,i,!0)}return g===void 0&&(w=g=F.measureText(t).width,a[t]=g),v===void 0&&d&&e&&(v=F.measureText(e).width,a[e]=v),d&&p===void 0&&(p=F.measureText(f).width,a[f]=p,w=p-v),{width:g*x,kernedWidth:w*x}},getHeightOfChar:function(t,i){return this.getValueOfPropertyAt(t,i,"fontSize")},measureLine:function(t){var i=this._measureLine(t);return this.charSpacing!==0&&(i.width-=this._getWidthOfCharSpacing()),i.width<0&&(i.width=0),i},_measureLine:function(t){var i=0,e,n,a=this._textLines[t],r,l,f=0,d=new Array(a.length),g=0,p,v,x=this.path,w=this.pathSide==="right";for(this.__charBounds[t]=d,e=0;e<a.length;e++)n=a[e],l=this._getGraphemeBox(n,t,e,r),d[e]=l,i+=l.kernedWidth,r=n;if(d[e]={left:l?l.left+l.width:0,width:0,kernedWidth:0,height:this.fontSize},x){switch(v=x.segmentsInfo[x.segmentsInfo.length-1].length,p=s.util.getPointOnPath(x.path,0,x.segmentsInfo),p.x+=x.pathOffset.x,p.y+=x.pathOffset.y,this.textAlign){case"left":g=w?v-i:0;break;case"center":g=(v-i)/2;break;case"right":g=w?0:v-i;break}for(g+=this.pathStartOffset*(w?-1:1),e=w?a.length-1:0;w?e>=0:e<a.length;w?e--:e++)l=d[e],g>v?g%=v:g<0&&(g+=v),this._setGraphemeOnPath(g,l,p),g+=l.kernedWidth}return{width:i,numOfSpaces:f}},_setGraphemeOnPath:function(t,i,e){var n=t+i.kernedWidth/2,a=this.path,r=s.util.getPointOnPath(a.path,n,a.segmentsInfo);i.renderLeft=r.x-e.x,i.renderTop=r.y-e.y,i.angle=r.angle+(this.pathSide==="right"?Math.PI:0)},_getGraphemeBox:function(t,i,e,n,a){var r=this.getCompleteStyleDeclaration(i,e),l=n?this.getCompleteStyleDeclaration(i,e-1):{},f=this._measureChar(t,r,n,l),d=f.kernedWidth,g=f.width,p;this.charSpacing!==0&&(p=this._getWidthOfCharSpacing(),g+=p,d+=p);var v={width:g,left:0,height:r.fontSize,kernedWidth:d,deltaY:r.deltaY};if(e>0&&!a){var x=this.__charBounds[i][e-1];v.left=x.left+x.width+f.kernedWidth-f.width}return v},getHeightOfLine:function(t){if(this.__lineHeights[t])return this.__lineHeights[t];for(var i=this._textLines[t],e=this.getHeightOfChar(t,0),n=1,a=i.length;n<a;n++)e=Math.max(this.getHeightOfChar(t,n),e);return this.__lineHeights[t]=e*this.lineHeight*this._fontSizeMult},calcTextHeight:function(){for(var t,i=0,e=0,n=this._textLines.length;e<n;e++)t=this.getHeightOfLine(e),i+=e===n-1?t/this.lineHeight:t;return i},_getLeftOffset:function(){return this.direction==="ltr"?-this.width/2:this.width/2},_getTopOffset:function(){return-this.height/2},_renderTextCommon:function(t,i){t.save();for(var e=0,n=this._getLeftOffset(),a=this._getTopOffset(),r=0,l=this._textLines.length;r<l;r++){var f=this.getHeightOfLine(r),d=f/this.lineHeight,g=this._getLineLeftOffset(r);this._renderTextLine(i,t,this._textLines[r],n+g,a+e+d,r),e+=f}t.restore()},_renderTextFill:function(t){!this.fill&&!this.styleHas("fill")||this._renderTextCommon(t,"fillText")},_renderTextStroke:function(t){(!this.stroke||this.strokeWidth===0)&&this.isEmptyStyles()||(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this._setLineDash(t,this.strokeDashArray),t.beginPath(),this._renderTextCommon(t,"strokeText"),t.closePath(),t.restore())},_renderChars:function(t,i,e,n,a,r){var l=this.getHeightOfLine(r),f=this.textAlign.indexOf("justify")!==-1,d,g,p="",v,x=0,w,F=this.path,Y=!f&&this.charSpacing===0&&this.isEmptyStyles(r)&&!F,W=this.direction==="ltr",Z=this.direction==="ltr"?1:-1,Q,G=i.canvas.getAttribute("dir");if(i.save(),G!==this.direction&&(i.canvas.setAttribute("dir",W?"ltr":"rtl"),i.direction=W?"ltr":"rtl",i.textAlign=W?"left":"right"),a-=l*this._fontSizeFraction/this.lineHeight,Y){this._renderChar(t,i,r,0,e.join(""),n,a,l),i.restore();return}for(var q=0,J=e.length-1;q<=J;q++)w=q===J||this.charSpacing||F,p+=e[q],v=this.__charBounds[r][q],x===0?(n+=Z*(v.kernedWidth-v.width),x+=v.width):x+=v.kernedWidth,f&&!w&&this._reSpaceAndTab.test(e[q])&&(w=!0),w||(d=d||this.getCompleteStyleDeclaration(r,q),g=this.getCompleteStyleDeclaration(r,q+1),w=s.util.hasStyleChanged(d,g,!1)),w&&(F?(i.save(),i.translate(v.renderLeft,v.renderTop),i.rotate(v.angle),this._renderChar(t,i,r,q,p,-x/2,0,l),i.restore()):(Q=n,this._renderChar(t,i,r,q,p,Q,a,l)),p="",d=g,n+=Z*x,x=0);i.restore()},_applyPatternGradientTransformText:function(t){var i=s.util.createCanvasElement(),e,n=this.width+this.strokeWidth,a=this.height+this.strokeWidth;return i.width=n,i.height=a,e=i.getContext("2d"),e.beginPath(),e.moveTo(0,0),e.lineTo(n,0),e.lineTo(n,a),e.lineTo(0,a),e.closePath(),e.translate(n/2,a/2),e.fillStyle=t.toLive(e),this._applyPatternGradientTransform(e,t),e.fill(),e.createPattern(i,"no-repeat")},handleFiller:function(t,i,e){var n,a;return e.toLive?e.gradientUnits==="percentage"||e.gradientTransform||e.patternTransform?(n=-this.width/2,a=-this.height/2,t.translate(n,a),t[i]=this._applyPatternGradientTransformText(e),{offsetX:n,offsetY:a}):(t[i]=e.toLive(t,this),this._applyPatternGradientTransform(t,e)):(t[i]=e,{offsetX:0,offsetY:0})},_setStrokeStyles:function(t,i){return t.lineWidth=i.strokeWidth,t.lineCap=this.strokeLineCap,t.lineDashOffset=this.strokeDashOffset,t.lineJoin=this.strokeLineJoin,t.miterLimit=this.strokeMiterLimit,this.handleFiller(t,"strokeStyle",i.stroke)},_setFillStyles:function(t,i){return this.handleFiller(t,"fillStyle",i.fill)},_renderChar:function(t,i,e,n,a,r,l){var f=this._getStyleDeclaration(e,n),d=this.getCompleteStyleDeclaration(e,n),g=t==="fillText"&&d.fill,p=t==="strokeText"&&d.stroke&&d.strokeWidth,v,x;!p&&!g||(i.save(),g&&(v=this._setFillStyles(i,d)),p&&(x=this._setStrokeStyles(i,d)),i.font=this._getFontDeclaration(d),f&&f.textBackgroundColor&&this._removeShadow(i),f&&f.deltaY&&(l+=f.deltaY),g&&i.fillText(a,r-v.offsetX,l-v.offsetY),p&&i.strokeText(a,r-x.offsetX,l-x.offsetY),i.restore())},setSuperscript:function(t,i){return this._setScript(t,i,this.superscript)},setSubscript:function(t,i){return this._setScript(t,i,this.subscript)},_setScript:function(t,i,e){var n=this.get2DCursorLocation(t,!0),a=this.getValueOfPropertyAt(n.lineIndex,n.charIndex,"fontSize"),r=this.getValueOfPropertyAt(n.lineIndex,n.charIndex,"deltaY"),l={fontSize:a*e.size,deltaY:r+a*e.baseline};return this.setSelectionStyles(l,t,i),this},_getLineLeftOffset:function(t){var i=this.getLineWidth(t),e=this.width-i,n=this.textAlign,a=this.direction,l,r=0,l=this.isEndOfWrapping(t);return n==="justify"||n==="justify-center"&&!l||n==="justify-right"&&!l||n==="justify-left"&&!l?0:(n==="center"&&(r=e/2),n==="right"&&(r=e),n==="justify-center"&&(r=e/2),n==="justify-right"&&(r=e),a==="rtl"&&(r-=e),r)},_clearCache:function(){this.__lineWidths=[],this.__lineHeights=[],this.__charBounds=[]},_shouldClearDimensionCache:function(){var t=this._forceClearCache;return t||(t=this.hasStateChanged("_dimensionAffectingProps")),t&&(this.dirty=!0,this._forceClearCache=!1),t},getLineWidth:function(t){if(this.__lineWidths[t]!==void 0)return this.__lineWidths[t];var i=this.measureLine(t),e=i.width;return this.__lineWidths[t]=e,e},_getWidthOfCharSpacing:function(){return this.charSpacing!==0?this.fontSize*this.charSpacing/1e3:0},getValueOfPropertyAt:function(t,i,e){var n=this._getStyleDeclaration(t,i);return n&&typeof n[e]<"u"?n[e]:this[e]},_renderTextDecoration:function(t,i){if(!(!this[i]&&!this.styleHas(i))){for(var e,n,a,r,l,f,d,g,p=this._getLeftOffset(),v=this._getTopOffset(),x,w,F,Y,W,Z,Q,G,q=this.path,J=this._getWidthOfCharSpacing(),et=this.offsets[i],tt=0,_=this._textLines.length;tt<_;tt++){if(e=this.getHeightOfLine(tt),!this[i]&&!this.styleHas(i,tt)){v+=e;continue}d=this._textLines[tt],Z=e/this.lineHeight,r=this._getLineLeftOffset(tt),w=0,F=0,g=this.getValueOfPropertyAt(tt,0,i),G=this.getValueOfPropertyAt(tt,0,"fill"),x=v+Z*(1-this._fontSizeFraction),n=this.getHeightOfChar(tt,0),l=this.getValueOfPropertyAt(tt,0,"deltaY");for(var S=0,T=d.length;S<T;S++)if(Y=this.__charBounds[tt][S],W=this.getValueOfPropertyAt(tt,S,i),Q=this.getValueOfPropertyAt(tt,S,"fill"),a=this.getHeightOfChar(tt,S),f=this.getValueOfPropertyAt(tt,S,"deltaY"),q&&W&&Q)t.save(),t.fillStyle=G,t.translate(Y.renderLeft,Y.renderTop),t.rotate(Y.angle),t.fillRect(-Y.kernedWidth/2,et*a+f,Y.kernedWidth,this.fontSize/15),t.restore();else if((W!==g||Q!==G||a!==n||f!==l)&&F>0){var C=p+r+w;this.direction==="rtl"&&(C=this.width-C-F),g&&G&&(t.fillStyle=G,t.fillRect(C,x+et*n+l,F,this.fontSize/15)),w=Y.left,F=Y.width,g=W,G=Q,n=a,l=f}else F+=Y.kernedWidth;var C=p+r+w;this.direction==="rtl"&&(C=this.width-C-F),t.fillStyle=Q,W&&Q&&t.fillRect(C,x+et*n+l,F-J,this.fontSize/15),v+=e}this._removeShadow(t)}},_getFontDeclaration:function(t,i){var e=t||this,n=this.fontFamily,a=s.Text.genericFonts.indexOf(n.toLowerCase())>-1,r=n===void 0||n.indexOf("'")>-1||n.indexOf(",")>-1||n.indexOf('"')>-1||a?e.fontFamily:'"'+e.fontFamily+'"';return[s.isLikelyNode?e.fontWeight:e.fontStyle,s.isLikelyNode?e.fontStyle:e.fontWeight,i?this.CACHE_FONT_SIZE+"px":e.fontSize+"px",r].join(" ")},render:function(t){this.visible&&(this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(this._shouldClearDimensionCache()&&this.initDimensions(),this.callSuper("render",t)))},_splitTextIntoLines:function(t){for(var i=t.split(this._reNewline),e=new Array(i.length),n=[`
437
+ `],a=[],r=0;r<i.length;r++)e[r]=s.util.string.graphemeSplit(i[r]),a=a.concat(e[r],n);return a.pop(),{_unwrappedLines:e,lines:i,graphemeText:a,graphemeLines:e}},toObject:function(t){var i=o.concat(t),e=this.callSuper("toObject",i);return e.styles=s.util.stylesToArray(this.styles,this.text),e.path&&(e.path=this.path.toObject()),e},set:function(t,i){this.callSuper("set",t,i);var e=!1,n=!1;if(typeof t=="object")for(var a in t)a==="path"&&this.setPathInfo(),e=e||this._dimensionAffectingProps.indexOf(a)!==-1,n=n||a==="path";else e=this._dimensionAffectingProps.indexOf(t)!==-1,n=t==="path";return n&&this.setPathInfo(),e&&(this.initDimensions(),this.setCoords()),this},complexity:function(){return 1}}),s.Text.ATTRIBUTE_NAMES=s.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size letter-spacing text-decoration text-anchor".split(" ")),s.Text.DEFAULT_SVG_FONT_SIZE=16,s.Text.fromElement=function(t,i,e){if(!t)return i(null);var n=s.parseAttributes(t,s.Text.ATTRIBUTE_NAMES),a=n.textAnchor||"left";if(e=s.util.object.extend(e?h(e):{},n),e.top=e.top||0,e.left=e.left||0,n.textDecoration){var r=n.textDecoration;r.indexOf("underline")!==-1&&(e.underline=!0),r.indexOf("overline")!==-1&&(e.overline=!0),r.indexOf("line-through")!==-1&&(e.linethrough=!0),delete e.textDecoration}"dx"in n&&(e.left+=n.dx),"dy"in n&&(e.top+=n.dy),"fontSize"in e||(e.fontSize=s.Text.DEFAULT_SVG_FONT_SIZE);var l="";"textContent"in t?l=t.textContent:"firstChild"in t&&t.firstChild!==null&&"data"in t.firstChild&&t.firstChild.data!==null&&(l=t.firstChild.data),l=l.replace(/^\s+|\s+$|\n+/g,"").replace(/\s+/g," ");var f=e.strokeWidth;e.strokeWidth=0;var d=new s.Text(l,e),g=d.getScaledHeight()/d.height,p=(d.height+d.strokeWidth)*d.lineHeight-d.height,v=p*g,x=d.getScaledHeight()+v,w=0;a==="center"&&(w=d.getScaledWidth()/2),a==="right"&&(w=d.getScaledWidth()),d.set({left:d.left-w,top:d.top-(x-d.fontSize*(.07+d._fontSizeFraction))/d.lineHeight,strokeWidth:typeof f<"u"?f:1}),i(d)},s.Text.fromObject=function(t,i){var e=h(t),n=t.path;return delete e.path,s.Object._fromObject("Text",e,function(a){a.styles=s.util.stylesFromArray(t.styles,t.text),n?s.Object._fromObject("Path",n,function(r){a.set("path",r),i(a)},"path"):i(a)},"text")},s.Text.genericFonts=["sans-serif","serif","cursive","fantasy","monospace"],s.util.createAccessors&&s.util.createAccessors(s.Text)})(m),(function(){u.util.object.extend(u.Text.prototype,{isEmptyStyles:function(c){if(!this.styles||typeof c<"u"&&!this.styles[c])return!0;var s=typeof c>"u"?this.styles:{line:this.styles[c]};for(var h in s)for(var o in s[h])for(var t in s[h][o])return!1;return!0},styleHas:function(c,s){if(!this.styles||!c||c===""||typeof s<"u"&&!this.styles[s])return!1;var h=typeof s>"u"?this.styles:{0:this.styles[s]};for(var o in h)for(var t in h[o])if(typeof h[o][t][c]<"u")return!0;return!1},cleanStyle:function(c){if(!this.styles||!c||c==="")return!1;var s=this.styles,h=0,o,t,i=!0,e=0,n;for(var a in s){o=0;for(var r in s[a]){var n=s[a][r],l=n.hasOwnProperty(c);h++,l?(t?n[c]!==t&&(i=!1):t=n[c],n[c]===this[c]&&delete n[c]):i=!1,Object.keys(n).length!==0?o++:delete s[a][r]}o===0&&delete s[a]}for(var f=0;f<this._textLines.length;f++)e+=this._textLines[f].length;i&&h===e&&(this[c]=t,this.removeStyle(c))},removeStyle:function(c){if(!(!this.styles||!c||c==="")){var s=this.styles,h,o,t;for(o in s){h=s[o];for(t in h)delete h[t][c],Object.keys(h[t]).length===0&&delete h[t];Object.keys(h).length===0&&delete s[o]}}},_extendStyles:function(c,s){var h=this.get2DCursorLocation(c);this._getLineStyle(h.lineIndex)||this._setLineStyle(h.lineIndex),this._getStyleDeclaration(h.lineIndex,h.charIndex)||this._setStyleDeclaration(h.lineIndex,h.charIndex,{}),u.util.object.extend(this._getStyleDeclaration(h.lineIndex,h.charIndex),s)},get2DCursorLocation:function(c,s){typeof c>"u"&&(c=this.selectionStart);for(var h=s?this._unwrappedTextLines:this._textLines,o=h.length,t=0;t<o;t++){if(c<=h[t].length)return{lineIndex:t,charIndex:c};c-=h[t].length+this.missingNewlineOffset(t)}return{lineIndex:t-1,charIndex:h[t-1].length<c?h[t-1].length:c}},getSelectionStyles:function(c,s,h){typeof c>"u"&&(c=this.selectionStart||0),typeof s>"u"&&(s=this.selectionEnd||c);for(var o=[],t=c;t<s;t++)o.push(this.getStyleAtPosition(t,h));return o},getStyleAtPosition:function(c,s){var h=this.get2DCursorLocation(c),o=s?this.getCompleteStyleDeclaration(h.lineIndex,h.charIndex):this._getStyleDeclaration(h.lineIndex,h.charIndex);return o||{}},setSelectionStyles:function(c,s,h){typeof s>"u"&&(s=this.selectionStart||0),typeof h>"u"&&(h=this.selectionEnd||s);for(var o=s;o<h;o++)this._extendStyles(o,c);return this._forceClearCache=!0,this},_getStyleDeclaration:function(c,s){var h=this.styles&&this.styles[c];return h?h[s]:null},getCompleteStyleDeclaration:function(c,s){for(var h=this._getStyleDeclaration(c,s)||{},o={},t,i=0;i<this._styleProperties.length;i++)t=this._styleProperties[i],o[t]=typeof h[t]>"u"?this[t]:h[t];return o},_setStyleDeclaration:function(c,s,h){this.styles[c][s]=h},_deleteStyleDeclaration:function(c,s){delete this.styles[c][s]},_getLineStyle:function(c){return!!this.styles[c]},_setLineStyle:function(c){this.styles[c]={}},_deleteLineStyle:function(c){delete this.styles[c]}})})(),(function(){function c(s){s.textDecoration&&(s.textDecoration.indexOf("underline")>-1&&(s.underline=!0),s.textDecoration.indexOf("line-through")>-1&&(s.linethrough=!0),s.textDecoration.indexOf("overline")>-1&&(s.overline=!0),delete s.textDecoration)}u.IText=u.util.createClass(u.Text,u.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:"",cursorDelay:1e3,cursorDuration:600,caching:!0,hiddenTextareaContainer:null,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],inCompositionMode:!1,initialize:function(s,h){this.callSuper("initialize",s,h),this.initBehavior()},setSelectionStart:function(s){s=Math.max(s,0),this._updateAndFire("selectionStart",s)},setSelectionEnd:function(s){s=Math.min(s,this.text.length),this._updateAndFire("selectionEnd",s)},_updateAndFire:function(s,h){this[s]!==h&&(this._fireSelectionChanged(),this[s]=h),this._updateTextarea()},_fireSelectionChanged:function(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},initDimensions:function(){this.isEditing&&this.initDelayedCursor(),this.clearContextTop(),this.callSuper("initDimensions")},render:function(s){this.clearContextTop(),this.callSuper("render",s),this.cursorOffsetCache={},this.renderCursorOrSelection()},_render:function(s){this.callSuper("_render",s)},clearContextTop:function(s){if(!(!this.isEditing||!this.canvas||!this.canvas.contextTop)){var h=this.canvas.contextTop,o=this.canvas.viewportTransform;h.save(),h.transform(o[0],o[1],o[2],o[3],o[4],o[5]),this.transform(h),this._clearTextArea(h),s||h.restore()}},renderCursorOrSelection:function(){if(!(!this.isEditing||!this.canvas||!this.canvas.contextTop)){var s=this._getCursorBoundaries(),h=this.canvas.contextTop;this.clearContextTop(!0),this.selectionStart===this.selectionEnd?this.renderCursor(s,h):this.renderSelection(s,h),h.restore()}},_clearTextArea:function(s){var h=this.width+4,o=this.height+4;s.clearRect(-h/2,-o/2,h,o)},_getCursorBoundaries:function(s){typeof s>"u"&&(s=this.selectionStart);var h=this._getLeftOffset(),o=this._getTopOffset(),t=this._getCursorBoundariesOffsets(s);return{left:h,top:o,leftOffset:t.left,topOffset:t.top}},_getCursorBoundariesOffsets:function(s){if(this.cursorOffsetCache&&"top"in this.cursorOffsetCache)return this.cursorOffsetCache;var h,o,t,i=0,e=0,n,a=this.get2DCursorLocation(s);t=a.charIndex,o=a.lineIndex;for(var r=0;r<o;r++)i+=this.getHeightOfLine(r);h=this._getLineLeftOffset(o);var l=this.__charBounds[o][t];return l&&(e=l.left),this.charSpacing!==0&&t===this._textLines[o].length&&(e-=this._getWidthOfCharSpacing()),n={top:i,left:h+(e>0?e:0)},this.direction==="rtl"&&(n.left*=-1),this.cursorOffsetCache=n,this.cursorOffsetCache},renderCursor:function(s,h){var o=this.get2DCursorLocation(),t=o.lineIndex,i=o.charIndex>0?o.charIndex-1:0,e=this.getValueOfPropertyAt(t,i,"fontSize"),n=this.scaleX*this.canvas.getZoom(),a=this.cursorWidth/n,r=s.topOffset,l=this.getValueOfPropertyAt(t,i,"deltaY");r+=(1-this._fontSizeFraction)*this.getHeightOfLine(t)/this.lineHeight-e*(1-this._fontSizeFraction),this.inCompositionMode&&this.renderSelection(s,h),h.fillStyle=this.cursorColor||this.getValueOfPropertyAt(t,i,"fill"),h.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,h.fillRect(s.left+s.leftOffset-a/2,r+s.top+l,a,e)},renderSelection:function(s,h){for(var o=this.inCompositionMode?this.hiddenTextarea.selectionStart:this.selectionStart,t=this.inCompositionMode?this.hiddenTextarea.selectionEnd:this.selectionEnd,i=this.textAlign.indexOf("justify")!==-1,e=this.get2DCursorLocation(o),n=this.get2DCursorLocation(t),a=e.lineIndex,r=n.lineIndex,l=e.charIndex<0?0:e.charIndex,f=n.charIndex<0?0:n.charIndex,d=a;d<=r;d++){var g=this._getLineLeftOffset(d)||0,p=this.getHeightOfLine(d),v=0,x=0,w=0;if(d===a&&(x=this.__charBounds[a][l].left),d>=a&&d<r)w=i&&!this.isEndOfWrapping(d)?this.width:this.getLineWidth(d)||5;else if(d===r)if(f===0)w=this.__charBounds[r][f].left;else{var F=this._getWidthOfCharSpacing();w=this.__charBounds[r][f-1].left+this.__charBounds[r][f-1].width-F}v=p,(this.lineHeight<1||d===r&&this.lineHeight>1)&&(p/=this.lineHeight);var Y=s.left+g+x,W=w-x,Z=p,Q=0;this.inCompositionMode?(h.fillStyle=this.compositionColor||"black",Z=1,Q=p):h.fillStyle=this.selectionColor,this.direction==="rtl"&&(Y=this.width-Y-W),h.fillRect(Y,s.top+s.topOffset+Q,W,Z),s.topOffset+=v}},getCurrentCharFontSize:function(){var s=this._getCurrentCharIndex();return this.getValueOfPropertyAt(s.l,s.c,"fontSize")},getCurrentCharColor:function(){var s=this._getCurrentCharIndex();return this.getValueOfPropertyAt(s.l,s.c,"fill")},_getCurrentCharIndex:function(){var s=this.get2DCursorLocation(this.selectionStart,!0),h=s.charIndex>0?s.charIndex-1:0;return{l:s.lineIndex,c:h}}}),u.IText.fromObject=function(s,h){var o=u.util.stylesFromArray(s.styles,s.text),t=Object.assign({},s,{styles:o});if(c(t),t.styles)for(var i in t.styles)for(var e in t.styles[i])c(t.styles[i][e]);u.Object._fromObject("IText",t,h,"text")}})(),(function(){var c=u.util.object.clone;u.util.object.extend(u.IText.prototype,{initBehavior:function(){this.initAddedHandler(),this.initRemovedHandler(),this.initCursorSelectionHandlers(),this.initDoubleClickSimulation(),this.mouseMoveHandler=this.mouseMoveHandler.bind(this)},onDeselect:function(){this.isEditing&&this.exitEditing(),this.selected=!1},initAddedHandler:function(){var s=this;this.on("added",function(){var h=s.canvas;h&&(h._hasITextHandlers||(h._hasITextHandlers=!0,s._initCanvasHandlers(h)),h._iTextInstances=h._iTextInstances||[],h._iTextInstances.push(s))})},initRemovedHandler:function(){var s=this;this.on("removed",function(){var h=s.canvas;h&&(h._iTextInstances=h._iTextInstances||[],u.util.removeFromArray(h._iTextInstances,s),h._iTextInstances.length===0&&(h._hasITextHandlers=!1,s._removeCanvasHandlers(h)))})},_initCanvasHandlers:function(s){s._mouseUpITextHandler=function(){s._iTextInstances&&s._iTextInstances.forEach(function(h){h.__isMousedown=!1})},s.on("mouse:up",s._mouseUpITextHandler)},_removeCanvasHandlers:function(s){s.off("mouse:up",s._mouseUpITextHandler)},_tick:function(){this._currentTickState=this._animateCursor(this,1,this.cursorDuration,"_onTickComplete")},_animateCursor:function(s,h,o,t){var i;return i={isAborted:!1,abort:function(){this.isAborted=!0}},s.animate("_currentCursorOpacity",h,{duration:o,onComplete:function(){i.isAborted||s[t]()},onChange:function(){s.canvas&&s.selectionStart===s.selectionEnd&&s.renderCursorOrSelection()},abort:function(){return i.isAborted}}),i},_onTickComplete:function(){var s=this;this._cursorTimeout1&&clearTimeout(this._cursorTimeout1),this._cursorTimeout1=setTimeout(function(){s._currentTickCompleteState=s._animateCursor(s,0,this.cursorDuration/2,"_tick")},100)},initDelayedCursor:function(s){var h=this,o=s?0:this.cursorDelay;this.abortCursorAnimation(),this._currentCursorOpacity=1,this._cursorTimeout2=setTimeout(function(){h._tick()},o)},abortCursorAnimation:function(){var s=this._currentTickState||this._currentTickCompleteState,h=this.canvas;this._currentTickState&&this._currentTickState.abort(),this._currentTickCompleteState&&this._currentTickCompleteState.abort(),clearTimeout(this._cursorTimeout1),clearTimeout(this._cursorTimeout2),this._currentCursorOpacity=0,s&&h&&h.clearContext(h.contextTop||h.contextContainer)},selectAll:function(){return this.selectionStart=0,this.selectionEnd=this._text.length,this._fireSelectionChanged(),this._updateTextarea(),this},getSelectedText:function(){return this._text.slice(this.selectionStart,this.selectionEnd).join("")},findWordBoundaryLeft:function(s){var h=0,o=s-1;if(this._reSpace.test(this._text[o]))for(;this._reSpace.test(this._text[o]);)h++,o--;for(;/\S/.test(this._text[o])&&o>-1;)h++,o--;return s-h},findWordBoundaryRight:function(s){var h=0,o=s;if(this._reSpace.test(this._text[o]))for(;this._reSpace.test(this._text[o]);)h++,o++;for(;/\S/.test(this._text[o])&&o<this._text.length;)h++,o++;return s+h},findLineBoundaryLeft:function(s){for(var h=0,o=s-1;!/\n/.test(this._text[o])&&o>-1;)h++,o--;return s-h},findLineBoundaryRight:function(s){for(var h=0,o=s;!/\n/.test(this._text[o])&&o<this._text.length;)h++,o++;return s+h},searchWordBoundary:function(s,h){for(var o=this._text,t=this._reSpace.test(o[s])?s-1:s,i=o[t],e=u.reNonWord;!e.test(i)&&t>0&&t<o.length;)t+=h,i=o[t];return e.test(i)&&(t+=h===1?0:1),t},selectWord:function(s){s=s||this.selectionStart;var h=this.searchWordBoundary(s,-1),o=this.searchWordBoundary(s,1);this.selectionStart=h,this.selectionEnd=o,this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()},selectLine:function(s){s=s||this.selectionStart;var h=this.findLineBoundaryLeft(s),o=this.findLineBoundaryRight(s);return this.selectionStart=h,this.selectionEnd=o,this._fireSelectionChanged(),this._updateTextarea(),this},enterEditing:function(s){if(!(this.isEditing||!this.editable))return this.canvas&&(this.canvas.calcOffset(),this.exitEditingOnOthers(this.canvas)),this.isEditing=!0,this.initHiddenTextarea(s),this.hiddenTextarea.focus(),this.hiddenTextarea.value=this.text,this._updateTextarea(),this._saveEditingProps(),this._setEditingProps(),this._textBeforeEdit=this.text,this._tick(),this.fire("editing:entered"),this._fireSelectionChanged(),this.canvas?(this.canvas.fire("text:editing:entered",{target:this}),this.initMouseMoveHandler(),this.canvas.requestRenderAll(),this):this},exitEditingOnOthers:function(s){s._iTextInstances&&s._iTextInstances.forEach(function(h){h.selected=!1,h.isEditing&&h.exitEditing()})},initMouseMoveHandler:function(){this.canvas.on("mouse:move",this.mouseMoveHandler)},mouseMoveHandler:function(s){if(!(!this.__isMousedown||!this.isEditing)){document.activeElement!==this.hiddenTextarea&&this.hiddenTextarea.focus();var h=this.getSelectionStartFromPointer(s.e),o=this.selectionStart,t=this.selectionEnd;(h!==this.__selectionStartOnMouseDown||o===t)&&(o===h||t===h)||(h>this.__selectionStartOnMouseDown?(this.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=h):(this.selectionStart=h,this.selectionEnd=this.__selectionStartOnMouseDown),(this.selectionStart!==o||this.selectionEnd!==t)&&(this.restartCursorIfNeeded(),this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()))}},_setEditingProps:function(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},fromStringToGraphemeSelection:function(s,h,o){var t=o.slice(0,s),i=u.util.string.graphemeSplit(t).length;if(s===h)return{selectionStart:i,selectionEnd:i};var e=o.slice(s,h),n=u.util.string.graphemeSplit(e).length;return{selectionStart:i,selectionEnd:i+n}},fromGraphemeToStringSelection:function(s,h,o){var t=o.slice(0,s),i=t.join("").length;if(s===h)return{selectionStart:i,selectionEnd:i};var e=o.slice(s,h),n=e.join("").length;return{selectionStart:i,selectionEnd:i+n}},_updateTextarea:function(){if(this.cursorOffsetCache={},!!this.hiddenTextarea){if(!this.inCompositionMode){var s=this.fromGraphemeToStringSelection(this.selectionStart,this.selectionEnd,this._text);this.hiddenTextarea.selectionStart=s.selectionStart,this.hiddenTextarea.selectionEnd=s.selectionEnd}this.updateTextareaPosition()}},updateFromTextArea:function(){if(this.hiddenTextarea){this.cursorOffsetCache={},this.text=this.hiddenTextarea.value,this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords());var s=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value);this.selectionEnd=this.selectionStart=s.selectionEnd,this.inCompositionMode||(this.selectionStart=s.selectionStart),this.updateTextareaPosition()}},updateTextareaPosition:function(){if(this.selectionStart===this.selectionEnd){var s=this._calcTextareaPosition();this.hiddenTextarea.style.left=s.left,this.hiddenTextarea.style.top=s.top}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var s=this.inCompositionMode?this.compositionStart:this.selectionStart,h=this._getCursorBoundaries(s),o=this.get2DCursorLocation(s),t=o.lineIndex,i=o.charIndex,e=this.getValueOfPropertyAt(t,i,"fontSize")*this.lineHeight,n=h.leftOffset,a=this.calcTransformMatrix(),r={x:h.left+n,y:h.top+h.topOffset+e},l=this.canvas.getRetinaScaling(),f=this.canvas.upperCanvasEl,d=f.width/l,g=f.height/l,p=d-e,v=g-e,x=f.clientWidth/d,w=f.clientHeight/g;return r=u.util.transformPoint(r,a),r=u.util.transformPoint(r,this.canvas.viewportTransform),r.x*=x,r.y*=w,r.x<0&&(r.x=0),r.x>p&&(r.x=p),r.y<0&&(r.y=0),r.y>v&&(r.y=v),r.x+=this.canvas._offset.left,r.y+=this.canvas._offset.top,{left:r.x+"px",top:r.y+"px",fontSize:e+"px",charHeight:e}},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,selectable:this.selectable,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}},_restoreEditingProps:function(){this._savedProps&&(this.hoverCursor=this._savedProps.hoverCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.selectable=this._savedProps.selectable,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor))},exitEditing:function(){var s=this._textBeforeEdit!==this.text,h=this.hiddenTextarea;return this.selected=!1,this.isEditing=!1,this.selectionEnd=this.selectionStart,h&&(h.blur&&h.blur(),h.parentNode&&h.parentNode.removeChild(h)),this.hiddenTextarea=null,this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this.fire("editing:exited"),s&&this.fire("modified"),this.canvas&&(this.canvas.off("mouse:move",this.mouseMoveHandler),this.canvas.fire("text:editing:exited",{target:this}),s&&this.canvas.fire("object:modified",{target:this})),this},_removeExtraneousStyles:function(){for(var s in this.styles)this._textLines[s]||delete this.styles[s]},removeStyleFromTo:function(s,h){var o=this.get2DCursorLocation(s,!0),t=this.get2DCursorLocation(h,!0),i=o.lineIndex,e=o.charIndex,n=t.lineIndex,a=t.charIndex,r,l;if(i!==n){if(this.styles[i])for(r=e;r<this._unwrappedTextLines[i].length;r++)delete this.styles[i][r];if(this.styles[n])for(r=a;r<this._unwrappedTextLines[n].length;r++)l=this.styles[n][r],l&&(this.styles[i]||(this.styles[i]={}),this.styles[i][e+r-a]=l);for(r=i+1;r<=n;r++)delete this.styles[r];this.shiftLineStyles(n,i-n)}else if(this.styles[i]){l=this.styles[i];var f=a-e,d,g;for(r=e;r<a;r++)delete l[r];for(g in this.styles[i])d=parseInt(g,10),d>=a&&(l[d-f]=l[g],delete l[g])}},shiftLineStyles:function(s,h){var o=c(this.styles);for(var t in this.styles){var i=parseInt(t,10);i>s&&(this.styles[i+h]=o[i],o[i-h]||delete this.styles[i])}},restartCursorIfNeeded:function(){(!this._currentTickState||this._currentTickState.isAborted||!this._currentTickCompleteState||this._currentTickCompleteState.isAborted)&&this.initDelayedCursor()},insertNewlineStyleObject:function(s,h,o,t){var i,e={},n=!1,a=this._unwrappedTextLines[s].length===h;o||(o=1),this.shiftLineStyles(s,o),this.styles[s]&&(i=this.styles[s][h===0?h:h-1]);for(var r in this.styles[s]){var l=parseInt(r,10);l>=h&&(n=!0,e[l-h]=this.styles[s][r],a&&h===0||delete this.styles[s][r])}var f=!1;for(n&&!a&&(this.styles[s+o]=e,f=!0),f&&o--;o>0;)t&&t[o-1]?this.styles[s+o]={0:c(t[o-1])}:i?this.styles[s+o]={0:c(i)}:delete this.styles[s+o],o--;this._forceClearCache=!0},insertCharStyleObject:function(s,h,o,t){this.styles||(this.styles={});var i=this.styles[s],e=i?c(i):{};o||(o=1);for(var n in e){var a=parseInt(n,10);a>=h&&(i[a+o]=e[a],e[a-o]||delete i[a])}if(this._forceClearCache=!0,t){for(;o--;)Object.keys(t[o]).length&&(this.styles[s]||(this.styles[s]={}),this.styles[s][h+o]=c(t[o]));return}if(i)for(var r=i[h?h-1:1];r&&o--;)this.styles[s][h+o]=c(r)},insertNewStyleBlock:function(s,h,o){for(var t=this.get2DCursorLocation(h,!0),i=[0],e=0,n=0;n<s.length;n++)s[n]===`
438
+ `?(e++,i[e]=0):i[e]++;i[0]>0&&(this.insertCharStyleObject(t.lineIndex,t.charIndex,i[0],o),o=o&&o.slice(i[0]+1)),e&&this.insertNewlineStyleObject(t.lineIndex,t.charIndex+i[0],e);for(var n=1;n<e;n++)i[n]>0?this.insertCharStyleObject(t.lineIndex+n,0,i[n],o):o&&this.styles[t.lineIndex+n]&&o[0]&&(this.styles[t.lineIndex+n][0]=o[0]),o=o&&o.slice(i[n]+1);i[n]>0&&this.insertCharStyleObject(t.lineIndex+n,0,i[n],o)},setSelectionStartEndWithShift:function(s,h,o){o<=s?(h===s?this._selectionDirection="left":this._selectionDirection==="right"&&(this._selectionDirection="left",this.selectionEnd=s),this.selectionStart=o):o>s&&o<h?this._selectionDirection==="right"?this.selectionEnd=o:this.selectionStart=o:(h===s?this._selectionDirection="right":this._selectionDirection==="left"&&(this._selectionDirection="right",this.selectionStart=h),this.selectionEnd=o)},setSelectionInBoundaries:function(){var s=this.text.length;this.selectionStart>s?this.selectionStart=s:this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd>s?this.selectionEnd=s:this.selectionEnd<0&&(this.selectionEnd=0)}})})(),u.util.object.extend(u.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+new Date,this.__lastLastClickTime=+new Date,this.__lastPointer={},this.on("mousedown",this.onMouseDown)},onMouseDown:function(c){if(this.canvas){this.__newClickTime=+new Date;var s=c.pointer;this.isTripleClick(s)&&(this.fire("tripleclick",c),this._stopEvent(c.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=s,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected}},isTripleClick:function(c){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===c.x&&this.__lastPointer.y===c.y},_stopEvent:function(c){c.preventDefault&&c.preventDefault(),c.stopPropagation&&c.stopPropagation()},initCursorSelectionHandlers:function(){this.initMousedownHandler(),this.initMouseupHandler(),this.initClicks()},doubleClickHandler:function(c){this.isEditing&&this.selectWord(this.getSelectionStartFromPointer(c.e))},tripleClickHandler:function(c){this.isEditing&&this.selectLine(this.getSelectionStartFromPointer(c.e))},initClicks:function(){this.on("mousedblclick",this.doubleClickHandler),this.on("tripleclick",this.tripleClickHandler)},_mouseDownHandler:function(c){!this.canvas||!this.editable||c.e.button&&c.e.button!==1||(this.__isMousedown=!0,this.selected&&(this.inCompositionMode=!1,this.setCursorByClick(c.e)),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection()))},_mouseDownHandlerBefore:function(c){!this.canvas||!this.editable||c.e.button&&c.e.button!==1||(this.selected=this===this.canvas._activeObject)},initMousedownHandler:function(){this.on("mousedown",this._mouseDownHandler),this.on("mousedown:before",this._mouseDownHandlerBefore)},initMouseupHandler:function(){this.on("mouseup",this.mouseUpHandler)},mouseUpHandler:function(c){if(this.__isMousedown=!1,!(!this.editable||this.group||c.transform&&c.transform.actionPerformed||c.e.button&&c.e.button!==1)){if(this.canvas){var s=this.canvas._activeObject;if(s&&s!==this)return}this.__lastSelected&&!this.__corner?(this.selected=!1,this.__lastSelected=!1,this.enterEditing(c.e),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection()):this.selected=!0}},setCursorByClick:function(c){var s=this.getSelectionStartFromPointer(c),h=this.selectionStart,o=this.selectionEnd;c.shiftKey?this.setSelectionStartEndWithShift(h,o,s):(this.selectionStart=s,this.selectionEnd=s),this.isEditing&&(this._fireSelectionChanged(),this._updateTextarea())},getSelectionStartFromPointer:function(c){for(var s=this.getLocalPointer(c),h=0,o=0,t=0,i=0,e=0,n,a,r=0,l=this._textLines.length;r<l&&t<=s.y;r++)t+=this.getHeightOfLine(r)*this.scaleY,e=r,r>0&&(i+=this._textLines[r-1].length+this.missingNewlineOffset(r-1));n=this._getLineLeftOffset(e),o=n*this.scaleX,a=this._textLines[e],this.direction==="rtl"&&(s.x=this.width*this.scaleX-s.x+o);for(var f=0,d=a.length;f<d&&(h=o,o+=this.__charBounds[e][f].kernedWidth*this.scaleX,o<=s.x);f++)i++;return this._getNewSelectionStartFromOffset(s,h,o,i,d)},_getNewSelectionStartFromOffset:function(c,s,h,o,t){var i=c.x-s,e=h-c.x,n=e>i||e<0?0:1,a=o+n;return this.flipX&&(a=t-a),a>this._text.length&&(a=this._text.length),a}}),u.util.object.extend(u.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=u.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.setAttribute("autocorrect","off"),this.hiddenTextarea.setAttribute("autocomplete","off"),this.hiddenTextarea.setAttribute("spellcheck","false"),this.hiddenTextarea.setAttribute("data-fabric-hiddentextarea",""),this.hiddenTextarea.setAttribute("wrap","off");var c=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="position: absolute; top: "+c.top+"; left: "+c.left+"; z-index: -999; opacity: 0; width: 1px; height: 1px; font-size: 1px; padding-top: "+c.fontSize+";",this.hiddenTextareaContainer?this.hiddenTextareaContainer.appendChild(this.hiddenTextarea):u.document.body.appendChild(this.hiddenTextarea),u.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),u.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),u.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),u.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),u.util.addListener(this.hiddenTextarea,"cut",this.copy.bind(this)),u.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),u.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),u.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),u.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(u.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},keysMap:{9:"exitEditing",27:"exitEditing",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown"},keysMapRtl:{9:"exitEditing",27:"exitEditing",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorLeft",36:"moveCursorRight",37:"moveCursorRight",38:"moveCursorUp",39:"moveCursorLeft",40:"moveCursorDown"},ctrlKeysMapUp:{67:"copy",88:"cut"},ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(c){if(this.isEditing){var s=this.direction==="rtl"?this.keysMapRtl:this.keysMap;if(c.keyCode in s)this[s[c.keyCode]](c);else if(c.keyCode in this.ctrlKeysMapDown&&(c.ctrlKey||c.metaKey))this[this.ctrlKeysMapDown[c.keyCode]](c);else return;c.stopImmediatePropagation(),c.preventDefault(),c.keyCode>=33&&c.keyCode<=40?(this.inCompositionMode=!1,this.clearContextTop(),this.renderCursorOrSelection()):this.canvas&&this.canvas.requestRenderAll()}},onKeyUp:function(c){if(!this.isEditing||this._copyDone||this.inCompositionMode){this._copyDone=!1;return}if(c.keyCode in this.ctrlKeysMapUp&&(c.ctrlKey||c.metaKey))this[this.ctrlKeysMapUp[c.keyCode]](c);else return;c.stopImmediatePropagation(),c.preventDefault(),this.canvas&&this.canvas.requestRenderAll()},onInput:function(c){var s=this.fromPaste;if(this.fromPaste=!1,c&&c.stopPropagation(),!!this.isEditing){var h=this._splitTextIntoLines(this.hiddenTextarea.value).graphemeText,o=this._text.length,t=h.length,i,e,n=t-o,a=this.selectionStart,r=this.selectionEnd,l=a!==r,f,d,g;if(this.hiddenTextarea.value===""){this.styles={},this.updateFromTextArea(),this.fire("changed"),this.canvas&&(this.canvas.fire("text:changed",{target:this}),this.canvas.requestRenderAll());return}var p=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value),v=a>p.selectionStart;l?(i=this._text.slice(a,r),n+=r-a):t<o&&(v?i=this._text.slice(r+n,r):i=this._text.slice(a,a-n)),e=h.slice(p.selectionEnd-n,p.selectionEnd),i&&i.length&&(e.length&&(f=this.getSelectionStyles(a,a+1,!1),f=e.map(function(){return f[0]})),l?(d=a,g=r):v?(d=r-i.length,g=r):(d=r,g=r+i.length),this.removeStyleFromTo(d,g)),e.length&&(s&&e.join("")===u.copiedText&&!u.disableStyleCopyPaste&&(f=u.copiedTextStyle),this.insertNewStyleBlock(e,a,f)),this.updateFromTextArea(),this.fire("changed"),this.canvas&&(this.canvas.fire("text:changed",{target:this}),this.canvas.requestRenderAll())}},onCompositionStart:function(){this.inCompositionMode=!0},onCompositionEnd:function(){this.inCompositionMode=!1},onCompositionUpdate:function(c){this.compositionStart=c.target.selectionStart,this.compositionEnd=c.target.selectionEnd,this.updateTextareaPosition()},copy:function(){this.selectionStart!==this.selectionEnd&&(u.copiedText=this.getSelectedText(),u.disableStyleCopyPaste?u.copiedTextStyle=null:u.copiedTextStyle=this.getSelectionStyles(this.selectionStart,this.selectionEnd,!0),this._copyDone=!0)},paste:function(){this.fromPaste=!0},_getClipboardData:function(c){return c&&c.clipboardData||u.window.clipboardData},_getWidthBeforeCursor:function(c,s){var h=this._getLineLeftOffset(c),o;return s>0&&(o=this.__charBounds[c][s-1],h+=o.left+o.width),h},getDownCursorOffset:function(c,s){var h=this._getSelectionForOffset(c,s),o=this.get2DCursorLocation(h),t=o.lineIndex;if(t===this._textLines.length-1||c.metaKey||c.keyCode===34)return this._text.length-h;var i=o.charIndex,e=this._getWidthBeforeCursor(t,i),n=this._getIndexOnLine(t+1,e),a=this._textLines[t].slice(i);return a.length+n+1+this.missingNewlineOffset(t)},_getSelectionForOffset:function(c,s){return c.shiftKey&&this.selectionStart!==this.selectionEnd&&s?this.selectionEnd:this.selectionStart},getUpCursorOffset:function(c,s){var h=this._getSelectionForOffset(c,s),o=this.get2DCursorLocation(h),t=o.lineIndex;if(t===0||c.metaKey||c.keyCode===33)return-h;var i=o.charIndex,e=this._getWidthBeforeCursor(t,i),n=this._getIndexOnLine(t-1,e),a=this._textLines[t].slice(0,i),r=this.missingNewlineOffset(t-1);return-this._textLines[t-1].length+n-a.length+(1-r)},_getIndexOnLine:function(c,s){for(var h=this._textLines[c],o=this._getLineLeftOffset(c),t=o,i=0,e,n,a=0,r=h.length;a<r;a++)if(e=this.__charBounds[c][a].width,t+=e,t>s){n=!0;var l=t-e,f=t,d=Math.abs(l-s),g=Math.abs(f-s);i=g<d?a:a-1;break}return n||(i=h.length-1),i},moveCursorDown:function(c){this.selectionStart>=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorUpOrDown("Down",c)},moveCursorUp:function(c){this.selectionStart===0&&this.selectionEnd===0||this._moveCursorUpOrDown("Up",c)},_moveCursorUpOrDown:function(c,s){var h="get"+c+"CursorOffset",o=this[h](s,this._selectionDirection==="right");s.shiftKey?this.moveCursorWithShift(o):this.moveCursorWithoutShift(o),o!==0&&(this.setSelectionInBoundaries(),this.abortCursorAnimation(),this._currentCursorOpacity=1,this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorWithShift:function(c){var s=this._selectionDirection==="left"?this.selectionStart+c:this.selectionEnd+c;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,s),c!==0},moveCursorWithoutShift:function(c){return c<0?(this.selectionStart+=c,this.selectionEnd=this.selectionStart):(this.selectionEnd+=c,this.selectionStart=this.selectionEnd),c!==0},moveCursorLeft:function(c){this.selectionStart===0&&this.selectionEnd===0||this._moveCursorLeftOrRight("Left",c)},_move:function(c,s,h){var o;if(c.altKey)o=this["findWordBoundary"+h](this[s]);else if(c.metaKey||c.keyCode===35||c.keyCode===36)o=this["findLineBoundary"+h](this[s]);else return this[s]+=h==="Left"?-1:1,!0;if(typeof o<"u"&&this[s]!==o)return this[s]=o,!0},_moveLeft:function(c,s){return this._move(c,s,"Left")},_moveRight:function(c,s){return this._move(c,s,"Right")},moveCursorLeftWithoutShift:function(c){var s=!0;return this._selectionDirection="left",this.selectionEnd===this.selectionStart&&this.selectionStart!==0&&(s=this._moveLeft(c,"selectionStart")),this.selectionEnd=this.selectionStart,s},moveCursorLeftWithShift:function(c){if(this._selectionDirection==="right"&&this.selectionStart!==this.selectionEnd)return this._moveLeft(c,"selectionEnd");if(this.selectionStart!==0)return this._selectionDirection="left",this._moveLeft(c,"selectionStart")},moveCursorRight:function(c){this.selectionStart>=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorLeftOrRight("Right",c)},_moveCursorLeftOrRight:function(c,s){var h="moveCursor"+c+"With";this._currentCursorOpacity=1,s.shiftKey?h+="Shift":h+="outShift",this[h](s)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorRightWithShift:function(c){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd)return this._moveRight(c,"selectionStart");if(this.selectionEnd!==this._text.length)return this._selectionDirection="right",this._moveRight(c,"selectionEnd")},moveCursorRightWithoutShift:function(c){var s=!0;return this._selectionDirection="right",this.selectionStart===this.selectionEnd?(s=this._moveRight(c,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,s},removeChars:function(c,s){typeof s>"u"&&(s=c+1),this.removeStyleFromTo(c,s),this._text.splice(c,s-c),this.text=this._text.join(""),this.set("dirty",!0),this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this._removeExtraneousStyles()},insertChars:function(c,s,h,o){typeof o>"u"&&(o=h),o>h&&this.removeStyleFromTo(h,o);var t=u.util.string.graphemeSplit(c);this.insertNewStyleBlock(t,h,s),this._text=[].concat(this._text.slice(0,h),t,this._text.slice(o)),this.text=this._text.join(""),this.set("dirty",!0),this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this._removeExtraneousStyles()}}),(function(){var c=u.util.toFixed,s=/ +/g;u.util.object.extend(u.Text.prototype,{_toSVG:function(){var h=this._getSVGLeftTopOffsets(),o=this._getSVGTextAndBg(h.textTop,h.textLeft);return this._wrapSVGTextAndBg(o)},toSVG:function(h){return this._createBaseSVGMarkup(this._toSVG(),{reviver:h,noStyle:!0,withShadow:!0})},_getSVGLeftTopOffsets:function(){return{textLeft:-this.width/2,textTop:-this.height/2,lineTop:this.getHeightOfLine(0)}},_wrapSVGTextAndBg:function(h){var o=!0,t=this.getSvgTextDecoration(this);return[h.textBgRects.join(""),' <text xml:space="preserve" ',this.fontFamily?'font-family="'+this.fontFamily.replace(/"/g,"'")+'" ':"",this.fontSize?'font-size="'+this.fontSize+'" ':"",this.fontStyle?'font-style="'+this.fontStyle+'" ':"",this.fontWeight?'font-weight="'+this.fontWeight+'" ':"",t?'text-decoration="'+t+'" ':"",'style="',this.getSvgStyles(o),'"',this.addPaintOrder()," >",h.textSpans.join(""),`</text>
439
+ `]},_getSVGTextAndBg:function(h,o){var t=[],i=[],e=h,n;this._setSVGBg(i);for(var a=0,r=this._textLines.length;a<r;a++)n=this._getLineLeftOffset(a),(this.textBackgroundColor||this.styleHas("textBackgroundColor",a))&&this._setSVGTextLineBg(i,a,o+n,e),this._setSVGTextLineText(t,a,o+n,e),e+=this.getHeightOfLine(a);return{textSpans:t,textBgRects:i}},_createTextCharSpan:function(h,o,t,i){var e=h!==h.trim()||h.match(s),n=this.getSvgSpanStyles(o,e),a=n?'style="'+n+'"':"",r=o.deltaY,l="",f=u.Object.NUM_FRACTION_DIGITS;return r&&(l=' dy="'+c(r,f)+'" '),['<tspan x="',c(t,f),'" y="',c(i,f),'" ',l,a,">",u.util.string.escapeXml(h),"</tspan>"].join("")},_setSVGTextLineText:function(h,o,t,i){var e=this.getHeightOfLine(o),n=this.textAlign.indexOf("justify")!==-1,a,r,l="",f,d,g=0,p=this._textLines[o],v;i+=e*(1-this._fontSizeFraction)/this.lineHeight;for(var x=0,w=p.length-1;x<=w;x++)v=x===w||this.charSpacing,l+=p[x],f=this.__charBounds[o][x],g===0?(t+=f.kernedWidth-f.width,g+=f.width):g+=f.kernedWidth,n&&!v&&this._reSpaceAndTab.test(p[x])&&(v=!0),v||(a=a||this.getCompleteStyleDeclaration(o,x),r=this.getCompleteStyleDeclaration(o,x+1),v=u.util.hasStyleChanged(a,r,!0)),v&&(d=this._getStyleDeclaration(o,x)||{},h.push(this._createTextCharSpan(l,d,t,i)),l="",a=r,t+=g,g=0)},_pushTextBgRect:function(h,o,t,i,e,n){var a=u.Object.NUM_FRACTION_DIGITS;h.push(" <rect ",this._getFillAttributes(o),' x="',c(t,a),'" y="',c(i,a),'" width="',c(e,a),'" height="',c(n,a),`"></rect>
440
+ `)},_setSVGTextLineBg:function(h,o,t,i){for(var e=this._textLines[o],n=this.getHeightOfLine(o)/this.lineHeight,a=0,r=0,l,f,d=this.getValueOfPropertyAt(o,0,"textBackgroundColor"),g=0,p=e.length;g<p;g++)l=this.__charBounds[o][g],f=this.getValueOfPropertyAt(o,g,"textBackgroundColor"),f!==d?(d&&this._pushTextBgRect(h,d,t+r,i,a,n),r=l.left,a=l.width,d=f):a+=l.kernedWidth;f&&this._pushTextBgRect(h,f,t+r,i,a,n)},_getFillAttributes:function(h){var o=h&&typeof h=="string"?new u.Color(h):"";return!o||!o.getSource()||o.getAlpha()===1?'fill="'+h+'"':'opacity="'+o.getAlpha()+'" fill="'+o.setAlpha(1).toRgb()+'"'},_getSVGLineTopOffset:function(h){for(var o=0,t=0,i=0;i<h;i++)o+=this.getHeightOfLine(i);return t=this.getHeightOfLine(i),{lineTop:o,offset:(this._fontSizeMult-this._fontSizeFraction)*t/(this.lineHeight*this._fontSizeMult)}},getSvgStyles:function(h){var o=u.Object.prototype.getSvgStyles.call(this,h);return o+" white-space: pre;"}})})(),(function(c){var s=c.fabric||(c.fabric={});s.Textbox=s.util.createClass(s.IText,s.Observable,{type:"textbox",minWidth:20,dynamicMinWidth:2,__cachedLines:null,lockScalingFlip:!0,noScaleCache:!1,_dimensionAffectingProps:s.Text.prototype._dimensionAffectingProps.concat("width"),_wordJoiners:/[ \t\r]/,splitByGrapheme:!1,initDimensions:function(){this.__skipDimension||(this.isEditing&&this.initDelayedCursor(),this.clearContextTop(),this._clearCache(),this.dynamicMinWidth=0,this._styleMap=this._generateStyleMap(this._splitText()),this.dynamicMinWidth>this.width&&this._set("width",this.dynamicMinWidth),this.textAlign.indexOf("justify")!==-1&&this.enlargeSpaces(),this.height=this.calcTextHeight(),this.saveState({propertySet:"_dimensionAffectingProps"}))},_generateStyleMap:function(h){for(var o=0,t=0,i=0,e={},n=0;n<h.graphemeLines.length;n++)h.graphemeText[i]===`
441
+ `&&n>0?(t=0,i++,o++):!this.splitByGrapheme&&this._reSpaceAndTab.test(h.graphemeText[i])&&n>0&&(t++,i++),e[n]={line:o,offset:t},i+=h.graphemeLines[n].length,t+=h.graphemeLines[n].length;return e},styleHas:function(h,o){if(this._styleMap&&!this.isWrapping){var t=this._styleMap[o];t&&(o=t.line)}return s.Text.prototype.styleHas.call(this,h,o)},isEmptyStyles:function(h){if(!this.styles)return!0;var o=0,t=h+1,i,e,n=!1,a=this._styleMap[h],r=this._styleMap[h+1];a&&(h=a.line,o=a.offset),r&&(t=r.line,n=t===h,i=r.offset),e=typeof h>"u"?this.styles:{line:this.styles[h]};for(var l in e)for(var f in e[l])if(f>=o&&(!n||f<i))for(var d in e[l][f])return!1;return!0},_getStyleDeclaration:function(h,o){if(this._styleMap&&!this.isWrapping){var t=this._styleMap[h];if(!t)return null;h=t.line,o=t.offset+o}return this.callSuper("_getStyleDeclaration",h,o)},_setStyleDeclaration:function(h,o,t){var i=this._styleMap[h];h=i.line,o=i.offset+o,this.styles[h][o]=t},_deleteStyleDeclaration:function(h,o){var t=this._styleMap[h];h=t.line,o=t.offset+o,delete this.styles[h][o]},_getLineStyle:function(h){var o=this._styleMap[h];return!!this.styles[o.line]},_setLineStyle:function(h){var o=this._styleMap[h];this.styles[o.line]={}},_wrapText:function(h,o){var t=[],i;for(this.isWrapping=!0,i=0;i<h.length;i++)t=t.concat(this._wrapLine(h[i],i,o));return this.isWrapping=!1,t},_measureWord:function(h,o,t){var i=0,e,n=!0;t=t||0;for(var a=0,r=h.length;a<r;a++){var l=this._getGraphemeBox(h[a],o,a+t,e,n);i+=l.kernedWidth,e=h[a]}return i},_wrapLine:function(h,o,t,Y){var e=0,n=this.splitByGrapheme,a=[],r=[],l=n?s.util.string.graphemeSplit(h):h.split(this._wordJoiners),f="",d=0,g=n?"":" ",p=0,v=0,x=0,w=!0,F=this._getWidthOfCharSpacing(),Y=Y||0;l.length===0&&l.push([]),t-=Y;for(var W=0;W<l.length;W++)f=n?l[W]:s.util.string.graphemeSplit(l[W]),p=this._measureWord(f,o,d),d+=f.length,e+=v+p-F,e>t&&!w?(a.push(r),r=[],e=p,w=!0):e+=F,!w&&!n&&r.push(g),r=r.concat(f),v=n?0:this._measureWord([g],o,d),d++,w=!1,p>x&&(x=p);return W&&a.push(r),x+Y>this.dynamicMinWidth&&(this.dynamicMinWidth=x-F+Y),a},isEndOfWrapping:function(h){return!this._styleMap[h+1]||this._styleMap[h+1].line!==this._styleMap[h].line},missingNewlineOffset:function(h){return this.splitByGrapheme?this.isEndOfWrapping(h)?1:0:1},_splitTextIntoLines:function(h){for(var o=s.Text.prototype._splitTextIntoLines.call(this,h),t=this._wrapText(o.lines,this.width),i=new Array(t.length),e=0;e<t.length;e++)i[e]=t[e].join("");return o.lines=i,o.graphemeLines=t,o},getMinWidth:function(){return Math.max(this.minWidth,this.dynamicMinWidth)},_removeExtraneousStyles:function(){var h={};for(var o in this._styleMap)this._textLines[o]&&(h[this._styleMap[o].line]=1);for(var o in this.styles)h[o]||delete this.styles[o]},toObject:function(h){return this.callSuper("toObject",["minWidth","splitByGrapheme"].concat(h))}}),s.Textbox.fromObject=function(h,o){var t=s.util.stylesFromArray(h.styles,h.text),i=Object.assign({},h,{styles:t});return s.Object._fromObject("Textbox",i,o,"text")}})(m),(function(){var c=u.controlsUtils,s=c.scaleSkewCursorStyleHandler,h=c.scaleCursorStyleHandler,o=c.scalingEqually,t=c.scalingYOrSkewingX,i=c.scalingXOrSkewingY,e=c.scaleOrSkewActionName,n=u.Object.prototype.controls;if(n.ml=new u.Control({x:-.5,y:0,cursorStyleHandler:s,actionHandler:i,getActionName:e}),n.mr=new u.Control({x:.5,y:0,cursorStyleHandler:s,actionHandler:i,getActionName:e}),n.mb=new u.Control({x:0,y:.5,cursorStyleHandler:s,actionHandler:t,getActionName:e}),n.mt=new u.Control({x:0,y:-.5,cursorStyleHandler:s,actionHandler:t,getActionName:e}),n.tl=new u.Control({x:-.5,y:-.5,cursorStyleHandler:h,actionHandler:o}),n.tr=new u.Control({x:.5,y:-.5,cursorStyleHandler:h,actionHandler:o}),n.bl=new u.Control({x:-.5,y:.5,cursorStyleHandler:h,actionHandler:o}),n.br=new u.Control({x:.5,y:.5,cursorStyleHandler:h,actionHandler:o}),n.mtr=new u.Control({x:0,y:-.5,actionHandler:c.rotationWithSnapping,cursorStyleHandler:c.rotationStyleHandler,offsetY:-40,withConnection:!0,actionName:"rotate"}),u.Textbox){var a=u.Textbox.prototype.controls={};a.mtr=n.mtr,a.tr=n.tr,a.br=n.br,a.tl=n.tl,a.bl=n.bl,a.mt=n.mt,a.mb=n.mb,a.mr=new u.Control({x:.5,y:0,actionHandler:c.changeWidth,cursorStyleHandler:s,actionName:"resizing"}),a.ml=new u.Control({x:-.5,y:0,actionHandler:c.changeWidth,cursorStyleHandler:s,actionName:"resizing"})}})()})(ee)),ee}var mi=pi();const vi=mi.fabric,_i=(m,u)=>{const k=u?.excludes?.reduce((B,V)=>(B[V]=1,B),{})||{};Gt.pluginsList.forEach(B=>{k[B.pluginName]||m.use(B,u?.options?.[B.pluginName])})};exports.Editor=Ce;Object.defineProperty(exports,"SelectEvent",{enumerable:!0,get:()=>Gt.SelectEvent});Object.defineProperty(exports,"SelectMode",{enumerable:!0,get:()=>Gt.SelectMode});exports.LengthConvert=Se;exports.fabric=vi;exports.usePlugins=_i;